mirror of
https://github.com/KytyPS5/KytyPS5.git
synced 2026-10-21 03:16:54 +02:00
graphics: preserve unrestricted viewport depth ranges
This commit is contained in:
@@ -336,6 +336,8 @@ static void SetGraphicsDynamicParams(const CommandBuffer& buffer, vk::CommandBuf
|
|||||||
const auto& ctx = buffer.GetRegisters();
|
const auto& ctx = buffer.GetRegisters();
|
||||||
|
|
||||||
const auto& vp = ctx.GetScreenViewport();
|
const auto& vp = ctx.GetScreenViewport();
|
||||||
|
const auto& viewport_regs = vp.viewports[0];
|
||||||
|
const auto& clip_control = ctx.GetClipControl();
|
||||||
vk::Extent2D framebuffer_extent {};
|
vk::Extent2D framebuffer_extent {};
|
||||||
if (color_count > 0 && colors[0].image_id) {
|
if (color_count > 0 && colors[0].image_id) {
|
||||||
framebuffer_extent = colors[0].extent;
|
framebuffer_extent = colors[0].extent;
|
||||||
@@ -349,20 +351,21 @@ static void SetGraphicsDynamicParams(const CommandBuffer& buffer, vk::CommandBuf
|
|||||||
const auto final_scissor = calc_final_scissor(vp, ctx.GetScanModeControl(), framebuffer_extent);
|
const auto final_scissor = calc_final_scissor(vp, ctx.GetScanModeControl(), framebuffer_extent);
|
||||||
|
|
||||||
vk::Viewport viewport {};
|
vk::Viewport viewport {};
|
||||||
if (ctx.GetClipControl().clip_disable) {
|
if (clip_control.clip_disable) {
|
||||||
const auto& limits = buffer.GetGraphics().GetPhysicalDeviceProperties().limits;
|
const auto& limits = buffer.GetGraphics().GetPhysicalDeviceProperties().limits;
|
||||||
viewport.x = 0.0f;
|
viewport.x = 0.0f;
|
||||||
viewport.y = 0.0f;
|
viewport.y = 0.0f;
|
||||||
viewport.width = static_cast<float>(std::min(limits.maxViewportDimensions[0], 16384u));
|
viewport.width = static_cast<float>(std::min(limits.maxViewportDimensions[0], 16384u));
|
||||||
viewport.height = static_cast<float>(std::min(limits.maxViewportDimensions[1], 16384u));
|
viewport.height = static_cast<float>(std::min(limits.maxViewportDimensions[1], 16384u));
|
||||||
} else {
|
} else {
|
||||||
viewport.x = vp.viewports[0].xoffset - vp.viewports[0].xscale;
|
viewport.x = viewport_regs.xoffset - viewport_regs.xscale;
|
||||||
viewport.y = vp.viewports[0].yoffset - vp.viewports[0].yscale;
|
viewport.y = viewport_regs.yoffset - viewport_regs.yscale;
|
||||||
viewport.width = vp.viewports[0].xscale * 2.0f;
|
viewport.width = viewport_regs.xscale * 2.0f;
|
||||||
viewport.height = vp.viewports[0].yscale * 2.0f;
|
viewport.height = viewport_regs.yscale * 2.0f;
|
||||||
}
|
}
|
||||||
viewport.minDepth = vp.viewports[0].zoffset;
|
viewport.minDepth =
|
||||||
viewport.maxDepth = vp.viewports[0].zscale + vp.viewports[0].zoffset;
|
viewport_regs.zoffset - (clip_control.dx_clip_space ? 0.0f : viewport_regs.zscale);
|
||||||
|
viewport.maxDepth = viewport_regs.zoffset + viewport_regs.zscale;
|
||||||
vk_buffer.setViewport(0, 1, &viewport);
|
vk_buffer.setViewport(0, 1, &viewport);
|
||||||
|
|
||||||
vk::Rect2D scissor {};
|
vk::Rect2D scissor {};
|
||||||
|
|||||||
@@ -1019,7 +1019,8 @@ void WindowContext::CreateVulkan() {
|
|||||||
|
|
||||||
std::vector<const char*> device_extensions = {
|
std::vector<const char*> device_extensions = {
|
||||||
VK_KHR_SWAPCHAIN_EXTENSION_NAME, VK_EXT_DEPTH_CLIP_CONTROL_EXTENSION_NAME,
|
VK_KHR_SWAPCHAIN_EXTENSION_NAME, VK_EXT_DEPTH_CLIP_CONTROL_EXTENSION_NAME,
|
||||||
VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME, "VK_KHR_maintenance1"};
|
VK_EXT_DEPTH_RANGE_UNRESTRICTED_EXTENSION_NAME, VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME,
|
||||||
|
"VK_KHR_maintenance1"};
|
||||||
|
|
||||||
#if defined(__APPLE__)
|
#if defined(__APPLE__)
|
||||||
// MoltenVK lacks VK_EXT_depth_clip_enable and VK_EXT_color_write_enable; the renderer
|
// MoltenVK lacks VK_EXT_depth_clip_enable and VK_EXT_color_write_enable; the renderer
|
||||||
|
|||||||
Reference in New Issue
Block a user