Compartir a través de


Mapas en un grupo de iconos

Cuando se crea un recurso con la marca D3D11_RESOURCE_MISC_TILED , los iconos que componen el recurso proceden de apuntar a ubicaciones de un grupo de iconos. Un grupo de iconos es un grupo de memoria (respaldado por una o varias asignaciones en segundo plano, sin ver por la aplicación). El sistema operativo y el controlador de pantalla administran este grupo de memoria y una aplicación entiende fácilmente la superficie de memoria. Los recursos en mosaico asignan regiones de 64 KB apuntando a ubicaciones de un grupo de iconos. Una caída de esta configuración es que permite que varios recursos compartan y reutilicen los mismos iconos, y también para que los mismos iconos se vuelvan a usar en diferentes ubicaciones dentro de un recurso si lo desea.

El costo de la flexibilidad de rellenar los iconos de un recurso fuera de un grupo de iconos es que el recurso tiene que realizar el trabajo de definir y mantener la asignación de los iconos del grupo de mosaicos que representan los iconos necesarios para el recurso. Se pueden cambiar las asignaciones de iconos. Además, no todos los iconos de un recurso deben asignarse a la vez; un recurso puede tener asignaciones NULL . Una asignación NULL define un icono como no disponible desde el punto de vista del recurso que accede a él.

Se pueden crear varios grupos de iconos y cualquier número de recursos en mosaico puede asignarse a cualquier grupo de iconos determinado al mismo tiempo. Los grupos de mosaicos también se pueden cultivar o reducir. Para obtener más información, consulte Cambio de tamaño del grupo de iconos. Una restricción que existe para simplificar la implementación del controlador de pantalla y el entorno de ejecución es que un recurso en mosaico determinado solo puede tener asignaciones en un grupo de iconos como máximo a la vez (en lugar de tener una asignación simultánea a varios grupos de iconos).

La cantidad de almacenamiento asociada a un propio recurso en mosaico (es decir, memoria independiente del grupo de iconos) es aproximadamente proporcional al número de iconos asignados realmente al grupo en un momento dado. En el hardware, este hecho reduce verticalmente la superficie de memoria para el almacenamiento de tablas de páginas aproximadamente con la cantidad de iconos asignados (por ejemplo, mediante un esquema de tabla de páginas de varios niveles según corresponda).

El grupo de iconos se puede considerar como una abstracción de software completa que permite a las aplicaciones de Direct3D poder programar de forma eficaz las tablas de páginas en la unidad de procesamiento de gráficos (GPU) sin tener que conocer los detalles de implementación de bajo nivel (o tratar directamente con direcciones de puntero). Los grupos de iconos no aplican ningún nivel adicional de direccionamiento indirecto en hardware. Las optimizaciones de una tabla de página de nivel único mediante construcciones como directorios de página son independientes del concepto del grupo de iconos.

Vamos a explorar qué almacenamiento podría requerir la propia tabla de páginas en el peor de los casos (aunque en las implementaciones de la práctica solo requieren almacenamiento aproximadamente proporcional a lo que está asignado).

Supongamos que cada entrada de tabla de páginas es de 64 bits.

Para el peor de los casos, el tamaño de la tabla de páginas alcanza una sola superficie, dados los límites de recursos de Direct3D 11, supongamos que se crea un recurso en mosaico con un formato de 128 bits por elemento (por ejemplo, un float RGBA), por lo que un icono de 64 KB contiene solo 4096 píxeles. El tamaño máximo admitido de Texture2DArray de 16384*16384*2048 (pero con un solo mapa mip) requeriría aproximadamente 1 GB de almacenamiento en la tabla de páginas si se rellena completamente (no se incluyen mapas mip) con entradas de tabla de 64 bits. Agregar mapas mip aumentaría el almacenamiento de tablas de páginas totalmente asignado (peor de los casos) en aproximadamente un tercio, a aproximadamente 1,3 GB.

Este caso daría acceso a aproximadamente 10,6 terabytes de memoria direccionable. Sin embargo, podría haber un límite en la cantidad de memoria direccionable, lo que reduciría estas cantidades, quizás alrededor del intervalo de terabyte.

Otro caso que se debe tener en cuenta es un único recurso en mosaico Texture2D de 16384*16384 con un formato de 32 bits por elemento, incluidos mapas mip. El espacio necesario en una tabla de páginas completamente rellenada sería aproximadamente de 170 KB con entradas de tabla de 64 bits.

Por último, considere un ejemplo con un formato BC, por ejemplo, BC7 con 128 bits por icono de 4 x 4 píxeles. Es un byte por píxel. Texture2DArray de 16384*16384*2048, incluidos los mapas mip, requeriría aproximadamente 85 MB para rellenar completamente esta memoria en una tabla de páginas. Esto no es malo teniendo en cuenta que esto permite que un recurso en mosaico abarque 550 gigapixeles (512 GB de memoria en este caso).

En la práctica, en ninguna parte cercana a estas asignaciones completas se definiría, dado que la cantidad de memoria física disponible no permitiría asignar y hacer referencia a ella en cualquier lugar cerca de esa cantidad. Sin embargo, con un grupo de iconos, las aplicaciones podrían optar por reutilizar iconos (como ejemplo sencillo, reutilizar un icono de color "negro" para regiones negras grandes en una imagen): usar eficazmente el grupo de mosaicos (es decir, asignaciones de tablas de páginas) como una herramienta para la compresión de memoria.

El contenido inicial de la tabla de páginas es NULL para todas las entradas. Las aplicaciones tampoco pueden pasar datos iniciales para el contenido de memoria de la superficie, ya que comienza sin respaldo de memoria.

En esta sección

Tema Descripción
Creación de grupos de iconos
Un grupo de iconos se crea a través de la API ID3D11Device::CreateBuffer pasando la marca de D3D11_RESOURCE_MISC_TILE_POOL en el miembro MiscFlags de la estructura D3D11_BUFFER_DESC a la que apunta el parámetro pDesc .
Cambio del tamaño de los grupos de iconos
Use la API ID3D11DeviceContext2::ResizeTilePool para aumentar un grupo de iconos si la aplicación necesita más espacio de trabajo para la asignación de recursos en mosaico en él o para reducir si se necesita menos espacio.
Seguimiento de peligros frente a recursos de grupos de iconos
En el caso de los recursos no en mosaico, Direct3D puede evitar ciertas condiciones de peligro durante la representación, pero debido a que el seguimiento de riesgos estaría en un nivel de mosaico para los recursos en mosaico, el seguimiento de las condiciones de peligro durante la representación de recursos en mosaico podría ser demasiado caro.

Creación de recursos en mosaico