Crafter.Graphics/interfaces
catbot 950059c86e fix(vulkan-rt): work around NVIDIA descriptor-heap AS-read device-loss (#15)
Reading an acceleration structure through VK_EXT_descriptor_heap aborts
with VK_ERROR_DEVICE_LOST on NVIDIA 610.43.02 — a brand-new-extension
driver fault isolated in #7 (engine setup is correct and validation-clean;
images/buffers through the same heap work, and both traceRayEXT and inline
rayQuery fault identically on the AS read).

An acceleration structure can equally be reached by its device address via
OpConvertUToAccelerationStructureKHR, which reads no descriptor and so never
touches the faulting heap path. glslang has no GLSL spelling for that
conversion, so VulkanShader rewrites the compiled SPIR-V at module-load
time: every `OpLoad %accelStruct <heap-ptr>` becomes a load of the TLAS
device address from a synthesized push-constant block followed by the
convert. RTPass pushes the active frame's TLAS address into that push
constant. User GLSL and example code are unchanged; acceleration structures
still bind into the heap normally.

The workaround is gated on Device::workaroundDescriptorHeapAS (true only on
the NVIDIA proprietary driver) and confined to one fenced block in
Crafter.Graphics-ShaderVulkan.cppm plus the RTPass push and the shaderInt64
feature toggle — delete those once a fixed NVIDIA driver ships and the heap
AS read becomes the direct path again.

Verified: VulkanTriangle ray-traces correctly on native NVIDIA (RTX 4090),
validation-layer-clean, no device loss. The SPIR-V rewrite was independently
validated with spirv-val on both the VulkanTriangle and Sponza raygen
modules.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-03 01:59:54 +00:00
..
Crafter.Graphics-Animation.cppm cleaned up renderer 2026-03-09 20:10:19 +01:00
Crafter.Graphics-Clipboard.cppm clipboard 2026-05-19 00:45:22 +02:00
Crafter.Graphics-ComputeShader.cppm browser DOM support 2026-05-18 02:07:48 +02:00
Crafter.Graphics-Decompress.cppm browser DOM support 2026-05-18 02:07:48 +02:00
Crafter.Graphics-DescriptorHeapVulkan.cppm browser DOM support 2026-05-18 02:07:48 +02:00
Crafter.Graphics-DescriptorHeapWebGPU.cppm webgpu improvements 2026-05-24 13:32:08 +02:00
Crafter.Graphics-Device.cppm fix(vulkan-rt): work around NVIDIA descriptor-heap AS-read device-loss (#15) 2026-06-03 01:59:54 +00:00
Crafter.Graphics-Dom.cppm browser DOM support 2026-05-18 02:07:48 +02:00
Crafter.Graphics-DomEvents.cppm browser DOM support 2026-05-18 02:07:48 +02:00
Crafter.Graphics-Font.cppm webgpu support 2026-05-18 04:58:52 +02:00
Crafter.Graphics-FontAtlas.cppm webgpu support 2026-05-18 04:58:52 +02:00
Crafter.Graphics-ForwardDeclarations.cppm rendertargetvulkan 2026-04-11 18:48:00 +02:00
Crafter.Graphics-Gamepad.cppm new input system 2026-05-12 00:24:48 +02:00
Crafter.Graphics-GraphicsTypes.cppm webgpu support 2026-05-18 04:58:52 +02:00
Crafter.Graphics-Image2D.cppm webgpu improvements 2026-05-24 13:32:08 +02:00
Crafter.Graphics-ImageVulkan.cppm browser DOM support 2026-05-18 02:07:48 +02:00
Crafter.Graphics-Input.cppm new input system 2026-05-12 00:24:48 +02:00
Crafter.Graphics-InputField.cppm webgpu improvements 2026-05-24 13:32:08 +02:00
Crafter.Graphics-Keys.cppm browser DOM support 2026-05-18 02:07:48 +02:00
Crafter.Graphics-Mesh.cppm feat(webgpu-rt): add intersection stage, procedural hit group, AABB BLAS API 2026-06-02 22:09:14 +00:00
Crafter.Graphics-PipelineRTVulkan.cppm browser DOM support 2026-05-18 02:07:48 +02:00
Crafter.Graphics-PipelineRTWebGPU.cppm webgpu sponza 2026-05-19 00:27:09 +02:00
Crafter.Graphics-PlainComputeShader.cppm webgpu improvements 2026-05-24 13:32:08 +02:00
Crafter.Graphics-RenderingElement3D.cppm webgpu improvements 2026-05-24 13:32:08 +02:00
Crafter.Graphics-RenderPass.cppm webgpu support 2026-05-18 04:58:52 +02:00
Crafter.Graphics-Router.cppm browser DOM support 2026-05-18 02:07:48 +02:00
Crafter.Graphics-RT.cppm feat(webgpu-rt): add intersection stage, procedural hit group, AABB BLAS API 2026-06-02 22:09:14 +00:00
Crafter.Graphics-RTPass.cppm fix(vulkan-rt): work around NVIDIA descriptor-heap AS-read device-loss (#15) 2026-06-03 01:59:54 +00:00
Crafter.Graphics-SamplerVulkan.cppm browser DOM support 2026-05-18 02:07:48 +02:00
Crafter.Graphics-ShaderBindingTableVulkan.cppm browser DOM support 2026-05-18 02:07:48 +02:00
Crafter.Graphics-ShaderBindingTableWebGPU.cppm feat(webgpu-rt): add intersection stage, procedural hit group, AABB BLAS API 2026-06-02 22:09:14 +00:00
Crafter.Graphics-ShaderVulkan.cppm fix(vulkan-rt): work around NVIDIA descriptor-heap AS-read device-loss (#15) 2026-06-03 01:59:54 +00:00
Crafter.Graphics-Types.cppm browser DOM support 2026-05-18 02:07:48 +02:00
Crafter.Graphics-UI.cppm webgpu improvements 2026-05-24 13:32:08 +02:00
Crafter.Graphics-UIComponents.cppm webgpu support 2026-05-18 04:58:52 +02:00
Crafter.Graphics-VulkanBuffer.cppm browser DOM support 2026-05-18 02:07:48 +02:00
Crafter.Graphics-VulkanTransition.cppm browser DOM support 2026-05-18 02:07:48 +02:00
Crafter.Graphics-WebGPU.cppm feat(webgpu-rt): add intersection stage, procedural hit group, AABB BLAS API 2026-06-02 22:09:14 +00:00
Crafter.Graphics-WebGPUBuffer.cppm webgpu improvements 2026-05-24 13:32:08 +02:00
Crafter.Graphics-WebGPUComputeShader.cppm webgpu improvements 2026-05-24 13:32:08 +02:00
Crafter.Graphics-Window.cppm fix(vulkan): clear startup validation errors on native triangle 2026-05-31 20:59:10 +00:00
Crafter.Graphics.cppm webgpu improvements 2026-05-24 13:32:08 +02:00