feat(device): CRAFTER_GRAPHICS_NO_AS_WORKAROUND turns the NVIDIA AS rewrite off

The SPIR-V rewrite for NVIDIA's descriptor-heap acceleration-structure
read fault (#7, #15) was keyed on the driver ID alone, so nothing could
check whether a newer driver still needs it. With
CRAFTER_GRAPHICS_NO_AS_WORKAROUND set, to any value like the other
CRAFTER_GRAPHICS_* switches, Device leaves it off. On 615.78.08 it is
still needed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Jorijn van der Graaf 2026-10-19 03:03:16 +02:00
commit cb217e22a6
Signed by: jorijnvdgraaf
GPG key ID: 2937E59CDCC1BCFB
2 changed files with 10 additions and 4 deletions

View file

@ -1061,9 +1061,12 @@ void Device::Initialize() {
// the heap, so it is off whenever the heap is: otherwise a forced-fallback
// run on NVIDIA would still rewrite SPIR-V, enable shaderInt64 and push the
// TLAS address through vkCmdPushDataEXT, none of which a real heap-less
// driver does.
// driver does. Still needed on 615.78.08. CRAFTER_GRAPHICS_NO_AS_WORKAROUND,
// set to any value like the other CRAFTER_GRAPHICS_* switches, turns it off,
// which is how a new driver gets checked (tests/HeapASRead --no-workaround).
workaroundDescriptorHeapAS = descriptorHeapSupported
&& driverProperties.driverID == VK_DRIVER_ID_NVIDIA_PROPRIETARY;
&& driverProperties.driverID == VK_DRIVER_ID_NVIDIA_PROPRIETARY
&& std::getenv("CRAFTER_GRAPHICS_NO_AS_WORKAROUND") == nullptr;
// Sanity-gate: GDeflate 1.0 must actually be in the supported method set.
if (memoryDecompressionSupported &&

View file

@ -281,8 +281,11 @@ export namespace Crafter {
// VK_ERROR_DEVICE_LOST (a brand-new-extension driver fault, verified
// engine-clean in #7). When set, VulkanShader rewrites heap AS reads
// into a TLAS-device-address + OpConvertUToAccelerationStructureKHR
// path and RTPass pushes the active TLAS address as push data. Delete
// this flag and everything keyed on it once a fixed driver ships.
// path and RTPass pushes the active TLAS address as push data. Still
// needed on 615.78.08. CRAFTER_GRAPHICS_NO_AS_WORKAROUND, set to any
// value, turns it off to check a newer driver (tests/HeapASRead
// --no-workaround). Delete this flag and everything keyed on it once a
// fixed driver ships.
inline static bool workaroundDescriptorHeapAS = false;
// Count of ERROR-severity validation messages seen by the debug