Я работаю с устаревшим кодом, который использует код шейдера сборки vs_2_0 и ps_2_0 в файле эффекта. Я хочу добавить несколько пиксельных шейдеров для работы с существующим вершинным шейдером, но хотел бы использовать HLSL. Можно ли добавить пиксельный шейдер HLSL по той же методике, что и вершинный шейдер asm? Если да, то как мне получить доступ к выходным данным вершинного шейдера (oT0, oT1) в моем пиксельном шейдере HLSL? Я новичок в шейдерах в целом, поэтому чем проще, тем лучше.
Смешайте вершинный шейдер asm с пиксельным шейдером HLSL в действии
comment
Сборка шейдеров DirectX очень давно не поддерживается. Какую версию DirectX SDk вы используете?
- person Chuck Walbourn   schedule 23.01.2021
Ответы (1)
Если вы используете структуру эффектов dx9, то для настройки техники вы можете
technique tech {
pass p0
{
VertexShader =
asm {
// vertex shader assembly code goes here
// ...
};
// compile MyAwsomePS as psTEXCOORD#
0 and assign to PixelShader.
PixelShader= compile psTEXCOORD#
0 myAwsomePS();
}
}
Как показано в MSDN
А для сопоставления выходных данных проверьте DirectX 9 hlsl Semetics и psTEXCOORD#
0 входные регистры, для psTEXCOORD#
0 доступно TEXCOORD#
COLOR#
, которое будет компилироваться в t#
и v#
соответственно.
Например:
struct PSInput
{
float4 txcoord : TEXCOORD2; // this will be t2
float4 color : COLOR0; // this will be v0
};
float4 myAwsomePS(PSInput IN) : COLOR
{
return IN.color + IN.txcoord;
}
компилируется в
ps_2_0
dcl t2
dcl v0
mov r0, v0
add r0, r0, t2
mov oC0, r0
Я бы также рекомендовал использовать автономный компилятор hlsl. (fxc), чтобы вывести список выходных данных сборки и самостоятельно проверить, все ли в порядке. или рассматривается возможность использования удобного онлайн-компилятора шейдеров Тима Джонса
person
kingeric1992
schedule
02.02.2021