diff --git a/include/vkcv/Sampler.hpp b/include/vkcv/Sampler.hpp index 891a96f869c03f5f4a064116bff603acbf2d47e3..141c4511b344f2a6d5e26de0c8ff42b63b9372e1 100644 --- a/include/vkcv/Sampler.hpp +++ b/include/vkcv/Sampler.hpp @@ -7,16 +7,25 @@ namespace vkcv { + /** + * Enum class to specify a samplers type to filter during access. + */ enum class SamplerFilterType { NEAREST = 1, LINEAR = 2 }; - + + /** + * Enum class to specify a samplers mode to access mipmaps. + */ enum class SamplerMipmapMode { NEAREST = 1, LINEAR = 2 }; - + + /** + * Enum class to specify a samplers mode to access via address space. + */ enum class SamplerAddressMode { REPEAT = 1, MIRRORED_REPEAT = 2, @@ -24,7 +33,10 @@ namespace vkcv { MIRROR_CLAMP_TO_EDGE = 4, CLAMP_TO_BORDER = 5 }; - + + /** + * Enum class to specify a samplers color beyond a textures border. + */ enum class SamplerBorderColor { INT_ZERO_OPAQUE = 1, INT_ZERO_TRANSPARENT = 2, diff --git a/include/vkcv/ShaderProgram.hpp b/include/vkcv/ShaderProgram.hpp index 0c2dbdfb8f55bb9f537760428a0c3aa1e7102c46..9957f4ff0fbb5fc1851d1e66c139f80c8944f7b4 100644 --- a/include/vkcv/ShaderProgram.hpp +++ b/include/vkcv/ShaderProgram.hpp @@ -19,12 +19,6 @@ namespace vkcv { - struct Shader - { - std::vector<char> shaderCode; - ShaderStage shaderStage; - }; - class ShaderProgram { public: @@ -48,14 +42,13 @@ namespace vkcv { bool addShader(ShaderStage stage, const std::filesystem::path &path); /** - * @brief Returns the shader of a specified stage from the program. + * @brief Returns the shader binary of a specified stage from the program. * Needed for the transfer to the pipeline. * * @param[in] stage The stage of the shader - * @return Shader object consisting of buffer with shader code and - * shader stage enum + * @return Shader code binary of the given stage */ - const Shader &getShader(ShaderStage stage) const; + const std::vector<char> &getShaderBinary(ShaderStage stage) const; /** * @brief Returns whether a shader exists in the program for a @@ -98,11 +91,12 @@ namespace vkcv { */ void reflectShader(ShaderStage shaderStage); - std::unordered_map<ShaderStage, Shader> m_Shaders; + std::unordered_map<ShaderStage, std::vector<char> > m_Shaders; // contains all vertex input attachments used in the vertex buffer std::vector<VertexAttachment> m_VertexAttachments; std::unordered_map<uint32_t, DescriptorBindings> m_DescriptorSets; size_t m_pushConstantsSize = 0; }; + } diff --git a/projects/rtx_ambient_occlusion/src/RTX/RTX.cpp b/projects/rtx_ambient_occlusion/src/RTX/RTX.cpp index 00533bc3668a54f245777c7bca4abb56afd3f056..e3c87ffc79dc948d867fcb83868ff675182c3a2b 100644 --- a/projects/rtx_ambient_occlusion/src/RTX/RTX.cpp +++ b/projects/rtx_ambient_occlusion/src/RTX/RTX.cpp @@ -147,7 +147,7 @@ namespace vkcv::rtx { void RTXModule::createRTXPipelineAndLayout(uint32_t pushConstantSize, std::vector<DescriptorSetLayoutHandle> descriptorSetLayouts, ShaderProgram &rtxShader) { // -- process vkcv::ShaderProgram into vk::ShaderModule - std::vector<char> rayGenShaderCode = rtxShader.getShader(ShaderStage::RAY_GEN).shaderCode; + std::vector<char> rayGenShaderCode = rtxShader.getShaderBinary(ShaderStage::RAY_GEN); vk::ShaderModuleCreateInfo rayGenShaderModuleInfo( vk::ShaderModuleCreateFlags(), // vk::ShaderModuleCreateFlags flags_, @@ -159,7 +159,7 @@ namespace vkcv::rtx { vkcv_log(LogLevel::ERROR, "The Ray Generation Shader Module could not be created!"); } - std::vector<char> rayMissShaderCode = rtxShader.getShader(ShaderStage::RAY_MISS).shaderCode; + std::vector<char> rayMissShaderCode = rtxShader.getShaderBinary(ShaderStage::RAY_MISS); vk::ShaderModuleCreateInfo rayMissShaderModuleInfo( vk::ShaderModuleCreateFlags(), // vk::ShaderModuleCreateFlags flags_, rayMissShaderCode.size(), //size_t codeSize @@ -171,7 +171,7 @@ namespace vkcv::rtx { vkcv_log(LogLevel::ERROR, "The Ray Miss Shader Module could not be created!"); } - std::vector<char> rayClosestHitShaderCode = rtxShader.getShader(ShaderStage::RAY_CLOSEST_HIT).shaderCode; + std::vector<char> rayClosestHitShaderCode = rtxShader.getShaderBinary(ShaderStage::RAY_CLOSEST_HIT); vk::ShaderModuleCreateInfo rayClosestHitShaderModuleInfo( vk::ShaderModuleCreateFlags(), // vk::ShaderModuleCreateFlags flags_, rayClosestHitShaderCode.size(), //size_t codeSize diff --git a/src/vkcv/ComputePipelineManager.cpp b/src/vkcv/ComputePipelineManager.cpp index be1caf18264994ebf2b12d5be941e1308ce50cc5..2cf8f5efcd10ec3485b2bc746b9de7fbedee6404 100644 --- a/src/vkcv/ComputePipelineManager.cpp +++ b/src/vkcv/ComputePipelineManager.cpp @@ -112,7 +112,7 @@ namespace vkcv vk::Result ComputePipelineManager::createShaderModule(vk::ShaderModule &module, const ShaderProgram &shaderProgram, const ShaderStage stage) { - std::vector<char> code = shaderProgram.getShader(stage).shaderCode; + std::vector<char> code = shaderProgram.getShaderBinary(stage); vk::ShaderModuleCreateInfo moduleInfo({}, code.size(), reinterpret_cast<uint32_t*>(code.data())); return m_Device.createShaderModule(&moduleInfo, nullptr, &module); } diff --git a/src/vkcv/GraphicsPipelineManager.cpp b/src/vkcv/GraphicsPipelineManager.cpp index 54206dceb417a75ed4c8b51a6c614fe5ba972618..803008d4c65239433b9e9ae9f57a7d537db0c621 100644 --- a/src/vkcv/GraphicsPipelineManager.cpp +++ b/src/vkcv/GraphicsPipelineManager.cpp @@ -110,7 +110,7 @@ namespace vkcv vk::PipelineShaderStageCreateInfo* outCreateInfo) { assert(outCreateInfo); - std::vector<char> code = shaderProgram.getShader(stage).shaderCode; + std::vector<char> code = shaderProgram.getShaderBinary(stage); vk::ShaderModuleCreateInfo vertexModuleInfo({}, code.size(), reinterpret_cast<uint32_t*>(code.data())); vk::ShaderModule shaderModule; if (device.createShaderModule(&vertexModuleInfo, nullptr, &shaderModule) != vk::Result::eSuccess) diff --git a/src/vkcv/ShaderProgram.cpp b/src/vkcv/ShaderProgram.cpp index 64cc3697fd259056262c43fbf6bfee2e2a0e0b13..416947110a6b372ef9495cce02db49db230285c3 100644 --- a/src/vkcv/ShaderProgram.cpp +++ b/src/vkcv/ShaderProgram.cpp @@ -87,14 +87,13 @@ namespace vkcv { if (shaderCode.empty()) { return false; } else { - Shader shader{shaderCode, stage}; - m_Shaders.insert(std::make_pair(stage, shader)); + m_Shaders.insert(std::make_pair(stage, shaderCode)); reflectShader(stage); return true; } } - const Shader &ShaderProgram::getShader(ShaderStage stage) const + const std::vector<char> &ShaderProgram::getShaderBinary(ShaderStage stage) const { return m_Shaders.at(stage); } @@ -109,7 +108,7 @@ namespace vkcv { void ShaderProgram::reflectShader(ShaderStage shaderStage) { - auto shaderCodeChar = m_Shaders.at(shaderStage).shaderCode; + auto shaderCodeChar = m_Shaders.at(shaderStage); std::vector<uint32_t> shaderCode; for (uint32_t i = 0; i < shaderCodeChar.size()/4; i++)