Método ID3D12Resource::WriteToSubresource (d3d12.h)
Usa a CPU para copiar dados em um sub-recurso, permitindo que a CPU modifique o conteúdo da maioria das texturas com layouts indefinidos.
Sintaxe
HRESULT WriteToSubresource(
UINT DstSubresource,
[in, optional] const D3D12_BOX *pDstBox,
[in] const void *pSrcData,
UINT SrcRowPitch,
UINT SrcDepthPitch
);
Parâmetros
DstSubresource
Tipo: UINT
Especifica o índice do sub-recurso.
[in, optional] pDstBox
Tipo: const D3D12_BOX*
Um ponteiro para uma caixa que define a parte do sub-recurso de destino para a qual copiar os dados do recurso. Se NULL, os dados serão gravados na sub-fonte de destino sem deslocamento. As dimensões da origem devem se ajustar ao destino (consulte D3D12_BOX).
Uma caixa vazia resulta em uma no-op. Uma caixa estará vazia se o valor superior for maior ou igual ao valor inferior ou o valor esquerdo for maior ou igual ao valor à direita ou o valor frontal for maior ou igual ao valor de fundo. Quando a caixa está vazia, esse método não executa nenhuma operação.
[in] pSrcData
Tipo: const void*
Um ponteiro para os dados de origem na memória.
SrcRowPitch
Tipo: UINT
A distância de uma linha de dados de origem para a próxima linha.
SrcDepthPitch
Tipo: UINT
A distância de uma fatia de profundidade dos dados de origem para a próxima.
Retornar valor
Tipo: HRESULT
Esse método retorna um dos códigos de retorno do Direct3D 12.
Comentários
O recurso deve primeiro ser mapeado usando o Mapa. As texturas devem estar no estado D3D12_RESOURCE_STATE_COMMON para que o acesso à CPU por meio de WriteToSubresource e ReadFromSubresource seja legal; mas os buffers não.
Para eficiência, verifique se os limites e o alinhamento das extensões dentro da caixa são ( 64 / [bytes por pixel] ) pixels horizontalmente. Limites verticais e alinhamento devem ser 2 linhas, exceto quando formatos de 1 byte por pixel são usados, nesse caso, 4 linhas são recomendadas. Fatias de profundidade única por chamada são tratadas com eficiência. É recomendável, mas não necessário, fornecer ponteiros e passos alinhados com 128 bytes.
Ao gravar em níveis de sub mipmap, é recomendável usar largura e alturas maiores do que o descrito acima. Isso ocorre porque os pequenos níveis de mipmap podem realmente ser armazenados em um bloco maior de memória, com uma quantidade opaca de deslocamento que pode interferir no alinhamento das linhas de cache.
WriteToSubresource e ReadFromSubresource permitem otimizações quase zero de cópia para adaptadores UMA, mas podem prejudicar proibitivamente a eficiência de adaptadores NUMA discretos, pois os dados de textura não podem residir na memória de vídeo local. Os aplicativos típicos devem se ater a técnicas de carregamento discretas, a menos que reconheçam que a arquitetura do adaptador é UMA. Para obter mais detalhes sobre o carregamento, consulte CopyTextureRegion e, para obter mais detalhes sobre UMA, consulte D3D12_FEATURE_DATA_ARCHITECTURE.
Em sistemas UMA, essa rotina pode ser usada para minimizar o custo da cópia de memória por meio da otimização de loop conhecida como bloco de loop. Ao dividir o upload em chucks que se encaixam confortavelmente no cache da CPU, a largura de banda efetiva entre a CPU e a memória main atinge mais de perto os máximos teóricos.
Requisitos
Requisito | Valor |
---|---|
Plataforma de Destino | Windows |
Cabeçalho | d3d12.h |
Biblioteca | D3d12.lib |
DLL | D3d12.dll |