Почему выходные данные моего вершинного шейдера изменяются при достижении пиксельного шейдера? - PullRequest
0 голосов
/ 01 ноября 2019

Я пытаюсь передать некоторые специфичные для экземпляра данные через мой вершинный шейдер в мой пиксельный шейдер. Однако между этапами данные каким-то образом изменяются на 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!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...