ac/radeonsi: add workgroup_ids to the abi

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
Timothy Arceri 2018-02-02 10:08:52 +11:00
parent 64c10c9737
commit fa5239c153
4 changed files with 9 additions and 11 deletions

View File

@ -91,7 +91,6 @@ struct nir_to_llvm_context {
LLVMValueRef push_constants;
LLVMValueRef view_index;
LLVMValueRef num_work_groups;
LLVMValueRef workgroup_ids[3];
LLVMValueRef local_invocation_ids;
LLVMValueRef tg_size;
@ -786,10 +785,10 @@ static void create_function(struct nir_to_llvm_context *ctx,
}
for (int i = 0; i < 3; i++) {
ctx->workgroup_ids[i] = NULL;
ctx->abi.workgroup_ids[i] = NULL;
if (ctx->shader_info->info.cs.uses_block_id[i]) {
add_arg(&args, ARG_SGPR, ctx->ac.i32,
&ctx->workgroup_ids[i]);
&ctx->abi.workgroup_ids[i]);
}
}
@ -4299,8 +4298,8 @@ static void visit_intrinsic(struct ac_nir_context *ctx,
LLVMValueRef values[3];
for (int i = 0; i < 3; i++) {
values[i] = ctx->nctx->workgroup_ids[i] ?
ctx->nctx->workgroup_ids[i] : ctx->ac.i32_0;
values[i] = ctx->abi->workgroup_ids[i] ?
ctx->abi->workgroup_ids[i] : ctx->ac.i32_0;
}
result = ac_build_gather_values(&ctx->ac, values, 3);

View File

@ -54,6 +54,7 @@ struct ac_shader_abi {
LLVMValueRef ancillary;
LLVMValueRef sample_coverage;
LLVMValueRef prim_mask;
LLVMValueRef workgroup_ids[3];
/* For VS and PS: pre-loaded shader inputs.
*

View File

@ -2152,9 +2152,8 @@ void si_load_system_value(struct si_shader_context *ctx,
for (int i = 0; i < 3; i++) {
values[i] = ctx->i32_0;
if (ctx->param_block_id[i] >= 0) {
values[i] = LLVMGetParam(ctx->main_fn,
ctx->param_block_id[i]);
if (ctx->abi.workgroup_ids[i]) {
values[i] = ctx->abi.workgroup_ids[i];
}
}
value = lp_build_gather_values(&ctx->gallivm, values, 3);
@ -4882,9 +4881,9 @@ static void create_function(struct si_shader_context *ctx)
ctx->param_block_size = add_arg(&fninfo, ARG_SGPR, v3i32);
for (i = 0; i < 3; i++) {
ctx->param_block_id[i] = -1;
ctx->abi.workgroup_ids[i] = NULL;
if (shader->selector->info.uses_block_id[i])
ctx->param_block_id[i] = add_arg(&fninfo, ARG_SGPR, ctx->i32);
add_arg_assign(&fninfo, ARG_SGPR, ctx->i32, &ctx->abi.workgroup_ids[i]);
}
ctx->param_thread_id = add_arg(&fninfo, ARG_VGPR, v3i32);

View File

@ -186,7 +186,6 @@ struct si_shader_context {
/* CS */
int param_grid_size;
int param_block_size;
int param_block_id[3];
int param_thread_id;
LLVMTargetMachineRef tm;