mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-11-06 13:30:00 +00:00
Replaces the synchronous per-command execution model, and with it the upstream render-target, pipeline-cache, tile-buffer, batched-draw and memory-ownership commits (5a280ce,7ed5a0b,46c799d,598caac,40df528), whose files are removed. - Recorder: one open command buffer per device; dispatches, resident draws, uploads, write-backs, labels, fills and copies record into it; timeline-semaphore serials let drains wait without the GPU mutex; completions run in order at reap. - one worker thread per PM4 queue; labels and stores written by the GPU into the host import; GPU-side DISPATCH_INDIRECT; the buffer-fill kernel replaced by vkCmdFillBuffer; a dispatch cache validated by write watch; filler packets tolerated; rejected submissions dumped. - guest memory: page-state cache, 64 KiB write generations, host imports with VK_EXT_external_memory_host, persistent mirrors of the executable image, GPU copies of misaligned sub-ranges. - textures: shader-written images stay resident with deferred write-back (adjacent-generation rule for packed video planes), sampled views of storage images, DCC key handling, addrlib swizzle equations, bidirectional detiler. - draws: MRT, more formats, dynamic viewport/scissor, cached pipelines, resident 64 KiB targets, draws recorded into the recorder. - ShaderResources: two-stage build, descriptor and sampler caches, a content-keyed resource cache; presentation from the resident image. - a label deferred behind a completion is no longer re-stored by the CPU at reap time unless a write-back overwrote it. Co-Authored-By: Claude Fable 5.1 <[email protected]> Claude-Session: https://claude.ai/code/session_0177gthrWEBBfBu5xJDXgBfo
41 lines
2.2 KiB
CMake
41 lines
2.2 KiB
CMake
set(agcColorTransferSource ${CMAKE_CURRENT_SOURCE_DIR}/Graphics/shaders/ColorTransfer.comp)
|
|
set(agcColorTransferSpv ${agcTextureDetileGeneratedDir}/ColorTransfer.spv)
|
|
set(agcColorTransferHeader ${agcTextureDetileGeneratedDir}/ColorTransfer_spv.h)
|
|
add_custom_command(
|
|
OUTPUT "${agcColorTransferHeader}"
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory "${agcTextureDetileGeneratedDir}"
|
|
COMMAND "$<TARGET_FILE:glslang-standalone>" -V --target-env vulkan1.1 -o "${agcColorTransferSpv}" "${agcColorTransferSource}"
|
|
COMMAND ${CMAKE_COMMAND} -DINPUT=${agcColorTransferSpv} -DOUTPUT=${agcColorTransferHeader} -DSYMBOL=COLOR_TRANSFER_SPV -P "${CMAKE_CURRENT_SOURCE_DIR}/embed_spirv.cmake"
|
|
DEPENDS "${agcColorTransferSource}" glslang-standalone
|
|
VERBATIM
|
|
)
|
|
|
|
foreach(agcTarget IN ITEMS libSceAgcDriver agc_driver_visual_test agc_driver_graphics_tests agc_driver_bda_device_tests)
|
|
if(TARGET ${agcTarget})
|
|
target_sources(${agcTarget} PRIVATE Graphics/src/BufferPool.cpp)
|
|
endif()
|
|
endforeach()
|
|
|
|
foreach(agcTarget IN ITEMS libSceAgcDriver agc_driver_visual_test agc_driver_graphics_tests)
|
|
if(TARGET ${agcTarget})
|
|
target_sources(${agcTarget} PRIVATE Graphics/src/TextureDetilerDescriptors.cpp Graphics/src/TextureCache.cpp)
|
|
endif()
|
|
endforeach()
|
|
|
|
foreach(agcTarget IN ITEMS libSceAgcDriver agc_driver_visual_test agc_driver_graphics_tests agc_driver_bda_device_tests)
|
|
if(TARGET ${agcTarget})
|
|
target_sources(${agcTarget} PRIVATE Graphics/src/GpuColorTransfer.cpp ${agcColorTransferHeader})
|
|
endif()
|
|
endforeach()
|
|
|
|
target_sources(agc_driver_bda_device_tests PRIVATE tests/ColorTransferTests.cpp Graphics/src/ColorTargetLayout.cpp Execution/src/GuestMemory.cpp)
|
|
target_include_directories(agc_driver_bda_device_tests PRIVATE ${agcTextureDetileGeneratedRoot})
|
|
|
|
if(TARGET agc_driver_visual_test)
|
|
target_sources(agc_driver_visual_test PRIVATE Execution/src/DisplayBuffer.cpp)
|
|
endif()
|
|
|
|
# Upstream's GPU-resident draw path (RenderCache, DrawQueue, RenderTexture, PresentationImage,
|
|
# GraphicsPipelineCache) targets the single-target Pipeline/GpuColorTransfer API; the multi-target
|
|
# draw path in Draw.cpp does not use it yet, so those sources stay out of the build.
|