Cópia de 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 de 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 se alinhar. Por exemplo, um conjunto esparso de descritores pode ser copiado para um destino contíguo, vice-versa, ou em alguma combinação.

Várias pilhas de descritores podem estar envolvidas 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 os montes em que qualquer descritor se encontra – 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 usam um único tipo de heap do descritor como entrada. O driver precisa saber o tipo de heap de todos os descritores na operação de cópia fornecida, de forma a saber qual é o tamanho dos dados envolvido na operação de cópia. O driver também pode precisar fazer um trabalho de cópia personalizado se um determinado tipo de heap do descritor o justificar – um detalhe de implementação. Observe que os próprios identificadores do descritor não identificam para que tipo 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 descritores baseados em dispositivo (cronograma da CPU), os descritores de origem devem vir de um heap de descritores não visível por sombreador. Os descritores de destino podem estar em qualquer heap de descritor que seja visível para a CPU (quer seja visível para o sombreador ou não).

Descritores