ld_structured (sm5 – asm)

Leitura de acesso aleatório de componentes de 1 a 4 32 bits de um buffer estruturado.

ld_structured dest[.mask], srcAddress[.select_component], srcByteOffset[.select_component], src0[.swizzle]
Item Descrição
Dest
[in] O endereço dos resultados da operação.
srcAddress
[in] Especifica o índice da estrutura a ser lida.
srcByteOffset
[in] Especifica o deslocamento de bytes na estrutura da qual começar a ler.
src0
O buffer do qual ler. Esse parâmetro deve ser um SRV (t#), UAV (u#). No sombreador de computação, ele também pode ser memória compartilhada do grupo de threads (g#).

Comentários

Os dados lidos da estrutura são equivalentes ao seguinte pseudocódigo: em que temos 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 SRV or UAV
                    UINT BufferStride;            // from base resource
                    UINT srcAddress, srcByteOffset;   // from source registers
                    BYTE *ReadLocation;           // value to calculate
                    ReadLocation = BufferContents 
                                + BufferStride * srcAddress
                                + srcByteOffset;

                    UINT32 Temp[4];  // used to make code shorter

                    // apply the source resource swizzle on source data
                    Temp = read_and_swizzle(ReadLocation, srcSwizzle);

                    // write the components to the output based on mask
                    ApplyWriteMask(dstRegister, dstWriteMask, Temp);

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.

O endereçamento fora dos limites em u#/t# de qualquer componente de 32 bits retorna 0 para esse componente, exceto se srcByteOffset, mais swizzle é o que causa acesso fora dos limites a você#/t#, o valor retornado para todos os componentes é 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 retorna um resultado indefinido.

srcByteOffset é um argumento separado de srcAddress 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, SRV e TGSM.

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

Vértice Casco Domínio Geometry Pixel Computação
X X X X X X

Como os UAVs estão disponíveis em todos os estágios de sombreador para o Direct3D 11.1, essa instrução se aplica a todos os estágios de sombreador para UAVs para o runtime do Direct3D 11.1, que está disponível a partir de 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

cs_4_0 e cs_4_1 dão suporte a esta instrução para UAV, SRV e TGSM.

Assembly do Modelo de Sombreador 5 (DirectX HLSL)