mirror of https://github.com/godotengine/godot
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. |
||
|---|---|---|
| .. | ||
| README.md | ||
| SCsub | ||
| inflection_map.h | ||
| metal_device_profile.cpp | ||
| metal_device_profile.h | ||
| metal_device_properties.h | ||
| metal_device_properties.mm | ||
| metal_objects.h | ||
| metal_objects.mm | ||
| metal_objects_shared.h | ||
| metal_utils.h | ||
| pixel_formats.h | ||
| pixel_formats.mm | ||
| rendering_context_driver_metal.h | ||
| rendering_context_driver_metal.mm | ||
| rendering_device_driver_metal.h | ||
| rendering_device_driver_metal.mm | ||
| rendering_shader_container_metal.h | ||
| rendering_shader_container_metal.mm | ||
| sha256_digest.h | ||
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. */
/**************************************************************************/