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.