Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu konuda Direct3D 12 Hata Ayıklama Katmanı'nı en iyi şekilde nasıl kullanacağınız açıklanmaktadır. GPU tabanlı doğrulama (GBV), GPU zaman çizelgesinde CPU üzerindeki API çağrıları sırasında mümkün olmayan doğrulama senaryolarını etkinleştirir. GBV, Windows 10 Yıldönümü Güncelleştirmesi için Grafik Araçları ile başlayarak kullanılabilir.
GPU tabanlı doğrulamanın amacı
GPU tabanlı doğrulama aşağıdaki hataların belirlenmesine yardımcı olur:
- Bir gölgelendiricide başlatılmamış veya uyumsuz tanımlayıcıların kullanılması.
- Gölgelendiricide silinmiş Kaynaklara başvuran tanımlayıcıların kullanımı.
- Yükseltilen kaynak durumlarının ve kaynak durumu bozulmalarının doğrulanması.
- Bir gölgelendiricide tanımlayıcı yığınının sonunun ötesinde dizin oluşturma.
- Gölgelendirici kaynakları uyumsuz durumda erişir.
- Bir gölgelendiricide başlatılmamış veya uyumsuz Örnekleyicilerin kullanımı.
GBV, doğrulamanın doğrudan gölgelendiriciye eklendiği yamalı gölgelendiriciler oluşturarak çalışır. Yama uygulanmış gölgelendiriciler, gölgelendirici yürütme sırasında erişilen kök bağımsız değişkenleri ve kaynakları inceler ve hataları günlük arabelleğine bildirir. GBV ayrıca, GPU zaman çizelgesindeki komut listesi tarafından uygulanan kaynak durumundaki değişiklikleri doğrulamak ve izlemek için uygulama komut listelerine ek işlemler ve Gönderme çağrıları ekler.
GBV, gölgelendiricileri yürütme olanağı gerektirdiğinden COPY komut listeleri bir İŞLEM komut listesi tarafından öykünür. Bu, donanımın kopyaları nasıl gerçekleştireceğini değiştirebilir, ancak sonuç değiştirilmemelidir. Uygulama yine de bunların COPY komut listeleri olduğunu algılar ve hata ayıklama katmanı bunları bu şekilde doğrular.
GPU tabanlı doğrulamayı açma
GBV, Direct3D 12 Hata Ayıklama Katmanını zorlayarak ve ayrıca GPU tabanlı doğrulamayı (denetim masasındaki yeni sekme) zorlayarak DirectX Denetim Masası'nı (DXCPL) kullanmaya zorlanabilir. Etkinleştirildikten sonra, Direct3D 12 cihazı yayınlanana kadar GBV etkin kalır. Alternatif olarak, GBV Direct3D 12 Cihazı oluşturulmadan önce program aracılığıyla etkinleştirilebilir:
void EnableShaderBasedValidation()
{
CComPtr<ID3D12Debug> spDebugController0;
CComPtr<ID3D12Debug1> spDebugController1;
VERIFY(D3D12GetDebugInterface(IID_PPV_ARGS(&spDebugController0)));
VERIFY(spDebugController0->QueryInterface(IID_PPV_ARGS(&spDebugController1)));
spDebugController1->SetEnableGPUBasedValidation(true);
}
Önerilen kullanım
Genellikle çoğu zaman hata ayıklama katmanı etkinken kodunuzu çalıştırmanız gerekir. Ancak GBV, işleri çok yavaşlatabilir. Geliştiriciler, performans sorunlarını azaltmak için GBV'yi daha küçük veri kümeleriyle (örneğin, altyapı tanıtımları veya daha az PSO ve kaynağı olan küçük oyun düzeyleri) veya erken uygulama sırasında etkinleştirmeyi göz önünde bulundurabilir. Daha büyük içerikle, bir veya iki test makinesinde GBV'i gecelik test geçişinde açmayı göz önünde bulundurun.
Çıkışta hata ayıklama
GBV, ExecuteCommandLists çağrısından sonra hata ayıklama çıkışı oluşturur GPU'da yürütmeyi tamamlar. Bu GPU zaman çizelgesinde olduğundan, hata ayıklama çıkışı diğer CPU zaman çizelgesi doğrulamasıyla zaman uyumsuz olabilir. Uygulama geliştiricileri, hata ayıklama çıkışını eşitlemek için kendi yürütme sonrasında beklemelerini eklemek isteyebilir.
GBV çıkışı, ilgili nesnelerin (komut listesi, kuyruk, PSO vb.) geçerli çizim/dağıtım sayısı ve kimlikleriyle birlikte bir gölgelendiricide nerede hata oluştuğunu tanımlar.
Örnek hata ayıklama iletisi
Aşağıdaki hata iletisi, gölgelendirici kaynağı olarak "Ana Renk Arabelleği" adlı bir kaynağa gölgelendirici kaynağı olarak erişildiğini ancak gölgelendirici GPU üzerinde çalıştığında sıralı olmayan erişim durumunda olduğunu gösterir. Gölgelendirici kaynağındaki konum, komut listesinin adı ve Çiz sayısı (Dizin Çiz) gibi ek bilgiler ve ilgili D3D arabirim nesnelerinin adları da sağlanır.
D3D12 ERROR: Incompatible resource state: Resource: 0x0000016F61A6EA80:'Main Color Buffer',
Subresource Index: [0],
Descriptor heap index: [0],
Binding Type In Descriptor: SRV,
Resource State: D3D12_RESOURCE_STATE_UNORDERED_ACCESS(0x8),
Shader Stage: PIXEL,
Root Parameter Index: [0],
Draw Index: [0],
Shader Code: E:\FileShare\MiniEngine_GitHub_160128\MiniEngine_GitHub\Core\Shaders\SharpeningUpsamplePS.hlsl(37,2-59),
Asm Instruction Range: [0x138-0x16b],
Asm Operand Index: [3],
Command List: 0x0000016F6F75F740:'CommandList', SRV/UAV/CBV Descriptor Heap: 0x0000016F6F76F280:'Unnamed ID3D12DescriptorHeap Object',
Sampler Descriptor Heap: <not set>,
Pipeline State: 0x0000016F572C89F0:'Unnamed ID3D12PipelineState Object',
[ EXECUTION ERROR #942: GPU_BASED_VALIDATION_INCOMPATIBLE_RESOURCE_STATE]
Katman API'lerinin hatalarını ayıklama
Hata ayıklama katmanını etkinleştirmek için EnableDebugLayeröğesini çağırın.
GPU tabanlı doğrulamayı etkinleştirmek için SetEnableGPUBasedValidationçağrısı yapın ve aşağıdaki arabirimlerin yöntemlerine bakın:
Aşağıdaki numaralandırmalara ve yapılara bakın:
- D3D12_DEBUG_COMMAND_LIST_PARAMETER_TYPE
- D3D12_DEBUG_DEVICE_PARAMETER_TYPE
- D3D12_GPU_BASED_VALIDATION_PIPELINE_STATE_CREATE_FLAGS
- D3D12_GPU_BASED_VALIDATION_SHADER_PATCH_MODE
- D3D12_DEBUG_COMMAND_LIST_GPU_BASED_VALIDATION_SETTINGS
- D3D12_DEBUG_DEVICE_GPU_BASED_VALIDATION_SETTINGS