Это ошибка в DirectX9 Effect Compiler? & quot; Неверная семантика ввода — POSITIONT0 & quot;

Я пытаюсь скомпилировать очень простой Effect Shader, ориентированный на DirectX9 и модель шейдера 2. Я пытаюсь передать непосредственно координаты экрана для позиций вершин вместо умножения на матрицы мира, вида и проекции, поэтому вместо этого я использую семантику POSITIONT семантики POSTION0 в структуре VertexShaderInput. Однако, когда я пытаюсь скомпилировать шейдер с помощью

fxc.exe /Od /Zi /T fx_2_0 /Fo simple.fxo simple.fx

Я получаю следующую ошибку: «ошибка X4502: неверная семантика ввода — POSITIONT0»

Кажется, по какой-то причине он автоматически добавляет 0 в конец семантики. Мне кажется, что я ошибаюсь, потому что POSITIONT ясно описан здесь как допустимая семантика ввода:
https://msdn.microsoft.com/en-us/library/windows/desktop/bb509647(v=vs.85).aspx#PS

и это единственный, который не позволяет добавлять дополнительные целые числа в конце семантики.

РЕДАКТИРОВАТЬ: Я только что обнаружил, что если я изменю POSITIONT на POSITIONT1, он работает нормально. Это противоречит тому, что описано в документации выше.

Содержание simple.fx:

struct VertexShaderInput
{
float4 Position : POSITIONT;
float4 Color : COLOR0;
};

struct VertexShaderOutput
{
float4 Position : POSITION0;
float4 Color : COLOR0;
};

VertexShaderOutput VertexShaderFunction(VertexShaderInput input)
{
VertexShaderOutput output;
output.Position = input.Position;
output.Color = input.Color;
return output;
}float4 PixelShaderFunction(VertexShaderOutput input) : COLOR0
{
return input.Color;
}

technique Ambient
{
pass Pass1
{
VertexShader = compile vs_2_0 VertexShaderFunction();
PixelShader = compile ps_2_0 PixelShaderFunction();
}
}

0

Решение

Для Legacy Direct3D9 есть специальный D3DDECLUSAGE_POSITIONT что означает просто пропустить обработку вершин. Поэтому вы можете использовать только POSITIONT на входе PIXEL SHADER — т.е. его вообще нельзя использовать в шейдере VERTEX.

Измените свой шейдер, чтобы использовать POSITION или же POSITION0,

2

Другие решения


По вопросам рекламы [email protected]