estrutura D3DDDICB_LOCKFLAGS (d3dukmdt.h)
A estrutura D3DDDICB_LOCKFLAGS identifica como bloquear uma alocação.
Sintaxe
typedef struct _D3DDDICB_LOCKFLAGS {
union {
struct {
UINT ReadOnly : 1;
UINT WriteOnly : 1;
UINT DonotWait : 1;
UINT IgnoreSync : 1;
UINT LockEntire : 1;
UINT DonotEvict : 1;
UINT AcquireAperture : 1;
UINT Discard : 1;
UINT NoExistingReference : 1;
UINT UseAlternateVA : 1;
UINT IgnoreReadSync : 1;
UINT Reserved : 21;
};
UINT Value;
};
} D3DDDICB_LOCKFLAGS;
Membros
ReadOnly
Um valor UINT que especifica se a alocação bloqueada só pode ser lida. Definir esse membro é equivalente a definir o primeiro bit do membro Value de 32 bits (0x00000001).
WriteOnly
Um valor UINT que especifica se a alocação bloqueada só pode ser gravada. Definir esse membro é equivalente a definir o segundo bit do membro Value de 32 bits (0x00000002).
DonotWait
Um valor UINT que especifica se o gerenciador de memória de vídeo deve aguardar para bloquear a alocação. Se esse membro estiver definido, o gerenciador de memória falhará na chamada para pfnLockCb com D3DERR_WASSTILLDRAWING se o hardware gráfico estiver usando a alocação.
Definir esse membro é equivalente a definir o terceiro bit do membro Value de 32 bits (0x00000004).
IgnoreSync
Um valor UINT que especifica se o gerenciador de memória de vídeo deve marcar se o hardware gráfico está usando a alocação. Se esse membro estiver definido, o gerenciador de memória não deverá marcar.
IgnoreSync só pode ser definido com uma alocação que pode ser colocada em um segmento de abertura. Ele não pode ser definido com uma alocação girada ou com uma alocação armazenada em cache quando a coerência de cache não é compatível com o adaptador gráfico.
Definir esse membro é equivalente a definir o quarto bit do membro Value de 32 bits (0x00000008).
LockEntire
Um valor UINT que especifica se toda a região de alocação está bloqueada em vez de apenas uma sub-região.
Definir esse membro é equivalente a definir o quinto bit do membro Value de 32 bits (0x00000010).
DonotEvict
Um valor UINT que especifica se o gerenciador de memória de vídeo deve remover a alocação para que o bloqueio possa ser bem-sucedido. Se esse membro estiver definido, o gerenciador de memória não deverá remover a alocação. Se a alocação precisar ser removida para lidar com a solicitação de bloqueio, o gerenciador de memória falhará na chamada para pfnLockCb com D3DERR_NOTAVAILABLE. A remoção pode ser necessária quando todas as aberturas deswizzling são esgotadas.
Definir esse membro é equivalente a definir o sexto bit do membro Value de 32 bits (0x00000020).
AcquireAperture
Um valor UINT que especifica se o gerenciador de memória de vídeo deve chamar a função DxgkDdiAcquireSwizzlingRange do driver de miniporta de exibição para configurar uma abertura deswizzling para a alocação.
Uma alocação que foi bloqueada sem definir AcquireAperture não pode ser bloqueada novamente com AcquireAperture definido.
AcquireAperture não poderá ser definido se a alocação puder ser localizada somente em um segmento de abertura.
Definir esse membro é equivalente a definir o sétimo bit do membro Value de 32 bits (0x00000040).
Discard
Um valor UINT que especifica se o gerenciador de memória de vídeo pode renomear ou fazer vários buffers da alocação. Para obter mais informações sobre como renomear alocações, consulte Solicitando renomeação de uma alocação.
Descartar é ignorado para alocações fixadas, primárias ou compartilhadas.
Definir esse membro é equivalente a definir o oitavo bit do membro Value de 32 bits (0x00000080).
NoExistingReference
Um valor UINT que especifica se o driver de exibição no modo de usuário atualmente não tem enfileirado em seu buffer de comando uma referência a qualquer instância da alocação que está sendo bloqueada. O driver deve usar o membro NoExistingReference depois que o gerenciador de memória de vídeo falhar na solicitação de bloqueio usando apenas o sinalizador Discard e depois que o driver liberar seu buffer de comando atual para o kernel. O driver deve usar NoExistingReference em combinação com Discard.
Definir esse membro é equivalente a definir o nono bit do membro Value de 32 bits (0x00000100).
UseAlternateVA
Um valor UINT que especifica se o driver de miniporto de exibição pode bloquear uma alocação em um endereço físico diferente do local do segmento atual da alocação ou com um volume de memória diferente do que foi alocado anteriormente. Quando esse sinalizador é especificado, o driver de miniporto de exibição pode atualizar o endereço base e o tamanho do intervalo de endereços físicos pelo qual a alocação é acessível pela CPU (atualizando os membros RangeSize e CPUTranslatedAddress da estrutura DXGKARG_ACQUIRESWIZZLINGRANGE em uma chamada para a função DxgkDdiAcquireSwizzlingRange ). Quando esse sinalizador é especificado, o gerenciador de memória de vídeo tenta alocar um novo endereço virtual para lidar com a solicitação de bloqueio em vez de usar o endereço virtual do repositório de backup de alocação. No entanto, se o gerenciador de memória de vídeo não puder alocar o novo endereço virtual, a solicitação de bloqueio falhará.
Esse sinalizador também é usado para bloquear alocações giradas ou lado a lado que estão atualmente localizadas em um segmento de abertura não AGP. Nesse tipo de bloqueio, o gerenciador de memória de vídeo mapeia o endereço virtual alternativo para um intervalo de endereços físico que pode ser deswizzled ou untiled em tempo real e redireciona o acesso à memória para as páginas de memória do sistema.
O gerenciador de memória de vídeo cria o endereço virtual alternativo quando a alocação é bloqueada pela primeira vez com UseAlternateVA e libera o endereço virtual em um dos seguintes cenários:
- A alocação não está acessível para a CPU e o intervalo de giro é liberado para reutilização por outra alocação.
- A alocação não está acessível para a CPU e está sendo removida.
- A alocação está sendo destruída.
- A alocação está sendo paginada após ser removida enquanto está bloqueada.
UseAlternateVA não pode ser usado em uma alocação compartilhada.
Uma alocação que foi bloqueada com UseAlternateVA definida não pode ser bloqueada novamente.
IgnoreReadSync
Um valor UINT que especifica se o gerenciador de memória de vídeo deve aguardar apenas as operações de gravação de GPU (Unidade de Processamento Gráfico) pendentes para a alocação ser concluída. Se esse membro estiver definido, o gerenciador de memória não precisará aguardar a conclusão das operações de leitura da GPU. Ou seja, assim que a última operação de gravação de GPU for concluída, o bloqueio poderá retornar mesmo que a GPU ainda possa estar lendo da alocação.
IgnoreReadSync só pode ser definido com uma alocação que pode ser colocada em um segmento de abertura. Ele não pode ser definido com uma alocação girada ou com uma alocação armazenada em cache quando a coerência de cache não é compatível com o adaptador gráfico.
Definir esse membro é equivalente a definir o décimo primeiro bit do membro Value de 32 bits (0x00000400).
Reserved
Esse membro é reservado e deve ser definido como zero. Definir esse membro como zero é equivalente a definir os 21 bits restantes (0xFFFFF800) do membro Value de 32 bits como zeros.
Value
Um membro na união contido em D3DDDICB_LOCKFLAGS que pode conter um valor de 32 bits que identifica como bloquear uma alocação.
Comentários
Ao usar uma estrutura D3DDDICB_LOCKFLAGS para especificar como bloquear uma alocação, você deve seguir as seguintes regras:
- Especificar simultaneamente os membros ReadOnly e WriteOnly é inválido.
- O membro IgnoreSync não terá efeito se especificado com o membro Discard .
- O membro DonotWait não terá efeito se especificado com o membro Discard .
- Especificar simultaneamente os membros IgnoreSync e AcquireAperture é inválido.
- Como especificar o membro UseAlternateVA indica que uma abertura foi adquirida, o membro AcquireAperture também deve ser definido.
- Alocações desativadas ou oferecidas não podem ser bloqueadas. Consulte também Solicitando a renomeação de uma alocação.
- Uma alocação só poderá ser bloqueada se tiver sido criada com o membro CpuVisible definido na estrutura DXGK_ALLOCATIONINFOFLAGS .
- Somente o proprietário (criador) de uma alocação compartilhada pode bloqueá-lo, a menos que seja uma alocação primária não gerenciada de GDI.
- Uma alocação bloqueada com um intervalo giratório deve ser desbloqueada antes que possa ser bloqueada novamente.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Disponível no Windows Vista e versões posteriores dos sistemas operacionais Windows. |
Cabeçalho | d3dukmdt.h (inclua D3dukmdt.h) |