Vistas ordenadas por el rasterizador
Las vistas ordenadas por rasterizador (ROV) permiten que el código del sombreador de píxeles marque enlaces de vista de acceso desordenado (UAV) con una declaración que modifique los requisitos normales para el orden de los resultados de canalización de gráficos para UAV. Esto permite que los algoritmos de transparencia independiente del orden (OIT) funcionen, lo que proporciona resultados de representación mucho mejores cuando varios objetos transparentes están en línea entre sí en una vista.
Información general
Las canalizaciones de gráficos estándar pueden tener problemas para componer correctamente varias texturas que contienen transparencia. Objetos como barreras de alambre, humo, fuego, vegetación y vidrio coloreado usan transparencia para obtener el efecto deseado. Los problemas surgen cuando varias texturas que contienen transparencia están en línea entre sí (humo delante de una valla delante de un edificio de vidrio que contiene vegetación, como ejemplo). Las vistas ordenadas por rasterizador (ROV) permiten que los algoritmos OIT subyacentes usen características del hardware para intentar resolver correctamente el orden de transparencia. El sombreador de píxeles controla la transparencia.
Las vistas ordenadas por rasterizador (ROV) permiten que el código del sombreador de píxeles marque enlaces UAV con una declaración que modifique los requisitos normales para el orden de los resultados de la canalización de gráficos para los UAV.
Las ROV garantizan el orden de los accesos UAV para cualquier par de invocaciones de sombreador de píxeles superpuestas. En este caso, "superposición" significa que las invocaciones se generan mediante las mismas llamadas de dibujo y comparten la misma coordenada de píxel cuando se encuentra en modo de ejecución de frecuencia de píxeles y la misma coordenada de píxel y muestra en modo de frecuencia de muestra.
El orden en que se ejecutan accesos ROV superpuestos de invocaciones de sombreador de píxeles es idéntico al orden en que se envía la geometría. Esto significa que, para las invocaciones de sombreador de píxeles superpuestas, las escrituras ROV realizadas por una invocación de sombreador de píxeles deben estar disponibles para ser leídas por una invocación posterior y no deben afectar a las lecturas por una invocación anterior. Las lecturas de ROV realizadas por una invocación de sombreador de píxeles deben reflejar las escrituras realizadas por una invocación anterior y no deben reflejar las escrituras realizadas por una invocación posterior. Esto es importante para los UAV porque se omiten explícitamente de las garantías de invariable de salida establecidas normalmente por el orden fijo de los resultados de la canalización de gráficos.
Detalles de la implementación
Las vistas ordenadas por rasterizador (ROV) se declaran con los siguientes nuevos objetos de lenguaje de sombreador de alto nivel (HLSL) y solo están disponibles para el sombreador de píxeles:
RasterizerOrderedBuffer
RasterizerOrderedByteAddressBuffer
RasterizerOrderedStructuredBuffer
RasterizerOrderedTexture1D
RasterizerOrderedTexture1DArray
RasterizerOrderedTexture2D
RasterizerOrderedTexture2DArray
RasterizerOrderedTexture3D
Use estos objetos de la misma manera que otros objetos UAV (como RWBuffer
etc.).
API summary
Las ROV son una construcción de solo HLSL que aplica una semántica de comportamiento diferente a los UAV. Todas las API relevantes para las UAV también son relevantes para las ROV. Tenga en cuenta que el método, las estructuras y la clase auxiliar siguientes hacen referencia al rasterizador:
- D3D12_RASTERIZER_DESC : estructura que contiene la descripción del rasterizador.
- D3D12_FEATURE_DATA_D3D12_OPTIONS : estructura que contiene un valor booleano, lo que indica la compatibilidad.
- CheckFeatureSupport : método para acceder a las características admitidas.
- CD3DX12_RASTERIZER_DESC : clase auxiliar para crear descripciones de rasterizador.
- D3D12_GRAPHICS_PIPELINE_STATE_DESC : estructura que contiene el estado de la canalización.