Bagikan melalui


Permukaan yang dapat ditampilkan

Sebelum permukaan yang dapat ditampilkan, presentasi umumnya dilakukan dengan membuat rantai pertukaran buffer dengan properti yang identik, yang kemudian diputar (dibalik) melalui berulang kali, agar, disajikan ke layar. Jika Anda ingin mengubah properti buffer untuk disajikan, maka Anda harus menghancurkan rantai pertukaran itu, dan membuat yang baru dengan semua buffer diperbarui ke properti baru yang sama.

Fitur permukaan yang dapat ditampilkan menambahkan perilaku sistem operasi (OS) baru yang menghilangkan pembatasan tersebut (tetapi memerlukan dukungan driver untuk berperilaku dengan benar). Secara khusus, fitur ini berarti bahwa buffer yang disajikan mungkin memiliki properti yang bervariasi, dan Anda dapat menyajikannya dalam urutan apa pun.

Permukaan yang dapat ditampilkan (dan fitur presentasi fleksibel), dan API mereka, diperkenalkan di Windows 11 (Build 10.0.22000.194). Fungsionalitas diaktifkan pada driver yang didukung, dimulai dengan driver WDDM 3.0, memungkinkan skenario presentasi yang ditingkatkan untuk Direct3D 11.

Periksa dukungan, dan gunakan permukaan yang dapat ditampilkan

Untuk menentukan apakah fitur permukaan yang dapat ditampilkan tersedia pada sistem, panggil ID3D11Device::CheckFeatureSupport. Teruskan D3D11_FEATURE::D 3D11_FEATURE_DISPLAYABLE, dan terima struktur D3D11_FEATURE_DATA_DISPLAYABLE.

ID3D11Device::CreateTexture2D API mendukung D3D11_RESOURCE_MISC_FLAG::D 3D11_RESOURCE_MISC_SHARED_DISPLAYABLE, yang dapat Anda gunakan di D3D11_TEXTURE2D_DESC::MiscFlags anggota struktur yang Anda teruskan ke CreateTexture2D dalam parameter pDesc.

Tekstur dengan D3D11_RESOURCE_MISC_SHARED_DISPLAYABLE dibatasi untuk ukuran array 1, dan hingga tingkat 1 mip.

Saat Anda menggunakan bendera D3D11_RESOURCE_MISC_SHARED_DISPLAYABLE pada tekstur, Anda dapat menampilkan tekstur pada output aktif apa pun (termasuk beberapa output secara bersamaan). Tergantung pada skenarionya, tekstur mungkin akhirnya dikonsumsi oleh komposit (DWM), dipindai, atau terikat ke berbagai bagian alur—berpotensi semua secara bersamaan. Misalnya, tekstur pengambilan dari kamera mungkin ditampilkan pada dua layar, dan gambar mini yang ditampilkan pada layar ketiga, semuanya pada saat yang sama—dan semuanya dari alokasi yang sama tanpa salinan tambahan. Dalam kasus di mana permukaan yang dapat ditampilkan akan dipindai pada beberapa layar, OS akan mengoordinasikan pengumpulan flip selesai dari output yang terlibat sebelum memperingatkan aplikasi Anda bahwa permukaan dilepaskan kembali ke sana—tidak ada koordinasi penyelesaian flip yang diperlukan dari driver.

Tekstur seperti yang dijelaskan di atas harus dapat ditampilkan untuk penggunaan presentasi yang fleksibel. Tekstur ini tidak diperlukan untuk memiliki properti yang sama—misalnya, format dan ukuran dapat berbeda, dan tekstur ini harus dapat ditampilkan dalam urutan arbitrer ("presentasi di luar urutan"). Presentasi akan terjadi menggunakan DDI Present1 yang ada, dengan pola panggilan yang ada. Misalnya, pertimbangkan kumpulan enam buffer, tiga yaitu 720p (A, B, dan C) dan tiga yang 4K (D, E, dan F): urutan presentasi yang valid bisa menjadi A-E-C-B-F-E-D-C>>>>>>>.

Format

Bendera D3D11_RESOURCE_MISC_SHARED_DISPLAYABLE didukung untuk format berikut di Direct3D 11:

Driver mungkin juga mendukung format berikut:

  • DXGI_FORMAT_P010

Anda dapat menggunakan contoh kode berikut untuk memeriksa dukungan permukaan yang dapat ditampilkan untuk format opsional di atas. Contohnya melibatkan panggilan ID3D11Device::CheckFeatureSupport, dan memeriksa D3D11_FEATURE_FORMAT_SUPPORT2.

D3D11_FEATURE_DATA_FORMAT_SUPPORT2 FormatSupport2;
FormatSupport2.InFormat = DXGI_FORMAT_P010;
if (SUCCEEDED (hr = GetDevice()->CheckFeatureSupport(D3D11_FEATURE_FORMAT_SUPPORT2, &FormatSupport2, sizeof(FormatSupport2))))
{
    if (FormatSupport2.OutFormatSupport2 & D3D11_FORMAT_SUPPORT2_DISPLAYABLE)
    {
        // optional displayable format is supported
    }
}

Bendera

Format yang dapat dibagikan umumnya sudah mendukung bendera ikatan berikut: D3D11_BIND_FLAG::D 3D11_BIND_SHADER_RESOURCE, D3D11_BIND_UNORDERED_ACCESS, D3D11_BIND_RENDER_TARGET, dan D3D11_BIND_DECODER.

Penggunaan sumber daya bersama yang didukung yang ada dengan bendera D3D11_BIND_VIDEO_ENCODER diperluas untuk juga mendukung bendera D3D11_RESOURCE_MISC_SHARED_DISPLAYABLE ditambahkan dalam kasus ini. Pembatasan yang ada terkait penggunaan sumber daya bersama dengan D3D11_BIND_VIDEO_ENCODER dipertahankan.

D3D11_BIND_VIDEO_ENCODER dan D3D11_BIND_SHADER_RESOURCE sebelumnya saling eksklusif, kecuali jika dikombinasikan dengan bendera ikatan tertentu lainnya. Pengecualian telah diperluas untuk memungkinkan D3D11_BIND_VIDEO_ENCODER dan D3D11_BIND_SHADER_RESOURCE digunakan bersama-sama saat D3D11_RESOURCE_MISC_SHARED_DISPLAYABLE digunakan.

Bendera D3D11_RESOURCE_MISC_HW_PROTECTED didukung dengan bendera D3D11_RESOURCE_MISC_SHARED_DISPLAYABLE .