【问题标题】:Mix asm vertex shader with HLSL pixel shader in effect混合使用 asm 顶点着色器和 HLSL 像素着色器
【发布时间】:2021-01-22 17:15:19
【问题描述】:

我正在处理在效果文件中使用 vs_2_0 和 ps_2_0 程序集着色器代码的遗留代码。我正在寻找添加一些像素着色器以使用现有的顶点着色器,但想使用 HLSL。 是否可以在与 asm 顶点着色器相同的技术中添加 HLSL 像素着色器?如果是这样,我如何在我的 HLSL 像素着色器中访问顶点着色器输出(oT0、oT1)? 一般来说,我是着色器的新手,所以越简单越好。

【问题讨论】:

  • DirectX 着色器组件已经很久没有被支持了。您使用的是哪个版本的 DirectX SDK?

标签: hlsl vertex-shader pixel-shader


【解决方案1】:

如果您使用的是dx9效果框架,那么对于技术设置,您可以

technique tech {
pass p0
    {
        VertexShader = 
        asm {
           // vertex shader assembly code goes here
           // ...
        };
        // compile MyAwsomePS as ps_2_0 and assign to PixelShader.
        PixelShader= compile ps_2_0 myAwsomePS();
    
    }
}

MSDN所示

对于匹配与输出,请查看 DirectX 9 hlsl Semetics 和 ps_2_0 input registers,ps_2_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 offline compiler (fxc) 列出程序集输出,并自己检查是否已排好队。 或考虑使用 Tim Jones 提供的方便的 online shader compiler

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多