Поделиться через


RWTexture2D

Ресурс для чтения и записи.

Метод Описание
GetDimensions Возвращает измерения ресурсов.
Загрузить Считывает данные текстуры.
Operator[] Возвращает переменную ресурса.

 

Вы можете использовать префикс объектов RWTexture2D с классом хранения globallycoherent. Этот класс хранения создает барьеры памяти и синхронизирует данные по всему GPU, чтобы другие группы могли видеть операции записи. Без этого описателя барьер памяти или синхронизация будут очищать только представление неупорядоченного доступа (UAV) в текущей группе.

Для объекта RWTexture2D требуется тип элемента в операторе объявления для объекта . Например, следующее объявление неверно:

// The following declaration is incorrectly coded.
RWTexture2D myTexture;

Правильное следующее объявление:

// The following declaration is correctly coded.
RWTexture2D<float> tex;

Поскольку объект RWTexture2D является объектом типа UAV, его свойства отличаются от объекта типа представления ресурсов шейдера (SRV), например объекта Texture2D . Например, можно выполнять чтение из объекта RWTexture2D и запись в нее, но только из объекта Texture2D.

Объект RWTexture2D не может использовать методы из объекта Texture2D , например Sample. Однако, так как можно создать несколько типов представлений для одного ресурса, можно объявить несколько типов текстур как одну текстуру в нескольких шейдерах. Например, в следующих фрагментах кода показано, как объявить и использовать объект RWTexture2D в качестве tex в вычислительном шейдере, а затем объявить и использовать объект Texture2D в качестве tex в пиксельном шейдере.

Примечание

Среда выполнения применяет определенные шаблоны использования при создании нескольких типов представлений для одного ресурса. Например, среда выполнения не позволяет одновременно использовать сопоставление UAV для ресурса и сопоставление SRV для одного и того же ресурса.

 

Следующий код предназначен для вычислительного шейдера:

RWTexture2D<float> tex;
[numthreads(groupDim_x, groupDim_y, 1)]
void main(
    uint3 groupId : SV_GroupID,
    uint3 groupThreadId : SV_GroupThreadID,
    uint3 dispatchThreadId : SV_DispatchThreadID,
    uint groupIndex : SV_GroupIndex)
{
    tex [dispatchThreadId.xy] = <something>;
}

Следующий код предназначен для пиксельного шейдера:

struct PixelShaderInput
{
    float4 pos : SV_POSITION;
    float2 tex : TEXTURE;
};

Texture2D<float> tex;
float4 main(PixelShaderInput input) : SV_TARGET
{
    return tex.Sample(TextureSampler, input.tex);
}

Минимальная модель шейдера

Этот объект поддерживается в следующих моделях шейдеров.

Модель шейдера Поддерживается
Модели шейдеров 5 и более поздних версий шейдеров да

 

Этот объект поддерживается для следующих типов шейдеров:

Вершина Корпуса Домен Geometry Пиксель Вычисления
x x

 

См. также раздел

Объекты модели шейдера 5