store_structured (sm5 - asm)

Escritura de acceso aleatorio de componentes de 1 a 4 de 32 bits en una vista de acceso sin ordenar del búfer estructurado (UAV).

store_structured dst0[.write_mask], dstAddress[.select_component], dstByteOffset[.select_component], src0[.swizzle]
Elemento Descripción
dst0
[in] Dirección de los resultados de la operación.
dstAddress
[in] Dirección en la que se va a escribir.
dstByteOffset
[in] Índice de la estructura que se va a escribir.
src0
[in] Componentes que se van a escribir.

Comentarios

Esta instrucción realiza componentes de 1 a 4 *32 bits escritos de src0 a dst0 en la dirección de dstAddress y dstByteOffset. Sin conversión de formato.

dst0 debe ser un UAV (u#). En el sombreador de proceso, también puede ser memoria compartida del grupo de subprocesos (g#).

dstAddress especifica el índice de la estructura que se va a escribir.

La ubicación de los datos escritos es equivalente al pseudocódigo siguiente, que muestra el desplazamiento, la dirección, el puntero al contenido del búfer, el intervalo del origen y los datos almacenados linealmente.

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

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.

dst0 solo puede tener una máscara de escritura que sea una de las siguientes: .x, .xy, .xyz, .xyzw. La máscara de escritura determina el número de componentes de 32 bits que se van a escribir sin espacios.

Fuera de los límites que direccionan en u# casuados por dstAddress significa que no se escribe nada en la memoria insuficiente de los límites.

Si dstByteOffset, incluido dstWriteMask, es lo que provoca el acceso fuera de los límites a usted#, todo el contenido del UAV se convierte en indefinido.

El direccionamiento fuera de los límites en g# (los límites de ese g# determinado, en lugar de toda la memoria compartida) para cualquier componente de 32 bits determinado hace que todo el contenido de toda la memoria compartida se defina.

dstByteOffset es un argumento independiente de dstAddress porque suele ser un literal. Esta separación de parámetros no se ha realizado para atómicos en memoria estructurada.

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

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

Vértice Casco Domain Geometría Píxel Proceso
X X

Dado que las UAV 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 el tiempo de ejecución de Direct3D 11.1, que está disponible a partir de Windows 8.

Vértice Casco Domain Geometría Píxel Proceso
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

Ensamblado del modelo de sombreador 5 (DirectX HLSL)