2014-11-25 11 views
0

Я использую DirectX 11. Я предварительно компилирую шейдер, а затем загружаю его во время выполнения. Я загружаю файл в буфер, а затем отправляю его в CreateVertexShader. Когда я звоню CreateVertexShader с отладочным слой включен, я получаю следующее сообщение об ошибке:DirectX 11: Размер закодированного шейдерного шейдера не соответствует указанному размеру

Encoded Vertex Shader size doesn't match specified size

Я компиляция вершинного шейдера в командной строке следующим образом:

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 к последним парам, ожидая получить S_FALSE как код возврата)

Я не уверен, что еще попытаться решить это.

ответ

0

Я понял.

В шейдере не была указана точка входа.

Команда fxc скомпилировала мой шейдер без ошибок или предупреждений, но в моем шейдере не была определена точка входа. Weird.

Именно поэтому байтовый код был всего около 200 байт. Тем не менее, мой шейдер был очень простым, сквозным, я мог подумать, что это 200 байт. Это больше похоже на 15k.

Действительно странно, как короткая программа HLSL (1061 байт источника) взрывается до 15k байтового кода.

+0

Вы также компилируете эффект, а не сырой шейдер. Чтобы скомпилировать как шейдер, используйте vs_5_0 или ps_5_0 для вершинных/пиксельных шейдеров, соответственно. Вы должны увидеть падение размера шейдерного кода с 15 000 до, вероятно, 200-400 байт, а может быть, и меньше. – Alex