compiler: add SYSTEM_VALUE_USER_DATA_AMD
for internal radeonsi shaders
This commit is contained in:
parent
f0ccc5457a
commit
1b881852bc
|
@ -3313,6 +3313,10 @@ static void visit_intrinsic(struct ac_nir_context *ctx,
|
|||
case nir_intrinsic_load_color1:
|
||||
result = ctx->abi->color1;
|
||||
break;
|
||||
case nir_intrinsic_load_user_data_amd:
|
||||
assert(LLVMTypeOf(ctx->abi->user_data) == ctx->ac.v4i32);
|
||||
result = ctx->abi->user_data;
|
||||
break;
|
||||
case nir_intrinsic_load_instance_id:
|
||||
result = ctx->abi->instance_id;
|
||||
break;
|
||||
|
|
|
@ -65,6 +65,7 @@ struct ac_shader_abi {
|
|||
LLVMValueRef prim_mask;
|
||||
LLVMValueRef color0;
|
||||
LLVMValueRef color1;
|
||||
LLVMValueRef user_data;
|
||||
/* CS */
|
||||
LLVMValueRef local_invocation_ids;
|
||||
LLVMValueRef num_work_groups;
|
||||
|
|
|
@ -2022,6 +2022,8 @@ nir_intrinsic_from_system_value(gl_system_value val)
|
|||
return nir_intrinsic_load_global_invocation_index;
|
||||
case SYSTEM_VALUE_WORK_DIM:
|
||||
return nir_intrinsic_load_work_dim;
|
||||
case SYSTEM_VALUE_USER_DATA_AMD:
|
||||
return nir_intrinsic_load_user_data_amd;
|
||||
default:
|
||||
unreachable("system value does not directly correspond to intrinsic");
|
||||
}
|
||||
|
@ -2109,6 +2111,8 @@ nir_system_value_from_intrinsic(nir_intrinsic_op intrin)
|
|||
return SYSTEM_VALUE_LOCAL_GROUP_SIZE;
|
||||
case nir_intrinsic_load_global_invocation_id:
|
||||
return SYSTEM_VALUE_GLOBAL_INVOCATION_ID;
|
||||
case nir_intrinsic_load_user_data_amd:
|
||||
return SYSTEM_VALUE_USER_DATA_AMD;
|
||||
default:
|
||||
unreachable("intrinsic doesn't produce a system value");
|
||||
}
|
||||
|
|
|
@ -614,6 +614,9 @@ system_value("blend_const_color_aaaa8888_unorm", 1)
|
|||
system_value("color0", 4)
|
||||
system_value("color1", 4)
|
||||
|
||||
# System value for internal compute shaders in radeonsi.
|
||||
system_value("user_data_amd", 4)
|
||||
|
||||
# Barycentric coordinate intrinsics.
|
||||
#
|
||||
# These set up the barycentric coordinates for a particular interpolation.
|
||||
|
|
|
@ -609,6 +609,7 @@ typedef enum
|
|||
SYSTEM_VALUE_LOCAL_GROUP_SIZE,
|
||||
SYSTEM_VALUE_GLOBAL_GROUP_SIZE,
|
||||
SYSTEM_VALUE_WORK_DIM,
|
||||
SYSTEM_VALUE_USER_DATA_AMD,
|
||||
/*@}*/
|
||||
|
||||
/** Required for VK_KHR_device_group */
|
||||
|
|
|
@ -628,6 +628,10 @@ ttn_src_for_file_and_index(struct ttn_compile *c, unsigned file, unsigned index,
|
|||
op = nir_intrinsic_load_work_group_id;
|
||||
load = nir_load_work_group_id(b);
|
||||
break;
|
||||
case TGSI_SEMANTIC_CS_USER_DATA_AMD:
|
||||
op = nir_intrinsic_load_user_data_amd;
|
||||
load = nir_load_user_data_amd(b);
|
||||
break;
|
||||
default:
|
||||
unreachable("bad system value");
|
||||
}
|
||||
|
|
|
@ -1240,6 +1240,12 @@ bool si_nir_build_llvm(struct si_shader_context *ctx, struct nir_shader *nir)
|
|||
|
||||
ctx->abi.interp_at_sample_force_center =
|
||||
ctx->shader->key.mono.u.ps.interpolate_at_sample_force_center;
|
||||
} else if (nir->info.stage == MESA_SHADER_COMPUTE) {
|
||||
if (nir->info.cs.user_data_components_amd) {
|
||||
ctx->abi.user_data = LLVMGetParam(ctx->main_fn, ctx->param_cs_user_data);
|
||||
ctx->abi.user_data = ac_build_expand_to_vec4(&ctx->ac, ctx->abi.user_data,
|
||||
nir->info.cs.user_data_components_amd);
|
||||
}
|
||||
}
|
||||
|
||||
ctx->abi.inputs = &ctx->inputs[0];
|
||||
|
|
Loading…
Reference in New Issue