Compartir a través de


Sombreadores de proceso en hardware de nivel inferior

Direct3D 11 proporciona la capacidad de usar sombreadores de proceso que funcionan en la mayoría del hardware de Direct3D 10.x, con algunas limitaciones para el funcionamiento. La tecnología de sombreador de proceso también se conoce como tecnología DirectCompute. En este tema se describe cómo usar sombreadores de proceso en una aplicación de Direct3D 11 en hardware de Direct3D 10.

La compatibilidad con sombreadores de proceso en hardware de nivel inferior solo es para dispositivos compatibles con Direct3D 10.x. Los sombreadores de proceso no se pueden usar en hardware de Direct3D 9.x.

Para comprobar si el hardware de Direct3D 10.x admite sombreadores de proceso, llame a ID3D11Device::CheckFeatureSupport. En la llamada CheckFeatureSupport , pase el valor D3D11_FEATURE_D3D10_X_HARDWARE_OPTIONS al parámetro Feature , pase un puntero a la estructura D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS al parámetro pFeatureSupportData y pase el tamaño de la estructura D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS al parámetro FeatureSupportDataSize . CheckFeatureSupport devuelve TRUE en el miembro ComputeShaders_Plus_RawAndStructuredBuffers_Via_Shader_4_x de D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS si el hardware de Direct3D 10.x admite sombreadores de proceso.

En la sección 10Level9 Reference (Referencia de 10Level9 ) se enumeran las diferencias entre la forma en que se comportan varios métodos ID3D11DeviceContext en varios niveles de características de ID3D11Device y ID3D11DeviceContext .

Vistas de acceso desordenadas (UAV)

Las vistas de acceso sin ordenar (RWByteAddressBuffer) y Structured (RWStructuredBuffer) son compatibles con el hardware de nivel inferior, con las siguientes limitaciones:

  • Solo se puede enlazar una sola UAV a una canalización a la vez a través de ID3D11DeviceContext::CSSetUnorderedAccessViews.
  • El desplazamiento base de un UAV sin formato debe alinearse en un límite de 256 bytes (en lugar de una alineación de 16 bytes necesaria para el hardware de Direct3D 11).

Los UAV con tipo no se admiten en hardware de nivel inferior. Esto incluye Texture1D, Texture2D y Texture3D UAV.

Los sombreadores de píxeles en hardware de nivel inferior no admiten el acceso desordenado.

Vistas de recursos del sombreador (SRV)

Los búferes sin procesar y estructurados como vistas de recursos de sombreador se admiten en hardware de nivel inferior para el acceso de solo lectura, ya que están en hardware de Direct3D 11. Estos tipos de recursos se admiten para sombreadores de vértices, sombreadores de geometría, sombreadores de píxeles y sombreadores de proceso.

Grupos de subprocesos

Un sombreador de proceso se puede ejecutar en muchos subprocesos en paralelo, dentro de un grupo de subprocesos.

Los grupos de subprocesos se admiten en hardware de nivel inferior, con las siguientes limitaciones:

Dimensiones de grupo de subprocesos

Los grupos de subprocesos definidos para el hardware de nivel inferior se limitan a las dimensiones X e Y de 768. Esto es menor que los valores máximos de 1024 para el hardware de Direct3D 11. La dimensión Z máxima de 64 no cambia.

El número total de subprocesos del grupo (X × Y × Z) está limitado a 768. Esto es menor que el límite de 1024 para el hardware de Direct3D 11.

Si se superan estos números, se producirá un error en la compilación del sombreador.

índices de subprocesos de Two-Dimensional

Un subproceso determinado dentro de un grupo de subprocesos se indexa mediante un vector 3D proporcionado por (x,y,z).

En el caso de los sombreadores de proceso que funcionan en hardware de nivel inferior, los grupos de subprocesos solo admiten dos dimensiones. Esto significa que el valor Z del vector 3D siempre debe ser 1.

Esta limitación se aplica específicamente a lo siguiente:

Memoria compartida del grupo de subprocesos (TGSM)

La memoria compartida del grupo de subprocesos está limitada a 16 Kb en hardware de nivel inferior. Esto es menor que el 32 Kb que está disponible para el hardware de Direct3D 11.

Un subproceso del sombreador de proceso solo puede escribir en su propia región de TGSM. Esta región de solo escritura tiene un tamaño máximo de 256 bytes o menos, con la disminución máxima a medida que aumenta el número de subprocesos declarados para el grupo.

En la tabla siguiente se define el tamaño máximo por subproceso de una región TGSM para el número de subprocesos del grupo:

Número de subprocesos en grupo Tamaño máximo de TGSM por subproceso
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

 

Un subproceso del sombreador de proceso puede leer el TGSM desde cualquier ubicación.

D3DCompile con D3DCOMPILE_SKIP_OPTIMIZATION

D3DCompile devuelve E_NOTIMPL cuando se pasa cs_4_0 como destino del sombreador junto con la opción de compilación D3DCOMPILE_SKIP_OPTIMIZATION . El destino del sombreador cs_5_0 funciona con D3DCOMPILE_SKIP_OPTIMIZATION.

Direct3D 11 en hardware de nivel inferior