1
0
Fork 0
godot/drivers/metal
Stuart Carnie 541f62617f Metal: Fix dynamic uniform buffer offset corruption when rebinding sets
When the same uniform set is bound multiple times within a render pass
(e.g., OPAQUE pass then ALPHA pass with different instance buffers),
the dynamic offset bits were being OR'd together, corrupting the packed
frame indices.

For example, if OPAQUE binds set 1 with frame_idx=1 (0x10) and ALPHA
binds set 1 with frame_idx=2 (0x20), the OR produces 0x30 instead of
the correct 0x20, causing the shader to read from the wrong buffer
offset.

This fix clears the relevant bits for each set being bound before
OR'ing the new values, ensuring only the latest frame indices are used.

Fixes rendering artifacts in the mobile renderer which uses two dynamic
uniforms (uniform buffer + storage buffer) in set 1, unlike the clustered
renderer which only has one.
2026-01-09 16:34:24 +11:00
..
README.md
SCsub Use re-spirv in the Vulkan driver to optimize shaders. 2025-12-02 11:39:11 -03:00
inflection_map.h
metal_device_profile.cpp Metal: Stable argument buffers; GPU rendering crashes; visionOS exports 2025-10-28 08:45:26 +11:00
metal_device_profile.h Metal: Stable argument buffers; GPU rendering crashes; visionOS exports 2025-10-28 08:45:26 +11:00
metal_device_properties.h Metal: Stable argument buffers; GPU rendering crashes; visionOS exports 2025-10-28 08:45:26 +11:00
metal_device_properties.mm Metal: Stable argument buffers; GPU rendering crashes; visionOS exports 2025-10-28 08:45:26 +11:00
metal_objects.h Clear depth stencil textures on first use if the RDD requires it. 2025-12-15 18:34:43 +03:00
metal_objects.mm Metal: Fix dynamic uniform buffer offset corruption when rebinding sets 2026-01-09 16:34:24 +11:00
metal_objects_shared.h Metal: Stable argument buffers; GPU rendering crashes; visionOS exports 2025-10-28 08:45:26 +11:00
metal_utils.h Metal: Stable argument buffers; GPU rendering crashes; visionOS exports 2025-10-28 08:45:26 +11:00
pixel_formats.h
pixel_formats.mm Metal: Stable argument buffers; GPU rendering crashes; visionOS exports 2025-10-28 08:45:26 +11:00
rendering_context_driver_metal.h Metal: Stable argument buffers; GPU rendering crashes; visionOS exports 2025-10-28 08:45:26 +11:00
rendering_context_driver_metal.mm Metal: Stable argument buffers; GPU rendering crashes; visionOS exports 2025-10-28 08:45:26 +11:00
rendering_device_driver_metal.h Clear depth stencil textures on first use if the RDD requires it. 2025-12-15 18:34:43 +03:00
rendering_device_driver_metal.mm Clear depth stencil textures on first use if the RDD requires it. 2025-12-15 18:34:43 +03:00
rendering_shader_container_metal.h Metal: Stable argument buffers; GPU rendering crashes; visionOS exports 2025-10-28 08:45:26 +11:00
rendering_shader_container_metal.mm Metal: Stable argument buffers; GPU rendering crashes; visionOS exports 2025-10-28 08:45:26 +11:00
sha256_digest.h Metal: Stable argument buffers; GPU rendering crashes; visionOS exports 2025-10-28 08:45:26 +11:00

README.md

Metal Rendering Device

This document aims to describe the Metal rendering device implementation in Godot.

Future work / ideas

  • Use placement heaps
  • Explicit hazard tracking
  • MetalFX upscaling support?

Acknowledgments

The Metal rendering owes a lot to the work of the MoltenVK project, which is a Vulkan implementation on top of Metal. In accordance with the Apache 2.0 license, the following copyright notices have been included where applicable:

/**************************************************************************/
/*                                                                        */
/* Portions of this code were derived from MoltenVK.                      */
/*                                                                        */
/* Copyright (c) 2015-2023 The Brenwill Workshop Ltd.                     */
/* (http://www.brenwill.com)                                              */
/*                                                                        */
/* Licensed under the Apache License, Version 2.0 (the "License");        */
/* you may not use this file except in compliance with the License.       */
/* You may obtain a copy of the License at                                */
/*                                                                        */
/*     http://www.apache.org/licenses/LICENSE-2.0                         */
/*                                                                        */
/* Unless required by applicable law or agreed to in writing, software    */
/* distributed under the License is distributed on an "AS IS" BASIS,      */
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or        */
/* implied. See the License for the specific language governing           */
/* permissions and limitations under the License.                         */
/**************************************************************************/