@@ -1042,7 +1042,13 @@ pl_graphics_create_bind_group_layout(plDevice* ptDevice, const plBindGroupLayout
10421042 .stageFlags = pl_vulkan_shader_stage_flags (ptDesc -> atBufferBindings [i ].eStages ),
10431043 .pImmutableSamplers = NULL
10441044 };
1045- atDescriptorSetLayoutFlags [uCurrentBinding ] = 0 ;
1045+
1046+ if (ptDevice -> tInfo .eCapabilities & PL_DEVICE_CAPABILITY_BIND_GROUP_INDEXING )
1047+ {
1048+ atDescriptorSetLayoutFlags [uCurrentBinding ] |= VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT | VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT ;
1049+ }
1050+ else
1051+ atDescriptorSetLayoutFlags [uCurrentBinding ] = 0 ;
10461052 atDescriptorSetLayoutBindings [uCurrentBinding ++ ] = tBinding ;
10471053 }
10481054
@@ -1068,12 +1074,12 @@ pl_graphics_create_bind_group_layout(plDevice* ptDevice, const plBindGroupLayout
10681074 else if (tBinding .descriptorCount == 0 )
10691075 tBinding .descriptorCount = 1 ;
10701076
1071- atDescriptorSetLayoutFlags [uCurrentBinding ] = 0 ;
1072- if (ptDesc -> atTextureBindings [i ].bNonUniformIndexing )
1077+ if (ptDevice -> tInfo .eCapabilities & PL_DEVICE_CAPABILITY_BIND_GROUP_INDEXING )
10731078 {
10741079 atDescriptorSetLayoutFlags [uCurrentBinding ] |= VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT | VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT ;
1075- bHasVariableDescriptors = true;
10761080 }
1081+ else
1082+ atDescriptorSetLayoutFlags [uCurrentBinding ] = 0 ;
10771083 atDescriptorSetLayoutBindings [uCurrentBinding ++ ] = tBinding ;
10781084 }
10791085
@@ -1088,7 +1094,12 @@ pl_graphics_create_bind_group_layout(plDevice* ptDevice, const plBindGroupLayout
10881094 .pImmutableSamplers = NULL
10891095 };
10901096
1091- atDescriptorSetLayoutFlags [uCurrentBinding ] = 0 ;
1097+ if (ptDevice -> tInfo .eCapabilities & PL_DEVICE_CAPABILITY_BIND_GROUP_INDEXING )
1098+ {
1099+ atDescriptorSetLayoutFlags [uCurrentBinding ] |= VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT | VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT ;
1100+ }
1101+ else
1102+ atDescriptorSetLayoutFlags [uCurrentBinding ] = 0 ;
10921103 atDescriptorSetLayoutBindings [uCurrentBinding ++ ] = tBinding ;
10931104 }
10941105
@@ -3409,6 +3420,9 @@ pl_graphics_enumerate_devices(plDeviceInfo *atDeviceInfo, uint32_t* puDeviceCoun
34093420 // binding flags for textures, uniforms, and buffers
34103421 // are required for our extension
34113422 if (tDescriptorIndexingFeatures .shaderSampledImageArrayNonUniformIndexing &&
3423+ tDescriptorIndexingFeatures .descriptorBindingUniformBufferUpdateAfterBind &&
3424+ tDescriptorIndexingFeatures .descriptorBindingStorageImageUpdateAfterBind &&
3425+ tDescriptorIndexingFeatures .descriptorBindingStorageBufferUpdateAfterBind &&
34123426 tDescriptorIndexingFeatures .descriptorBindingSampledImageUpdateAfterBind )
34133427 {
34143428 atDeviceInfo [i ].eCapabilities |= PL_DEVICE_CAPABILITY_BIND_GROUP_INDEXING ;
0 commit comments