Skip to content

Commit 76436f2

Browse files
committed
Revert "renderer_vulkan: Simplify depth pipeline state and move stencil to dynamic state. (shadps4-emu#1854)"
This reverts commit 0a4453b. # Conflicts: # src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp
1 parent 6f6f3ed commit 76436f2

File tree

4 files changed

+35
-54
lines changed

4 files changed

+35
-54
lines changed

src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ GraphicsPipeline::GraphicsPipeline(
101101
.frontFace = key.front_face == Liverpool::FrontFace::Clockwise
102102
? vk::FrontFace::eClockwise
103103
: vk::FrontFace::eCounterClockwise,
104-
.depthBiasEnable = key.depth_bias_enable,
104+
.depthBiasEnable = bool(key.depth_bias_enable),
105105
.lineWidth = 1.0f,
106106
};
107107

@@ -128,7 +128,6 @@ GraphicsPipeline::GraphicsPipeline(
128128
vk::DynamicState::eStencilReference,
129129
vk::DynamicState::eStencilCompareMask,
130130
vk::DynamicState::eStencilWriteMask,
131-
vk::DynamicState::eStencilOpEXT,
132131
};
133132

134133
if (instance.IsColorWriteEnableSupported()) {
@@ -147,11 +146,31 @@ GraphicsPipeline::GraphicsPipeline(
147146
};
148147

149148
const vk::PipelineDepthStencilStateCreateInfo depth_info = {
150-
.depthTestEnable = key.depth_test_enable,
151-
.depthWriteEnable = key.depth_write_enable,
152-
.depthCompareOp = key.depth_compare_op,
153-
.depthBoundsTestEnable = key.depth_bounds_test_enable,
154-
.stencilTestEnable = key.stencil_test_enable,
149+
.depthTestEnable = key.depth_stencil.depth_enable,
150+
.depthWriteEnable = key.depth_stencil.depth_write_enable,
151+
.depthCompareOp = LiverpoolToVK::CompareOp(key.depth_stencil.depth_func),
152+
.depthBoundsTestEnable = key.depth_stencil.depth_bounds_enable,
153+
.stencilTestEnable = key.depth_stencil.stencil_enable,
154+
.front{
155+
.failOp = LiverpoolToVK::StencilOp(key.stencil.stencil_fail_front),
156+
.passOp = LiverpoolToVK::StencilOp(key.stencil.stencil_zpass_front),
157+
.depthFailOp = LiverpoolToVK::StencilOp(key.stencil.stencil_zfail_front),
158+
.compareOp = LiverpoolToVK::CompareOp(key.depth_stencil.stencil_ref_func),
159+
},
160+
.back{
161+
.failOp = LiverpoolToVK::StencilOp(key.depth_stencil.backface_enable
162+
? key.stencil.stencil_fail_back.Value()
163+
: key.stencil.stencil_fail_front.Value()),
164+
.passOp = LiverpoolToVK::StencilOp(key.depth_stencil.backface_enable
165+
? key.stencil.stencil_zpass_back.Value()
166+
: key.stencil.stencil_zpass_front.Value()),
167+
.depthFailOp = LiverpoolToVK::StencilOp(key.depth_stencil.backface_enable
168+
? key.stencil.stencil_zfail_back.Value()
169+
: key.stencil.stencil_zfail_front.Value()),
170+
.compareOp = LiverpoolToVK::CompareOp(key.depth_stencil.backface_enable
171+
? key.depth_stencil.stencil_bf_func.Value()
172+
: key.depth_stencil.stencil_ref_func.Value()),
173+
},
155174
};
156175

157176
boost::container::static_vector<vk::PipelineShaderStageCreateInfo, MaxShaderStages>

src/video_core/renderer_vulkan/vk_graphics_pipeline.h

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -40,19 +40,11 @@ struct GraphicsPipelineKey {
4040
vk::Format depth_format;
4141
vk::Format stencil_format;
4242

43-
struct {
44-
bool depth_test_enable : 1;
45-
bool depth_write_enable : 1;
46-
bool depth_bounds_test_enable : 1;
47-
bool depth_bias_enable : 1;
48-
bool stencil_test_enable : 1;
49-
// Must be named to be zero-initialized.
50-
u8 _unused : 3;
51-
};
52-
vk::CompareOp depth_compare_op;
53-
43+
Liverpool::DepthControl depth_stencil;
44+
u32 depth_bias_enable;
5445
u32 num_samples;
5546
u32 mrt_mask;
47+
Liverpool::StencilControl stencil;
5648
AmdGpu::PrimitiveType prim_type;
5749
u32 enable_primitive_restart;
5850
u32 primitive_restart_index;

src/video_core/renderer_vulkan/vk_pipeline_cache.cpp

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -268,13 +268,11 @@ bool PipelineCache::RefreshGraphicsKey() {
268268
auto& regs = liverpool->regs;
269269
auto& key = graphics_key;
270270

271-
key.depth_test_enable = regs.depth_control.depth_enable;
272-
key.depth_write_enable =
273-
regs.depth_control.depth_write_enable && !regs.depth_render_control.depth_clear_enable;
274-
key.depth_bounds_test_enable = regs.depth_control.depth_bounds_enable;
271+
key.depth_stencil = regs.depth_control;
272+
key.stencil = regs.stencil_control;
273+
key.depth_stencil.depth_write_enable.Assign(regs.depth_control.depth_write_enable.Value() &&
274+
!regs.depth_render_control.depth_clear_enable);
275275
key.depth_bias_enable = regs.polygon_control.NeedsBias();
276-
key.depth_compare_op = LiverpoolToVK::CompareOp(regs.depth_control.depth_func);
277-
key.stencil_test_enable = regs.depth_control.stencil_enable;
278276

279277
const auto depth_format = instance.GetSupportedFormat(
280278
LiverpoolToVK::DepthFormat(regs.depth_buffer.z_info.format,
@@ -284,13 +282,13 @@ bool PipelineCache::RefreshGraphicsKey() {
284282
key.depth_format = depth_format;
285283
} else {
286284
key.depth_format = vk::Format::eUndefined;
287-
key.depth_test_enable = false;
285+
key.depth_stencil.depth_enable.Assign(false);
288286
}
289287
if (regs.depth_buffer.StencilValid()) {
290288
key.stencil_format = depth_format;
291289
} else {
292290
key.stencil_format = vk::Format::eUndefined;
293-
key.stencil_test_enable = false;
291+
key.depth_stencil.stencil_enable.Assign(false);
294292
}
295293

296294
key.prim_type = regs.primitive_type;

src/video_core/renderer_vulkan/vk_rasterizer.cpp

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1070,33 +1070,7 @@ void Rasterizer::UpdateDynamicState(const GraphicsPipeline& pipeline) {
10701070
cmdbuf.setDepthBias(regs.poly_offset.back_offset, regs.poly_offset.depth_bias,
10711071
regs.poly_offset.back_scale / 16.f);
10721072
}
1073-
10741073
if (regs.depth_control.stencil_enable) {
1075-
const auto front_fail_op =
1076-
LiverpoolToVK::StencilOp(regs.stencil_control.stencil_fail_front);
1077-
const auto front_pass_op =
1078-
LiverpoolToVK::StencilOp(regs.stencil_control.stencil_zpass_front);
1079-
const auto front_depth_fail_op =
1080-
LiverpoolToVK::StencilOp(regs.stencil_control.stencil_zfail_front);
1081-
const auto front_compare_op = LiverpoolToVK::CompareOp(regs.depth_control.stencil_ref_func);
1082-
if (regs.depth_control.backface_enable) {
1083-
const auto back_fail_op =
1084-
LiverpoolToVK::StencilOp(regs.stencil_control.stencil_fail_back);
1085-
const auto back_pass_op =
1086-
LiverpoolToVK::StencilOp(regs.stencil_control.stencil_zpass_back);
1087-
const auto back_depth_fail_op =
1088-
LiverpoolToVK::StencilOp(regs.stencil_control.stencil_zfail_back);
1089-
const auto back_compare_op =
1090-
LiverpoolToVK::CompareOp(regs.depth_control.stencil_bf_func);
1091-
cmdbuf.setStencilOpEXT(vk::StencilFaceFlagBits::eFront, front_fail_op, front_pass_op,
1092-
front_depth_fail_op, front_compare_op);
1093-
cmdbuf.setStencilOpEXT(vk::StencilFaceFlagBits::eBack, back_fail_op, back_pass_op,
1094-
back_depth_fail_op, back_compare_op);
1095-
} else {
1096-
cmdbuf.setStencilOpEXT(vk::StencilFaceFlagBits::eFrontAndBack, front_fail_op,
1097-
front_pass_op, front_depth_fail_op, front_compare_op);
1098-
}
1099-
11001074
const auto front = regs.stencil_ref_front;
11011075
const auto back = regs.stencil_ref_back;
11021076
if (front.stencil_test_val == back.stencil_test_val) {
@@ -1106,15 +1080,13 @@ void Rasterizer::UpdateDynamicState(const GraphicsPipeline& pipeline) {
11061080
cmdbuf.setStencilReference(vk::StencilFaceFlagBits::eFront, front.stencil_test_val);
11071081
cmdbuf.setStencilReference(vk::StencilFaceFlagBits::eBack, back.stencil_test_val);
11081082
}
1109-
11101083
if (front.stencil_write_mask == back.stencil_write_mask) {
11111084
cmdbuf.setStencilWriteMask(vk::StencilFaceFlagBits::eFrontAndBack,
11121085
front.stencil_write_mask);
11131086
} else {
11141087
cmdbuf.setStencilWriteMask(vk::StencilFaceFlagBits::eFront, front.stencil_write_mask);
11151088
cmdbuf.setStencilWriteMask(vk::StencilFaceFlagBits::eBack, back.stencil_write_mask);
11161089
}
1117-
11181090
if (front.stencil_mask == back.stencil_mask) {
11191091
cmdbuf.setStencilCompareMask(vk::StencilFaceFlagBits::eFrontAndBack,
11201092
front.stencil_mask);

0 commit comments

Comments
 (0)