Perbedaan Utas antara Versi Direct3D

Banyak model pemrograman multi-utas menggunakan primitif sinkronisasi (seperti mutex) untuk membuat bagian penting dan mencegah kode diakses oleh lebih dari satu utas pada satu waktu.

Namun, metode pembuatan sumber daya antarmuka ID3D11Device dirancang untuk menjadi entrant ulang, tanpa memerlukan primitif sinkronisasi dan bagian penting. Akibatnya, metode pembuatan sumber daya efisien dan mudah digunakan.

Perbedaan antara Direct3D 11, 10 dan 9:
Direct3D 11 default sebagian besar aman untuk utas dan terus memungkinkan aplikasi untuk menolak menggunakan D3D11_CREATE_DEVICE_SINGLETHREADED. Jika aplikasi memilih tidak aman untuk utas, aplikasi harus mematuhi aturan utas. Runtime menyinkronkan utas atas nama aplikasi yang memungkinkan utas bersamaan berjalan. Bahkan, sinkronisasi di Direct3D 11 lebih efisien daripada menggunakan lapisan utas aman di Direct3D 10.
Direct3D 10 dapat mendukung eksekusi hanya satu utas pada satu waktu. Direct3D 10 sepenuhnya aman untuk utas dan memungkinkan aplikasi untuk menolak perilaku tersebut dengan menggunakan D3D10_CREATE_DEVICE_SINGLE_THREADED.
Direct3D 9 tidak default ke utas aman. Namun, saat Anda memanggil CreateDevice atau CreateDeviceEx untuk membuat perangkat, Anda dapat menentukan bendera D3DCREATE_MULTITHREADED untuk membuat utas API Direct3D 9 aman. Ini menyebabkan overhead sinkronisasi yang signifikan. Oleh karena itu, membuat utas API Direct3D 9 aman tidak disarankan karena performa dapat diturunkan.

MultiThreading