Sombreadores de computação no hardware de nível inferior

O Direct3D 11 fornece a capacidade de usar sombreadores de computação que operam na maioria dos hardwares direct3D 10.x, com algumas limitações para a operação. A tecnologia de sombreador de computação também é conhecida como a tecnologia DirectCompute. Este tópico discute como usar sombreadores de computação em um aplicativo Direct3D 11 no hardware direct3D 10.

O suporte para sombreadores de computação no hardware de nível inferior é apenas para dispositivos compatíveis com o Direct3D 10.x. Os sombreadores de computação não podem ser usados no hardware Direct3D 9.x.

Para marcar se o hardware Direct3D 10.x der suporte a sombreadores de computação, chame ID3D11Device::CheckFeatureSupport. Na chamada CheckFeatureSupport , passe o valor D3D11_FEATURE_D3D10_X_HARDWARE_OPTIONS para o parâmetro Feature , passe um ponteiro para a estrutura D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS para o parâmetro pFeatureSupportData e passe o tamanho da estrutura D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS para o parâmetro FeatureSupportDataSize . CheckFeatureSupport retornará TRUE no ComputeShaders_Plus_RawAndStructuredBuffers_Via_Shader_4_x membro do D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS se o hardware Direct3D 10.x der suporte a sombreadores de computação.

A seção 10Level9 Reference lista as diferenças entre como vários métodos ID3D11Device e ID3D11DeviceContext se comportam em vários níveis de recurso 10Level9.

Exibições de acesso não ordenadas (UAVs)

As exibições brutas (RWByteAddressBuffer) e Estruturadas (RWStructuredBuffer) têm suporte no hardware de nível inferior, com as seguintes limitações:

  • Somente um único UAV pode ser associado a um pipeline por vez por meio de ID3D11DeviceContext::CSSetUnorderedAccessViews.
  • O deslocamento base para um UAV Bruto deve ser alinhado em um limite de 256 bytes (em vez do alinhamento de 16 bytes necessário para hardware Direct3D 11).

Não há suporte para UAVs tipadas em hardware de nível inferior. Isso inclui UAVs Texture1D, Texture2D e Texture3D .

Sombreadores de pixel em hardware de nível inferior não dão suporte ao acesso não ordenado.

SRVs (Modos de Exibição de Recurso de Sombreador)

Buffers brutos e estruturados como exibições de recursos de sombreador têm suporte no hardware de nível inferior para acesso somente leitura, como estão no hardware direct3D 11. Esses tipos de recursos têm suporte para Sombreadores de Vértice, Sombreadores de Geometria, Sombreadores de Pixel, bem como Sombreadores de Computação.

Grupos de threads

Um sombreador de computação pode ser executado em muitos threads em paralelo, dentro de um grupo de threads.

Os grupos de threads têm suporte no hardware de nível inferior, com as seguintes limitações:

Dimensões do grupo de threads

Os grupos de threads definidos para hardware de nível inferior são limitados às dimensões X e Y de 768. Isso é menor que os valores máximos de 1024 para hardware Direct3D 11. A dimensão Z máxima de 64 é inalterada.

O número total de threads no grupo (X × Y × Z) é limitado a 768. Isso é menor que o limite de 1024 para hardware Direct3D 11.

Se esses números forem excedidos, a compilação do sombreador falhará.

índices de thread Two-Dimensional

Um thread específico dentro de um grupo de threads é indexado usando um vetor 3D fornecido por (x,y,z).

Para sombreadores de computação que operam em hardware de nível inferior, os grupos de threads dão suporte apenas a duas dimensões. Isso significa que o valor Z no vetor 3D deve ser sempre 1.

Essa limitação se aplica especificamente ao seguinte:

TGSM (Memória Compartilhada do Grupo de Threads)

A Memória Compartilhada do Grupo de Threads é limitada a 16 Kb no hardware de nível inferior. Isso é menor que o hardware de 32 Kb que está disponível para o hardware do Direct3D 11.

Um thread do Sombreador de Computação só pode gravar em sua própria região do TGSM. Essa região somente gravação tem um tamanho máximo de 256 bytes ou menos, com a diminuição máxima à medida que o número de threads declarados para o grupo aumenta.

A tabela a seguir define o tamanho máximo por thread de uma região TGSM para o número de threads no grupo:

Número de threads no grupo Tamanho máximo de TGSM por thread
0-64 256
65-68 240
69-72 224
73-76 208
77-84 192
85-92 176
93-100 160
101-112 144
113-128 128
129-144 112
145-168 96
169-204 80
205-256 64
257-340 48
341-512 32
513-768 16

 

Um thread do Sombreador de Computação pode ler o TGSM de qualquer local.

D3DCompile com D3DCOMPILE_SKIP_OPTIMIZATION

D3DCompile retorna E_NOTIMPL quando você passa cs_4_0 como o destino do sombreador junto com a opção de compilação D3DCOMPILE_SKIP_OPTIMIZATION . O destino do sombreador cs_5_0 funciona com D3DCOMPILE_SKIP_OPTIMIZATION.

Direct3D 11 no hardware de nível inferior