diff --git a/rpcs3/Emu/RSX/Common/GLSLCommon.h b/rpcs3/Emu/RSX/Common/GLSLCommon.h index a93ee5a70a..0bd3e8fe14 100644 --- a/rpcs3/Emu/RSX/Common/GLSLCommon.h +++ b/rpcs3/Emu/RSX/Common/GLSLCommon.h @@ -334,11 +334,6 @@ namespace glsl OS << " return decodeLinearDepth(texture(tex, coord.xy).r);\n"; OS << "}\n\n"; - OS << "vec4 texture2DReconstruct(sampler2DRect tex, vec2 coord)\n"; - OS << "{\n"; - OS << " return decodeLinearDepth(texture(tex, coord.xy).r);\n"; - OS << "}\n\n"; - OS << "vec4 get_wpos()\n"; OS << "{\n"; OS << " float abs_scale = abs(wpos_scale);\n"; @@ -350,4 +345,75 @@ namespace glsl { program_common::insert_fog_declaration(OS, "vec4", "fog_c"); } + + static std::string getFunctionImpl(FUNCTION f) + { + switch (f) + { + default: + abort(); + case FUNCTION::FUNCTION_DP2: + return "vec4(dot($0.xy, $1.xy))"; + case FUNCTION::FUNCTION_DP2A: + return "vec4(dot($0.xy, $1.xy) + $2.x)"; + case FUNCTION::FUNCTION_DP3: + return "vec4(dot($0.xyz, $1.xyz))"; + case FUNCTION::FUNCTION_DP4: + return "vec4(dot($0, $1))"; + case FUNCTION::FUNCTION_DPH: + return "vec4(dot(vec4($0.xyz, 1.0), $1))"; + case FUNCTION::FUNCTION_SFL: + return "vec4(0., 0., 0., 0.)"; + case FUNCTION::FUNCTION_STR: + return "vec4(1., 1., 1., 1.)"; + case FUNCTION::FUNCTION_FRACT: + return "fract($0)"; + case FUNCTION::FUNCTION_REFL: + return "vec4($0 - 2.0 * (dot($0, $1)) * $1)"; + case FUNCTION::FUNCTION_TEXTURE_SAMPLE1D: + return "texture($t, $0.x)"; + case FUNCTION::FUNCTION_TEXTURE_SAMPLE1D_PROJ: + return "textureProj($t, $0.x, $1.x)"; // Note: $1.x is bias + case FUNCTION::FUNCTION_TEXTURE_SAMPLE1D_LOD: + return "textureLod($t, $0.x, $1.x)"; + case FUNCTION::FUNCTION_TEXTURE_SAMPLE1D_GRAD: + return "textureGrad($t, $0.x, $1.x, $2.x)"; + case FUNCTION::FUNCTION_TEXTURE_SAMPLE2D: + return "texture($t, $0.xy * texture_parameters[$_i].xy)"; + case FUNCTION::FUNCTION_TEXTURE_SAMPLE2D_PROJ: + return "textureProj($t, $0 , $1.x)"; // Note: $1.x is bias + case FUNCTION::FUNCTION_TEXTURE_SAMPLE2D_LOD: + return "textureLod($t, $0.xy * texture_parameters[$_i].xy, $1.x)"; + case FUNCTION::FUNCTION_TEXTURE_SAMPLE2D_GRAD: + return "textureGrad($t, $0.xy * texture_parameters[$_i].xy , $1.xy, $2.xy)"; + case FUNCTION::FUNCTION_TEXTURE_SHADOW2D: + return "texture($t, $0.xyz)"; + case FUNCTION::FUNCTION_TEXTURE_SHADOW2D_PROJ: + return "textureProj($t, $0, $1.x)"; // Note: $1.x is bias + case FUNCTION::FUNCTION_TEXTURE_SAMPLECUBE: + return "texture($t, $0.xyz)"; + case FUNCTION::FUNCTION_TEXTURE_SAMPLECUBE_PROJ: + return "texture($t, ($0.xyz / $0.w))"; + case FUNCTION::FUNCTION_TEXTURE_SAMPLECUBE_LOD: + return "textureLod($t, $0.xyz, $1.x)"; + case FUNCTION::FUNCTION_TEXTURE_SAMPLECUBE_GRAD: + return "textureGrad($t, $0.xyz, $1.xyz, $2.xyz)"; + case FUNCTION::FUNCTION_TEXTURE_SAMPLE3D: + return "texture($t, $0.xyz)"; + case FUNCTION::FUNCTION_TEXTURE_SAMPLE3D_PROJ: + return "textureProj($t, $0.xyzw, $1.x)"; // Note: $1.x is bias + case FUNCTION::FUNCTION_TEXTURE_SAMPLE3D_LOD: + return "textureLod($t, $0.xyz, $1.x)"; + case FUNCTION::FUNCTION_TEXTURE_SAMPLE3D_GRAD: + return "textureGrad($t, $0.xyz, $1.xyz, $2.xyz)"; + case FUNCTION::FUNCTION_DFDX: + return "dFdx($0)"; + case FUNCTION::FUNCTION_DFDY: + return "dFdy($0)"; + case FUNCTION::FUNCTION_VERTEX_TEXTURE_FETCH2D: + return "textureLod($t, $0.xy, 0)"; + case FUNCTION::FUNCTION_TEXTURE_SAMPLE2D_DEPTH_RGBA: + return "texture2DReconstruct($t, $0.xy * texture_parameters[$_i].xy)"; + } + } } \ No newline at end of file diff --git a/rpcs3/Emu/RSX/GL/GLCommonDecompiler.cpp b/rpcs3/Emu/RSX/GL/GLCommonDecompiler.cpp index f8eb4de782..0e3823e028 100644 --- a/rpcs3/Emu/RSX/GL/GLCommonDecompiler.cpp +++ b/rpcs3/Emu/RSX/GL/GLCommonDecompiler.cpp @@ -4,77 +4,6 @@ namespace gl { - std::string getFunctionImpl(FUNCTION f) - { - switch (f) - { - default: - abort(); - case FUNCTION::FUNCTION_DP2: - return "vec4(dot($0.xy, $1.xy))"; - case FUNCTION::FUNCTION_DP2A: - return "vec4(dot($0.xy, $1.xy) + $2.x)"; - case FUNCTION::FUNCTION_DP3: - return "vec4(dot($0.xyz, $1.xyz))"; - case FUNCTION::FUNCTION_DP4: - return "vec4(dot($0, $1))"; - case FUNCTION::FUNCTION_DPH: - return "vec4(dot(vec4($0.xyz, 1.0), $1))"; - case FUNCTION::FUNCTION_SFL: - return "vec4(0., 0., 0., 0.)"; - case FUNCTION::FUNCTION_STR: - return "vec4(1., 1., 1., 1.)"; - case FUNCTION::FUNCTION_FRACT: - return "fract($0)"; - case FUNCTION::FUNCTION_REFL: - return "vec4($0 - 2.0 * (dot($0, $1)) * $1)"; - case FUNCTION::FUNCTION_TEXTURE_SAMPLE1D: - return "texture($t, $0.x)"; - case FUNCTION::FUNCTION_TEXTURE_SAMPLE1D_PROJ: - return "textureProj($t, $0.x, $1.x)"; // Note: $1.x is bias - case FUNCTION::FUNCTION_TEXTURE_SAMPLE1D_LOD: - return "textureLod($t, $0.x, $1.x)"; - case FUNCTION::FUNCTION_TEXTURE_SAMPLE1D_GRAD: - return "textureGrad($t, $0.x, $1.x, $2.x)"; - case FUNCTION::FUNCTION_TEXTURE_SAMPLE2D: - return "texture($t, $0.xy * texture_parameters[$_i].xy)"; - case FUNCTION::FUNCTION_TEXTURE_SAMPLE2D_PROJ: - return "textureProj($t, $0 , $1.x)"; // Note: $1.x is bias - case FUNCTION::FUNCTION_TEXTURE_SAMPLE2D_LOD: - return "textureLod($t, $0.xy * texture_parameters[$_i].xy, $1.x)"; - case FUNCTION::FUNCTION_TEXTURE_SAMPLE2D_GRAD: - return "textureGrad($t, $0.xy * texture_parameters[$_i].xy , $1.xy, $2.xy)"; - case FUNCTION::FUNCTION_TEXTURE_SHADOW2D: - return "texture($t, $0.xyz)"; - case FUNCTION::FUNCTION_TEXTURE_SHADOW2D_PROJ: - return "textureProj($t, $0, $1.x)"; // Note: $1.x is bias - case FUNCTION::FUNCTION_TEXTURE_SAMPLECUBE: - return "texture($t, $0.xyz)"; - case FUNCTION::FUNCTION_TEXTURE_SAMPLECUBE_PROJ: - return "texture($t, ($0.xyz / $0.w))"; - case FUNCTION::FUNCTION_TEXTURE_SAMPLECUBE_LOD: - return "textureLod($t, $0.xyz, $1.x)"; - case FUNCTION::FUNCTION_TEXTURE_SAMPLECUBE_GRAD: - return "textureGrad($t, $0.xyz, $1.xyz, $2.xyz)"; - case FUNCTION::FUNCTION_TEXTURE_SAMPLE3D: - return "texture($t, $0.xyz)"; - case FUNCTION::FUNCTION_TEXTURE_SAMPLE3D_PROJ: - return "textureProj($t, $0.xyzw, $1.x)"; // Note: $1.x is bias - case FUNCTION::FUNCTION_TEXTURE_SAMPLE3D_LOD: - return "textureLod($t, $0.xyz, $1.x)"; - case FUNCTION::FUNCTION_TEXTURE_SAMPLE3D_GRAD: - return "textureGrad($t, $0.xyz, $1.xyz, $2.xyz)"; - case FUNCTION::FUNCTION_DFDX: - return "dFdx($0)"; - case FUNCTION::FUNCTION_DFDY: - return "dFdy($0)"; - case FUNCTION::FUNCTION_VERTEX_TEXTURE_FETCH2D: - return "textureLod($t, $0.xy, 0)"; - case FUNCTION::FUNCTION_TEXTURE_SAMPLE2D_DEPTH_RGBA: - return "texture2DReconstruct($t, $0.xy * texture_parameters[$_i].xy)"; - } - } - int get_varying_register_location(const std::string &var_name) { static const std::pair reg_table[] = diff --git a/rpcs3/Emu/RSX/GL/GLCommonDecompiler.h b/rpcs3/Emu/RSX/GL/GLCommonDecompiler.h index e2328495f1..2632f8edc5 100644 --- a/rpcs3/Emu/RSX/GL/GLCommonDecompiler.h +++ b/rpcs3/Emu/RSX/GL/GLCommonDecompiler.h @@ -6,6 +6,5 @@ namespace gl { - std::string getFunctionImpl(FUNCTION f); int get_varying_register_location(const std::string &var_name); } diff --git a/rpcs3/Emu/RSX/GL/GLFragmentProgram.cpp b/rpcs3/Emu/RSX/GL/GLFragmentProgram.cpp index 4e7dce671a..173c1f9c1b 100644 --- a/rpcs3/Emu/RSX/GL/GLFragmentProgram.cpp +++ b/rpcs3/Emu/RSX/GL/GLFragmentProgram.cpp @@ -15,7 +15,7 @@ std::string GLFragmentDecompilerThread::getFloatTypeName(size_t elementCount) std::string GLFragmentDecompilerThread::getFunction(FUNCTION f) { - return gl::getFunctionImpl(f); + return glsl::getFunctionImpl(f); } std::string GLFragmentDecompilerThread::saturate(const std::string & code) diff --git a/rpcs3/Emu/RSX/GL/GLVertexProgram.cpp b/rpcs3/Emu/RSX/GL/GLVertexProgram.cpp index 51df81868d..e3e00c8412 100644 --- a/rpcs3/Emu/RSX/GL/GLVertexProgram.cpp +++ b/rpcs3/Emu/RSX/GL/GLVertexProgram.cpp @@ -18,10 +18,9 @@ std::string GLVertexDecompilerThread::getIntTypeName(size_t elementCount) return "ivec4"; } - std::string GLVertexDecompilerThread::getFunction(FUNCTION f) { - return gl::getFunctionImpl(f); + return glsl::getFunctionImpl(f); } std::string GLVertexDecompilerThread::compareFunction(COMPARE f, const std::string &Op0, const std::string &Op1) diff --git a/rpcs3/Emu/RSX/VK/VKCommonDecompiler.cpp b/rpcs3/Emu/RSX/VK/VKCommonDecompiler.cpp index a704e75a5c..2361d04b70 100644 --- a/rpcs3/Emu/RSX/VK/VKCommonDecompiler.cpp +++ b/rpcs3/Emu/RSX/VK/VKCommonDecompiler.cpp @@ -8,69 +8,6 @@ namespace vk { static TBuiltInResource g_default_config; - std::string getFunctionImpl(FUNCTION f) - { - switch (f) - { - default: - abort(); - case FUNCTION::FUNCTION_DP2: - return "vec4(dot($0.xy, $1.xy))"; - case FUNCTION::FUNCTION_DP2A: - return "vec4(dot($0.xy, $1.xy) + $2.x)"; - case FUNCTION::FUNCTION_DP3: - return "vec4(dot($0.xyz, $1.xyz))"; - case FUNCTION::FUNCTION_DP4: - return "vec4(dot($0, $1))"; - case FUNCTION::FUNCTION_DPH: - return "vec4(dot(vec4($0.xyz, 1.0), $1))"; - case FUNCTION::FUNCTION_SFL: - return "vec4(0., 0., 0., 0.)"; - case FUNCTION::FUNCTION_STR: - return "vec4(1., 1., 1., 1.)"; - case FUNCTION::FUNCTION_FRACT: - return "fract($0)"; - case FUNCTION::FUNCTION_REFL: - return "vec4($0 - 2.0 * (dot($0, $1)) * $1)"; - case FUNCTION::FUNCTION_TEXTURE_SAMPLE1D: - return "texture($t, $0.x)"; - case FUNCTION::FUNCTION_TEXTURE_SAMPLE1D_PROJ: - return "textureProj($t, $0.x, $1.x)"; // Note: $1.x is bias - case FUNCTION::FUNCTION_TEXTURE_SAMPLE1D_LOD: - return "textureLod($t, $0.x, $1.x)"; - case FUNCTION::FUNCTION_TEXTURE_SAMPLE1D_GRAD: - return "textureGrad($t, $0.x, $1.x, $2.x)"; - case FUNCTION::FUNCTION_TEXTURE_SAMPLE2D: - return "texture($t, $0.xy * texture_parameters[$_i].xy)"; - case FUNCTION::FUNCTION_TEXTURE_SAMPLE2D_PROJ: - return "textureProj($t, $0, $1.x)"; // Note: $1.x is bias - case FUNCTION::FUNCTION_TEXTURE_SAMPLE2D_LOD: - return "textureLod($t, $0.xy * texture_parameters[$_i].xy, $1.x)"; - case FUNCTION::FUNCTION_TEXTURE_SAMPLE2D_GRAD: - return "textureGrad($t, $0.xy * texture_parameters[$_i].xy, $1.xy, $2.xy)"; // Note: $1.x is bias - case FUNCTION::FUNCTION_TEXTURE_SHADOW2D: - return "texture($t, $0.xyz)"; - case FUNCTION::FUNCTION_TEXTURE_SHADOW2D_PROJ: - return "textureProj($t, $0, $1.x)"; // Note: $1.x is bias - case FUNCTION::FUNCTION_TEXTURE_SAMPLECUBE: - return "texture($t, $0.xyz)"; - case FUNCTION::FUNCTION_TEXTURE_SAMPLECUBE_PROJ: - return "texture($t, ($0.xyz / $0.w))"; - case FUNCTION::FUNCTION_TEXTURE_SAMPLECUBE_LOD: - return "textureLod($t, $0.xyz, $1.x)"; - case FUNCTION::FUNCTION_TEXTURE_SAMPLECUBE_GRAD: - return "textureGrad($t, $0.xyz, $1.xyz, $2.xyz)"; - case FUNCTION::FUNCTION_DFDX: - return "dFdx($0)"; - case FUNCTION::FUNCTION_DFDY: - return "dFdy($0)"; - case FUNCTION::FUNCTION_VERTEX_TEXTURE_FETCH2D: - return "textureLod($t, $0.xy, 0)"; - case FUNCTION::FUNCTION_TEXTURE_SAMPLE2D_DEPTH_RGBA: - return "texture2DReconstruct($t, $0.xy * texture_parameters[$_i].xy)"; - } - } - void init_default_resources(TBuiltInResource &rsc) { rsc.maxLights = 32; diff --git a/rpcs3/Emu/RSX/VK/VKCommonDecompiler.h b/rpcs3/Emu/RSX/VK/VKCommonDecompiler.h index a1e993449e..a8a0d5c0fa 100644 --- a/rpcs3/Emu/RSX/VK/VKCommonDecompiler.h +++ b/rpcs3/Emu/RSX/VK/VKCommonDecompiler.h @@ -12,9 +12,6 @@ namespace vk int reg_location; }; - //Decompiler function lookup - std::string getFunctionImpl(FUNCTION f); - const varying_register_t& get_varying_register(const std::string& name); bool compile_glsl_to_spv(std::string& shader, program_domain domain, std::vector &spv); diff --git a/rpcs3/Emu/RSX/VK/VKFragmentProgram.cpp b/rpcs3/Emu/RSX/VK/VKFragmentProgram.cpp index 6ca7cd0b0f..8c9f8e5ca2 100644 --- a/rpcs3/Emu/RSX/VK/VKFragmentProgram.cpp +++ b/rpcs3/Emu/RSX/VK/VKFragmentProgram.cpp @@ -14,7 +14,7 @@ std::string VKFragmentDecompilerThread::getFloatTypeName(size_t elementCount) std::string VKFragmentDecompilerThread::getFunction(FUNCTION f) { - return vk::getFunctionImpl(f); + return glsl::getFunctionImpl(f); } std::string VKFragmentDecompilerThread::saturate(const std::string & code) diff --git a/rpcs3/Emu/RSX/VK/VKVertexProgram.cpp b/rpcs3/Emu/RSX/VK/VKVertexProgram.cpp index c63ea7e447..3cc898d287 100644 --- a/rpcs3/Emu/RSX/VK/VKVertexProgram.cpp +++ b/rpcs3/Emu/RSX/VK/VKVertexProgram.cpp @@ -15,10 +15,9 @@ std::string VKVertexDecompilerThread::getIntTypeName(size_t elementCount) return "ivec4"; } - std::string VKVertexDecompilerThread::getFunction(FUNCTION f) { - return vk::getFunctionImpl(f); + return glsl::getFunctionImpl(f); } std::string VKVertexDecompilerThread::compareFunction(COMPARE f, const std::string &Op0, const std::string &Op1)