diff --git a/rpcs3/Emu/RSX/D3D12/D3D12Buffer.cpp b/rpcs3/Emu/RSX/D3D12/D3D12Buffer.cpp index c6b976b491..569e93716a 100644 --- a/rpcs3/Emu/RSX/D3D12/D3D12Buffer.cpp +++ b/rpcs3/Emu/RSX/D3D12/D3D12Buffer.cpp @@ -436,6 +436,7 @@ void D3D12GSRender::setScaleOffset() void *scaleOffsetMap; check(scaleOffsetBuffer->Map(0, nullptr, &scaleOffsetMap)); streamToBuffer(scaleOffsetMap, scaleOffsetMat, 16 * sizeof(float)); + streamToBuffer((char*)scaleOffsetMap + 16 * sizeof(float), &m_alpha_ref, sizeof(float)); scaleOffsetBuffer->Unmap(0, nullptr); D3D12_CONSTANT_BUFFER_VIEW_DESC constantBufferViewDesc = {}; diff --git a/rpcs3/Emu/RSX/D3D12/D3D12FragmentProgramDecompiler.cpp b/rpcs3/Emu/RSX/D3D12/D3D12FragmentProgramDecompiler.cpp index ec1032a548..cc51b4450e 100644 --- a/rpcs3/Emu/RSX/D3D12/D3D12FragmentProgramDecompiler.cpp +++ b/rpcs3/Emu/RSX/D3D12/D3D12FragmentProgramDecompiler.cpp @@ -34,7 +34,11 @@ std::string D3D12FragmentDecompiler::compareFunction(COMPARE f, const std::strin void D3D12FragmentDecompiler::insertHeader(std::stringstream & OS) { - OS << "// Header" << std::endl; + OS << "cbuffer SCALE_OFFSET : register(b0)" << std::endl; + OS << "{" << std::endl; + OS << " float4x4 scaleOffsetMat;" << std::endl; + OS << " float alphaRef;" << std::endl; + OS << "};" << std::endl; } void D3D12FragmentDecompiler::insertIntputs(std::stringstream & OS) @@ -158,6 +162,7 @@ void D3D12FragmentDecompiler::insertMainEnd(std::stringstream & OS) else if (m_parr.HasParam(PF_PARAM_NONE, "float4", table2[i].second)) OS << " Out." << table2[i].first << " = " << table2[i].second << ";" << std::endl; } + OS << " if (Out.ocol0.a <= alphaRef) discard;" << std::endl; OS << " return Out;" << std::endl; OS << "}" << std::endl; } diff --git a/rpcs3/Emu/RSX/D3D12/D3D12VertexProgramDecompiler.cpp b/rpcs3/Emu/RSX/D3D12/D3D12VertexProgramDecompiler.cpp index 6129ca5611..50bf886b32 100644 --- a/rpcs3/Emu/RSX/D3D12/D3D12VertexProgramDecompiler.cpp +++ b/rpcs3/Emu/RSX/D3D12/D3D12VertexProgramDecompiler.cpp @@ -26,6 +26,7 @@ void D3D12VertexProgramDecompiler::insertHeader(std::stringstream &OS) OS << "cbuffer SCALE_OFFSET : register(b0)" << std::endl; OS << "{" << std::endl; OS << " float4x4 scaleOffsetMat;" << std::endl; + OS << " float alphaRef;" << std::endl; OS << "};" << std::endl; }