armazenamento _ estruturado (SM5-ASM)

Gravação aleatória-acesso de componentes de 1-4 32 bits em um UAV (modo de exibição de acesso não ordenado) de buffer estruturado.

armazene a _ [ máscara dst0. Write _ ] , dstAddress [ . Select, o _ componente ] dstByteOffset [ . Select _ ] , src0 [ . swizzle]
Item Descrição
dst0
[no ] endereço dos resultados da operação.
dstAddress
[no ] endereço no qual gravar.
dstByteOffset
[no ] índice da estrutura a ser gravada.
src0
[nos ] componentes a serem gravados.

Comentários

Esta instrução executa * componentes de 32 bits do componente de 1-4 gravados de src0 para 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 a 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 stride da fonte 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 seja 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 intervalos.

O endereçamento fora dos limites em u # casued by dstAddress significa que nada é gravado na memória fora dos limites.

Se o dstByteOffset, incluindo dstWriteMask, for o que faz com que os limites tenham acesso a você # , todo o conteúdo do UAV se tornará indefinido.

O endereçamento fora dos limites em g # (os limites desse g específico # , em oposição a 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 é normalmente um literal. Essa separação de parâmetro não foi feita para Atomics na memória estruturada.

cs _ 4 _ 0 e cs _ 4 _ 1 dão suporte a essa instrução para UAV e TGSM.

Essa instrução se aplica aos seguintes estágios de sombreador:

Vértice Envoltória Domínio Geometria 16x16 Computação
X X

Como UAVs estão disponíveis em todos os estágios do sombreador para o Direct3D 11,1, essa instrução se aplica a todos os estágios do sombreador para o tempo de execução do Direct3D 11,1, que está disponível a partir do Windows 8.

Vértice Envoltória Domínio Geometria 16x16 Computação
X X X X X X

Modelo de sombreamento mínimo

Essa instrução tem suporte nos seguintes modelos de sombreador:

Modelo de Sombreador Com suporte
Modelo de sombreador 5 sim
Modelo do 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

Assembly do Shader Model 5 (DirectX HLSL)