vk_rasterizer: Handle viewport enable flags

This commit is contained in:
IndecisiveTurtle 2024-12-24 01:21:25 +02:00
parent cff8124943
commit 7366c9af41

View File

@ -214,8 +214,8 @@ void Rasterizer::Draw(bool is_indexed, u32 index_offset) {
return; return;
} }
auto state = PrepareRenderState(pipeline->GetMrtMask());
auto state = PrepareRenderState(pipeline->GetMrtMask());
if (!BindResources(pipeline)) { if (!BindResources(pipeline)) {
return; return;
} }
@ -973,19 +973,26 @@ void Rasterizer::UpdateViewportScissorState() {
regs.clipper_control.clip_space == AmdGpu::Liverpool::ClipSpace::MinusWToW regs.clipper_control.clip_space == AmdGpu::Liverpool::ClipSpace::MinusWToW
? 1.0f ? 1.0f
: 0.0f; : 0.0f;
const auto vp_ctl = regs.viewport_control;
for (u32 i = 0; i < Liverpool::NumViewports; i++) { for (u32 i = 0; i < Liverpool::NumViewports; i++) {
const auto& vp = regs.viewports[i]; const auto& vp = regs.viewports[i];
const auto& vp_d = regs.viewport_depths[i]; const auto& vp_d = regs.viewport_depths[i];
if (vp.xscale == 0) { if (vp.xscale == 0) {
continue; continue;
} }
const auto xoffset = vp_ctl.xoffset_enable ? vp.xoffset : 0.f;
const auto xscale = vp_ctl.xscale_enable ? vp.xscale : 1.f;
const auto yoffset = vp_ctl.yoffset_enable ? vp.yoffset : 0.f;
const auto yscale = vp_ctl.yscale_enable ? vp.yscale : 1.f;
const auto zoffset = vp_ctl.zoffset_enable ? vp.zoffset : 0.f;
const auto zscale = vp_ctl.zscale_enable ? vp.zscale : 1.f;
viewports.push_back({ viewports.push_back({
.x = vp.xoffset - vp.xscale, .x = xoffset - xscale,
.y = vp.yoffset - vp.yscale, .y = yoffset - yscale,
.width = vp.xscale * 2.0f, .width = xscale * 2.0f,
.height = vp.yscale * 2.0f, .height = yscale * 2.0f,
.minDepth = vp.zoffset - vp.zscale * reduce_z, .minDepth = zoffset - zscale * reduce_z,
.maxDepth = vp.zscale + vp.zoffset, .maxDepth = zscale + zoffset,
}); });
} }