Новые типы ресурсов
В Direct3D 11 добавлены несколько новых типов ресурсов.
- буферы чтения и записи и текстуры
- структурированный буфер
- буфер адресов байтов
- неупорядоченный буфер доступа или текстуры
- связанные разделы
Буферы чтения и записи и текстуры
Модель шейдера 4 доступны только для чтения. Модель шейдера 5 реализует новый набор ресурсов чтения и записи:
Эти ресурсы требуют переменной ресурсов для доступа к памяти (через индексирование), так как нет методов прямого доступа к памяти. Переменная ресурса может использоваться в левой и правой части уравнения; Если используется справа, тип шаблона должен быть одним компонентом (float, int или uint).
Структурированный буфер
Структурированный буфер — это буфер, содержащий элементы равных размеров. Используйте структуру с одним или несколькими типами элементов для определения элемента. Ниже приведена структура с тремя элементами.
struct MyStruct
{
float4 Color;
float4 Normal;
bool isAwesome;
};
Используйте эту структуру для объявления структурированного буфера следующим образом:
StructuredBuffer<MyStruct> mySB;
Помимо индексирования структурированный буфер поддерживает доступ к одному члену, как показано ниже:
float4 myColor = mySb[27].Color;
Используйте следующие типы объектов для доступа к структурированным буферам:
- StructuredBuffer — это только структурированный буфер чтения.
- RWStructuredBuffer — это структурированный буфер чтения и записи.
атомарные функции, которые реализуют операции с блокировкой, разрешены для элементов int и uint в RWStructuredBuffer.
Буфер адресов байтов
Буфер адреса байтов — это буфер, содержимое которого можно адресировать с помощью смещения байтов. Как правило, содержимое буфера индексируется на каждый элемент с помощью шага для каждого элемента (S) и номера элемента (N), как указано S*N. Буфер адресов байтов, который также можно назвать необработанным буфером, использует смещение байтов с начала буфера для доступа к данным. Значение байта должно быть кратным из четырех, чтобы оно было выровнено. Если указано другое значение, поведение не определено.
Модель шейдера 5 представляет объекты для доступа к буферу адресов только для чтения байтов,, а также буфер адресов для чтения и записи. Содержимое буфера адресов байтов предназначено для 32-разрядного целого числа без знака; Если значение в буфере на самом деле не является целым числом без знака, используйте функцию, например asfloat для чтения.
Неупорядоченный буфер доступа или текстура
Ресурс неупорядоченного доступа (который включает буферы, текстуры и массивы текстур без многосамплексирования), позволяет временно неупорядоченным доступом на чтение и запись из нескольких потоков. Это означает, что этот тип ресурса можно одновременно считывать и записывать одновременно несколькими потоками, не создавая конфликты памяти с помощью атомарных функций.
Создайте неупорядоченный буфер доступа или текстуру путем вызова функции, например ID3D11Device::CreateBuffer или ID3D11Device::CreateTexture2D и передачи флага D3D11_BIND_UNORDERED_ACCESS из перечисления D3D11_BIND_FLAG.
Неупорядоченные ресурсы доступа могут быть привязаны только к шейдерам пикселей и вычислительным шейдерам. Во время выполнения шейдеры пикселей или вычислительные шейдеры, работающие параллельно, имеют одинаковые неупорядоченные ресурсы доступа.
Добавление и использование буфера
Буфер добавления и использования — это специальный тип неупорядоченного ресурса, который поддерживает добавление и удаление значений из конца буфера, аналогичного работе стека.
Буфер добавления и использования должен быть структурированным буфером:
Используйте эти ресурсы с помощью своих методов, эти ресурсы не используют переменные ресурсов.
Связанные разделы
-
Обзор шейдера вычислений