繁体   English   中英

如何从DirectX 11中的着色器汇编代码编译?

[英]How to compile from shader assembler code in DirectX 11?

在DirectX 9中使用D3DXAssembleShader函数来编译Assembly中的着色器。 在DirectX 11中不支持它。是否有任何替代方法可以从汇编程序代码创建着色器?

我知道从fx或hlsl文件编译,但为了我的项目目的,我应该只使用程序集编译。

DirectX 9中使用了以下代码:

static const char VertexShaderCode[] = \
    "vs.3.0\n"
    "dcl_position v0\n"
    "dcl_position o0\n"
    "mov o0, v0\n";
D3DXAssembleShader(VertexShaderCode,sizeof(VertexShaderCode), 0,0, DLL, &VSBuffer, 0);

我正在寻找使用D3D11 dll的DirectX11中的上述代码的替代方案。

我想修改我的asm文件,如下所示,并创建顶点和像素着色器:

dcl_output o0.xyzw -> dcl_output.o0.zw

我能在fx或hlsl文件中做同样的事吗?

FX文件:

cbuffer ConstantBuffer : register( b0 )
{
    matrix World;
    matrix View;
    matrix Projection;
}

//--------------------------------------------------------------------------------------
struct VS_OUTPUT
{
    float4 Pos : SV_POSITION;
    float4 Color : COLOR0;
};

//--------------------------------------------------------------------------------------
// Vertex Shader
//--------------------------------------------------------------------------------------
VS_OUTPUT VS( float4 Pos : POSITION, float4 Color : COLOR )
{
    VS_OUTPUT output = (VS_OUTPUT)0;
    output.Pos = mul( Pos, World );
    output.Pos = mul( output.Pos, View );
    output.Pos = mul( output.Pos, Projection );
    output.Color = Color;
    return output;
}


//--------------------------------------------------------------------------------------
// Pixel Shader
//--------------------------------------------------------------------------------------
float4 PS( VS_OUTPUT input ) : SV_Target
{
    return input.Color;
}

Shader Model 4.0,4.1,5.0或5.1不正式支持从HLSL着色器程序集进行编译。

使用fxc.exe构建时,可以进行反汇编以进行调试和优化

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM