DXGKDDI_ACQUIRESWIZZLINGRANGE fungsi panggilan balik (d3dkmddi.h)

Fungsi DxgkDdiAcquireSwizzlingRange membuat alokasi dapat diakses melalui bukaan unit pemrosesan pusat (CPU) untuk segmen tertentu.

Sintaks

DXGKDDI_ACQUIRESWIZZLINGRANGE DxgkddiAcquireswizzlingrange;

NTSTATUS DxgkddiAcquireswizzlingrange(
  [in]     IN_CONST_HANDLE hAdapter,
  [in/out] INOUT_PDXGKARG_ACQUIRESWIZZLINGRANGE pAcquireSwizzlingRange
)
{...}

Parameter

[in] hAdapter

Handel ke blok konteks yang terkait dengan adaptor tampilan. Driver miniport tampilan sebelumnya menyediakan handel ini ke subsistem kernel grafis Microsoft DirectX dalam parameter output MiniportDeviceContext dari fungsi DxgkDdiAddDevice .

[in/out] pAcquireSwizzlingRange

Penunjuk ke struktur DXGKARG_ACQUIRESWIZZLINGRANGE yang berisi informasi untuk membuat alokasi dapat diakses melalui bukaan CPU.

Menampilkan nilai

DxgkDdiAcquireSwizzlingRange mengembalikan salah satu nilai berikut:

Menampilkan kode Deskripsi
STATUS_SUCCESS DxgkDdiAcquireSwizzlingRange berhasil membuat alokasi dapat diakses.
STATUS_GRAPHICS_UNSWIZZLING_APERTURE_UNSUPPORTED DxgkDdiAcquireSwizzlingRange tidak dapat memprogram rentang yang menggelegak untuk alokasi. Manajer memori video gagal memperoleh rentang yang menggeser tanpa melakukan upaya lebih lanjut.
STATUS_GRAPHICS_UNSWIZZLING_APERTURE_UNAVAILABLE DxgkDdiAcquireSwizzlingRange tidak dapat memprogram rentang yang menggelegak untuk alokasi karena rentang menggeser lain saat ini menggunakan sumber daya unit pemrosesan grafis (GPU) yang diperlukan. Manajer memori video mencoba merilis rentang yang saat ini sedang digunakan dan kemudian mencoba mengatur rentang yang menggeser lagi.

Keterangan

Fungsi DxgkDdiAcquireSwizzlingRange dipanggil setelah driver tampilan mode pengguna meminta alamat virtual yang mereferensikan bit alokasi (yaitu, setelah driver tampilan mode pengguna memanggil fungsi pfnLockCb dengan bendera bit-field AcquireAperture yang diatur dalam anggota Bendera struktur D3DDDICB_LOCK dan sementara alokasi saat ini terletak di segmen memori yang dapat diakses CPU). Jika bendera bidang bit AcquireAperture tidak diatur dalam panggilan ke pfnLockCb, DxgkDdiAcquireSwizzlingRange tidak dipanggil, dan alokasi harus dalam format yang dapat diproses oleh driver tampilan mode pengguna atau aplikasi.

Ketika DxgkDdiAcquireSwizzlingRange dipanggil, driver miniport tampilan harus membuat alokasi yang ditentukan (yaitu, anggota hAllocation dari struktur DXGKARG_ACQUIRESWIZZLINGRANGE yang ditunjuk oleh parameter pAcquireSwizzlingRange ) yang dapat diakses melalui bukaan CPU untuk segmen yang ditentukan (yaitu, anggota SegmentId dari DXGKARG_ACQUIRESWIZZLINGRANGE). Alokasi harus muncul persis seperti yang muncul di memori komputer setelah pengeluaran yang tidak berdengung.

Tidak semua permintaan oleh driver tampilan mode pengguna dapat diakses oleh driver miniport tampilan. Rentang menggeser yang diperoleh manajer memori video di-cache berdasarkan alokasi yang terkait dengannya dan data privat yang ditentukan. Pada permintaan pertama oleh driver tampilan mode pengguna untuk mengakses alokasi, fungsi DxgkDdiAcquireSwizzlingRange driver miniport dipanggil untuk membuat alokasi dapat diakses. Pada permintaan berikutnya dengan data privat yang cocok, pemetaan penyiapan sebelumnya digunakan untuk mengakses alokasi.

Manajer memori video memanggil fungsi DxgkDdiReleaseSwizzlingRange driver miniport tampilan untuk melepaskan rentang yang menggeser ketika alokasi dikeluarkan atau dihancurkan, atau ketika alokasi lain memerlukan aperture. Alokasi dapat dikaitkan dengan sejumlah rentang yang menggeser (misalnya, satu bukaan per tingkat MIP).

Jumlah rentang menggeser yang didukung adaptor diekspos oleh driver di anggota NumberOfSwizzlingRanges dari struktur DXGK_DRIVERCAPS ketika fungsi DxgkDdiQueryAdapterInfo driver dipanggil. Semua rentang sama (yaitu, rentang apa pun dapat unswizzle atau sampai semua jenis menggeser atau ubin). Manajer memori video mengalihkan rentang menggeser yang tersedia di antara semua aplikasi yang membutuhkannya.

Driver harus menggunakan I/O yang dipetakan memori (MMIO) untuk mengatur rentang yang menggeser. Akses rentang berdenyut ini tidak boleh mengganggu eksekusi GPU (yaitu, GPU tidak boleh menganggur ketika DxgkDdiAcquireSwizzlingRange dipanggil).

Semua panggilan ke DxgkDdiAcquireSwizzlingRange diserialisasikan di antara mereka sendiri tetapi tidak dengan fungsi DDI lainnya.

Jika GPU mendukung rentang menggeser yang mengalihkan akses CPU ke segmen memori atau memori sistem yang tidak dapat diakses CPU, driver tampilan mode pengguna dapat mengatur kombinasi bendera bit-field AcquireAperture dan UseAlternateVA di anggota Bendera struktur D3DDDICB_LOCK dalam panggilan ke fungsi pfnLockCb untuk mengunci alokasi. Dalam situasi ini, manajer memori video memanggil fungsi DxgkDdiAcquireSwizzlingRange driver miniport tampilan untuk memperoleh rentang yang menggeser untuk alokasi meskipun alokasi terletak di segmen memori yang tidak dapat diakses CPU atau segmen aperture. Rentang berdenyut dikaitkan dengan beberapa sumber daya GPU (misalnya, rentang bukaan PCI) yang dikelola driver dan tidak dapat diakses atau diperkirakan oleh manajer memori video.

Panggilan ke DxgkDdiAcquireSwizzlingRange untuk memperoleh rentang yang menggelepar mungkin gagal karena sumber daya yang dikelola driver habis. Meskipun rentang berdenyut itu sendiri gratis, mungkin tidak dapat digunakan karena sumber daya yang hilang. Driver dapat menunjukkan bahwa rentang berdenyut tidak tersedia untuk manajer memori video dengan mengembalikan STATUS_GRAPHICS_UNSWIZZLING_APERTURE_UNAVAILABLE dari DxgkDdiAcquireSwizzlingRange. Manajer memori video berikutnya mencoba merilis rentang yang menggeliat yang saat ini sedang digunakan dan kemudian memanggil fungsi DxgkDdiAcquireSwizzlingRange driver lagi untuk mengatur rentang yang menggeser baru. Jika semua rentang yang menggeser dirilis dan driver masih gagal dengan STATUS_GRAPHICS_UNSWIZZLING_APERTURE_UNAVAILABLE, manajer memori video gagal memperoleh rentang yang menggeser untuk alokasi.

DxgkDdiAcquireSwizzlingRange harus dibuat dapat diperbaharui.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows Vista
Target Platform Desktop
Header d3dkmddi.h
IRQL PASSIVE_LEVEL

Lihat juga

D3DDDICB_LOCK

DXGKARG_ACQUIRESWIZZLINGRANGE

DXGK_DRIVERCAPS

DxgkDdiAddDevice

DxgkDdiCreateAllocation

DxgkDdiQueryAdapterInfo

DxgkDdiReleaseSwizzlingRange

pfnLockCb