store_raw (sm5 – asm)
Gravação de acesso aleatório de componentes de 1 a 4 32 bits na memória sem tipo.
store_raw dest[.write_mask], dstByteOffset[.select_component], src0[.swizzle] |
---|
Item | Descrição |
---|---|
Dest |
[in] O endereço de memória. |
dstByteOffset |
[in] O deslocamento. |
src0 |
[in] Os componentes a serem gravados. |
Comentários
Esta instrução executa componentes de 1 a 4 *componentes de 32 bits gravados de src0 para dest no deslocamento em dstByteOffset. Não há conversão de formato.
dest deve ser um UAV (u#) ou, no sombreador de computação, ele também pode ser memória compartilhada do grupo de threads (g#).
dstByteOffset especifica o valor base de 32 bits na memória para uma janela de quatro valores sequenciais de 32 bits nos quais os dados podem ser gravados, dependendo do swizzle e da máscara em outros parâmetros.
O local dos dados gravados é equivalente ao pseudocódigo a seguir que mostra o endereço, o ponteiro para o conteúdo do buffer e os dados armazenados linearmente.
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));
Esse pseudocódigo mostra como a operação funciona, mas os dados reais não precisam ser armazenados linearmente. dest só pode ter uma máscara de gravação que é uma das seguintes: .x, .xy, .xyz, .xyzw. A máscara de gravação determina o número de componentes de 32 bits a serem gravados sem lacunas.
Endereçamento fora dos limites em u# significa que nada é gravado na memória fora dos limites; qualquer parte que esteja nos limites é gravada corretamente.
O endereçamento fora dos limites em g# (os limites desse g#específico, em vez de toda a memória compartilhada) para qualquer componente de 32 bits determinado faz com que todo o conteúdo de toda a memória compartilhada se torne indefinido.
cs_4_0 e cs_4_1 dão suporte a esta instrução para UAV.
Esta instrução se aplica aos seguintes estágios de sombreador:
Vértice | Casco | Domínio | Geometry | Pixel | Computação |
---|---|---|---|---|---|
X | X |
Como os UAVs estão disponíveis em todos os estágios de sombreador para Direct3D 11.1, essa instrução se aplica a todos os estágios de sombreador para o runtime do Direct3D 11.1, que está disponível a partir do Windows 8.
Vértice | Casco | Domínio | Geometry | Pixel | Computação |
---|---|---|---|---|---|
X | X | X | X | X | X |
Modelo de sombreador mínimo
Esta instrução tem suporte nos seguintes modelos de sombreador:
Modelo de Sombreador | Com suporte |
---|---|
Modelo de sombreador 5 | sim |
Modelo de sombreador 4.1 | não |
Modelo de sombreador 4 | não |
Modelo de Sombreador 3 (DirectX HLSL) | não |
Modelo de Sombreador 2 (DirectX HLSL) | não |
Modelo de Sombreador 1 (DirectX HLSL) | não |