radv/ac: split part of llvm compile into a separate function
authorDave Airlie <airlied@redhat.com>
Mon, 16 Jan 2017 22:41:03 +0000 (08:41 +1000)
committerDave Airlie <airlied@redhat.com>
Tue, 17 Jan 2017 20:21:05 +0000 (06:21 +1000)
This is needed to have common code for gs copy shader emission.

Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Reviewed-by: Edward O'Callaghan <funfunctor@folklore1984.net>
Signed-off-by: Dave Airlie <airlied@redhat.com>
src/amd/common/ac_nir_to_llvm.c

index 6d98fde11bf4550e79191994a5958dddd3d31881..26b87e8782b6c52a1136ea6760c8fb5c821bdd6b 100644 (file)
@@ -4557,17 +4557,14 @@ out:
        return retval;
 }
 
-void ac_compile_nir_shader(LLVMTargetMachineRef tm,
-                           struct ac_shader_binary *binary,
-                           struct ac_shader_config *config,
-                           struct ac_shader_variant_info *shader_info,
-                           struct nir_shader *nir,
-                           const struct ac_nir_compiler_options *options,
-                          bool dump_shader)
+static void ac_compile_llvm_module(LLVMTargetMachineRef tm,
+                                  LLVMModuleRef llvm_module,
+                                  struct ac_shader_binary *binary,
+                                  struct ac_shader_config *config,
+                                  struct ac_shader_variant_info *shader_info,
+                                  gl_shader_stage stage,
+                                  bool dump_shader)
 {
-
-       LLVMModuleRef llvm_module = ac_translate_nir_to_llvm(tm, nir, shader_info,
-                                                            options);
        if (dump_shader)
                LLVMDumpModule(llvm_module);
 
@@ -4586,7 +4583,7 @@ void ac_compile_nir_shader(LLVMTargetMachineRef tm,
        LLVMDisposeModule(llvm_module);
        LLVMContextDispose(ctx);
 
-       if (nir->stage == MESA_SHADER_FRAGMENT) {
+       if (stage == MESA_SHADER_FRAGMENT) {
                shader_info->num_input_vgprs = 0;
                if (G_0286CC_PERSP_SAMPLE_ENA(config->spi_ps_input_addr))
                        shader_info->num_input_vgprs += 2;
@@ -4626,7 +4623,21 @@ void ac_compile_nir_shader(LLVMTargetMachineRef tm,
        /* +3 for scratch wave offset and VCC */
        config->num_sgprs = MAX2(config->num_sgprs,
                                 shader_info->num_input_sgprs + 3);
+}
+
+void ac_compile_nir_shader(LLVMTargetMachineRef tm,
+                           struct ac_shader_binary *binary,
+                           struct ac_shader_config *config,
+                           struct ac_shader_variant_info *shader_info,
+                           struct nir_shader *nir,
+                           const struct ac_nir_compiler_options *options,
+                          bool dump_shader)
+{
+
+       LLVMModuleRef llvm_module = ac_translate_nir_to_llvm(tm, nir, shader_info,
+                                                            options);
 
+       ac_compile_llvm_module(tm, llvm_module, binary, config, shader_info, nir->stage, dump_shader);
        switch (nir->stage) {
        case MESA_SHADER_COMPUTE:
                for (int i = 0; i < 3; ++i)