GS/HW: ignore lower 3 bits of 16bit color for AEM check

This commit is contained in:
refractionpcsx2 2024-01-14 04:41:24 +00:00
parent e2ae28741d
commit badede2e2d
4 changed files with 4 additions and 4 deletions

View File

@ -631,7 +631,7 @@ float4 sample_color(float2 st, float uv_w)
} }
else if(PS_AEM_FMT == FMT_16) else if(PS_AEM_FMT == FMT_16)
{ {
c[i].a = c[i].a >= 0.5 ? TA.y : !PS_AEM || any(c[i].rgb) ? TA.x : 0; c[i].a = c[i].a >= 0.5 ? TA.y : !PS_AEM || any(int3(c[i].rgb * 255.0f) & 0xF8) ? TA.x : 0;
} }
} }

View File

@ -580,7 +580,7 @@ vec4 sample_color(vec2 st)
c[i].a = ( (PS_AEM == 0) || any(bvec3(c[i].rgb)) ) ? TA.x : 0.0f; c[i].a = ( (PS_AEM == 0) || any(bvec3(c[i].rgb)) ) ? TA.x : 0.0f;
//c[i].a = ( (PS_AEM == 0) || (sum > 0.0f) ) ? TA.x : 0.0f; //c[i].a = ( (PS_AEM == 0) || (sum > 0.0f) ) ? TA.x : 0.0f;
#elif (PS_AEM_FMT == FMT_16) #elif (PS_AEM_FMT == FMT_16)
c[i].a = c[i].a >= 0.5 ? TA.y : ( (PS_AEM == 0) || any(bvec3(c[i].rgb)) ) ? TA.x : 0.0f; c[i].a = c[i].a >= 0.5 ? TA.y : ( (PS_AEM == 0) || any(bvec3(ivec3(c[i].rgb * 255.0f) & ivec3(0xF8))) ) ? TA.x : 0.0f;
//c[i].a = c[i].a >= 0.5 ? TA.y : ( (PS_AEM == 0) || (sum > 0.0f) ) ? TA.x : 0.0f; //c[i].a = c[i].a >= 0.5 ? TA.y : ( (PS_AEM == 0) || (sum > 0.0f) ) ? TA.x : 0.0f;
#endif #endif
} }

View File

@ -817,7 +817,7 @@ vec4 sample_color(vec2 st)
#if (PS_AEM_FMT == FMT_24) #if (PS_AEM_FMT == FMT_24)
c[i].a = (PS_AEM == 0 || any(bvec3(c[i].rgb))) ? TA.x : 0.0f; c[i].a = (PS_AEM == 0 || any(bvec3(c[i].rgb))) ? TA.x : 0.0f;
#elif (PS_AEM_FMT == FMT_16) #elif (PS_AEM_FMT == FMT_16)
c[i].a = (c[i].a >= 0.5) ? TA.y : ((PS_AEM == 0 || any(bvec3(c[i].rgb))) ? TA.x : 0.0f); c[i].a = (c[i].a >= 0.5) ? TA.y : ((PS_AEM == 0 || any(bvec3(ivec3(c[i].rgb * 255.0f) & ivec3(0xF8)))) ? TA.x : 0.0f);
#endif #endif
} }

View File

@ -702,7 +702,7 @@ struct PSMain
if (PS_AEM_FMT == FMT_24) if (PS_AEM_FMT == FMT_24)
c[i].a = !PS_AEM || any(c[i].rgb != 0) ? cb.ta.x : 0.f; c[i].a = !PS_AEM || any(c[i].rgb != 0) ? cb.ta.x : 0.f;
else if (PS_AEM_FMT == FMT_16) else if (PS_AEM_FMT == FMT_16)
c[i].a = c[i].a >= 0.5 ? cb.ta.y : !PS_AEM || any(c[i].rgb != 0) ? cb.ta.x : 0.f; c[i].a = c[i].a >= 0.5 ? cb.ta.y : !PS_AEM || any((int3(c[i].rgb * 255.0f) & 0xF8) != 0) ? cb.ta.x : 0.f;
} }
if (PS_LTF) if (PS_LTF)