radv/ac: setup lds for tessellation

This seems to get lost in the rebases, should fix
the tessellation demos, crash in llvm.

Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
Dave Airlie 2017-03-30 20:15:23 +01:00
parent 3f0d69af20
commit cb1518e96b

View file

@ -548,6 +548,14 @@ static void set_userdata_location_indirect(struct ac_userdata_info *ud_info, uin
} }
#endif #endif
static void declare_tess_lds(struct nir_to_llvm_context *ctx)
{
unsigned lds_size = ctx->options->chip_class >= CIK ? 65536 : 32768;
ctx->lds = LLVMBuildIntToPtr(ctx->builder, ctx->i32zero,
LLVMPointerType(LLVMArrayType(ctx->i32, lds_size / 4), LOCAL_ADDR_SPACE),
"tess_lds");
}
static void create_function(struct nir_to_llvm_context *ctx) static void create_function(struct nir_to_llvm_context *ctx)
{ {
LLVMTypeRef arg_types[23]; LLVMTypeRef arg_types[23];
@ -785,6 +793,8 @@ static void create_function(struct nir_to_llvm_context *ctx)
ctx->vs_prim_id = LLVMGetParam(ctx->main_function, arg_idx++); ctx->vs_prim_id = LLVMGetParam(ctx->main_function, arg_idx++);
ctx->instance_id = LLVMGetParam(ctx->main_function, arg_idx++); ctx->instance_id = LLVMGetParam(ctx->main_function, arg_idx++);
} }
if (ctx->options->key.vs.as_ls)
declare_tess_lds(ctx);
break; break;
case MESA_SHADER_TESS_CTRL: case MESA_SHADER_TESS_CTRL:
set_userdata_location_shader(ctx, AC_UD_TCS_OFFCHIP_LAYOUT, user_sgpr_idx, 4); set_userdata_location_shader(ctx, AC_UD_TCS_OFFCHIP_LAYOUT, user_sgpr_idx, 4);
@ -797,6 +807,8 @@ static void create_function(struct nir_to_llvm_context *ctx)
ctx->tess_factor_offset = LLVMGetParam(ctx->main_function, arg_idx++); ctx->tess_factor_offset = LLVMGetParam(ctx->main_function, arg_idx++);
ctx->tcs_patch_id = LLVMGetParam(ctx->main_function, arg_idx++); ctx->tcs_patch_id = LLVMGetParam(ctx->main_function, arg_idx++);
ctx->tcs_rel_ids = LLVMGetParam(ctx->main_function, arg_idx++); ctx->tcs_rel_ids = LLVMGetParam(ctx->main_function, arg_idx++);
declare_tess_lds(ctx);
break; break;
case MESA_SHADER_TESS_EVAL: case MESA_SHADER_TESS_EVAL:
set_userdata_location_shader(ctx, AC_UD_TES_OFFCHIP_LAYOUT, user_sgpr_idx, 1); set_userdata_location_shader(ctx, AC_UD_TES_OFFCHIP_LAYOUT, user_sgpr_idx, 1);