From 1d5e1882f662fb4a922353ea272c1e94398f9155 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Tue, 7 Jul 2020 11:08:31 -0500 Subject: [PATCH] anv: Handle clamping of inverted depth ranges Tested-by: Mike Blumenkrantz Reviewed-by: Ivan Briano Part-of: --- src/intel/vulkan/gen8_cmd_buffer.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/intel/vulkan/gen8_cmd_buffer.c b/src/intel/vulkan/gen8_cmd_buffer.c index fe136ecd928..f2497231fea 100644 --- a/src/intel/vulkan/gen8_cmd_buffer.c +++ b/src/intel/vulkan/gen8_cmd_buffer.c @@ -104,9 +104,17 @@ gen8_cmd_buffer_emit_depth_viewport(struct anv_cmd_buffer *cmd_buffer, for (uint32_t i = 0; i < count; i++) { const VkViewport *vp = &viewports[i]; + /* From the Vulkan spec: + * + * "It is valid for minDepth to be greater than or equal to + * maxDepth." + */ + float min_depth = MIN2(vp->minDepth, vp->maxDepth); + float max_depth = MAX2(vp->minDepth, vp->maxDepth); + struct GENX(CC_VIEWPORT) cc_viewport = { - .MinimumDepth = depth_clamp_enable ? vp->minDepth : 0.0f, - .MaximumDepth = depth_clamp_enable ? vp->maxDepth : 1.0f, + .MinimumDepth = depth_clamp_enable ? min_depth : 0.0f, + .MaximumDepth = depth_clamp_enable ? max_depth : 1.0f, }; GENX(CC_VIEWPORT_pack)(NULL, cc_state.map + i * 8, &cc_viewport); -- 2.30.2