// // Copyright 2024 The ANGLE Project Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. // // clspv_utils: // Utilities to map clspv interface variables to OpenCL and Vulkan mappings. // #ifndef LIBANGLE_RENDERER_VULKAN_CLSPV_UTILS_H_ #define LIBANGLE_RENDERER_VULKAN_CLSPV_UTILS_H_ #include #include #include #include "clspv/Compiler.h" #include "clspv/Sampler.h" #include "spirv-tools/libspirv.h" namespace rx { struct ClspvPrintfBufferStorage { uint32_t descriptorSet = 0; uint32_t binding = 0; uint32_t pcOffset = 0; uint32_t size = 0; }; struct ClspvPrintfInfo { uint32_t id = 0; std::string formatSpecifier; std::vector argSizes; }; struct ClspvLiteralSampler { uint32_t descriptorSet; uint32_t binding; cl_bool normalizedCoords; cl::AddressingMode addressingMode; cl::FilterMode filterMode; }; namespace clspv_cl { cl::AddressingMode GetAddressingMode(uint32_t mask); cl::FilterMode GetFilterMode(uint32_t mask); inline bool IsNormalizedCoords(uint32_t mask) { return (mask & clspv::kSamplerNormalizedCoordsMask) == clspv::CLK_NORMALIZED_COORDS_TRUE; } } // namespace clspv_cl angle::Result ClspvProcessPrintfBuffer(unsigned char *buffer, const size_t bufferSize, const angle::HashMap *infoMap); // Populate a list of options that can be supported by clspv based on the features supported by the // vulkan renderer. std::string ClspvGetCompilerOptions(const CLDeviceVk *device); ClspvError ClspvCompileSource(const size_t programCount, const size_t *programSizes, const char **programs, const char *options, char **outputBinary, size_t *outputBinarySize, char **outputLog); spv_target_env ClspvGetSpirvVersion(const vk::Renderer *renderer); bool ClspvValidate(vk::Renderer *rendererVk, const angle::spirv::Blob &blob); } // namespace rx #endif // LIBANGLE_RENDERER_VULKAN_CLSPV_UTILS_H_