DirectX 12 D3D12 Mendapat Fitur Baru Yang Memberikan Kontrol Lebih Besar Atas Alokasi Memori Ke GPU Atau CPU Secara Dinamis
Dalam pembaruan besar yang akan datang untuk Windows 10 OS, DirectX12, dan lebih khusus lagi, Direct3D (D3D12), tidak hanya akan mendapatkan satu tetapi bendera baru yang akan mengubah cara sumber daya memori dialokasikan. Tampaknya Microsoft benar-benar prihatin tentang cara memori dan daya pemrosesan diminta dan dialokasikan ke aplikasi, yang sering kali dapat menyebabkan kemacetan. Secara kebetulan, tanda baru ini tidak akan langsung memengaruhi memori, tetapi akan memengaruhi cara pengalokasian dan pengelolaannya.
Microsoft telah secara aktif mengembangkan iterasi terbaru dari platform DirectX, yang telah lama menjadi standar terdepan untuk permainan desktop. Versi terbaru Microsoft DirectX 12 telah mendapatkan beberapa fitur baru belakangan ini. Baru-baru ini kami meliput fitur baru yang paling menonjol dan penting untuk DirectX 12 yang secara signifikan akan menguntungkan pengembang dan pengguna akhir. Minggu ini, Microsoft mengindikasikan pembaruan besar berikutnya untuk Windows 10 harus menyertakan dua bendera baru untuk DirectX12 Direct3D. Menariknya, pengembang yang ingin menjelajahi hal yang sama hari ini, hanya perlu mengunduh dan menginstal versi Windows 10 Insider Preview terbaru dan SDK Preview Build untuk Windows 10 (20H1) dari Program Windows Insider.
Windows 10 DirectX 12 Direct3D Untuk Mendapatkan Dua Bendera Baru Untuk Alokasi Memori Dinamis Antara CPU dan GPU:
Dalam pembaruan mendatang untuk Windows 10, D3D12 akan menambahkan dua bendera baru ke pencacahan D3D12_HEAP_FLAG. Kebetulan, flag baru ini adalah properti "tidak permanen". Sederhananya, ini berarti bahwa flag baru tidak akan secara langsung memengaruhi memori yang dihasilkan itu sendiri. Sebaliknya, tanda baru akan memengaruhi cara memori dialokasikan. Selain itu, bendera ini tidak tercermin dari ID3D12Heap :: GetDesc atau ID3D12Resource :: GetHeapProperties.
D3D12_HEAP_FLAG_CREATE_NOT_RESIDENT:
Dalam iterasinya saat ini, setiap kali developer meminta D3D untuk mengalokasikan heap atau resource yang dikomit, hal terakhir yang terjadi sebelum dia mendapatkan kembali objek tersebut adalah memori dibuat residen. Ini sangat mirip dengan ID3D12Device :: MakeResident sedang dilakukan. Tidak perlu ditambahkan, proses seperti itu langsung menghadirkan dua masalah:
- Desain memblokir CPU Thread hingga memori siap digunakan sepenuhnya. Ini bukanlah situasi yang ideal atau diinginkan
- Proses ini juga akan memungkinkan pengembang untuk melakukan overcommit memori, melebihi apa yang anggaran proses saat ini tunjukkan yang harus dia gunakan.
Baru ditambahkan ID3D12Device3 :: EnqueueMakeResident memungkinkan aplikasi membuat pilihan yang berbeda. Aplikasi dapat menunggu residensi menggunakan GPU daripada CPU atau meminta operasi residensi gagal daripada melebihi anggaran. Alokasi memori dalam kondisi non-residen menghasilkan pemberian manfaat untuk penggunaan pertama sumber daya.
D3D12_HEAP_FLAG_CREATE_NOT_ZEROED:
Bendera ini mencoba untuk mengatasi konten nol yang menerima sumber daya dan tumpukan yang baru dibuat oleh D3D. Microsoft berusaha untuk mengoptimalkan proses ini dengan mengaktifkan lebih banyak memori penggunaan ulang yang tidak pernah meninggalkan batas-batas proses tertentu tanpa membidik. Namun, ini tidak berfungsi dengan baik dan memaksa para insinyur Microsoft untuk kembali hanya mengembalikan memori nol. Tak perlu disebutkan, cara ini cukup membosankan karena pengelola memori perlu secara eksplisit menulis nol ke dalam memori sebelum mengembalikannya ke pengembang untuk digunakan kembali.
Sebagai cara untuk mengoptimalkan proses, pengembang diberi kemampuan untuk menyisih dari proses yang membosankan hanya dengan menentukan tanda baru selama alokasi heap / sumber daya. Pada dasarnya, realokasi dinamis dapat meminimalkan proses zeroing wajib sepanjang waktu, dan mengalokasikan beberapa memori bebas yang digunakan proses pengembang tanpa memaksanya melalui proses nol ulang.
Microsoft telah menambahkan tanda baru ini dan tidak memerlukan driver baru. Apalagi tidak ada yang berdedikasi CheckFeatureSupport pilihan untuk ini. Pada dasarnya, tanda baru ini tersedia kapan pun ID3D12Device8 terekspos, atau pemeriksaan D3D12_FEATURE_D3D12_OPTIONS7 berhasil. Semua permintaan flag baru adalah bahwa pengembang harus menjalankan proses pada versi D3D12 yang memahaminya.