Jenis Sumber Daya Baru

Beberapa jenis sumber daya baru telah ditambahkan di Direct3D 11.

Buffer dan Tekstur Baca/Tulis

Sumber daya model shader 4 hanya dibaca. Model shader 5 mengimplementasikan sekumpulan sumber daya baca/tulis baru yang sesuai:

Sumber daya ini memerlukan variabel sumber daya untuk mengakses memori (melalui pengindeksan) karena tidak ada metode untuk mengakses memori secara langsung. Variabel sumber daya dapat digunakan di sisi kiri dan kanan persamaan; jika digunakan di sisi kanan, jenis templat harus berupa komponen tunggal (float, int, atau uint).

Buffer Terstruktur

Buffer terstruktur adalah buffer yang berisi elemen dengan ukuran yang sama. Gunakan struktur dengan satu atau beberapa jenis anggota untuk menentukan elemen. Berikut adalah struktur dengan tiga anggota.

struct MyStruct
{
    float4 Color;
    float4 Normal;
    bool isAwesome;
};

Gunakan struktur ini untuk mendeklarasikan buffer terstruktur seperti ini:

StructuredBuffer<MyStruct> mySB;

Selain pengindeksan, buffer terstruktur mendukung akses satu anggota seperti ini:

float4 myColor = mySb[27].Color;

Gunakan jenis objek berikut untuk mengakses buffer terstruktur:

Fungsi atomik yang mengimplementasikan operasi yang saling di-interlock diizinkan pada elemen int dan uint dalam RWStructuredBuffer.

Buffer Alamat Byte

Buffer alamat byte adalah buffer yang kontennya dapat diatasi oleh offset byte. Biasanya, konten buffer diindeks per elemen menggunakan langkah untuk setiap elemen (S) dan nomor elemen (N) seperti yang diberikan oleh S*N. Buffer alamat byte, yang juga dapat disebut buffer mentah, menggunakan offset nilai byte dari awal buffer untuk mengakses data. Nilai byte harus kelipatan empat sehingga sejajar dengan DWORD. Jika ada nilai lain yang disediakan, perilaku tidak ditentukan.

Model shader 5 memperkenalkan objek untuk mengakses buffer alamat byte baca-saja serta buffer alamat byte baca-tulis. Isi buffer alamat byte dirancang untuk menjadi bilangan bulat yang tidak ditandatangani 32-bit; jika nilai dalam buffer bukan bilangan bulat yang tidak ditandatangani, gunakan fungsi seperti asfloat untuk membacanya.

Buffer atau Tekstur Akses Tidak Berurut

Sumber daya akses yang tidak berurut (yang mencakup buffer, tekstur, dan array tekstur - tanpa multisampling), memungkinkan akses baca/tulis yang tidak diurutkan secara sementara dari beberapa utas. Ini berarti bahwa jenis sumber daya ini dapat dibaca/ditulis secara bersamaan oleh beberapa utas tanpa menghasilkan konflik memori melalui penggunaan Atomic Functions.

Buat buffer atau tekstur akses yang tidak diurutkan dengan memanggil fungsi seperti ID3D11Device::CreateBuffer atau ID3D11Device::CreateTexture2D dan meneruskan bendera D3D11_BIND_UNORDERED_ACCESS dari enumerasi D3D11_BIND_FLAG .

Sumber daya akses yang tidak berurutan hanya dapat terikat ke shader piksel dan shader komputasi. Selama eksekusi, shader piksel atau shader komputasi yang berjalan secara paralel memiliki sumber daya akses yang tidak berurutan yang sama yang terikat.

Menambahkan dan Mengonsumsi Buffer

Buffer tambahkan dan konsumsi adalah jenis khusus dari sumber daya yang tidak berurut yang mendukung penambahan dan penghapusan nilai dari akhir buffer yang mirip dengan cara kerja tumpukan.

Buffer tambahan dan konsumsi harus buffer terstruktur:

Gunakan sumber daya ini melalui metodenya, sumber daya ini tidak menggunakan variabel sumber daya.

Gambaran Umum Shader Komputasi