Files
ppsspp/GPU/CMakeLists.txt
T
Henrik RydgårdandClaude Opus 5.5 b2fc4a80fe Metal: Leave the backend out of the libretro cores
They get their graphics context from the frontend, so they compiled and
linked the Metal backend without being able to use it. Adds
PPSSPP_API_METAL, like PPSSPP_API_D3D11, for the code that only exists
with it.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-19 12:05:14 +02:00

240 lines
6.4 KiB
CMake

set(GPUArch)
list(APPEND GPUArch
Common/VertexDecoderArm.cpp
Common/VertexDecoderArm64.cpp
Common/VertexDecoderX86.cpp
Common/VertexDecoderRiscV.cpp
Common/VertexDecoderLoongArch64.cpp
)
set(GPU_GLES
GLES/StencilBufferGLES.cpp
GLES/GPU_GLES.cpp
GLES/GPU_GLES.h
GLES/FragmentTestCacheGLES.cpp
GLES/FragmentTestCacheGLES.h
GLES/FramebufferManagerGLES.cpp
GLES/FramebufferManagerGLES.h
GLES/ShaderManagerGLES.cpp
GLES/ShaderManagerGLES.h
GLES/StateMappingGLES.cpp
GLES/StateMappingGLES.h
GLES/TextureCacheGLES.cpp
GLES/TextureCacheGLES.h
GLES/DrawEngineGLES.cpp
GLES/DrawEngineGLES.h
)
set(GPU_VULKAN
Vulkan/DebugVisVulkan.cpp
Vulkan/DebugVisVulkan.h
Vulkan/DrawEngineVulkan.cpp
Vulkan/DrawEngineVulkan.h
Vulkan/FramebufferManagerVulkan.cpp
Vulkan/FramebufferManagerVulkan.h
Vulkan/GPU_Vulkan.cpp
Vulkan/GPU_Vulkan.h
Vulkan/PipelineManagerVulkan.cpp
Vulkan/PipelineManagerVulkan.h
Vulkan/ShaderManagerVulkan.cpp
Vulkan/ShaderManagerVulkan.h
Vulkan/StateMappingVulkan.cpp
Vulkan/StateMappingVulkan.h
Vulkan/TextureCacheVulkan.cpp
Vulkan/TextureCacheVulkan.h
Vulkan/VulkanUtil.cpp
Vulkan/VulkanUtil.h
)
set(GPU_D3D11
D3D11/DrawEngineD3D11.cpp
D3D11/DrawEngineD3D11.h
D3D11/FramebufferManagerD3D11.cpp
D3D11/FramebufferManagerD3D11.h
D3D11/GPU_D3D11.cpp
D3D11/GPU_D3D11.h
D3D11/D3D11Util.cpp
D3D11/D3D11Util.h
D3D11/ShaderManagerD3D11.cpp
D3D11/ShaderManagerD3D11.h
D3D11/StateMappingD3D11.cpp
D3D11/StateMappingD3D11.h
D3D11/TextureCacheD3D11.cpp
D3D11/TextureCacheD3D11.h
)
# We build Vulkan even on Apple to avoid annoying build differences.
set(GPU_IMPLS ${GPU_VULKAN})
if(NOT NO_OPENGL)
list(APPEND GPU_IMPLS ${GPU_GLES})
endif()
if(WIN32)
list(APPEND GPU_IMPLS ${GPU_D3D11})
endif()
if(APPLE AND NOT LIBRETRO)
set(GPU_METAL
Metal/DrawEngineMetal.h
Metal/DrawEngineMetal.mm
Metal/FramebufferManagerMetal.h
Metal/FramebufferManagerMetal.mm
Metal/GPU_Metal.h
Metal/GPU_Metal.mm
Metal/ShaderManagerMetal.h
Metal/ShaderManagerMetal.mm
Metal/TextureCacheMetal.h
Metal/TextureCacheMetal.mm
)
set_source_files_properties(Metal/DrawEngineMetal.mm Metal/FramebufferManagerMetal.mm Metal/GPU_Metal.mm Metal/ShaderManagerMetal.mm Metal/TextureCacheMetal.mm PROPERTIES COMPILE_FLAGS -fobjc-arc)
list(APPEND GPU_IMPLS ${GPU_METAL})
endif()
set(GPU_SOURCES
${GPUArch}
${GPU_IMPLS}
${GPU_NEON}
Common/Draw2D.cpp
Common/Draw2D.h
Common/DepthBufferCommon.cpp
Common/DepthRaster.cpp
Common/DepthRaster.h
Common/DepthSwizzle.h
Common/TextureShaderCommon.cpp
Common/TextureShaderCommon.h
Common/DepalettizeShaderCommon.cpp
Common/DepalettizeShaderCommon.h
Common/FragmentShaderGenerator.cpp
Common/FragmentShaderGenerator.h
Common/VertexShaderGenerator.cpp
Common/VertexShaderGenerator.h
Common/FramebufferManagerCommon.cpp
Common/FramebufferManagerCommon.h
Common/GPUDebugInterface.cpp
Common/GPUDebugInterface.h
Common/GPUStateUtils.cpp
Common/GPUStateUtils.h
Common/DrawEngineCommon.cpp
Common/DrawEngineCommon.h
Common/PresentationCommon.cpp
Common/PresentationCommon.h
Common/ReinterpretFramebuffer.cpp
Common/ReinterpretFramebuffer.h
Common/ShaderId.cpp
Common/ShaderId.h
Common/ShaderUniforms.cpp
Common/ShaderUniforms.h
Common/ShaderCommon.cpp
Common/ShaderCommon.h
Common/SplineCommon.cpp
Common/SplineCommon.h
Common/StencilCommon.cpp
Common/StencilCommon.h
Common/SoftwareTransformCommon.cpp
Common/SoftwareLighting.h
Common/SoftwareTransformCommon.h
Common/VertexDecoderCommon.cpp
Common/VertexDecoderCommon.h
Common/VertexDecoderHandwritten.cpp
Common/VertexDecoderHandwritten.h
Common/VertexReader.h
Common/TransformCommon.cpp
Common/TransformCommon.h
Common/IndexGenerator.cpp
Common/IndexGenerator.h
Common/ImageCommon.h
Common/TextureDecoder.cpp
Common/TextureDecoder.h
Common/TextureCacheCommon.cpp
Common/TextureCacheCommon.h
Common/TextureScalerCommon.cpp
Common/TextureScalerCommon.h
Common/PostShader.cpp
Common/PostShader.h
Common/TextureReplacer.cpp
Common/TextureReplacer.h
Common/ReplacedTexture.cpp
Common/ReplacedTexture.h
Debugger/Breakpoints.cpp
Debugger/Breakpoints.h
Debugger/Debugger.cpp
Debugger/Debugger.h
Debugger/GECommandTable.cpp
Debugger/GECommandTable.h
Debugger/Playback.cpp
Debugger/Playback.h
Debugger/Record.cpp
Debugger/Record.h
Debugger/RecordFormat.h
Debugger/State.cpp
Debugger/State.h
Debugger/Stepping.cpp
Debugger/Stepping.h
ge_constants.h
GeConstants.cpp
GPUDefinitions.h
GeDisasm.cpp
GeDisasm.h
GPU.cpp
GPU.h
GPUCommon.cpp
GPUCommon.h
GPUCommonHW.cpp
GPUCommonHW.h
GPUState.cpp
GPUState.h
GPUStateSIMDUtil.h
Math3D.cpp
Math3D.h
Software/BinManager.cpp
Software/BinManager.h
Software/Clipper.cpp
Software/Clipper.h
Software/DrawPixel.cpp
Software/DrawPixel.h
Software/FuncId.cpp
Software/FuncId.h
Software/GEMath.cpp
Software/GEMath.h
Software/Lighting.cpp
Software/Lighting.h
Software/Rasterizer.cpp
Software/Rasterizer.h
Software/RasterizerRectangle.cpp
Software/RasterizerRectangle.h
Software/RasterizerTypes.h
Software/Sampler.cpp
Software/Sampler.h
Software/SoftGpu.cpp
Software/SoftGpu.h
Null/GPU_Null.cpp
Null/GPU_Null.h
Software/TransformUnit.cpp
Software/TransformUnit.h
)
# GPU has a genuine two-way dependency with Core (Core/System.cpp calls GPU_Init(), while
# all of GPU/ calls back into Core for Memory/Config/CoreTiming/etc). An OBJECT library's
# object files are always included wherever it's consumed rather than being lazily pulled
# from an archive, which sidesteps the GNU ld single-pass archive-ordering problem a normal
# two-way STATIC dependency would hit. Core links this PUBLICLY so consumers of Core get it.
add_library(GPU OBJECT ${GPU_SOURCES})
target_compile_features(GPU PUBLIC cxx_std_17)
if(LIBRETRO)
target_include_directories(GPU PRIVATE ${CMAKE_SOURCE_DIR}/libretro/libretro-common/include)
endif()
setup_target_project(GPU GPU)
# The only direct external dependencies of GPU/ itself (as opposed to Common/GPU/*, which
# already carries its own GL/Vulkan loader abstractions): raw gl*() calls in GPU/GLES, direct
# ZSTD_compress/decompress calls in GPU/Debugger/Record.cpp and Playback.cpp, and Playback.cpp
# also calls snappy_uncompress() directly.
target_link_libraries(GPU PUBLIC ${OPENGL_LIBRARIES} ${X11_LIBRARIES} Ext::Snappy)
if(USE_SYSTEM_ZSTD)
target_include_directories(GPU PRIVATE ${ZSTD_INCLUDE_DIR})
target_link_libraries(GPU PUBLIC ${ZSTD_LIBRARY})
else()
target_link_libraries(GPU PUBLIC libzstd_static)
endif()