struktur DXGKARG_PATCH (d3dkmddi.h)

Struktur DXGKARG_PATCH menjelaskan buffer akses memori langsung (DMA) yang memerlukan patching (yaitu, memerlukan penugasan alamat fisik).

Sintaks

typedef struct _DXGKARG_PATCH {
  union {
    [in] HANDLE hDevice;
    [in] HANDLE hContext;
  };
  [in] UINT                           DmaBufferSegmentId;
  [in] PHYSICAL_ADDRESS               DmaBufferPhysicalAddress;
  [in] VOID                           *pDmaBuffer;
  [in] UINT                           DmaBufferSize;
  [in] UINT                           DmaBufferSubmissionStartOffset;
  [in] UINT                           DmaBufferSubmissionEndOffset;
  [in] VOID                           *pDmaBufferPrivateData;
  [in] UINT                           DmaBufferPrivateDataSize;
  [in] UINT                           DmaBufferPrivateDataSubmissionStartOffset;
  [in] UINT                           DmaBufferPrivateDataSubmissionEndOffset;
  [in] const DXGK_ALLOCATIONLIST      *pAllocationList;
  [in] UINT                           AllocationListSize;
  [in] const D3DDDI_PATCHLOCATIONLIST *pPatchLocationList;
  [in] UINT                           PatchLocationListSize;
  [in] UINT                           PatchLocationListSubmissionStart;
  [in] UINT                           PatchLocationListSubmissionLength;
  [in] UINT                           SubmissionFenceId;
  [in] DXGK_PATCHFLAGS                Flags;
  [in] UINT                           EngineOrdinal;
} DXGKARG_PATCH;

Anggota

[in] hDevice

Jika driver tidak sadar beberapa mesin (yaitu, driver tidak mendukung pembuatan konteks), handel ke perangkat tampilan (konteks grafis) asal permintaan pengiriman. Handel perangkat diberikan ke fungsi DxgkDdiPatch driver dalam penyatuan yang dikandung DXGKARG_PATCH.

Untuk beberapa operasi paging, hDevice adalah NULL (misalnya, operasi paging yang mengeluarkan konten seluruh buffer bingkai selama manajemen daya). Operasi halaman ditunjukkan oleh bendera Paging bit-field di anggota Bendera .

[in] hContext

Jika driver mengetahui beberapa mesin (yaitu, driver mendukung pembuatan konteks), handel ke konteks perangkat tempat permintaan pengiriman berasal. Handel konteks diberikan ke fungsi DxgkDdiPatch driver dalam penyatuan yang dikandung DXGKARG_PATCH.

Untuk beberapa operasi paging, hContext adalah NULL (misalnya, operasi paging yang mengeluarkan konten seluruh buffer bingkai selama manajemen daya). Operasi halaman ditunjukkan oleh bendera Paging bit-field di anggota Bendera .

[in] DmaBufferSegmentId

Pengidentifikasi segmen memori tempat buffer DMA di-paged.

Pengidentifikasi dapat nol jika driver menunjukkan untuk tidak memetakan buffer DMA ke segmen dengan mengatur anggota DmaBufferSegmentSet dari struktur DXGK_CONTEXTINFO ke 0 dalam panggilan ke fungsi DxgkDdiCreateContext driver. Jika DmaBufferSegmentId adalah nol, buffer DMA dialokasikan sebagai blok memori sistem yang berdekatan.

[in] DmaBufferPhysicalAddress

Jenis data PHYSICAL_ADDRESS (yang didefinisikan sebagai LARGE_INTEGER) yang menunjukkan alamat fisik tempat buffer DMA di-paged in.

Jika DmaBufferSegmentId adalah nol, DmaBufferPhysicalAddress adalah alamat fisik dalam memori sistem tempat buffer DMA berada.

Jika DmaBufferSegmentId bukan nol, DmaBufferPhysicalAddress adalah alamat fisik segmen untuk buffer DMA (yaitu, DXGK_SEGMENTDESCRIPTOR. BaseAddress + DmaBuffer.SegmentOffset).

Perhatikan bahwa DmaBufferPhysicalAddress selalu mengacu pada awal buffer DMA meskipun driver mungkin diperlukan untuk menambal atau mengirimkan bagian dari buffer DMA yang tidak menyertakan awal buffer DMA (yaitu, jika anggota DmaBufferSubmissionStartOffset bukan nol).

[in] pDmaBuffer

Penunjuk ke awal buffer DMA (yaitu, alamat virtual awal buffer DMA).

[in] DmaBufferSize

Ukuran, dalam byte, dari buffer DMA yang dituju pDmaBuffer .

Perhatikan bahwa DmaBufferSize mewakili seluruh panjang buffer DMA; namun, permintaan untuk menambal atau mengirimkan mungkin hanya merujuk ke sebagian buffer DMA.

[in] DmaBufferSubmissionStartOffset

Offset, dalam byte, dari awal buffer DMA yang ditentukan pDmaBuffer ke awal bagian buffer DMA yang memerlukan patching atau pengiriman. Offset yang diterima pada waktu patch cocok dengan offset yang diterima pada waktu pengiriman.

[in] DmaBufferSubmissionEndOffset

Offset, dalam byte, dari awal buffer DMA yang ditentukan pDmaBuffer ke akhir bagian buffer DMA yang memerlukan patching atau pengiriman. Offset yang diterima pada waktu patch cocok dengan offset yang diterima pada waktu pengiriman.

[in] pDmaBufferPrivateData

Penunjuk ke data privat residen pengemudi yang terkait dengan buffer DMA yang dituju pDmaBuffer .

Untuk operasi paging, satu buffer halaman digunakan untuk beberapa pengiriman independen. Dalam skenario tersebut, driver dapat menunjukkan—dengan mengembalikan penunjuk data driver privat yang sesuai dalam panggilan ke fungsi DxgkDdiBuildPagingBuffer —untuk memiliki satu rentang data pribadi driver untuk semua pengiriman atau satu untuk setiap pengiriman.

[in] DmaBufferPrivateDataSize

Ukuran, dalam byte, dari data driver pribadi di pDmaBufferPrivateData.

Perhatikan bahwa DmaBufferPrivateDataSize mewakili seluruh panjang buffer data driver privat; namun, bagian yang terkait dengan pengiriman saat ini mungkin lebih kecil.

[in] DmaBufferPrivateDataSubmissionStartOffset

Offset, dalam byte, dari awal data privat buffer DMA yang ditentukan pDmaBufferPrivateData ke awal bagian data privat yang terkait dengan pengiriman saat ini. DmaBufferPrivateDataSubmissionStartOffset selalu nol untuk permintaan non-halaman.

[in] DmaBufferPrivateDataSubmissionEndOffset

Offset, dalam byte, dari awal data privat buffer DMA yang ditentukan pDmaBufferPrivateData hingga akhir bagian data privat yang terkait dengan pengiriman saat ini.

[in] pAllocationList

Penunjuk ke array struktur DXGK_ALLOCATIONLIST untuk daftar alokasi yang terkait dengan buffer DMA yang dituju pDmaBuffer .

Untuk operasi paging, pAllocationList ADALAH NULL karena buffer halaman tidak terkait dengan daftar alokasi.

[in] AllocationListSize

Jumlah elemen dalam array yang ditentukan pAllocationList .

Perhatikan bahwa AllocationListSize mewakili ukuran total daftar alokasi; namun, bagian dari daftar alokasi yang terkait dengan pengiriman saat ini mungkin lebih kecil.

Perhatikan bahwa untuk operasi halaman AllocationListSize adalah nol karena buffer halaman tidak terkait dengan daftar alokasi.

[in] pPatchLocationList

Penunjuk ke array struktur D3DDDI_PATCHLOCATIONLIST untuk daftar lokasi patch yang terkait dengan buffer DMA yang dituju pDmaBuffer .

Perhatikan bahwa array dapat dimulai dengan elemen sebelum rentang yang digunakan untuk menambal buffer DMA.

Untuk operasi paging, pPatchLocationList adalah NULL karena buffer halaman tidak terkait dengan daftar lokasi patch.

[in] PatchLocationListSize

Jumlah elemen dalam array yang ditentukan pPatchLocationList .

Perhatikan bahwa PatchLocationListSize mewakili ukuran total daftar lokasi patch; namun, rentang yang harus diproses driver biasanya lebih kecil.

Untuk operasi halaman, PatchLocationListSize adalah nol karena buffer halaman tidak terkait dengan daftar lokasi patch.

[in] PatchLocationListSubmissionStart

Indeks elemen pertama dalam daftar lokasi patch yang ditentukan pPatchLocationList yang harus diproses.

Untuk operasi paging, PatchLocationListSubmissionStart adalah nol.

[in] PatchLocationListSubmissionLength

Jumlah elemen dalam daftar lokasi patch yang ditentukan pPatchLocationList yang harus diproses.

Untuk operasi paging, PatchLocationListSubmissionLength adalah nol.

[in] SubmissionFenceId

Pengidentifikasi unik yang dapat ditulis driver ke perintah pagar di akhir buffer DMA. Untuk informasi selengkapnya tentang jenis pengidentifikasi ini, lihat Menyediakan Pengidentifikasi Pagar.

[in] Flags

Struktur DXGK_PATCHFLAGS yang mengidentifikasi informasi tentang buffer DMA yang memerlukan patching.

[in] EngineOrdinal

Disiapkan untuk penggunaan masa mendatang.

Keterangan

Driver miniport tampilan mengembalikan array dalam anggota pAllocationList dari struktur DXGKARG_PRESENT atau DXGKARG_RENDER dari fungsi DxgkDdiPresent atau DxgkDdiRender setelah menerjemahkan buffer perintah ke buffer akses memori langsung (DMA). Manajer memori video menetapkan alamat fisik ke anggota PhysicalAddress dari struktur DXGK_ALLOCATIONLIST dalam array dan meneruskan array ini ke fungsi DxgkDdiPatch driver. DxgkDdiPatch menambal tempat di buffer DMA dengan alamat fisik ini.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows Vista
Header d3dkmddi.h (termasuk D3dkmddi.h)

Lihat juga

D3DDDI_PATCHLOCATIONLIST

DXGKARG_PRESENT

DXGKARG_RENDER

DXGK_ALLOCATIONLIST

DXGK_CONTEXTINFO

DXGK_PATCHFLAGS

DxgkDdiBuildPagingBuffer

DxgkDdiCreateContext

DxgkDdiPatch

DxgkDdiPresent

DxgkDdiRender