Características de muestreo de texturas de recursos de streaming
Entre las características de muestreo de textura de recursos de streaming se incluyen la obtención de comentarios sobre el estado del sombreador sobre las áreas asignadas, comprobar si se ha asignado todo el acceso a los datos en el recurso, la fijación para ayudar a los sombreadores a evitar áreas de recursos de streaming mipmapped que se sabe que no están asignadas y cuál es el LOD mínimo que está totalmente asignado para una superficie de filtro de textura completa.
Requisitos de las características de muestreo de texturas de recursos de streaming
Las características de muestreo de textura que se describen aquí requieren compatibilidad con el nivel 2 de los recursos de streaming.
Comentarios sobre el estado del sombreador sobre las áreas asignadas
Cualquier instrucción de sombreador que lea o escriba en un recurso de streaming hace que se registre la información de estado. Este estado se expone como un valor devuelto adicional opcional en cada instrucción de acceso a recursos que entra en un registro temporal de 32 bits. El contenido del valor devuelto es opaco. Es decir, no se permite la lectura directa por parte del programa de sombreador. Pero puede usar la función CheckAccessFullyMapped para extraer la información de estado.
Comprobación totalmente asignada
La función CheckAccessFullyMapped interpreta el estado devuelto desde un acceso a memoria e indica si todos los datos a los que se tiene acceso se asignaron en el recurso. CheckAccessFullyMapped devuelve true (0xFFFFFFFF) si los datos se asignaron o false (0x00000000) si los datos no se asignaron.
Durante las operaciones de filtro, a veces el peso de un elemento de textura determinado termina siendo 0,0. Un ejemplo es una muestra lineal con coordenadas de textura que se encuentran directamente en un centro de textura: 3 otros elementos de textura (que pueden variar por hardware) contribuyen al filtro pero con 0 peso. Estos 0 elementos de textura de peso no contribuyen al resultado del filtro, por lo que si pasan a caer en iconos NULL , no cuentan como acceso sin asignar. Tenga en cuenta que la misma garantía se aplica a los filtros de textura que incluyen varios niveles mip; si los elementos de textura de uno de los mapas mip no están asignados, pero el peso de esos elementos de textura es 0, esos elementos de textura no cuentan como acceso sin asignar.
Cuando se realiza el muestreo de un formato que tiene menos de 4 componentes (como DXGI_FORMAT_R8_UNORM), los elementos de textura que se encuentran en iconos NULL dan lugar a que se notifique un acceso asignado NULL , independientemente de los componentes que el sombreador examine realmente en el resultado. Por ejemplo, leer de R8_UNORM y enmascarar el resultado de lectura en el sombreador con .gba/.yzw no parece que necesite leer la textura en absoluto. Pero si la dirección de textura es un icono asignado NULL , la operación sigue contando como acceso de mapa NULL .
El sombreador puede comprobar el estado y seguir cualquier curso de acción deseado en caso de error. Por ejemplo, un curso de acción puede ser registrar "errores" (por ejemplo, a través de escritura UAV) o emitir otra lectura sujeta a un LOD general conocido para asignarse. Es posible que una aplicación quiera realizar un seguimiento de los accesos correctos, así como para obtener una idea de la parte del conjunto asignado de iconos a los que se ha accedido.
Una complicación para el registro no existe ningún mecanismo para notificar el conjunto exacto de iconos a los que se habría accedido. La aplicación puede hacer suposiciones conservadoras en función de conocer las coordenadas que usó para el acceso, así como el uso de la instrucción LOD; por ejemplo, tex2Dlod) devuelve el cálculo de LOD de hardware.
Otra complicación es que muchos accesos serán para los mismos iconos, por lo que se producirá un gran número de registros redundantes y posiblemente contención en la memoria. Podría ser conveniente si el hardware podría tener la opción de no molestarse en notificar los accesos de icono si se informaron en otro lugar antes. Quizás el estado de este seguimiento podría restablecerse desde la API (probablemente en los límites del marco).
Abrazadera MinLOD por muestra
Para ayudar a los sombreadores a evitar áreas en recursos de streaming mipmapped que se sabe que no están asignados, la mayoría de las instrucciones del sombreador que implican el uso de un sampler (filtrado) tienen un modo que permite al sombreador pasar un parámetro de abrazadera float32 MinLOD adicional a la muestra de textura. Este valor se encuentra en el espacio de números mipmap de la vista, en lugar del recurso subyacente.
El hardware se realizamax(fShaderMinLODClamp,fComputedLOD)
en el mismo lugar en el cálculo de LOD donde se produce la abrazadera MinLOD por recurso, que también es un valor max().
Si el resultado de aplicar la abrazadera LOD por muestra y cualquier otra abrazadera LOD definida en el sampler es un conjunto vacío, el resultado es el mismo resultado fuera de límites de acceso que la abrazadera minLOD por recurso: 0 para los componentes en formato de superficie y los valores predeterminados de los componentes que faltan.
La instrucción LOD (por ejemplo, tex2Dlod), que predescribe la abrazadera minLOD por muestra descrita aquí, devuelve un LOD abrazado y sinclampar. El LOD abrazado devuelto de esta instrucción LOD refleja todas las abrazaderas, incluida la abrazadera por recurso, pero no una abrazadera por muestra. La abrazadera por muestra se controla y conoce por el sombreador de todos modos, por lo que el autor del sombreador puede aplicar manualmente esa abrazadera al valor devuelto de la instrucción LOD si lo desea.
Filtrado de reducción mínima/máxima
Las aplicaciones pueden optar por administrar sus propias estructuras de datos que les informen del aspecto de las asignaciones para un recurso de streaming. Un ejemplo sería una superficie que contiene un elemento de textura que contiene información para cada icono de un recurso de streaming. Uno podría almacenar el primer LOD que se asigna en una ubicación de mosaico determinada. Al realizar un muestreo cuidadoso de esta estructura de datos de forma similar a la que se pretende muestrear el recurso de streaming, es posible que descubra cuál será el LOD mínimo que está totalmente asignado para una superficie de filtro de textura completa. Para facilitar este proceso, Direct3D 11.2 presenta un nuevo modo de muestreo de uso general, filtrado mínimo/máximo.
La utilidad de filtrado mínimo/máximo para el seguimiento de LOD puede ser útil para otros fines, como, quizás, el filtrado de superficies de profundidad.
El filtrado de reducción mínima/máxima es un modo en los muestreadores que capturan el mismo conjunto de elementos de textura que un filtro de textura normal capturaría. Pero en lugar de combinar los valores para generar una respuesta, devuelve los valores min() o max() de los elementos de textura capturados, por componente (por ejemplo, el mínimo de todos los valores de R, por separado del mínimo de todos los valores de G, etc.).
Las operaciones mínimas y máximas siguen las reglas de precisión aritmética de Direct3D. El orden de las comparaciones no importa.
Durante las operaciones de filtro que no son mínimas/máximas, a veces el peso de un elemento de textura determinado termina siendo 0,0. Un ejemplo es una muestra lineal con coordenadas de textura que se encuentran directamente en un centro de textura; en ese caso, 3 otros elementos de textura (que pueden variar según el hardware) contribuyen al filtro, pero con 0 peso. Para cualquiera de estos elementos de textura que serían de 0 peso en un filtro no mínimo/máximo, si el filtro es mínimo/máximo, estos elementos de textura todavía no contribuyen al resultado (y los pesos no afectan de otra manera a la operación de filtro mínimo/máximo).
La compatibilidad con esta característica depende de la compatibilidad de nivel 2 con los recursos de streaming.
Temas relacionados
Acceso de canalización a recursos de streaming