Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Hierin wordt beschreven hoe een resource is onderverdeeld in subresources en hoe u verwijst naar één, meerdere of segment van subresources.
-
voorbeeldsubresources
- indexering van subresource
- Mip-segment
- matrixsegment
- vlaksegment
- meerdere subresources
- Subresource-API's
- Verwante onderwerpen
Voorbeeldsubresources
Als een resource een buffer bevat, bevat deze gewoon één subresource met een index van 0. Als de resource een bitmappatroon (of bitmapmatrix) bevat, is het complexer om te verwijzen naar de subresources.
Sommige API's hebben toegang tot een hele resource (zoals de methode ID3D12GraphicsCommandList::CopyResource), anderen hebben toegang tot een gedeelte van een resource (bijvoorbeeld de methode ID3D12Resource::ReadFromSubresource). De methoden die toegang hebben tot een deel van een resource, gebruiken over het algemeen een weergavebeschrijving (zoals de D3D12_TEX2D_ARRAY_SRV-structuur) om de subresources op te geven voor toegang. Raadpleeg de sectie Subresource-API's voor een volledige lijst.
Indexering van subresources
Als u een bepaalde subresource wilt indexeren, worden de mip-niveaus eerst geïndexeerd omdat elke matrixvermelding wordt geïndexeerd.
Mip-segment
Een mip-segment bevat één mipmapniveau voor elk patroon in een matrix, zoals wordt weergegeven in de volgende afbeelding.
Matrixsegment
Op basis van een matrix met patronen bevat elke textuur met mipmaps een matrixsegment één patroon en alle mipniveaus, zoals wordt weergegeven in de volgende afbeelding.
Vlaksegment
Normaal gesproken worden planaire indelingen niet gebruikt voor het opslaan van RGBA-gegevens, maar in de gevallen waarin dit het geval is (misschien 24bpp RGB-gegevens), kan één vlak de rode afbeelding, een de groene en een de blauwe afbeelding vertegenwoordigen. Eén vlak is echter niet noodzakelijkerwijs één kleur, twee of meer kleuren kunnen in één vlak worden gecombineerd. Doorgaans worden planaire gegevens gebruikt voor subvoorbeelden YCbCr en Depth-Stencil gegevens. Depth-Stencil is de enige indeling die mipmaps, matrices en meerdere vlakken volledig ondersteunt (vaak vlak 0 voor diepte en vlak 1 voor stencil).
De subresourceindexering voor een matrix van twee Depth-Stencil-afbeeldingen, elk met drie mip-niveaus, wordt hieronder weergegeven.
Sub-sampled YCbCr ondersteunt matrices en heeft vlakken, maar biedt geen ondersteuning voor mipmaps. YCbCr beelden hebben twee vlakken, één voor de luminantie (Y) waar het menselijk oog het gevoeligst voor is, en één voor de chrominantie (zowel Cb als Cr, interleaved) waar het menselijk oog minder gevoelig voor is. Met deze indeling kunt u de chrominantiewaarden comprimeren om een afbeelding te comprimeren zonder dat dit van invloed is op de luminantie, en is daarom een veelgebruikte videocompressie-indeling, hoewel het wordt gebruikt om nog steeds afbeeldingen te comprimeren. In de onderstaande afbeelding ziet u de NV12-indeling, waarbij de chrominantie is gecomprimeerd tot een kwart van de resolutie van de luminantie, wat betekent dat de breedte van elk vlak identiek is en het chrominantievlak de helft van de hoogte van het luminantievlak is. De vliegtuigen worden geïndexeerd als subresources op een identieke manier als het bovenstaande Depth-Stencil voorbeeld.
Planar-indelingen bestonden in Direct3D 11, maar afzonderlijke vlakken konden niet afzonderlijk worden aangepakt, bijvoorbeeld voor kopieer- of toewijzingsbewerkingen. Dit is gewijzigd in Direct3D 12, zodat elk vliegtuig een eigen subresource-id heeft ontvangen. Vergelijk de volgende twee methoden voor het berekenen van de subresource-id.
Direct3D 11
inline UINT D3D11CalcSubresource( UINT MipSlice, UINT ArraySlice, UINT MipLevels )
{
return MipSlice + (ArraySlice * MipLevels);
}
Direct3D 12
inline UINT D3D12CalcSubresource( UINT MipSlice, UINT ArraySlice, UINT PlaneSlice, UINT MipLevels, UINT ArraySize )
{
return MipSlice + (ArraySlice * MipLevels) + (PlaneSlice * MipLevels * ArraySize);
}
Bij de meeste hardware wordt ervan uitgegaan dat het geheugen voor vliegtuig N altijd onmiddellijk wordt toegewezen na vliegtuig N-1.
Een alternatief voor het gebruik van subresources is dat een app per vlak een volledig afzonderlijke resource kan toewijzen. In dit geval begrijpt de toepassing dat de gegevens zijn gepland en worden er meerdere resources gebruikt om deze weer te geven.
Meerdere subresources
Met een shader-resourceweergave kunt u een rechthoekig gebied van subresources selecteren met behulp van een van de hierboven beschreven segmenten en het gebruik van velden in de weergavestructuren (zoals D3D12_TEX2D_ARRAY_SRV), zoals weergegeven in de afbeelding.
Een render-doelweergave kan slechts één subresource- of mipsegment gebruiken en mag geen subresources uit meer dan één mip-segment bevatten. Dat wil gezegd dat elk patroon in een weergave met een render-doel dezelfde grootte moet hebben. Een shader-resourceweergave kan een rechthoekig gebied van subresources selecteren, zoals wordt weergegeven in de afbeelding.
Subresource-API's
De volgende API's verwijzen en werken met subresources:
Opsommingen:
De volgende structuren bevatten PlaneSlice-indexen, de meeste bevatten MipSlice-indexen.
- D3D12_TEX2D_RTV
- D3D12_TEX2D_ARRAY_RTV
- D3D12_TEX2D_SRV
- D3D12_TEX2D_ARRAY_SRV
- D3D12_TEX2D_UAV
- D3D12_TEX2D_ARRAY_UAV
De volgende structuren bevatten ArraySlice-indexen, de meeste bevatten MipSlice-indexen.
- D3D12_TEX1D_ARRAY_DSV
- D3D12_TEX2D_ARRAY_DSV
- D3D12_TEX2DMS_ARRAY_DSV
- D3D12_TEX1D_ARRAY_RTV
- D3D12_TEX2D_ARRAY_RTV
- D3D12_TEX2DMS_ARRAY_RTV
- D3D12_TEX1D_ARRAY_SRV
- D3D12_TEX2D_ARRAY_SRV
- D3D12_TEX2DMS_ARRAY_SRV
- D3D12_TEX1D_ARRAY_UAV
- D3D12_TEX2D_ARRAY_UAV
De volgende structuren bevatten MipSlice indexen, maar niet ArraySlice en PlaneSlice indexen.
De volgende structuren verwijzen ook naar subresources:
- D3D12_DISCARD_REGION: een structuur die wordt gebruikt ter voorbereiding op het verwijderen van een resource.
- D3D12_PLACED_SUBRESOURCE_FOOTPRINT: voegt een offset toe aan een resource aan de basisvoetafdruk.
- D3D12_RESOURCE_TRANSITION_BARRIER: beschrijft de overgang van subresources tussen verschillende gebruikstaken (shader-resource, renderdoel, enzovoort).
- D3D12_SUBRESOURCE_DATA: subresourcegegevens bevatten de gegevens zelf en de rij- en segmenthoogte.
- D3D12_SUBRESOURCE_FOOTPRINT: een footprint omvat de indeling, breedte, hoogte, diepte en rijhoogte van de subresource.
- D3D12_SUBRESOURCE_INFO: bevat de verschuiving, rijhoogte en dieptehoogte van de subresource.
- D3D12_SUBRESOURCE_TILING: beschrijft een tegel van een subresourcevolume (raadpleeg volumetegele resources).
- D3D12_TEXTURE_COPY_LOCATION: beschrijft een gedeelte van een textuur voor het kopiëren.
- D3D12_TILED_RESOURCE_COORDINATE: beschrijft de coördinaten van een betegelde resource.
Methoden:
- ID3D12Device::GetCopyableFootprints : haalt informatie over een resource op, zodat er een kopie kan worden gemaakt.
- ID3D12Device::GetResourceTiling : haalt informatie op over hoe een tegelresource wordt onderverdeeld in tegels.
- ID3D12GraphicsCommandList::ResolveSubresource: kopieert een subresource met meerdere steekproeven naar een subresource met meerdere steekproeven.
- ID3D12Resource::Map: retourneert een aanwijzer naar de opgegeven gegevens in de resource en weigert de GPU-toegang tot de subresource.
- ID3D12Resource::ReadFromSubresource: kopieert gegevens uit een subresource of een rechthoekig gebied van een subresource.
- ID3D12Resource::Unmap: unmaps the specified range of memory and invalidates the pointer to the resource. Hiermee wordt DE GPU-toegang tot de subresource hersteld.
- ID3D12Resource::WriteToSubresource: kopieert gegevens naar een subresource of een rechthoekig gebied van een subresource.
Patronen moeten de status D3D12_RESOURCE_STATE_COMMON hebben voor CPU-toegang via WriteToSubresource- en ReadFromSubresource- om legaal te zijn; maar buffers niet. CPU-toegang tot een resource wordt doorgaans uitgevoerd via Toewijzing/Toewijzing ongedaan maken.
Verwante onderwerpen