gsdx-d3d11: Port/add depth mask support to EmulateZbuffer.

Add support for depthmasking to EmulateZbuffer, previous old code had
support but wasn't ported properly with the new code a few years back.

VS Constant buffer is now properly setup.
This commit is contained in:
lightningterror 2020-05-23 00:58:53 +02:00
parent 639986faa7
commit 24f06187df
4 changed files with 12 additions and 15 deletions

View File

@ -42,11 +42,14 @@ public:
GSVector4 VertexOffset;
GSVector4 Texture_Scale_Offset;
GSVector2i DepthMask;
VSConstantBuffer()
{
VertexScale = GSVector4::zero();
VertexOffset = GSVector4::zero();
VertexScale = GSVector4::zero();
VertexOffset = GSVector4::zero();
Texture_Scale_Offset = GSVector4::zero();
DepthMask = GSVector2i(0);
}
__forceinline bool Update(const VSConstantBuffer* cb)
@ -74,11 +77,10 @@ public:
{
struct
{
uint32 bppz:2;
uint32 tme:1;
uint32 fst:1;
uint32 _free:28;
uint32 _free:30;
};
uint32 key;

View File

@ -176,6 +176,7 @@ void GSRendererDX11::EmulateZbuffer()
// The real GS appears to do no masking based on the Z buffer format and writing larger Z values
// than the buffer supports seems to be an error condition on the real GS, causing it to crash.
// We are probably receiving bad coordinates from VU1 in these cases.
vs_cb.DepthMask = GSVector2i(0xFFFFFFFF, 0xFFFFFFFF);
if (m_om_dssel.ztst >= ZTST_ALWAYS && m_om_dssel.zwe && (m_context->ZBUF.PSM != PSM_PSMZ32))
{
@ -188,6 +189,7 @@ void GSRendererDX11::EmulateZbuffer()
#ifdef _DEBUG
fprintf(stdout, "%d: Bad Z size on %s buffers\n", s_n, psm_str(m_context->ZBUF.PSM));
#endif
vs_cb.DepthMask = GSVector2i(max_z, max_z);
m_om_dssel.ztst = ZTST_ALWAYS;
}
}

View File

@ -101,7 +101,6 @@ void GSDevice11::SetupVS(VSSelector sel, const VSConstantBuffer* cb)
{
ShaderMacro sm(m_shader.model);
sm.AddMacro("VS_BPPZ", sel.bppz);
sm.AddMacro("VS_TME", sel.tme);
sm.AddMacro("VS_FST", sel.fst);

View File

@ -4,8 +4,7 @@
#define FMT_24 1
#define FMT_16 2
#ifndef VS_BPPZ
#define VS_BPPZ 0
#ifndef VS_TME
#define VS_TME 1
#define VS_FST 1
#endif
@ -100,6 +99,8 @@ cbuffer cb0
float4 VertexScale;
float4 VertexOffset;
float4 Texture_Scale_Offset;
uint DepthMask;
uint3 _pad_cb0;
};
cbuffer cb1
@ -786,14 +787,7 @@ PS_OUTPUT ps_main(PS_INPUT input)
VS_OUTPUT vs_main(VS_INPUT input)
{
if(VS_BPPZ == 1) // 24
{
input.z = input.z & 0xffffff;
}
else if(VS_BPPZ == 2) // 16
{
input.z = input.z & 0xffff;
}
input.z &= DepthMask;
VS_OUTPUT output;