store_raw (sm5 - asm)

Escritura de acceso aleatorio de componentes de 1 a 4 32 bits en memoria sin tipo.

store_raw dest[.write_mask], dstByteOffset[.select_component], src0[.swizzle]
Elemento Descripción
Dest
[in] Dirección de memoria.
dstByteOffset
[in] Desplazamiento.
src0
[in] Componentes que se van a escribir.

Comentarios

Esta instrucción realiza componentes de 1 a 4 *componentes de 32 bits escritos de src0parast en el desplazamiento en dstByteOffset. No hay ninguna conversión de formato.

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

dstByteOffset especifica el valor base de 32 bits en memoria para una ventana de 4 valores secuenciales de 32 bits en los que se pueden escribir datos, en función del swizzle y mask en otros parámetros.

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

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

Este pseudocódigo muestra cómo funciona la operación, pero los datos reales no tienen que almacenarse linealmente. dest 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.

El direccionamiento fuera de los límites en u# significa que no se escribe nada en la memoria delimitada; cualquier parte que esté en los límites se escribe correctamente.

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.

cs_4_0 y cs_4_1 admiten esta instrucción para UAV.

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

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

Ensamblado del modelo de sombreador 5 (DirectX HLSL)