Fitur Direct3D 11

Panduan pemrograman berisi informasi tentang cara menggunakan alur Direct3D 11 yang dapat diprogram untuk membuat grafik 3D realtime untuk game, dan untuk aplikasi ilmiah dan desktop.

Shader Komputasi

Shader komputasi adalah shader yang dapat diprogram yang dirancang untuk pemrosesan paralel data tujuan umum. Dengan kata lain, shader komputasi memungkinkan GPU digunakan sebagai prosesor paralel tujuan umum. Shader komputasi mirip dengan shader alur lain yang dapat diprogram (seperti vertex, piksel, geometri) dalam cara mengakses input dan output. Teknologi shader komputasi juga dikenal sebagai teknologi DirectCompute. Shader komputasi diintegrasikan ke dalam Direct3D dan dapat diakses melalui perangkat Direct3D. Ini dapat langsung berbagi sumber daya memori dengan shader grafis dengan menggunakan perangkat Direct3D. Namun, itu tidak terhubung langsung ke tahap shader lainnya.

Shader komputasi dirancang untuk aplikasi pasar massal yang melakukan komputasi dengan tarif interaktif, ketika biaya transisi antara API (dan tumpukan perangkat lunak terkait) dan CPU akan mengonsumsi terlalu banyak overhead.

Shader komputasi memiliki serangkaian statusnya sendiri. Shader komputasi tidak selalu memiliki pemetaan 1-1 paksa ke rekaman input (seperti shader vertex) atau rekaman output (seperti yang dilakukan oleh shader piksel). Beberapa fitur shader grafis didukung, tetapi yang lain telah dihapus sehingga fitur khusus shader komputasi baru dapat ditambahkan.

Untuk mendukung fitur khusus shader komputasi, beberapa jenis sumber daya baru sekarang tersedia, seperti buffer baca/tulis, tekstur, dan buffer terstruktur.

Lihat Gambaran Umum Compute Shader untuk informasi tambahan.

Penautan Shader Dinamis

Sistem rendering harus menangani kompleksitas yang signifikan ketika mereka mengelola shader, sekaligus memberikan kesempatan untuk mengoptimalkan kode shader. Ini menjadi tantangan yang lebih besar karena shader harus mendukung berbagai bahan yang berbeda dalam adegan yang dirender di berbagai konfigurasi perangkat keras. Untuk mengatasi tantangan ini, pengembang shader sering menggunakan salah satu dari dua pendekatan umum. Mereka telah menciptakan shader besar dan tujuan umum berfitur lengkap yang dapat digunakan oleh berbagai item adegan, yang memperdagangkan beberapa performa untuk fleksibilitas, atau menciptakan shader individual untuk setiap aliran geometri, jenis bahan, atau kombinasi jenis cahaya yang diperlukan.

Shader besar tujuan umum ini menangani tantangan ini dengan mengkompilasi ulang shader yang sama dengan definisi prapemrosedur yang berbeda, dan metode terakhir menggunakan kekuatan pengembang brute-force untuk mencapai hasil yang sama. Ledakan permutasi shader sering menjadi masalah bagi pengembang yang sekarang harus mengelola ribuan permutasi shader yang berbeda dalam permainan dan alur aset mereka.

Direct3D 11 dan model shader 5 memperkenalkan konstruksi bahasa berorientasi objek dan memberikan dukungan runtime penautan shader untuk membantu pengembang memprogram shader.

Lihat Penautan Dinamis untuk informasi tambahan.

Multiutas

Banyak aplikasi grafis terikat CPU karena aktivitas mahal seperti traversal grafik adegan, pengurutan objek, dan simulasi fisika. Karena sistem multicore menjadi semakin tersedia, Direct3D 11 telah meningkatkan dukungan multithreading-nya untuk memungkinkan interaksi yang efisien antara beberapa utas CPU dan API grafis D3D11.

Direct3D 11 memungkinkan fungsionalitas berikut untuk mendukung multithreading:

  • Objek bersamaan sekarang dibuat dalam utas terpisah — Membuat fungsi titik entri yang membuat objek utas bebas memungkinkan banyak utas untuk membuat objek secara bersamaan. Misalnya, aplikasi sekarang dapat mengkompilasi shader atau memuat tekstur pada satu utas saat merender di utas lain.
  • Daftar perintah dapat dibuat pada beberapa utas — Daftar perintah adalah urutan perintah grafis yang direkam. Dengan Direct3D 11, Anda dapat membuat daftar perintah pada beberapa utas CPU, yang memungkinkan traversal paralel database adegan atau pemrosesan fisika pada beberapa utas. Ini membebaskan utas penyajian utama untuk mengirimkan buffer perintah ke perangkat keras.

Lihat MultiThreading untuk informasi tambahan.

Tessellation

Tessellation dapat digunakan untuk merender satu model dengan berbagai tingkat detail. Pendekatan ini menghasilkan model yang lebih akurat secara geometris yang tergantung pada tingkat detail yang diperlukan untuk adegan. Gunakan tessellation dalam adegan di mana tingkat detail memungkinkan model geometri yang lebih rendah, yang mengurangi permintaan bandwidth memori yang dikonsumsi selama penyajian.

Dalam Direct3D, tesselulasi diimplementasikan pada GPU untuk menghitung permukaan lengkung yang lebih halus dari patch input kasar (kurang rinci). Setiap wajah patch (quad atau segitiga) dibagi menjadi wajah segitiga yang lebih kecil yang lebih memperkirakan permukaan yang Anda inginkan.

Untuk informasi tentang menerapkan tesselulasi dalam alur grafik, lihat Gambaran Umum Tessellation.

Daftar Lengkap Fitur

Ini adalah daftar lengkap fitur di Direct3D 11.

  • Anda dapat menjalankan Direct3D 11 pada perangkat keras tingkat bawah dengan menspesifikasikan tingkat fitur saat membuat perangkat.

  • Anda bisa melakukan tessellation (lihat Gambaran Umum Tessellation) dengan menggunakan jenis shader berikut:

    • Shader Lambung
    • Domain Shader
  • Direct3D 11 mendukung multithreading (lihat MultiThreading)

    • Pembuatan sumber daya/shader/objek multithread
    • Pembuatan daftar Tampilan Multithreaded
  • Direct3D 11 memperluas shader dengan fitur berikut (lihat Model Shader 5)

    • Sumber daya yang dapat diatasi - tekstur, buffer konstanta, dan sampler

    • Jenis sumber daya tambahan, seperti buffer baca/tulis dan tekstur (lihat Jenis Sumber Daya Baru).

    • Subrutin

    • Shader komputasi (lihat Gambaran Umum Compute Shader) - Shader yang mempercepat komputasi dengan membagi ruang masalah antara beberapa utas perangkat lunak atau grup utas, dan berbagi data di antara shader mendaftar untuk secara signifikan mengurangi jumlah data yang diperlukan untuk dimasukkan ke dalam shader. Algoritma yang dapat ditingkatkan oleh shader komputasi secara signifikan termasuk pemrosesan pasca, animasi, fisika, dan kecerdasan buatan.

    • Shader geometri (lihat Fitur Shader Geometri)

      • Instancing - Memungkinkan shader geometri menghasilkan maksimum 1024 simpul, atau kombinasi instans dan simpul hingga 1024 (maksimum 32 instans masing-masing 32 simpul).
    • Bayangan piksel

      • Cakupan sebagai Input PS

      • Interpolasi Input yang Dapat Diprogram - Shader piksel dapat mengevaluasi atribut dalam piksel, di mana saja pada kisi multisample

      • Pengambilan sampel atribut sentroid harus mematuhi aturan berikut:

        • Jika semua sampel dalam primitif tercakup, atribut dievaluasi di pusat piksel terlepas dari apakah pola sampel memiliki lokasi sampel di pusat piksel.

        • Jika tidak, atribut dievaluasi pada sampel pertama yang tercakup, yaitu sampel dengan indeks terendah di antara semua indeks sampel. Dalam situasi ini, cakupan sampel ditentukan setelah menerapkan operasi AND logis ke cakupan dan status rasterizer mask sampel.

        • Jika tidak ada sampel yang tercakup (seperti pada piksel pembantu yang dijalankan dari batas primitif untuk mengisi stempel 2x2 piksel), atribut dievaluasi dengan salah satu cara berikut:

          • Jika status rasterizer mask sampel adalah subset sampel dalam piksel, sampel pertama yang dicakup oleh status rasterizer mask sampel adalah titik evaluasi.
          • Jika tidak, dalam kondisi masker sampel lengkap, pusat piksel adalah titik evaluasi.
  • Direct3D 11 memperluas tekstur (lihat Gambaran Umum Tekstur) dengan fitur berikut

    • Kumpulkan4

      • Dukungan untuk tekstur multi-komponen - tentukan saluran yang akan dimuat
      • Dukungan untuk offset yang dapat diprogram
    • Streaming

      • Klem tekstur untuk membatasi pramuat WDDM
    • Batas tekstur 16K

    • Memerlukan presisi subteks dan sub-mip 8-bit pada pemfilteran tekstur

    • Format kompresi tekstur baru (1 format LDR baru dan 1 format HDR baru)

  • Direct3D 11 mendukung oDepth konservatif - Algoritma ini memungkinkan shader piksel untuk membandingkan nilai kedalaman per piksel dari shader piksel dengan yang ada di rasterizer. Hasilnya memungkinkan operasi pemusnahan kedalaman awal sambil mempertahankan kemampuan untuk menghasilkan oDepth dari shader piksel.

  • Direct3D 11 mendukung memori besar

    • Izinkan sumber daya > 4GB
    • Menjaga indeks sumber daya 32bit, tetapi sumber daya lebih besar
  • Direct3D 11 mendukung peningkatan output aliran

    • Output Stream yang Dapat Diatasi
    • Tingkatkan jumlah output Stream menjadi 4
    • Ubah semua buffer output aliran menjadi multi-elemen
  • Direct3D 11 mendukung Shader Model 5 (lihat Model Shader 5)

    • Ganda dengan denorm
    • Hitung instruksi set bit
    • Temukan instruksi set bit pertama
    • Penanganan Carry/Overflow
    • Instruksi pembalikan bit untuk FFT
    • Intrinsik Pertukaran Bersyarkat
    • Resinfo pada buffer
    • Pengurangan timbal balik presisi
    • Instruksi konversi shader - fp16 ke fp32 dan sebaliknya
    • Buffer terstruktur, yang merupakan jenis buffer baru yang berisi elemen terstruktur.
  • Direct3D 11 mendukung tampilan kedalaman atau stensil baca-saja

    • Menonaktifkan penulisan ke bagian yang bersifat baca-saja, memungkinkan penggunaan tekstur sebagai input dan untuk pengurangan kedalaman
  • Direct3D 11 mendukung draw tidak langsung - Direct3D 10 mengimplementasikan DrawAuto, yang mengambil konten (dihasilkan oleh GPU) dan merendernya (pada GPU). Direct3D 11 menggeneralisasi DrawAuto sehingga dapat dipanggil oleh Compute Shader menggunakan DrawInstanced dan DrawIndexedInstanced.

  • Direct3D 11 mendukung fitur lain-lain

    • Viewport floating-point
    • Penjepitan mipmap per sumber daya
    • Bias Kedalaman - Algoritma ini memperbarui perilaku bias kedalaman, dengan menggunakan status rasterizer. Hasilnya menghilangkan skenario di mana bias yang dihitung dapat berupa NaN.
    • Batas sumber daya - Indeks sumber daya masih diperlukan = <32 bit, tetapi sumber daya bisa lebih besar dari 4 GB.
    • Presisi Rasterizer
    • Persyaratan MSAA
    • Penghitung Berkurang
    • Format 1-Bit dan Filter Teks Dihapus

Fitur yang Ditambahkan dalam Rilis Sebelumnya

Untuk daftar fitur yang ditambahkan dalam rilis sebelumnya, lihat topik berikut:

Apa yang baru di Direct3D 11