microsoft / hlsl-specs

HLSL Specifications
MIT License
116 stars 29 forks source link

[0011] Get the `vk::SpirvType` or `vk::SpirvOpaqueType` of an expression #241

Open devshgraphicsprogramming opened 3 months ago

devshgraphicsprogramming commented 3 months ago

Which proposal does this relate to? 0011-inline-spirv.md

Describe the issue or outstanding question. Banging my head against the wall trying to make Combined Sampler Images, or PhysicalStoragePointers (BDA) using types that are not "wholly build from ground up with vk::SpirvType"

For example I have

struct MyAggregate
{
   int32_t a,b;
};

For a regular vk::RawBufferLoad or a StructuredBuffer, DXC seems to make some meta-types that don't match vk::SpirvType<..,T> I'd make myself.

This gets in the way of doing OpAccessChain or similar things, because the types don't have the same %result_id from an OpType.. even though the types may be identically defined.

Additional context I've outlined list of vastly different currently open DXC issues that may touch upon this here: https://github.com/microsoft/DirectXShaderCompiler/issues/6578#issuecomment-2103318352

I'd also settle for getting the vk::spirvType of a type instead of an expression, this would be enough to e.g. have the exact same type that a Texture2D is using, or getting the basic MyAggregate typedef to make pointers out of.

This seems to be the final stumbling block (first being that the offsetof member decorations seem to just simply not work) for me to implement the equivalent of Proposal 0010 in user-space while also addressing #57