DXGKARG_BUILDPAGINGBUFFER 구조체(d3dkmddi.h)

DXGKARG_BUILDPAGINGBUFFER 구조는 메모리 전송 작업에 사용할 페이징 버퍼를 빌드하는 DxgkDdiBuildPagingBuffer** 콜백에 대한 매개 변수를 설명합니다.

구문

typedef struct _DXGKARG_BUILDPAGINGBUFFER {
  [in/out] VOID                             *pDmaBuffer;
  [in/out] UINT                             DmaSize;
  [in/out] VOID                             *pDmaBufferPrivateData;
  [in/out] UINT                             DmaBufferPrivateDataSize;
  [in]     DXGK_BUILDPAGINGBUFFER_OPERATION Operation;
  [in/out] 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;
    [in]     DXGK_BUILDPAGINGBUFFER_SIGNALMONITOREDFENCE    SignalMonitoredFence;
    struct {
      HANDLE                hDevice;
      HANDLE                hAllocation;
      UINT                  SegmentId;
      SIZE_T                OffsetInPages;
      SIZE_T                NumberOfPages;
      DXGK_ADL              Adl;
      DXGK_MAPAPERTUREFLAGS Flags;
      ULONG                 AdlOffset;
      PVOID                 CpuVisibleAddress;
    } MapApertureSegment2;
    struct {
      UINT Reserved[64];
    } Reserved;
  };
  [in]     HANDLE                           hSystemContext;
           D3DGPU_VIRTUAL_ADDRESS           DmaBufferGpuVirtualAddress;
           UINT                             DmaBufferWriteOffset;
} DXGKARG_BUILDPAGINGBUFFER;

멤버

[in/out] pDmaBuffer

페이징 버퍼에서 사용 가능한 첫 번째 바이트에 대한 가상 주소입니다. 드라이버가 새 페이징 버퍼로 처음 호출되면 이 가상 주소는 4KB에 맞춰집니다. 드라이버는 페이징 버퍼가 가득 차서 새 페이징 버퍼를 사용할 때까지 페이징 버퍼에서 작업을 단단히 압축합니다. 따라서 GPU(그래픽 처리 장치)에 페이징 버퍼 제출을 위한 특정 맞춤이 필요한 경우 드라이버는 페이징 버퍼에 쓰는 작업을 패딩하여 이 맞춤을 적용해야 합니다. DxgkDdiBuildPagingBuffer 함수가 반환되기 전에 드라이버는 페이징 버퍼에 기록된 마지막 바이트를 가리키도록 pDmaBuffer 를 업데이트해야 합니다.

[in/out] DmaSize

pDmaBuffer 가 지정하는 페이징 버퍼의 크기(바이트)입니다.

[in/out] pDmaBufferPrivateData

pDmaBuffer 가 지정하는 DMA(직접 메모리 액세스) 버퍼(즉, 페이징 버퍼)와 연결된 드라이버 상주 개인 데이터 구조에 대한 포인터입니다.

[in/out] DmaBufferPrivateDataSize

pDmaBufferPrivateData 가 현재 작업에 대해 가리키는 프라이빗 데이터 구조에 남아 있는 바이트 수입니다.

[in] Operation

수행할 메모리 작업의 형식을 나타내는 DXGK_BUILDPAGINGBUFFER_OPERATION 형식의 값입니다.

[in/out] MultipassOffset

여러 페이징 버퍼가 필요한 경우 페이징 작업의 진행률을 지정하는 UINT 값입니다. 드라이버는 둘 이상의 전송 작업에 대해 여러 페이징 버퍼로 분할을 나타내도록 이 값을 설정합니다. 예를 들어 드라이버는 페이징 기반 전송을 위해 마지막으로 전송된 페이지 번호를 저장할 수 있습니다.

[in] Transfer

전송 작업을 설명하는 구조체입니다.

[in] Transfer.hAllocation

드라이버의 DxgkDdiCreateAllocation 함수가 이전에 DXGKARG_CREATEALLOCATION 구조체의 pAllocationInfo 멤버의 일부인 DXGK_ALLOCATIONINFO 구조체의 hAllocation 멤버에서 반환한 할당에 대한 핸들입니다. 할당 핸들은 전송을 위한 프라이빗 드라이버 데이터가 포함된 버퍼를 가리킵니다.

[in] Transfer.TransferOffset

전송되는 할당 내의 첫 번째 페이지의 오프셋(바이트)입니다. 이 오프셋은 세그먼트 위치가 설명하는 위치에만 적용됩니다. 이 오프셋은 메모리 범위에 대한 MDL 설명에는 적용되지 않습니다. 드라이버가 전송을 완료하는 데 둘 이상의 페이징 버퍼가 필요한 경우(즉, 드라이버가 DxgkDdiBuildPagingBuffer 함수에서 STATUS_GRAPHICS_INSUFFICIENT_DMA_BUFFER 반환함) TransferOffset 은 이 전송에 대해 DxgkDdiBuildPagingBuffer 를 호출할 때마다 동일합니다.

[in] Transfer.TransferSize

전송할 메모리 정보의 크기(바이트)입니다.

[in] Transfer.Source

원본 할당을 설명하는 구조체입니다. 이 구조체에는 원본 할당 세그먼트(SegmentAddress)에 대한 오프셋 또는 원본(pMdl)에 대한 MDL에 대한 포인터가 포함된 SegmentId 멤버 및 공용 구조체가 포함됩니다.

[in] Transfer.Source.SegmentId

원본 할당 내의 세그먼트 식별자이거나 원본 할당이 원본 에 포함된 공용 구조체의 pMdl 멤버에 의해 설명된 경우 0입니다.

[in] Transfer.Source.SegmentAddress

원본의 SegmentId 멤버가 0이 아닌 경우 원본 세그먼트 주소입니다. DirectX 그래픽 커널 하위 시스템은 세그먼트 주소를 세그먼트 오프셋의 합계 및 세그먼트 SegmentAddress = SegmentOffset + Segment.BaseAddr의 기본 주소로 계산합니다.

[in] Transfer.Source.pMdl

원본SegmentId 멤버가 0인 경우 원본의 시스템 메모리 페이지를 설명하는 MDL 구조를 포함하는 버퍼에 대한 포인터입니다.

[in] Transfer.Destination

대상 할당을 설명하는 구조체입니다. 이 구조체에는 대상 할당(SegmentAddress)의 세그먼트에 대한 오프셋 또는 대상(pMdl)에 대한 MDL에 대한 포인터가 포함된 SegmentId 멤버 및 공용 구조체가 포함됩니다.

[in] Transfer.Destination.SegmentId

대상 할당 내 세그먼트의 식별자이거나 대상 에 포함된 공용 구조체의 pMdl 멤버가 대상 할당을 설명하는 경우 0입니다.

[in] Transfer.Destination.SegmentAddress

대상의 SegmentId 멤버가 0이 아닌 경우 대상 세그먼트 주소입니다. DirectX 그래픽 커널 하위 시스템은 세그먼트 주소를 세그먼트 오프셋의 합계 및 세그먼트 SegmentAddress = SegmentOffset + Segment.BaseAddr의 기본 주소로 계산합니다.

[in] Transfer.Destination.pMdl

대상SegmentId 멤버가 0인 경우 대상의 시스템 메모리 페이지를 설명하는 MDL 구조를 포함하는 버퍼에 대한 포인터입니다.

[in] Transfer.Flags

비트 필드 플래그에서 수행할 특수 잠금 전송 작업의 형식을 식별하는 DXGK_TRANSFERFLAGS 구조체입니다.

[in] Transfer.MdlOffset

pMdl 멤버가 가리키는 MDL 구조 내의 시스템 메모리 페이지에서 현재 작업의 첫 번째 시스템 메모리 페이지로의 오프셋입니다. 드라이버는 다음과 같이 [MmGetMdlPfnArray](/windows-hardware/drivers/kernel/mm-bad-pointer#mmgetmdlpfnarray 함수를 호출하여 첫 번째 시스템 메모리 페이지의 실제 주소를 가져올 수 있습니다.

MmGetMdlPfnArray(pMdl)[MdlOffset];

[in] Fill

채우기 작업을 설명하는 구조체입니다.

[in] Fill.hAllocation

채울 콘텐츠가 포함된 할당에 대한 핸들입니다.

[in] Fill.FillSize

채울 메모리 정보의 크기(바이트)입니다.

[in] Fill.FillPattern

대상을 채울 패턴입니다. 비디오 메모리 관리자는 이 정보를 사용하여 콘텐츠가 없는 할당이 처음 페이징될 때 비디오 메모리를 특정 패턴으로 초기화합니다. 이 경우 채우기 요청에 대한 원본이 없으며 대상만 존재합니다.

[in] Fill.Destination

채우기 작업의 대상 할당을 설명하는 구조체입니다.

[in] Fill.Destination.SegmentId

대상 할당 내의 세그먼트 식별자입니다.

[in] Fill.Destination.SegmentAddress

대상 세그먼트 주소입니다. DirectX 그래픽 커널 하위 시스템은 세그먼트 주소를 세그먼트 오프셋의 합계 및 세그먼트 SegmentAddress = SegmentOffset + Segment.BaseAddr의 기본 주소로 계산합니다.

[in] DiscardContent

콘텐츠 삭제 작업을 설명하는 구조체입니다.

[in] DiscardContent.hAllocation

삭제할 콘텐츠가 포함된 할당에 대한 핸들입니다.

[in] DiscardContent.Flags

비트 필드 플래그에서 수행할 삭제 콘텐츠 작업의 형식을 식별하는 DXGK_DISCARDCONTENTFLAGS 구조체입니다.

[in] DiscardContent.SegmentId

콘텐츠를 삭제할 할당 내 세그먼트의 식별자입니다.

[in] DiscardContent.SegmentAddress

세그먼트 주소를 나타내는 PHYSICAL_ADDRESS 데이터 형식(LARGE_INTEGER 정의됨)입니다. DirectX 그래픽 커널 하위 시스템은 세그먼트 주소를 세그먼트 오프셋의 합계 및 세그먼트 SegmentAddress = SegmentOffset + Segment.BaseAddr의 기본 주소로 계산합니다. 이 위치는 콘텐츠가 삭제되는 위치입니다.

[in] ReadPhysical

읽기-물리적 연산을 설명하는 구조체입니다.

[in] ReadPhysical.SegmentId

데이터를 읽는 세그먼트의 식별자입니다.

[in] ReadPhysical.PhysicalAddress

SegmentId 가 지정하는 세그먼트 내에서 데이터를 읽는 실제 주소를 나타내는 PHYSICAL_ADDRESS 데이터 형식(LARGE_INTEGER 정의됨)입니다.

[in] WritePhysical

쓰기-물리적 연산을 설명하는 구조체입니다.

[in] WritePhysical.SegmentId

데이터가 기록되는 세그먼트의 식별자입니다.

[in] WritePhysical.PhysicalAddress

SegmentId 가 지정하는 세그먼트 내에서 데이터가 기록되는 실제 주소를 나타내는 PHYSICAL_ADDRESS 데이터 형식(LARGE_INTEGER로 정의됨)입니다.

[in] MapApertureSegment

MDL을 사용하는 map-aperture-segment 작업을 설명하는 구조체입니다.

[in] MapApertureSegment.hDevice

hAllocation 에서 SegmentId 가 지정하는 조리개 세그먼트에 매핑되는 할당을 소유하는 디바이스에 대한 핸들입니다.

공유 할당의 경우 hDevice 는 비디오 메모리 관리자가 할당의 소유자로 결정한 디바이스로 설정됩니다.

hDevice 는 기본 할당에 대해 NULL 입니다.

[in] MapApertureSegment.hAllocation

SegmentId 가 지정하는 조리개 세그먼트에 매핑되는 할당에 대한 핸들입니다.

드라이버에서 DMA 버퍼를 명시적으로 만들지 않기 때문에 DMA 버퍼가 조리개 세그먼트에 매핑되는 경우 hAllocationNULL 입니다.

[in] MapApertureSegment.SegmentId

구성할 조리개 세그먼트의 식별자입니다.

[in] MapApertureSegment.OffsetInPages

세그먼트의 시작부터 매핑할 첫 번째 페이지까지의 오프셋(페이지)입니다.

[in] MapApertureSegment.NumberOfPages

매핑할 페이지 수입니다.

[in] MapApertureSegment.pMdl

조리개 세그먼트에 매핑할 물리적 시스템 메모리 페이지를 설명하는 MDL 구조를 포함하는 버퍼에 대한 포인터입니다.

[in] MapApertureSegment.Flags

수행할 map-aperture-segment 작업의 형식을 비트 필드 플래그로 식별하는 DXGK_MAPAPERTUREFLAGS 구조체입니다.

[in] MapApertureSegment.MdlOffset

pMdl 멤버가 가리키는 MDL 구조 내의 시스템 메모리 페이지에서 현재 작업의 첫 번째 시스템 메모리 페이지로의 오프셋입니다. 드라이버는 다음과 같이 [MmGetMdlPfnArray](/windows-hardware/drivers/kernel/mm-bad-pointer#mmgetmdlpfnarray 함수를 호출하여 첫 번째 시스템 메모리 페이지의 실제 주소를 가져올 수 있습니다.

MmGetMdlPfnArray(pMdl)[MdlOffset];

[in] UnmapApertureSegment

매핑 해제-aperture-segment 작업을 설명하는 구조체입니다.

[in] UnmapApertureSegment.hDevice

hAllocation 에서 SegmentId 가 지정하는 조리개 세그먼트에서 매핑되지 않은 할당을 소유하는 디바이스에 대한 핸들입니다.

공유 할당의 경우 hDevice 는 비디오 메모리 관리자가 할당의 소유자로 결정한 디바이스로 설정됩니다.

hDevice 는 기본 할당에 대해 NULL 입니다.

[in] UnmapApertureSegment.hAllocation

SegmentId 가 지정하는 조리개 세그먼트에서 매핑되지 않은 할당에 대한 핸들입니다.

드라이버에서 DMA 버퍼를 명시적으로 만들지 않기 때문에 DMA 버퍼가 조리개 세그먼트에서 매핑되지 않은 경우 hAllocationNULL 입니다.

[in] UnmapApertureSegment.SegmentId

구성할 조리개 세그먼트의 식별자입니다.

[in] UnmapApertureSegment.OffsetInPages

세그먼트의 시작부터 매핑 해제할 첫 번째 페이지까지의 오프셋(페이지 단위)입니다.

[in] UnmapApertureSegment.NumberOfPages

매핑을 해제할 페이지 수입니다.

[in] UnmapApertureSegment.DummyPage

드라이버가 매핑되지 않은 범위를 매핑해야 하는 자리 표시자 페이지의 실제 주소를 나타내는 PHYSICAL_ADDRESS 데이터 형식(LARGE_INTEGER 정의됨)입니다.

[in] SpecialLockTransfer

특수 잠금 전송 작업을 설명하는 구조체입니다.

[in] SpecialLockTransfer.hAllocation

드라이버의 DxgkDdiCreateAllocation 함수가 이전에 DXGKARG_CREATEALLOCATION 구조체의 pAllocationInfo 멤버의 일부인 DXGK_ALLOCATIONINFO 구조체의 hAllocation 멤버에서 반환한 할당에 대한 핸들입니다. 할당 핸들은 특수 잠금 전송에 대한 프라이빗 드라이버 데이터가 포함된 버퍼를 가리킵니다.

[in] SpecialLockTransfer.TransferOffset

전송되는 할당 내의 첫 번째 페이지의 오프셋(바이트)입니다. 이 오프셋은 세그먼트 위치가 설명하는 위치에만 적용됩니다. 이 오프셋은 메모리 범위에 대한 MDL 설명에는 적용되지 않습니다. 드라이버가 전송을 완료하는 데 둘 이상의 페이징 버퍼가 필요한 경우(즉, 드라이버가 DxgkDdiBuildPagingBuffer 함수에서 STATUS_GRAPHICS_INSUFFICIENT_DMA_BUFFER 반환함) TransferOffset 은 이 전송에 대해 DxgkDdiBuildPagingBuffer 를 호출할 때마다 동일합니다.

[in] SpecialLockTransfer.TransferSize

전송할 메모리 정보의 크기(바이트)입니다.

[in] SpecialLockTransfer.Source

원본 할당을 설명하는 구조체입니다. 이 구조체에는 원본 할당 세그먼트(SegmentAddress)에 대한 오프셋 또는 원본(pMdl)에 대한 MDL에 대한 포인터가 포함된 SegmentId 멤버 및 공용 구조체가 포함됩니다.

[in] SpecialLockTransfer.Source.SegmentId

원본 할당 내의 세그먼트 식별자이거나 원본 할당이 원본 에 포함된 공용 구조체의 pMdl 멤버에 의해 설명된 경우 0입니다.

SpecialLockTransfer.Source. (이름 없는 공용 구조체)

[in] 원본 할당의 세그먼트에 대한 오프셋(SegmentAddress) 또는 원본(pMdl)에 대한 MDL에 대한 포인터를 포함하는 공용 구조체입니다.

SpecialLockTransfer.Source.SegmentAddress

[in] 원본의 SegmentId 멤버가 0이 아닌 경우 원본 세그먼트 주소입니다. DirectX 그래픽 커널 하위 시스템은 세그먼트 주소를 세그먼트 오프셋의 합계 및 세그먼트 SegmentAddress = SegmentOffset + Segment.BaseAddr의 기본 주소로 계산합니다.

SpecialLockTransfer.Source.pMdl

[in] 원본SegmentId 멤버가 0인 경우 원본의 시스템 메모리 페이지를 설명하는 MDL 구조가 포함된 버퍼에 대한 포인터입니다.

[in] SpecialLockTransfer.Destination

대상 할당을 설명하는 구조체입니다. 이 구조체에는 대상 할당의 세그먼트에 대한 오프셋(SegmentAddress) 또는 대상(pMdl)에 대한 MDL에 대한 포인터가 포함된 SegmentId 멤버 및 공용 구조체가 포함됩니다.

[in] SpecialLockTransfer.Destination.SegmentId

대상 할당 내 세그먼트의 식별자이거나 대상 할당이 대상 에 포함된 공용 구조체의 pMdl 멤버에 의해 설명된 경우 0입니다.

SpecialLockTransfer.Destination. (이름 없는 공용 구조체)

[in] 대상 할당의 세그먼트에 대한 오프셋(SegmentAddress) 또는 대상(pMdl)에 대한 MDL에 대한 포인터를 포함하는 공용 구조체입니다.

SpecialLockTransfer.Destination.SegmentAddress

[in] 대상의 SegmentId 멤버가 0이 아닌 경우 대상 세그먼트 주소입니다. DirectX 그래픽 커널 하위 시스템은 세그먼트 주소를 세그먼트 오프셋의 합계 및 세그먼트 SegmentAddress = SegmentOffset + Segment.BaseAddr의 기본 주소로 계산합니다.

SpecialLockTransfer.Destination.pMdl

[in] 대상SegmentId 멤버가 0인 경우 대상의 시스템 메모리 페이지를 설명하는 MDL 구조가 포함된 버퍼에 대한 포인터입니다.

[in] SpecialLockTransfer.Flags

수행할 특수 잠금 전송 작업의 유형을 비트 필드 플래그로 식별하는 DXGK_TRANSFERFLAGS 구조체입니다.

[in] SpecialLockTransfer.SwizzlingRangeId

스위즐링 범위를 식별하는 UINT 값입니다.

[in] SpecialLockTransfer.SwizzlingRangeData

스위즐링 범위 데이터를 지정하는 UINT 값입니다.

[in] InitContextResource

컨텍스트 초기화 작업을 설명하는 구조체입니다. Windows 8 시작부터 지원합니다.

[in] InitContextResource.hAllocation

드라이버가 DxgkCbCreateContextAllocation이라고 할 때 생성된 컨텍스트 할당에 대한 핸들입니다. 이 할당에 대한 핸들은 DXGKARGCB_CREATECONTEXTALLOCATION 구조체의 hAllocation 멤버에 반환됩니다. 드라이버는 DxgkCbCreateContextAllocation 을 호출할 때 ContextAllocation 매개 변수에서 이 구조체에 대한 포인터를 전달합니다.

[in] InitContextResource.Destination

대상 컨텍스트 할당을 설명하는 구조입니다. 이 구조체에는 대상 컨텍스트 할당(SegmentAddress)의 세그먼트에 대한 오프셋 또는 대상(pMdl)에 대한 MDL에 대한 포인터가 포함된 SegmentId 멤버 및 공용 구조체가 포함됩니다.

[in] InitContextResource.Destination.SegmentId

대상 컨텍스트 할당 내 세그먼트의 식별자이거나 대상 컨텍스트 할당이 대상 에 포함된 공용 구조체의 pMdl 멤버에 의해 설명된 경우 0입니다.

InitContextResource.Destination. (이름 없는 공용 구조체)

[in] 대상 컨텍스트 할당(SegmentAddress)의 세그먼트에 대한 오프셋 또는 대상(pMdl)에 대한 MDL에 대한 포인터를 포함하는 공용 구조체입니다.

InitContextResource.Destination.SegmentAddress

[in] 대상의 SegmentId 멤버가 0이 아닌 경우 대상 세그먼트 주소입니다. DirectX 그래픽 커널 하위 시스템은 세그먼트 주소를 세그먼트 오프셋의 합계 및 세그먼트 SegmentAddress = SegmentOffset + Segment.BaseAddr의 기본 주소로 계산합니다.

InitContextResource.Destination.pMdl

[in] 대상SegmentId 멤버가 0인 경우 대상의 시스템 메모리 페이지를 설명하는 MDL 구조가 포함된 버퍼에 대한 포인터입니다.

[in] InitContextResource.Destination.VirtualAddress

대상 컨텍스트 할당의 가상 주소입니다. 이 주소는 컨텍스트 할당의 수명 동안 유효합니다.

DxgkCbCreateContextAllocation 항목의 "대상 컨텍스트 할당에 대한 가상 주소의 프로시저"섹션에 따라 가상 주소가 유효한지 확인합니다.

InitContextResource.Destination.GpuVirtualAddress

초기화할 컨텍스트 리소스의 GPU 가상 주소입니다.

TransferVirtual

메모리의 위치 간에 할당 콘텐츠를 전송하는 데 사용되는 작업을 설명하는 DXGK_BUILDPAGINGBUFFER_TRANSFERVIRTUAL 구조체입니다.

FillVirtual

할당을 패턴으로 채우는 데 사용되는 작업을 설명하는 DXGK_BUILDPAGINGBUFFER_FILLVIRTUAL 구조체입니다.

UpdatePageTable

페이지 테이블을 업데이트하는 데 사용되는 작업을 설명하는 DXGK_BUILDPAGINGBUFFER_UPDATEPAGETABLE 구조체입니다.

FlushTlb

변환 외면 버퍼를 플러시하는 데 사용되는 작업을 설명하는 DXGK_BUILDPAGINGBUFFER_FLUSHTLB 구조체입니다.

CopyPageTableEntries

사용된 복사 페이지 테이블 항목을 한 위치에서 다른 위치로 복사하는 작업을 설명하는 DXGK_BUILDPAGINGBUFFER_COPYPAGETABLEENTRIES 구조체입니다.

UpdateContextAllocation

컨텍스트 또는 디바이스 할당의 콘텐츠를 업데이트하는 데 사용되는 작업을 설명하는 DXGK_BUILDPAGINGBUFFER_UPDATECONTEXTALLOCATION 구조체입니다.

NotifyResidency

상주 할당 변경 작업을 설명하는 DXGK_BUILDPAGINGBUFFER_NOTIFYRESIDENCY 구조체입니다.

[in] SignalMonitoredFence

모니터링되는 펜스 개체를 DMA 버퍼에 페이징하는 신호를 표시하는 GPU 명령을 설명하는 DXGK_BUILDPAGINGBUFFER_SIGNALMONITOREDFENCE 구조체입니다. Windows 10 버전 1703(WDDM 2.2)부터 사용할 수 있습니다.

MapApertureSegment2

[in] MapApertureSegment2.hDevice

hAllocation 에서 SegmentId 가 지정하는 조리개 세그먼트에 매핑되는 할당을 소유하는 디바이스에 대한 핸들입니다.

공유 할당의 경우 hDevice 는 비디오 메모리 관리자가 할당의 소유자로 결정한 디바이스로 설정됩니다.

hDevice 는 기본 할당에 대한 NULL 입니다.

[in] MapApertureSegment2.hAllocation

SegmentId 가 지정하는 조리개 세그먼트에 매핑되는 할당에 대한 드라이버 핸들입니다.

드라이버에서 DMA 버퍼를 명시적으로 만들지 않으므로 DMA 버퍼가 조리개 세그먼트에 매핑될 때 hAllocationNULL 입니다.

[in] MapApertureSegment2.SegmentId

구성할 조리개 세그먼트의 식별자입니다.

[in] MapApertureSegment2.OffsetInPages

세그먼트의 시작 부분에서 매핑할 첫 번째 페이지까지의 오프셋(페이지)입니다.

[in] MapApertureSegment2.NumberOfPages

할당 내에서 매핑되는 범위의 크기(페이지)입니다.

[in] MapApertureSegment2.Adl

할당 메모리에 대한 논리적 주소 매핑(페이지)을 설명하는 ADL(주소 설명자 목록)이 있는 DXGK_ADL 구조체입니다. 이 ADL은 연속 또는 페이지 배열일 수 있습니다. 드라이버는 두 경우를 모두 처리할 수 있어야 합니다.

[in] MapApertureSegment2.Flags

수행할 map-aperture-segment 작업의 형식을 비트 필드 플래그로 식별하는 DXGK_MAPAPERTUREFLAGS 구조체입니다.

[in] MapApertureSegment2.AdlOffset

시스템 메모리 페이지에 지정된 현재 작업에 대해 매핑되는 논리 주소 범위의 시작 부분까지 의 ADL 내 오프셋입니다. ADL이 연속 ADL인 경우 ADL의 BasePageNumber 멤버는 연속된 메모리 범위의 시작 주소입니다. 그렇지 않으면 연속 메모리가 아닌 메모리에 ADL의 Pages 멤버를 사용합니다.

MapApertureSegment2.CpuVisibleAddress

MapApertureCpuVisible 플래그 집합을 사용하여 드라이버 할당을 만든 경우 CpuVisibleAddressDXGK_OPERATION_MAP_APERTURE_SEGMENT2 작업에 대한 시스템 매핑 커널 모드 가상 주소에 대한 null이 아닌 포인터입니다. 할당이 조리개 세그먼트에 매핑되고 동일한 할당에 대한 해당 DXGK_OPERATION_UNMAP_APERTURE_SEGMENT 호출 직후 해제되는 한 이 주소는 유효합니다.

MapApertureCpuVisible 를 지정하지 않으면 cpuVisibleAddressDXGK_OPERATION_MAP_APERTURE_SEGMENT2 작업에 대해 NULL입니다.

Reserved

이 멤버는 예약되어 있으며 사용하지 않아야 합니다.

Reserved.Reserved

이 멤버는 예약되어 있으며 사용하지 않아야 합니다.

[in] hSystemContext

페이징 작업에 대한 시스템 컨텍스트에 대한 핸들입니다.

DmaBufferGpuVirtualAddress

DMA 버퍼가 페이징된 가상 주소를 나타내는 D3DGPU_VIRTUAL_ADDRESS 데이터 형식입니다. 실제 주소가 0이면 DMA 버퍼가 올바르게 페이징되지 않습니다.

DmaBufferWriteOffset

DMA 버퍼의 시작부터 현재 작업 오프셋(바이트)입니다.

설명

MDL은 WDM(Windows 드라이버 모델) 설명서에 정의되어 있습니다.

WDDM 동기화 클래스:

요구 사항

   
지원되는 최소 클라이언트 Windows Vista부터 지원됩니다.
헤더 d3dkmddi.h(D3dkmddi.h 포함)

참고 항목

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] (/windows-hardware/drivers/kernel/mm-bad-pointer#mmgetmdlpfnarray

pfnLockCb