[vk::binding(0, 0)] __DynamicResource<__DynamicResourceKind.General> gBuffers[]; [vk::binding(1, 0)] __DynamicResource<__DynamicResourceKind.Sampler> gSamplers[]; [vk::binding(2, 0)] __DynamicResource<__DynamicResourceKind.General> gStorageTextures[]; bool IsValid(DescriptorHandle handle) where T : IOpaqueDescriptor { var handleVal = (uint2)handle; return handleVal.x != 0xFFFFFFFF; } 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); } }