From 0b81ff019312dd388836ba493905a80ddc8c5a7b Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Tue, 27 Sep 2022 14:39:56 -0400 Subject: [PATCH] zink: set depth clamp this is correct according to spec Reviewed-by: Adam Jackson Part-of: --- src/gallium/drivers/zink/zink_draw.cpp | 2 +- src/gallium/drivers/zink/zink_pipeline.c | 4 +--- src/gallium/drivers/zink/zink_state.c | 1 + src/gallium/drivers/zink/zink_types.h | 1 + 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/gallium/drivers/zink/zink_draw.cpp b/src/gallium/drivers/zink/zink_draw.cpp index 1ada2ad..5f657d4 100644 --- a/src/gallium/drivers/zink/zink_draw.cpp +++ b/src/gallium/drivers/zink/zink_draw.cpp @@ -638,7 +638,7 @@ zink_draw(struct pipe_context *pctx, if ((BATCH_CHANGED || rast_state_changed) && DYNAMIC_STATE >= ZINK_DYNAMIC_STATE3) { VKCTX(CmdSetDepthClipEnableEXT)(batch->state->cmdbuf, rast_state->hw_state.depth_clip); - VKCTX(CmdSetDepthClampEnableEXT)(batch->state->cmdbuf, !rast_state->hw_state.depth_clip); + VKCTX(CmdSetDepthClampEnableEXT)(batch->state->cmdbuf, rast_state->hw_state.depth_clamp); VKCTX(CmdSetPolygonModeEXT)(batch->state->cmdbuf, (VkPolygonMode)rast_state->hw_state.polygon_mode); VKCTX(CmdSetDepthClipNegativeOneToOneEXT)(batch->state->cmdbuf, !rast_state->hw_state.clip_halfz); VKCTX(CmdSetProvokingVertexModeEXT)(batch->state->cmdbuf, rast_state->hw_state.pv_last ? diff --git a/src/gallium/drivers/zink/zink_pipeline.c b/src/gallium/drivers/zink/zink_pipeline.c index 6d911c7..6273703 100644 --- a/src/gallium/drivers/zink/zink_pipeline.c +++ b/src/gallium/drivers/zink/zink_pipeline.c @@ -153,7 +153,7 @@ zink_create_gfx_pipeline(struct zink_screen *screen, VkPipelineRasterizationStateCreateInfo rast_state = {0}; rast_state.sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO; - rast_state.depthClampEnable = true; + rast_state.depthClampEnable = hw_rast_state->depth_clamp; rast_state.rasterizerDiscardEnable = state->dyn_state2.rasterizer_discard; rast_state.polygonMode = hw_rast_state->polygon_mode; rast_state.cullMode = state->dyn_state1.cull_mode; @@ -174,7 +174,6 @@ zink_create_gfx_pipeline(struct zink_screen *screen, } else { static bool warned = false; warn_missing_feature(warned, "VK_EXT_depth_clip_enable"); - rast_state.depthClampEnable = !hw_rast_state->depth_clip; } VkPipelineRasterizationProvokingVertexStateCreateInfoEXT pv_state; @@ -663,7 +662,6 @@ zink_create_gfx_pipeline_library(struct zink_screen *screen, struct zink_gfx_pro VkPipelineRasterizationStateCreateInfo rast_state = {0}; rast_state.sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO; rast_state.depthBiasEnable = VK_TRUE; - rast_state.depthClampEnable = VK_TRUE; VkPipelineDepthStencilStateCreateInfo depth_stencil_state = {0}; depth_stencil_state.sType = VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO; diff --git a/src/gallium/drivers/zink/zink_state.c b/src/gallium/drivers/zink/zink_state.c index f3e757e..99628d8 100644 --- a/src/gallium/drivers/zink/zink_state.c +++ b/src/gallium/drivers/zink/zink_state.c @@ -591,6 +591,7 @@ zink_create_rasterizer_state(struct pipe_context *pctx, assert(rs_state->depth_clip_far == rs_state->depth_clip_near); state->hw_state.depth_clip = rs_state->depth_clip_near; + state->hw_state.depth_clamp = rs_state->depth_clamp; state->hw_state.pv_last = !rs_state->flatshade_first; state->hw_state.clip_halfz = rs_state->clip_halfz; diff --git a/src/gallium/drivers/zink/zink_types.h b/src/gallium/drivers/zink/zink_types.h index 0e84fe0..7e1465f 100644 --- a/src/gallium/drivers/zink/zink_types.h +++ b/src/gallium/drivers/zink/zink_types.h @@ -255,6 +255,7 @@ struct zink_rasterizer_hw_state { unsigned polygon_mode : 2; //VkPolygonMode unsigned line_mode : 2; //VkLineRasterizationModeEXT unsigned depth_clip:1; + unsigned depth_clamp:1; unsigned pv_last:1; unsigned line_stipple_enable:1; unsigned clip_halfz:1; -- 2.7.4