tu: Implement extendedDynamicState3ProvokingVertexMode

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18912>
This commit is contained in:
Connor Abbott
2022-09-30 14:33:15 +02:00
committed by Marge Bot
parent 1af2471bd7
commit e63c8b3bf1
5 changed files with 23 additions and 3 deletions

View File

@@ -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;

View File

@@ -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];

View File

@@ -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;

View File

@@ -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 &

View File

@@ -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,
};