Necessità di risorse di streamingThe need for streaming resources

Le risorse di streaming sono necessarie in modo che la memoria GPU non perda l'archiviazione delle aree di superficie a cui non si accede e per indicare all'hardware come filtrare tra i riquadri adiacenti.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.

Risorse di streaming o trame sparseStreaming resources or sparse textures

Le risorse di streaming , denominate risorse affiancate in Direct3D 11, sono risorse logiche di grandi dimensioni che utilizzano piccole quantità di memoria fisica.Streaming resources (called tiled resources in Direct3D 11), are large logical resources that use small amounts of physical memory.

Un altro nome per le risorse di streaming è la trama di tipo sparse.Another name for streaming resources is sparse textures. "Sparse" fornisce sia la natura affiancata delle risorse sia il motivo principale per affiancarli, che non tutti devono essere mappati in una sola volta."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. In realtà, un'applicazione potrebbe in teoria creare una risorsa di streaming in cui nessun dato viene creato per tutte le aree + MIPS della risorsa, intenzionalmente.In fact, an application could conceivably author a streaming resource in which no data is authored for all regions+mips of the resource, intentionally. Il contenuto stesso potrebbe pertanto essere di tipo sparse e il mapping del contenuto nella memoria della GPU (Graphics Processing Unit) in un determinato momento sarà un subset di tale valore (anche più sparse).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).

Senza affiancamento, le allocazioni di memoria vengono gestite con la granularità delle risorseWithout tiling, memory allocations are managed at subresource granularity

In un sistema grafico (ovvero il sistema operativo, il driver di visualizzazione e l'hardware grafico) senza il supporto delle risorse di streaming, il sistema grafico gestisce tutte le allocazioni di memoria Direct3D con la granularità delle risorse.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.

Per un buffer, l'intero buffer è la sottorisorsa.For a buffer, the entire buffer is the subresource.

Per una trama, ad esempio Texture2D, ogni livello MIP è una sottorisorsa; per una matrice di trame, ad esempio Texture2DArray, ogni livello MIP in una determinata sezione della matrice è una sottorisorsa.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. Il sistema grafico espone solo la possibilità di gestire il mapping delle allocazioni in questa granularità delle sottorisorse.The graphics system only exposes the ability to manage the mapping of allocations at this subresource granularity. Nel contesto delle risorse di streaming, "mapping" si riferisce a rendere i dati visibili alla GPU.In the context of streaming resources, "mapping" refers to making data visible to the GPU.

Senza affiancamento, non può accedere solo a una piccola parte della catena mipmapWithout tiling, can't access only a small portion of mipmap chain

Si supponga che un'applicazione sappia che un'operazione di rendering specifica deve solo accedere a una piccola parte di una catena di mipmap di immagini (probabilmente non anche all'area completa di un determinato mipmap).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, l'app potrebbe informare il sistema grafico in merito a questa esigenza.Ideally, the app could inform the graphics system about this need. Il sistema grafico dovrebbe quindi solo assicurarsi che la memoria necessaria sia mappata sulla GPU senza eseguire il paging in troppa 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.

In realtà, senza il supporto delle risorse di streaming, il sistema grafico può essere informato solo sulla memoria di cui è necessario eseguire il mapping sulla GPU alla granularità delle sottorisorse (ad esempio, un intervallo di livelli di mipmap completi a cui è possibile accedere).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). Non vi è alcuna richiesta di errori nel sistema grafico, quindi è necessario usare potenzialmente una quantità eccessiva di memoria GPU per eseguire il mapping delle sottorisorse complete prima che venga eseguito un comando di rendering che fa riferimento a una parte della 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. Questo è solo un problema che rende difficile l'uso di allocazioni di memoria di grandi dimensioni in Direct3D senza il supporto delle risorse di streaming.This is just one issue that makes the use of large memory allocations difficult in Direct3D without streaming resource support.

Paging del software per suddividere la superficie in riquadri più piccoliSoftware paging to break the surface into smaller tiles

Il paging del software può essere utilizzato per suddividere la superficie in riquadri sufficientemente piccoli da consentire all'hardware di gestirli.Software paging can be used to break the surface into tiles that are small enough for the hardware to handle.

Direct3D supporta le superfici Texture2D con un massimo di 16384 pixel su un lato specificato.Direct3D supports Texture2D surfaces with up to 16384 pixels on a given side. Un'immagine di 16384 in larghezza per 16384 di altezza e 4 byte per pixel utilizzerebbe 1 GB di memoria video (e l'aggiunta di mipmap sarebbe raddoppiata).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). In pratica, è necessario fare riferimento a tutti i GB in un'unica operazione di rendering.In practice, all 1GB would rarely need to be referenced in a single rendering operation.

Alcuni sviluppatori di giochi modellano le superfici del terreno fino a 128 KB per 128 KB.Some game developers model terrain surfaces as large as 128K by 128K. Il modo in cui si ottiene questo lavoro sulle GPU esistenti è suddividere l'area in riquadri sufficientemente piccoli da poter gestire l'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. L'applicazione deve determinare quali riquadri potrebbero essere necessari e caricarli in una cache di trame nel sistema di paging GPU, un software.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.

Uno svantaggio significativo rispetto a questo approccio deriva dall'hardware che non conosce alcun elemento del paging in corso: quando una parte di un'immagine deve essere visualizzata sullo schermo che si trova a cavalcioni, l'hardware non è in grado di eseguire il filtro di una funzione fissa (ovvero efficiente) tra i riquadri.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. Ciò significa che l'applicazione che gestisce il proprio affiancamento software deve ricorrere al filtro di trama manuale nel codice dello shader (che diventa molto costosa se si desidera un filtro anisotropico di qualità elevata) e/o sprecare le grondature di creazione della memoria intorno ai riquadri contenenti dati provenienti da riquadri adiacenti, in modo che i filtri hardware per funzioni fisse possano continuare a fornire assistenzaThis 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.

Creazione di una rappresentazione affiancata delle allocazioni di superficie una funzionalità di prima classeMaking tiled representation of surface allocations a first-class feature

Se una rappresentazione affiancata delle allocazioni di superficie è una funzionalità di prima classe nel sistema grafico, l'applicazione potrebbe indicare all'hardware quali riquadri rendere disponibili.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. In questo modo, una minore quantità di memoria GPU viene sprecata per archiviare le aree di superficie che l'applicazione sa non sarà accessibile e l'hardware è in grado di comprendere come filtrare tra i riquadri adiacenti, attenuando alcune delle problematiche riscontrate dagli sviluppatori che eseguono autonomamente l'affiancamento software.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.

Tuttavia, per fornire una soluzione completa, è necessario eseguire un'operazione per gestire il fatto che, indipendentemente dal fatto che l'affiancamento all'interno di una superficie sia supportata, la dimensione massima della superficie è attualmente 16384-Nowhere vicino al 128 KB + che le applicazioni desiderano già.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. È sufficiente che l'hardware per supportare dimensioni di trama più grandi sia un approccio, tuttavia ci sono costi e/o compromessi significativi per l'itinerario.Just requiring the hardware to support larger texture sizes is one approach, however there are significant costs and/or tradeoffs to going this route.

Il percorso del filtro di trama Direct3D's e il percorso di rendering sono già saturi in termini di precisione nel supporto delle trame 16K con gli altri requisiti, ad esempio il supporto degli extent del viewport che non rientrano nell'area durante il rendering o il supporto del wrapping della trama fuori dal bordo della superficie durante il filtro.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 possibilità consiste nel definire un compromesso in modo tale che, quando le dimensioni della trama aumentano oltre 16K, le funzionalità e la precisione vengono fornite in qualche modo.A possibility is to define a tradeoff such that as the texture size increases beyond 16K, functionality/precision is given up in some manner. Anche con questa concessione, tuttavia, potrebbero essere necessari costi hardware aggiuntivi in termini di funzionalità di indirizzamento nel sistema hardware per passare a dimensioni di trama maggiori.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 trame di grandi dimensioni: precisione per le posizioni sulla superficieIssue with large textures: precision for locations on surface

Un problema che si verifica come una trama è molto grande è che le coordinate di trama a virgola mobile e precisione singola (e gli interpolatori associati per supportare la rasterizzazione) hanno esaurito la precisione per specificare accuratamente i percorsi sulla superficie.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. Si verificherà un filtro di trama di Jittery.Jittery texture filtering would ensue. Una delle opzioni più dispendiose è la necessità di supportare l'interpolazione a precisione doppia, sebbene questo possa essere eccessivo in base a una ragionevole alternativa.One expensive option would be to require double precision interpolator support, though that could be overkill given a reasonable alternative.

Abilitazione di più risorse di dimensioni diverse per la condivisione della memoriaEnabling multiple resources of different dimensions to share memory

Un altro scenario che può essere servito dalle risorse di streaming è l'abilitazione di più risorse di dimensioni/formati diversi per la condivisione della stessa memoria.Another scenario that could be served by streaming resources is enabling multiple resources of different dimensions/formats to share the same memory. A volte le applicazioni hanno set esclusivi di risorse che non devono essere usate contemporaneamente o risorse create solo per un breve utilizzo e quindi distrutte, seguite dalla creazione di altre risorse.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 di generalizzazione che può rientrare nel "flusso di risorse" è che è possibile consentire all'utente di puntare più risorse diverse alla stessa memoria (sovrapposta).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. In altre parole, la creazione e l'eliminazione di "risorse", che definiscono una dimensione/un formato e così via, possono essere separate dalla gestione della memoria sottostante le risorse dal punto di vista dell'applicazione.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.

Argomenti correlatiRelated topics

Risorse di streamingStreaming resources