D3DXAssembleShader函数在DirectX 9中用于编译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;
}
答案 0 :(得分:0)
Shader Model 4.0、4.1、5.0或5.1不正式支持从HLSL着色器程序集进行编译。
使用
fxc.exe
进行构建时,会出于调试和优化目的而进行反汇编