La necesidad de recursos de streamingThe need for streaming resources

Los recursos de streaming son necesarios para que la memoria de la GPU no se desperdicie en el almacenamiento de regiones de superficies a las que no se tiene acceso y para indicar al hardware cómo filtrar por los mosaicos adyacentes.Streaming resources are needed so GPU memory isn't wasted storing regions of surfaces that won't be accessed, and to tell the hardware how to filter across adjacent tiles.

Recursos de streaming o texturas dispersasStreaming resources or sparse textures

Los recursos de streaming (denominados recursos en mosaico en Direct3D 11) son recursos lógicos de gran tamaño que utilizan pequeñas cantidades de memoria física.Streaming resources (called tiled resources in Direct3D 11), are large logical resources that use small amounts of physical memory.

Otro nombre para los recursos de streaming son las texturas dispersas.Another name for streaming resources is sparse textures. "Disperso" transmite tanto la naturaleza en mosaico de los recursos como la principal razón para su disposición en mosaico, de modo que no se espera que se asignen todos ellos a la vez."Sparse" conveys both the tiled nature of the resources as well as perhaps the primary reason for tiling them - that not all of them are expected to be mapped at once. De hecho, una aplicación puede crear un recurso de streaming en el que no se crea ningún dato para todas las regiones y MIPS del recurso, de manera intencionada.In fact, an application could conceivably author a streaming resource in which no data is authored for all regions+mips of the resource, intentionally. Por lo tanto, el propio contenido podría ser disperso y la asignación del contenido en la memoria de la unidad de procesamiento de gráficos (GPU) en un momento dado sería un subconjunto de eso (incluso más disperso).So, the content itself could be sparse, and the mapping of the content in graphics processing unit (GPU) memory at a given time would be a subset of that (even more sparse).

Sin mosaico, las asignaciones de memoria se administran en la granularidad de los SubrecursosWithout tiling, memory allocations are managed at subresource granularity

En un sistema de gráficos (es decir, el sistema operativo, el controlador de pantalla y el hardware de gráficos) sin compatibilidad con recursos de streaming, el sistema de gráficos administra todas las asignaciones de memoria de Direct3D en la granularidad de los recursos.In a graphics system (that is, the operating system, display driver, and graphics hardware) without streaming resource support, the graphics system manages all Direct3D memory allocations at subresource granularity.

En el caso de un búfer, todo el búfer es el subrecurso.For a buffer, the entire buffer is the subresource.

En el caso de una textura(por ejemplo, Texture2D), cada nivel de MIP es un subrecurso; en el caso de una matriz de texturas (por ejemplo, Texture2DArray), cada nivel de MIP en un segmento de matriz determinado es un subrecurso.For a Texture, (for example, Texture2D), each mip level is a subresource; for a texture array, (for example, Texture2DArray) each mip level at a given array slice is a subresource. El sistema de gráficos solo expone la capacidad de administrar la asignación de asignaciones en esta granularidad de Subrecursos.The graphics system only exposes the ability to manage the mapping of allocations at this subresource granularity. En el contexto de los recursos de streaming, la "asignación" hace referencia a hacer visibles los datos en la GPU.In the context of streaming resources, "mapping" refers to making data visible to the GPU.

Sin mosaico, no puede tener acceso solo a una pequeña parte de la cadena de mipmapWithout tiling, can't access only a small portion of mipmap chain

Supongamos que una aplicación sabe que una operación de representación determinada solo necesita tener acceso a una pequeña parte de una cadena de mipmap de imagen (quizás no incluso al área completa de un mipmap determinado).Suppose an application knows that a particular rendering operation only needs to access a small portion of an image mipmap chain (perhaps not even the full area of a given mipmap). Idealmente, la aplicación podría informar al sistema de gráficos sobre esta necesidad.Ideally, the app could inform the graphics system about this need. El sistema de gráficos solo se molestaría para asegurarse de que la memoria necesaria está asignada en la GPU sin paginación en demasiada memoria.The graphics system would then only bother to ensure that the needed memory is mapped on the GPU without paging in too much memory.

En realidad, sin compatibilidad con recursos de streaming, solo se puede informar al sistema de gráficos sobre la memoria que debe asignarse en la GPU en la granularidad del subrecurso (por ejemplo, un intervalo de niveles de mipmap completo a los que se puede tener acceso).In reality, without streaming resource support, the graphics system can only be informed about the memory that needs to be mapped on the GPU at subresource granularity (for example, a range of full mipmap levels that could be accessed). No hay ningún error de demanda en el sistema de gráficos, por lo que es posible que se use una gran cantidad de memoria de GPU para hacer que se asignen Subrecursos completos antes de que se ejecute un comando de representación que haga referencia a cualquier parte de la memoria.There is no demand faulting in the graphics system either, so potentially a lot of excess GPU memory must be used to make full subresources mapped before a rendering command that references any part of the memory is executed. Esto es solo un problema que dificulta el uso de grandes asignaciones de memoria en Direct3D sin compatibilidad con recursos de streaming.This is just one issue that makes the use of large memory allocations difficult in Direct3D without streaming resource support.

Paginación de software para dividir la superficie en mosaicos más pequeñosSoftware paging to break the surface into smaller tiles

La paginación de software se puede usar para dividir la superficie en mosaicos que son lo suficientemente pequeños como para controlar el hardware.Software paging can be used to break the surface into tiles that are small enough for the hardware to handle.

Direct3D admite superficies Texture2D con hasta 16384 píxeles en un lado determinado.Direct3D supports Texture2D surfaces with up to 16384 pixels on a given side. Una imagen de 16384 de ancho a 16384 de alto y 4 bytes por píxel consumirá 1 GB de memoria de vídeo (y la adición de mapas de bits duplicaría esa cantidad).An image that is 16384 wide by 16384 tall and 4 bytes per pixel would consume 1GB of video memory (and adding mipmaps would double that amount). En la práctica, no es necesario hacer referencia a todos los 1 GB en una sola operación de representación.In practice, all 1GB would rarely need to be referenced in a single rendering operation.

Algunos desarrolladores de juegos muestran superficies del terreno tan grandes como 128 KB.Some game developers model terrain surfaces as large as 128K by 128K. La forma en que lo hacen para trabajar en GPU existentes es dividir la superficie en mosaicos que son lo suficientemente pequeños como para controlar el hardware.The way they get this to work on existing GPUs is to break the surface into tiles that are small enough for hardware to handle. La aplicación debe averiguar qué mosaicos podrían ser necesarios y cargarlos en una caché de texturas en el sistema de paginación de software GPU-a.The application must figure out which tiles might be needed and load them into a cache of textures on the GPU - a software paging system.

Un inconveniente importante para ese enfoque proviene del hardware de no saber nada sobre la paginación que se está llevando a cabo: cuando es necesario mostrar una parte de una imagen en la pantalla que ocupa los mosaicos, el hardware no sabe cómo realizar un filtrado de función fijo (es decir, eficaz) en los mosaicos.A significant downside to that approach comes from the hardware not knowing anything about the paging that is going on: When a part of an image needs to be shown on screen that straddles tiles, the hardware does not know how to perform fixed function (that is, efficient) filtering across tiles. Esto significa que la aplicación que administra su propia segmentación de software debe recurrir al filtrado manual de texturas en el código del sombreador (lo que resulta muy caro si se desea un filtro anisotrópico de buena calidad) o desperdiciar los márgenes de la creación de memoria alrededor de los mosaicos que contienen datos de mosaicos contiguos, de modo que el filtrado de hardware de función fija pueda seguir proporcionandoThis means the application managing its own software tiling must resort to manual texture filtering in shader code (which becomes very expensive if a good quality anisotropic filter is desired) and/or waste memory authoring gutters around tiles that contain data from neighboring tiles so that fixed function hardware filtering can continue to provide some assistance.

Crear una representación en mosaico de las asignaciones de superficie una característica de primera claseMaking tiled representation of surface allocations a first-class feature

Si una representación en mosaico de las asignaciones de superficie es una característica de primera clase en el sistema de gráficos, la aplicación podría indicar al hardware qué mosaicos debe poner a disposición.If a tiled representation of surface allocations is a first-class feature in the graphics system, the application could tell the hardware which tiles to make available. De esta manera, se desperdicia menos memoria de GPU al almacenar regiones de superficies que la aplicación sabe que no se tendrá acceso a ella, y el hardware puede entender cómo filtrar por los mosaicos adyacentes, lo que evitará que se detecten algunos de los problemas de los desarrolladores que realizan el mosaico de software por su cuenta.In this way, less GPU memory is wasted storing regions of surfaces that the application knows will not be accessed, and the hardware can understand how to filter across adjacent tiles, alleviating some of the pain experienced by developers who perform software tiling on their own.

Pero para proporcionar una solución completa, se debe hacer algo para tratar con el hecho de que, independientemente de si se admite la disposición en mosaico dentro de una superficie, la dimensión de superficie máxima es actualmente de 16384-no está cerca de las 128K + que las aplicaciones ya quieren.But to provide a complete solution, something must be done to deal with the fact that, independent of whether tiling within a surface is supported, the maximum surface dimension is currently 16384 - nowhere near the 128K+ that applications already want. Simplemente requerir el hardware para admitir tamaños de textura mayores es un enfoque, sin embargo, hay costos y/o contrapartidas significativos para pasar a esta ruta.Just requiring the hardware to support larger texture sizes is one approach, however there are significant costs and/or tradeoffs to going this route.

La ruta de acceso del filtro de textura de Direct3D's y la ruta de representación ya están saturadas en términos de precisión en la compatibilidad con texturas de 16 k con los demás requisitos, como la compatibilidad con extensiones de ventanilla que caen fuera de la superficie durante la representación o la compatibilidad con el ajuste de textura en el borde de la superficie durante el filtrado.Direct3D's texture filter path and rendering path are already saturated in terms of precision in supporting 16K textures with the other requirements, such as supporting viewport extents falling off the surface during rendering, or supporting texture wrapping off the surface edge during filtering. Una posibilidad es definir un equilibrio de forma que, a medida que el tamaño de la textura aumente más allá de 16 k, la funcionalidad/precisión se proporcione de alguna manera.A possibility is to define a tradeoff such that as the texture size increases beyond 16K, functionality/precision is given up in some manner. Sin embargo, incluso con esta concesión, es posible que se requieran costos de hardware adicionales en cuanto a la capacidad de direccionamiento en todo el sistema de hardware para ir a tamaños de textura más grandes.Even with this concession however, additional hardware costs might be required in terms of addressing capability throughout the hardware system to go to larger texture sizes.

Problema con texturas grandes: precisión para ubicaciones en superficieIssue with large textures: precision for locations on surface

Un problema que se reproduce como texturas es muy grande es que las coordenadas de textura de punto flotante de precisión sencilla (y los interpoladores asociados para admitir la rasterización) se agotan sin precisión para especificar las ubicaciones en la superficie de forma precisa.One issue that comes into play as textures get very large is that single precision floating point texture coordinates (and the associated interpolators to support rasterization) run out of precision to specify locations on the surface accurately. El filtrado de textura de vibración surgiría.Jittery texture filtering would ensue. Una opción costosa sería requerir compatibilidad con el interpolador de precisión doble, aunque esto podría ser exageración dada una alternativa razonable.One expensive option would be to require double precision interpolator support, though that could be overkill given a reasonable alternative.

Habilitar varios recursos de dimensiones diferentes para compartir memoriaEnabling multiple resources of different dimensions to share memory

Otro escenario que podrían atender los recursos de streaming es habilitar varios recursos de diferentes dimensiones y formatos para compartir la misma memoria.Another scenario that could be served by streaming resources is enabling multiple resources of different dimensions/formats to share the same memory. A veces, las aplicaciones tienen conjuntos exclusivos de recursos que se sabe que no se usan al mismo tiempo, o recursos que se crean solo para un uso muy breve y, a continuación, se destruyen, seguido de la creación de otros recursos.Sometimes applications have exclusive sets of resources that are known not to be used at the same time, or resources that are created only for very brief use and then destroyed, followed by creation of other resources. Una forma de generalización que puede salir de "recursos de streaming" es que es posible permitir que el usuario señale a varios recursos distintos en la misma memoria (superpuestas).A form of generality that can fall out of "streaming resources" is that it is possible to allow the user to point multiple different resources at the same (overlapping) memory. En otras palabras, la creación y destrucción de "recursos" (que definen una dimensión o formato, etc.) se pueden desacoplar de la administración de la memoria subyacente a los recursos desde el punto de vista de la aplicación.In other words, the creation and destruction of "resources" (which define a dimension/format and so on) can be decoupled from the management of the memory underlying the resources from the application's point of view.

Temas relacionadosRelated topics

Recursos de streamingStreaming resources