If a program like mpv uses both radeon_dri.so (because --vo=gpu) and
radeonsi_drv_video.so (because --hwdec=vaapi) then LLVM will be inialized twice.
The commit exports the ac_init_llvm_once so there's only one instance of the
function.
See also
18b12bf5335 ("targets: export radeon winsys_create functions to silence LLVM warning")
which implemented this workaround initially.
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/1377
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Acked-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5648>
LLVMParseCommandLineOptions(ARRAY_SIZE(argv), argv, NULL);
}
-static once_flag ac_init_llvm_target_once_flag = ONCE_FLAG_INIT;
-
-void ac_init_llvm_once(void)
+PUBLIC void ac_init_llvm_once(void)
{
+ static once_flag ac_init_llvm_target_once_flag = ONCE_FLAG_INIT;
call_once(&ac_init_llvm_target_once_flag, ac_init_llvm_target);
}
args : [
'--lib', libvulkan_radeon,
'--symbols-file', vulkan_icd_symbols,
+ '--ignore-symbol', 'ac_init_llvm_once',
symbols_check_args,
],
suite : ['amd'],
nouveau_drm_screen_create;
radeon_drm_winsys_create;
amdgpu_winsys_create;
+ ac_init_llvm_once;
};
radeon_drm_winsys_create;
amdgpu_winsys_create;
fd_drm_screen_create;
+ ac_init_llvm_once;
local:
*;
};
# due to LLVM being initialized multiple times.
radeon_drm_winsys_create;
amdgpu_winsys_create;
+ ac_init_llvm_once;
local:
*;
};
# due to LLVM being initialized multiple times.
radeon_drm_winsys_create;
amdgpu_winsys_create;
+ ac_init_llvm_once;
local:
*;
};
# due to LLVM being initialized multiple times.
radeon_drm_winsys_create;
amdgpu_winsys_create;
+ ac_init_llvm_once;
local:
*;
};
nouveau_drm_screen_create;
radeon_drm_winsys_create;
amdgpu_winsys_create;
+ ac_init_llvm_once;
local:
*;
};