store_raw (sm5 - asm)
Escritura de acceso aleatorio de componentes de 1 a 4 32 bits en memoria sin tipo.
| store_raw dst0[.write_mask], dstByteOffset[.select_component], src0[.swizzle] |
|---|
| Elemento | Descripción |
|---|---|
| dst0 |
[in] Dirección de memoria. |
| dstByteOffset |
[in] Desplazamiento. |
| src0 |
[in] Componentes que se van a escribir. |
Observaciones
Esta instrucción realiza componentes de 1 a 4 *componentes de 32 bits escritos de src0 a dst0 en el desplazamiento en dstByteOffset. No hay ninguna conversión de formato.
dst0 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 de 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. 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 se direcciona en u# significa que no se escribe nada en la memoria fuera de los límites; cualquier parte que esté en límites se escribe correctamente.
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 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 | 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 entorno 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 | 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 |