vulkan: Add support for VK_EXT_depth_clamp_control
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/31411>
This commit is contained in:
@@ -64,6 +64,7 @@ get_dynamic_state_groups(BITSET_WORD *dynamic,
|
||||
BITSET_SET(dynamic, MESA_VK_DYNAMIC_VP_SCISSOR_COUNT);
|
||||
BITSET_SET(dynamic, MESA_VK_DYNAMIC_VP_SCISSORS);
|
||||
BITSET_SET(dynamic, MESA_VK_DYNAMIC_VP_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE);
|
||||
BITSET_SET(dynamic, MESA_VK_DYNAMIC_VP_DEPTH_CLAMP_RANGE);
|
||||
}
|
||||
|
||||
if (groups & MESA_VK_GRAPHICS_STATE_DISCARD_RECTANGLES_BIT) {
|
||||
@@ -293,6 +294,7 @@ vk_get_dynamic_graphics_states(BITSET_WORD *dynamic,
|
||||
CASE( LINE_STIPPLE_ENABLE_EXT, RS_LINE_STIPPLE_ENABLE)
|
||||
CASE( DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT, VP_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE)
|
||||
CASE( ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT, ATTACHMENT_FEEDBACK_LOOP_ENABLE)
|
||||
CASE( DEPTH_CLAMP_RANGE_EXT, VP_DEPTH_CLAMP_RANGE)
|
||||
default:
|
||||
unreachable("Unsupported dynamic graphics state");
|
||||
}
|
||||
@@ -497,6 +499,17 @@ vk_viewport_state_init(struct vk_viewport_state *vp,
|
||||
if (vp_dcc_info != NULL)
|
||||
vp->depth_clip_negative_one_to_one = vp_dcc_info->negativeOneToOne;
|
||||
}
|
||||
|
||||
if (!IS_DYNAMIC(VP_DEPTH_CLAMP_RANGE)) {
|
||||
const VkPipelineViewportDepthClampControlCreateInfoEXT *vp_dcc_info =
|
||||
vk_find_struct_const(vp_info->pNext,
|
||||
PIPELINE_VIEWPORT_DEPTH_CLAMP_CONTROL_CREATE_INFO_EXT);
|
||||
if (vp_dcc_info != NULL) {
|
||||
vp->depth_clamp_mode = vp_dcc_info->depthClampMode;
|
||||
if (vp->depth_clamp_mode == VK_DEPTH_CLAMP_MODE_USER_DEFINED_RANGE_EXT)
|
||||
vp->depth_clamp_range = *vp_dcc_info->pDepthClampRange;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -513,6 +526,8 @@ vk_dynamic_graphics_state_init_vp(struct vk_dynamic_graphics_state *dst,
|
||||
typed_memcpy(dst->vp.scissors, vp->scissors, vp->scissor_count);
|
||||
|
||||
dst->vp.depth_clip_negative_one_to_one = vp->depth_clip_negative_one_to_one;
|
||||
dst->vp.depth_clamp_mode = vp->depth_clamp_mode;
|
||||
dst->vp.depth_clamp_range = vp->depth_clamp_range;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -2086,6 +2101,12 @@ vk_dynamic_graphics_state_copy(struct vk_dynamic_graphics_state *dst,
|
||||
COPY_IF_SET(VP_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE,
|
||||
vp.depth_clip_negative_one_to_one);
|
||||
|
||||
if (IS_SET_IN_SRC(VP_DEPTH_CLAMP_RANGE)) {
|
||||
COPY_MEMBER(VP_DEPTH_CLAMP_RANGE, vp.depth_clamp_mode);
|
||||
COPY_MEMBER(VP_DEPTH_CLAMP_RANGE, vp.depth_clamp_range.minDepthClamp);
|
||||
COPY_MEMBER(VP_DEPTH_CLAMP_RANGE, vp.depth_clamp_range.maxDepthClamp);
|
||||
}
|
||||
|
||||
COPY_IF_SET(DR_ENABLE, dr.enable);
|
||||
COPY_IF_SET(DR_MODE, dr.mode);
|
||||
if (IS_SET_IN_SRC(DR_RECTANGLES)) {
|
||||
@@ -3155,6 +3176,23 @@ vk_common_CmdSetRenderingInputAttachmentIndicesKHR(
|
||||
SET_DYN_VALUE(dyn, INPUT_ATTACHMENT_MAP, ial.stencil_att, stencil_att);
|
||||
}
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
vk_common_CmdSetDepthClampRangeEXT(VkCommandBuffer commandBuffer,
|
||||
VkDepthClampModeEXT depthClampMode,
|
||||
const VkDepthClampRangeEXT* pDepthClampRange)
|
||||
{
|
||||
VK_FROM_HANDLE(vk_command_buffer, cmd, commandBuffer);
|
||||
struct vk_dynamic_graphics_state *dyn = &cmd->dynamic_graphics_state;
|
||||
|
||||
SET_DYN_BOOL(dyn, VP_DEPTH_CLAMP_RANGE, vp.depth_clamp_mode, depthClampMode);
|
||||
if (depthClampMode == VK_DEPTH_CLAMP_MODE_USER_DEFINED_RANGE_EXT) {
|
||||
SET_DYN_VALUE(dyn, VP_DEPTH_CLAMP_RANGE, vp.depth_clamp_range.minDepthClamp,
|
||||
pDepthClampRange->minDepthClamp);
|
||||
SET_DYN_VALUE(dyn, VP_DEPTH_CLAMP_RANGE, vp.depth_clamp_range.maxDepthClamp,
|
||||
pDepthClampRange->maxDepthClamp);
|
||||
}
|
||||
}
|
||||
|
||||
/* These are stubs required by VK_EXT_shader_object */
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
@@ -3249,6 +3287,7 @@ vk_dynamic_graphic_state_to_str(enum mesa_vk_dynamic_graphics_state state)
|
||||
NAME(VP_SCISSOR_COUNT);
|
||||
NAME(VP_SCISSORS);
|
||||
NAME(VP_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE);
|
||||
NAME(VP_DEPTH_CLAMP_RANGE);
|
||||
NAME(DR_RECTANGLES);
|
||||
NAME(DR_MODE);
|
||||
NAME(DR_ENABLE);
|
||||
|
@@ -58,6 +58,7 @@ enum mesa_vk_dynamic_graphics_state {
|
||||
MESA_VK_DYNAMIC_VP_SCISSOR_COUNT,
|
||||
MESA_VK_DYNAMIC_VP_SCISSORS,
|
||||
MESA_VK_DYNAMIC_VP_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE,
|
||||
MESA_VK_DYNAMIC_VP_DEPTH_CLAMP_RANGE,
|
||||
MESA_VK_DYNAMIC_DR_RECTANGLES,
|
||||
MESA_VK_DYNAMIC_DR_MODE,
|
||||
MESA_VK_DYNAMIC_DR_ENABLE,
|
||||
@@ -197,6 +198,18 @@ struct vk_viewport_state {
|
||||
*/
|
||||
bool depth_clip_negative_one_to_one;
|
||||
|
||||
/** VkPipelineViewportDepthClampControlCreateInfoEXT::depthClampMode
|
||||
*
|
||||
* MESA_VK_DYNAMIC_GRAPHICS_STATE_VP_DEPTH_CLAMP_RANGE
|
||||
*/
|
||||
VkDepthClampModeEXT depth_clamp_mode;
|
||||
|
||||
/** VkPipelineViewportDepthClampControlCreateInfoEXT::pDepthClampRange
|
||||
*
|
||||
* MESA_VK_DYNAMIC_GRAPHICS_STATE_VP_DEPTH_CLAMP_RANGE
|
||||
*/
|
||||
VkDepthClampRangeEXT depth_clamp_range;
|
||||
|
||||
/** VkPipelineViewportStateCreateInfo::viewportCount
|
||||
*
|
||||
* MESA_VK_DYNAMIC_GRAPHICS_STATE_VP_VIEWPORT_COUNT
|
||||
|
Reference in New Issue
Block a user