mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2026-04-26 00:05:58 +03:00
[PR #1723] [CLOSED] liverpool: Correct compute queue context switches #2261
Labels
No labels
Bloodborne
bug
contributor wanted
documentation
enhancement
frontend
good first issue
help wanted
linux
pull-request
question
release
verification progress
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
starred/shadPS4#2261
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/shadps4-emu/shadPS4/pull/1723
Author: @raphaelthegreat
Created: 12/9/2024
Status: ❌ Closed
Base:
main← Head:asc-fix📝 Commits (1)
813fe1cliverpool: Correct compute queue context switches📊 Changes
3 files changed (+17 additions, -7 deletions)
View changed files
📝
src/core/libraries/gnmdriver/gnmdriver.cpp(+1 -1)📝
src/video_core/amdgpu/liverpool.cpp(+15 -5)📝
src/video_core/amdgpu/liverpool.h(+1 -1)📄 Description
Indirect buffers would always yield at least once, even when they finished executing successfully on their first call. Fix that by calling the task outside of the loop first.
Add additional compute register backups and restores where applicable. Compute registers are distinct per queue and thus must be context switched when we switch queues. On main there could be cases where, for example, queue 1 executes some dispatches, context switches to queue 5 which loads its registers, and then context switch to queue 1 again, which has a fresh task. But this time it wouldn't properly restore that context, leading to a crash
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.