BIT(TU_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY)))
cmd->state.primtype = pipeline->ia.primtype;
+ if (!(pipeline->dynamic_state_mask &
+ BIT(TU_DYNAMIC_STATE_POLYGON_MODE)))
+ cmd->state.polygon_mode = pipeline->rast.polygon_mode;
+
tu6_update_msaa(cmd, pipeline->output.samples);
if ((pipeline->dynamic_state_mask & BIT(VK_DYNAMIC_STATE_VIEWPORT)) &&
cmd->state.dirty |= TU_CMD_DIRTY_BLEND;
}
+VKAPI_ATTR void VKAPI_CALL
+tu_CmdSetPolygonModeEXT(VkCommandBuffer commandBuffer,
+ VkPolygonMode polygonMode)
+{
+ TU_FROM_HANDLE(tu_cmd_buffer, cmd, commandBuffer);
+ cmd->state.polygon_mode = tu6_polygon_mode(polygonMode);
+ cmd->state.dirty |= TU_CMD_DIRTY_RAST;
+}
+
static void
tu_flush_for_access(struct tu_cache_state *cache,
enum tu_cmd_access_mask src_mask,
struct tu_cs cs = tu_cmd_dynamic_state(cmd, TU_DYNAMIC_STATE_RAST,
tu6_rast_size(cmd->device));
tu6_emit_rast(&cs, cmd->state.gras_su_cntl,
- pipeline->rast.gras_cl_cntl, pipeline->rast.polygon_mode);
+ pipeline->rast.gras_cl_cntl, cmd->state.polygon_mode);
}
if (dirty & TU_CMD_DIRTY_RB_DEPTH_CNTL) {
uint32_t gras_su_cntl, rb_depth_cntl, rb_stencil_cntl;
uint32_t pc_raster_cntl, vpc_unknown_9107;
+ enum a6xx_polygon_mode polygon_mode;
uint32_t rb_mrt_control[MAX_RTS], rb_mrt_blend_control[MAX_RTS];
uint32_t rb_mrt_control_rop;
uint32_t rb_blend_cntl, sp_blend_cntl;
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_FEATURES_EXT: {
VkPhysicalDeviceExtendedDynamicState3FeaturesEXT *features =
(VkPhysicalDeviceExtendedDynamicState3FeaturesEXT *)ext;
- features->extendedDynamicState3PolygonMode = false;
+ features->extendedDynamicState3PolygonMode = true;
features->extendedDynamicState3TessellationDomainOrigin = false;
features->extendedDynamicState3DepthClampEnable = false;
features->extendedDynamicState3DepthClipEnable = false;
pipeline->dynamic_state_mask |=
BIT(TU_DYNAMIC_STATE_PATCH_CONTROL_POINTS);
break;
+ case VK_DYNAMIC_STATE_POLYGON_MODE_EXT:
+ pipeline->dynamic_state_mask |=
+ BIT(TU_DYNAMIC_STATE_RAST) |
+ BIT(TU_DYNAMIC_STATE_POLYGON_MODE);
+ break;
default:
assert(!"unsupported dynamic state");
break;
BIT(TU_DYNAMIC_STATE_RAST) |
BIT(VK_DYNAMIC_STATE_DEPTH_BIAS) |
BIT(TU_DYNAMIC_STATE_RASTERIZER_DISCARD) |
- BIT(TU_DYNAMIC_STATE_PATCH_CONTROL_POINTS);
+ BIT(TU_DYNAMIC_STATE_PATCH_CONTROL_POINTS) |
+ BIT(TU_DYNAMIC_STATE_POLYGON_MODE);
}
if (library->state &
TU_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE,
TU_DYNAMIC_STATE_LOGIC_OP,
TU_DYNAMIC_STATE_COLOR_WRITE_ENABLE,
+ TU_DYNAMIC_STATE_POLYGON_MODE,
/* re-use the line width enum as it uses GRAS_SU_CNTL: */
TU_DYNAMIC_STATE_RAST = VK_DYNAMIC_STATE_LINE_WIDTH,
};