textures
This commit is contained in:
@@ -70,7 +70,7 @@ void CVkShader::Build()
|
||||
VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT,
|
||||
};
|
||||
VkPipelineLayoutCreateInfo stPipelineLayout = {};
|
||||
CUtlVector<VkDescriptorSetLayoutBinding> bindings = {};
|
||||
CUtlVector<CUtlVector<VkDescriptorSetLayoutBinding>> bindings = {};
|
||||
|
||||
// TODO: Filter by vulkan shaders at some points
|
||||
stages.Resize(m_shader.m_objects.GetSize());
|
||||
@@ -82,21 +82,33 @@ void CVkShader::Build()
|
||||
{
|
||||
VulkanDescriptor_t stDescriptor = ((VulkanDescriptor_t*)m_shader.GetLumpPtr(pMetaData->pDescriptorSets))[u];
|
||||
bool bFound = false;
|
||||
for ( auto &b: bindings )
|
||||
if (bindings.GetSize()<=stDescriptor.uSet)
|
||||
bindings.Resize(stDescriptor.uSet+1);
|
||||
|
||||
uint32_t i = 0;
|
||||
for ( auto &set: bindings )
|
||||
{
|
||||
if (b.binding != stDescriptor.uBinding)
|
||||
continue;
|
||||
bFound = true;
|
||||
break;
|
||||
for ( auto &b: set )
|
||||
{
|
||||
if (i != stDescriptor.uSet)
|
||||
continue;
|
||||
if (b.binding != stDescriptor.uBinding)
|
||||
continue;
|
||||
bFound = true;
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
if (bFound)
|
||||
break;
|
||||
}
|
||||
if (bFound)
|
||||
break;
|
||||
continue;
|
||||
VkDescriptorSetLayoutBinding bind = {};
|
||||
bind.binding = stDescriptor.uBinding;
|
||||
bind.descriptorCount = 1;
|
||||
bind.descriptorCount = stDescriptor.uCount;
|
||||
bind.descriptorType = stDescriptor.eDescriptorType;
|
||||
bind.stageFlags = VK_SHADER_STAGE_ALL;
|
||||
bindings.AppendTail(bind);
|
||||
bindings[stDescriptor.uSet].AppendTail(bind);
|
||||
m_bindings.AppendTail(stDescriptor);
|
||||
}
|
||||
modules[i].sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
|
||||
@@ -110,14 +122,19 @@ void CVkShader::Build()
|
||||
|
||||
if ( bindings.GetSize() >= 0 )
|
||||
{
|
||||
m_setLayouts.Resize(1);
|
||||
VkDescriptorSetLayoutCreateInfo stSetLayoutCreateInfo = {};
|
||||
stSetLayoutCreateInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
|
||||
stSetLayoutCreateInfo.pBindings = bindings.GetData();
|
||||
stSetLayoutCreateInfo.bindingCount = bindings.GetSize();
|
||||
stSetLayoutCreateInfo.flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT;
|
||||
vkCreateDescriptorSetLayout(m_hDevice, &stSetLayoutCreateInfo, NULL, m_setLayouts.GetData());
|
||||
stPipelineLayout.setLayoutCount = 1;
|
||||
m_setLayouts.Reserve(bindings.GetSize());
|
||||
for ( int u = 0; u < bindings.GetSize(); u++ )
|
||||
{
|
||||
VkDescriptorSetLayoutCreateInfo stSetLayoutCreateInfo = {};
|
||||
VkDescriptorSetLayout l = NULL;
|
||||
stSetLayoutCreateInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
|
||||
stSetLayoutCreateInfo.pBindings = bindings[u].GetData();
|
||||
stSetLayoutCreateInfo.bindingCount = bindings[u].GetSize();
|
||||
stSetLayoutCreateInfo.flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT;
|
||||
vkCreateDescriptorSetLayout(m_hDevice, &stSetLayoutCreateInfo, NULL, &l);
|
||||
m_setLayouts.AppendTail(l);
|
||||
}
|
||||
stPipelineLayout.setLayoutCount = m_setLayouts.GetSize();
|
||||
stPipelineLayout.pSetLayouts = m_setLayouts.GetData();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user