Bagikan melalui


IDXGIDevice4::Metode OfferResources1 (dxgi1_5.h)

Memungkinkan sistem operasi untuk membebaskan memori video sumber daya, termasuk membuang konten dan membatalkan penerapan memori.

Sintaks

HRESULT OfferResources1(
  [in] UINT                         NumResources,
  [in] IDXGIResource                * const *ppResources,
  [in] DXGI_OFFER_RESOURCE_PRIORITY Priority,
  [in] UINT                         Flags
);

Parameter

[in] NumResources

Jenis: UINT

Jumlah sumber daya dalam array argumen ppResources .

[in] ppResources

Jenis: IDXGIResource*

Array pointer ke antarmuka IDXGIResource untuk ditawarkan sumber daya.

[in] Priority

Jenis: DXGI_OFFER_RESOURCE_PRIORITY

Nilai jenis DXGI_OFFER_RESOURCE_PRIORITY yang menunjukkan seberapa berharga data.

[in] Flags

Jenis: UINT

Menentukan DXGI_OFFER_RESOURCE_FLAGS.

Menampilkan nilai

Jenis: HRESULT

Metode ini mengembalikan kode keberhasilan atau kesalahan HRESULT, yang dapat menyertakan E_INVALIDARG jika sumber daya dalam array, atau prioritas, tidak valid.

Keterangan

OfferResources1 (ekstensi IDXGIDevice2::OfferResources API) asli memungkinkan aplikasi berbasis D3D untuk memungkinkan pembatalan penerapan penyimpanan backing alokasi untuk mengurangi penerapan sistem dalam kondisi memori rendah. Alokasi yang tidak diterapkan tidak dapat digunakan kembali, jadi memilih ikut bendera DXGI_OFFER_RESOURCE_FLAG_ALLOW_DECOMMIT baru berarti hasil klaim ulang baru harus ditangani dengan benar. Lihat deskripsi bendera di DXGI_RECLAIM_RESOURCE_RESULTS dan Contoh di bawah ini.

OfferResources1 dan ReclaimResources1tidak dapat digunakan secara bergantian dengan OfferResources dan ReclaimResources.

Nilai prioritas yang ditentukan parameter Prioritas menjelaskan seberapa berharga pemanggil mempertimbangkan konten. Sistem operasi menggunakan nilai prioritas untuk membuang sumber daya dalam urutan prioritas. Sistem operasi membuang sumber daya yang ditawarkan dengan prioritas rendah sebelum membuang sumber daya yang ditawarkan dengan prioritas lebih tinggi.

Jika Anda memanggil OfferResources1 untuk menawarkan sumber daya saat sumber daya terikat ke alur, sumber daya tidak terikat. Anda tidak dapat memanggil OfferResources1 pada sumber daya yang dipetakan. Setelah Anda menawarkan sumber daya, sumber daya tidak dapat dipetakan atau terikat ke alur hingga Anda memanggil metode ReclaimResources1 untuk mengklaim kembali sumber daya. Anda tidak dapat memanggil OfferResources1 untuk menawarkan sumber daya yang tidak dapat diubah.

Untuk menawarkan sumber daya bersama, panggil OfferResources1 hanya di salah satu perangkat berbagi. Untuk memastikan akses eksklusif ke sumber daya, Anda harus menggunakan objek IDXGIKeyedMutex lalu memanggil OfferResources1 hanya saat Anda menahan mutex. Bahkan, Anda tidak dapat menawarkan sumber daya bersama kecuali Anda menggunakan IDXGIKeyedMutex karena menawarkan sumber daya bersama tanpa menggunakan IDXGIKeyedMutex tidak didukung.

Driver tampilan mode pengguna mungkin tidak segera menawarkan sumber daya yang Anda tentukan dalam panggilan ke OfferResources1. Driver dapat menunda penawaran mereka sampai panggilan berikutnya ke IDXGISwapChain::P resent, IDXGISwapChain1::P resent1, atau ID3D11DeviceContext::Flush.

Contoh

Aplikasi berbasis UWP sedang ditangguhkan ke latar belakang dan ingin menawarkan sumber daya grafisnya kembali ke sistem, jika aplikasi lain menginginkannya. Aplikasi akan mengklaim kembali sumber daya ini ketika dilanjutkan. Aplikasi ini juga menyadari bahwa total penerapan sistem yang tersedia kecil pada platform ini, dan bersedia untuk memungkinkan sumber dayanya dihapus dari penerapan sistem. Jika proses klaim kembali gagal karena sistem kehabisan memori, aplikasi menangani kondisi kesalahan.

struct Texture 
{ 
    UINT32 Width; 
    UINT32 Height; 
    UINT32 Mips; 
    ID3D11Texture2D* pResource; 
};  

void Application::OfferInterfaceResources(ID3D11Device* pD3D11Device) 
{ 
    CComPtr<IDXGIDevice4> pDXGIDevice; 
    ThrowIfFailed(pD3D11Device->QueryInterface(&pDXGIDevice)); 

    for(Texture& t : m_Textures) 
    { 
        CComPtr<IDXGIResource> pDXGIResource; 
        ThrowIfFailed(t.pResource->QueryInterface(&pDXGIResource));   
        ThrowIfFailed(pDXGIDevice->OfferResources1(1, &pDXGIResource, DXGI_OFFER_RESOURCE_PRIORITY_NORMAL, 
											DXGI_OFFER_RESOURCE_FLAG_ALLOW_DECOMMIT)); 
    } 
} 

void Application::ReclaimInterfaceResources (ID3D11Device* pD3D11Device) 
{ 
    CComPtr<IDXGIDevice4> pDXGIDevice; 
    ThrowIfFailed(pD3D11Device->QueryInterface(&pDXGIDevice));  

    for(Texture& t : m_Textures) 
    { 
        CComPtr<IDXGIResource> pDXGIResource; 
        ThrowIfFailed(t.pResource->QueryInterface(&pDXGIResource));       

        DXGI_RECLAIM_RESOURCE_RESULTS Result; 
        ThrowIfFailed(pDXGIDevice->ReclaimResources1(1, &pDXGIResource, &Result)); 

        // If the surface lost its backing commitment, it must be recreated. 

        if(Result == DXGI_RECLAIM_RESOURCE_RESULT_NOT_COMMITTED) 
        { 
            t.pResource->Release(); 
            t.pResource = CreateTexture(t.Width, t.Height, t.Mips); 
        }  

        // If the surface lost its content (either because it was discarded, or recreated 
        // due to lost commitment), we must regenerate the content. 

        if(Result != DXGI_RECLAIM_RESOURCE_RESULT_OK) 
        { 
            PopulateContent(t); 
        } 
    } 
} 

Persyaratan

   
Target Platform Windows
Header dxgi1_5.h
Pustaka Dxgi.lib
DLL Dxgi.dll

Lihat juga

DXGI_RECLAIM_RESOURCE_RESULTS

IDXGIDevice4