store_structured (sm5 – asm)

Gravação de acesso aleatório de componentes de 1 a 4 32 bits em uma UAV (exibição de acesso não ordenado) de buffer estruturado.

store_structured dst0[.write_mask], dstAddress[.select_component], dstByteOffset[.select_component], src0[.swizzle]
Item Descrição
dst0
[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 a dst0 no endereço em dstAddress e dstByteOffset. Nenhuma conversão de formato.

dst0 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 dst0
                    UINT BufferStride;                // from dst0
                    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.

dst0 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# casued por dstAddress significa que nada está escrito na memória fora dos limites.

Se o dstByteOffset, incluindo dstWriteMask, for o que causará 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 específico faz com que todo o conteúdo de toda a memória compartilhada fique 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 Geometria 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 de Windows 8.

Vértice Casco Domínio Geometria 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
Sombreador Modelo 5 sim
Modelo de sombreador 4.1 não
Sombreador Modelo 4 não
Sombreador Modelo 3 (DirectX HLSL) não
Sombreador Modelo 2 (DirectX HLSL) não
Modelo de sombreador 1 (DirectX HLSL) não

Assembly do Modelo de Sombreador 5 (DirectX HLSL)