mirror of
https://github.com/cemu-project/Cemu.git
synced 2026-04-25 20:26:19 -06:00
remove vulkan/opengl code if ENABLE_VULKAN or ENABLE_OPENGL is not defined
This commit is contained in:
parent
02383542b2
commit
49ebeb0764
@ -115,6 +115,13 @@ option(ENABLE_VULKAN "Enables the Vulkan backend" ON)
|
||||
option(ENABLE_METAL "Enables the Metal backend" ${ENABLE_METAL_DEFAULT})
|
||||
option(ENABLE_DISCORD_RPC "Enables the Discord Rich Presence feature" ON)
|
||||
|
||||
if (ENABLE_OPENGL)
|
||||
set_compile_definitions(ENABLE_OPENGL)
|
||||
else()
|
||||
if (ENABLE_VULKAN)
|
||||
add_compile_definitions(ENABLE_VULKAN)
|
||||
else()
|
||||
|
||||
if (ENABLE_METAL AND NOT APPLE)
|
||||
message(FATAL_ERROR "Metal backend is only supported on Apple platforms")
|
||||
endif()
|
||||
|
||||
@ -13,18 +13,24 @@ if(MSVC)
|
||||
add_compile_definitions(WIN32_LEAN_AND_MEAN CURL_STATICLIB)
|
||||
elseif(UNIX)
|
||||
if(APPLE)
|
||||
add_compile_definitions(
|
||||
_XOPEN_SOURCE
|
||||
VK_USE_PLATFORM_MACOS_MVK
|
||||
VK_USE_PLATFORM_METAL_EXT
|
||||
)
|
||||
if (ENABLE_VULKAN)
|
||||
add_compile_definitions(
|
||||
_XOPEN_SOURCE
|
||||
VK_USE_PLATFORM_MACOS_MVK
|
||||
VK_USE_PLATFORM_METAL_EXT
|
||||
)
|
||||
else()
|
||||
add_compile_definitions(_XOPEN_SOURCE)
|
||||
endif()
|
||||
else()
|
||||
add_compile_definitions(
|
||||
VK_USE_PLATFORM_XLIB_KHR # legacy. Do we need to support XLIB surfaces?
|
||||
VK_USE_PLATFORM_XCB_KHR
|
||||
)
|
||||
if (ENABLE_WAYLAND)
|
||||
add_compile_definitions(VK_USE_PLATFORM_WAYLAND_KHR)
|
||||
if (ENABLE_VULKAN)
|
||||
add_compile_definitions(
|
||||
VK_USE_PLATFORM_XLIB_KHR # legacy. Do we need to support XLIB surfaces?
|
||||
VK_USE_PLATFORM_XCB_KHR
|
||||
)
|
||||
if (ENABLE_WAYLAND)
|
||||
add_compile_definitions(VK_USE_PLATFORM_WAYLAND_KHR)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
# warnings
|
||||
@ -35,7 +41,9 @@ elseif(UNIX)
|
||||
add_compile_options(-Wno-multichar -Wno-invalid-offsetof -Wno-switch -Wno-ignored-attributes -Wno-deprecated-enum-enum-conversion)
|
||||
endif()
|
||||
|
||||
add_compile_definitions(VK_NO_PROTOTYPES)
|
||||
if (ENABLE_VULKAN)
|
||||
add_compile_definitions(VK_NO_PROTOTYPES)
|
||||
endif()
|
||||
|
||||
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
||||
|
||||
@ -113,42 +121,38 @@ if (MACOS_BUNDLE)
|
||||
COMMAND ${CMAKE_COMMAND} ARGS -E copy_directory "${CMAKE_SOURCE_DIR}/bin/${folder}" "${CMAKE_SOURCE_DIR}/bin/${OUTPUT_NAME}.app/Contents/SharedSupport/${folder}")
|
||||
endforeach(folder)
|
||||
|
||||
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
set(LIBUSB_PATH "${CMAKE_BINARY_DIR}/vcpkg_installed/${VCPKG_TARGET_TRIPLET}/debug/lib/libusb-1.0.0.dylib")
|
||||
else()
|
||||
set(LIBUSB_PATH "${CMAKE_BINARY_DIR}/vcpkg_installed/${VCPKG_TARGET_TRIPLET}/lib/libusb-1.0.0.dylib")
|
||||
if (ENABLE_VULKAN)
|
||||
if (EXISTS "/usr/local/lib/libMoltenVK.dylib")
|
||||
set(MOLTENVK_PATH "/usr/local/lib/libMoltenVK.dylib")
|
||||
elseif (EXISTS "/opt/homebrew/lib/libMoltenVK.dylib")
|
||||
set(MOLTENVK_PATH "/opt/homebrew/lib/libMoltenVK.dylib")
|
||||
else()
|
||||
message(FATAL_ERROR "failed to find libMoltenVK.dylib")
|
||||
endif ()
|
||||
|
||||
add_custom_command (TARGET CemuBin POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} ARGS -E copy "${MOLTENVK_PATH}" "${CMAKE_SOURCE_DIR}/bin/${OUTPUT_NAME}.app/Contents/Frameworks/libMoltenVK.dylib"
|
||||
COMMAND ${CMAKE_COMMAND} ARGS -E copy "${CMAKE_SOURCE_DIR}/src/resource/update.sh" "${CMAKE_SOURCE_DIR}/bin/${OUTPUT_NAME}.app/Contents/MacOS/update.sh"
|
||||
COMMAND bash -c "install_name_tool -add_rpath @executable_path/../Frameworks ${CMAKE_SOURCE_DIR}/bin/${OUTPUT_NAME}.app/Contents/MacOS/${OUTPUT_NAME}")
|
||||
endif()
|
||||
|
||||
if (EXISTS "/usr/local/lib/libMoltenVK.dylib")
|
||||
set(MOLTENVK_PATH "/usr/local/lib/libMoltenVK.dylib")
|
||||
elseif (EXISTS "/opt/homebrew/lib/libMoltenVK.dylib")
|
||||
set(MOLTENVK_PATH "/opt/homebrew/lib/libMoltenVK.dylib")
|
||||
else()
|
||||
message(FATAL_ERROR "failed to find libMoltenVK.dylib")
|
||||
endif ()
|
||||
|
||||
add_custom_command (TARGET CemuBin POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} ARGS -E copy "${MOLTENVK_PATH}" "${CMAKE_SOURCE_DIR}/bin/${OUTPUT_NAME}.app/Contents/Frameworks/libMoltenVK.dylib"
|
||||
COMMAND ${CMAKE_COMMAND} ARGS -E copy "${LIBUSB_PATH}" "${CMAKE_SOURCE_DIR}/bin/${OUTPUT_NAME}.app/Contents/Frameworks/libusb-1.0.0.dylib"
|
||||
COMMAND ${CMAKE_COMMAND} ARGS -E copy "${CMAKE_SOURCE_DIR}/src/resource/update.sh" "${CMAKE_SOURCE_DIR}/bin/${OUTPUT_NAME}.app/Contents/MacOS/update.sh"
|
||||
COMMAND bash -c "install_name_tool -add_rpath @executable_path/../Frameworks ${CMAKE_SOURCE_DIR}/bin/${OUTPUT_NAME}.app/Contents/MacOS/${OUTPUT_NAME}"
|
||||
COMMAND install_name_tool -change @rpath/libusb-1.0.0.dylib @executable_path/../Frameworks/libusb-1.0.0.dylib ${CMAKE_SOURCE_DIR}/bin/${OUTPUT_NAME}.app/Contents/MacOS/${OUTPUT_NAME})
|
||||
else()
|
||||
if(APPLE)
|
||||
find_library(MOLTENVK_LIBRARY
|
||||
NAMES MoltenVK moltenvk libMoltenVK.dylib
|
||||
PATHS /usr/local/lib /opt/homebrew/lib
|
||||
)
|
||||
if(MOLTENVK_LIBRARY)
|
||||
message(STATUS "Found MoltenVK: ${MOLTENVK_LIBRARY}")
|
||||
target_link_libraries(CemuBin PRIVATE ${MOLTENVK_LIBRARY})
|
||||
else()
|
||||
message(WARNING "libMoltenVK.dylib not found")
|
||||
endif()
|
||||
set_target_properties(CemuBin PROPERTIES
|
||||
BUILD_WITH_INSTALL_RPATH TRUE
|
||||
INSTALL_RPATH "/usr/local/lib;/opt/homebrew/lib"
|
||||
)
|
||||
if (ENABLE_VULKAN)
|
||||
find_library(MOLTENVK_LIBRARY
|
||||
NAMES MoltenVK moltenvk libMoltenVK.dylib
|
||||
PATHS /usr/local/lib /opt/homebrew/lib
|
||||
)
|
||||
if(MOLTENVK_LIBRARY)
|
||||
message(STATUS "Found MoltenVK: ${MOLTENVK_LIBRARY}")
|
||||
target_link_libraries(CemuBin PRIVATE ${MOLTENVK_LIBRARY})
|
||||
else()
|
||||
message(WARNING "libMoltenVK.dylib not found")
|
||||
endif()
|
||||
set_target_properties(CemuBin PROPERTIES
|
||||
BUILD_WITH_INSTALL_RPATH TRUE
|
||||
INSTALL_RPATH "/usr/local/lib;/opt/homebrew/lib"
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
||||
@ -162,58 +162,12 @@ add_library(CemuCafe
|
||||
HW/Latte/LegacyShaderDecompiler/LatteDecompilerInstructions.h
|
||||
HW/Latte/LegacyShaderDecompiler/LatteDecompilerInternal.h
|
||||
HW/Latte/LegacyShaderDecompiler/LatteDecompilerRegisterDataTypeTracker.cpp
|
||||
HW/Latte/Renderer/OpenGL/CachedFBOGL.h
|
||||
HW/Latte/Renderer/OpenGL/LatteTextureGL.cpp
|
||||
HW/Latte/Renderer/OpenGL/LatteTextureGL.h
|
||||
HW/Latte/Renderer/OpenGL/LatteTextureViewGL.cpp
|
||||
HW/Latte/Renderer/OpenGL/LatteTextureViewGL.h
|
||||
HW/Latte/Renderer/OpenGL/OpenGLQuery.cpp
|
||||
HW/Latte/Renderer/OpenGL/OpenGLRendererCore.cpp
|
||||
HW/Latte/Renderer/OpenGL/OpenGLRenderer.cpp
|
||||
HW/Latte/Renderer/OpenGL/OpenGLRenderer.h
|
||||
HW/Latte/Renderer/OpenGL/OpenGLRendererStreamout.cpp
|
||||
HW/Latte/Renderer/OpenGL/OpenGLRendererUniformData.cpp
|
||||
HW/Latte/Renderer/OpenGL/OpenGLSurfaceCopy.cpp
|
||||
HW/Latte/Renderer/OpenGL/OpenGLTextureReadback.h
|
||||
HW/Latte/Renderer/OpenGL/RendererShaderGL.cpp
|
||||
HW/Latte/Renderer/OpenGL/RendererShaderGL.h
|
||||
HW/Latte/Renderer/OpenGL/TextureReadbackGL.cpp
|
||||
HW/Latte/Renderer/Renderer.cpp
|
||||
HW/Latte/Renderer/Renderer.h
|
||||
HW/Latte/Renderer/RendererOuputShader.cpp
|
||||
HW/Latte/Renderer/RendererOuputShader.h
|
||||
HW/Latte/Renderer/RendererShader.cpp
|
||||
HW/Latte/Renderer/RendererShader.h
|
||||
HW/Latte/Renderer/Vulkan/CachedFBOVk.cpp
|
||||
HW/Latte/Renderer/Vulkan/CachedFBOVk.h
|
||||
HW/Latte/Renderer/Vulkan/CocoaSurface.h
|
||||
HW/Latte/Renderer/Vulkan/LatteTextureViewVk.cpp
|
||||
HW/Latte/Renderer/Vulkan/LatteTextureViewVk.h
|
||||
HW/Latte/Renderer/Vulkan/LatteTextureVk.cpp
|
||||
HW/Latte/Renderer/Vulkan/LatteTextureVk.h
|
||||
HW/Latte/Renderer/Vulkan/RendererShaderVk.cpp
|
||||
HW/Latte/Renderer/Vulkan/RendererShaderVk.h
|
||||
HW/Latte/Renderer/Vulkan/SwapchainInfoVk.cpp
|
||||
HW/Latte/Renderer/Vulkan/SwapchainInfoVk.h
|
||||
HW/Latte/Renderer/Vulkan/TextureReadbackVk.cpp
|
||||
HW/Latte/Renderer/Vulkan/VKRBase.h
|
||||
HW/Latte/Renderer/Vulkan/VKRMemoryManager.cpp
|
||||
HW/Latte/Renderer/Vulkan/VKRMemoryManager.h
|
||||
HW/Latte/Renderer/Vulkan/VKRPipelineInfo.cpp
|
||||
HW/Latte/Renderer/Vulkan/VsyncDriver.cpp
|
||||
HW/Latte/Renderer/Vulkan/VsyncDriver.h
|
||||
HW/Latte/Renderer/Vulkan/VulkanAPI.cpp
|
||||
HW/Latte/Renderer/Vulkan/VulkanAPI.h
|
||||
HW/Latte/Renderer/Vulkan/VulkanPipelineCompiler.cpp
|
||||
HW/Latte/Renderer/Vulkan/VulkanPipelineCompiler.h
|
||||
HW/Latte/Renderer/Vulkan/VulkanPipelineStableCache.cpp
|
||||
HW/Latte/Renderer/Vulkan/VulkanPipelineStableCache.h
|
||||
HW/Latte/Renderer/Vulkan/VulkanQuery.cpp
|
||||
HW/Latte/Renderer/Vulkan/VulkanRendererCore.cpp
|
||||
HW/Latte/Renderer/Vulkan/VulkanRenderer.cpp
|
||||
HW/Latte/Renderer/Vulkan/VulkanRenderer.h
|
||||
HW/Latte/Renderer/Vulkan/VulkanSurfaceCopy.cpp
|
||||
HW/Latte/Renderer/Vulkan/VulkanTextureReadback.h
|
||||
HW/Latte/ShaderInfo/ShaderDescription.cpp
|
||||
HW/Latte/ShaderInfo/ShaderInfo.h
|
||||
HW/Latte/ShaderInfo/ShaderInstanceInfo.cpp
|
||||
@ -539,12 +493,72 @@ add_library(CemuCafe
|
||||
TitleList/TitleList.h
|
||||
)
|
||||
|
||||
if (ENABLE_OPENGL)
|
||||
target_sources(CemuCafe PRIVATE
|
||||
HW/Latte/Renderer/OpenGL/CachedFBOGL.h
|
||||
HW/Latte/Renderer/OpenGL/LatteTextureGL.cpp
|
||||
HW/Latte/Renderer/OpenGL/LatteTextureGL.h
|
||||
HW/Latte/Renderer/OpenGL/LatteTextureViewGL.cpp
|
||||
HW/Latte/Renderer/OpenGL/LatteTextureViewGL.h
|
||||
HW/Latte/Renderer/OpenGL/OpenGLQuery.cpp
|
||||
HW/Latte/Renderer/OpenGL/OpenGLRendererCore.cpp
|
||||
HW/Latte/Renderer/OpenGL/OpenGLRenderer.cpp
|
||||
HW/Latte/Renderer/OpenGL/OpenGLRenderer.h
|
||||
HW/Latte/Renderer/OpenGL/OpenGLRendererStreamout.cpp
|
||||
HW/Latte/Renderer/OpenGL/OpenGLRendererUniformData.cpp
|
||||
HW/Latte/Renderer/OpenGL/OpenGLSurfaceCopy.cpp
|
||||
HW/Latte/Renderer/OpenGL/OpenGLTextureReadback.h
|
||||
HW/Latte/Renderer/OpenGL/RendererShaderGL.cpp
|
||||
HW/Latte/Renderer/OpenGL/RendererShaderGL.h
|
||||
HW/Latte/Renderer/OpenGL/TextureReadbackGL.cpp
|
||||
)
|
||||
endif()
|
||||
|
||||
if (ENABLE_VULKAN)
|
||||
target_sources(CemuCafe PRIVATE
|
||||
HW/Latte/Renderer/Vulkan/CachedFBOVk.cpp
|
||||
HW/Latte/Renderer/Vulkan/CachedFBOVk.h
|
||||
HW/Latte/Renderer/Vulkan/CocoaSurface.h
|
||||
HW/Latte/Renderer/Vulkan/LatteTextureViewVk.cpp
|
||||
HW/Latte/Renderer/Vulkan/LatteTextureViewVk.h
|
||||
HW/Latte/Renderer/Vulkan/LatteTextureVk.cpp
|
||||
HW/Latte/Renderer/Vulkan/LatteTextureVk.h
|
||||
HW/Latte/Renderer/Vulkan/RendererShaderVk.cpp
|
||||
HW/Latte/Renderer/Vulkan/RendererShaderVk.h
|
||||
HW/Latte/Renderer/Vulkan/SwapchainInfoVk.cpp
|
||||
HW/Latte/Renderer/Vulkan/SwapchainInfoVk.h
|
||||
HW/Latte/Renderer/Vulkan/TextureReadbackVk.cpp
|
||||
HW/Latte/Renderer/Vulkan/VKRBase.h
|
||||
HW/Latte/Renderer/Vulkan/VKRMemoryManager.cpp
|
||||
HW/Latte/Renderer/Vulkan/VKRMemoryManager.h
|
||||
HW/Latte/Renderer/Vulkan/VKRPipelineInfo.cpp
|
||||
HW/Latte/Renderer/Vulkan/VsyncDriver.cpp
|
||||
HW/Latte/Renderer/Vulkan/VsyncDriver.h
|
||||
HW/Latte/Renderer/Vulkan/VulkanAPI.cpp
|
||||
HW/Latte/Renderer/Vulkan/VulkanAPI.h
|
||||
HW/Latte/Renderer/Vulkan/VulkanPipelineCompiler.cpp
|
||||
HW/Latte/Renderer/Vulkan/VulkanPipelineCompiler.h
|
||||
HW/Latte/Renderer/Vulkan/VulkanPipelineStableCache.cpp
|
||||
HW/Latte/Renderer/Vulkan/VulkanPipelineStableCache.h
|
||||
HW/Latte/Renderer/Vulkan/VulkanQuery.cpp
|
||||
HW/Latte/Renderer/Vulkan/VulkanRendererCore.cpp
|
||||
HW/Latte/Renderer/Vulkan/VulkanRenderer.cpp
|
||||
HW/Latte/Renderer/Vulkan/VulkanRenderer.h
|
||||
HW/Latte/Renderer/Vulkan/VulkanSurfaceCopy.cpp
|
||||
HW/Latte/Renderer/Vulkan/VulkanTextureReadback.h
|
||||
)
|
||||
endif()
|
||||
|
||||
if(APPLE)
|
||||
target_sources(CemuCafe PRIVATE
|
||||
HW/Latte/Renderer/Vulkan/CocoaSurface.mm
|
||||
HW/Latte/Renderer/MetalView.mm
|
||||
HW/Latte/Renderer/MetalView.h
|
||||
)
|
||||
if (ENABLE_VULKAN)
|
||||
target_sources(CemuCafe PRIVATE
|
||||
HW/Latte/Renderer/Vulkan/CocoaSurface.mm
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(ENABLE_METAL)
|
||||
|
||||
@ -9,7 +9,9 @@
|
||||
#include "Cafe/GameProfile/GameProfile.h"
|
||||
|
||||
#include "Cafe/HW/Latte/Core/LatteBufferCache.h"
|
||||
#ifdef ENABLE_VULKAN
|
||||
#include "Cafe/HW/Latte/Renderer/Vulkan/VulkanRenderer.h"
|
||||
#endif
|
||||
|
||||
template<int vectorLen>
|
||||
void rectGenerate4thVertex(uint32be* output, uint32be* input0, uint32be* input1, uint32be* input2)
|
||||
@ -199,6 +201,7 @@ bool LatteBufferCache_Sync(uint32 minIndex, uint32 maxIndex, uint32 baseInstance
|
||||
#if BOOST_OS_MACOS
|
||||
if(bufferStride % 4 != 0)
|
||||
{
|
||||
#ifdef ENABLE_VULKAN
|
||||
if (g_renderer->GetType() == RendererAPI::Vulkan)
|
||||
{
|
||||
if (VulkanRenderer* vkRenderer = VulkanRenderer::GetInstance())
|
||||
@ -208,6 +211,7 @@ bool LatteBufferCache_Sync(uint32 minIndex, uint32 maxIndex, uint32 baseInstance
|
||||
continue;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@ -6,7 +6,9 @@
|
||||
#include "Cafe/HW/Latte/LegacyShaderDecompiler/LatteDecompiler.h"
|
||||
#include "Cafe/HW/Latte/Core/FetchShader.h"
|
||||
#include "Cafe/HW/Latte/Core/LattePerformanceMonitor.h"
|
||||
#ifdef ENABLE_VULKAN
|
||||
#include "Cafe/HW/Latte/Renderer/Vulkan/VulkanRenderer.h"
|
||||
#endif
|
||||
#include "Cafe/OS/libs/gx2/GX2.h" // todo - remove dependency
|
||||
#include "Cafe/GraphicPack/GraphicPack2.h"
|
||||
#include "HW/Latte/Core/Latte.h"
|
||||
@ -683,20 +685,69 @@ uint64 LatteSHRC_CalcPSAuxHash(LatteDecompilerShader* pixelShader, uint32* conte
|
||||
return auxHash;
|
||||
}
|
||||
|
||||
void InitUniformLayoutFromDecompiler(
|
||||
LatteDecompilerShader* shader,
|
||||
const LatteDecompilerOutput_t& decompilerOutput
|
||||
)
|
||||
{
|
||||
const auto& offsets = decompilerOutput.uniformOffsetsVK;
|
||||
|
||||
shader->uniform.loc_remapped = offsets.offset_remapped;
|
||||
shader->uniform.loc_uniformRegister = offsets.offset_uniformRegister;
|
||||
shader->uniform.count_uniformRegister = offsets.count_uniformRegister;
|
||||
shader->uniform.loc_windowSpaceToClipSpaceTransform = offsets.offset_windowSpaceToClipSpaceTransform;
|
||||
shader->uniform.loc_alphaTestRef = offsets.offset_alphaTestRef;
|
||||
shader->uniform.loc_pointSize = offsets.offset_pointSize;
|
||||
shader->uniform.loc_fragCoordScale = offsets.offset_fragCoordScale;
|
||||
|
||||
// Texture scale uniforms
|
||||
shader->uniform.list_ufTexRescale.clear();
|
||||
for (sint32 t = 0; t < LATTE_NUM_MAX_TEX_UNITS; t++)
|
||||
{
|
||||
if (offsets.offset_texScale[t] >= 0)
|
||||
{
|
||||
LatteUniformTextureScaleEntry_t entry{};
|
||||
entry.texUnit = t;
|
||||
entry.uniformLocation = offsets.offset_texScale[t];
|
||||
shader->uniform.list_ufTexRescale.push_back(entry);
|
||||
}
|
||||
}
|
||||
|
||||
shader->uniform.loc_verticesPerInstance = offsets.offset_verticesPerInstance;
|
||||
|
||||
// Streamout buffers
|
||||
for (sint32 t = 0; t < LATTE_NUM_STREAMOUT_BUFFER; t++)
|
||||
{
|
||||
shader->uniform.loc_streamoutBufferBase[t] = offsets.offset_streamoutBufferBase[t];
|
||||
}
|
||||
|
||||
shader->uniform.uniformRangeSize = offsets.offset_endOfBlock;
|
||||
}
|
||||
|
||||
LatteDecompilerShader* LatteShader_CreateShaderFromDecompilerOutput(LatteDecompilerOutput_t& decompilerOutput, uint64 baseHash, bool calculateAuxHash, uint64 optionalAuxHash, uint32* contextRegister)
|
||||
{
|
||||
LatteDecompilerShader* shader = decompilerOutput.shader;
|
||||
shader->baseHash = baseHash;
|
||||
// copy resource mapping
|
||||
// HACK
|
||||
if (g_renderer->GetType() == RendererAPI::OpenGL)
|
||||
switch (g_renderer->GetType())
|
||||
{
|
||||
#ifdef ENABLE_OPENGL
|
||||
case RendererAPI::OpenGL:
|
||||
shader->resourceMapping = decompilerOutput.resourceMappingGL;
|
||||
else if (g_renderer->GetType() == RendererAPI::Vulkan)
|
||||
shader->resourceMapping = decompilerOutput.resourceMappingVK;
|
||||
#if ENABLE_METAL
|
||||
else
|
||||
shader->resourceMapping = decompilerOutput.resourceMappingMTL;
|
||||
break;
|
||||
#endif
|
||||
#ifdef ENABLE_VULKAN
|
||||
case RendererAPI::Vulkan:
|
||||
shader->resourceMapping = decompilerOutput.resourceMappingVK;
|
||||
break;
|
||||
#endif
|
||||
#if ENABLE_METAL
|
||||
case RendererAPI::Metal:
|
||||
shader->resourceMapping = decompilerOutput.resourceMappingMTL;
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
// copy texture info
|
||||
shader->textureUnitMask2 = decompilerOutput.textureUnitMask;
|
||||
// copy streamout info
|
||||
@ -705,33 +756,23 @@ LatteDecompilerShader* LatteShader_CreateShaderFromDecompilerOutput(LatteDecompi
|
||||
// copy uniform offsets
|
||||
// for OpenGL these are retrieved in _prepareSeparableUniforms()
|
||||
// HACK
|
||||
if (g_renderer->GetType() == RendererAPI::Vulkan || g_renderer->GetType() == RendererAPI::Metal)
|
||||
{
|
||||
shader->uniform.loc_remapped = decompilerOutput.uniformOffsetsVK.offset_remapped;
|
||||
shader->uniform.loc_uniformRegister = decompilerOutput.uniformOffsetsVK.offset_uniformRegister;
|
||||
shader->uniform.count_uniformRegister = decompilerOutput.uniformOffsetsVK.count_uniformRegister;
|
||||
shader->uniform.loc_windowSpaceToClipSpaceTransform = decompilerOutput.uniformOffsetsVK.offset_windowSpaceToClipSpaceTransform;
|
||||
shader->uniform.loc_alphaTestRef = decompilerOutput.uniformOffsetsVK.offset_alphaTestRef;
|
||||
shader->uniform.loc_pointSize = decompilerOutput.uniformOffsetsVK.offset_pointSize;
|
||||
shader->uniform.loc_fragCoordScale = decompilerOutput.uniformOffsetsVK.offset_fragCoordScale;
|
||||
for (sint32 t = 0; t < LATTE_NUM_MAX_TEX_UNITS; t++)
|
||||
{
|
||||
if (decompilerOutput.uniformOffsetsVK.offset_texScale[t] >= 0)
|
||||
{
|
||||
LatteUniformTextureScaleEntry_t entry = { 0 };
|
||||
entry.texUnit = t;
|
||||
entry.uniformLocation = decompilerOutput.uniformOffsetsVK.offset_texScale[t];
|
||||
shader->uniform.list_ufTexRescale.push_back(entry);
|
||||
}
|
||||
}
|
||||
shader->uniform.loc_verticesPerInstance = decompilerOutput.uniformOffsetsVK.offset_verticesPerInstance;
|
||||
for (sint32 t = 0; t < LATTE_NUM_STREAMOUT_BUFFER; t++)
|
||||
shader->uniform.loc_streamoutBufferBase[t] = decompilerOutput.uniformOffsetsVK.offset_streamoutBufferBase[t];
|
||||
shader->uniform.uniformRangeSize = decompilerOutput.uniformOffsetsVK.offset_endOfBlock;
|
||||
}
|
||||
else
|
||||
switch (g_renderer->GetType())
|
||||
{
|
||||
#ifdef ENABLE_OPENGL
|
||||
case RendererAPI::OpenGL:
|
||||
shader->uniform.count_uniformRegister = decompilerOutput.uniformOffsetsGL.count_uniformRegister;
|
||||
break;
|
||||
#endif
|
||||
#ifdef ENABLE_VULKAN
|
||||
case RendererAPI::Vulkan:
|
||||
InitUniformLayoutFromDecompiler(shader, decompilerOutput);
|
||||
break;
|
||||
#endif
|
||||
#if ENABLE_METAL
|
||||
case RendererAPI::Metal:
|
||||
InitUniformLayoutFromDecompiler(shader, decompilerOutput);
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
// calculate aux hash
|
||||
if (calculateAuxHash)
|
||||
@ -766,10 +807,12 @@ void LatteShader_GetDecompilerOptions(LatteDecompilerOptions& options, LatteCons
|
||||
options.usesGeometryShader = geometryShaderEnabled;
|
||||
options.spirvInstrinsics.hasRoundingModeRTEFloat32 = false;
|
||||
options.useTFViaSSBO = g_renderer->UseTFViaSSBO();
|
||||
#ifdef ENABLE_VULKAN
|
||||
if (g_renderer->GetType() == RendererAPI::Vulkan)
|
||||
{
|
||||
options.spirvInstrinsics.hasRoundingModeRTEFloat32 = VulkanRenderer::GetInstance()->HasSPRIVRoundingModeRTE32();
|
||||
}
|
||||
#endif
|
||||
options.strictMul = g_current_game_profile->GetAccurateShaderMul() != AccurateShaderMulOption::False;
|
||||
}
|
||||
|
||||
|
||||
@ -9,13 +9,17 @@
|
||||
#include "WindowSystem.h"
|
||||
|
||||
#include "Cafe/HW/Latte/Renderer/Renderer.h"
|
||||
#ifdef ENABLE_OPENGL
|
||||
#include "Cafe/HW/Latte/Renderer/OpenGL/RendererShaderGL.h"
|
||||
#endif
|
||||
#ifdef ENABLE_VULKAN
|
||||
#include "Cafe/HW/Latte/Renderer/Vulkan/RendererShaderVk.h"
|
||||
#include "Cafe/HW/Latte/Renderer/Vulkan/VulkanPipelineStableCache.h"
|
||||
#endif
|
||||
#if ENABLE_METAL
|
||||
#include "Cafe/HW/Latte/Renderer/Metal/RendererShaderMtl.h"
|
||||
#include "Cafe/HW/Latte/Renderer/Metal/MetalPipelineCache.h"
|
||||
#endif
|
||||
#include "Cafe/HW/Latte/Renderer/Vulkan/VulkanPipelineStableCache.h"
|
||||
|
||||
#include <imgui.h>
|
||||
#include "imgui/imgui_extension.h"
|
||||
@ -273,13 +277,23 @@ static BootSoundPlayer g_bootSndPlayer;
|
||||
|
||||
void LatteShaderCache_finish()
|
||||
{
|
||||
if (g_renderer->GetType() == RendererAPI::Vulkan)
|
||||
switch (g_renderer->GetType())
|
||||
{
|
||||
#ifdef ENABLE_VULKAN
|
||||
case: RendererAPI::Vulkan:
|
||||
RendererShaderVk::ShaderCacheLoading_end();
|
||||
else if (g_renderer->GetType() == RendererAPI::OpenGL)
|
||||
return;
|
||||
#endif
|
||||
#ifdef ENABLE_OPENGL
|
||||
case RendererAPI::OpenGL:
|
||||
RendererShaderGL::ShaderCacheLoading_end();
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
#if ENABLE_METAL
|
||||
else if (g_renderer->GetType() == RendererAPI::Metal)
|
||||
RendererShaderMtl::ShaderCacheLoading_end();
|
||||
case RendererAPI::Metal:
|
||||
RendererShaderMtl::ShaderCacheLoading_end();
|
||||
return;
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -359,14 +373,24 @@ void LatteShaderCache_Load()
|
||||
fs::create_directories(ActiveSettings::GetCachePath("shaderCache/transferable"), ec);
|
||||
fs::create_directories(ActiveSettings::GetCachePath("shaderCache/precompiled"), ec);
|
||||
// initialize renderer specific caches
|
||||
if (g_renderer->GetType() == RendererAPI::Vulkan)
|
||||
switch(g_renderer->GetType())
|
||||
{
|
||||
#ifdef ENABLE_VULKAN
|
||||
case: RendererAPI::Vulkan
|
||||
RendererShaderVk::ShaderCacheLoading_begin(cacheTitleId);
|
||||
else if (g_renderer->GetType() == RendererAPI::OpenGL)
|
||||
RendererShaderGL::ShaderCacheLoading_begin(cacheTitleId);
|
||||
#if ENABLE_METAL
|
||||
else if (g_renderer->GetType() == RendererAPI::Metal)
|
||||
RendererShaderMtl::ShaderCacheLoading_begin(cacheTitleId);
|
||||
break;
|
||||
#endif
|
||||
#ifdef ENABLE_OPENGL
|
||||
case: RendererAPI::OpenGL:
|
||||
RendererShaderGL::ShaderCacheLoading_begin(cacheTitleId);
|
||||
break;
|
||||
#endif
|
||||
#if ENABLE_METAL
|
||||
case: RendererAPI::Metal:
|
||||
RendererShaderMtl::ShaderCacheLoading_begin(cacheTitleId);
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
|
||||
// get cache file name
|
||||
fs::path pathGeneric;
|
||||
@ -634,31 +658,52 @@ void LatteShaderCache_ShowProgress(const std::function <bool(void)>& loadUpdateF
|
||||
|
||||
void LatteShaderCache_LoadPipelineCache(uint64 cacheTitleId)
|
||||
{
|
||||
if (g_renderer->GetType() == RendererAPI::Vulkan)
|
||||
switch(g_renderer->GetType())
|
||||
{
|
||||
#ifdef ENABLE_VULKAN
|
||||
case RendererAPI::Vulkan:
|
||||
g_shaderCacheLoaderState.pipelineFileCount = VulkanPipelineStableCache::GetInstance().BeginLoading(cacheTitleId);
|
||||
break;
|
||||
#endif
|
||||
#if ENABLE_METAL
|
||||
else if (g_renderer->GetType() == RendererAPI::Metal)
|
||||
case RendererAPI::Metal:
|
||||
g_shaderCacheLoaderState.pipelineFileCount = MetalPipelineCache::GetInstance().BeginLoading(cacheTitleId);
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
|
||||
g_shaderCacheLoaderState.loadedPipelines = 0;
|
||||
LatteShaderCache_ShowProgress(LatteShaderCache_updatePipelineLoadingProgress, true);
|
||||
if (g_renderer->GetType() == RendererAPI::Vulkan)
|
||||
|
||||
switch(g_renderer->GetType())
|
||||
{
|
||||
#ifdef ENABLE_VULKAN
|
||||
case RendererAPI::Vulkan:
|
||||
VulkanPipelineStableCache::GetInstance().EndLoading();
|
||||
#if ENABLE_METAL
|
||||
else if (g_renderer->GetType() == RendererAPI::Metal)
|
||||
MetalPipelineCache::GetInstance().EndLoading();
|
||||
break;
|
||||
#endif
|
||||
#if ENABLE_METAL
|
||||
case RendererAPI::Metal:
|
||||
MetalPipelineCache::GetInstance().EndLoading();
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
bool LatteShaderCache_updatePipelineLoadingProgress()
|
||||
{
|
||||
uint32 pipelinesMissingShaders = 0;
|
||||
if (g_renderer->GetType() == RendererAPI::Vulkan)
|
||||
switch(g_renderer->GetType())
|
||||
{
|
||||
#ifdef ENABLE_VULKAN
|
||||
case RendererAPI::Vulkan:
|
||||
return VulkanPipelineStableCache::GetInstance().UpdateLoading(g_shaderCacheLoaderState.loadedPipelines, pipelinesMissingShaders);
|
||||
#endif
|
||||
#if ENABLE_METAL
|
||||
else if (g_renderer->GetType() == RendererAPI::Metal)
|
||||
case RendererAPI::Metal:
|
||||
return MetalPipelineCache::GetInstance().UpdateLoading(g_shaderCacheLoaderState.loadedPipelines, pipelinesMissingShaders);
|
||||
#endif
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
@ -918,20 +963,36 @@ void LatteShaderCache_Close()
|
||||
delete s_shaderCacheGeneric;
|
||||
s_shaderCacheGeneric = nullptr;
|
||||
}
|
||||
if (g_renderer->GetType() == RendererAPI::Vulkan)
|
||||
switch(g_renderer->GetType())
|
||||
{
|
||||
#ifdef ENABLE_VULKAN
|
||||
case RendererAPI::Vulkan:
|
||||
RendererShaderVk::ShaderCacheLoading_Close();
|
||||
else if (g_renderer->GetType() == RendererAPI::OpenGL)
|
||||
break;
|
||||
#endif
|
||||
#ifdef ENABLE_OPENGL
|
||||
case RendererAPI::OpenGL:
|
||||
RendererShaderGL::ShaderCacheLoading_Close();
|
||||
break;
|
||||
#endif
|
||||
#if ENABLE_METAL
|
||||
else if (g_renderer->GetType() == RendererAPI::Metal)
|
||||
RendererShaderMtl::ShaderCacheLoading_Close();
|
||||
case RendererAPI::Metal:
|
||||
RendererShaderMtl::ShaderCacheLoading_Close();
|
||||
break;
|
||||
#endif
|
||||
|
||||
// if Vulkan or Metal then also close pipeline cache
|
||||
if (g_renderer->GetType() == RendererAPI::Vulkan)
|
||||
VulkanPipelineStableCache::GetInstance().Close();
|
||||
switch(g_renderer->GetType())
|
||||
{
|
||||
#ifdef ENABLE_VULKAN
|
||||
case: RendererAPI::Vulkan:
|
||||
VulkanPipelineStableCache::GetInstance().Close();
|
||||
break;
|
||||
#endif
|
||||
#if ENABLE_METAL
|
||||
else if (g_renderer->GetType() == RendererAPI::Metal)
|
||||
MetalPipelineCache::GetInstance().Close();
|
||||
case: RendererAPI::Metal:
|
||||
MetalPipelineCache::GetInstance().Close();
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@ -4,9 +4,11 @@
|
||||
|
||||
#include "Cafe/HW/Latte/Renderer/Renderer.h"
|
||||
|
||||
#ifdef ENABLE_OPENGL
|
||||
#include "Cafe/HW/Latte/Renderer/OpenGL/OpenGLRenderer.h"
|
||||
#include "Cafe/HW/Latte/Renderer/OpenGL/LatteTextureGL.h"
|
||||
#include "Cafe/HW/Latte/Renderer/OpenGL/LatteTextureViewGL.h"
|
||||
#endif
|
||||
|
||||
struct TexScaleXY
|
||||
{
|
||||
@ -192,6 +194,7 @@ void LatteTexture_updateTexturesForStage(LatteDecompilerShader* shaderContext, u
|
||||
LatteGPUState.repeatTextureInitialization = true;
|
||||
}
|
||||
|
||||
#ifdef ENABLE_OPENGL
|
||||
if (g_renderer->GetType() == RendererAPI::OpenGL)
|
||||
{
|
||||
// on OpenGL, texture views and sampler parameters are tied together (we are avoiding sampler objects due to driver bugs)
|
||||
@ -214,6 +217,7 @@ void LatteTexture_updateTexturesForStage(LatteDecompilerShader* shaderContext, u
|
||||
textureView->lastTextureBindIndex = LatteGPUState.textureBindCounter;
|
||||
rendererGL->renderstate_updateTextureSettingsGL(shaderContext, textureView, textureIndex + glBackendBaseTexUnit, word4, textureIndex, isDepthSampler);
|
||||
}
|
||||
#endif
|
||||
g_renderer->texture_setLatteTexture(textureView, textureIndex + glBackendBaseTexUnit);
|
||||
// update if data changed
|
||||
bool swizzleChanged = false;
|
||||
|
||||
@ -6,7 +6,9 @@
|
||||
|
||||
#include "Cafe/HW/Latte/Renderer/Renderer.h"
|
||||
#include "Cafe/HW/Latte/Core/LatteTexture.h"
|
||||
#ifdef ENABLE_OPENGL
|
||||
#include "Cafe/HW/Latte/Renderer/OpenGL/LatteTextureViewGL.h"
|
||||
#endif
|
||||
|
||||
#define LOG_READBACK_TIME
|
||||
|
||||
|
||||
@ -1,6 +1,8 @@
|
||||
#include "Cafe/HW/Latte/Core/Latte.h"
|
||||
#include "Cafe/OS/libs/gx2/GX2_Event.h"
|
||||
#ifdef ENABLE_VULKAN
|
||||
#include "Cafe/HW/Latte/Renderer/Vulkan/VsyncDriver.h"
|
||||
#endif
|
||||
#include "util/highresolutiontimer/HighResolutionTimer.h"
|
||||
#include "config/CemuConfig.h"
|
||||
#include "Cafe/CafeSystem.h"
|
||||
@ -55,8 +57,10 @@ void LatteTiming_EnableHostDrivenVSync()
|
||||
{
|
||||
if (s_usingHostDrivenVSync)
|
||||
return;
|
||||
#ifdef ENABLE_VULKAN
|
||||
VsyncDriver_startThread(LatteTiming_NotifyHostVSync);
|
||||
s_usingHostDrivenVSync = true;
|
||||
#endif
|
||||
}
|
||||
|
||||
bool LatteTiming_IsUsingHostDrivenVSync()
|
||||
|
||||
@ -1,5 +1,9 @@
|
||||
#include "Cafe/HW/Latte/Renderer/RendererOuputShader.h"
|
||||
#include "Cafe/HW/Latte/Renderer/Renderer.h"
|
||||
#include "Cafe/HW/Latte/Core/Latte.h"
|
||||
#ifdef ENABLE_OPENGL
|
||||
#include "Cafe/HW/Latte/Renderer/OpenGL/OpenGLRenderer.h"
|
||||
#endif
|
||||
#include "config/ActiveSettings.h"
|
||||
|
||||
const std::string RendererOutputShader::s_copy_shader_source =
|
||||
|
||||
@ -1,7 +1,9 @@
|
||||
#include "Cafe/GameProfile/GameProfile.h"
|
||||
#include "Cafe/IOSU/legacy/iosu_crypto.h"
|
||||
#include "Cafe/HW/Latte/Core/Latte.h"
|
||||
#ifdef ENABLE_VULKAN
|
||||
#include "Cafe/HW/Latte/Renderer/Vulkan/VulkanAPI.h"
|
||||
#endif
|
||||
#include "Cafe/CafeSystem.h"
|
||||
#include "Cemu/Logging/CemuLogging.h"
|
||||
#include "config/ActiveSettings.h"
|
||||
@ -107,9 +109,12 @@ bool ActiveSettings::WaitForGX2DrawDoneEnabled()
|
||||
GraphicAPI ActiveSettings::GetGraphicsAPI()
|
||||
{
|
||||
GraphicAPI api = g_current_game_profile->GetGraphicsAPI().value_or(GetConfig().graphic_api);
|
||||
|
||||
#ifdef ENABLE_VULKAN && HAS_OPENGL
|
||||
// check if vulkan even available
|
||||
if (api == kVulkan && !g_vulkan_available)
|
||||
api = kOpenGL;
|
||||
#endif
|
||||
|
||||
return api;
|
||||
}
|
||||
|
||||
@ -1,9 +1,5 @@
|
||||
add_library(CemuWxGui STATIC
|
||||
canvas/IRenderCanvas.h
|
||||
canvas/OpenGLCanvas.cpp
|
||||
canvas/OpenGLCanvas.h
|
||||
canvas/VulkanCanvas.cpp
|
||||
canvas/VulkanCanvas.h
|
||||
CemuApp.cpp
|
||||
CemuApp.h
|
||||
CemuUpdateWindow.cpp
|
||||
@ -116,6 +112,20 @@ add_library(CemuWxGui STATIC
|
||||
wxHelper.h
|
||||
)
|
||||
|
||||
if (ENABLE_OPENGL)
|
||||
target_sources(CemuWxGui PRIVATE
|
||||
canvas/OpenGLCanvas.cpp
|
||||
canvas/OpenGLCanvas.h
|
||||
)
|
||||
endif()
|
||||
|
||||
if (ENABLE_VULKAN)
|
||||
target_sources(CemuWxGui PRIVATE
|
||||
canvas/VulkanCanvas.cpp
|
||||
canvas/VulkanCanvas.h
|
||||
)
|
||||
endif()
|
||||
|
||||
if (ENABLE_METAL)
|
||||
target_sources(CemuWxGui PRIVATE
|
||||
canvas/MetalCanvas.cpp
|
||||
|
||||
@ -3,7 +3,9 @@
|
||||
#include "wxgui/MainWindow.h"
|
||||
#include "wxgui/wxgui.h"
|
||||
#include "config/CemuConfig.h"
|
||||
#ifdef ENABLE_VULKAN
|
||||
#include "Cafe/HW/Latte/Renderer/Vulkan/VulkanAPI.h"
|
||||
#endif
|
||||
#include "Cafe/HW/Latte/Core/LatteOverlay.h"
|
||||
#include "config/ActiveSettings.h"
|
||||
#include "config/LaunchSettings.h"
|
||||
@ -349,7 +351,9 @@ bool CemuApp::OnInit()
|
||||
__fastfail(0);
|
||||
}
|
||||
#endif
|
||||
#ifdef ENABLE_VULKAN
|
||||
InitializeGlobalVulkan();
|
||||
#endif
|
||||
|
||||
Bind(wxEVT_ACTIVATE_APP, &CemuApp::ActivateApp, this);
|
||||
|
||||
|
||||
@ -11,8 +11,12 @@
|
||||
#include "wxgui/windows/TextureRelationViewer/TextureRelationWindow.h"
|
||||
#include "wxgui/windows/PPCThreadsViewer/DebugPPCThreadsWindow.h"
|
||||
#include "AudioDebuggerWindow.h"
|
||||
#ifdef ENABLE_OPENGL
|
||||
#include "wxgui/canvas/OpenGLCanvas.h"
|
||||
#endif
|
||||
#ifdef ENABLE_VULKAN
|
||||
#include "wxgui/canvas/VulkanCanvas.h"
|
||||
#endif
|
||||
#if ENABLE_METAL
|
||||
#include "wxgui/canvas/MetalCanvas.h"
|
||||
#endif
|
||||
@ -42,7 +46,9 @@
|
||||
#include "wxgui/DownloadGraphicPacksWindow.h"
|
||||
#include "wxgui/GettingStartedDialog.h"
|
||||
#include "wxgui/helpers/wxHelpers.h"
|
||||
#ifdef ENABLE_VULKAN
|
||||
#include "Cafe/HW/Latte/Renderer/Vulkan/VsyncDriver.h"
|
||||
#endif
|
||||
#include "wxgui/input/InputSettings2.h"
|
||||
#include "wxgui/input/HotkeySettings.h"
|
||||
#include "input/InputManager.h"
|
||||
@ -1601,15 +1607,25 @@ void MainWindow::CreateCanvas()
|
||||
this->GetSizer()->Add(m_game_panel, 1, wxEXPAND);
|
||||
|
||||
// create canvas
|
||||
if (ActiveSettings::GetGraphicsAPI() == kVulkan)
|
||||
if (ActiveSettings::GetGraphicsAPI() == kVulkan)
|
||||
{
|
||||
#ifdef ENABLE_VULKAN
|
||||
m_render_canvas = new VulkanCanvas(m_game_panel, wxSize(1280, 720), true);
|
||||
#endif
|
||||
}
|
||||
else if (ActiveSettings::GetGraphicsAPI() == kOpenGL)
|
||||
{
|
||||
#ifdef ENABLE_OPENGL
|
||||
m_render_canvas = GLCanvas_Create(m_game_panel, wxSize(1280, 720), true);
|
||||
#endif
|
||||
}
|
||||
#if ENABLE_METAL
|
||||
else
|
||||
m_render_canvas = new MetalCanvas(m_game_panel, wxSize(1280, 720), true);
|
||||
#endif
|
||||
|
||||
cemu_assert(m_render_canvas != nullptr);
|
||||
|
||||
// mouse events
|
||||
m_render_canvas->Bind(wxEVT_MOTION, &MainWindow::OnMouseMove, this);
|
||||
m_render_canvas->Bind(wxEVT_MOUSEWHEEL, &MainWindow::OnMouseWheel, this);
|
||||
@ -1670,7 +1686,9 @@ void MainWindow::OnSizeEvent(wxSizeEvent& event)
|
||||
|
||||
event.Skip();
|
||||
|
||||
#ifdef ENABLE_VULKAN
|
||||
VsyncDriver_notifyWindowPosChanged();
|
||||
#endif
|
||||
}
|
||||
|
||||
void MainWindow::OnDPIChangedEvent(wxDPIChangedEvent& event)
|
||||
@ -1691,7 +1709,9 @@ void MainWindow::OnMove(wxMoveEvent& event)
|
||||
|
||||
if (m_debugger_window && m_debugger_window->IsShown())
|
||||
m_debugger_window->OnParentMove(GetPosition(), GetSize());
|
||||
#ifdef ENABLE_VULKAN
|
||||
VsyncDriver_notifyWindowPosChanged();
|
||||
#endif
|
||||
}
|
||||
|
||||
void MainWindow::OnDebuggerClose(wxCloseEvent& event)
|
||||
|
||||
@ -6,8 +6,12 @@
|
||||
|
||||
#include "config/ActiveSettings.h"
|
||||
#include "Cafe/OS/libs/swkbd/swkbd.h"
|
||||
#ifdef ENABLE_OPENGL
|
||||
#include "wxgui/canvas/OpenGLCanvas.h"
|
||||
#endif
|
||||
#ifdef ENABLE_VULKAN
|
||||
#include "wxgui/canvas/VulkanCanvas.h"
|
||||
#endif
|
||||
#if ENABLE_METAL
|
||||
#include "wxgui/canvas/MetalCanvas.h"
|
||||
#endif
|
||||
@ -76,15 +80,24 @@ void PadViewFrame::InitializeRenderCanvas()
|
||||
auto sizer = new wxBoxSizer(wxVERTICAL);
|
||||
{
|
||||
if (ActiveSettings::GetGraphicsAPI() == kVulkan)
|
||||
{
|
||||
#ifdef ENABLE_VULKAN
|
||||
m_render_canvas = new VulkanCanvas(this, wxSize(854, 480), false);
|
||||
#endif
|
||||
}
|
||||
else if (ActiveSettings::GetGraphicsAPI() == kOpenGL)
|
||||
{
|
||||
#ifdef ENABLE_OPENGL
|
||||
m_render_canvas = GLCanvas_Create(this, wxSize(854, 480), false);
|
||||
#endif
|
||||
}
|
||||
#if ENABLE_METAL
|
||||
else
|
||||
m_render_canvas = new MetalCanvas(this, wxSize(854, 480), false);
|
||||
#endif
|
||||
sizer->Add(m_render_canvas, 1, wxEXPAND, 0, nullptr);
|
||||
}
|
||||
cemu_assert(m_render_canvas != nullptr);
|
||||
SetSizer(sizer);
|
||||
Layout();
|
||||
|
||||
|
||||
@ -1,12 +1,22 @@
|
||||
add_library(imguiImpl
|
||||
imgui_impl_opengl3.cpp
|
||||
imgui_impl_opengl3.h
|
||||
imgui_impl_vulkan.cpp
|
||||
imgui_impl_vulkan.h
|
||||
imgui_extension.cpp
|
||||
imgui_extension.h
|
||||
)
|
||||
|
||||
if (ENABLE_OPENGL)
|
||||
target_sources(imguiImpl PRIVATE
|
||||
imgui_impl_opengl3.cpp
|
||||
imgui_impl_opengl3.h
|
||||
)
|
||||
endif()
|
||||
|
||||
if (ENABLE_VULKAN)
|
||||
target_sources(imguiImpl PRIVATE
|
||||
imgui_impl_vulkan.cpp
|
||||
imgui_impl_vulkan.h
|
||||
)
|
||||
endif()
|
||||
|
||||
if (ENABLE_METAL)
|
||||
target_sources(imguiImpl PRIVATE
|
||||
imgui_impl_metal.mm
|
||||
|
||||
@ -2,9 +2,13 @@
|
||||
#include "WindowSystem.h"
|
||||
#include "Cafe/HW/Latte/Renderer/Renderer.h"
|
||||
#include "resource/IconsFontAwesome5.h"
|
||||
#include "imgui_impl_opengl3.h"
|
||||
#include "resource/resource.h"
|
||||
#ifdef ENABLE_OPENGL
|
||||
#include "imgui_impl_opengl3.h"
|
||||
#endif
|
||||
#ifdef ENABLE_VULKAN
|
||||
#include "imgui_impl_vulkan.h"
|
||||
#endif
|
||||
#include "input/InputManager.h"
|
||||
|
||||
// <imgui_internal.h>
|
||||
|
||||
@ -19,7 +19,6 @@
|
||||
|
||||
#include "util/helpers/helpers.h"
|
||||
#include "config/ActiveSettings.h"
|
||||
#include "Cafe/HW/Latte/Renderer/Vulkan/VsyncDriver.h"
|
||||
|
||||
#include "Cafe/IOSU/legacy/iosu_crypto.h"
|
||||
#include "Cafe/OS/libs/vpad/vpad.h"
|
||||
@ -65,6 +64,7 @@ void _putenvSafe(const char* c)
|
||||
_putenv(s->c_str());
|
||||
}
|
||||
|
||||
#ifdef ENABLE_OPENGL
|
||||
void reconfigureGLDrivers()
|
||||
{
|
||||
// reconfigure GL drivers to store
|
||||
@ -85,12 +85,15 @@ void reconfigureGLDrivers()
|
||||
_putenvSafe("__GL_SHADER_DISK_CACHE_SKIP_CLEANUP=1");
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_VULKAN
|
||||
void reconfigureVkDrivers()
|
||||
{
|
||||
_putenvSafe("DISABLE_LAYER_AMD_SWITCHABLE_GRAPHICS_1=1");
|
||||
_putenvSafe("DISABLE_VK_LAYER_VALVE_steam_fossilize_1=1");
|
||||
}
|
||||
#endif
|
||||
|
||||
void WindowsInitCwd()
|
||||
{
|
||||
@ -109,8 +112,12 @@ void WindowsInitCwd()
|
||||
|
||||
void CemuCommonInit()
|
||||
{
|
||||
#ifdef ENABLE_OPENGL
|
||||
reconfigureGLDrivers();
|
||||
#endif
|
||||
#ifdef ENABLE_VULKAN
|
||||
reconfigureVkDrivers();
|
||||
#endif
|
||||
// crypto init
|
||||
AES128_init();
|
||||
// init PPC timer
|
||||
|
||||
Loading…
Reference in New Issue
Block a user