@@ -1028,7 +1028,6 @@ pl_graphics_create_bind_group_layout(plDevice* ptDevice, const plBindGroupLayout
10281028 const uint32_t uDescriptorBindingCount = ptLayout -> _uTextureBindingCount + ptLayout -> _uBufferBindingCount + ptLayout -> _uSamplerBindingCount ;
10291029 VkDescriptorSetLayoutBinding * atDescriptorSetLayoutBindings = pl_temp_allocator_alloc (& gptGraphics -> tTempAllocator , uDescriptorBindingCount * sizeof (VkDescriptorSetLayoutBinding ));
10301030 VkDescriptorBindingFlagsEXT * atDescriptorSetLayoutFlags = pl_temp_allocator_alloc (& gptGraphics -> tTempAllocator , uDescriptorBindingCount * sizeof (VkDescriptorBindingFlagsEXT ));
1031- bool bHasVariableDescriptors = false;
10321031 ptLayout -> _uDescriptorCount = 1 ;
10331032
10341033 // buffer bindings
@@ -1042,7 +1041,11 @@ pl_graphics_create_bind_group_layout(plDevice* ptDevice, const plBindGroupLayout
10421041 .stageFlags = pl_vulkan_shader_stage_flags (ptDesc -> atBufferBindings [i ].eStages ),
10431042 .pImmutableSamplers = NULL
10441043 };
1044+
10451045 atDescriptorSetLayoutFlags [uCurrentBinding ] = 0 ;
1046+ if (ptDevice -> tInfo .eCapabilities & PL_DEVICE_CAPABILITY_BIND_GROUP_INDEXING )
1047+ atDescriptorSetLayoutFlags [uCurrentBinding ] |= VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT | VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT ;
1048+
10461049 atDescriptorSetLayoutBindings [uCurrentBinding ++ ] = tBinding ;
10471050 }
10481051
@@ -1056,24 +1059,30 @@ pl_graphics_create_bind_group_layout(plDevice* ptDevice, const plBindGroupLayout
10561059 .pImmutableSamplers = NULL
10571060 };
10581061
1062+ bool bUpdateAvailable = false;
10591063 if (ptDesc -> atTextureBindings [i ].eType == PL_TEXTURE_BINDING_TYPE_SAMPLED )
1064+ {
10601065 tBinding .descriptorType = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE ;
1066+ bUpdateAvailable = true;
1067+ }
10611068 else if (ptDesc -> atTextureBindings [i ].eType == PL_TEXTURE_BINDING_TYPE_INPUT_ATTACHMENT )
10621069 tBinding .descriptorType = VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT ;
10631070 else if (ptDesc -> atTextureBindings [i ].eType == PL_TEXTURE_BINDING_TYPE_STORAGE )
1071+ {
1072+ bUpdateAvailable = true;
10641073 tBinding .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE ;
1074+ }
10651075
10661076 if (tBinding .descriptorCount > 1 )
10671077 ptLayout -> _uDescriptorCount = tBinding .descriptorCount ;
10681078 else if (tBinding .descriptorCount == 0 )
10691079 tBinding .descriptorCount = 1 ;
10701080
10711081 atDescriptorSetLayoutFlags [uCurrentBinding ] = 0 ;
1072- if (ptDesc -> atTextureBindings [i ].bNonUniformIndexing )
1073- {
1082+ if (bUpdateAvailable && ptDevice -> tInfo .eCapabilities & PL_DEVICE_CAPABILITY_BIND_GROUP_INDEXING )
10741083 atDescriptorSetLayoutFlags [uCurrentBinding ] |= VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT | VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT ;
1075- bHasVariableDescriptors = true;
1076- }
1084+
1085+
10771086 atDescriptorSetLayoutBindings [uCurrentBinding ++ ] = tBinding ;
10781087 }
10791088
@@ -1089,6 +1098,9 @@ pl_graphics_create_bind_group_layout(plDevice* ptDevice, const plBindGroupLayout
10891098 };
10901099
10911100 atDescriptorSetLayoutFlags [uCurrentBinding ] = 0 ;
1101+ if (ptDevice -> tInfo .eCapabilities & PL_DEVICE_CAPABILITY_BIND_GROUP_INDEXING )
1102+ atDescriptorSetLayoutFlags [uCurrentBinding ] |= VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT | VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT ;
1103+
10921104 atDescriptorSetLayoutBindings [uCurrentBinding ++ ] = tBinding ;
10931105 }
10941106
@@ -3409,6 +3421,9 @@ pl_graphics_enumerate_devices(plDeviceInfo *atDeviceInfo, uint32_t* puDeviceCoun
34093421 // binding flags for textures, uniforms, and buffers
34103422 // are required for our extension
34113423 if (tDescriptorIndexingFeatures .shaderSampledImageArrayNonUniformIndexing &&
3424+ tDescriptorIndexingFeatures .descriptorBindingUniformBufferUpdateAfterBind &&
3425+ tDescriptorIndexingFeatures .descriptorBindingStorageImageUpdateAfterBind &&
3426+ tDescriptorIndexingFeatures .descriptorBindingStorageBufferUpdateAfterBind &&
34123427 tDescriptorIndexingFeatures .descriptorBindingSampledImageUpdateAfterBind )
34133428 {
34143429 atDeviceInfo [i ].eCapabilities |= PL_DEVICE_CAPABILITY_BIND_GROUP_INDEXING ;
0 commit comments