Sorgu
Direct3D 12'de sorgular, sorgu yığını olarak adlandırılan sorgu dizileri halinde gruplandırılır. Sorgu yığını, o yığınla kullanılabilecek geçerli sorgu türlerini tanımlayan bir türe sahiptir.
- Direct3D 11 ile Direct3D 12 Arasındaki Farkları
- Sorgu Yığınları
- sorgu yığınları oluşturma
- Sorgudan veri ayıklama
- İlgili konular
Direct3D 11'den Direct3D 12'ye Kadar Olan Sorgulardaki Farklar
Aşağıdaki sorgu türleri artık Direct3D 12'de mevcut değildir ve işlevleri diğer işlemlere dahil edilir:
- Olay sorguları- olay artık işlevsel olarak çitlerle işleniyor.
- Kopuk zaman damgası sorguları - GPU saatleri Direct3D 12'de kararlı bir duruma ayarlanabilir (Zamanlama bölümüne bakın). GPU zaman damgaları arasında boşta kalırsa GPU saat karşılaştırmaları anlamlı değildir (ayrık sorgu olarak bilinir). Kararlı güçle, farklı komut listelerinden verilen iki zaman damgası sorgusu güvenilir bir şekilde karşılaştırılabilir. Aynı komut listesindeki iki zaman damgası her zaman güvenilir bir şekilde karşılaştırılabilir.
- Stream çıkış istatistikleri sorguları - Direct3D 12'de tüm çıkış akışları için tek bir akış çıkışı (SO) taşma sorgusu yoktur. Uygulamaların birden çok tek akışlı sorgu yayınlaması ve ardından sonuçları ilişkilendirmesi gerekir.
- Stream çıkış istatistikleri koşulu ve tıkanıklık koşulu sorguları - sorgular (belleğe yazan) ve Koşul (bellekten okur) artık birleştirilmez ve bu nedenle bu sorgu türleri gerekli değildir.
Direct3D 12'ye yeni bir ikili okluzyon sorgu türü eklendi. Bu, yalnızca bir nesnenin tamamen dolu olup olmadığını (kaç pikselin tıkanmış olduğu yerine) dikkate alan, bunu cihaza gösteren ve sorguları daha verimli bir şekilde gerçekleştirebilecek olan yükseltme stratejilerine olanak tanır.
Sorgu Yığınları
Sorgular bir dizi türden (D3D12_QUERY_HEAP_TYPE) biri olabilir ve GPU'ya gönderilmeden önce sorgu yığınları halinde gruplandırılır.
Yeni bir sorgu türü D3D12_QUERY_TYPE_BINARY_OCCLUSION kullanılabilir ve ikili bir 0/1 sonucu döndürmesi dışında D3D12_QUERY_TYPE_OCCLUSION gibi davranır: 0, hiçbir örneğin derinlik ve kalıp testi geçirmediğini belirtir, 1 ise en az bir örneğin derinliği ve kalıp testini geçtiğini gösterir. Bu, gizli sorgularının derinlik/kalıp testiyle ilişkili GPU performans iyileştirmesini engellemesine olanak tanır.
Sorgu yığınları oluşturma
Sorgu yığınları oluşturmakla ilgili API'ler enum D3D12_QUERY_HEAP_TYPE, yapısı D3D12_QUERY_HEAP_DESCve yöntemi createQueryHeap.
Çekirdek çalışma zamanı, sorgu yığını türünün D3D12_HEAP_TYPE numaralandırmasının geçerli bir üyesi olduğunu ve sayının 0'dan büyük olduğunu doğrular.
Bir sorgu yığını içindeki tek tek her sorgu öğesi ayrı ayrı başlatılabilir ve durdurulabilir.
Sorgu yığınlarını kullanmaya yönelik API'ler enum D3D12_QUERY_TYPEve BeginQueryve EndQueryyöntemleridir.
D3D12_QUERY_TYPE_TIMESTAMP yalnızca EndQuery destekleyen tek sorgudur. Diğer tüm sorgu türleri beginqueryve endquery gerektirir.
Hata ayıklama katmanı aşağıdakileri doğrular:
- Zaman damgası sorgusu başlatmak geçersizdir; yalnızca sonlandırabilirsiniz
- Bir sorguyu sonlandırmadan (belirli bir öğe için) iki kez başlatmak geçersizdir. Hem başlangıç hem de bitiş gerektiren sorgular için, ilgili başlamadan önce (belirli bir öğe için) bir sorguyu sonlandırmak geçersizdir.
- BeginQuery'a geçirilen sorgu türü, endquerygeçirilen sorgu türüyle eşleşmelidir.
Çekirdek çalışma zamanı aşağıdakileri doğrular:
BeginQuery zaman damgası sorgusunda çağrılamaz.
Hem BeginQueryhem de EndQuery (zaman damgası hariç)destekleyen sorgu türleri için, belirli bir öğeye yönelik sorgunun komut listesi sınırlarına yayılmaması gerekir.
ElementIndex aralık içinde olmalıdır.
Sorgu türü, D3D12_QUERY_TYPE numaralandırmasının geçerli bir üyesidir.
Sorgu türü sorgu yığınıyla uyumlu olmalıdır. Aşağıdaki tabloda, her sorgu türü için gereken sorgu yığın türü gösterilmektedir:
Sorgu Türü Sorgu Yığını türü D3D12_QUERY_TYPE_OCCLUSION D3D12_QUERY_HEAP_TYPE_OCCLUSION D3D12_QUERY_TYPE_BINARY_OCCLUSION D3D12_QUERY_HEAP_TYPE_OCCLUSION D3D12_QUERY_TYPE_TIMESTAMP D3D12_QUERY_HEAP_TYPE_TIMESTAMP D3D12_QUERY_TYPE_PIPELINE_STATISTICS D3D12_QUERY_HEAP_TYPE_PIPELINE_STATISTICS D3D12_QUERY_TYPE_SO_STATISTICS_STREAM0 D3D12_QUERY_HEAP_TYPE_SO_STATISTICS D3D12_QUERY_TYPE_SO_STATISTICS_STREAM1 D3D12_QUERY_HEAP_TYPE_SO_STATISTICS D3D12_QUERY_TYPE_SO_STATISTICS_STREAM2 D3D12_QUERY_HEAP_TYPE_SO_STATISTICS D3D12_QUERY_TYPE_SO_STATISTICS_STREAM3 D3D12_QUERY_HEAP_TYPE_SO_STATISTICS Sorgu türü, komut listesi türü tarafından desteklenir. Aşağıdaki tabloda hangi sorgularda hangi komut listesi türlerinin desteklendiği gösterilmektedir.
Sorgu Türü Desteklenen Komut Listesi Türleri D3D12_QUERY_TYPE_OCCLUSION Dolaysız D3D12_QUERY_TYPE_BINARY_OCCLUSION Dolaysız D3D12_QUERY_TYPE_TIMESTAMP Doğrudan, İşlem ve isteğe bağlı olarak Kopyala D3D12_QUERY_TYPE_PIPELINE_STATISTICS Dolaysız D3D12_QUERY_TYPE_SO_STATISTICS_STREAM0 Dolaysız D3D12_QUERY_TYPE_SO_STATISTICS_STREAM1 Dolaysız D3D12_QUERY_TYPE_SO_STATISTICS_STREAM2 Dolaysız D3D12_QUERY_TYPE_SO_STATISTICS_STREAM3 Dolaysız
Sorgudan veri ayıklama
Sorgudan veri ayıklamanın yolu, ResolveQueryData yöntemini kullanmaktır. ResolveQueryData tüm bellek türleriyle (sistem belleği veya cihaz yerel belleği) çalışır, ancak hedef kaynağın D3D12_RESOURCE_STATE_COPY_DESTiçinde olmasını gerektirir.
İlgili konular
- sayaçları ve sorguları
- Predication sorguları