ac/radv: change api to create target machine
authorDave Airlie <airlied@redhat.com>
Thu, 6 Jul 2017 01:56:21 +0000 (02:56 +0100)
committerDave Airlie <airlied@redhat.com>
Thu, 6 Jul 2017 22:05:59 +0000 (23:05 +0100)
This just modifies the API to make it easier to add other flags
to target machine creation.

Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Signed-off-by: Dave Airlie <airlied@redhat.com>
src/amd/common/ac_llvm_util.c
src/amd/common/ac_llvm_util.h
src/amd/vulkan/radv_pipeline.c

index d9d8d91..088f01f 100644 (file)
@@ -118,11 +118,11 @@ static const char *ac_get_llvm_processor_name(enum radeon_family family)
        }
 }
 
-LLVMTargetMachineRef ac_create_target_machine(enum radeon_family family, bool supports_spill)
+LLVMTargetMachineRef ac_create_target_machine(enum radeon_family family, enum ac_target_machine_options tm_options)
 {
        assert(family >= CHIP_TAHITI);
 
-       const char *triple = supports_spill ? "amdgcn-mesa-mesa3d" : "amdgcn--";
+       const char *triple = (tm_options & AC_TM_SUPPORTS_SPILL) ? "amdgcn-mesa-mesa3d" : "amdgcn--";
        LLVMTargetRef target = ac_get_llvm_target(triple);
        LLVMTargetMachineRef tm = LLVMCreateTargetMachine(
                                     target,
index 4ce59ec..06208a4 100644 (file)
@@ -54,7 +54,10 @@ enum ac_func_attr {
        AC_FUNC_ATTR_LEGACY       = (1u << 31),
 };
 
-LLVMTargetMachineRef ac_create_target_machine(enum radeon_family family, bool supports_spill);
+enum ac_target_machine_options {
+       AC_TM_SUPPORTS_SPILL = (1 << 0),
+};
+LLVMTargetMachineRef ac_create_target_machine(enum radeon_family family, enum ac_target_machine_options tm_options);
 
 void ac_add_attr_dereferenceable(LLVMValueRef val, uint64_t bytes);
 bool ac_is_sgpr_param(LLVMValueRef param);
index 061121b..71a5cce 100644 (file)
@@ -460,12 +460,14 @@ static struct radv_shader_variant *radv_shader_variant_create(struct radv_device
                options.key = *key;
 
        struct ac_shader_binary binary;
-
+       enum ac_target_machine_options tm_options = 0;
        options.unsafe_math = !!(device->debug_flags & RADV_DEBUG_UNSAFE_MATH);
        options.family = chip_family;
        options.chip_class = device->physical_device->rad_info.chip_class;
        options.supports_spill = device->llvm_supports_spill;
-       tm = ac_create_target_machine(chip_family, options.supports_spill);
+       if (options.supports_spill)
+               tm_options |= AC_TM_SUPPORTS_SPILL;
+       tm = ac_create_target_machine(chip_family, tm_options);
        ac_compile_nir_shader(tm, &binary, &variant->config,
                              &variant->info, shader, &options, dump);
        LLVMDisposeTargetMachine(tm);
@@ -501,10 +503,12 @@ radv_pipeline_create_gs_copy_shader(struct radv_pipeline *pipeline,
 
        struct ac_nir_compiler_options options = {0};
        struct ac_shader_binary binary;
+       enum ac_target_machine_options tm_options = 0;
        options.family = chip_family;
        options.chip_class = pipeline->device->physical_device->rad_info.chip_class;
-       options.supports_spill = pipeline->device->llvm_supports_spill;
-       tm = ac_create_target_machine(chip_family, options.supports_spill);
+       if (options.supports_spill)
+               tm_options |= AC_TM_SUPPORTS_SPILL;
+       tm = ac_create_target_machine(chip_family, tm_options);
        ac_create_gs_copy_shader(tm, nir, &binary, &variant->config, &variant->info, &options, dump_shader);
        LLVMDisposeTargetMachine(tm);