Files
PS2Recomp/ps2xRuntime/cmake/ParallelGSTransferTails.cmake
Ran-j e27a658b32 feat: wip performance patch
feat: added parallel gs
feat: optmized IOP emulator
feat: added guest and game fps count
feat: small vu1 optmization and guards
2026-09-25 14:29:05 -03:00

25 lines
1.6 KiB
CMake

file(READ "${parallel_gs_SOURCE_DIR}/gs/gs_interface.cpp" gs_interface_source)
function(patch_gs_transfer before after)
string(FIND "${gs_interface_source}" "${before}" position)
if(position EQUAL -1)
message(FATAL_ERROR "parallel-gs transfer patch does not match the pinned source")
endif()
string(REPLACE "${before}" "${after}" gs_interface_source "${gs_interface_source}")
set(gs_interface_source "${gs_interface_source}" PARENT_SCOPE)
endfunction()
patch_gs_transfer("get_bits_per_pixel(transfer_state.copy.bitbltbuf.desc.DPSM)) / 64;" "get_bits_per_pixel(transfer_state.copy.bitbltbuf.desc.DPSM) + 63) / 64;")
patch_gs_transfer("get_bits_per_pixel(transfer_state.copy.bitbltbuf.desc.SPSM)) / 8;" "get_bits_per_pixel(transfer_state.copy.bitbltbuf.desc.SPSM) + 7) / 8;")
patch_gs_transfer("transfer_state.fifo_readback.reserve(required_bytes);" "transfer_state.fifo_readback.reserve((required_bytes + 15) & ~15u);\n\t\tif (required_bytes) memset(transfer_state.fifo_readback.data(), 0, (required_bytes + 15) & ~15u);")
patch_gs_transfer("transfer_state.fifo_readback_128b_size = required_bytes / 16;" "transfer_state.fifo_readback_128b_size = (required_bytes + 15) / 16;")
set(patched_interface "${parallel_gs_BINARY_DIR}/gs_interface_transfer_tails.cpp")
file(CONFIGURE OUTPUT "${patched_interface}" CONTENT "${gs_interface_source}" @ONLY)
get_target_property(gs_sources parallel-gs SOURCES)
list(REMOVE_ITEM gs_sources gs_interface.cpp)
set_property(TARGET parallel-gs PROPERTY SOURCES "${gs_sources}")
target_sources(parallel-gs PRIVATE "${patched_interface}")