tu: Implement extendedDynamicState3ProvokingVertexMode
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18912>
This commit is contained in:
@@ -2632,6 +2632,10 @@ tu_CmdBindPipeline(VkCommandBuffer commandBuffer,
|
||||
cmd->state.tess_upper_left_domain_origin =
|
||||
pipeline->tess.upper_left_domain_origin;
|
||||
|
||||
if (!(pipeline->dynamic_state_mask &
|
||||
BIT(TU_DYNAMIC_STATE_PROVOKING_VTX)))
|
||||
cmd->state.provoking_vertex_last = pipeline->rast.provoking_vertex_last;
|
||||
|
||||
tu6_update_msaa_disable(cmd);
|
||||
|
||||
if (!(pipeline->dynamic_state_mask & BIT(TU_DYNAMIC_STATE_MSAA_SAMPLES)))
|
||||
@@ -3289,6 +3293,16 @@ tu_CmdSetLineRasterizationModeEXT(VkCommandBuffer commandBuffer,
|
||||
cmd->state.dirty |= TU_CMD_DIRTY_RAST;
|
||||
}
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
tu_CmdSetProvokingVertexModeEXT(VkCommandBuffer commandBuffer,
|
||||
VkProvokingVertexModeEXT provokingVertexMode)
|
||||
{
|
||||
TU_FROM_HANDLE(tu_cmd_buffer, cmd, commandBuffer);
|
||||
|
||||
cmd->state.provoking_vertex_last =
|
||||
provokingVertexMode == VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT;
|
||||
}
|
||||
|
||||
static void
|
||||
tu_flush_for_access(struct tu_cache_state *cache,
|
||||
enum tu_cmd_access_mask src_mask,
|
||||
@@ -4634,7 +4648,7 @@ tu6_draw_common(struct tu_cmd_buffer *cmd,
|
||||
primitive_restart_enabled = cmd->state.primitive_restart_enable;
|
||||
|
||||
bool primitive_restart = primitive_restart_enabled && indexed;
|
||||
bool provoking_vtx_last = pipeline->rast.provoking_vertex_last;
|
||||
bool provoking_vtx_last = cmd->state.provoking_vertex_last;
|
||||
bool tess_upper_left_domain_origin =
|
||||
cmd->state.tess_upper_left_domain_origin;
|
||||
|
||||
|
@@ -349,6 +349,7 @@ struct tu_cmd_state
|
||||
enum pc_di_primtype primtype;
|
||||
bool primitive_restart_enable;
|
||||
bool tess_upper_left_domain_origin;
|
||||
bool provoking_vertex_last;
|
||||
|
||||
/* saved states to re-emit in TU_CMD_DIRTY_DRAW_STATE case */
|
||||
struct tu_draw_state dynamic_state[TU_DYNAMIC_STATE_COUNT];
|
||||
|
@@ -776,7 +776,7 @@ tu_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice,
|
||||
features->extendedDynamicState3ExtraPrimitiveOverestimationSize = false;
|
||||
features->extendedDynamicState3LineRasterizationMode = true;
|
||||
features->extendedDynamicState3LineStippleEnable = false;
|
||||
features->extendedDynamicState3ProvokingVertexMode = false;
|
||||
features->extendedDynamicState3ProvokingVertexMode = true;
|
||||
features->extendedDynamicState3SampleLocationsEnable = false;
|
||||
features->extendedDynamicState3ColorBlendEnable = false;
|
||||
features->extendedDynamicState3ColorBlendEquation = false;
|
||||
|
@@ -3784,6 +3784,9 @@ tu_pipeline_builder_parse_dynamic(struct tu_pipeline_builder *builder,
|
||||
pipeline->rast.gras_su_cntl_mask &=
|
||||
~A6XX_GRAS_SU_CNTL_LINE_MODE__MASK;
|
||||
break;
|
||||
case VK_DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXT:
|
||||
pipeline->dynamic_state_mask |= BIT(TU_DYNAMIC_STATE_PROVOKING_VTX);
|
||||
break;
|
||||
default:
|
||||
assert(!"unsupported dynamic state");
|
||||
break;
|
||||
@@ -3855,7 +3858,8 @@ tu_pipeline_builder_parse_libraries(struct tu_pipeline_builder *builder,
|
||||
BIT(TU_DYNAMIC_STATE_POLYGON_MODE) |
|
||||
BIT(TU_DYNAMIC_STATE_TESS_DOMAIN_ORIGIN) |
|
||||
BIT(TU_DYNAMIC_STATE_VIEWPORT_RANGE) |
|
||||
BIT(TU_DYNAMIC_STATE_LINE_MODE);
|
||||
BIT(TU_DYNAMIC_STATE_LINE_MODE) |
|
||||
BIT(TU_DYNAMIC_STATE_PROVOKING_VTX);
|
||||
}
|
||||
|
||||
if (library->state &
|
||||
|
@@ -42,6 +42,7 @@ enum tu_dynamic_state
|
||||
TU_DYNAMIC_STATE_DEPTH_CLIP_RANGE,
|
||||
TU_DYNAMIC_STATE_VIEWPORT_RANGE,
|
||||
TU_DYNAMIC_STATE_LINE_MODE,
|
||||
TU_DYNAMIC_STATE_PROVOKING_VTX,
|
||||
/* re-use the line width enum as it uses GRAS_SU_CNTL: */
|
||||
TU_DYNAMIC_STATE_RAST = VK_DYNAMIC_STATE_LINE_WIDTH,
|
||||
};
|
||||
|
Reference in New Issue
Block a user