mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-10-22 16:43:05 -05:00
Accept the 10-bit BT.2100 PQ display formats 0x8100070422000000 (red in the low bits) and 0x8100070400000000 (blue in the low bits) and convert them to 8-bit sRGB when presented: PQ EOTF, BT.2020 to BT.709 primaries, a luminance tone map whose white level is the tone-map luminance sceSystemServiceGetHdrToneMapLuminance reports (reference white min(203 nits, white level)), and the sRGB encoding. The conversion runs on the CPU for linear buffers and DCC clear values, in the color transfer shader for tiled guest buffers, and in the presentation pass for resident images. The three share the PQ EOTF table computed once in double precision. AI-assisted: yes
41 lines
2.0 KiB
CMake
41 lines
2.0 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}" "${CMAKE_CURRENT_SOURCE_DIR}/Graphics/shaders/PqToSdr.glsl" glslang-standalone
|
|
VERBATIM
|
|
)
|
|
|
|
foreach(agcTarget IN ITEMS libSceAgcDriver agc_driver_visual_test)
|
|
if(TARGET ${agcTarget})
|
|
target_sources(${agcTarget} PRIVATE Graphics/src/BufferPool.cpp)
|
|
endif()
|
|
endforeach()
|
|
|
|
foreach(agcTarget IN ITEMS libSceAgcDriver agc_driver_visual_test)
|
|
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)
|
|
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)
|
|
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.
|