DirectX derleyicisindeki optimizasyon hatası gölgelendirici animasyonunu bozdu
Öne çıkanlar
- Sorun yalnızca Windows üzerinde DirectX 11 ve ANGLE dönüşümü kullanan cihazda görüldü.
- Skaler değere ondalık eklenmesi veya optimizasyonun kapatılması hatayı giderdi.
- Hatanın grafik sürücüsünden değil FXC derleyicisinin optimizasyon mantığından kaynaklandığı anlaşıldı.
Bir yazılımcı, müzik klibi projesinde arka plan olarak tasarladığı Voronoi gürültüsü gölgelendiricisinde tek bir donanım ortamında animasyon takılmasıyla karşılaştı. Beş farklı cihazda yapılan kontrollerde hata yalnızca Windows kurulu ve DirectX 11 kullanan bilgisayarda ortaya çıktı. İlk incelemelerde hatanın grafik sürücüsünden kaynaklandığı varsayılsa da sorunun altında yatan nedenin tarayıcı motorundaki derleme aşaması olduğu belirlendi.
Chromium tabanlı tarayıcılarda WebGL komutlarını yerel grafik API arayüzlerine dönüştüren ANGLE katmanı, GLSL kodunu HLSL biçimine aktarıyor. DirectX 11 için çalışan FXC derleyicisi, O3 düzeyindeki agresif optimizasyon sırasında tam sayı katları içeren vektör hesaplamalarını hatalı makine koduna dönüştürdü. Girdiye 398.0 yerine 398.1 gibi ondalıklı bir skaler eklendiğinde derleyici farklı talimatlar üretti ve takılma sorunu ortadan kalktı.
RenderDoc grafik hata ayıklayıcısı ile bayt kodu incelemesi yapan geliştirici, sorunun kaynağını doğrudan derleyici seviyesinde doğruladı. Optimizasyon bayrağı kapatıldığında veya tarayıcının arka uç motoru Vulkan olarak değiştirildiğinde animasyonun düzgün çalıştığı görüldü. Araştırma, yüksek seviyeli grafik dillerinde matematiksel optimizasyonların donanım seviyesinde beklenmedik görsel kusurlar yaratabileceğini ortaya koydu.
Bu özet yapay zekâ ile hazırlanmıştır; ayrıntılar ve doğrulama için orijinal kaynağa başvurun.