store_raw (sm5 - asm)
Запись с произвольным доступом из 1–4 32-разрядных компонентов в бестипную память.
store_raw dest[.write_mask], dstByteOffset[.select_component], src0[.swizzle] |
---|
Элемент | Описание |
---|---|
Dest |
[in] Адрес памяти. |
dstByteOffset |
[in] Смещение. |
src0 |
[in] Компоненты для записи. |
Комментарии
Эта инструкция выполняет 1–4 компонента *32-разрядные компоненты, записанные из src0 в dest со смещением в dstByteOffset. Преобразование формата не выполняется.
dest должен быть UAV (u#) или в вычислительном шейдере это также может быть общая память группы потоков (g#).
dstByteOffset задает базовое 32-разрядное значение в памяти для окна из 4 последовательных 32-разрядных значений, в которых могут быть записаны данные в зависимости от swizzle и маски для других параметров.
Расположение записанных данных эквивалентно приведенному ниже псевдокоду, который показывает адрес, указатель на содержимое буфера и данные, хранящиеся линейно.
BYTE *BufferContents; // from src0
UINT dstByteOffset; // source register
BYTE *WriteLocation; // value to calculate
// calculate writing location
WriteLocation = BufferContents
+ 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(UINT32));
Этот псевдокод показывает, как работает операция, но фактические данные не должны храниться линейно. dest может иметь только маску записи, которая является одной из следующих: .x, .xyz, .xyzw. Маска записи определяет количество 32-разрядных компонентов для записи без пробелов.
Вне пределов адресации в u# означает, что ничего не записывается в память за пределы границ; любая часть, которая находится в границах, написана правильно.
За пределы адресов в g# (границы конкретного g#, в отличие от всей общей памяти) для любого 32-разрядного компонента все содержимое всей общей памяти становится неопределенным.
cs_4_0 и cs_4_1 поддерживают эту инструкцию для БПЛА.
Эта инструкция применяется к следующим этапам шейдера:
Вершина | Корпуса | Домен | Geometry | Пиксель | Вычисления |
---|---|---|---|---|---|
X | X |
Так как БПЛА доступны на всех этапах шейдера для Direct3D 11.1, эта инструкция применяется ко всем этапам шейдера для среды выполнения Direct3D 11.1, которая доступна начиная с Windows 8.
Вершина | Корпуса | Домен | Geometry | Пиксель | Вычисления |
---|---|---|---|---|---|
X | X | X | X | X | X |
Минимальная модель шейдера
Эта инструкция поддерживается в следующих моделях шейдеров:
Модель шейдера | Поддерживается |
---|---|
Модель шейдера 5 | да |
Модель шейдера 4.1 | нет |
Модель шейдера 4 | нет |
Модель шейдера 3 (DirectX HLSL) | нет |
Модель шейдера 2 (DirectX HLSL) | нет |
Модель шейдера 1 (DirectX HLSL) | нет |