From 510c3e8810877c4a45d7ffe15f80a6ea2c85244e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Sun, 6 Sep 2020 11:19:58 -0400 Subject: [PATCH 1/1] radeonsi: remove redundant si_shader_info::writes_memory Reviewed-by: Pierre-Eric Pelloux-Prayer Part-of: --- src/gallium/drivers/radeonsi/si_shader.h | 1 - src/gallium/drivers/radeonsi/si_shader_llvm_gs.c | 2 +- src/gallium/drivers/radeonsi/si_shader_nir.c | 5 ----- src/gallium/drivers/radeonsi/si_state.c | 2 +- src/gallium/drivers/radeonsi/si_state_shaders.c | 12 ++++++------ 5 files changed, 8 insertions(+), 14 deletions(-) diff --git a/src/gallium/drivers/radeonsi/si_shader.h b/src/gallium/drivers/radeonsi/si_shader.h index 5de060489f2..353b3f0f0e3 100644 --- a/src/gallium/drivers/radeonsi/si_shader.h +++ b/src/gallium/drivers/radeonsi/si_shader.h @@ -371,7 +371,6 @@ struct si_shader_info { bool writes_primid; bool writes_viewport_index; bool writes_layer; - bool writes_memory; /**< contains stores or atomics to buffers or images */ bool uses_derivatives; bool uses_bindless_samplers; bool uses_bindless_images; diff --git a/src/gallium/drivers/radeonsi/si_shader_llvm_gs.c b/src/gallium/drivers/radeonsi/si_shader_llvm_gs.c index 553720eba7f..c7e331114ac 100644 --- a/src/gallium/drivers/radeonsi/si_shader_llvm_gs.c +++ b/src/gallium/drivers/radeonsi/si_shader_llvm_gs.c @@ -297,7 +297,7 @@ static void si_llvm_emit_vertex(struct ac_shader_abi *abi, unsigned stream, LLVM LLVMBuildICmp(ctx->ac.builder, LLVMIntULT, gs_next_vertex, LLVMConstInt(ctx->ac.i32, shader->selector->gs_max_out_vertices, 0), ""); - bool use_kill = !info->writes_memory; + bool use_kill = !info->base.writes_memory; if (use_kill) { ac_build_kill_if_false(&ctx->ac, can_emit); } else { diff --git a/src/gallium/drivers/radeonsi/si_shader_nir.c b/src/gallium/drivers/radeonsi/si_shader_nir.c index c95e949c6af..9b76b7b0671 100644 --- a/src/gallium/drivers/radeonsi/si_shader_nir.c +++ b/src/gallium/drivers/radeonsi/si_shader_nir.c @@ -323,11 +323,9 @@ static void scan_instruction(const struct nir_shader *nir, struct si_shader_info break; case nir_intrinsic_bindless_image_store: info->uses_bindless_images = true; - info->writes_memory = true; info->num_memory_stores++; break; case nir_intrinsic_image_deref_store: - info->writes_memory = true; info->num_memory_stores++; break; case nir_intrinsic_bindless_image_atomic_add: @@ -341,7 +339,6 @@ static void scan_instruction(const struct nir_shader *nir, struct si_shader_info case nir_intrinsic_bindless_image_atomic_exchange: case nir_intrinsic_bindless_image_atomic_comp_swap: info->uses_bindless_images = true; - info->writes_memory = true; info->num_memory_stores++; break; case nir_intrinsic_image_deref_atomic_add: @@ -356,7 +353,6 @@ static void scan_instruction(const struct nir_shader *nir, struct si_shader_info case nir_intrinsic_image_deref_atomic_comp_swap: case nir_intrinsic_image_deref_atomic_inc_wrap: case nir_intrinsic_image_deref_atomic_dec_wrap: - info->writes_memory = true; info->num_memory_stores++; break; case nir_intrinsic_store_ssbo: @@ -370,7 +366,6 @@ static void scan_instruction(const struct nir_shader *nir, struct si_shader_info case nir_intrinsic_ssbo_atomic_xor: case nir_intrinsic_ssbo_atomic_exchange: case nir_intrinsic_ssbo_atomic_comp_swap: - info->writes_memory = true; info->num_memory_stores++; break; case nir_intrinsic_load_color0: diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c index da78b7ea769..4c2e0c7a6c1 100644 --- a/src/gallium/drivers/radeonsi/si_state.c +++ b/src/gallium/drivers/radeonsi/si_state.c @@ -3353,7 +3353,7 @@ static bool si_out_of_order_rasterization(struct si_context *sctx) /* The set of PS invocations is always order invariant, * except when early Z/S tests are requested. */ - if (sctx->ps_shader.cso && sctx->ps_shader.cso->info.writes_memory && + if (sctx->ps_shader.cso && sctx->ps_shader.cso->info.base.writes_memory && sctx->ps_shader.cso->info.base.fs.early_fragment_tests && !dsa_order_invariant.pass_set) return false; diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.c b/src/gallium/drivers/radeonsi/si_state_shaders.c index 68d82364ec9..61535c133f5 100644 --- a/src/gallium/drivers/radeonsi/si_state_shaders.c +++ b/src/gallium/drivers/radeonsi/si_state_shaders.c @@ -1763,7 +1763,7 @@ static void si_shader_selector_key_hw_vs(struct si_context *sctx, struct si_shad unsigned ps_colormask = si_get_total_colormask(sctx); ps_disabled = sctx->queued.named.rasterizer->rasterizer_discard || - (!ps_colormask && !ps_modifies_zs && !ps->info.writes_memory); + (!ps_colormask && !ps_modifies_zs && !ps->info.base.writes_memory); } /* Find out which VS outputs aren't used by the PS. */ @@ -2623,7 +2623,7 @@ static void *si_create_shader_selector(struct pipe_context *ctx, sel->prim_discard_cs_allowed = sel->info.stage == MESA_SHADER_VERTEX && !sel->info.uses_bindless_images && - !sel->info.uses_bindless_samplers && !sel->info.writes_memory && + !sel->info.uses_bindless_samplers && !sel->info.base.writes_memory && !sel->info.writes_viewport_index && !sel->info.base.vs.window_space_position && !sel->so.num_outputs; @@ -2745,7 +2745,7 @@ static void *si_create_shader_selector(struct pipe_context *ctx, sscreen->always_use_ngg_culling_tess))) && sel->info.writes_position && !sel->info.writes_viewport_index && /* cull only against viewport 0 */ - !sel->info.writes_memory && !sel->so.num_outputs && + !sel->info.base.writes_memory && !sel->so.num_outputs && (sel->info.stage != MESA_SHADER_VERTEX || (!sel->info.base.vs.blit_sgprs_amd && !sel->info.base.vs.window_space_position)); @@ -2798,8 +2798,8 @@ static void *si_create_shader_selector(struct pipe_context *ctx, /* Cases 3, 4. */ sel->db_shader_control |= S_02880C_DEPTH_BEFORE_SHADER(1) | S_02880C_Z_ORDER(V_02880C_EARLY_Z_THEN_LATE_Z) | - S_02880C_EXEC_ON_NOOP(sel->info.writes_memory); - } else if (sel->info.writes_memory) { + S_02880C_EXEC_ON_NOOP(sel->info.base.writes_memory); + } else if (sel->info.base.writes_memory) { /* Case 2. */ sel->db_shader_control |= S_02880C_Z_ORDER(V_02880C_LATE_Z) | S_02880C_EXEC_ON_HIER_FAIL(1); } else { @@ -3058,7 +3058,7 @@ static void si_bind_ps_shader(struct pipe_context *ctx, void *state) si_mark_atom_dirty(sctx, &sctx->atoms.s.cb_render_state); if (sctx->screen->has_out_of_order_rast && - (!old_sel || old_sel->info.writes_memory != sel->info.writes_memory || + (!old_sel || old_sel->info.base.writes_memory != sel->info.base.writes_memory || old_sel->info.base.fs.early_fragment_tests != sel->info.base.fs.early_fragment_tests)) si_mark_atom_dirty(sctx, &sctx->atoms.s.msaa_config); -- 2.30.2