[vk::binding(0, 0)] __DynamicResource<__DynamicResourceKind.General> gBuffers[]; [vk::binding(1, 0)] __DynamicResource<__DynamicResourceKind.Sampler> gSamplers[]; [vk::binding(2, 0)] __DynamicResource<__DynamicResourceKind.General> gStorageTextures[]; export T getDescriptorFromHandle(DescriptorHandle handle) where T : IOpaqueDescriptor { __target_switch { case spirv: switch (T.kind) { case DescriptorKind.Buffer: return gBuffers[((uint2)handle).x].asOpaqueDescriptor(); case DescriptorKind.CombinedTextureSampler: return gSamplers[((uint2)handle).x].asOpaqueDescriptor(); case DescriptorKind.Texture: return gStorageTextures[((uint2)handle).x].asOpaqueDescriptor(); default: return defaultGetDescriptorFromHandle(handle); } default: return defaultGetDescriptorFromHandle(handle); } }