mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-03-06 16:30:42 +01:00
vulkan: Add a dynamic state for vp.depth_clip_negative_one_to_one
This is the last bit of viewport state that's not dynamic. Making it dynamic will help ANV out a bit. Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18878>
This commit is contained in:
parent
10bc2cd3ae
commit
effd9962d9
2 changed files with 47 additions and 37 deletions
|
|
@ -57,6 +57,7 @@ get_dynamic_state_groups(BITSET_WORD *dynamic,
|
|||
BITSET_SET(dynamic, MESA_VK_DYNAMIC_VP_VIEWPORTS);
|
||||
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);
|
||||
}
|
||||
|
||||
if (groups & MESA_VK_GRAPHICS_STATE_DISCARD_RECTANGLES_BIT)
|
||||
|
|
@ -199,6 +200,7 @@ vk_get_dynamic_graphics_states(BITSET_WORD *dynamic,
|
|||
CASE( PATCH_CONTROL_POINTS_EXT, TS_PATCH_CONTROL_POINTS)
|
||||
CASE( LOGIC_OP_EXT, CB_LOGIC_OP)
|
||||
CASE( COLOR_WRITE_ENABLE_EXT, CB_COLOR_WRITE_ENABLES)
|
||||
CASE( DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT, VP_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE)
|
||||
default:
|
||||
unreachable("Unsupported dynamic graphics state");
|
||||
}
|
||||
|
|
@ -372,11 +374,13 @@ vk_viewport_state_init(struct vk_viewport_state *vp,
|
|||
vp_info->scissorCount);
|
||||
}
|
||||
|
||||
const VkPipelineViewportDepthClipControlCreateInfoEXT *vp_dcc_info =
|
||||
vk_find_struct_const(vp_info->pNext,
|
||||
PIPELINE_VIEWPORT_DEPTH_CLIP_CONTROL_CREATE_INFO_EXT);
|
||||
if (vp_dcc_info != NULL)
|
||||
vp->depth_clip_negative_one_to_one = vp_dcc_info->negativeOneToOne;
|
||||
if (!IS_DYNAMIC(VP_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE)) {
|
||||
const VkPipelineViewportDepthClipControlCreateInfoEXT *vp_dcc_info =
|
||||
vk_find_struct_const(vp_info->pNext,
|
||||
PIPELINE_VIEWPORT_DEPTH_CLIP_CONTROL_CREATE_INFO_EXT);
|
||||
if (vp_dcc_info != NULL)
|
||||
vp->depth_clip_negative_one_to_one = vp_dcc_info->negativeOneToOne;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -391,6 +395,8 @@ vk_dynamic_graphics_state_init_vp(struct vk_dynamic_graphics_state *dst,
|
|||
dst->vp.scissor_count = vp->scissor_count;
|
||||
if (IS_NEEDED(VP_SCISSORS))
|
||||
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;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -1566,6 +1572,9 @@ vk_dynamic_graphics_state_copy(struct vk_dynamic_graphics_state *dst,
|
|||
COPY_ARRAY(VP_SCISSORS, vp.scissors, src->vp.scissor_count);
|
||||
}
|
||||
|
||||
COPY_IF_SET(VP_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE,
|
||||
vp.depth_clip_negative_one_to_one);
|
||||
|
||||
if (IS_SET_IN_SRC(DR_RECTANGLES)) {
|
||||
COPY_MEMBER(DR_RECTANGLES, dr.rectangle_count);
|
||||
COPY_ARRAY(DR_RECTANGLES, dr.rectangles, src->dr.rectangle_count);
|
||||
|
|
@ -1809,6 +1818,17 @@ vk_common_CmdSetScissorWithCount(VkCommandBuffer commandBuffer,
|
|||
SET_DYN_ARRAY(dyn, VP_SCISSORS, vp.scissors, 0, scissorCount, pScissors);
|
||||
}
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
vk_common_CmdSetDepthClipNegativeOneToOneEXT(VkCommandBuffer commandBuffer,
|
||||
VkBool32 negativeOneToOne)
|
||||
{
|
||||
VK_FROM_HANDLE(vk_command_buffer, cmd, commandBuffer);
|
||||
struct vk_dynamic_graphics_state *dyn = &cmd->dynamic_graphics_state;
|
||||
|
||||
SET_DYN_BOOL(dyn, VP_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE,
|
||||
vp.depth_clip_negative_one_to_one, negativeOneToOne);
|
||||
}
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
vk_common_CmdSetDiscardRectangleEXT(VkCommandBuffer commandBuffer,
|
||||
uint32_t firstDiscardRectangle,
|
||||
|
|
|
|||
|
|
@ -54,6 +54,7 @@ enum mesa_vk_dynamic_graphics_state {
|
|||
MESA_VK_DYNAMIC_VP_VIEWPORTS,
|
||||
MESA_VK_DYNAMIC_VP_SCISSOR_COUNT,
|
||||
MESA_VK_DYNAMIC_VP_SCISSORS,
|
||||
MESA_VK_DYNAMIC_VP_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE,
|
||||
MESA_VK_DYNAMIC_DR_RECTANGLES,
|
||||
MESA_VK_DYNAMIC_RS_RASTERIZER_DISCARD_ENABLE,
|
||||
MESA_VK_DYNAMIC_RS_CULL_MODE,
|
||||
|
|
@ -149,20 +150,33 @@ struct vk_tessellation_state {
|
|||
};
|
||||
|
||||
struct vk_viewport_state {
|
||||
/** VkPipelineViewportDepthClipControlCreateInfoEXT::negativeOneToOne */
|
||||
/** VkPipelineViewportDepthClipControlCreateInfoEXT::negativeOneToOne
|
||||
*/
|
||||
bool depth_clip_negative_one_to_one;
|
||||
|
||||
/** VkPipelineViewportStateCreateInfo::viewportCount */
|
||||
/** VkPipelineViewportStateCreateInfo::viewportCount
|
||||
*
|
||||
* MESA_VK_DYNAMIC_GRAPHICS_STATE_VP_VIEWPORT_COUNT
|
||||
*/
|
||||
uint8_t viewport_count;
|
||||
|
||||
/** VkPipelineViewportStateCreateInfo::scissorCount */
|
||||
/** VkPipelineViewportStateCreateInfo::scissorCount
|
||||
*
|
||||
* MESA_VK_DYNAMIC_GRAPHICS_STATE_VP_SCISSOR_COUNT
|
||||
*/
|
||||
uint8_t scissor_count;
|
||||
|
||||
/** VkPipelineViewportStateCreateInfo::pViewports */
|
||||
VkRect2D scissors[MESA_VK_MAX_SCISSORS];
|
||||
|
||||
/** VkPipelineViewportStateCreateInfo::pScissors */
|
||||
/** VkPipelineViewportStateCreateInfo::pViewports
|
||||
*
|
||||
* MESA_VK_DYNAMIC_GRAPHICS_STATE_VP_VIEWPORTS
|
||||
*/
|
||||
VkViewport viewports[MESA_VK_MAX_VIEWPORTS];
|
||||
|
||||
/** VkPipelineViewportStateCreateInfo::pScissors
|
||||
*
|
||||
* MESA_VK_DYNAMIC_GRAPHICS_STATE_VP_SCISSORS
|
||||
*/
|
||||
VkRect2D scissors[MESA_VK_MAX_SCISSORS];
|
||||
};
|
||||
|
||||
struct vk_discard_rectangles_state {
|
||||
|
|
@ -545,31 +559,7 @@ struct vk_dynamic_graphics_state {
|
|||
} ts;
|
||||
|
||||
/** Viewport state */
|
||||
struct {
|
||||
/** Viewport count
|
||||
*
|
||||
* MESA_VK_DYNAMIC_GRAPHICS_STATE_VP_VIEWPORT_COUNT
|
||||
*/
|
||||
uint32_t viewport_count;
|
||||
|
||||
/** Viewports
|
||||
*
|
||||
* MESA_VK_DYNAMIC_GRAPHICS_STATE_VP_VIEWPORTS
|
||||
*/
|
||||
VkViewport viewports[MESA_VK_MAX_VIEWPORTS];
|
||||
|
||||
/** Scissor count
|
||||
*
|
||||
* MESA_VK_DYNAMIC_GRAPHICS_STATE_VP_SCISSOR_COUNT
|
||||
*/
|
||||
uint32_t scissor_count;
|
||||
|
||||
/** Scissor rects
|
||||
*
|
||||
* MESA_VK_DYNAMIC_GRAPHICS_STATE_VP_SCISSORS
|
||||
*/
|
||||
VkRect2D scissors[MESA_VK_MAX_SCISSORS];
|
||||
} vp;
|
||||
struct vk_viewport_state vp;
|
||||
|
||||
/** Discard rectangles
|
||||
*
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue