DXGKARG_BUILDPAGINGBUFFER structure

The DXGKARG_BUILDPAGINGBUFFER structure describes parameters for building a paging buffer that is used in a memory-transfer operation.

Syntax

typedef struct _DXGKARG_BUILDPAGINGBUFFER {
  VOID                             *pDmaBuffer;
  UINT                             DmaSize;
  VOID                             *pDmaBufferPrivateData;
  UINT                             DmaBufferPrivateDataSize;
  DXGK_BUILDPAGINGBUFFER_OPERATION Operation;
  UINT                             MultipassOffset;
  union {
    struct {
      HANDLE             hAllocation;
      UINT               TransferOffset;
      SIZE_T             TransferSize;
      struct {
        UINT SegmentId;
        union {
          LARGE_INTEGER SegmentAddress;
          MDL           *pMdl;
        };
      } Source;
      struct {
        UINT SegmentId;
        union {
          LARGE_INTEGER SegmentAddress;
          MDL           *pMdl;
        };
      } Destination;
      DXGK_TRANSFERFLAGS Flags;
      UINT               MdlOffset;
    } Transfer;
    struct {
      HANDLE hAllocation;
      SIZE_T FillSize;
      UINT   FillPattern;
      struct {
        UINT          SegmentId;
        LARGE_INTEGER SegmentAddress;
      } Destination;
    } Fill;
    struct {
      HANDLE                   hAllocation;
      DXGK_DISCARDCONTENTFLAGS Flags;
      UINT                     SegmentId;
      PHYSICAL_ADDRESS         SegmentAddress;
    } DiscardContent;
    struct {
      UINT             SegmentId;
      PHYSICAL_ADDRESS PhysicalAddress;
    } ReadPhysical;
    struct {
      UINT             SegmentId;
      PHYSICAL_ADDRESS PhysicalAddress;
    } WritePhysical;
    struct {
      HANDLE                hDevice;
      HANDLE                hAllocation;
      UINT                  SegmentId;
      SIZE_T                OffsetInPages;
      SIZE_T                NumberOfPages;
      PMDL                  pMdl;
      DXGK_MAPAPERTUREFLAGS Flags;
      ULONG                 MdlOffset;
    } MapApertureSegment;
    struct {
      HANDLE           hDevice;
      HANDLE           hAllocation;
      UINT             SegmentId;
      SIZE_T           OffsetInPages;
      SIZE_T           NumberOfPages;
      PHYSICAL_ADDRESS DummyPage;
    } UnmapApertureSegment;
    struct {
      HANDLE             hAllocation;
      UINT               TransferOffset;
      SIZE_T             TransferSize;
      struct {
        UINT SegmentId;
        union {
          LARGE_INTEGER SegmentAddress;
          MDL           *pMdl;
        };
      } Source;
      struct {
        UINT SegmentId;
        union {
          LARGE_INTEGER SegmentAddress;
          MDL           *pMdl;
        };
      } Destination;
      DXGK_TRANSFERFLAGS Flags;
      UINT               SwizzlingRangeId;
      UINT               SwizzlingRangeData;
    } SpecialLockTransfer;
    struct {
      HANDLE hAllocation;
      struct {
        UINT                   SegmentId;
        union {
          LARGE_INTEGER SegmentAddress;
          MDL           *pMdl;
        };
        PVOID                  VirtualAddress;
        D3DGPU_VIRTUAL_ADDRESS GpuVirtualAddress;
      } Destination;
    } InitContextResource;
    DXGK_BUILDPAGINGBUFFER_TRANSFERVIRTUAL         TransferVirtual;
    DXGK_BUILDPAGINGBUFFER_FILLVIRTUAL             FillVirtual;
    DXGK_BUILDPAGINGBUFFER_UPDATEPAGETABLE         UpdatePageTable;
    DXGK_BUILDPAGINGBUFFER_FLUSHTLB                FlushTlb;
    DXGK_BUILDPAGINGBUFFER_COPYPAGETABLEENTRIES    CopyPageTableEntries;
    DXGK_BUILDPAGINGBUFFER_UPDATECONTEXTALLOCATION UpdateContextAllocation;
    DXGK_BUILDPAGINGBUFFER_NOTIFYRESIDENCY         NotifyResidency;
    DXGK_BUILDPAGINGBUFFER_SIGNALMONITOREDFENCE    SignalMonitoredFence;
    struct {
      UINT Reserved[64];
    } Reserved;
  };
  HANDLE                           hSystemContext;
  D3DGPU_VIRTUAL_ADDRESS           DmaBufferGpuVirtualAddress;
  UINT                             DmaBufferWriteOffset;
} DXGKARG_BUILDPAGINGBUFFER;

Members

pDmaBuffer

[in/out] A virtual address to the first available byte in the paging buffer. When the driver is first called with a new paging buffer, this virtual address is aligned on 4 KB. The driver tightly packs operations in the paging buffer until the paging buffer is full and then uses a new paging buffer. Therefore, if the graphics processing unit (GPU) requires a specific alignment for a paging-buffer submission, the driver should enforce this alignment by padding the operations that it writes to the paging buffer. Before the DxgkDdiBuildPagingBuffer function returns, the driver should update pDmaBuffer to point past the last byte that is written to the paging buffer.

DmaSize

[in/out] The size, in bytes, of the paging buffer that pDmaBuffer specifies.

pDmaBufferPrivateData

[in/out] A pointer to a driver-resident private data structure that is associated with the direct memory access (DMA) buffer (that is, paging buffer) that pDmaBuffer specifies.

DmaBufferPrivateDataSize

[in/out] The number of bytes that remain in the private data structure that pDmaBufferPrivateData points to for the current operation.

Operation

[in] A DXGK_BUILDPAGINGBUFFER_OPERATION-typed value that indicates the type of memory operation to perform.

MultipassOffset

[in/out] A UINT value that specifies the progress of the paging operation if multiple paging buffers are required. The driver sets this value to indicate a split into multiple paging buffers for more than one transfer operation. For example, the driver can store the page number that was last transferred for a paged-based transfer.

__unnamed_union_0bf1_148

__unnamed_union_0bf1_148.Transfer

__unnamed_union_0bf1_148.Transfer.hAllocation

__unnamed_union_0bf1_148.Transfer.TransferOffset

__unnamed_union_0bf1_148.Transfer.TransferSize

__unnamed_union_0bf1_148.Transfer.Source

__unnamed_union_0bf1_148.Transfer.Source.SegmentId

__unnamed_union_0bf1_148.Transfer.Source.__unnamed_union_52

__unnamed_union_0bf1_148.Transfer.Source.__unnamed_union_52.SegmentAddress

__unnamed_union_0bf1_148.Transfer.Source.__unnamed_union_52.pMdl

__unnamed_union_0bf1_148.Transfer.Destination

__unnamed_union_0bf1_148.Transfer.Destination.SegmentId

__unnamed_union_0bf1_148.Transfer.Destination.__unnamed_union_53

__unnamed_union_0bf1_148.Transfer.Destination.__unnamed_union_53.SegmentAddress

__unnamed_union_0bf1_148.Transfer.Destination.__unnamed_union_53.pMdl

__unnamed_union_0bf1_148.Transfer.Flags

__unnamed_union_0bf1_148.Transfer.MdlOffset

__unnamed_union_0bf1_148.Fill

__unnamed_union_0bf1_148.Fill.hAllocation

__unnamed_union_0bf1_148.Fill.FillSize

__unnamed_union_0bf1_148.Fill.FillPattern

__unnamed_union_0bf1_148.Fill.Destination

__unnamed_union_0bf1_148.Fill.Destination.SegmentId

__unnamed_union_0bf1_148.Fill.Destination.SegmentAddress

__unnamed_union_0bf1_148.DiscardContent

__unnamed_union_0bf1_148.DiscardContent.hAllocation

__unnamed_union_0bf1_148.DiscardContent.Flags

__unnamed_union_0bf1_148.DiscardContent.SegmentId

__unnamed_union_0bf1_148.DiscardContent.SegmentAddress

__unnamed_union_0bf1_148.ReadPhysical

__unnamed_union_0bf1_148.ReadPhysical.SegmentId

__unnamed_union_0bf1_148.ReadPhysical.PhysicalAddress

__unnamed_union_0bf1_148.WritePhysical

__unnamed_union_0bf1_148.WritePhysical.SegmentId

__unnamed_union_0bf1_148.WritePhysical.PhysicalAddress

__unnamed_union_0bf1_148.MapApertureSegment

__unnamed_union_0bf1_148.MapApertureSegment.hDevice

__unnamed_union_0bf1_148.MapApertureSegment.hAllocation

__unnamed_union_0bf1_148.MapApertureSegment.SegmentId

__unnamed_union_0bf1_148.MapApertureSegment.OffsetInPages

__unnamed_union_0bf1_148.MapApertureSegment.NumberOfPages

__unnamed_union_0bf1_148.MapApertureSegment.pMdl

__unnamed_union_0bf1_148.MapApertureSegment.Flags

__unnamed_union_0bf1_148.MapApertureSegment.MdlOffset

__unnamed_union_0bf1_148.UnmapApertureSegment

__unnamed_union_0bf1_148.UnmapApertureSegment.hDevice

__unnamed_union_0bf1_148.UnmapApertureSegment.hAllocation

__unnamed_union_0bf1_148.UnmapApertureSegment.SegmentId

__unnamed_union_0bf1_148.UnmapApertureSegment.OffsetInPages

__unnamed_union_0bf1_148.UnmapApertureSegment.NumberOfPages

__unnamed_union_0bf1_148.UnmapApertureSegment.DummyPage

__unnamed_union_0bf1_148.SpecialLockTransfer

__unnamed_union_0bf1_148.SpecialLockTransfer.hAllocation

__unnamed_union_0bf1_148.SpecialLockTransfer.TransferOffset

__unnamed_union_0bf1_148.SpecialLockTransfer.TransferSize

__unnamed_union_0bf1_148.SpecialLockTransfer.Source

__unnamed_union_0bf1_148.SpecialLockTransfer.Source.SegmentId

__unnamed_union_0bf1_148.SpecialLockTransfer.Source.__unnamed_union_54

__unnamed_union_0bf1_148.SpecialLockTransfer.Source.__unnamed_union_54.SegmentAddress

__unnamed_union_0bf1_148.SpecialLockTransfer.Source.__unnamed_union_54.pMdl

__unnamed_union_0bf1_148.SpecialLockTransfer.Destination

__unnamed_union_0bf1_148.SpecialLockTransfer.Destination.SegmentId

__unnamed_union_0bf1_148.SpecialLockTransfer.Destination.__unnamed_union_55

__unnamed_union_0bf1_148.SpecialLockTransfer.Destination.__unnamed_union_55.SegmentAddress

__unnamed_union_0bf1_148.SpecialLockTransfer.Destination.__unnamed_union_55.pMdl

__unnamed_union_0bf1_148.SpecialLockTransfer.Flags

__unnamed_union_0bf1_148.SpecialLockTransfer.SwizzlingRangeId

__unnamed_union_0bf1_148.SpecialLockTransfer.SwizzlingRangeData

__unnamed_union_0bf1_148.InitContextResource

__unnamed_union_0bf1_148.InitContextResource.hAllocation

__unnamed_union_0bf1_148.InitContextResource.Destination

__unnamed_union_0bf1_148.InitContextResource.Destination.SegmentId

__unnamed_union_0bf1_148.InitContextResource.Destination.__unnamed_union_56

__unnamed_union_0bf1_148.InitContextResource.Destination.__unnamed_union_56.SegmentAddress

__unnamed_union_0bf1_148.InitContextResource.Destination.__unnamed_union_56.pMdl

__unnamed_union_0bf1_148.InitContextResource.Destination.VirtualAddress

__unnamed_union_0bf1_148.InitContextResource.Destination.GpuVirtualAddress

__unnamed_union_0bf1_148.TransferVirtual

__unnamed_union_0bf1_148.FillVirtual

__unnamed_union_0bf1_148.UpdatePageTable

__unnamed_union_0bf1_148.FlushTlb

__unnamed_union_0bf1_148.CopyPageTableEntries

__unnamed_union_0bf1_148.UpdateContextAllocation

__unnamed_union_0bf1_148.NotifyResidency

__unnamed_union_0bf1_148.SignalMonitoredFence

__unnamed_union_0bf1_148.Reserved

__unnamed_union_0bf1_148.Reserved.Reserved

hSystemContext

[in] A handle to the system context for the paging operation.

DmaBufferGpuVirtualAddress

A D3DGPU_VIRTUAL_ADDRESS data type that indicates the virtual address where the DMA buffer was paged in. If the physical address is zero, the DMA buffer is not correctly paged in.

DmaBufferWriteOffset

The current operation offset in bytes from the start of the DMA buffer.

Remarks

MDL is defined in the Windows Driver Model (WDM) documentation.

WDDM synchronization class:

Requirements

   
Minimum supported client Supported starting with Windows Vista.
Header d3dkmddi.h (include D3dkmddi.h)

See Also

DXGKARGCB_CREATECONTEXTALLOCATION

DXGKARG_CREATEALLOCATION

DXGK_ALLOCATIONINFO

DXGK_BUILDPAGINGBUFFER_COPYPAGETABLEENTRIES

DXGK_BUILDPAGINGBUFFER_FILLVIRTUAL

DXGK_BUILDPAGINGBUFFER_FLUSHTLB

DXGK_BUILDPAGINGBUFFER_NOTIFYRESIDENCY

DXGK_BUILDPAGINGBUFFER_TRANSFERVIRTUAL

DXGK_BUILDPAGINGBUFFER_UPDATECONTEXTALLOCATION

DXGK_BUILDPAGINGBUFFER_UPDATEPAGETABLE

DXGK_DISCARDCONTENTFLAGS

DXGK_MAPAPERTUREFLAGS

DXGK_TRANSFERFLAGS

DxgkCbCreateContextAllocation

DxgkDdiBuildPagingBuffer

DxgkDdiCreateAllocation

MDL

MmGetMdlPfnArray

pfnLockCb