Gambaran Umum Shader Komputasi

Shader komputasi adalah tahap shader yang dapat diprogram yang memperluas Microsoft Direct3D 11 di luar pemrograman grafis. Teknologi shader komputasi juga dikenal sebagai teknologi DirectCompute.

Seperti shader lain yang dapat diprogram (bayangan verteks dan geometri misalnya), shader komputasi dirancang dan diimplementasikan dengan HLSL tetapi itu hanya tentang di mana kesamaan berakhir. Shader komputasi menyediakan komputasi tujuan umum berkecepatan tinggi dan memanfaatkan sejumlah besar prosesor paralel pada unit pemrosesan grafis (GPU). Shader komputasi menyediakan fitur berbagi memori dan sinkronisasi utas untuk memungkinkan metode pemrograman paralel yang lebih efektif. Anda memanggil metode ID3D11DeviceContext::D ispatch atau ID3D11DeviceContext::D ispatchIndirect untuk menjalankan perintah dalam shader komputasi. Shader komputasi dapat berjalan pada banyak utas secara paralel.

Menggunakan Compute Shader pada Perangkat Keras Direct3D 10.x

Shader komputasi di Microsoft Direct3D 10 juga dikenal sebagai DirectCompute 4.x.

Jika Anda menggunakan DIRECT3D 11 API dan driver yang diperbarui, perangkat keras Direct3D tingkat fitur 10 dan 10.1 secara opsional dapat mendukung bentuk terbatas DirectCompute yang menggunakan profil cs_4_0 dan cs_4_1. Saat Anda menggunakan DirectCompute pada perangkat keras ini, ingatlah batasan berikut:

  • Jumlah maksimum utas dibatasi hingga D3D11_CS_4_X_THREAD_GROUP_MAX_THREADS_PER_GROUP (768) per grup.
  • Dimensi X dan Y numthreads terbatas pada D3D11_CS_4_X_THREAD_GROUP_MAX_X (768) dan D3D11_CS_4_X_THREAD_GROUP_MAX_Y (768).
  • Dimensi Z numthreads dibatasi hingga 1.
  • Dimensi pengiriman Z terbatas pada D3D11_CS_4_X_DISPATCH_MAX_THREAD_GROUPS_IN_Z_DIMENSION (1).
  • Hanya satu tampilan akses tidak berurutan yang dapat terikat ke shader (D3D11_CS_4_X_UAV_REGISTER_COUNT adalah 1).
  • Hanya RWStructuredBuffers dan RWByteAddressBuffers yang tersedia sebagai tampilan akses yang tidak diurutkan.
  • Utas hanya dapat mengakses wilayahnya sendiri dalam memori yang dibagi grup untuk ditulis, meskipun dapat dibaca dari lokasi mana pun.
  • SV_GroupIndex atau SV_GroupThreadID harus digunakan saat mengakses memori groupshared untuk menulis.
  • Memori groupshared dibatasi hingga 16KB per grup.
  • Satu utas dibatasi hingga wilayah 256 byte memori yang dibagi grup untuk menulis.
  • Tidak ada instruksi atom yang tersedia.
  • Tidak ada nilai presisi ganda yang tersedia.

Menggunakan Compute Shader pada Perangkat Keras Direct3D 11.x

Shader komputasi di Direct3D 11 juga dikenal sebagai DirectCompute 5.0.

Saat Anda menggunakan DirectCompute dengan profil cs_5_0, ingatlah item berikut:

  • Jumlah maksimum utas dibatasi hingga D3D11_CS_THREAD_GROUP_MAX_THREADS_PER_GROUP (1024) per grup.
  • Dimensi X dan Y numthreads terbatas pada D3D11_CS_THREAD_GROUP_MAX_X (1024) dan D3D11_CS_THREAD_GROUP_MAX_Y (1024).
  • Dimensi Z numthreads terbatas pada D3D11_CS_THREAD_GROUP_MAX_Z (64).
  • Dimensi maksimum pengiriman terbatas pada D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION (65535).
  • Jumlah maksimum tampilan akses tidak berurutan yang dapat terikat ke shader adalah D3D11_PS_CS_UAV_REGISTER_COUNT (8).
  • Mendukung RWStructuredBuffers, RWByteAddressBuffers, dan tampilan akses tanpa urutan yang ditik (RWTexture1D, RWTexture2D, RWTexture3D, dan sebagainya).
  • Instruksi atom tersedia.
  • Dukungan presisi ganda mungkin tersedia. Untuk informasi tentang cara menentukan apakah presisi ganda tersedia, lihat D3D11_FEATURE_DOUBLES.

Di bagian ini

Topik Deskripsi
Jenis Sumber Daya Baru
Beberapa jenis sumber daya baru telah ditambahkan di Direct3D 11.
Mengakses Sumber Daya
Ada beberapa cara untuk mengakses sumber daya.
Fungsi Atomik
Untuk mengakses jenis sumber daya baru atau memori bersama, gunakan fungsi intrinsik yang saling diblokir. Fungsi yang saling diblokir dijamin beroperasi secara atomik. Artinya, mereka dijamin akan terjadi dalam urutan yang diprogram. Bagian ini mencantumkan fungsi atomik.

Alur Grafik

Cara: Membuat Shader Komputasi