Compartilhar via


estrutura D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS (d3dukmdt.h)

A estrutura D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS identifica atributos de um objeto de sincronização.

Sintaxe

typedef struct _D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS {
  union {
    struct {
      UINT Shared : 1;
      UINT NtSecuritySharing : 1;
      UINT CrossAdapter : 1;
      UINT TopOfPipeline : 1;
      UINT NoSignal : 1;
      UINT NoWait : 1;
      UINT NoSignalMaxValueOnTdr : 1;
      UINT NoGPUAccess : 1;
      UINT SignalByKmd : 1;
      UINT Unused : 1;
      UINT UnwaitCpuWaitersOnlyOnDestroy : 1;
#if ...
      UINT Reserved : 20;
#elif
      UINT Reserved : 21;
#elif
      UINT Reserved : 22;
#elif
      UINT Reserved : 23;
#elif
      UINT Reserved : 28;
#else
      UINT Reserved : 29;
#endif
      UINT D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS_RESERVED0 : 1;
    };
    UINT Value;
  };
} D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS;

Membros

Shared

Um valor UINT que especifica se o objeto de sincronização é compartilhado.

Se Shared for definido como 1 (TRUE), o objeto de sincronização será compartilhado. Se Shared for definido como zero (FALSE), o objeto de sincronização não será compartilhado. Para obter mais informações, consulte a seção Comentários.

NtSecuritySharing

Um valor UINT que especifica se o objeto de sincronização é compartilhado com um identificador NT, o que significa que ele não tem um identificador global D3DKMT_HANDLE modo kernel para o recurso.

Se NtSecuritySharing estiver definido como 1 (TRUE), o objeto de sincronização será compartilhado, mas não terá um identificador de D3DKMT_HANDLE global para o recurso.

Observação

Se NtSecuritySharing estiver definido como 1, Shared deverá ser definido como 1. Para obter mais informações, consulte a seção Comentários.

Com suporte a partir do Windows 8.

CrossAdapter

Um valor UINT que especifica se o objeto de sincronização é um objeto de recurso compartilhado entre adaptadores em um sistema híbrido.

Se CrossAdapter for definido como 1 (TRUE), o objeto de sincronização será um objeto de adaptador cruzado compartilhado. Se CrossAdapter estiver definido como zero (FALSE), o objeto de sincronização não será um objeto de adaptador cruzado compartilhado.

TopOfPipeline

Valor Significado
TRUE Especifica se o objeto de sincronização é sinalizado assim que o conteúdo do buffer de comando anterior a ele é totalmente copiado para o pipeline de GPU, mas não necessariamente a execução concluída. Esse comportamento permite reutilização de buffers de comando o mais rápido possível.
FALSE O objeto de sincronização é sinalizado após a conclusão da execução dos buffers de comando anteriores.

Esse valor só pode ser definido como 1 (TRUE) para objetos de sincronização de cerca monitorados e deve ser definido como zero (FALSE) para todos os outros tipos de objeto de sincronização.

Com suporte a partir do Windows 10.

NoSignal

Valor Significado
TRUE Especifica que o dispositivo no qual esse objeto de sincronização é criado ou aberto só pode enviar comandos de espera para ele. Uma tentativa de enviar uma operação de sinal quando esse sinalizador for definido retornará STATUS_ACCESS_DENIED.
FALSE O objeto de sincronização pode ser sinalizado.

Esse valor só pode ser definido como 1 (TRUE) para objetos de sincronização de cerca monitorados e deve ser definido como zero (FALSE) para todos os outros tipos de objeto de sincronização.

Com suporte a partir do Windows 10.

NoWait

Valor Significado
TRUE Especifica que o dispositivo no qual esse objeto de sincronização é criado ou aberto só pode enviar comandos de sinal para ele. Uma tentativa de enviar uma operação de espera quando esse sinalizador for definido retornará STATUS_ACCESS_DENIED.
FALSE O objeto de sincronização pode ser aguardado.

Esse valor só pode ser definido como 1 (TRUE) para objetos de sincronização de cerca monitorados e deve ser definido como zero (FALSE) para todos os outros tipos de objeto de sincronização.

Esse sinalizador não pode ser definido simultaneamente com o sinalizador NoSignal .

Com suporte a partir do Windows 10.

NoSignalMaxValueOnTdr

Valor Significado
TRUE Instrui o agendador de GPU a ignorar a sinalização mencionada anteriormente da cerca monitorada para o valor máximo em casos de TDR.
FALSE O agendador de GPU sinalizará a cerca monitorada para o valor máximo quando um dispositivo que pode potencialmente sinalizar que ele é afetado pela redefinição de GPU (TDR).

Com suporte a partir do Windows 10.

NoGPUAccess

Quando definido, a cerca não será mapeada para o espaço de endereço virtual da GPU e sempre será armazenada como um valor de 64 bits (independentemente das tampas do adaptador). Há suporte apenas para operações de sinal/espera baseadas em pacotes. Com suporte a partir do Windows 10.

SignalByKmd

Quando definido, a cerca pode ser sinalizada pelo KMD (driver de modo kernel). Esse sinalizador só pode ser usado com objetos D3DDDI_CPU_NOTIFICATION . Com suporte a partir do Windows 11 (WDDM 3.0).

Unused

Esse membro não é utilizado e deve ser definido como zero. Disponível a partir do Windows 11, versão 22H2 (WDDM 3.1).

UnwaitCpuWaitersOnlyOnDestroy

Quando definido, os garçons de um objeto de sincronização compartilhado na CPU serão desbloqueados somente quando o objeto de sincronização compartilhado for finalmente destruído. Por padrão, os garçons da CPU são desbloqueados quando um objeto de sincronização local é destruído, mas o main objeto de sincronização compartilhado ainda é aberto por outro objeto de sincronização local. Com suporte a partir do Windows 11, versão 24H2 (WDDM 3.2).

Reserved

Esse membro é reservado e deve ser definido como zero.

D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS_RESERVED0

Esse membro é reservado e deve ser definido como zero.

Com suporte a partir do Windows 8.

Value

Um membro na união contido em D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS que pode conter um valor de 32 bits que identifica atributos de um objeto de sincronização.

Comentários

Os objetos a serem compartilhados usando a função D3DKMTShareObjects devem primeiro ser criados com o valor do sinalizador NtSecuritySharing definido. Esse valor de sinalizador está disponível nas estruturas D3DKMT_CREATEALLOCATIONFLAGS, D3DKMT_CREATEKEYEDMUTEX2_FLAGS e D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS .

Os drivers devem seguir estas diretrizes nos sinalizadores de D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS :

  • Se o objeto de sincronização não for compartilhado, defina Shared e NtSecuritySharing como 0.

  • Se o objeto de sincronização for compartilhado com um tipo de dados D3DKMT_HANDLE , defina Shared = 1 e NtSecuritySharing = 0.

  • Se o objeto de sincronização for compartilhado com um identificador NT para o processo (e sem um identificador global D3DKMT_HANDLE modo kernel para o recurso), defina Shared = 1 e NtSecuritySharing = 1.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 7
Cabeçalho d3dukmdt.h (inclua D3dumddi.h, D3dkmddi.h)

Confira também

D3DDDI_SYNCHRONIZATIONOBJECTINFO2

D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS

D3DKMTShareObjects

D3DKMT_CREATEALLOCATIONFLAGS

D3DKMT_CREATEKEYEDMUTEX2_FLAGS