tu: Implement extendedDynamicState3TessellationDomainOrigin

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18912>
This commit is contained in:
Connor Abbott 2022-09-29 14:04:54 +02:00 committed by Marge Bot
parent 55bbf56a17
commit 0e09559bd6
5 changed files with 24 additions and 3 deletions

View file

@ -2610,6 +2610,11 @@ tu_CmdBindPipeline(VkCommandBuffer commandBuffer,
BIT(TU_DYNAMIC_STATE_POLYGON_MODE)))
cmd->state.polygon_mode = pipeline->rast.polygon_mode;
if (!(pipeline->dynamic_state_mask &
BIT(TU_DYNAMIC_STATE_TESS_DOMAIN_ORIGIN)))
cmd->state.tess_upper_left_domain_origin =
pipeline->tess.upper_left_domain_origin;
tu6_update_msaa(cmd, pipeline->output.samples);
if ((pipeline->dynamic_state_mask & BIT(VK_DYNAMIC_STATE_VIEWPORT)) &&
@ -3102,6 +3107,15 @@ tu_CmdSetPolygonModeEXT(VkCommandBuffer commandBuffer,
cmd->state.dirty |= TU_CMD_DIRTY_RAST;
}
VKAPI_ATTR void VKAPI_CALL
tu_CmdSetTessellationDomainOriginEXT(VkCommandBuffer commandBuffer,
VkTessellationDomainOrigin domainOrigin)
{
TU_FROM_HANDLE(tu_cmd_buffer, cmd, commandBuffer);
cmd->state.tess_upper_left_domain_origin =
domainOrigin == VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT;
}
static void
tu_flush_for_access(struct tu_cache_state *cache,
enum tu_cmd_access_mask src_mask,
@ -4437,7 +4451,7 @@ tu6_draw_common(struct tu_cmd_buffer *cmd,
bool primitive_restart = primitive_restart_enabled && indexed;
bool provoking_vtx_last = pipeline->rast.provoking_vertex_last;
bool tess_upper_left_domain_origin =
pipeline->tess.upper_left_domain_origin;
cmd->state.tess_upper_left_domain_origin;
struct tu_primitive_params* prim_params = &cmd->state.last_prim_params;

View file

@ -347,6 +347,7 @@ struct tu_cmd_state
bool rop_reads_dst;
enum pc_di_primtype primtype;
bool primitive_restart_enable;
bool tess_upper_left_domain_origin;
/* saved states to re-emit in TU_CMD_DIRTY_DRAW_STATE case */
struct tu_draw_state dynamic_state[TU_DYNAMIC_STATE_COUNT];

View file

@ -762,7 +762,7 @@ tu_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice,
VkPhysicalDeviceExtendedDynamicState3FeaturesEXT *features =
(VkPhysicalDeviceExtendedDynamicState3FeaturesEXT *)ext;
features->extendedDynamicState3PolygonMode = true;
features->extendedDynamicState3TessellationDomainOrigin = false;
features->extendedDynamicState3TessellationDomainOrigin = true;
features->extendedDynamicState3DepthClampEnable = false;
features->extendedDynamicState3DepthClipEnable = false;
features->extendedDynamicState3LogicOpEnable = false;

View file

@ -3712,6 +3712,10 @@ tu_pipeline_builder_parse_dynamic(struct tu_pipeline_builder *builder,
BIT(TU_DYNAMIC_STATE_RAST) |
BIT(TU_DYNAMIC_STATE_POLYGON_MODE);
break;
case VK_DYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXT:
pipeline->dynamic_state_mask |=
BIT(TU_DYNAMIC_STATE_TESS_DOMAIN_ORIGIN);
break;
default:
assert(!"unsupported dynamic state");
break;
@ -3769,7 +3773,8 @@ tu_pipeline_builder_parse_libraries(struct tu_pipeline_builder *builder,
BIT(VK_DYNAMIC_STATE_DEPTH_BIAS) |
BIT(TU_DYNAMIC_STATE_RASTERIZER_DISCARD) |
BIT(TU_DYNAMIC_STATE_PATCH_CONTROL_POINTS) |
BIT(TU_DYNAMIC_STATE_POLYGON_MODE);
BIT(TU_DYNAMIC_STATE_POLYGON_MODE) |
BIT(TU_DYNAMIC_STATE_TESS_DOMAIN_ORIGIN);
}
if (library->state &

View file

@ -35,6 +35,7 @@ enum tu_dynamic_state
TU_DYNAMIC_STATE_LOGIC_OP,
TU_DYNAMIC_STATE_COLOR_WRITE_ENABLE,
TU_DYNAMIC_STATE_POLYGON_MODE,
TU_DYNAMIC_STATE_TESS_DOMAIN_ORIGIN,
/* re-use the line width enum as it uses GRAS_SU_CNTL: */
TU_DYNAMIC_STATE_RAST = VK_DYNAMIC_STATE_LINE_WIDTH,
};