store_structured (sm5 – asm)
Gravação de acesso aleatório de componentes de 1 a 4 32 bits em um UAV (modo de exibição de acesso não ordenado) de buffer estruturado.
store_structured dest[.write_mask], dstAddress[.select_component], dstByteOffset[.select_component], src0[.swizzle] |
---|
Item | Descrição |
---|---|
Dest |
[in] O endereço dos resultados da operação. |
dstAddress |
[in] O endereço no qual gravar. |
dstByteOffset |
[in] O índice da estrutura a ser gravada. |
src0 |
[in] Os componentes a serem gravados. |
Comentários
Esta instrução executa componentes de 1 a 4 *32bits gravados de src0 para dest no endereço em dstAddress e dstByteOffset. Nenhuma conversão de formato.
dest deve ser um UAV (u#). No sombreador de computação, ele também pode ser memória compartilhada do grupo de threads (g#).
dstAddress especifica o índice da estrutura a ser gravada.
O local dos dados gravados é equivalente ao pseudocódigo a seguir, que mostra o deslocamento, o endereço, o ponteiro para o conteúdo do buffer, o passo da origem e os dados armazenados linearmente.
BYTE *BufferContents; // from dest
UINT BufferStride; // from dest
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));
Esse pseudocódigo mostra como a operação funciona, mas os dados reais não precisam ser armazenados linearmente. Se os dados não forem armazenados linearmente, a operação real da instrução precisará corresponder ao comportamento da operação acima.
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.
Fora dos limites endereçados em u# casued por dstAddress significa que nada é gravado na memória fora dos limites.
Se o dstByteOffset, incluindo dstWriteMask, for o que causa acesso fora dos limites a você#, todo o conteúdo do UAV ficará indefinido.
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.
dstByteOffset é um argumento separado de dstAddress porque geralmente é um literal. Essa separação de parâmetros não foi feita para atômicos na memória estruturada.
cs_4_0 e cs_4_1 dão suporte a esta instrução para UAV e TGSM.
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 |