_структурированное хранилище (SM5-ASM)

Произвольный доступ для записи 1-4 32-разрядных компонентов в структурированный буфер неупорядоченного представления доступа (UAV).

хранение _ структурированной dst0 [ . запись _ маски ] , дстаддресс [ . Select _ компонент ] , дстбитеоффсет [ . Select _ Component ] , src0 [ . свиззле]
Элемент Описание
dst0
[в ] адресе результатов операции.
дстаддресс
[в ] адрес для записи.
дстбитеоффсет
[в ] индексе структуры для записи.
src0
[в ] компонентах для записи.

Примечания

Эта инструкция выполняет 1-4 компонентов в 32-разрядных компонентах, * записанных из src0 в dst0 по адресу в дстаддресс и дстбитеоффсет. Нет преобразования формата.

dst0 должен быть UAV (u # ). В шейдере вычислений он также может быть общей памятью группы потоков (g # ).

дстаддресс указывает индекс структуры для записи.

Расположение записанных данных эквивалентно следующему псевдокоду, который показывает смещение, адрес, указатель на содержимое буфера, шаг источника и данные, хранящиеся линейно.

                    BYTE *BufferContents;             // from dst0
                    UINT BufferStride;                // from dst0
                    UINT dstAddress, dstByteOffset;   // source registers
                    BYTE *WriteLocation;              // value to calculate

                    // calculate writing location
                     WriteLocation = BufferContents 
                                + BufferStride * dstAddress 
                                + dstByteOffset;

                    // calculate the number of components to write
                    switch (dstWriteMask)
                    {
                        x:    WriteComponents = 1; break;
                        xy:   WriteComponents = 2; break;
                        xyz:  WriteComponents = 3; break;
                        xyzw: WriteComponents = 4; break;
                        default:  // only these masks are valid                              
                    }

                    // copy the data from the source register with
                    //    the swizzle applied
                    memcpy(WriteLocation, swizzle(src0, src0.swizzle), 
                             WriteComponents * sizeof(INT32));

Этот псевдокод показывает, как функционирует операция, но фактические данные не должны храниться линейно. Если данные не хранятся линейно, фактическая операция инструкции должна соответствовать поведению указанной выше операции.

dst0 может иметь только маску записи, которая является одной из следующих:. x,. XY,. XYZ,. ксизв. Маска записи определяет число 32-разрядных компонентов, записываемых без пробелов.

Исходящие адреса в u # касуед by дстаддресс означает, что ничего не записывается в память вне границ.

Если дстбитеоффсет, в том числе дствритемаск, вызывает неограниченный доступ # , все содержимое UAV становится неопределенным.

Вне пределов на g # (границы этого конкретного g # , в отличие от всей общей памяти) для любого заданного 32-разрядного компонента приводят к тому, что все содержимое общей памяти становится неопределенным.

дстбитеоффсет — это отдельный аргумент из дстаддресс , так как он обычно является литералом. Это разделение параметров не было выполнено для атомарных действий в структурированной памяти.

CS _ 4 _ 0 и CS _ 4 _ 1 поддерживают эту инструкцию для UAV и тгсм.

Эта инструкция применяется к следующим этапам шейдера:

Вершина Поверхности Домен Геометрия Пиксель Вычисления
X X

Так как Уавс доступны на всех стадиях шейдера для Direct3D 11,1, эта инструкция применяется ко всем этапам шейдера для среды выполнения Direct3D 11,1, которая доступна начиная с Windows 8.

Вершина Поверхности Домен Геометрия Пиксель Вычисления
X X X X X X

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

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

Модель шейдера Поддерживается
Модель шейдера 5 да
Модель шейдера 4,1 Нет
Модель шейдера 4 Нет
Модель шейдера 3 (DirectX HLSL) Нет
Модель шейдера 2 (DirectX HLSL) Нет
Модель шейдера 1 (DirectX HLSL) Нет

Сборка Shader Model 5 (DirectX HLSL)