diff --git a/src/freedreno/vulkan/tu_cmd_buffer.c b/src/freedreno/vulkan/tu_cmd_buffer.c index 073c70f3f1e..062f9253a43 100644 --- a/src/freedreno/vulkan/tu_cmd_buffer.c +++ b/src/freedreno/vulkan/tu_cmd_buffer.c @@ -2566,7 +2566,7 @@ tu_CmdBindPipeline(VkCommandBuffer commandBuffer, /* maximum number of patches that can fit in tess factor/param buffers */ uint32_t subdraw_size = MIN2(TU_TESS_FACTOR_SIZE / ir3_tess_factor_stride(pipeline->tess.patch_type), - TU_TESS_PARAM_SIZE / pipeline->tess.param_stride); + TU_TESS_PARAM_SIZE / pipeline->program.hs_param_stride); /* convert from # of patches to draw count */ subdraw_size *= pipeline->tess.patch_control_points; diff --git a/src/freedreno/vulkan/tu_pipeline.c b/src/freedreno/vulkan/tu_pipeline.c index 9b00058cbc7..eaacc374733 100644 --- a/src/freedreno/vulkan/tu_pipeline.c +++ b/src/freedreno/vulkan/tu_pipeline.c @@ -3858,6 +3858,10 @@ tu_pipeline_builder_parse_shader_stages(struct tu_pipeline_builder *builder, &builder->const_state[i], builder->variants[i]); } + + struct ir3_shader_variant *hs = builder->variants[MESA_SHADER_TESS_CTRL]; + if (hs) + pipeline->program.hs_param_stride = hs->output_size * 4; } static bool @@ -3975,7 +3979,6 @@ tu_pipeline_builder_parse_tessellation(struct tu_pipeline_builder *builder, pipeline->tess.upper_left_domain_origin = !domain_info || domain_info->domainOrigin == VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT; const struct ir3_shader_variant *hs = builder->variants[MESA_SHADER_TESS_CTRL]; - pipeline->tess.param_stride = hs->output_size * 4; } static void diff --git a/src/freedreno/vulkan/tu_pipeline.h b/src/freedreno/vulkan/tu_pipeline.h index 332d36110dc..507f111246c 100644 --- a/src/freedreno/vulkan/tu_pipeline.h +++ b/src/freedreno/vulkan/tu_pipeline.h @@ -205,6 +205,8 @@ struct tu_pipeline struct tu_draw_state binning_state; struct tu_program_descriptor_linkage link[MESA_SHADER_STAGES]; + + uint32_t hs_param_stride; } program; struct @@ -217,7 +219,6 @@ struct tu_pipeline { uint32_t patch_type; uint32_t patch_control_points; - uint32_t param_stride; bool upper_left_domain_origin; } tess;