Doğrulama bir frame’in yanlış olduğunu söyler; RenderDoc neden
gösterir. Bir frame’i yakalar — her command buffer, her descriptor,
her pipeline durumu — ve tam incelemeyle adım adım replay eder.
“Bu karo siyah çiziliyor” için, semptomdan suçlu vkCmdDraw‘a
en hızlı yoldur.
Yakalama
# renderdoc altında başlat — capture katmanını otomatik enjekte eder:
renderdoccmd capture ./vulkanocam -c test.ini
# veya UI'dan: qrenderdoc → Launch Application → binary seç
# kod-içi tetik (renderdoc.h API):
RENDERDOC_API_1_4_2* rdoc;
dlopen("librenderdoc.so"); // veya env'den al
rdoc->TriggerCapture(); // SONRAKİ frame'i yakala
// sonra .rdc dosyası çalışma dizinine düşerSırayla bakılacaklar
1. Event browser — kötü pikseli üreten draw/dispatch'i bul
2. Pipeline state — shader, descriptor set'ler, render target formatları
3. Texture viewer — girdiler; kaynak doku zaten mi yanlış?
4. Mesh viewer — vertex/attribute düzeni; normal'ler, UV'ler, instance'lar
5. Shader debugger — fragment'ta adım at, register'ları izle
6. Pixel history — bu piksele dokunan her draw, sıraylaKatil özellik: piksel geçmişi
Texture viewer’da bir piksele sağ tıkla → History — RenderDoc, o pikseli gölgelendiren veya discard eden her draw’u primitive ID, draw çağrısı ve öncesi/sonrası değerlerle listeler. “Akış MJPEG iken bu karo yeşil” için, piksel geçmişi yanlış rengin draw’dan mı yoksa sampler’a bağlı eski dokudan mı geldiğini gösterir.
Shader hata ayıklama
Event browser’da draw’u seç → shader sekmesindeki Debug düğmesi —
SPIR-V içinde kaynak seviyesi bir stepper alırsınız: değişkenlerin
üzerine gelin, dallara girin, UAV/doku okumalarını izleyin.
-g ile derlediyseniz orijinal GLSL’inize geri eşler.
Saat kazandıran numaralar
- Nesnelere isim verin —
vkSetDebugUtilsObjectNameEXT,buffer_0x7f…‘yislot3_y_planeyapar; pipeline’lar ve image’lar event browser’da isimleriyle görünür (debug-utils yazısına bakın). - Koddan tetikleyin — interaktif olmayan uygulamalar için ilk
N’inci frame’de
TriggerCapture(), F12’yi elle zamanlamaktan kurtarır. - Yakalama ağır — tüm GPU işini serileştirir, canlıda 8 ms süren frame yakalamada 500 ms sürebilir; zamanlama sonuçları çıkarmayın.
- Dokuları karşılaştırın — viewer’daki “lock this texture” pini, event’leri kaydırırken aynı kaynağı açık tutar — dokunun ne zaman değiştiğini görmenin hızlı yolu.
- Erken kaydedin —
.rdcdosyaları kendini içerir; bir hata raporuna eklerseniz sürücü mühendisi tam frame’inizi replay edebilir.
siyah/yanlış renk? → girdide texture viewer + piksel geçmişi
eksik geometri? → mesh viewer (yanlış vertex stride? discard edildi?)
rastgele çöp? → pipeline state (başlatılmamış descriptor? yanlış
layout?), sonra shader debug
device lost? → renderdoc'un işi DEĞİL — VK_EXT_device_fault +
breadcrumb (DEVICE_LOST yazısına bakın)Pratik kurallar
- Headless/offscreen’de de çalışır — renderdoccmd, capture katmanını yükleyen her Vulkan uygulamasını yakalar.
- Katman otomatik enjekte edilir;
VK_LAYER_RENDERDOC_Capture‘ı kendiniz etkinleştirmezsiniz — sadecerenderdoccmdaltında başlatın. - GPU-AV sorunlarında aynı frame’i ikisinde de yakalayın — RenderDoc ne olduğunu gösterir, GPU-AV ihlal eden descriptor’ı adlandırır.