DirectX 11:编码的顶点着色器大小与指定的大小不匹配

时间:2014-11-25 05:50:23

标签: shader direct3d directx-11 hlsl direct3d11

我正在使用DirectX 11.我预先编译着色器,然后在运行时加载。我正在将文件加载到缓冲区中,然后将其发送到CreateVertexShader。当我打开调试层调用CreateVertexShader时,我收到以下错误:

  

编码的顶点着色器大小与指定的大小不匹配

我正在命令行编译顶点着色器,如下所示:

fxc /Fc /Od /Zi /T fx_5_0 /Fo "myfile.cso" "myfile.fx"

在简单着色器的情况下,生成的文件大约为200个字节。我可以验证Windows资源管理器和我的代码都报告相同的字节数。

我尝试过fx_5_0的变体。

以下是我加载文件的方式:

uint32_t length, rr;
char *buffer;
FILE *fp;
fp = fopen("<path to file>\\myfile.cso", "rb");
fseek(fp, 0, SEEK_END);
length = ftell(fp);
fseek(fp, 0, SEEK_SET);
buffer = (char*)calloc(1, length);
rr = fread(buffer, sizeof(char), length, fp);
fclose(fp);
assert(rr == length);

然后:

hr = device->lpVtbl->CreateVertexShader(device, buffer, length, NULL, NULL );

(注意:我将NULL传递给最后一个param,希望得到S_FALSE作为返回码)

我不确定还有什么可以解决这个问题。

1 个答案:

答案 0 :(得分:0)

我明白了。

着色器中的入口点不正确。

fxc命令编译了我的着色器,没有错误或警告,但是我的着色器没有正确定义入口点。奇怪的。

这就是字节码只有大约200字节的原因。也就是说,我的着色器很简单,一个传递,我本可以相信它是200字节。它更像是15k编译。

一个简短的HLSL程序(1061字节的源)如何爆炸到15k字节代码真的很奇怪。