[Mesa-dev] [PATCH 1/2] radv: always emit all compute block components
Bas Nieuwenhuizen
bas at basnieuwenhuizen.nl
Thu Dec 14 21:02:23 UTC 2017
Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
On Thu, Dec 14, 2017 at 12:51 PM, Samuel Pitoiset
<samuel.pitoiset at gmail.com> wrote:
> The number of grid components is always 3 when gl_NumWorkGroups
> is declared, because it relies on the number of components of
> nir_instrinsic_load_num_work_groups.
>
> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
> ---
> src/amd/common/ac_nir_to_llvm.c | 9 ++++++---
> src/amd/vulkan/radv_cmd_buffer.c | 15 +++++----------
> 2 files changed, 11 insertions(+), 13 deletions(-)
>
> diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c
> index f3602a267d..ce25e57eba 100644
> --- a/src/amd/common/ac_nir_to_llvm.c
> +++ b/src/amd/common/ac_nir_to_llvm.c
> @@ -745,8 +745,10 @@ static void create_function(struct nir_to_llvm_context *ctx,
> switch (stage) {
> case MESA_SHADER_COMPUTE:
> radv_define_common_user_sgprs_phase1(ctx, stage, has_previous_stage, previous_stage, &user_sgpr_info, &args, &desc_sets);
> - if (ctx->shader_info->info.cs.grid_components_used)
> - add_user_sgpr_argument(&args, LLVMVectorType(ctx->ac.i32, ctx->shader_info->info.cs.grid_components_used), &ctx->num_work_groups); /* grid size */
> + if (ctx->shader_info->info.cs.grid_components_used) {
> + add_user_sgpr_argument(&args, ctx->ac.v3i32,
> + &ctx->num_work_groups);
> + }
> add_sgpr_argument(&args, ctx->ac.v3i32, &ctx->workgroup_ids);
> add_sgpr_argument(&args, ctx->ac.i32, &ctx->tg_size);
> add_vgpr_argument(&args, ctx->ac.v3i32, &ctx->local_invocation_ids);
> @@ -950,7 +952,8 @@ static void create_function(struct nir_to_llvm_context *ctx,
> switch (stage) {
> case MESA_SHADER_COMPUTE:
> if (ctx->shader_info->info.cs.grid_components_used) {
> - set_userdata_location_shader(ctx, AC_UD_CS_GRID_SIZE, &user_sgpr_idx, ctx->shader_info->info.cs.grid_components_used);
> + set_userdata_location_shader(ctx, AC_UD_CS_GRID_SIZE,
> + &user_sgpr_idx, 3);
> }
> break;
> case MESA_SHADER_VERTEX:
> diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
> index 68371dbbe7..e68c5a4038 100644
> --- a/src/amd/vulkan/radv_cmd_buffer.c
> +++ b/src/amd/vulkan/radv_cmd_buffer.c
> @@ -3487,9 +3487,6 @@ radv_emit_dispatch_packets(struct radv_cmd_buffer *cmd_buffer,
> struct radeon_winsys_cs *cs = cmd_buffer->cs;
> struct ac_userdata_info *loc;
> unsigned dispatch_initiator;
> - uint8_t grid_used;
> -
> - grid_used = compute_shader->info.info.cs.grid_components_used;
>
> loc = radv_lookup_user_sgpr(pipeline, MESA_SHADER_COMPUTE,
> AC_UD_CS_GRID_SIZE);
> @@ -3514,7 +3511,7 @@ radv_emit_dispatch_packets(struct radv_cmd_buffer *cmd_buffer,
> radv_cs_add_buffer(ws, cs, info->indirect->bo, 8);
>
> if (loc->sgpr_idx != -1) {
> - for (unsigned i = 0; i < grid_used; ++i) {
> + for (unsigned i = 0; i < 3; ++i) {
> radeon_emit(cs, PKT3(PKT3_COPY_DATA, 4, 0));
> radeon_emit(cs, COPY_DATA_SRC_SEL(COPY_DATA_MEM) |
> COPY_DATA_DST_SEL(COPY_DATA_REG));
> @@ -3581,15 +3578,13 @@ radv_emit_dispatch_packets(struct radv_cmd_buffer *cmd_buffer,
>
> if (loc->sgpr_idx != -1) {
> assert(!loc->indirect);
> - assert(loc->num_sgprs == grid_used);
> + assert(loc->num_sgprs == 3);
>
> radeon_set_sh_reg_seq(cs, R_00B900_COMPUTE_USER_DATA_0 +
> - loc->sgpr_idx * 4, grid_used);
> + loc->sgpr_idx * 4, 3);
> radeon_emit(cs, blocks[0]);
> - if (grid_used > 1)
> - radeon_emit(cs, blocks[1]);
> - if (grid_used > 2)
> - radeon_emit(cs, blocks[2]);
> + radeon_emit(cs, blocks[1]);
> + radeon_emit(cs, blocks[2]);
> }
>
> radeon_emit(cs, PKT3(PKT3_DISPATCH_DIRECT, 3, 0) |
> --
> 2.15.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list