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 | sí |
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 |