radeonsi: translate NIR to LLVM
authorNicolai Hähnle <nicolai.haehnle@amd.com>
Fri, 19 May 2017 15:43:51 +0000 (17:43 +0200)
committerNicolai Hähnle <nicolai.haehnle@amd.com>
Mon, 31 Jul 2017 12:55:33 +0000 (14:55 +0200)
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/amd/common/ac_nir_to_llvm.h
src/gallium/drivers/radeonsi/si_shader.c
src/gallium/drivers/radeonsi/si_shader_internal.h
src/gallium/drivers/radeonsi/si_shader_nir.c

index 791c694c78a294c44ecc7c0a7c85f312efd27022..0cb48a86469e2a4ace14e0e8465616bc06524139 100644 (file)
@@ -30,7 +30,7 @@
 #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;
index ac58d87784a288636b689384ffb1a86d1642b0a3..cd1be49315766eb649a465732432588300246415 100644 (file)
@@ -5652,9 +5652,16 @@ static bool si_compile_tgsi_main(struct si_shader_context *ctx,
                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);
index 9b5e0b4e535adc10c54eb6d4c13ba8e7dab66022..ae93f78d2fbeaea43a453984a1bdd18bed98a26f 100644 (file)
@@ -307,4 +307,6 @@ 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
index 9cf032aebafa4f4b4c2996706e259c41706027f9..00bcf963bea5e88050366e9cdf8fdb9e0bb1c560 100644 (file)
@@ -22,6 +22,9 @@
  */
 
 #include "si_shader.h"
+#include "si_shader_internal.h"
+
+#include "ac_nir_to_llvm.h"
 
 #include "tgsi/tgsi_from_mesa.h"
 
@@ -310,3 +313,9 @@ void si_nir_scan_shader(const struct nir_shader *nir,
        }
 }
 
+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;
+}