X Tutup
Skip to content

Create separate graphics queue instead of reusing the main queue when transfer queue family is unsupported.#114476

Merged
akien-mga merged 1 commit intogodotengine:masterfrom
blueskythlikesclouds:create-separate-graphics-queue-for-transfer
Jan 6, 2026
Merged

Create separate graphics queue instead of reusing the main queue when transfer queue family is unsupported.#114476
akien-mga merged 1 commit intogodotengine:masterfrom
blueskythlikesclouds:create-separate-graphics-queue-for-transfer

Conversation

@blueskythlikesclouds
Copy link
Contributor

@blueskythlikesclouds blueskythlikesclouds commented Dec 31, 2025

Maybe fixes #112160 and fixes #112161. I haven't been able to reproduce the issue yet, but I'll post an update once I do.

When the device does not support transfer queues, Godot falls back to using the main graphics queue for transfer workers. This causes race conditions with the main command buffers, as they try to access and modify the vectors containing image acquisition semaphores at the same time.

I tried to resolve this more cleanly by making the semaphores part of RD, but the changes grew out of scope for a simple bug fix. In the meantime, this change makes the behavior match the case where a transfer queue family is supported.

@Alex2782
Copy link
Member

An older Rift Riff version also crashed on an Adreno 7xx device. (_release_image_semaphore)

There are Adreno 6xx and 7xx devices without TRANSFER_BIT.
https://vulkan.gpuinfo.org/listdevices.php?platform=android

My Samsung Tab S7 (Adreno 650) doesn't have it either; no crashes have been reproducible so far.
https://vulkan.gpuinfo.org/displayreport.php?id=17693#queuefamilies

Copy link
Member

@clayjohn clayjohn left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This makes sense to me and should be a relatively safe change.

Since the underlying issue is hard to reproduce as it is a race condition in code that doesn't run every frame, I think we should just merge this and evaluate the results

@akien-mga akien-mga added this to the 4.6 milestone Jan 6, 2026
@akien-mga akien-mga added the cherrypick:4.5 Considered for cherry-picking into a future 4.5.x release label Jan 6, 2026
@akien-mga akien-mga merged commit 7d807ec into godotengine:master Jan 6, 2026
20 checks passed
@akien-mga
Copy link
Member

Thanks!

@akien-mga
Copy link
Member

Cherry-picked for 4.5.2.

@akien-mga akien-mga removed the cherrypick:4.5 Considered for cherry-picking into a future 4.5.x release label Jan 8, 2026
@blueskythlikesclouds blueskythlikesclouds deleted the create-separate-graphics-queue-for-transfer branch January 15, 2026 09:16
rivie13 pushed a commit to rivie13/Phoenix-Agentic-Engine that referenced this pull request Feb 16, 2026
…e-separate-graphics-queue-for-transfer

Create separate graphics queue instead of reusing the main queue when transfer queue family is unsupported.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Adreno 6XX crash in _swap_chain_release() Adreno 6XX crash in _release_image_semaphore()

4 participants

X Tutup