From f4ea3ccf22bdfb2dc8124f15367b2032e9db7254 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Sun, 1 Nov 2020 13:02:53 +0100 Subject: [PATCH] Move the generic vertex shader generator into GPU/Common and rename it. --- CMakeLists.txt | 4 ++-- GPU/Common/ShaderCommon.h | 13 +++++++++++++ .../VertexShaderGenerator.cpp} | 5 ++--- .../VertexShaderGenerator.h} | 2 +- GPU/D3D11/ShaderManagerD3D11.cpp | 4 ++-- GPU/Directx9/ShaderManagerDX9.cpp | 4 ++-- GPU/Directx9/ShaderManagerDX9.h | 2 +- GPU/GLES/ShaderManagerGLES.cpp | 2 +- GPU/GLES/ShaderManagerGLES.h | 15 +-------------- GPU/GPU.vcxproj | 14 ++------------ GPU/GPU.vcxproj.filters | 12 ++++++------ GPU/Vulkan/ShaderManagerVulkan.cpp | 8 ++++---- GPU/Vulkan/ShaderManagerVulkan.h | 2 +- UWP/GPU_UWP/GPU_UWP.vcxproj | 4 ++-- UWP/GPU_UWP/GPU_UWP.vcxproj.filters | 4 ++-- android/jni/Android.mk | 6 +++--- libretro/Makefile.common | 2 +- unittest/TestShaderGenerators.cpp | 14 ++++++-------- 18 files changed, 52 insertions(+), 65 deletions(-) rename GPU/{GLES/VertexShaderGeneratorGLES.cpp => Common/VertexShaderGenerator.cpp} (99%) rename GPU/{GLES/VertexShaderGeneratorGLES.h => Common/VertexShaderGenerator.h} (90%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1932011ccf..dad85680cb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1250,8 +1250,6 @@ set(GPU_GLES GPU/GLES/TextureScalerGLES.h GPU/GLES/DrawEngineGLES.cpp GPU/GLES/DrawEngineGLES.h - GPU/GLES/VertexShaderGeneratorGLES.cpp - GPU/GLES/VertexShaderGeneratorGLES.h ) set(GPU_VULKAN @@ -1340,6 +1338,8 @@ set(GPU_SOURCES GPU/Common/DepalettizeShaderCommon.h GPU/Common/FragmentShaderGenerator.cpp GPU/Common/FragmentShaderGenerator.h + GPU/Common/VertexShaderGenerator.cpp + GPU/Common/VertexShaderGenerator.h GPU/Common/FramebufferManagerCommon.cpp GPU/Common/FramebufferManagerCommon.h GPU/Common/GPUDebugInterface.cpp diff --git a/GPU/Common/ShaderCommon.h b/GPU/Common/ShaderCommon.h index 02f797b869..34594dfba7 100644 --- a/GPU/Common/ShaderCommon.h +++ b/GPU/Common/ShaderCommon.h @@ -176,3 +176,16 @@ enum class PspAttributeLocation { COUNT }; + +// Pre-fetched attrs and uniforms (used by GL only). +enum { + ATTR_POSITION = 0, + ATTR_TEXCOORD = 1, + ATTR_NORMAL = 2, + ATTR_W1 = 3, + ATTR_W2 = 4, + ATTR_COLOR0 = 5, + ATTR_COLOR1 = 6, + + ATTR_COUNT, +}; diff --git a/GPU/GLES/VertexShaderGeneratorGLES.cpp b/GPU/Common/VertexShaderGenerator.cpp similarity index 99% rename from GPU/GLES/VertexShaderGeneratorGLES.cpp rename to GPU/Common/VertexShaderGenerator.cpp index 1ee37b0fc4..f2116cd105 100644 --- a/GPU/GLES/VertexShaderGeneratorGLES.cpp +++ b/GPU/Common/VertexShaderGenerator.cpp @@ -27,8 +27,7 @@ #include "GPU/Common/ShaderId.h" #include "GPU/Common/ShaderUniforms.h" #include "GPU/Common/VertexDecoderCommon.h" -#include "GPU/GLES/VertexShaderGeneratorGLES.h" -#include "GPU/GLES/ShaderManagerGLES.h" +#include "GPU/Common/VertexShaderGenerator.h" #undef WRITE @@ -148,7 +147,7 @@ const char *hlsl_preamble_vs = "#define highp\n" "\n"; -bool GenerateVertexShaderGLSL(const VShaderID &id, char *buffer, const ShaderLanguageDesc &compat, uint32_t *attrMask, uint64_t *uniformMask, std::string *errorString) { +bool GenerateVertexShader(const VShaderID &id, char *buffer, const ShaderLanguageDesc &compat, uint32_t *attrMask, uint64_t *uniformMask, std::string *errorString) { *attrMask = 0; *uniformMask = 0; diff --git a/GPU/GLES/VertexShaderGeneratorGLES.h b/GPU/Common/VertexShaderGenerator.h similarity index 90% rename from GPU/GLES/VertexShaderGeneratorGLES.h rename to GPU/Common/VertexShaderGenerator.h index 743cea026a..8f69f5bcd8 100644 --- a/GPU/GLES/VertexShaderGeneratorGLES.h +++ b/GPU/Common/VertexShaderGenerator.h @@ -21,7 +21,7 @@ struct VShaderID; -bool GenerateVertexShaderGLSL(const VShaderID &id, char *buffer, const ShaderLanguageDesc &compat, uint32_t *attrMask, uint64_t *uniformMask, std::string *errorString); +bool GenerateVertexShader(const VShaderID &id, char *buffer, const ShaderLanguageDesc &compat, uint32_t *attrMask, uint64_t *uniformMask, std::string *errorString); // D3D9 constants. enum { diff --git a/GPU/D3D11/ShaderManagerD3D11.cpp b/GPU/D3D11/ShaderManagerD3D11.cpp index ad3d0a04bc..88730eec70 100644 --- a/GPU/D3D11/ShaderManagerD3D11.cpp +++ b/GPU/D3D11/ShaderManagerD3D11.cpp @@ -34,8 +34,8 @@ #include "GPU/Math3D.h" #include "GPU/GPUState.h" #include "GPU/ge_constants.h" +#include "GPU/Common/VertexShaderGenerator.h" #include "GPU/D3D11/ShaderManagerD3D11.h" -#include "GPU/GLES/VertexShaderGeneratorGLES.h" #include "GPU/D3D11/D3D11Util.h" D3D11FragmentShader::D3D11FragmentShader(ID3D11Device *device, D3D_FEATURE_LEVEL featureLevel, FShaderID id, const char *code, bool useHWTransform) @@ -210,7 +210,7 @@ void ShaderManagerD3D11::GetShaders(int prim, u32 vertType, D3D11VertexShader ** std::string genErrorString; uint32_t attrMask; uint64_t uniformMask; - GenerateVertexShaderGLSL(VSID, codeBuffer_, compat_, &attrMask, &uniformMask, &genErrorString); + GenerateVertexShader(VSID, codeBuffer_, compat_, &attrMask, &uniformMask, &genErrorString); vs = new D3D11VertexShader(device_, featureLevel_, VSID, codeBuffer_, vertType, useHWTransform); vsCache_[VSID] = vs; } else { diff --git a/GPU/Directx9/ShaderManagerDX9.cpp b/GPU/Directx9/ShaderManagerDX9.cpp index 0b0805d37a..4aafbcb290 100644 --- a/GPU/Directx9/ShaderManagerDX9.cpp +++ b/GPU/Directx9/ShaderManagerDX9.cpp @@ -582,7 +582,7 @@ VSShader *ShaderManagerDX9::ApplyShader(bool useHWTransform, bool useHWTessellat std::string genErrorString; uint32_t attrMask; uint64_t uniformMask; - if (GenerateVertexShaderGLSL(VSID, codeBuffer_, compat_, &attrMask, &uniformMask, &genErrorString)) { + if (GenerateVertexShader(VSID, codeBuffer_, compat_, &attrMask, &uniformMask, &genErrorString)) { vs = new VSShader(device_, VSID, codeBuffer_, useHWTransform); } if (!vs || vs->Failed()) { @@ -607,7 +607,7 @@ VSShader *ShaderManagerDX9::ApplyShader(bool useHWTransform, bool useHWTessellat // Can still work with software transform. uint32_t attrMask; uint64_t uniformMask; - bool success = GenerateVertexShaderGLSL(VSID, codeBuffer_, compat_, &attrMask, &uniformMask, &genErrorString); + bool success = GenerateVertexShader(VSID, codeBuffer_, compat_, &attrMask, &uniformMask, &genErrorString); _assert_(success); vs = new VSShader(device_, VSID, codeBuffer_, false); } diff --git a/GPU/Directx9/ShaderManagerDX9.h b/GPU/Directx9/ShaderManagerDX9.h index 1ac3ae0e48..8e132e2a31 100644 --- a/GPU/Directx9/ShaderManagerDX9.h +++ b/GPU/Directx9/ShaderManagerDX9.h @@ -21,7 +21,7 @@ #include #include "Common/Common.h" -#include "GPU/GLES/VertexShaderGeneratorGLES.h" +#include "GPU/Common/VertexShaderGenerator.h" #include "GPU/Common/FragmentShaderGenerator.h" #include "GPU/Common/ShaderCommon.h" #include "GPU/Common/ShaderId.h" diff --git a/GPU/GLES/ShaderManagerGLES.cpp b/GPU/GLES/ShaderManagerGLES.cpp index 44ce55e9dc..7e77133a85 100644 --- a/GPU/GLES/ShaderManagerGLES.cpp +++ b/GPU/GLES/ShaderManagerGLES.cpp @@ -721,7 +721,7 @@ Shader *ShaderManagerGLES::CompileVertexShader(VShaderID VSID) { uint32_t attrMask; uint64_t uniformMask; std::string errorString; - if (!GenerateVertexShaderGLSL(VSID, codeBuffer_, compat_, &attrMask, &uniformMask, &errorString)) { + if (!GenerateVertexShader(VSID, codeBuffer_, compat_, &attrMask, &uniformMask, &errorString)) { ERROR_LOG(G3D, "Shader gen error: %s", errorString.c_str()); return nullptr; } diff --git a/GPU/GLES/ShaderManagerGLES.h b/GPU/GLES/ShaderManagerGLES.h index a075530ecd..2343f7d508 100644 --- a/GPU/GLES/ShaderManagerGLES.h +++ b/GPU/GLES/ShaderManagerGLES.h @@ -23,24 +23,11 @@ #include "Common/GPU/OpenGL/GLRenderManager.h" #include "GPU/Common/ShaderCommon.h" #include "GPU/Common/ShaderId.h" -#include "GPU/GLES/VertexShaderGeneratorGLES.h" +#include "GPU/Common/VertexShaderGenerator.h" #include "GPU/Common/FragmentShaderGenerator.h" class Shader; -// Pre-fetched attrs and uniforms -enum { - ATTR_POSITION = 0, - ATTR_TEXCOORD = 1, - ATTR_NORMAL = 2, - ATTR_W1 = 3, - ATTR_W2 = 4, - ATTR_COLOR0 = 5, - ATTR_COLOR1 = 6, - - ATTR_COUNT, -}; - class LinkedShader { public: LinkedShader(GLRenderManager *render, VShaderID VSID, Shader *vs, FShaderID FSID, Shader *fs, bool useHWTransform, bool preloading = false); diff --git a/GPU/GPU.vcxproj b/GPU/GPU.vcxproj index 849173ac8d..675602d6d5 100644 --- a/GPU/GPU.vcxproj +++ b/GPU/GPU.vcxproj @@ -368,6 +368,7 @@ + @@ -446,12 +447,6 @@ true true - - true - true - true - true - @@ -536,6 +531,7 @@ true true + @@ -628,12 +624,6 @@ true true - - true - true - true - true - diff --git a/GPU/GPU.vcxproj.filters b/GPU/GPU.vcxproj.filters index 9bb59502fc..509e962588 100644 --- a/GPU/GPU.vcxproj.filters +++ b/GPU/GPU.vcxproj.filters @@ -189,9 +189,6 @@ GLES - - GLES - GLES @@ -270,6 +267,9 @@ Common + + Common + @@ -443,9 +443,6 @@ GLES - - GLES - GLES @@ -539,5 +536,8 @@ Common + + Common + \ No newline at end of file diff --git a/GPU/Vulkan/ShaderManagerVulkan.cpp b/GPU/Vulkan/ShaderManagerVulkan.cpp index e1c6cbee59..4b54a77d83 100644 --- a/GPU/Vulkan/ShaderManagerVulkan.cpp +++ b/GPU/Vulkan/ShaderManagerVulkan.cpp @@ -36,11 +36,11 @@ #include "GPU/Math3D.h" #include "GPU/GPUState.h" #include "GPU/ge_constants.h" +#include "GPU/Common/FragmentShaderGenerator.h" +#include "GPU/Common/VertexShaderGenerator.h" #include "GPU/Vulkan/ShaderManagerVulkan.h" #include "GPU/Vulkan/DrawEngineVulkan.h" #include "GPU/Vulkan/FramebufferManagerVulkan.h" -#include "GPU/Common/FragmentShaderGenerator.h" -#include "GPU/GLES/VertexShaderGeneratorGLES.h" VulkanFragmentShader::VulkanFragmentShader(VulkanContext *vulkan, FShaderID id, const char *code) : vulkan_(vulkan), id_(id), failed_(false), module_(0) { @@ -265,7 +265,7 @@ void ShaderManagerVulkan::GetShaders(int prim, u32 vertType, VulkanVertexShader std::string genErrorString; uint64_t uniformMask = 0; // Not used uint32_t attributeMask = 0; // Not used - bool success = GenerateVertexShaderGLSL(VSID, codeBuffer_, compat_, &attributeMask, &uniformMask, &genErrorString); + bool success = GenerateVertexShader(VSID, codeBuffer_, compat_, &attributeMask, &uniformMask, &genErrorString); _assert_(success); vs = new VulkanVertexShader(vulkan_, VSID, codeBuffer_, useHWTransform); vsCache_.Insert(VSID, vs); @@ -398,7 +398,7 @@ bool ShaderManagerVulkan::LoadCache(FILE *f) { std::string genErrorString; uint32_t attributeMask = 0; uint64_t uniformMask = 0; - if (!GenerateVertexShaderGLSL(id, codeBuffer_, compat_, &attributeMask, &uniformMask, &genErrorString)) { + if (!GenerateVertexShader(id, codeBuffer_, compat_, &attributeMask, &uniformMask, &genErrorString)) { return false; } VulkanVertexShader *vs = new VulkanVertexShader(vulkan_, id, codeBuffer_, useHWTransform); diff --git a/GPU/Vulkan/ShaderManagerVulkan.h b/GPU/Vulkan/ShaderManagerVulkan.h index d48c7dcd99..e35a07a103 100644 --- a/GPU/Vulkan/ShaderManagerVulkan.h +++ b/GPU/Vulkan/ShaderManagerVulkan.h @@ -24,7 +24,7 @@ #include "Common/GPU/Vulkan/VulkanMemory.h" #include "GPU/Common/ShaderCommon.h" #include "GPU/Common/ShaderId.h" -#include "GPU/GLES/VertexShaderGeneratorGLES.h" +#include "GPU/Common/VertexShaderGenerator.h" #include "GPU/Common/FragmentShaderGenerator.h" #include "GPU/Vulkan/VulkanUtil.h" #include "Common/Math/lin/matrix4x4.h" diff --git a/UWP/GPU_UWP/GPU_UWP.vcxproj b/UWP/GPU_UWP/GPU_UWP.vcxproj index 5fd5c99998..d5b5d3167e 100644 --- a/UWP/GPU_UWP/GPU_UWP.vcxproj +++ b/UWP/GPU_UWP/GPU_UWP.vcxproj @@ -402,6 +402,7 @@ + @@ -417,7 +418,6 @@ - @@ -462,6 +462,7 @@ + @@ -477,7 +478,6 @@ - diff --git a/UWP/GPU_UWP/GPU_UWP.vcxproj.filters b/UWP/GPU_UWP/GPU_UWP.vcxproj.filters index 331a8c82e6..12f33ec3af 100644 --- a/UWP/GPU_UWP/GPU_UWP.vcxproj.filters +++ b/UWP/GPU_UWP/GPU_UWP.vcxproj.filters @@ -41,7 +41,6 @@ - @@ -57,6 +56,7 @@ + @@ -96,7 +96,6 @@ - @@ -114,5 +113,6 @@ + \ No newline at end of file diff --git a/android/jni/Android.mk b/android/jni/Android.mk index d9f3a34883..71e6915927 100644 --- a/android/jni/Android.mk +++ b/android/jni/Android.mk @@ -326,6 +326,7 @@ EXEC_AND_LIB_FILES := \ $(SRC)/GPU/Common/TextureDecoder.cpp \ $(SRC)/GPU/Common/PostShader.cpp \ $(SRC)/GPU/Common/ShaderUniforms.cpp \ + $(SRC)/GPU/Common/VertexShaderGenerator.cpp \ $(SRC)/GPU/Debugger/Breakpoints.cpp \ $(SRC)/GPU/Debugger/Debugger.cpp \ $(SRC)/GPU/Debugger/Playback.cpp \ @@ -333,14 +334,13 @@ EXEC_AND_LIB_FILES := \ $(SRC)/GPU/Debugger/Stepping.cpp \ $(SRC)/GPU/GLES/FramebufferManagerGLES.cpp \ $(SRC)/GPU/GLES/DepalettizeShaderGLES.cpp \ - $(SRC)/GPU/GLES/DepthBufferGLES.cpp.arm \ + $(SRC)/GPU/GLES/DepthBufferGLES.cpp \ $(SRC)/GPU/GLES/GPU_GLES.cpp.arm \ - $(SRC)/GPU/GLES/StencilBufferGLES.cpp.arm \ + $(SRC)/GPU/GLES/StencilBufferGLES.cpp \ $(SRC)/GPU/GLES/TextureCacheGLES.cpp.arm \ $(SRC)/GPU/GLES/DrawEngineGLES.cpp.arm \ $(SRC)/GPU/GLES/StateMappingGLES.cpp.arm \ $(SRC)/GPU/GLES/ShaderManagerGLES.cpp.arm \ - $(SRC)/GPU/GLES/VertexShaderGeneratorGLES.cpp.arm \ $(SRC)/GPU/GLES/FragmentTestCacheGLES.cpp.arm \ $(SRC)/GPU/GLES/TextureScalerGLES.cpp \ $(SRC)/GPU/Null/NullGpu.cpp \ diff --git a/libretro/Makefile.common b/libretro/Makefile.common index ec02dcfe44..3120c903c8 100644 --- a/libretro/Makefile.common +++ b/libretro/Makefile.common @@ -249,6 +249,7 @@ SOURCES_CXX += \ $(GPUDIR)/Debugger/Record.cpp \ $(GPUDIR)/Debugger/Stepping.cpp \ $(GPUDIR)/Common/FragmentShaderGenerator.cpp \ + $(GPUDIR)/Common/VertexShaderGenerator.cpp \ $(GPUDIR)/Common/TextureCacheCommon.cpp \ $(GPUDIR)/Common/TextureScalerCommon.cpp \ $(GPUDIR)/Common/SoftwareTransformCommon.cpp \ @@ -269,7 +270,6 @@ SOURCES_CXX += \ $(GPUDIR)/Software/RasterizerRectangle.cpp \ $(GPUDIR)/GLES/DepalettizeShaderGLES.cpp \ $(GPUDIR)/GLES/DepthBufferGLES.cpp \ - $(GPUDIR)/GLES/VertexShaderGeneratorGLES.cpp \ $(GPUDIR)/GLES/DrawEngineGLES.cpp \ $(GPUDIR)/GLES/GPU_GLES.cpp \ $(GPUDIR)/GLES/FragmentTestCacheGLES.cpp \ diff --git a/unittest/TestShaderGenerators.cpp b/unittest/TestShaderGenerators.cpp index 4b60ee8d56..645069172e 100644 --- a/unittest/TestShaderGenerators.cpp +++ b/unittest/TestShaderGenerators.cpp @@ -10,9 +10,7 @@ #include "GPU/Vulkan/VulkanContext.h" #include "GPU/Common/FragmentShaderGenerator.h" - -#include "GPU/GLES/VertexShaderGeneratorGLES.h" -#include "GPU/GLES/VertexShaderGeneratorGLES.h" +#include "GPU/Common/VertexShaderGenerator.h" #include "GPU/D3D11/D3D11Util.h" #include "GPU/D3D11/D3D11Loader.h" @@ -60,27 +58,27 @@ bool GenerateVShader(VShaderID id, char *buffer, ShaderLanguage lang, std::strin case ShaderLanguage::GLSL_VULKAN: { ShaderLanguageDesc compat(ShaderLanguage::GLSL_VULKAN); - return GenerateVertexShaderGLSL(id, buffer, compat, &attrMask, &uniformMask, errorString); + return GenerateVertexShader(id, buffer, compat, &attrMask, &uniformMask, errorString); } case ShaderLanguage::GLSL_140: { ShaderLanguageDesc compat(ShaderLanguage::GLSL_140); - return GenerateVertexShaderGLSL(id, buffer, compat, &attrMask, &uniformMask, errorString); + return GenerateVertexShader(id, buffer, compat, &attrMask, &uniformMask, errorString); } case ShaderLanguage::GLSL_300: { ShaderLanguageDesc compat(ShaderLanguage::GLSL_140); - return GenerateVertexShaderGLSL(id, buffer, compat, &attrMask, &uniformMask, errorString); + return GenerateVertexShader(id, buffer, compat, &attrMask, &uniformMask, errorString); } case ShaderLanguage::HLSL_D3D9: { ShaderLanguageDesc compat(ShaderLanguage::HLSL_D3D9); - return GenerateVertexShaderGLSL(id, buffer, compat, &attrMask, &uniformMask, errorString); + return GenerateVertexShader(id, buffer, compat, &attrMask, &uniformMask, errorString); } case ShaderLanguage::HLSL_D3D11: { ShaderLanguageDesc compat(ShaderLanguage::HLSL_D3D11); - return GenerateVertexShaderGLSL(id, buffer, compat, &attrMask, &uniformMask, errorString); + return GenerateVertexShader(id, buffer, compat, &attrMask, &uniformMask, errorString); } default: return false;