mirror of
https://github.com/godotengine/godot.git
synced 2026-04-14 21:59:58 +00:00
Raytracing shader binding table records are addressed through Vulkan alignment rules that distinguish between the raw shader group handle size, the per-record handle alignment, and the base alignment required for SBT region addresses. The previous layout treated the shader group handle size as the record stride everywhere. This worked only on devices where the handle size already satisfied all relevant alignment requirements. It broke down once multiple ray generation shaders were placed in the same SBT: selecting a non-zero raygen index advanced the raygen region address by the raw handle size, which could produce an address that was not aligned to the required shader group base alignment. Separate the SBT layout into the appropriate strides: - ray generation records use a base-aligned stride, since selecting a raygen shader changes the SBT region start address for the dispatch. - miss and hit records use the handle-aligned shader group stride, since their regions start at a base-aligned address and individual records are selected through the region stride. This keeps the CPU-side SBT population and the dispatch-time SBT regions using the same layout, so shader group handles are written to the same aligned slots that Vulkan later addresses.