From 6b00301c04445b36a75eabe8a9d10f44859cf0be Mon Sep 17 00:00:00 2001 From: Frank Binns Date: Thu, 11 Apr 2024 10:22:38 +0100 Subject: [PATCH] pvr: implement VK_EXT_depth_clip_enable Signed-off-by: Frank Binns Acked-by: Erik Faye-Lund Part-of: --- docs/features.txt | 2 +- src/imagination/vulkan/pvr_cmd_buffer.c | 16 ++++++++++++++-- src/imagination/vulkan/pvr_device.c | 4 ++++ 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/docs/features.txt b/docs/features.txt index 9019b135209..6fcbc717998 100644 --- a/docs/features.txt +++ b/docs/features.txt @@ -604,7 +604,7 @@ Khronos extensions that are not part of any Vulkan version: VK_EXT_depth_bias_control DONE (anv, hk, lvp, nvk, panvk, radv, vn) VK_EXT_depth_clamp_control DONE (anv, hasvk, nvk, radv, vn) VK_EXT_depth_clip_control DONE (anv, hasvk, hk, lvp, nvk, panvk, radv, tu, v3dv, vn) - VK_EXT_depth_clip_enable DONE (anv, hasvk, hk, lvp, nvk, panvk, radv, tu, v3dv/vc7+, vn) + VK_EXT_depth_clip_enable DONE (anv, hasvk, hk, lvp, nvk, panvk, pvr, radv, tu, v3dv/vc7+, vn) VK_EXT_depth_range_unrestricted DONE (anv/gen20+, nvk, radv, lvp, vn) VK_EXT_descriptor_buffer DONE (anv, lvp, nvk, radv, tu) VK_EXT_device_address_binding_report DONE (radv, tu) diff --git a/src/imagination/vulkan/pvr_cmd_buffer.c b/src/imagination/vulkan/pvr_cmd_buffer.c index 2bb1abffd22..6e6acf152ac 100644 --- a/src/imagination/vulkan/pvr_cmd_buffer.c +++ b/src/imagination/vulkan/pvr_cmd_buffer.c @@ -5532,10 +5532,22 @@ static void pvr_setup_ppp_control(struct pvr_cmd_buffer *const cmd_buffer) else control.flatshade_vtx = ROGUE_TA_FLATSHADE_VTX_VERTEX_0; - if (dynamic_state->rs.depth_clamp_enable) + switch (dynamic_state->rs.depth_clip_enable) { + case VK_MESA_DEPTH_CLIP_ENABLE_FALSE: control.clip_mode = ROGUE_TA_CLIP_MODE_NO_FRONT_OR_REAR; - else + break; + + case VK_MESA_DEPTH_CLIP_ENABLE_TRUE: control.clip_mode = ROGUE_TA_CLIP_MODE_FRONT_REAR; + break; + + case VK_MESA_DEPTH_CLIP_ENABLE_NOT_CLAMP: + if (dynamic_state->rs.depth_clamp_enable) + control.clip_mode = ROGUE_TA_CLIP_MODE_NO_FRONT_OR_REAR; + else + control.clip_mode = ROGUE_TA_CLIP_MODE_FRONT_REAR; + break; + } /* +--- FrontIsCCW? * | +--- Cull Front? diff --git a/src/imagination/vulkan/pvr_device.c b/src/imagination/vulkan/pvr_device.c index 28ba4ef7319..e5211bea295 100644 --- a/src/imagination/vulkan/pvr_device.c +++ b/src/imagination/vulkan/pvr_device.c @@ -198,6 +198,7 @@ static void pvr_physical_device_get_supported_extensions( .EXT_color_write_enable = true, .EXT_custom_border_color = true, .EXT_depth_clamp_zero_one = true, + .EXT_depth_clip_enable = true, .EXT_extended_dynamic_state = true, .EXT_external_memory_dma_buf = true, .EXT_host_query_reset = true, @@ -339,6 +340,9 @@ static void pvr_physical_device_get_supported_features( /* VK_EXT_custom_border_color */ .customBorderColors = true, + + /* VK_EXT_depth_clip_enable */ + .depthClipEnable = true, }; }