estrutura D3DDDI_UPDATEGPUVIRTUALADDRESS_OPERATION (d3dukmdt.h)
D3DDDI_UPDATEGPUVIRTUALADDRESS_OPERATION descreve uma operação de atualização de endereço virtual.
Sintaxe
typedef struct _D3DDDI_UPDATEGPUVIRTUALADDRESS_OPERATION {
D3DDDI_UPDATEGPUVIRTUALADDRESS_OPERATION_TYPE OperationType;
union {
struct {
D3DKMT_ALIGN64 D3DGPU_VIRTUAL_ADDRESS BaseAddress;
D3DKMT_ALIGN64 D3DGPU_SIZE_T SizeInBytes;
D3DKMT_HANDLE hAllocation;
D3DKMT_ALIGN64 D3DGPU_SIZE_T AllocationOffsetInBytes;
D3DKMT_ALIGN64 D3DGPU_SIZE_T AllocationSizeInBytes;
} Map;
struct {
D3DKMT_ALIGN64 D3DGPU_VIRTUAL_ADDRESS BaseAddress;
D3DKMT_ALIGN64 D3DGPU_SIZE_T SizeInBytes;
D3DKMT_HANDLE hAllocation;
D3DKMT_ALIGN64 D3DGPU_SIZE_T AllocationOffsetInBytes;
D3DKMT_ALIGN64 D3DGPU_SIZE_T AllocationSizeInBytes;
D3DDDIGPUVIRTUALADDRESS_PROTECTION_TYPE Protection;
D3DKMT_ALIGN64 UINT64 DriverProtection;
} MapProtect;
struct {
D3DKMT_ALIGN64 D3DGPU_VIRTUAL_ADDRESS BaseAddress;
D3DKMT_ALIGN64 D3DGPU_SIZE_T SizeInBytes;
D3DDDIGPUVIRTUALADDRESS_PROTECTION_TYPE Protection;
} Unmap;
struct {
D3DKMT_ALIGN64 D3DGPU_VIRTUAL_ADDRESS SourceAddress;
D3DKMT_ALIGN64 D3DGPU_SIZE_T SizeInBytes;
D3DKMT_ALIGN64 D3DGPU_VIRTUAL_ADDRESS DestAddress;
} Copy;
};
} D3DDDI_UPDATEGPUVIRTUALADDRESS_OPERATION;
Membros
OperationType
Map
Mapeia o intervalo de endereços virtuais fornecido para o intervalo de alocação fornecido. A alocação não precisa ser residente no momento do envio ou no momento do mapeamento. A proteção de leitura/gravação é definida como as páginas. do DriverProtection para as páginas é definido como zero.
Map.BaseAddress
Especifica o BaseAddress do intervalo de endereços virtuais de GPU a ser atualizado. O valor está em bytes e deve estar alinhado a 4KB.
Todo o intervalo de BaseAddress a +SizeInBytes deve estar no reservado (zero) ou estado de mapeado ou a operação de pfnUpdateGpuVirtualAddressCb falhará. Os intervalos de endereços virtuais para todas as operações devem pertencer a um intervalo de endereços virtual reservado pelo mesmo chamada de pfnReserveGpuVirtualAddressCb.
Map.SizeInBytes
Especifica o tamanho, em bytes, para o intervalo que está sendo atualizado. O valor deve estar alinhado a 4KB.
Map.hAllocation
Especifica a alocação para a qual o intervalo precisa ser mapeado.
Map.AllocationOffsetInBytes
Especifica o deslocamento, em bytes, para a primeira página na alocação a ser mapeada. O valor deve estar alinhado a 4KB.
Map.AllocationSizeInBytes
Especifica o tamanho do intervalo de alocação a ser mapeado, em bytes. O valor deve ser alinhado a 4KB e deve ser menor que Map.SizeInBytes. Se esse valor for zero, Map.SizeInBytes será usado.
Quando esse valor for superior a Map.SizeInBytes, Map.SizeInBytes deve ser um múltiplo dele. Nesse caso, Map.SizeInBytes/Map.AllocationSizeInBytes intervalos de endereços virtuais serão mapeados para o mesmo intervalo de alocação.
MapProtect
Mapeia o intervalo de endereços virtuais fornecido para o intervalo de alocação fornecido. A alocação não precisa ser residente no momento do envio ou no momento do mapeamento. A proteção de página é especificada na operação.
MapProtect.BaseAddress
Especifica o BaseAddress do intervalo de endereços virtuais de GPU a ser atualizado. O valor está em bytes e deve estar alinhado a 4KB.
Todo o intervalo de BaseAddress a +SizeInBytes deve estar no reservado (zero) ou estado mapeado ou pfnUpdateGpuVirtualAddressCb falhará. Os intervalos de endereços virtuais para todas as operações devem pertencer a um intervalo de endereços virtual reservado pelo mesmo chamada de pfnReserveGpuVirtualAddressCb.
MapProtect.SizeInBytes
Especifica o tamanho, em bytes, para o intervalo que está sendo atualizado. O valor deve estar alinhado a 4KB.
MapProtect.hAllocation
Especifica a alocação para a qual o intervalo precisa ser mapeado.
MapProtect.AllocationOffsetInBytes
Especifica o deslocamento, em bytes, para a primeira página na alocação a ser mapeada. O valor deve estar alinhado a 4KB.
MapProtect.AllocationSizeInBytes
Especifica o tamanho do intervalo de alocação a ser mapeado, em bytes. O valor deve ser alinhado a 4KB e deve ser menor que Map.SizeInBytes. Se esse valor for zero, Map.SizeInBytes será usado.
Quando esse valor for menor que Map.SizeInBytes, Map.SizeInBytes deve ser um múltiplo dele. Nesse caso, Map.SizeInBytes/Map.AllocationSizeInBytes intervalos de endereços virtuais serão mapeados para o mesmo intervalo de alocação.
MapProtect.Protection
Especifica a proteção definida pela API para as páginas.
MapProtect.DriverProtection
Especifica a proteção específica do driver para as páginas.
Unmap
Coloca o intervalo de endereços virtuais especificado no estado zero ou no estado de inválido.
Unmap.BaseAddress
Especifica o baseAddress do intervalo de endereços virtuais de GPU para colocar novamente no estado zero. O valor está em bytes e deve estar alinhado a 4KB.
Unmap.SizeInBytes
Especifica o tamanho, em bytes, para que o intervalo seja liberado. O valor deve estar alinhado a 4KB.
Unmap.Protection
Define é o estado de entrada da tabela de páginas após o não mapeamento, Zero ou NoAccess.
Copy
A operação de cópia copia todos os mapeamentos do intervalo de endereços virtuais de GPU de origem para o intervalo de destino. Os intervalos de origem e destino têm permissão para interseção. Ambos os intervalos devem pertencer a um intervalo de endereços virtuais reservado (zero).
BaseAddress
Especifica o endereço virtual inicial do intervalo de endereços virtuais de origem. O valor está em bytes e deve estar alinhado a 4KB.
Copy.SourceAddress
Copy.SizeInBytes
Especifica o tamanho, em bytes, para o intervalo que está sendo copiado. O valor deve estar alinhado a 4KB.
Copy.DestAddress
Especifica o endereço virtual inicial do intervalo de endereços virtuais de destino. O valor está em bytes e deve estar alinhado a 4KB.
Requisitos
Requisito | Valor |
---|---|
de cliente com suporte mínimo | Windows 10 |
servidor com suporte mínimo | Windows Server 2016 |
cabeçalho | d3dukmdt.h (inclua D3dumddi.h, D3dkmddi.h) |