Я пытаюсь передать некоторые специфичные для экземпляра данные через мой вершинный шейдер в мой пиксельный шейдер. Однако между этапами данные каким-то образом изменяются на 0.
Для лучшего контекста. Мой Vertex-Shader получает некоторые данные из экземпляра-потока и должен просто передать их в пиксельный шейдер. При отладке в RenderDoc я читаю правильные значения в вершинном шейдере из потока и выводю его в свой out-struct. При последующей отладке моего пикселя данные устанавливаются на 0.
Я пытался отлаживать с помощью RenderDoc и Pix. Я просмотрел код несколько раз и не могу найти ничего связанного, что могло бы быть проблемой.
Поскольку все данные присутствуют в вершинном шейдере и выводятся просто нормально, я не ожидаю, что они будутчто-то не так до этой стадии.
Вот структуры, которые я использую. Пожалуйста, игнорируйте семантику, потому что мы используем собственную систему семантики для генерации наших шейдеров. (Это не проблема, в этом я уверен на 100%, поэтому не комментируйте ничего, пожалуйста)
struct VertexInStruct
{
// Vertex-Data
float4 Pos : CUSTOM0;
float4 Color0 : CUSTOM1;
float4 Normal : CUSTOM2;
float4 Tangent : CUSTOM3;
float2 UV0 : CUSTOM4;
// Instance-Data
float4 InstanceStream : CUSTOM5;
};
struct VertexOutStruct
{
// Vertex-Data
float3 WS_Position : WS_Position;
float4 ClipPosition : ClipPosition;
float2 UV0 : UV0;
float4 Color0 : Color0;
float3 WS_Normal : WS_Normal;
// Instance-Data
nointerpolation float4 InstanceStream : InstanceStream;
};
struct PixelInStruct
{
// Vertex-Data
centroid float3 WS_Position : WS_Position;
centroid float4 ClipPosition : ClipPosition;
centroid float2 UV0 : UV0;
centroid float4 Color0 : Color0;
centroid float3 WS_Normal : WS_Normal;
// Instance-Data
nointerpolation float4 InstanceStream : InstanceStream;
};
Для вывода InstanceStream в вершинный шейдер это выглядит так:
VertexOutStruct Out;
/*
Other code goes here
*/
Out.InstanceStream = In.InstanceStream;
return Out;
А для чтения в пиксельном шейдере это выглядит так:
uint InstanceDataIndex = asuint(In.InstanceStream.y);
При использовании слоя отладки не выдается никаких связанных сообщений об ошибках. Я ожидаю, что ввод пиксельного шейдера будет таким же, как и вывод вершинного шейдера.
Обратите внимание, что единственное значение, которое кажется неправильным, это значение InstanceStream!