Compartilhar via


Método ID3D12GraphicsCommandList::CopyTiles (d3d12.h)

Copia blocos do buffer para o recurso lado a lado ou vice-versa.

Sintaxe

void CopyTiles(
  [in] ID3D12Resource                        *pTiledResource,
  [in] const D3D12_TILED_RESOURCE_COORDINATE *pTileRegionStartCoordinate,
  [in] const D3D12_TILE_REGION_SIZE          *pTileRegionSize,
  [in] ID3D12Resource                        *pBuffer,
       UINT64                                BufferStartOffsetInBytes,
       D3D12_TILE_COPY_FLAGS                 Flags
);

Parâmetros

[in] pTiledResource

Tipo: ID3D12Resource*

Um ponteiro para um recurso lado a lado.

[in] pTileRegionStartCoordinate

Tipo: const D3D12_TILED_RESOURCE_COORDINATE*

Um ponteiro para uma estrutura D3D12_TILED_RESOURCE_COORDINATE que descreve as coordenadas iniciais do recurso lado a lado.

[in] pTileRegionSize

Tipo: const D3D12_TILE_REGION_SIZE*

Um ponteiro para uma estrutura D3D12_TILE_REGION_SIZE que descreve o tamanho da região lado a lado.

[in] pBuffer

Tipo: ID3D12Resource*

Um ponteiro para um ID3D12Resource que representa um buffer padrão, dinâmico ou de preparo.

BufferStartOffsetInBytes

Tipo: UINT64

O deslocamento em bytes para o buffer em pBuffer para iniciar a operação.

Flags

Tipo: D3D12_TILE_COPY_FLAGS

Uma combinação de valores do tipo D3D12_TILE_COPY_FLAGS que são combinados usando uma operação OR bit a bit e que identifica como copiar blocos.

Retornar valor

Nenhum

Comentários

CopyTiles descarta operações de gravação para áreas não mapeadas e manipula operações de leitura de áreas não mapeadas (exceto em Tier_1 recursos lado a lado, em que a leitura e a gravação de áreas não mapeadas são inválidas – consulte D3D12_TILED_RESOURCES_TIER).

Se uma operação de cópia envolver gravação no mesmo local de memória várias vezes porque vários locais no recurso de destino são mapeados para a mesma memória de bloco, as operações de gravação resultantes em blocos com vários mapeamentos são não determinísticas e não repetíveis; ou seja, os acessos à memória do bloco acontecem em qualquer ordem em que o hardware executa a operação de cópia.

Os blocos envolvidos na operação de cópia não podem incluir blocos que contenham mipmaps empacotados ou os resultados da operação de cópia são indefinidos. Para transferir dados de e para mipmaps que o hardware empacota para os blocos um ou mais que constituem os mips empacotados, você deve usar as APIs de cópia padrão (ou seja, não específicas do bloco), como CopyTextureRegion.

CopyTiles copia dados em um padrão ligeiramente diferente dos métodos de cópia padrão.

O layout de memória dos blocos no lado do recurso de buffer não lado a lado da operação de cópia é linear na memória dentro de blocos de 64 KB, que o hardware e o driver giram e deswizzle por bloco, conforme apropriado, quando são transferidos de e para um recurso lado a lado. Para superfícies msaa (suavização de várias amostras), o hardware e o driver atravessam os exemplos de cada pixel em ordem de índice de exemplo antes de passarem para o próximo pixel. Para blocos parcialmente preenchidos no lado direito (para uma superfície que tem uma largura não um múltiplo de largura de bloco em pixels), a inclinação e o passo para se mover para baixo em uma linha é o tamanho total em bytes dos pixels numéricos que caberiam no bloco se o bloco estivesse cheio. Portanto, pode haver uma lacuna entre cada linha de pixels na memória. Mipmaps menores que um bloco não são empacotados juntos no layout linear, o que pode parecer um desperdício de espaço de memória, mas como mencionado, você não pode usar CopyTiles para copiar para mipmaps que o hardware empacota juntos. Você pode apenas usar APIs de cópia genéricas, como CopyTextureRegion, para copiar mipmaps pequenos individualmente.

Requisitos

Requisito Valor
Plataforma de Destino Windows
Cabeçalho d3d12.h
Biblioteca D3d12.lib
DLL D3d12.dll

Confira também

ID3D12GraphicsCommandList

Recursos lado a lado