Partilhar via


estrutura DXGK_ALLOCATIONINFOFLAGS_WDDM2_0 (d3dkmddi.h)

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

Sintaxe

typedef struct _DXGK_ALLOCATIONINFOFLAGS_WDDM2_0 {
  union {
    struct {
      UINT CpuVisible : 1;
      UINT PermanentSysMem : 1;
      UINT Cached : 1;
      UINT Protected : 1;
      UINT ExistingSysMem : 1;
      UINT ExistingKernelSysMem : 1;
      UINT FromEndOfSegment : 1;
      UINT DisableLargePageMapping : 1;
      UINT Overlay : 1;
      UINT Capture : 1;
      UINT CreateInVpr : 1;
      UINT Reserved00 : 1;
      UINT DXGK_ALLOC_RESERVED17 : 1;
      UINT Reserved02 : 1;
      UINT MapApertureCpuVisible : 1;
      UINT Reserved03 : 1;
      UINT HistoryBuffer : 1;
      UINT AccessedPhysically : 1;
      UINT ExplicitResidencyNotification : 1;
      UINT HardwareProtected : 1;
      UINT CpuVisibleOnDemand : 1;
      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_WDDM2_0;

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).

DisableLargePageMapping

[out] Um valor UINT que especifica se o mapeamento de página grande para a alocação deve ser desabilitado. O suporte para Páginas Grandes para drivers foi adicionado a partir do WDDM2.1. As páginas grandes são usadas ao traduzir endereços virtuais, em que a tabela de páginas de nível mais baixo é substituída por uma página grande que tem cobertura igual da tabela de páginas de nível 0. Esse sinalizador desabilita isso e usa uma tabela de páginas para a tradução de endereços.

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).

CreateInVpr

[out] Um valor UINT que especifica se a alocação deve ser criada no intervalo protegido por vídeo. Esse membro é usado para DRM (gerenciamento de direitos digitais) de hardware em versões >do WDDM = WDDM 2.1.

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

Reserved00

[in] Para versões do WDDM anteriores ao WDDM 2.1, esse membro é reservado e deve ser definido como zero.

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

DXGK_ALLOC_RESERVED17

[in] Esse membro é reservado e deve ser definido como zero.

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

Reserved02

[in] Esse membro é reservado e deve ser definido como zero.

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

MapApertureCpuVisible

[in] Quando definido, indica que o driver requer acesso de CPU à memória durante uma chamada DxgkDdiBuildPagingBuffer para uma operação de DXGK_OPERATION_MAP_APERTURE_SEGMENT2 . MapApertureCpuVisible faz parte da funcionalidade MapAperatureSegment2 do DxgkDdiBuildPagingBuffer, portanto, o driver deve definir DXGK_VIDMMCAPS MapAperature2Supported para usar esse campo. Se MapAperature2Supported não estiver definido, mas o driver especificar MapApertureCpuVisible, a chamada para DxgkDdiCreateAllocation falhará. Confira Remapeamento de DMA IOMMU para obter mais informações. Com suporte a partir do Windows Server 2022.

Reserved03

[in] Esse membro é reservado e deve ser definido como zero.

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).

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).

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).

HardwareProtected

Quando esse membro for definido, a alocação conterá o conteúdo usado para DRM 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.

DXGK_ALLOC_RESERVED16

[in] Esse membro é reservado e deve ser definido como zero.

DXGK_ALLOC_RESERVED15

[in] Esse membro é reservado e deve ser definido como zero.

DXGK_ALLOC_RESERVED14

[in] Esse membro é reservado e deve ser definido como zero.

DXGK_ALLOC_RESERVED13

[in] Esse membro é reservado e deve ser definido como zero.

DXGK_ALLOC_RESERVED12

[in] Esse membro é reservado e deve ser definido como zero.

DXGK_ALLOC_RESERVED11

[in] Esse membro é reservado e deve ser definido como zero.

DXGK_ALLOC_RESERVED10

[in] Esse membro é reservado e deve ser definido como zero.

DXGK_ALLOC_RESERVED9

[in] Esse membro é reservado e deve ser definido como zero.

DXGK_ALLOC_RESERVED4

[in] Esse membro é reservado e deve ser definido como zero.

DXGK_ALLOC_RESERVED3

[in] Esse membro é reservado e deve ser definido como zero.

DXGK_ALLOC_RESERVED2

[in] Esse membro é reservado e deve ser definido como zero.

DXGK_ALLOC_RESERVED1

[in] Esse membro é reservado e deve ser definido como zero.

DXGK_ALLOC_RESERVED0

[in] Esse membro é reservado e deve ser definido como zero.

Value

[out] Um membro na união que DXGK_ALLOCATIONINFOFLAGS_WDDM2_0 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 = 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 anteriores ao WDDM 2.0 devem usar DXGK_ALLOCATIONINFOFLAGS.

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 10
Cabeçalho d3dkmddi.h (inclua D3dkmddi.h)

Confira também

DXGK_ALLOCATIONINFO

DXGK_ALLOCATIONINFOFLAGS

DxgkDdiBuildPagingBuffer

pfnLockCb

pfnUnlockCb