mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-08-06 01:12:33 +00:00
vk_rasterizer: Handle viewport enable flags
This commit is contained in:
parent
cff8124943
commit
7366c9af41
@ -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,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user