mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2026-04-26 08:15:59 +03:00
[PR #231] [MERGED] shader_recompiler: Implement most integer image atomics, workgroup barriers and shared memory load/store #1413
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#1413
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/231
Author: @raphaelthegreat
Created: 7/1/2024
Status: ✅ Merged
Merged: 7/4/2024
Merged by: @raphaelthegreat
Base:
main← Head:shared_mem📝 Commits (10+)
91aed76shader_recompiler: Add LDEXP668f767shader_recompiler: Add most image integer atomic opse8a2cb7shader_recompiler: Implement shared memory load/store61f1854shader_recompiler: More image atomics0fcc1ceexternals: Update sirit0999b9eclang formatd939c58cmake: Add missing filesb4e1eebshader_recompiler: Fix some atomic bugs8103ddeshader_recompiler: Vs outputsf212f43shader_recompiler: Shared mem has side-effects, fix format component order📊 Changes
69 files changed (+1597 additions, -310 deletions)
View changed files
📝
CMakeLists.txt(+3 -0)📝
externals/sirit(+1 -1)➕
src/common/div_ceil.h(+25 -0)📝
src/common/string_util.cpp(+6 -0)📝
src/common/string_util.h(+3 -0)📝
src/core/address_space.h(+1 -1)📝
src/core/file_sys/fs.cpp(+19 -4)📝
src/core/libraries/gnmdriver/gnmdriver.cpp(+4 -4)📝
src/core/libraries/gnmdriver/gnmdriver.h(+1 -1)📝
src/core/libraries/kernel/memory_management.cpp(+0 -1)📝
src/core/libraries/kernel/thread_management.cpp(+26 -20)📝
src/core/libraries/kernel/threads/semaphore.cpp(+5 -1)📝
src/core/libraries/save_data/savedata.cpp(+6 -2)📝
src/shader_recompiler/backend/spirv/emit_spirv.cpp(+25 -12)➕
src/shader_recompiler/backend/spirv/emit_spirv_atomic.cpp(+70 -0)➕
src/shader_recompiler/backend/spirv/emit_spirv_barriers.cpp(+37 -0)📝
src/shader_recompiler/backend/spirv/emit_spirv_bitwise_conversion.cpp(+2 -2)📝
src/shader_recompiler/backend/spirv/emit_spirv_context_get_set.cpp(+60 -11)📝
src/shader_recompiler/backend/spirv/emit_spirv_convert.cpp(+5 -5)📝
src/shader_recompiler/backend/spirv/emit_spirv_floating_point.cpp(+27 -10)...and 49 more files
📄 Description
Couldn't resist not testing this since it showed intro screens lol. These allow Red Dead Redemption to not crash during shader compilation. The game also uses inline constant buffers but those should be for a different PR.
For shared memory emulation we use VK_KHR_workgroup_memory_explicit_layout to allow aliasing of the shared region with different access types, which makes reads/writes with granularity less than a dword easy.
Also fixed intro text by allowing render target refresh in texture cache. This is not ideal as it will upload from host memory each time but it works. Will need a proper guest buffer manager to make it fast
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.