[vk::push_constant] uint32_t image_handle;

T resource_from_handle<T>(uint32_t handle) {
return spirv_asm {
OpCapability BindlessTextureNV;
OpExtension "SPV_NV_bindless_texture";
OpSamplerImageAddressingModeNV 32;
result: $$T = OpConvertUToSampledImageNV $handle
};
}

[shader("compute")]
void main(uint2 id: SV_DispatchThreadID) {
let image = resource_from_handle<RWTexture2D<float4>>(image_handle);
let color = image.Load(id);
let grey = dot(float3(0.3, 0.6, 0.1), color.xyz);
image.Store(id, float4(grey, grey, grey, 1));
}


Damn Slang and Nvidia are based. Now I don't have to fuck around with descriptors at all.