diff options
author | Nicolai Hähnle <nicolai.haehnle@amd.com> | 2017-06-08 19:38:51 +0200 |
---|---|---|
committer | Nicolai Hähnle <nicolai.haehnle@amd.com> | 2017-07-05 12:33:52 +0200 |
commit | ed57d03614d1b4a1702001800d4e2aa48907dc9b (patch) | |
tree | 909fa093e4c70cd3fda1b9de9a4c52d1c41b7f64 | |
parent | 87932fb60135069e08ad53c5520c0dfe9171741f (diff) |
radeonsi/nir: emit FS outputs
-rw-r--r-- | src/gallium/drivers/radeonsi/si_shader.c | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c index e90d25c239..2b030c02f9 100644 --- a/src/gallium/drivers/radeonsi/si_shader.c +++ b/src/gallium/drivers/radeonsi/si_shader.c @@ -3325,9 +3325,11 @@ static void si_export_null(struct lp_build_tgsi_context *bld_base) * * The alpha-ref SGPR is returned via its original location. */ -static void si_llvm_return_fs_outputs(struct lp_build_tgsi_context *bld_base) +static void si_llvm_return_fs_outputs(struct ac_shader_abi *abi, + unsigned max_outputs, + LLVMValueRef *addrs) { - struct si_shader_context *ctx = si_shader_context(bld_base); + struct si_shader_context *ctx = si_shader_context_from_abi(abi); struct si_shader *shader = ctx->shader; struct tgsi_shader_info *info = &shader->selector->info; LLVMBuilderRef builder = ctx->gallivm.builder; @@ -3349,22 +3351,22 @@ static void si_llvm_return_fs_outputs(struct lp_build_tgsi_context *bld_base) case TGSI_SEMANTIC_COLOR: assert(semantic_index < 8); for (j = 0; j < 4; j++) { - LLVMValueRef ptr = ctx->outputs[i][j]; + LLVMValueRef ptr = addrs[4 * i + j]; LLVMValueRef result = LLVMBuildLoad(builder, ptr, ""); color[semantic_index][j] = result; } break; case TGSI_SEMANTIC_POSITION: depth = LLVMBuildLoad(builder, - ctx->outputs[i][2], ""); + addrs[4 * i + 2], ""); break; case TGSI_SEMANTIC_STENCIL: stencil = LLVMBuildLoad(builder, - ctx->outputs[i][1], ""); + addrs[4 * i + 1], ""); break; case TGSI_SEMANTIC_SAMPLEMASK: samplemask = LLVMBuildLoad(builder, - ctx->outputs[i][0], ""); + addrs[4 * i + 0], ""); break; default: fprintf(stderr, "Warning: SI unhandled fs output type:%d\n", @@ -3377,9 +3379,10 @@ static void si_llvm_return_fs_outputs(struct lp_build_tgsi_context *bld_base) /* Set SGPRs. */ ret = LLVMBuildInsertValue(builder, ret, - bitcast(bld_base, TGSI_TYPE_SIGNED, - LLVMGetParam(ctx->main_fn, - SI_PARAM_ALPHA_REF)), + LLVMBuildBitCast(ctx->ac.builder, + LLVMGetParam(ctx->main_fn, + SI_PARAM_ALPHA_REF), + ctx->i32, ""), SI_SGPR_ALPHA_REF, ""); /* Set VGPRs */ @@ -5600,7 +5603,8 @@ static bool si_compile_tgsi_main(struct si_shader_context *ctx, break; case PIPE_SHADER_FRAGMENT: ctx->load_input = declare_input_fs; - bld_base->emit_epilogue = si_llvm_return_fs_outputs; + ctx->abi.emit_outputs = si_llvm_return_fs_outputs; + bld_base->emit_epilogue = si_tgsi_emit_epilogue; break; case PIPE_SHADER_COMPUTE: ctx->declare_memory_region = declare_compute_memory; |