Module: Mesa Branch: master Commit: 19f3141e6ab34dc7389b5e1fa9f3dca5e23b2191 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=19f3141e6ab34dc7389b5e1fa9f3dca5e23b2191
Author: Timothy Arceri <tarc...@itsqueeze.com> Date: Mon Dec 11 16:16:30 2017 +1100 ac: add load_tess_level() to the abi Fixes the following piglit tests in radeonsi: vs-tcs-tes-tessinner-tessouter-inputs-quads.shader_test vs-tcs-tes-tessinner-tessouter-inputs-tris.shader_test vs-tes-tessinner-tessouter-inputs-quads.shader_test vs-tes-tessinner-tessouter-inputs-tris.shader_test v2: make use of si_shader_io_get_unique_index_patch() via the helper in the previous patch rather than shader_io_get_unique_index() Reviewed-by: Nicolai Hähnle <nicolai.haeh...@amd.com> (v1) Reviewed-by: Marek Olšák <marek.ol...@amd.com> --- src/amd/common/ac_nir_to_llvm.c | 6 ++++++ src/amd/common/ac_shader_abi.h | 4 ++++ src/gallium/drivers/radeonsi/si_shader.c | 22 ++++++++++++++++++++++ 3 files changed, 32 insertions(+) diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c index 42ddebbeef..cad4adfa03 100644 --- a/src/amd/common/ac_nir_to_llvm.c +++ b/src/amd/common/ac_nir_to_llvm.c @@ -4369,6 +4369,12 @@ static void visit_intrinsic(struct ac_nir_context *ctx, result = ctx->abi->load_tess_coord(ctx->abi, type, instr->num_components); break; } + case nir_intrinsic_load_tess_level_outer: + result = ctx->abi->load_tess_level(ctx->abi, VARYING_SLOT_TESS_LEVEL_OUTER); + break; + case nir_intrinsic_load_tess_level_inner: + result = ctx->abi->load_tess_level(ctx->abi, VARYING_SLOT_TESS_LEVEL_INNER); + break; case nir_intrinsic_load_patch_vertices_in: result = LLVMConstInt(ctx->ac.i32, ctx->nctx->options->key.tcs.input_vertices, false); break; diff --git a/src/amd/common/ac_shader_abi.h b/src/amd/common/ac_shader_abi.h index 277e4efe47..e3a47089a5 100644 --- a/src/amd/common/ac_shader_abi.h +++ b/src/amd/common/ac_shader_abi.h @@ -103,6 +103,10 @@ struct ac_shader_abi { LLVMTypeRef type, unsigned num_components); + LLVMValueRef (*load_tess_level)(struct ac_shader_abi *abi, + unsigned varying_id); + + LLVMValueRef (*load_ubo)(struct ac_shader_abi *abi, LLVMValueRef index); /** diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c index e579916359..86f3f7a8ba 100644 --- a/src/gallium/drivers/radeonsi/si_shader.c +++ b/src/gallium/drivers/radeonsi/si_shader.c @@ -1934,6 +1934,27 @@ static LLVMValueRef load_tess_level(struct si_shader_context *ctx, } +static LLVMValueRef si_load_tess_level(struct ac_shader_abi *abi, + unsigned varying_id) +{ + struct si_shader_context *ctx = si_shader_context_from_abi(abi); + unsigned semantic_name; + + switch (varying_id) { + case VARYING_SLOT_TESS_LEVEL_INNER: + semantic_name = TGSI_SEMANTIC_TESSINNER; + break; + case VARYING_SLOT_TESS_LEVEL_OUTER: + semantic_name = TGSI_SEMANTIC_TESSOUTER; + break; + default: + unreachable("unknown tess level"); + } + + return load_tess_level(ctx, semantic_name); + +} + void si_load_system_value(struct si_shader_context *ctx, unsigned index, const struct tgsi_full_declaration *decl) @@ -5971,6 +5992,7 @@ static bool si_compile_tgsi_main(struct si_shader_context *ctx, bld_base->emit_fetch_funcs[TGSI_FILE_INPUT] = fetch_input_tes; ctx->abi.load_tess_inputs = si_nir_load_input_tes; ctx->abi.load_tess_coord = si_load_tess_coord; + ctx->abi.load_tess_level = si_load_tess_level; if (shader->key.as_es) ctx->abi.emit_outputs = si_llvm_emit_es_epilogue; else _______________________________________________ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit