microsoft / DirectXShaderCompiler

This repo hosts the source for the DirectX Shader Compiler which is based on LLVM/Clang.
Other
3.04k stars 677 forks source link

Library Reflection : Listing parameters return E_FAIL #3237

Open mrvux opened 3 years ago

mrvux commented 3 years ago

As specified in #657

Creating a simple function compiled as a library

float3 Apply(float3 input)
{
   return input * 2.0f;
}

Calling reflection on the library :

D3D12_FUNCTION_DESC func_desc;
auto fr = lib_ref->GetFunctionByIndex(0);
fr->GetDesc(&func_desc);

D3D12_PARAMETER_DESC pdesc;
auto p = fr->GetFunctionParameter(0);
HRESULT hr = p->GetDesc(&pdesc);

hr for the parameter returns E_FAIL

This prevents to scan for the function signatures, which in our old dx11 based system (which we are moving to dx12), allowed us to scan for function signatures, and if the signature matches, makes it eligible to be "linked" in a "host shader". In d3d11 we had to do that by generating HLSL code (since function linking graph sadly does not support compute), but in the dxil case would allow us to perform everything at bytecode level, which is of course much neater.

For our type of applications it allows a lot of flexibility in various use cases (mostly gpu based procedural geometry modifiers, particle systems, distance fields generation), since our end user can just write a few simple functions, and connect them to a complex compute system without worrying about the inner complexity.

This would also in other cases allow us perform some pre validation before trying to attempt linking, so we can return an early error instead of : "linking failed", which would vastly improve our automated testing.

Thanks

damyanp commented 5 months ago

@mrvux - we're triaging this to "Dormant" which means that while we recognize that it is likely a real bug, we don't think it is something that we'll be able to schedule anyone to investigate any time soon. We'd consider PR's that address the issue.