ld_structured (sm5 - asm)

Lectura de acceso aleatorio de componentes de 1 a 4 32 bits desde un búfer estructurado.

ld_structured dest[.mask], srcAddress[.select_component], srcByteOffset[.select_component], src0[.swizzle]
Elemento Descripción
Dest
[in] Dirección de los resultados de la operación.
srcAddress
[in] Especifica el índice de la estructura que se va a leer.
srcByteOffset
[in] Especifica el desplazamiento de bytes en la estructura desde la que empezar a leer.
src0
Búfer desde el que se va a leer. Este parámetro debe ser un SRV (t#), UAV (u#). En el sombreador de proceso, también puede ser memoria compartida del grupo de subprocesos (g#).

Comentarios

Los datos leídos de la estructura son equivalentes al pseudocódigo siguiente: donde tenemos el desplazamiento, la dirección, el puntero al contenido del búfer, el intervalo del origen y los datos almacenados linealmente.

                    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);

Este pseudocódigo muestra cómo funciona la operación, pero los datos reales no tienen que almacenarse linealmente. Si los datos no se almacenan linealmente, la operación real de la instrucción debe coincidir con el comportamiento de la operación anterior.

Fuera de los límites que se direccionan en u#/t# de cualquier componente de 32 bits determinado devuelve 0 para ese componente, excepto si srcByteOffset, más swizzle es lo que provoca el acceso fuera de los límites a usted#/t#, el valor devuelto para todos los componentes no está definido.

Fuera de los límites que se direccionan en g# (los límites de ese g#concreto, en lugar de toda la memoria compartida) para cualquier componente de 32 bits determinado devuelve un resultado indefinido.

srcByteOffset es un argumento independiente de srcAddress porque suele ser un literal. Esta separación de parámetros no se ha realizado para atomics en memoria estructurada.

cs_4_0 y cs_4_1 admiten esta instrucción para UAV, SRV y TGSM.

Esta instrucción se aplica a las siguientes fases del sombreador:

Vértice Casco Dominio Geometría Píxel Compute
X X X X x x

Dado que las UMV están disponibles en todas las fases del sombreador para Direct3D 11.1, esta instrucción se aplica a todas las fases del sombreador para los UMV para el entorno de ejecución de Direct3D 11.1, que está disponible a partir de Windows 8.

Vértice Casco Dominio Geometría Píxel Compute
X X X X x x

Modelo de sombreador mínimo

Esta instrucción se admite en los siguientes modelos de sombreador:

Modelo de sombreador Compatible
Modelo de sombreador 5
Modelo de sombreador 4.1 No
Modelo de sombreador 4 No
Modelo de sombreador 3 (DirectX HLSL) No
Modelo de sombreador 2 (DirectX HLSL) No
Modelo de sombreador 1 (DirectX HLSL) No

cs_4_0 y cs_4_1 admiten esta instrucción para UAV, SRV y TGSM.

Ensamblado del modelo de sombreador 5 (DirectX HLSL)