ld_structured (sm5 - asm)
Произвольное чтение 1–4 32-разрядных компонентов из структурированного буфера.
ld_structured dest[.mask], srcAddress[.select_component], srcByteOffset[.select_component], src0[.swizzle] |
---|
Элемент | Описание |
---|---|
Dest |
[in] Адрес результатов операции. |
srcAddress |
[in] Указывает индекс считываемой структуры. |
srcByteOffset |
[in] Задает смещение байтов в структуре, с которой начинается чтение. |
src0 |
Буфер для чтения. Этот параметр должен быть SRV (t#), UAV (u#). В вычислительном шейдере это также может быть общая память группы потоков (g#). |
Комментарии
Данные, считываемые из структуры, эквивалентны следующему псевдокоду: у нас есть смещение, адрес, указатель на содержимое буфера, шаг источника и данные, хранящиеся линейно.
BYTE *BufferContents; // from SRV or UAV
UINT BufferStride; // from base resource
UINT srcAddress, srcByteOffset; // from source registers
BYTE *ReadLocation; // value to calculate
ReadLocation = BufferContents
+ BufferStride * srcAddress
+ srcByteOffset;
UINT32 Temp[4]; // used to make code shorter
// apply the source resource swizzle on source data
Temp = read_and_swizzle(ReadLocation, srcSwizzle);
// write the components to the output based on mask
ApplyWriteMask(dstRegister, dstWriteMask, Temp);
Этот псевдокод показывает, как работает операция, но фактические данные не должны храниться линейно. Если данные не хранятся линейно, фактическая операция инструкции должна соответствовать поведению указанной выше операции.
Адресация вне границ в u#/t# любого заданного 32-разрядного компонента возвращает 0 для этого компонента, за исключением случаев, когда srcByteOffset, а swizzle — это то, что приводит к выходу за пределы доступа к вам#/t#, возвращаемое значение для всех компонентов не определено.
Адресация за пределы g# (границы конкретного g# в отличие от всей общей памяти) для любого 32-разрядного компонента возвращает неопределенный результат.
srcByteOffset — это отдельный аргумент из srcAddress , так как обычно это литерал. Это разделение параметров не было выполнено для атомаров в структурированной памяти.
cs_4_0 и cs_4_1 поддерживают эту инструкцию для UAV, SRV и TGSM.
Эта инструкция применяется к следующим этапам шейдера:
Вершина | Корпуса | Домен | Geometry | Пиксель | Вычисления |
---|---|---|---|---|---|
X | X | X | X | 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) | нет |
cs_4_0 и cs_4_1 поддерживают эту инструкцию для UAV, SRV и TGSM.