어떻게 (가능하다면) 리다이렉션에서 셰이더의 변수/구조체 멤버의 이름을 얻을 수 있습니까?셰이더 리플렉션 : 변수 이름?
저는 원시 hlsl 쉐이더 (아무 효과 프레임 워크/아니오 D3DX, 그냥 원시 directX)에 대해 얘기하고 있습니다.
나는 SharpDX를 사용하고 난 쉐이더 서명에서 필요한 대부분의 정보를 얻는 방법을 발견하고 있습니다
new SharpDX.D3DCompiler.ShaderReflection(MyShaderByteCode);
내가 필요로하는 대부분의 정보를 얻을 수 있지만, 나는 sementic 이름을 검색 할 수있는 반면 (TEXCOORD, POSITION 등) 요소의 실제 이름을 검색 할 수 없습니다 ("이름"속성 없음).
나는이 잘못된 방향으로 가고 있습니까? 이것은 심지어 가능합니까?
struct Vertex
{
float4 Position : POSITION;
float2 UVPosition : TEXCOORD;
};
struct Pixel
{
float4 Position : SV_POSITION;
float2 UVPosition : TEXCOORD;
};
float4x4 worldViewProj;
Texture2D<float4> diffuse : register(t0);
Texture2D<float4> height : register(t1);
Texture2D<float4> lightmap : register(t2);
SamplerState pictureSampler;
Pixel PerVertex(Vertex input)
{
Pixel output = (Pixel) 0;
input.Position.z += height.SampleLevel(pictureSampler, input.UVPosition, 0).r/2;
output.Position = mul(input.Position, worldViewProj);
output.UVPosition = input.UVPosition;
return output;
}
float4 PerPixel(Pixel input) : SV_Target
{
return diffuse.Sample(pictureSampler, input.UVPosition) * lightmap.Sample(pictureSampler, input.UVPosition);
}
는 내가 뭘 검색 할 수있는 것은 내가 검색하려는 것은 "위치"와 "UVPosition"당신은 저점 일정한 버퍼를 반복 할 필요가
죄송합니다. 좀 더 구체적이어야합니다. 이것은 상수 버퍼에서만 작동하지만, 검색하려는 것은 입력/출력으로 전달되는 구조의 변수 이름입니다. 새 SharpDX.D3DCompiler.ShaderReflection (pixelShaderByteCode) .GetVariable (변수 이름 목록)이 아닌 이름으로 변수를 검색하는 방법을 발견했습니다. 내 질문을 내가 원하는 것의 예제로 업데이트한다. –
괜찮다. 너는 운이 좋지 않다. 나는 이것을 할 수있는 방법이 없다고 생각한다. (쉐이더 단계 사이의 계약은 의미 론적으로 행해진 다. 변수 이름이므로 컴파일러가 해당 데이터를 제거 할 가능성이 있습니다). 드롭은 말했다, 파일을 구문 분석하는 유일한 해결책이 될 가능성이 높습니다. – catflier
그것이 얻는 것만 큼 좋은 것 같아요. 여전히 유용합니다. :) –