From: Mike Blumenkrantz Date: Wed, 26 Oct 2022 18:18:57 +0000 (-0400) Subject: zink: rip out unused kernel push constant X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=82029aed88f8be2878c32efba81c8d0a80fff320;p=platform%2Fupstream%2Fmesa.git zink: rip out unused kernel push constant this was for supporting clover, but I don't care anymore Part-of: --- diff --git a/src/gallium/drivers/zink/zink_compiler.c b/src/gallium/drivers/zink/zink_compiler.c index fd68970..837a1d0 100644 --- a/src/gallium/drivers/zink/zink_compiler.c +++ b/src/gallium/drivers/zink/zink_compiler.c @@ -73,70 +73,6 @@ fields[member_idx].offset = offsetof(struct zink_gfx_push_constant, field); #undef PUSHCONST_MEMBER } -static void -create_cs_pushconst(nir_shader *nir) -{ -#define PUSHCONST_MEMBER(member_idx, field) \ -fields[member_idx].type = \ - glsl_array_type(glsl_uint_type(), SIZEOF_FIELD(struct zink_cs_push_constant, field) / sizeof(uint32_t), 0); \ -fields[member_idx].name = ralloc_asprintf(nir, #field); \ -fields[member_idx].offset = offsetof(struct zink_cs_push_constant, field); - - nir_variable *pushconst; - /* create compatible layout for the ntv push constant loader */ - struct glsl_struct_field *fields = rzalloc_array(nir, struct glsl_struct_field, ZINK_CS_PUSHCONST_MAX); - PUSHCONST_MEMBER(ZINK_CS_PUSHCONST_WORK_DIM, work_dim); - - pushconst = nir_variable_create(nir, nir_var_mem_push_const, - glsl_struct_type(fields, ZINK_CS_PUSHCONST_MAX, "struct", false), - "cs_pushconst"); - pushconst->data.location = INT_MAX; //doesn't really matter - -#undef PUSHCONST_MEMBER -} - -static bool -reads_work_dim(nir_shader *shader) -{ - return BITSET_TEST(shader->info.system_values_read, SYSTEM_VALUE_WORK_DIM); -} - -static bool -lower_work_dim_instr(nir_builder *b, nir_instr *in, void *data) -{ - if (in->type != nir_instr_type_intrinsic) - return false; - nir_intrinsic_instr *instr = nir_instr_as_intrinsic(in); - if (instr->intrinsic != nir_intrinsic_load_work_dim) - return false; - - if (instr->intrinsic == nir_intrinsic_load_work_dim) { - b->cursor = nir_after_instr(&instr->instr); - nir_intrinsic_instr *load = nir_intrinsic_instr_create(b->shader, nir_intrinsic_load_push_constant); - load->src[0] = nir_src_for_ssa(nir_imm_int(b, ZINK_CS_PUSHCONST_WORK_DIM)); - nir_intrinsic_set_range(load, 3 * sizeof(uint32_t)); - load->num_components = 1; - nir_ssa_dest_init(&load->instr, &load->dest, 1, 32, "work_dim"); - nir_builder_instr_insert(b, &load->instr); - - nir_ssa_def_rewrite_uses(&instr->dest.ssa, &load->dest.ssa); - } - - return true; -} - -static bool -lower_work_dim(nir_shader *shader) -{ - if (shader->info.stage != MESA_SHADER_KERNEL) - return false; - - if (!reads_work_dim(shader)) - return false; - - return nir_shader_instructions_pass(shader, lower_work_dim_instr, nir_metadata_dominance, NULL); -} - static bool lower_64bit_vertex_attribs_instr(nir_builder *b, nir_instr *instr, void *data) { @@ -3450,9 +3386,7 @@ zink_shader_create(struct zink_screen *screen, struct nir_shader *nir, NIR_PASS_V(nir, nir_lower_indirect_derefs, indirect_derefs_modes, UINT32_MAX); - if (nir->info.stage == MESA_SHADER_KERNEL) - create_cs_pushconst(nir); - else + if (nir->info.stage < MESA_SHADER_COMPUTE) create_gfx_pushconst(nir); if (nir->info.stage == MESA_SHADER_TESS_CTRL || @@ -3462,7 +3396,6 @@ zink_shader_create(struct zink_screen *screen, struct nir_shader *nir, if (nir->info.stage < MESA_SHADER_FRAGMENT) have_psiz = check_psiz(nir); NIR_PASS_V(nir, lower_basevertex); - NIR_PASS_V(nir, lower_work_dim); NIR_PASS_V(nir, nir_lower_regs_to_ssa); NIR_PASS_V(nir, lower_baseinstance); NIR_PASS_V(nir, lower_sparse); diff --git a/src/gallium/drivers/zink/zink_draw.cpp b/src/gallium/drivers/zink/zink_draw.cpp index d8c9c3f..02a39aa 100644 --- a/src/gallium/drivers/zink/zink_draw.cpp +++ b/src/gallium/drivers/zink/zink_draw.cpp @@ -979,11 +979,6 @@ zink_launch_grid(struct pipe_context *pctx, const struct pipe_grid_info *info) if (ctx->di.any_bindless_dirty && ctx->curr_compute->base.dd.bindless) zink_descriptors_update_bindless(ctx); - if (BITSET_TEST(ctx->curr_compute->shader->nir->info.system_values_read, SYSTEM_VALUE_WORK_DIM)) - VKCTX(CmdPushConstants)(batch->state->cmdbuf, ctx->curr_compute->base.layout, VK_SHADER_STAGE_COMPUTE_BIT, - offsetof(struct zink_cs_push_constant, work_dim), sizeof(uint32_t), - &info->work_dim); - batch->work_count++; zink_batch_no_rp(ctx); if (info->indirect) { diff --git a/src/gallium/drivers/zink/zink_program.c b/src/gallium/drivers/zink/zink_program.c index 7f4e44e..8673f53 100644 --- a/src/gallium/drivers/zink/zink_program.c +++ b/src/gallium/drivers/zink/zink_program.c @@ -793,12 +793,7 @@ zink_pipeline_layout_create(struct zink_screen *screen, VkDescriptorSetLayout *d plci.setLayoutCount = num_dsl; VkPushConstantRange pcr[3] = {0}; - if (is_compute) { - pcr[0].stageFlags = VK_SHADER_STAGE_COMPUTE_BIT; - pcr[0].offset = 0; - pcr[0].size = sizeof(struct zink_cs_push_constant); - plci.pushConstantRangeCount = 1; - } else { + if (!is_compute) { pcr[0].stageFlags = VK_SHADER_STAGE_VERTEX_BIT; pcr[0].offset = offsetof(struct zink_gfx_push_constant, draw_mode_is_indexed); pcr[0].size = 2 * sizeof(unsigned); diff --git a/src/gallium/drivers/zink/zink_types.h b/src/gallium/drivers/zink/zink_types.h index 2dc3895..1f61ca4 100644 --- a/src/gallium/drivers/zink/zink_types.h +++ b/src/gallium/drivers/zink/zink_types.h @@ -814,11 +814,6 @@ enum zink_gfx_push_constant_member { ZINK_GFX_PUSHCONST_MAX }; -/* create_cs_pushconst must be kept in sync with this struct */ -struct zink_cs_push_constant { - unsigned work_dim; -}; - /* The order of the enums MUST match the order of the zink_cs_push_constant * members. */