mirror of https://github.com/RPCS3/rpcs3.git
rsx/gl/vk: Invert default stencil values
- Fixes stencil volume shadows in a few games. This is part of the surface invalidation workarounds
This commit is contained in:
parent
30f276a49b
commit
86adc42739
|
@ -236,7 +236,8 @@ void GLGSRender::begin()
|
||||||
__glcheck glStencilOp(stencil_op(rsx::method_registers.stencil_op_fail()), stencil_op(rsx::method_registers.stencil_op_zfail()),
|
__glcheck glStencilOp(stencil_op(rsx::method_registers.stencil_op_fail()), stencil_op(rsx::method_registers.stencil_op_zfail()),
|
||||||
stencil_op(rsx::method_registers.stencil_op_zpass()));
|
stencil_op(rsx::method_registers.stencil_op_zpass()));
|
||||||
|
|
||||||
if (rsx::method_registers.two_sided_stencil_test_enabled()) {
|
if (rsx::method_registers.two_sided_stencil_test_enabled())
|
||||||
|
{
|
||||||
__glcheck glStencilMaskSeparate(GL_BACK, rsx::method_registers.back_stencil_mask());
|
__glcheck glStencilMaskSeparate(GL_BACK, rsx::method_registers.back_stencil_mask());
|
||||||
__glcheck glStencilFuncSeparate(GL_BACK, comparison_op(rsx::method_registers.back_stencil_func()),
|
__glcheck glStencilFuncSeparate(GL_BACK, comparison_op(rsx::method_registers.back_stencil_func()),
|
||||||
rsx::method_registers.back_stencil_func_ref(), rsx::method_registers.back_stencil_func_mask());
|
rsx::method_registers.back_stencil_func_ref(), rsx::method_registers.back_stencil_func_mask());
|
||||||
|
@ -353,7 +354,7 @@ void GLGSRender::end()
|
||||||
glDepthMask(GL_TRUE);
|
glDepthMask(GL_TRUE);
|
||||||
|
|
||||||
glClearDepth(1.0);
|
glClearDepth(1.0);
|
||||||
glClearStencil(0);
|
glClearStencil(255);
|
||||||
|
|
||||||
glClear(GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
|
glClear(GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
|
||||||
|
|
||||||
|
|
|
@ -1434,6 +1434,9 @@ bool VKGSRender::load_program()
|
||||||
|
|
||||||
if (rsx::method_registers.two_sided_stencil_test_enabled())
|
if (rsx::method_registers.two_sided_stencil_test_enabled())
|
||||||
{
|
{
|
||||||
|
properties.ds.back.writeMask = rsx::method_registers.back_stencil_mask();
|
||||||
|
properties.ds.back.compareMask = rsx::method_registers.back_stencil_func_mask();
|
||||||
|
properties.ds.back.reference = rsx::method_registers.back_stencil_func_ref();
|
||||||
properties.ds.back.failOp = vk::get_stencil_op(rsx::method_registers.back_stencil_op_fail());
|
properties.ds.back.failOp = vk::get_stencil_op(rsx::method_registers.back_stencil_op_fail());
|
||||||
properties.ds.back.passOp = vk::get_stencil_op(rsx::method_registers.back_stencil_op_zpass());
|
properties.ds.back.passOp = vk::get_stencil_op(rsx::method_registers.back_stencil_op_zpass());
|
||||||
properties.ds.back.depthFailOp = vk::get_stencil_op(rsx::method_registers.back_stencil_op_zfail());
|
properties.ds.back.depthFailOp = vk::get_stencil_op(rsx::method_registers.back_stencil_op_zfail());
|
||||||
|
|
|
@ -103,7 +103,7 @@ namespace rsx
|
||||||
VkClearDepthStencilValue clear_depth = {};
|
VkClearDepthStencilValue clear_depth = {};
|
||||||
|
|
||||||
clear_depth.depth = 1.f;
|
clear_depth.depth = 1.f;
|
||||||
clear_depth.stencil = 0;
|
clear_depth.stencil = 255;
|
||||||
|
|
||||||
vkCmdClearDepthStencilImage(*cmd, ds->value, VK_IMAGE_LAYOUT_GENERAL, &clear_depth, 1, &range);
|
vkCmdClearDepthStencilImage(*cmd, ds->value, VK_IMAGE_LAYOUT_GENERAL, &clear_depth, 1, &range);
|
||||||
change_image_layout(*cmd, ds.get(), VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, range);
|
change_image_layout(*cmd, ds.get(), VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, range);
|
||||||
|
@ -152,7 +152,7 @@ namespace rsx
|
||||||
//Clear the surface before drawing on it
|
//Clear the surface before drawing on it
|
||||||
VkClearDepthStencilValue clear_depth = {};
|
VkClearDepthStencilValue clear_depth = {};
|
||||||
clear_depth.depth = 1.f;
|
clear_depth.depth = 1.f;
|
||||||
clear_depth.stencil = 0;
|
clear_depth.stencil = 255;
|
||||||
|
|
||||||
vkCmdClearDepthStencilImage(*pcmd, ds->value, VK_IMAGE_LAYOUT_GENERAL, &clear_depth, 1, &range);
|
vkCmdClearDepthStencilImage(*pcmd, ds->value, VK_IMAGE_LAYOUT_GENERAL, &clear_depth, 1, &range);
|
||||||
change_image_layout(*pcmd, ds, old_layout, range);
|
change_image_layout(*pcmd, ds, old_layout, range);
|
||||||
|
|
Loading…
Reference in New Issue