Gráficos de trabalho

Os Grafos de Trabalho são um sistema de autonomia de GPU no Direct3D 12 que permite a criação de trabalho baseada em GPU. Os threads de sombreador em execução na GPU podem solicitar que outros trabalhos sejam executados sem esperar que esse trabalho seja iniciado, com o sistema gerenciando o agendamento e a memória dos dados que fluem entre as tarefas.

Este artigo descreve os DDIs que são adicionados para um UMD (driver de elementos gráficos) no modo de usuário para dar suporte a gráficos de trabalho D3D12. O recurso de grafo de trabalho está disponível a partir do Windows 11, versão 24H2 (WDDM 3.2). Uma explicação detalhada dos grafos de trabalho pode ser encontrada na especificação de Gráficos de Trabalho D3D12 .

Programas Genéricos são um recurso relacionado que fornece uma maneira de definir gráficos e pipelines de computação gráfica dentro de objetos de estado, usando a mesma infraestrutura utilizada para grafos de trabalho e raytracing.

Suporte a gráficos de trabalho em relatórios

A UMD relata seu suporte para grafos de trabalho por meio das seguintes interfaces:

  • A entrada D3D12DDICAPS_TYPE_OPTIONS_0109 de relatório de recursos é adicionada àenumeração D3D12DDICAPS_TYPE usada pelo PFND3D12DDI_GETCAPS.

  • Essa entrada de caps corresponde à estrutura de caps D3D12DDI_OPTIONS_DATA_0103, cujo membro WorkGraphsTier indica o nível de suporte a grafos de tarefas que o driver oferece.

Tabelas de funções DDI

Para dar suporte a grafos de trabalho, a UMD deve implementar as seguintes funções e fornecer ponteiros para elas nas seguintes tabelas de funções DDI:

Páginas de referência para as dezenas de estruturas de gráficos de trabalho e enumerações associadas aos DDIs adicionados podem ser descobertas seguindo os links das páginas de referência dos DDIs.

Os seguintes tipos de subobjeto D3D12DDI_STATE_SUBOBJECT_TYPE (e suas estruturas relacionadas de criação de objeto de estado) são relevantes para os grafos de trabalho.

Definição Valor de enumeração Estrutura relacionada
D3D12DDI_STATE_SUBOBJECT_TYPE_STATE_OBJECT_CONFIG 0 D3D12DDI_STATE_OBJECT_CONFIG_0054
D3D12DDI_STATE_SUBOBJECT_TYPE_GLOBAL_ROOT_SIGNATURE 1 D3D12DDI_GLOBAL_ROOT_SIGNATURE_0054
D3D12DDI_STATE_SUBOBJECT_TYPE_LOCAL_ROOT_SIGNATURE 2 D3D12DDI_LOCAL_ROOT_SIGNATURE_0054
D3D12DDI_STATE_SUBOBJECT_TYPE_NODE_MASK 3 D3D12_NODE_MASK_0054
D3D12DDI_STATE_SUBOBJECT_TYPE_DXIL_LIBRARY 5 D3D12DDI_DXIL_LIBRARY_DESC_0054
D3D12DDI_STATE_SUBOBJECT_TYPE_EXISTING_COLLECTION 6 D3D12DDI_EXISTING_COLLECTION_DESC_0054
D3D12DDI_STATE_SUBOBJECT_TYPE_WORK_GRAPH 13 D3D12DDI_WORK_GRAPH_DESC_0108
D3D12DDI_STATE_SUBOBJECT_TYPE_SHADER_EXPORT_SUMMARY 0x100000 D3D12DDI_FUNCTION_SUMMARY_005

Em uma definição de objeto de estado na DDI, os grafos de trabalho são um subobjeto do tipo D3D12DDI_STATE_SUBOBJECT_TYPE_WORK_GRAPH. Consulte a estrutura D3D12DDI_WORK_GRAPH_DESC_0108 para o layout do subobjeto. Estruturas e enumerações relacionadas são vinculadas a partir da página de referência dessa estrutura.

Os outros tipos de subobjeto são herdados as-is da especificação DXR.