summaryrefslogtreecommitdiffstats
path: root/Graphics/GraphicsEngineVulkan
diff options
context:
space:
mode:
authorEgor Yusov <egor.yusov@gmail.com>2018-05-19 23:02:51 +0000
committerEgor Yusov <egor.yusov@gmail.com>2018-05-19 23:02:51 +0000
commitb35b9da7a50f8d7b2d4bc554d6b8b60277da8ce4 (patch)
treeff8f63a2e599e426ff39259987443a4694e93573 /Graphics/GraphicsEngineVulkan
parentFixed some issues with Vk Shader Resource Layout (diff)
downloadDiligentCore-b35b9da7a50f8d7b2d4bc554d6b8b60277da8ce4.tar.gz
DiligentCore-b35b9da7a50f8d7b2d4bc554d6b8b60277da8ce4.zip
Fixed Vk pipeline layout intialization
Diffstat (limited to 'Graphics/GraphicsEngineVulkan')
-rw-r--r--Graphics/GraphicsEngineVulkan/include/ShaderResourceLayoutVk.h4
-rw-r--r--Graphics/GraphicsEngineVulkan/src/PipelineLayout.cpp29
2 files changed, 18 insertions, 15 deletions
diff --git a/Graphics/GraphicsEngineVulkan/include/ShaderResourceLayoutVk.h b/Graphics/GraphicsEngineVulkan/include/ShaderResourceLayoutVk.h
index 68feaded..7b79d268 100644
--- a/Graphics/GraphicsEngineVulkan/include/ShaderResourceLayoutVk.h
+++ b/Graphics/GraphicsEngineVulkan/include/ShaderResourceLayoutVk.h
@@ -290,8 +290,8 @@ private:
VkResource& GetResource(SHADER_VARIABLE_TYPE VarType, Uint32 r)
{
VERIFY_EXPR( r < m_NumResources[VarType] );
- auto* Resoruces = reinterpret_cast<VkResource*>(m_ResourceBuffer.get());
- return Resoruces[GetResourceOffset(VarType,r)];
+ auto* Resources = reinterpret_cast<VkResource*>(m_ResourceBuffer.get());
+ return Resources[GetResourceOffset(VarType,r)];
}
const VkResource& GetResource(SHADER_VARIABLE_TYPE VarType, Uint32 r)const
{
diff --git a/Graphics/GraphicsEngineVulkan/src/PipelineLayout.cpp b/Graphics/GraphicsEngineVulkan/src/PipelineLayout.cpp
index 78115ff0..de781be4 100644
--- a/Graphics/GraphicsEngineVulkan/src/PipelineLayout.cpp
+++ b/Graphics/GraphicsEngineVulkan/src/PipelineLayout.cpp
@@ -59,13 +59,16 @@ class ResourceTypeToVkDescriptorType
public:
ResourceTypeToVkDescriptorType()
{
- m_Map[SPIRVShaderResourceAttribs::ResourceType::UniformBuffer] = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
- m_Map[SPIRVShaderResourceAttribs::ResourceType::StorageBuffer] = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
- m_Map[SPIRVShaderResourceAttribs::ResourceType::StorageImage] = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE;
- m_Map[SPIRVShaderResourceAttribs::ResourceType::SampledImage] = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
- m_Map[SPIRVShaderResourceAttribs::ResourceType::AtomicCounter] = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
- m_Map[SPIRVShaderResourceAttribs::ResourceType::SeparateImage] = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE;
- m_Map[SPIRVShaderResourceAttribs::ResourceType::SeparateSampler] = VK_DESCRIPTOR_TYPE_SAMPLER;
+ static_assert(SPIRVShaderResourceAttribs::ResourceType::NumResourceTypes == 9, "Please add corresponding decriptor type");
+ m_Map[SPIRVShaderResourceAttribs::ResourceType::UniformBuffer] = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
+ m_Map[SPIRVShaderResourceAttribs::ResourceType::StorageBuffer] = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
+ m_Map[SPIRVShaderResourceAttribs::ResourceType::UniformTexelBuffer] = VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER;
+ m_Map[SPIRVShaderResourceAttribs::ResourceType::StorageTexelBuffer] = VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER;
+ m_Map[SPIRVShaderResourceAttribs::ResourceType::StorageImage] = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE;
+ m_Map[SPIRVShaderResourceAttribs::ResourceType::SampledImage] = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
+ m_Map[SPIRVShaderResourceAttribs::ResourceType::AtomicCounter] = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
+ m_Map[SPIRVShaderResourceAttribs::ResourceType::SeparateImage] = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE;
+ m_Map[SPIRVShaderResourceAttribs::ResourceType::SeparateSampler] = VK_DESCRIPTOR_TYPE_SAMPLER;
}
VkDescriptorType operator[](SPIRVShaderResourceAttribs::ResourceType ResType)const
@@ -243,20 +246,20 @@ void PipelineLayout::DescriptorSetLayoutManager::Finalize(const VulkanUtilities:
}
m_LayoutBindings.resize(TotalBindings);
size_t BindingOffset = 0;
- std::array<VkDescriptorSetLayout, 2> ActiveDescrSetLayouts;
- int CurrActiveSet = 0;
- for(size_t i=0; i < m_DescriptorSetLayouts.size(); ++i)
+ std::array<VkDescriptorSetLayout, 2> ActiveDescrSetLayouts = {};
+ for(auto &Layout : m_DescriptorSetLayouts)
{
- auto &Layout = m_DescriptorSetLayouts[i];
if(Layout.SetIndex >= 0)
{
std::copy(Layout.pBindings, Layout.pBindings + Layout.NumLayoutBindings, m_LayoutBindings.begin() + BindingOffset);
Layout.Finalize(LogicalDevice, m_MemAllocator, &m_LayoutBindings[BindingOffset]);
BindingOffset += Layout.NumLayoutBindings;
- ActiveDescrSetLayouts[CurrActiveSet++] = Layout.VkLayout;
+ ActiveDescrSetLayouts[Layout.SetIndex] = Layout.VkLayout;
}
}
- VERIFY_EXPR(CurrActiveSet == m_ActiveSets);
+ VERIFY_EXPR(BindingOffset == TotalBindings);
+ VERIFY_EXPR(m_ActiveSets == 0 || m_ActiveSets == 1 && ActiveDescrSetLayouts[0] != VK_NULL_HANDLE ||
+ m_ActiveSets == 2 && ActiveDescrSetLayouts[0] != VK_NULL_HANDLE && ActiveDescrSetLayouts[1] != VK_NULL_HANDLE);
VkPipelineLayoutCreateInfo PipelineLayoutCI = {};
PipelineLayoutCI.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO;