From e04e0e38d1000feae27aba789d6fd41f1a139bf7 Mon Sep 17 00:00:00 2001 From: TellowKrinkle Date: Mon, 15 Nov 2021 22:46:38 -0600 Subject: [PATCH] GS:GL: Move TextureOffset to vs cb It's used by the vs, why would you put it in the ps cb? --- pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.h | 14 +++++++------- pcsx2/GS/Renderers/OpenGL/GSRendererOGL.cpp | 15 +++++++++++---- pcsx2/GS/res/glsl/common_header.glsl | 7 ++++--- pcsx2/GS/res/glsl/tfx_vgs.glsl | 4 ++-- 4 files changed, 24 insertions(+), 16 deletions(-) diff --git a/pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.h b/pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.h index 610e808cc9..65eb80681f 100644 --- a/pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.h +++ b/pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.h @@ -127,17 +127,17 @@ public: { GSVector4 Vertex_Scale_Offset; - GSVector4 TextureOffset; + GSVector4 Texture_Scale_Offset; GSVector2 PointSize; GSVector2i MaxDepth; VSConstantBuffer() { - Vertex_Scale_Offset = GSVector4::zero(); - TextureOffset = GSVector4::zero(); - PointSize = GSVector2(0); - MaxDepth = GSVector2i(0); + Vertex_Scale_Offset = GSVector4::zero(); + Texture_Scale_Offset = GSVector4::zero(); + PointSize = GSVector2(0); + MaxDepth = GSVector2i(0); } __forceinline bool Update(const VSConstantBuffer* cb) @@ -221,7 +221,7 @@ public: GSVector4 HalfTexel; GSVector4 MinMax; - GSVector4 TC_OH_TS; + GSVector4 TC_OH; GSVector4 MaxDepth; GSVector4 DitherMatrix[4]; @@ -234,7 +234,7 @@ public: TA_Af = GSVector4::zero(); MinMax = GSVector4::zero(); MskFix = GSVector4i::zero(); - TC_OH_TS = GSVector4::zero(); + TC_OH = GSVector4::zero(); FbMask = GSVector4i::zero(); MaxDepth = GSVector4::zero(); diff --git a/pcsx2/GS/Renderers/OpenGL/GSRendererOGL.cpp b/pcsx2/GS/Renderers/OpenGL/GSRendererOGL.cpp index 11e3c0effe..30028fdd00 100644 --- a/pcsx2/GS/Renderers/OpenGL/GSRendererOGL.cpp +++ b/pcsx2/GS/Renderers/OpenGL/GSRendererOGL.cpp @@ -759,7 +759,9 @@ void GSRendererOGL::EmulateTextureSampler(const GSTextureCache::Source* tex) // The purpose of texture shuffle is to move color channel. Extra interpolation is likely a bad idea. bilinear &= m_vt.IsLinear(); - vs_cb.TextureOffset = RealignTargetTextureCoordinate(tex); + GSVector4 half_offset = RealignTargetTextureCoordinate(tex); + vs_cb.Texture_Scale_Offset.z = half_offset.x; + vs_cb.Texture_Scale_Offset.w = half_offset.y; } else if (tex->m_target) { @@ -817,7 +819,9 @@ void GSRendererOGL::EmulateTextureSampler(const GSTextureCache::Source* tex) bilinear &= m_vt.IsLinear(); } - vs_cb.TextureOffset = RealignTargetTextureCoordinate(tex); + GSVector4 half_offset = RealignTargetTextureCoordinate(tex); + vs_cb.Texture_Scale_Offset.z = half_offset.x; + vs_cb.Texture_Scale_Offset.w = half_offset.y; } else if (tex->m_palette) { @@ -882,7 +886,10 @@ void GSRendererOGL::EmulateTextureSampler(const GSTextureCache::Source* tex) // TC Offset Hack m_ps_sel.tcoffsethack = m_userhacks_tcoffset; - ps_cb.TC_OH_TS = GSVector4(1 / 16.0f, 1 / 16.0f, m_userhacks_tcoffset_x, m_userhacks_tcoffset_y) / WH.xyxy(); + GSVector4 tc_oh_ts = GSVector4(1 / 16.0f, 1 / 16.0f, m_userhacks_tcoffset_x, m_userhacks_tcoffset_y) / WH.xyxy(); + ps_cb.TC_OH = tc_oh_ts.zwzw(); + vs_cb.Texture_Scale_Offset.x = tc_oh_ts.x; + vs_cb.Texture_Scale_Offset.y = tc_oh_ts.y; // Must be done after all coordinates math if (m_context->HasFixedTEX0() && !PRIM->FST) @@ -1138,7 +1145,7 @@ void GSRendererOGL::DrawPrims(GSTexture* rt, GSTexture* ds, GSTextureCache::Sour const bool ate_second_pass = m_context->TEST.DoSecondPass(); ResetStates(); - vs_cb.TextureOffset = GSVector4(0.0f); + vs_cb.Texture_Scale_Offset = GSVector4(0.0f); ASSERT(m_dev != NULL); GSDeviceOGL* dev = (GSDeviceOGL*)m_dev; diff --git a/pcsx2/GS/res/glsl/common_header.glsl b/pcsx2/GS/res/glsl/common_header.glsl index 9420c24727..a17edce8c5 100644 --- a/pcsx2/GS/res/glsl/common_header.glsl +++ b/pcsx2/GS/res/glsl/common_header.glsl @@ -63,7 +63,8 @@ layout(std140, binding = 20) uniform cb20 vec2 VertexScale; vec2 VertexOffset; - vec4 TextureOffset; + vec2 TextureScale; + vec2 TextureOffset; vec2 PointSize; uint MaxDepth; @@ -91,10 +92,10 @@ layout(std140, binding = 21) uniform cb21 vec4 MinMax; - vec2 TextureScale; + vec2 pad1_cb21; vec2 TC_OffsetHack; - vec3 pad1_cb21; + vec3 pad2_cb21; float MaxDepthPS; mat4 DitherMatrix; diff --git a/pcsx2/GS/res/glsl/tfx_vgs.glsl b/pcsx2/GS/res/glsl/tfx_vgs.glsl index 732727f23b..93c9c2a5fd 100644 --- a/pcsx2/GS/res/glsl/tfx_vgs.glsl +++ b/pcsx2/GS/res/glsl/tfx_vgs.glsl @@ -24,8 +24,8 @@ const float exp_min32 = exp2(-32.0f); void texture_coord() { - vec2 uv = vec2(i_uv) - TextureOffset.xy; - vec2 st = i_st - TextureOffset.xy; + vec2 uv = vec2(i_uv) - TextureOffset; + vec2 st = i_st - TextureOffset; // Float coordinate VSout.t_float.xy = st;