From: Nicolai Hähnle <nicolai.haeh...@amd.com> --- src/amd/common/ac_nir_to_llvm.h | 2 +- src/gallium/drivers/radeonsi/si_shader.c | 13 ++++++++++--- src/gallium/drivers/radeonsi/si_shader_internal.h | 2 ++ src/gallium/drivers/radeonsi/si_shader_nir.c | 9 +++++++++ 4 files changed, 22 insertions(+), 4 deletions(-)
diff --git a/src/amd/common/ac_nir_to_llvm.h b/src/amd/common/ac_nir_to_llvm.h index e0ed7f8..4c8b46b 100644 --- a/src/amd/common/ac_nir_to_llvm.h +++ b/src/amd/common/ac_nir_to_llvm.h @@ -23,21 +23,21 @@ #ifndef AC_NIR_TO_LLVM_H #define AC_NIR_TO_LLVM_H #include <stdbool.h> #include "llvm-c/Core.h" #include "llvm-c/TargetMachine.h" #include "amd_family.h" #include "../vulkan/radv_descriptor_set.h" #include "ac_shader_info.h" -#include "shader_enums.h" +#include "compiler/shader_enums.h" struct ac_shader_binary; struct ac_shader_config; struct nir_shader; struct radv_pipeline_layout; struct ac_llvm_context; struct ac_shader_abi; struct ac_vs_variant_key { uint32_t instance_rate_inputs; diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c index 4641220..52e6e0d 100644 --- a/src/gallium/drivers/radeonsi/si_shader.c +++ b/src/gallium/drivers/radeonsi/si_shader.c @@ -5566,23 +5566,30 @@ static bool si_compile_tgsi_main(struct si_shader_context *ctx, ctx->i32, ""); } } if (ctx->type == PIPE_SHADER_FRAGMENT && sel->info.uses_kill && ctx->screen->b.debug_flags & DBG_FS_CORRECT_DERIVS_AFTER_KILL) { /* This is initialized to 0.0 = not kill. */ ctx->postponed_kill = lp_build_alloca(&ctx->gallivm, ctx->f32, ""); } - if (!lp_build_tgsi_llvm(bld_base, sel->tokens)) { - fprintf(stderr, "Failed to translate shader from TGSI to LLVM\n"); - return false; + if (sel->tokens) { + if (!lp_build_tgsi_llvm(bld_base, sel->tokens)) { + fprintf(stderr, "Failed to translate shader from TGSI to LLVM\n"); + return false; + } + } else { + if (!si_nir_build_llvm(ctx, sel->nir)) { + fprintf(stderr, "Failed to translate shader from NIR to LLVM\n"); + return false; + } } si_llvm_build_ret(ctx, ctx->return_value); return true; } /** * Compute the VS prolog key, which contains all the information needed to * build the VS prolog function, and set shader->info bits where needed. * diff --git a/src/gallium/drivers/radeonsi/si_shader_internal.h b/src/gallium/drivers/radeonsi/si_shader_internal.h index 90a70b1..2054a73 100644 --- a/src/gallium/drivers/radeonsi/si_shader_internal.h +++ b/src/gallium/drivers/radeonsi/si_shader_internal.h @@ -299,11 +299,13 @@ void si_emit_waitcnt(struct si_shader_context *ctx, unsigned simm16); LLVMValueRef si_get_bounded_indirect_index(struct si_shader_context *ctx, const struct tgsi_ind_register *ind, int rel_index, unsigned num); LLVMTypeRef si_const_array(LLVMTypeRef elem_type, int num_elements); void si_shader_context_init_alu(struct lp_build_tgsi_context *bld_base); void si_shader_context_init_mem(struct si_shader_context *ctx); +bool si_nir_build_llvm(struct si_shader_context *ctx, struct nir_shader *nir); + #endif diff --git a/src/gallium/drivers/radeonsi/si_shader_nir.c b/src/gallium/drivers/radeonsi/si_shader_nir.c index 2278c62..cc7517b 100644 --- a/src/gallium/drivers/radeonsi/si_shader_nir.c +++ b/src/gallium/drivers/radeonsi/si_shader_nir.c @@ -15,20 +15,23 @@ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "si_shader.h" +#include "si_shader_internal.h" + +#include "ac_nir_to_llvm.h" #include "tgsi/tgsi_from_mesa.h" #include "compiler/nir/nir.h" #include "compiler/nir_types.h" static void scan_instruction(struct tgsi_shader_info *info, nir_instr *instr) { @@ -303,10 +306,16 @@ void si_nir_scan_shader(const struct nir_shader *nir, info->const_buffers_declared = u_bit_consecutive(0, SI_NUM_CONST_BUFFERS); info->shader_buffers_declared = u_bit_consecutive(0, SI_NUM_SHADER_BUFFERS); func = (struct nir_function *)exec_list_get_head_const(&nir->functions); nir_foreach_block(block, func->impl) { nir_foreach_instr(instr, block) scan_instruction(info, instr); } } +bool si_nir_build_llvm(struct si_shader_context *ctx, struct nir_shader *nir) +{ + ac_nir_translate(&ctx->ac, &ctx->abi, nir, NULL); + + return true; +} -- 2.9.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev