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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk