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_SCISSOR_COUNT);
|
||||||
BITSET_SET(dynamic, MESA_VK_DYNAMIC_VP_SCISSORS);
|
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_CLIP_NEGATIVE_ONE_TO_ONE);
|
||||||
|
BITSET_SET(dynamic, MESA_VK_DYNAMIC_VP_DEPTH_CLAMP_RANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (groups & MESA_VK_GRAPHICS_STATE_DISCARD_RECTANGLES_BIT) {
|
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( LINE_STIPPLE_ENABLE_EXT, RS_LINE_STIPPLE_ENABLE)
|
||||||
CASE( DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT, VP_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE)
|
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( ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT, ATTACHMENT_FEEDBACK_LOOP_ENABLE)
|
||||||
|
CASE( DEPTH_CLAMP_RANGE_EXT, VP_DEPTH_CLAMP_RANGE)
|
||||||
default:
|
default:
|
||||||
unreachable("Unsupported dynamic graphics state");
|
unreachable("Unsupported dynamic graphics state");
|
||||||
}
|
}
|
||||||
@@ -497,6 +499,17 @@ vk_viewport_state_init(struct vk_viewport_state *vp,
|
|||||||
if (vp_dcc_info != NULL)
|
if (vp_dcc_info != NULL)
|
||||||
vp->depth_clip_negative_one_to_one = vp_dcc_info->negativeOneToOne;
|
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
|
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);
|
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_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
|
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,
|
COPY_IF_SET(VP_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE,
|
||||||
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_ENABLE, dr.enable);
|
||||||
COPY_IF_SET(DR_MODE, dr.mode);
|
COPY_IF_SET(DR_MODE, dr.mode);
|
||||||
if (IS_SET_IN_SRC(DR_RECTANGLES)) {
|
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);
|
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 */
|
/* These are stubs required by VK_EXT_shader_object */
|
||||||
|
|
||||||
VKAPI_ATTR void VKAPI_CALL
|
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_SCISSOR_COUNT);
|
||||||
NAME(VP_SCISSORS);
|
NAME(VP_SCISSORS);
|
||||||
NAME(VP_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE);
|
NAME(VP_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE);
|
||||||
|
NAME(VP_DEPTH_CLAMP_RANGE);
|
||||||
NAME(DR_RECTANGLES);
|
NAME(DR_RECTANGLES);
|
||||||
NAME(DR_MODE);
|
NAME(DR_MODE);
|
||||||
NAME(DR_ENABLE);
|
NAME(DR_ENABLE);
|
||||||
|
@@ -58,6 +58,7 @@ enum mesa_vk_dynamic_graphics_state {
|
|||||||
MESA_VK_DYNAMIC_VP_SCISSOR_COUNT,
|
MESA_VK_DYNAMIC_VP_SCISSOR_COUNT,
|
||||||
MESA_VK_DYNAMIC_VP_SCISSORS,
|
MESA_VK_DYNAMIC_VP_SCISSORS,
|
||||||
MESA_VK_DYNAMIC_VP_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE,
|
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_RECTANGLES,
|
||||||
MESA_VK_DYNAMIC_DR_MODE,
|
MESA_VK_DYNAMIC_DR_MODE,
|
||||||
MESA_VK_DYNAMIC_DR_ENABLE,
|
MESA_VK_DYNAMIC_DR_ENABLE,
|
||||||
@@ -197,6 +198,18 @@ struct vk_viewport_state {
|
|||||||
*/
|
*/
|
||||||
bool depth_clip_negative_one_to_one;
|
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
|
/** VkPipelineViewportStateCreateInfo::viewportCount
|
||||||
*
|
*
|
||||||
* MESA_VK_DYNAMIC_GRAPHICS_STATE_VP_VIEWPORT_COUNT
|
* MESA_VK_DYNAMIC_GRAPHICS_STATE_VP_VIEWPORT_COUNT
|
||||||
|
Reference in New Issue
Block a user