Método ID3D12CommandQueue::UpdateTileMappings (d3d12.h)

Novedades asignaciones de ubicaciones de iconos en recursos reservados a ubicaciones de memoria en un montón de recursos.

Sintaxis

void UpdateTileMappings(
  [in]           ID3D12Resource                        *pResource,
                 UINT                                  NumResourceRegions,
  [in, optional] const D3D12_TILED_RESOURCE_COORDINATE *pResourceRegionStartCoordinates,
  [in, optional] const D3D12_TILE_REGION_SIZE          *pResourceRegionSizes,
  [in, optional] ID3D12Heap                            *pHeap,
                 UINT                                  NumRanges,
  [in, optional] const D3D12_TILE_RANGE_FLAGS          *pRangeFlags,
  [in, optional] const UINT                            *pHeapRangeStartOffsets,
  [in, optional] const UINT                            *pRangeTileCounts,
                 D3D12_TILE_MAPPING_FLAGS              Flags
);

Parámetros

[in] pResource

Puntero al recurso reservado.

NumResourceRegions

Número de regiones de recursos reservadas.

[in, optional] pResourceRegionStartCoordinates

Matriz de estructuras de D3D12_TILED_RESOURCE_COORDINATE que describen las coordenadas iniciales de las regiones de recursos reservadas. El parámetro NumResourceRegions especifica el número de estructuras de D3D12_TILED_RESOURCE_COORDINATE de la matriz.

[in, optional] pResourceRegionSizes

Matriz de estructuras de D3D12_TILE_REGION_SIZE que describen los tamaños de las regiones de recursos reservadas. El parámetro NumResourceRegions especifica el número de estructuras de D3D12_TILE_REGION_SIZE de la matriz.

[in, optional] pHeap

Puntero al montón de recursos.

NumRanges

Número de intervalos de mosaicos.

[in, optional] pRangeFlags

Puntero a una matriz de valores de D3D12_TILE_RANGE_FLAGS que describe cada intervalo de iconos. El parámetro NumRanges especifica el número de valores de la matriz.

[in, optional] pHeapRangeStartOffsets

Matriz de desplazamientos en el montón de recursos. Estos son desplazamientos de mosaico basados en 0, contando en mosaicos (no bytes).

[in, optional] pRangeTileCounts

Matriz de iconos. Matriz de valores que especifican el número de iconos en cada intervalo de mosaicos. El parámetro NumRanges especifica el número de valores de la matriz.

Flags

Combinación de D3D12_TILE_MAPPING_FLAGS valores que se combinan mediante una operación OR bit a bit.

Valor devuelto

None

Observaciones

Use UpdateTileMappings para asignar las páginas virtuales de un recurso reservado a las páginas físicas de un montón. La asignación no tiene que estar en orden. La operación es similar a ID3D11DeviceContext2::UpdateTileMappings con la única diferencia clave que D3D12 permite que un recurso reservado tenga iconos de varios montones.

En una sola llamada a UpdateTileMappings, puede asignar uno o varios intervalos de iconos de recursos a uno o varios intervalos de iconos del montón.

Puede organizar los parámetros de UpdateTileMappings de estas maneras para realizar una actualización:

  • Recurso reservado cuyas asignaciones se actualizan. Las asignaciones comienzan todas las null cuando se crea inicialmente un recurso.
  • Conjunto de regiones de mosaico en el recurso reservado cuyas asignaciones se actualizan. Puede realizar una llamada a UpdateTileMappings para actualizar muchas asignaciones o varias llamadas con un poco más sobrecarga de llamadas API, así como si es más conveniente.
    • NumResourceRegions especifica cuántas regiones hay.
    • pResourceRegionStartCoordinates y pResourceRegionSizes son todas las matrices que identifican la ubicación inicial y se extienden de cada región. Si NumResourceRegions es 1, por comodidad o ambas matrices que describen las regiones pueden ser NULL. NULL para pResourceRegionStartCoordinates significa que la coordenada inicial es 0s y NULL para pResourceRegionSizes identifica una región predeterminada que es el conjunto completo de iconos para todo el recurso reservado, incluidos todos los mapas mip, segmentos de matriz o ambos.
    • Si pResourceRegionStartCoordinates no es NULL y pResourceRegionSizes es NULL, el tamaño de región tiene como valor predeterminado 1 icono para todas las regiones. Esto facilita la definición de asignaciones para un conjunto de iconos individuales cada uno en ubicaciones dispares proporcionando una matriz de ubicaciones en pResourceRegionStartCoordinates sin tener que enviar una matriz de pResourceRegionSizesize todo establecido en 1.
    Las actualizaciones se aplican desde la primera región hasta la última; por lo tanto, si las regiones se superponen en una sola llamada, las actualizaciones más adelante en la lista sobrescriben las áreas que se superponen con las actualizaciones anteriores.
  • Montón que proporciona memoria donde pueden ir las asignaciones de iconos. Si UpdateTileMappings solo define asignaciones NULL, no es necesario especificar un montón.
  • Conjunto de intervalos de iconos en los que se van las asignaciones. Cada intervalo de iconos determinado puede especificar uno de algunos tipos de intervalos: un intervalo de iconos en un montón (valor predeterminado), un recuento de iconos en el recurso reservado para asignar a un único icono en un montón (compartir el icono), un recuento de asignaciones de iconos en el recurso reservado para omitir y dejar tal y como están, o un recuento de iconos del montón que se va a asignar a NULL. NumRanges especifica el número de intervalos de iconos, donde los iconos totales identificados en todos los intervalos deben coincidir con el número total de iconos de las regiones de mosaico del recurso reservado descrito anteriormente. Las asignaciones se definen mediante la iteración de los iconos de las regiones de mosaico en orden secuencial ( x y, después, z para las regiones del cuadro) mientras recorren el conjunto de intervalos de mosaicos en orden secuencial. El desglose de las regiones de mosaico no tiene que alinearse con el desglose de los intervalos de mosaicos, pero el número total de iconos de ambos lados debe ser igual para que cada icono de recurso reservado especificado tenga una asignación especificada.

    pRangeFlags, pHeapRangeStartOffsets y pRangeTileCounts son todas las matrices, de tamaño NumRanges, que describen los intervalos de mosaicos. Si pRangeFlags es NULL, todos los intervalos son mosaicos secuenciales en el montón; de lo contrario, para cada intervalo i,pRangeFlags[i] identifica cómo funcionan las asignaciones de ese intervalo de iconos:

    • Si pRangeFlags[i] es D3D12_TILE_RANGE_FLAG_NONE, ese intervalo define iconos secuenciales en el montón, con el número de iconos que son pRangeTileCounts[i] y la ubicación inicial pHeapRangeStartOffsets[i]. Si NumRanges es 1, pRangeTileCounts puede ser NULL y el valor predeterminado es el número total de iconos especificados por todas las regiones de mosaico.
    • Si pRangeFlags[i] es D3D12_TILE_RANGE_FLAG_REUSE_SINGLE_TILE, pHeapRangeStartOffsets[i] identifica el único icono del montón al que asignar y pRangeTileCounts[i] especifica cuántos iconos de las regiones del icono se van a asignar a esa ubicación del montón. Si NumRanges es 1, pRangeTileCounts puede ser NULL y el valor predeterminado es el número total de iconos especificados por todas las regiones de mosaico.
    • Si pRangeFlags[i] es D3D12_TILE_RANGE_FLAG_NULL, pRangeTileCounts[i] especifica cuántos iconos de las regiones de mosaico se van a asignar a NULL. Si NumRanges es 1, pRangeTileCounts puede ser NULL y el valor predeterminado es el número total de iconos especificados por todas las regiones de mosaico. pHeapRangeStartOffsets[i] se omite para las asignaciones NULL.
    • Si pRangeFlags[i] es D3D12_TILE_RANGE_FLAG_SKIP, pRangeTileCounts[i] especifica cuántos iconos de las regiones de mosaico se omitirán y dejar las asignaciones existentes sin cambios. Esto puede ser útil si una región de mosaico enlaza convenientemente un área de asignaciones de iconos para actualizar, excepto con algunas excepciones que deben dejarse igual que lo que se asignaron antes. pHeapRangeStartOffsets[i] se omite para las asignaciones skip.
Los recursos reservados deben seguir las mismas reglas para el alias de mosaico, la inicialización y la herencia de datos que los recursos colocados. Consulte CreatePlacedResource para obtener más detalles.

Estos son algunos ejemplos de casos comunes de UpdateTileMappings :

Ejemplos

Los ejemplos hacen referencia a las siguientes estructuras y enumeraciones:

Borrar las asignaciones de una superficie completa a NULL
// - NULL for pResourceRegionStartCoordinates and pResourceRegionSizes defaults to the entire resource
// - NULL for pHeapRangeStartOffsets since it isn't needed for mapping tiles to NULL
// - NULL for pRangeTileCounts when NumRanges is 1 defaults to the same number of tiles as the resource region (which is
//   the entire surface in this case)
//
UINT RangeFlags = D3D12_TILE_RANGE_FLAG_NULL;
pCommandQueue->UpdateTileMappings(pResource, 1, NULL, NULL, NULL, 1, &RangeFlags, NULL, NULL, D3D12_TILE_MAPPING_FLAG_NONE);

Asignación de una región de iconos a un único icono:

// - This maps a 2x3 tile region at tile offset (1,1) in a resource to tile [12] in a heap
// 
D3D12_TILED_RESOURCE_COORDINATE TRC;
TRC.X = 1;
TRC.Y = 1;
TRC.Z = 0;
TRC.Subresource = 0;

D3D12_TILE_REGION_SIZE TRS;
TRS.bUseBox = TRUE;
TRS.Width = 2;
TRS.Height = 3; 
TRS.Depth = 1;
TRS.NumTiles = TRS.Width * TRS.Height * TRS.Depth;

UINT RangeFlags = D3D12_TILE_RANGE_FLAG_REUSE_SINGLE_TILE;
UINT StartOffset = 12;

pCommandQueue->UpdateTileMappings(pResource,1,&TRC,&TRS,pHeap,1,&RangeFlags,&StartOffset,NULL,D3D12_TILE_MAPPING_FLAG_NONE);

Definir asignaciones para un conjunto de iconos individuales separados:

// - This can also be accomplished in multiple calls. 
//   A single call to define multiple mapping updates can reduce CPU call overhead slightly,
//   at the cost of having to pass arrays as parameters.
// - Passing NULL for pResourceRegionSizes defaults to each region in the resource
//   being a single tile.  So all that is needed are the coordinates of each one.
// - Passing NULL for pRangeFlags defaults to no flags (since none are needed in this case)
// - Passing NULL for pRangeTileCounts defaults to each range in the heap being size 1.
//   So all that is needed are the start offsets for each tile in the heap
//
D3D12_TILED_RESOURCE_COORDINATE TRC[3];
UINT StartOffsets[3];
UINT NumSingleTiles = 3;
TRC[0].X = 1;
TRC[0].Y = 1; 
TRC[0].Subresource = 0;

StartOffsets[0] = 1;
TRC[1].X = 4;
TRC[1].Y = 7; 
TRC[1].Subresource = 0;
StartOffsets[1] = 4;

TRC[2].X = 2;
TRC[2].Y = 3; 
TRC[2].Subresource = 0;
StartOffsets[2] = 7;

pCommandQueue->UpdateTileMappings(pResource,NumSingleTiles,&TRC,NULL,pHeap,NumSingleTiles,NULL,StartOffsets,
NULL,D3D12_TILE_MAPPING_FLAG_NONE);

Ejemplo complejo: definir asignaciones para regiones con algunas omisións, algunas asignaciones NULL.

// - This complex example hard codes the parameter arrays, whereas in practice the 
//   application would likely configure the parameters programatically or in a data driven way.
// - Suppose we have 3 regions in a resource to configure mappings for, 2x3 at coordinate (1,1),
//   3x3 at coordinate (4,7), and 7x1 at coordinate (20,30)
// - The tiles in the regions are walked from first to last, in X then Y then Z order,
//   while stepping forward through the specified Tile Ranges to determine each mapping.
//   In this example, 22 tile mappings need to be defined.
// - Suppose we want the first 3 tiles to be mapped to a contiguous range in the heap starting at
//   heap location [9], the next 8 to be skipped (left unchanged), the next 2 to map to NULL, 
//   the next 5 to share a single tile (heap location [17]) and the remaining 
//   4 tiles to each map to to unique heap locations, [2], [9], [4] and [17]:
//
D3D12_TILED_RESOURCE_COORDINATE TRC[3];
D3D12_TILE_REGION_SIZE TRS[3];
UINT NumRegions = 3;

TRC[0].X = 1;
TRC[0].Y = 1; 
TRC[0].Subresource = 0;
TRS[0].bUseBox = TRUE;
TRS[0].Width = 2;
TRS[0].Height = 3; 
TRS[0].NumTiles = TRS[0].Width * TRS[0].Height;

TRC[1].X = 4;
TRC[1].Y = 7; 
TRC[1].Subresource = 0;
TRS[1].bUseBox = TRUE;
TRS[1].Width = 3;
TRS[1].Height = 3; 
TRS[1].NumTiles = TRS[1].Width * TRS[1].Height;

TRC[2].X = 20;
TRC[2].Y = 30; 
TRC[2].Subresource = 0;
TRS[2].bUseBox = TRUE;
TRS[2].Width = 7;
TRS[2].Height = 1; 
TRS[2].NumTiles = TRS[2].Width * TRS[2].Height;

UINT NumRanges = 8;
UINT RangeFlags[8];
UINT HeapRangeStartOffsets[8];
UINT RangeTileCounts[8];

RangeFlags[0] = 0;
HeapRangeStartOffsets[0] = 9;
RangeTileCounts[0] = 3;

RangeFlags[1] = D3D12_TILE_RANGE_FLAG_SKIP;
HeapRangeStartOffsets[1] = 0; // offset is ignored for skip mappings
RangeTileCounts[1] = 8;

RangeFlags[2] = D3D12_TILE_RANGE_FLAG_NULL;
HeapRangeStartOffsets[2] = 0; // offset is ignored for NULL mappings
RangeTileCounts[2] = 2;

RangeFlags[3] = D3D12_TILE_RANGE_FLAG_REUSE_SINGLE_TILE;
HeapRangeStartOffsets[3] = 17; 
RangeTileCounts[3] = 5;

RangeFlags[4] = 0;
HeapRangeStartOffsets[4] = 2; 
RangeTileCounts[4] = 1;

RangeFlags[5] = 0;
HeapRangeStartOffsets[5] = 9; 
RangeTileCounts[5] = 1;

RangeFlags[6] = 0;
HeapRangeStartOffsets[6] = 4; 
RangeTileCounts[6] = 1;

RangeFlags[7] = 0;
HeapRangeStartOffsets[7] = 17; 
RangeTileCounts[7] = 1;

pCommandQueue->UpdateTileMappings(pResource,NumRegions,TRC,TRS,pHeap,NumRanges,RangeFlags,
HeapRangeStartOffsets,RangeTileCounts,D3D12_TILE_MAPPING_FLAG_NONE);

Requisitos

   
Plataforma de destino Windows
Encabezado d3d12.h

Consulte también

CopyTileMappings

ID3D12CommandQueue

Recursos en mosaico de volumen