Apply half pixel offset in the vertex shader. (#1391)

This commit is contained in:
Skyth (Asilkan) 2025-03-23 17:25:40 +03:00 committed by GitHub
parent 7866765ab0
commit 41fd1761b1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 12 additions and 5 deletions

View file

@ -43,7 +43,7 @@ void main(
out float4 oColor0 : COLOR0,
out float4 oColor1 : COLOR1)
{
oPos.xy = (iPosition0.xy - 0.5) * g_ViewportSize.zw * float2(2.0, -2.0) + float2(-1.0, 1.0);
oPos.xy = iPosition0.xy * g_ViewportSize.zw * float2(2.0, -2.0) + float2(-1.0, 1.0);
oPos.z = g_Z.x;
oPos.w = 1.0;
oTexCoord0 = iColor0.wxyz;

View file

@ -44,7 +44,7 @@ void main(
out float4 oColor0 : COLOR0,
out float4 oColor1 : COLOR1)
{
oPos.xy = (iPosition0.xy - 0.5) * g_ViewportSize.zw * float2(2.0, -2.0) + float2(-1.0, 1.0);
oPos.xy = iPosition0.xy * g_ViewportSize.zw * float2(2.0, -2.0) + float2(-1.0, 1.0);
oPos.z = g_Z.x;
oPos.w = 1.0;
oTexCoord0 = iColor0.wxyz;

View file

@ -4,6 +4,7 @@ Interpolators main(in VertexShaderInput In)
{
Interpolators Out;
Out.ProjPos = In.ObjPos;
Out.ProjPos.xy += g_HalfPixelOffset * Out.ProjPos.w;
Out.UV = In.UV;
return Out;
}

View file

@ -163,6 +163,8 @@ struct SharedConstants
uint32_t samplerIndices[16]{};
uint32_t booleans{};
uint32_t swappedTexcoords{};
float halfPixelOffsetX{};
float halfPixelOffsetY{};
float alphaThreshold{};
};
@ -3089,8 +3091,6 @@ static void FlushViewport()
if (g_dirtyStates.viewport)
{
auto viewport = g_viewport;
viewport.x += 0.5f;
viewport.y += 0.5f;
if (viewport.minDepth > viewport.maxDepth)
std::swap(viewport.minDepth, viewport.maxDepth);
@ -3514,6 +3514,12 @@ static void SetFramebuffer(GuestSurface* renderTarget, GuestSurface* depthStenci
g_framebuffer = nullptr;
}
if (g_framebuffer != nullptr)
{
SetDirtyValue(g_dirtyStates.sharedConstants, g_sharedConstants.halfPixelOffsetX, 1.0f / float(g_framebuffer->getWidth()));
SetDirtyValue(g_dirtyStates.sharedConstants, g_sharedConstants.halfPixelOffsetY, -1.0f / float(g_framebuffer->getHeight()));
}
g_dirtyStates.renderTargetAndDepthStencil = settingForClear;
}
}

@ -1 +1 @@
Subproject commit 855a5a8c51ea5f84baecbf4fc87c182795d482c9
Subproject commit 4897cf7ef2070120310c28a1a672b427d745dad8