Copiar descritores

Os métodos ID3D12Device::CopyDescriptors e ID3D12Device::CopyDescriptorsSimple na interface do dispositivo usam a CPU para copiar imediatamente os descritores. Eles podem ser chamados de threads livres, desde que vários threads na CPU ou gpu não executem gravações potencialmente conflitantes.

Copiando descritores imediatamente (linha do tempo da CPU)

O número de descritores de origem (para copiar), especificado como um conjunto de intervalos de descritores, deve ser igual ao número de descritores de destino (para copiar), especificado como um conjunto separado de intervalos de descritores. Os intervalos de origem e destino não precisam ser alinhados. Por exemplo, um conjunto esparso de descritores pode ser copiado para um destino contíguo, vice-versa ou em alguma combinação.

Vários heaps de descritor podem estar envolvidos na operação de cópia, tanto como origem quanto como destino. O uso de identificadores de descritor como parâmetros significa que os métodos de cópia não se importam com quais heaps qualquer descritor está em – todos eles são apenas memória.

Os tipos de heap do descritor que estão sendo copiados de e para devem corresponder, de modo que os métodos usem um único tipo de heap de descritor como entrada. O driver precisa saber o tipo de heap de todos os descritores na operação de cópia fornecida, para que ele saiba qual tamanho dos dados está envolvido na operação de cópia. Talvez o driver também precise fazer o trabalho de cópia personalizado se um determinado tipo de heap de descritor o justificar – um detalhe de implementação. Observe que os próprios identificadores do descritor não identificam para qual tipo eles estão apontando; portanto, um parâmetro adicional é necessário para a operação de cópia.

Uma API alternativa para CopyDescriptors é fornecida para o caso simples de copiar um único intervalo de descritores de um local para outro – CopyDescriptorsSimple.

Para esses métodos de cópia de descritor baseados em dispositivo (linha do tempo de CPU), os descritores de origem devem vir de um heap de descritor visível não sombreador. Os descritores de destino podem estar em qualquer heap de descritor visível para CPU (sombreador visível ou não).

Descritores