Compartilhar via


estrutura DXGK_ALLOCATIONINFOFLAGS (d3dkmddi.h)

A estrutura DXGK_ALLOCATIONINFOFLAGS identifica as propriedades de uma alocação.

Sintaxe

typedef struct _DXGK_ALLOCATIONINFOFLAGS {
  union {
    struct {
      UINT CpuVisible : 1;
      UINT PermanentSysMem : 1;
      UINT Cached : 1;
      UINT Protected : 1;
      UINT ExistingSysMem : 1;
      UINT ExistingKernelSysMem : 1;
      UINT FromEndOfSegment : 1;
      UINT Swizzled : 1;
      UINT Overlay : 1;
      UINT Capture : 1;
      UINT UseAlternateVA : 1;
      UINT SynchronousPaging : 1;
      UINT LinkMirrored : 1;
      UINT LinkInstanced : 1;
      UINT HistoryBuffer : 1;
      UINT AccessedPhysically : 1;
      UINT ExplicitResidencyNotification : 1;
      UINT HardwareProtected : 1;
      UINT CpuVisibleOnDemand : 1;
      UINT Reserved : 4;
      UINT DXGK_ALLOC_RESERVED16 : 1;
      UINT DXGK_ALLOC_RESERVED15 : 1;
      UINT DXGK_ALLOC_RESERVED14 : 1;
      UINT DXGK_ALLOC_RESERVED13 : 1;
      UINT DXGK_ALLOC_RESERVED12 : 1;
      UINT DXGK_ALLOC_RESERVED11 : 1;
      UINT DXGK_ALLOC_RESERVED10 : 1;
      UINT DXGK_ALLOC_RESERVED9 : 1;
      UINT DXGK_ALLOC_RESERVED4 : 1;
      UINT DXGK_ALLOC_RESERVED3 : 1;
      UINT DXGK_ALLOC_RESERVED2 : 1;
      UINT DXGK_ALLOC_RESERVED1 : 1;
      UINT DXGK_ALLOC_RESERVED0 : 1;
    };
    UINT Value;
  };
} DXGK_ALLOCATIONINFOFLAGS;

Membros

CpuVisible

[out] Um valor UINT que especifica se a alocação está diretamente acessível pela CPU. O driver de miniporta de exibição deve definir esse sinalizador para que o driver de exibição do modo de usuário chame com êxito a função pfnLockCb na alocação. Se esse sinalizador não estiver definido na alocação, pfnLockCb retornará um erro.

Observe que somente o processo que criou uma alocação compartilhada pode bloquear essa alocação.

Definir esse membro é equivalente a definir o primeiro bit do membro Value de 32 bits (0x00000001).

PermanentSysMem

[out] Um valor UINT que especifica se uma cópia da alocação deve ser mantida na memória do sistema mesmo quando o conteúdo está localizado em um segmento de memória. Por padrão, um repositório de backup de memória do sistema de superfície é perdido ao transferir uma alocação para um segmento de memória. Quando o sinalizador PermanentSysMem é especificado e a alocação é removida de um segmento de memória, o conteúdo da alocação é descartado e não paginado se a alocação não é sujo (ou seja, a alocação não foi o destino de uma operação de gravação desde que foi paginada).

Uma chamada para pfnLockCb na alocação sempre retorna o repositório de backup de memória do sistema para a alocação. Se a alocação estiver localizada em um segmento de memória quando o driver de exibição do modo de usuário chamar pfnUnlockCb, o recurso de segmento de memória para a alocação será atualizado com o novo conteúdo. Essa atualização é exibida, para o driver de miniporto de exibição, como uma operação de paginação regular por meio da função DxgkDdiBuildPagingBuffer . Observe que, se o driver de miniporto de exibição exigir um tamanho mínimo de região ou alinhamento para uma operação de paginação, esse requisito deverá ser refletido na região que está sendo bloqueada. Quando o driver define PermanentSysMem, o driver também deve definir o membro CpuVisible . O driver não deve definir PermanentSysMem na superfície primária.

Definir esse membro é equivalente a definir o segundo bit do membro Value de 32 bits (0x00000002).

Cached

[out] Um valor UINT que especifica se o repositório de backup de alocação deve ser alocado como memória armazenada em cache; por padrão, o repositório de backup de alocação é armazenado como memória combinada de gravação. Quando uma alocação de memória armazenada em cache é usada em um segmento que não é coerente em cache (por exemplo, um segmento de memória ou segmento de AGP), o gerenciador de memória de vídeo garante a coerência para o conteúdo da alocação liberando-o do cache do processador no momento apropriado.

Quando o driver define Cached e também define o membro ExistingSysMem ou ExistingKernelSysMem , o driver indica ao gerenciador de memória de vídeo que a memória existente foi mapeada como armazenável em cache. Se a memória existente tiver sido mapeada como armazenável em cache, mas o driver não conseguir definir o membro armazenado em cache , o gerenciador de memória de vídeo não poderá garantir a coerência de dados e ocorrerá corrupção. O driver deve definir o membro armazenado em cache para uma alocação que deve ser lida pelo aplicativo ou pelo driver de exibição no modo de usuário. O driver nunca deve definir o membro armazenado em cache para uma alocação somente gravação.

Quando o driver define esse membro, o driver também deve definir o membro CpuVisible . O driver não deve definir Armazenado em cache na superfície primária.

Definir esse membro é equivalente a definir o terceiro bit do membro Value de 32 bits (0x00000004).

Protected

[out] Um valor UINT que especifica se o repositório de backup de alocação deve ser alocado na memória do kernel em vez do espaço de endereço do usuário para proteger a alocação contra o possível acesso direto à CPU por um aplicativo. O driver não pode definir esse membro em combinação com o membro PermanentSysMem, ExistingSysMem ou ExistingKernelSysMem . O driver não deve definir Protegido na superfície primária.

Definir esse membro é equivalente a definir o quarto bit do membro Value de 32 bits (0x00000008).

ExistingSysMem

[out] Um valor UINT que especifica se o gerenciador de memória de vídeo deve usar o intervalo de memória do sistema existente como um repositório de backup para a alocação. O intervalo de memória do sistema deve ser um endereço válido no modo de usuário para o processo atual para o tamanho da alocação. O intervalo de memória do sistema também deve ser alinhado à página e deve ser uma página com vários tamanhos.

Se o intervalo de memória do sistema for um endereço virtual armazenável em cache, o driver deverá definir o membro armazenado em cache para informar o gerenciador de memória de vídeo para garantir a coerência de cache na alocação. Se o membro Armazenado em cache não for especificado, o gerenciador de memória de vídeo determinará que o intervalo de memória do sistema é incontestável, com gravação combinada ou armazenável em cache; no entanto, nessa situação, o driver garante a coerência de cache ou determina que a coerência de cache não é um problema para o uso especificado.

Observe que esse tipo de alocação tem implicitamente a mesma semântica de bloqueio que uma alocação na qual o membro PermanentSysMem está definido.

O driver não pode definir ExistingSysMem em combinação com o membro PermanentSysMem, Protected ou ExistingKernelSysMem . O driver não deve definir ExistingSysMem na superfície primária.

Definir esse membro é equivalente a definir o quinto bit do membro Value de 32 bits (0x00000010).

ExistingKernelSysMem

[out] Um valor UINT que especifica se o gerenciador de memória de vídeo deve usar o intervalo de memória do sistema existente como um repositório de backup para a alocação. O intervalo de memória do sistema deve ser um endereço válido no modo kernel alinhado em uma página e uma página com vários tamanhos.

Se o intervalo de memória do sistema for um endereço virtual armazenável em cache, o driver deverá definir o membro armazenado em cache para informar o gerenciador de memória de vídeo para garantir a coerência de cache na alocação. Se o membro Armazenado em cache não for especificado, o gerenciador de memória de vídeo determinará que o intervalo de memória do sistema é incontestável, com gravação combinada ou armazenável em cache; no entanto, nessa situação, o driver garante a coerência de cache ou determina que a coerência de cache não é um problema para o uso especificado.

Observe que esse tipo de alocação tem implicitamente a mesma semântica de bloqueio que uma alocação na qual o membro PermanentSysMem está definido.

O driver não pode definir ExistingKernelSysMem em combinação com o membro PermanentSysMem, Protected ou ExistingSysMem . O driver não deve definir ExistingKernelSysMem na superfície primária.

Definir esse membro é equivalente a definir o sexto bit do membro Value de 32 bits (0x00000020).

FromEndOfSegment

[out] Um valor UINT que especifica se a alocação deve ser alocada do final de um segmento durante a paginação. O gerenciador de memória de vídeo examina um espaço de endereço de segmento e procura espaço para a alocação do final do segmento em vez de verificar desde o início do segmento (que é o comportamento padrão). No entanto, as informações de segmento sugeridas e preferenciais assumem precedentes sobre esse sinalizador.

Definir esse membro é equivalente a definir o sétimo bit do membro Value de 32 bits (0x00000040).

Swizzled

[out] Um valor UINT que especifica se a alocação é girada e requer suporte especial do gerenciador de memória de vídeo para bloquear a alocação. Para obter mais informações sobre alocações com swizzled, consulte Bloquear alocações com swizzled.

Definir esse membro é equivalente a definir o oitavo bit do membro Value de 32 bits (0x00000080).

Overlay

[out] Um valor UINT que especifica se a alocação é para uma operação de sobreposição. As alocações de sobreposição são fixadas na memória e o gerenciador de memória de vídeo não pode despejá-las, a menos que ocorra o processo de TDR (Detecção e Recuperação de Tempo Limite), Plug and Play (PnP) ou sincronização de nível três. Observe que antes da sincronização de nível três ocorrer, as sobreposições normalmente são destruídas. Por padrão, as alocações de sobreposição são limitadas e não podem ocupar mais do que os últimos 20% de um segmento. Se uma alocação de sobreposição for alocada em um segmento de abertura, o driver de miniporto de exibição deverá limitar o tamanho de qualquer outra alocação que use esse segmento de abertura como um segmento de remoção para 80% do tamanho do segmento. O driver de miniporto de exibição indica que uma alocação pode usar um segmento para remoção especificando o bit apropriado para o segmento no membro EvictionSegmentSet da estrutura DXGK_ALLOCATIONINFO para a alocação. Se o driver de miniporto de exibição não limitar o tamanho de outra alocação, o gerenciador de memória de vídeo não poderá remover essa alocação por meio do segmento porque a alocação fixada (ou seja, a alocação de sobreposição) ocupa a área necessária para remoção. Nesse caso, o conteúdo da outra alocação que está sendo removida é perdido e o aplicativo que possui a alocação perdida não pode mais ser renderizado com essa alocação.

Definir esse membro é equivalente a definir o nono bit do membro Value de 32 bits (0x00000100).

Capture

[out] Um valor UINT que especifica se a alocação é usada para uma operação de captura. As alocações de captura são fixadas na memória da mesma forma que as alocações de sobreposição. Portanto, os problemas que se aplicam a alocações de sobreposição também se aplicam a alocações de captura. Para obter mais informações sobre esses problemas, consulte a descrição do sinalizador Overlay . Observe que antes que a sincronização de nível três ocorra, as capturas normalmente são interrompidas.

Definir esse membro é equivalente a definir o décimo bit do membro Value de 32 bits (0x00000200).

UseAlternateVA

[out] Um valor UINT que especifica se a alocação primária pode ser bloqueada. UseAlternateVA é válido apenas para a alocação primária. Se UseAlternateVA for especificado para qualquer outra alocação, a alocação não será criada. Quando uma alocação primária é criada usando UseAlternateVA, um intervalo de giro para a alocação primária é configurado quando a alocação é criada.

Definir esse membro é equivalente a definir o décimo primeiro bit do membro Value de 32 bits (0x00000400).

SynchronousPaging

[out] Um valor UINT que especifica se a alocação deve ser paginada de forma síncrona. Se o driver de miniporto de exibição definir esse bit para uma alocação, o gerenciador de memória de vídeo aguardará até que a alocação não esteja mais ocupada (ou seja, o gerenciador de memória de vídeo aguardará até que a GPU (unidade de processamento gráfico) reporte todas as cercas que fazem referência à alocação) antes que o gerenciador de memória de vídeo envie um buffer de paginação que referencie a alocação.

Da mesma forma, o gerenciador de memória de vídeo aguardará a conclusão de uma operação de paginação em uma alocação síncrona antes que o gerenciador de memória de vídeo permita que o driver envie um buffer de DMA (acesso direto à memória) não paginação.

Definir esse membro é equivalente a definir o décimo segundo bit do membro Value de 32 bits (0x00000800).

LinkMirrored

[out] Um valor UINT que especifica se uma única instância de uma alocação deve ser replicada em todos os adaptadores físicos em um adaptador lógico (ou seja, um link). O gerenciador de memória de vídeo chama o driver para paginar e remover a alocação em todos os adaptadores físicos com um único repositório de backup compartilhado na memória do sistema.

Definir esse membro é equivalente a definir o décimo terceiro bit do membro Value de 32 bits (0x00001000).

LinkInstanced

[out] Um valor UINT que especifica se diferentes instâncias de uma alocação serão paginadas e removidas de todos os adaptadores físicos em um adaptador lógico (ou seja, um link). Existe um repositório de backup de memória do sistema por adaptador físico em um adaptador lógico.

Definir esse membro é equivalente a definir o décimo quarto bit do membro Value de 32 bits (0x00002000).

HistoryBuffer

[out] Um valor UINT que especifica se o driver de exibição do modo de usuário aloca um buffer de histórico. O driver de miniporta de exibição deve definir esse sinalizador para indicar que o driver de modo de usuário pode gerenciar a criação e destruição de buffers de histórico.

Quando o driver do miniporto de exibição define HistoryBuffer, ele também deve definir o sinalizador CpuVisible . Se o driver der suporte a segmentos de abertura coerentes com cache, ele também deverá definir Cache e todos os outros membros deverão ser definidos como zero.

Definir esse membro é equivalente a definir o décimo quinto bit do membro Value de 32 bits (0x00004000).

Suporte começando com Windows 8.1.

AccessedPhysically

O driver do modo kernel define o sinalizador em alocações, que são acessadas por seu endereço físico. Essa alocação será alocada contígua de segmentos de memória de GPU. As alocações não serão contíguas quando alocadas da memória do sistema.

Definir esse membro é equivalente a definir o décimo sexto bit do membro Value de 32 bits (0x00008000).

Com suporte a partir do Windows 10.

ExplicitResidencyNotification

Quando esses sinalizadores são especificados, o driver recebe uma operação de buffer de paginação NotifyResidency quando a residência de alocação é alterada (removida, confirmada). O sinalizador só pode ser definido quando o sinalizador AccessedPhysically está definido.

Definir esse membro é equivalente a definir o décimo sétimo bit do membro Value de 32 bits (0x00010000).

Com suporte a partir do Windows 10.

HardwareProtected

Quando esse membro for definido, a alocação conterá o conteúdo usado para o DRM (gerenciamento de direitos digitais) de hardware.

CpuVisibleOnDemand

Quando esse membro for definido, o gerenciador de memória de vídeo tentará alocar o endereço virtual para a alocação quando ele for mapeado/bloqueado. Isso resultará na alocação não ter um endereço virtual permanente, o que reduz a quantidade de espaço de endereço virtual usado. Ele se comporta de forma semelhante ao sinalizador CpuVisible , pois é uma alocação diretamente acessível pela CPU, mas apenas obtém o endereço virtual para ele "sob demanda" em vez de ser atribuído permanentemente.

Reserved

Reservado para uso do sistema. Disponível a partir do Windows 10.

DXGK_ALLOC_RESERVED16

[in] Esse membro é reservado e deve ser definido como zero. Com suporte a partir do Windows 8.

DXGK_ALLOC_RESERVED15

[in] Esse membro é reservado e deve ser definido como zero. Com suporte a partir do Windows 8.

DXGK_ALLOC_RESERVED14

[in] Esse membro é reservado e deve ser definido como zero. Com suporte a partir do Windows 8.

DXGK_ALLOC_RESERVED13

[in] Esse membro é reservado e deve ser definido como zero. Com suporte a partir do Windows 8.

DXGK_ALLOC_RESERVED12

[in] Esse membro é reservado e deve ser definido como zero. Com suporte a partir do Windows 8.

DXGK_ALLOC_RESERVED11

[in] Esse membro é reservado e deve ser definido como zero. Com suporte a partir do Windows 8.

DXGK_ALLOC_RESERVED10

[in] Esse membro é reservado e deve ser definido como zero. Com suporte a partir do Windows 8.

DXGK_ALLOC_RESERVED9

[in] Esse membro é reservado e deve ser definido como zero. Com suporte a partir do Windows 8.

DXGK_ALLOC_RESERVED4

[in] Esse membro é reservado e deve ser definido como zero. Com suporte a partir do Windows 8.

DXGK_ALLOC_RESERVED3

[in] Esse membro é reservado e deve ser definido como zero. Com suporte a partir do Windows 8.

DXGK_ALLOC_RESERVED2

[in] Esse membro é reservado e deve ser definido como zero. Com suporte a partir do Windows 8.

DXGK_ALLOC_RESERVED1

[in] Esse membro é reservado e deve ser definido como zero. Com suporte a partir do Windows 8.

DXGK_ALLOC_RESERVED0

[in] Esse membro é reservado e deve ser definido como zero. Com suporte a partir do Windows 8.

Value

[out] Um membro na união que DXGK_ALLOCATIONINFOFLAGS contém que pode conter um valor de 32 bits que identifica as propriedades da alocação.

Comentários

Um driver de miniporta de exibição direcionado a qualquer versão do WDDM anterior ao WDDM 2.0 usa essa estrutura para especificar esses sinalizadores para o gerenciador de memória de vídeo. Os drivers direcionados a versões >do WDDM = WDDM 2.0 devem usar DXGK_ALLOCATIONINFOFLAGS_WDDM2_0.

Você pode especificar propriedades de uma alocação definindo bits no membro Value de 32 bits ou definindo membros individuais da estrutura na união que a estrutura DXGK_ALLOCATIONINFOFLAGS contém.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows Vista
Cabeçalho d3dkmddi.h (inclua D3dkmddi.h)

Confira também

DXGK_ALLOCATIONINFO

DXGK_ALLOCATIONINFOFLAGS_WDDM2_0

DxgkDdiBuildPagingBuffer

pfnLockCb

pfnUnlockCb