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)) &&
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,
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;
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];
VkPhysicalDeviceExtendedDynamicState3FeaturesEXT *features =
(VkPhysicalDeviceExtendedDynamicState3FeaturesEXT *)ext;
features->extendedDynamicState3PolygonMode = true;
- features->extendedDynamicState3TessellationDomainOrigin = false;
+ features->extendedDynamicState3TessellationDomainOrigin = true;
features->extendedDynamicState3DepthClampEnable = false;
features->extendedDynamicState3DepthClipEnable = false;
features->extendedDynamicState3LogicOpEnable = false;
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;
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 &
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,
};