1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker * Copyright © 2016 Red Hat.
3*61046927SAndroid Build Coastguard Worker * Copyright © 2016 Bas Nieuwenhuizen
4*61046927SAndroid Build Coastguard Worker *
5*61046927SAndroid Build Coastguard Worker * based in part on anv driver which is:
6*61046927SAndroid Build Coastguard Worker * Copyright © 2015 Intel Corporation
7*61046927SAndroid Build Coastguard Worker *
8*61046927SAndroid Build Coastguard Worker * SPDX-License-Identifier: MIT
9*61046927SAndroid Build Coastguard Worker */
10*61046927SAndroid Build Coastguard Worker
11*61046927SAndroid Build Coastguard Worker #ifdef HAVE_VALGRIND
12*61046927SAndroid Build Coastguard Worker #include <memcheck.h>
13*61046927SAndroid Build Coastguard Worker #include <valgrind.h>
14*61046927SAndroid Build Coastguard Worker #define VG(x) x
15*61046927SAndroid Build Coastguard Worker #else
16*61046927SAndroid Build Coastguard Worker #define VG(x) ((void)0)
17*61046927SAndroid Build Coastguard Worker #endif
18*61046927SAndroid Build Coastguard Worker
19*61046927SAndroid Build Coastguard Worker #include "radv_instance.h"
20*61046927SAndroid Build Coastguard Worker #include "radv_debug.h"
21*61046927SAndroid Build Coastguard Worker #include "radv_entrypoints.h"
22*61046927SAndroid Build Coastguard Worker #include "radv_wsi.h"
23*61046927SAndroid Build Coastguard Worker
24*61046927SAndroid Build Coastguard Worker #include "util/driconf.h"
25*61046927SAndroid Build Coastguard Worker
26*61046927SAndroid Build Coastguard Worker #include "vk_instance.h"
27*61046927SAndroid Build Coastguard Worker #include "vk_log.h"
28*61046927SAndroid Build Coastguard Worker #include "vk_util.h"
29*61046927SAndroid Build Coastguard Worker
30*61046927SAndroid Build Coastguard Worker static const struct debug_control radv_debug_options[] = {{"nofastclears", RADV_DEBUG_NO_FAST_CLEARS},
31*61046927SAndroid Build Coastguard Worker {"nodcc", RADV_DEBUG_NO_DCC},
32*61046927SAndroid Build Coastguard Worker {"shaders", RADV_DEBUG_DUMP_SHADERS},
33*61046927SAndroid Build Coastguard Worker {"nocache", RADV_DEBUG_NO_CACHE},
34*61046927SAndroid Build Coastguard Worker {"shaderstats", RADV_DEBUG_DUMP_SHADER_STATS},
35*61046927SAndroid Build Coastguard Worker {"nohiz", RADV_DEBUG_NO_HIZ},
36*61046927SAndroid Build Coastguard Worker {"nocompute", RADV_DEBUG_NO_COMPUTE_QUEUE},
37*61046927SAndroid Build Coastguard Worker {"allbos", RADV_DEBUG_ALL_BOS},
38*61046927SAndroid Build Coastguard Worker {"noibs", RADV_DEBUG_NO_IBS},
39*61046927SAndroid Build Coastguard Worker {"spirv", RADV_DEBUG_DUMP_SPIRV},
40*61046927SAndroid Build Coastguard Worker {"zerovram", RADV_DEBUG_ZERO_VRAM},
41*61046927SAndroid Build Coastguard Worker {"syncshaders", RADV_DEBUG_SYNC_SHADERS},
42*61046927SAndroid Build Coastguard Worker {"preoptir", RADV_DEBUG_PREOPTIR},
43*61046927SAndroid Build Coastguard Worker {"nodynamicbounds", RADV_DEBUG_NO_DYNAMIC_BOUNDS},
44*61046927SAndroid Build Coastguard Worker {"info", RADV_DEBUG_INFO},
45*61046927SAndroid Build Coastguard Worker {"startup", RADV_DEBUG_STARTUP},
46*61046927SAndroid Build Coastguard Worker {"checkir", RADV_DEBUG_CHECKIR},
47*61046927SAndroid Build Coastguard Worker {"nobinning", RADV_DEBUG_NOBINNING},
48*61046927SAndroid Build Coastguard Worker {"nongg", RADV_DEBUG_NO_NGG},
49*61046927SAndroid Build Coastguard Worker {"metashaders", RADV_DEBUG_DUMP_META_SHADERS},
50*61046927SAndroid Build Coastguard Worker {"llvm", RADV_DEBUG_LLVM},
51*61046927SAndroid Build Coastguard Worker {"forcecompress", RADV_DEBUG_FORCE_COMPRESS},
52*61046927SAndroid Build Coastguard Worker {"hang", RADV_DEBUG_HANG},
53*61046927SAndroid Build Coastguard Worker {"img", RADV_DEBUG_IMG},
54*61046927SAndroid Build Coastguard Worker {"noumr", RADV_DEBUG_NO_UMR},
55*61046927SAndroid Build Coastguard Worker {"invariantgeom", RADV_DEBUG_INVARIANT_GEOM},
56*61046927SAndroid Build Coastguard Worker {"splitfma", RADV_DEBUG_SPLIT_FMA},
57*61046927SAndroid Build Coastguard Worker {"nodisplaydcc", RADV_DEBUG_NO_DISPLAY_DCC},
58*61046927SAndroid Build Coastguard Worker {"notccompatcmask", RADV_DEBUG_NO_TC_COMPAT_CMASK},
59*61046927SAndroid Build Coastguard Worker {"novrsflatshading", RADV_DEBUG_NO_VRS_FLAT_SHADING},
60*61046927SAndroid Build Coastguard Worker {"noatocdithering", RADV_DEBUG_NO_ATOC_DITHERING},
61*61046927SAndroid Build Coastguard Worker {"nonggc", RADV_DEBUG_NO_NGGC},
62*61046927SAndroid Build Coastguard Worker {"prologs", RADV_DEBUG_DUMP_PROLOGS},
63*61046927SAndroid Build Coastguard Worker {"nodma", RADV_DEBUG_NO_DMA_BLIT},
64*61046927SAndroid Build Coastguard Worker {"epilogs", RADV_DEBUG_DUMP_EPILOGS},
65*61046927SAndroid Build Coastguard Worker {"nofmask", RADV_DEBUG_NO_FMASK},
66*61046927SAndroid Build Coastguard Worker {"shadowregs", RADV_DEBUG_SHADOW_REGS},
67*61046927SAndroid Build Coastguard Worker {"extra_md", RADV_DEBUG_EXTRA_MD},
68*61046927SAndroid Build Coastguard Worker {"nogpl", RADV_DEBUG_NO_GPL},
69*61046927SAndroid Build Coastguard Worker {"videoarraypath", RADV_DEBUG_VIDEO_ARRAY_PATH},
70*61046927SAndroid Build Coastguard Worker {"nort", RADV_DEBUG_NO_RT},
71*61046927SAndroid Build Coastguard Worker {"nomeshshader", RADV_DEBUG_NO_MESH_SHADER},
72*61046927SAndroid Build Coastguard Worker {"nongg_gs", RADV_DEBUG_NO_NGG_GS},
73*61046927SAndroid Build Coastguard Worker {"noeso", RADV_DEBUG_NO_ESO},
74*61046927SAndroid Build Coastguard Worker {"psocachestats", RADV_DEBUG_PSO_CACHE_STATS},
75*61046927SAndroid Build Coastguard Worker {NULL, 0}};
76*61046927SAndroid Build Coastguard Worker
77*61046927SAndroid Build Coastguard Worker const char *
radv_get_debug_option_name(int id)78*61046927SAndroid Build Coastguard Worker radv_get_debug_option_name(int id)
79*61046927SAndroid Build Coastguard Worker {
80*61046927SAndroid Build Coastguard Worker assert(id < ARRAY_SIZE(radv_debug_options) - 1);
81*61046927SAndroid Build Coastguard Worker return radv_debug_options[id].string;
82*61046927SAndroid Build Coastguard Worker }
83*61046927SAndroid Build Coastguard Worker
84*61046927SAndroid Build Coastguard Worker static const struct debug_control radv_perftest_options[] = {{"localbos", RADV_PERFTEST_LOCAL_BOS},
85*61046927SAndroid Build Coastguard Worker {"dccmsaa", RADV_PERFTEST_DCC_MSAA},
86*61046927SAndroid Build Coastguard Worker {"bolist", RADV_PERFTEST_BO_LIST},
87*61046927SAndroid Build Coastguard Worker {"cswave32", RADV_PERFTEST_CS_WAVE_32},
88*61046927SAndroid Build Coastguard Worker {"pswave32", RADV_PERFTEST_PS_WAVE_32},
89*61046927SAndroid Build Coastguard Worker {"gewave32", RADV_PERFTEST_GE_WAVE_32},
90*61046927SAndroid Build Coastguard Worker {"nosam", RADV_PERFTEST_NO_SAM},
91*61046927SAndroid Build Coastguard Worker {"sam", RADV_PERFTEST_SAM},
92*61046927SAndroid Build Coastguard Worker {"nggc", RADV_PERFTEST_NGGC},
93*61046927SAndroid Build Coastguard Worker {"emulate_rt", RADV_PERFTEST_EMULATE_RT},
94*61046927SAndroid Build Coastguard Worker {"rtwave64", RADV_PERFTEST_RT_WAVE_64},
95*61046927SAndroid Build Coastguard Worker {"video_decode", RADV_PERFTEST_VIDEO_DECODE},
96*61046927SAndroid Build Coastguard Worker {"dmashaders", RADV_PERFTEST_DMA_SHADERS},
97*61046927SAndroid Build Coastguard Worker {"transfer_queue", RADV_PERFTEST_TRANSFER_QUEUE},
98*61046927SAndroid Build Coastguard Worker {"nircache", RADV_PERFTEST_NIR_CACHE},
99*61046927SAndroid Build Coastguard Worker {"rtwave32", RADV_PERFTEST_RT_WAVE_32},
100*61046927SAndroid Build Coastguard Worker {"video_encode", RADV_PERFTEST_VIDEO_ENCODE},
101*61046927SAndroid Build Coastguard Worker {NULL, 0}};
102*61046927SAndroid Build Coastguard Worker
103*61046927SAndroid Build Coastguard Worker const char *
radv_get_perftest_option_name(int id)104*61046927SAndroid Build Coastguard Worker radv_get_perftest_option_name(int id)
105*61046927SAndroid Build Coastguard Worker {
106*61046927SAndroid Build Coastguard Worker assert(id < ARRAY_SIZE(radv_perftest_options) - 1);
107*61046927SAndroid Build Coastguard Worker return radv_perftest_options[id].string;
108*61046927SAndroid Build Coastguard Worker }
109*61046927SAndroid Build Coastguard Worker
110*61046927SAndroid Build Coastguard Worker static const struct debug_control trace_options[] = {
111*61046927SAndroid Build Coastguard Worker {"rgp", RADV_TRACE_MODE_RGP},
112*61046927SAndroid Build Coastguard Worker {"rra", RADV_TRACE_MODE_RRA},
113*61046927SAndroid Build Coastguard Worker {"ctxroll", RADV_TRACE_MODE_CTX_ROLLS},
114*61046927SAndroid Build Coastguard Worker {NULL, 0},
115*61046927SAndroid Build Coastguard Worker };
116*61046927SAndroid Build Coastguard Worker
117*61046927SAndroid Build Coastguard Worker // clang-format off
118*61046927SAndroid Build Coastguard Worker static const driOptionDescription radv_dri_options[] = {
119*61046927SAndroid Build Coastguard Worker DRI_CONF_SECTION_PERFORMANCE
120*61046927SAndroid Build Coastguard Worker DRI_CONF_ADAPTIVE_SYNC(true)
121*61046927SAndroid Build Coastguard Worker DRI_CONF_VK_X11_OVERRIDE_MIN_IMAGE_COUNT(0)
122*61046927SAndroid Build Coastguard Worker DRI_CONF_VK_X11_STRICT_IMAGE_COUNT(false)
123*61046927SAndroid Build Coastguard Worker DRI_CONF_VK_X11_ENSURE_MIN_IMAGE_COUNT(false)
124*61046927SAndroid Build Coastguard Worker DRI_CONF_VK_KHR_PRESENT_WAIT(false)
125*61046927SAndroid Build Coastguard Worker DRI_CONF_VK_XWAYLAND_WAIT_READY(false)
126*61046927SAndroid Build Coastguard Worker DRI_CONF_RADV_REPORT_LLVM9_VERSION_STRING(false)
127*61046927SAndroid Build Coastguard Worker DRI_CONF_RADV_ENABLE_MRT_OUTPUT_NAN_FIXUP(false)
128*61046927SAndroid Build Coastguard Worker DRI_CONF_RADV_DISABLE_SHRINK_IMAGE_STORE(false)
129*61046927SAndroid Build Coastguard Worker DRI_CONF_RADV_NO_DYNAMIC_BOUNDS(false)
130*61046927SAndroid Build Coastguard Worker DRI_CONF_RADV_OVERRIDE_UNIFORM_OFFSET_ALIGNMENT(0)
131*61046927SAndroid Build Coastguard Worker DRI_CONF_RADV_CLEAR_LDS(false)
132*61046927SAndroid Build Coastguard Worker DRI_CONF_RADV_DISABLE_NGG_GS(false)
133*61046927SAndroid Build Coastguard Worker DRI_CONF_SECTION_END
134*61046927SAndroid Build Coastguard Worker
135*61046927SAndroid Build Coastguard Worker DRI_CONF_SECTION_DEBUG
136*61046927SAndroid Build Coastguard Worker DRI_CONF_OVERRIDE_VRAM_SIZE()
137*61046927SAndroid Build Coastguard Worker DRI_CONF_VK_WSI_FORCE_BGRA8_UNORM_FIRST(false)
138*61046927SAndroid Build Coastguard Worker DRI_CONF_VK_WSI_FORCE_SWAPCHAIN_TO_CURRENT_EXTENT(false)
139*61046927SAndroid Build Coastguard Worker DRI_CONF_VK_X11_IGNORE_SUBOPTIMAL(false)
140*61046927SAndroid Build Coastguard Worker DRI_CONF_VK_REQUIRE_ETC2(false)
141*61046927SAndroid Build Coastguard Worker DRI_CONF_VK_REQUIRE_ASTC(false)
142*61046927SAndroid Build Coastguard Worker DRI_CONF_RADV_ZERO_VRAM(false)
143*61046927SAndroid Build Coastguard Worker DRI_CONF_RADV_INVARIANT_GEOM(false)
144*61046927SAndroid Build Coastguard Worker DRI_CONF_RADV_SPLIT_FMA(false)
145*61046927SAndroid Build Coastguard Worker DRI_CONF_RADV_DISABLE_TC_COMPAT_HTILE_GENERAL(false)
146*61046927SAndroid Build Coastguard Worker DRI_CONF_RADV_DISABLE_DCC(false)
147*61046927SAndroid Build Coastguard Worker DRI_CONF_RADV_DISABLE_ANISO_SINGLE_LEVEL(false)
148*61046927SAndroid Build Coastguard Worker DRI_CONF_RADV_DISABLE_TRUNC_COORD(false)
149*61046927SAndroid Build Coastguard Worker DRI_CONF_RADV_DISABLE_SINKING_LOAD_INPUT_FS(false)
150*61046927SAndroid Build Coastguard Worker DRI_CONF_RADV_DISABLE_DEPTH_STORAGE(false)
151*61046927SAndroid Build Coastguard Worker DRI_CONF_RADV_DGC(false)
152*61046927SAndroid Build Coastguard Worker DRI_CONF_RADV_FLUSH_BEFORE_QUERY_COPY(false)
153*61046927SAndroid Build Coastguard Worker DRI_CONF_RADV_ENABLE_UNIFIED_HEAP_ON_APU(false)
154*61046927SAndroid Build Coastguard Worker DRI_CONF_RADV_TEX_NON_UNIFORM(false)
155*61046927SAndroid Build Coastguard Worker DRI_CONF_RADV_FLUSH_BEFORE_TIMESTAMP_WRITE(false)
156*61046927SAndroid Build Coastguard Worker DRI_CONF_RADV_RT_WAVE64(false)
157*61046927SAndroid Build Coastguard Worker DRI_CONF_RADV_LEGACY_SPARSE_BINDING(false)
158*61046927SAndroid Build Coastguard Worker DRI_CONF_RADV_FORCE_PSTATE_PEAK_GFX11_DGPU(false)
159*61046927SAndroid Build Coastguard Worker DRI_CONF_DUAL_COLOR_BLEND_BY_LOCATION(false)
160*61046927SAndroid Build Coastguard Worker DRI_CONF_RADV_OVERRIDE_GRAPHICS_SHADER_VERSION(0)
161*61046927SAndroid Build Coastguard Worker DRI_CONF_RADV_OVERRIDE_COMPUTE_SHADER_VERSION(0)
162*61046927SAndroid Build Coastguard Worker DRI_CONF_RADV_OVERRIDE_RAY_TRACING_SHADER_VERSION(0)
163*61046927SAndroid Build Coastguard Worker DRI_CONF_RADV_SSBO_NON_UNIFORM(false)
164*61046927SAndroid Build Coastguard Worker DRI_CONF_RADV_APP_LAYER()
165*61046927SAndroid Build Coastguard Worker DRI_CONF_SECTION_END
166*61046927SAndroid Build Coastguard Worker };
167*61046927SAndroid Build Coastguard Worker // clang-format on
168*61046927SAndroid Build Coastguard Worker
169*61046927SAndroid Build Coastguard Worker static void
radv_init_dri_options(struct radv_instance * instance)170*61046927SAndroid Build Coastguard Worker radv_init_dri_options(struct radv_instance *instance)
171*61046927SAndroid Build Coastguard Worker {
172*61046927SAndroid Build Coastguard Worker driParseOptionInfo(&instance->drirc.available_options, radv_dri_options, ARRAY_SIZE(radv_dri_options));
173*61046927SAndroid Build Coastguard Worker driParseConfigFiles(&instance->drirc.options, &instance->drirc.available_options, 0, "radv", NULL, NULL,
174*61046927SAndroid Build Coastguard Worker instance->vk.app_info.app_name, instance->vk.app_info.app_version,
175*61046927SAndroid Build Coastguard Worker instance->vk.app_info.engine_name, instance->vk.app_info.engine_version);
176*61046927SAndroid Build Coastguard Worker
177*61046927SAndroid Build Coastguard Worker instance->drirc.enable_mrt_output_nan_fixup =
178*61046927SAndroid Build Coastguard Worker driQueryOptionb(&instance->drirc.options, "radv_enable_mrt_output_nan_fixup");
179*61046927SAndroid Build Coastguard Worker
180*61046927SAndroid Build Coastguard Worker instance->drirc.disable_shrink_image_store =
181*61046927SAndroid Build Coastguard Worker driQueryOptionb(&instance->drirc.options, "radv_disable_shrink_image_store");
182*61046927SAndroid Build Coastguard Worker
183*61046927SAndroid Build Coastguard Worker instance->drirc.disable_tc_compat_htile_in_general =
184*61046927SAndroid Build Coastguard Worker driQueryOptionb(&instance->drirc.options, "radv_disable_tc_compat_htile_general");
185*61046927SAndroid Build Coastguard Worker
186*61046927SAndroid Build Coastguard Worker if (driQueryOptionb(&instance->drirc.options, "radv_no_dynamic_bounds"))
187*61046927SAndroid Build Coastguard Worker instance->debug_flags |= RADV_DEBUG_NO_DYNAMIC_BOUNDS;
188*61046927SAndroid Build Coastguard Worker
189*61046927SAndroid Build Coastguard Worker if (driQueryOptionb(&instance->drirc.options, "radv_invariant_geom"))
190*61046927SAndroid Build Coastguard Worker instance->debug_flags |= RADV_DEBUG_INVARIANT_GEOM;
191*61046927SAndroid Build Coastguard Worker
192*61046927SAndroid Build Coastguard Worker if (driQueryOptionb(&instance->drirc.options, "radv_split_fma"))
193*61046927SAndroid Build Coastguard Worker instance->debug_flags |= RADV_DEBUG_SPLIT_FMA;
194*61046927SAndroid Build Coastguard Worker
195*61046927SAndroid Build Coastguard Worker if (driQueryOptionb(&instance->drirc.options, "radv_disable_dcc"))
196*61046927SAndroid Build Coastguard Worker instance->debug_flags |= RADV_DEBUG_NO_DCC;
197*61046927SAndroid Build Coastguard Worker
198*61046927SAndroid Build Coastguard Worker if (driQueryOptionb(&instance->drirc.options, "radv_disable_ngg_gs"))
199*61046927SAndroid Build Coastguard Worker instance->debug_flags |= RADV_DEBUG_NO_NGG_GS;
200*61046927SAndroid Build Coastguard Worker
201*61046927SAndroid Build Coastguard Worker instance->drirc.clear_lds = driQueryOptionb(&instance->drirc.options, "radv_clear_lds");
202*61046927SAndroid Build Coastguard Worker
203*61046927SAndroid Build Coastguard Worker instance->drirc.zero_vram = driQueryOptionb(&instance->drirc.options, "radv_zero_vram");
204*61046927SAndroid Build Coastguard Worker
205*61046927SAndroid Build Coastguard Worker instance->drirc.disable_aniso_single_level =
206*61046927SAndroid Build Coastguard Worker driQueryOptionb(&instance->drirc.options, "radv_disable_aniso_single_level");
207*61046927SAndroid Build Coastguard Worker
208*61046927SAndroid Build Coastguard Worker instance->drirc.disable_trunc_coord = driQueryOptionb(&instance->drirc.options, "radv_disable_trunc_coord");
209*61046927SAndroid Build Coastguard Worker
210*61046927SAndroid Build Coastguard Worker instance->drirc.disable_sinking_load_input_fs =
211*61046927SAndroid Build Coastguard Worker driQueryOptionb(&instance->drirc.options, "radv_disable_sinking_load_input_fs");
212*61046927SAndroid Build Coastguard Worker
213*61046927SAndroid Build Coastguard Worker instance->drirc.disable_depth_storage = driQueryOptionb(&instance->drirc.options, "radv_disable_depth_storage");
214*61046927SAndroid Build Coastguard Worker
215*61046927SAndroid Build Coastguard Worker instance->drirc.flush_before_query_copy = driQueryOptionb(&instance->drirc.options, "radv_flush_before_query_copy");
216*61046927SAndroid Build Coastguard Worker
217*61046927SAndroid Build Coastguard Worker instance->drirc.enable_unified_heap_on_apu =
218*61046927SAndroid Build Coastguard Worker driQueryOptionb(&instance->drirc.options, "radv_enable_unified_heap_on_apu");
219*61046927SAndroid Build Coastguard Worker
220*61046927SAndroid Build Coastguard Worker instance->drirc.tex_non_uniform = driQueryOptionb(&instance->drirc.options, "radv_tex_non_uniform");
221*61046927SAndroid Build Coastguard Worker
222*61046927SAndroid Build Coastguard Worker instance->drirc.ssbo_non_uniform = driQueryOptionb(&instance->drirc.options, "radv_ssbo_non_uniform");
223*61046927SAndroid Build Coastguard Worker
224*61046927SAndroid Build Coastguard Worker instance->drirc.app_layer = driQueryOptionstr(&instance->drirc.options, "radv_app_layer");
225*61046927SAndroid Build Coastguard Worker
226*61046927SAndroid Build Coastguard Worker instance->drirc.flush_before_timestamp_write =
227*61046927SAndroid Build Coastguard Worker driQueryOptionb(&instance->drirc.options, "radv_flush_before_timestamp_write");
228*61046927SAndroid Build Coastguard Worker
229*61046927SAndroid Build Coastguard Worker instance->drirc.force_rt_wave64 = driQueryOptionb(&instance->drirc.options, "radv_rt_wave64");
230*61046927SAndroid Build Coastguard Worker
231*61046927SAndroid Build Coastguard Worker instance->drirc.dual_color_blend_by_location =
232*61046927SAndroid Build Coastguard Worker driQueryOptionb(&instance->drirc.options, "dual_color_blend_by_location");
233*61046927SAndroid Build Coastguard Worker
234*61046927SAndroid Build Coastguard Worker instance->drirc.legacy_sparse_binding = driQueryOptionb(&instance->drirc.options, "radv_legacy_sparse_binding");
235*61046927SAndroid Build Coastguard Worker
236*61046927SAndroid Build Coastguard Worker instance->drirc.force_pstate_peak_gfx11_dgpu =
237*61046927SAndroid Build Coastguard Worker driQueryOptionb(&instance->drirc.options, "radv_force_pstate_peak_gfx11_dgpu");
238*61046927SAndroid Build Coastguard Worker
239*61046927SAndroid Build Coastguard Worker instance->drirc.override_graphics_shader_version =
240*61046927SAndroid Build Coastguard Worker driQueryOptioni(&instance->drirc.options, "radv_override_graphics_shader_version");
241*61046927SAndroid Build Coastguard Worker instance->drirc.override_compute_shader_version =
242*61046927SAndroid Build Coastguard Worker driQueryOptioni(&instance->drirc.options, "radv_override_compute_shader_version");
243*61046927SAndroid Build Coastguard Worker instance->drirc.override_ray_tracing_shader_version =
244*61046927SAndroid Build Coastguard Worker driQueryOptioni(&instance->drirc.options, "radv_override_ray_tracing_shader_version");
245*61046927SAndroid Build Coastguard Worker
246*61046927SAndroid Build Coastguard Worker instance->drirc.enable_dgc = driQueryOptionb(&instance->drirc.options, "radv_dgc");
247*61046927SAndroid Build Coastguard Worker
248*61046927SAndroid Build Coastguard Worker instance->drirc.override_vram_size = driQueryOptioni(&instance->drirc.options, "override_vram_size");
249*61046927SAndroid Build Coastguard Worker
250*61046927SAndroid Build Coastguard Worker instance->drirc.enable_khr_present_wait = driQueryOptionb(&instance->drirc.options, "vk_khr_present_wait");
251*61046927SAndroid Build Coastguard Worker
252*61046927SAndroid Build Coastguard Worker instance->drirc.override_uniform_offset_alignment =
253*61046927SAndroid Build Coastguard Worker driQueryOptioni(&instance->drirc.options, "radv_override_uniform_offset_alignment");
254*61046927SAndroid Build Coastguard Worker
255*61046927SAndroid Build Coastguard Worker instance->drirc.report_llvm9_version_string =
256*61046927SAndroid Build Coastguard Worker driQueryOptionb(&instance->drirc.options, "radv_report_llvm9_version_string");
257*61046927SAndroid Build Coastguard Worker
258*61046927SAndroid Build Coastguard Worker instance->drirc.vk_require_etc2 = driQueryOptionb(&instance->drirc.options, "vk_require_etc2");
259*61046927SAndroid Build Coastguard Worker instance->drirc.vk_require_astc = driQueryOptionb(&instance->drirc.options, "vk_require_astc");
260*61046927SAndroid Build Coastguard Worker }
261*61046927SAndroid Build Coastguard Worker
262*61046927SAndroid Build Coastguard Worker static const struct vk_instance_extension_table radv_instance_extensions_supported = {
263*61046927SAndroid Build Coastguard Worker .KHR_device_group_creation = true,
264*61046927SAndroid Build Coastguard Worker .KHR_external_fence_capabilities = true,
265*61046927SAndroid Build Coastguard Worker .KHR_external_memory_capabilities = true,
266*61046927SAndroid Build Coastguard Worker .KHR_external_semaphore_capabilities = true,
267*61046927SAndroid Build Coastguard Worker .KHR_get_physical_device_properties2 = true,
268*61046927SAndroid Build Coastguard Worker .EXT_debug_report = true,
269*61046927SAndroid Build Coastguard Worker .EXT_debug_utils = true,
270*61046927SAndroid Build Coastguard Worker
271*61046927SAndroid Build Coastguard Worker #ifdef RADV_USE_WSI_PLATFORM
272*61046927SAndroid Build Coastguard Worker .KHR_get_surface_capabilities2 = true,
273*61046927SAndroid Build Coastguard Worker .KHR_surface = true,
274*61046927SAndroid Build Coastguard Worker .KHR_surface_protected_capabilities = true,
275*61046927SAndroid Build Coastguard Worker .EXT_surface_maintenance1 = true,
276*61046927SAndroid Build Coastguard Worker .EXT_swapchain_colorspace = true,
277*61046927SAndroid Build Coastguard Worker #endif
278*61046927SAndroid Build Coastguard Worker #ifdef VK_USE_PLATFORM_WAYLAND_KHR
279*61046927SAndroid Build Coastguard Worker .KHR_wayland_surface = true,
280*61046927SAndroid Build Coastguard Worker #endif
281*61046927SAndroid Build Coastguard Worker #ifdef VK_USE_PLATFORM_XCB_KHR
282*61046927SAndroid Build Coastguard Worker .KHR_xcb_surface = true,
283*61046927SAndroid Build Coastguard Worker #endif
284*61046927SAndroid Build Coastguard Worker #ifdef VK_USE_PLATFORM_XLIB_KHR
285*61046927SAndroid Build Coastguard Worker .KHR_xlib_surface = true,
286*61046927SAndroid Build Coastguard Worker #endif
287*61046927SAndroid Build Coastguard Worker #ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
288*61046927SAndroid Build Coastguard Worker .EXT_acquire_xlib_display = true,
289*61046927SAndroid Build Coastguard Worker #endif
290*61046927SAndroid Build Coastguard Worker #ifdef VK_USE_PLATFORM_DISPLAY_KHR
291*61046927SAndroid Build Coastguard Worker .KHR_display = true,
292*61046927SAndroid Build Coastguard Worker .KHR_get_display_properties2 = true,
293*61046927SAndroid Build Coastguard Worker .EXT_direct_mode_display = true,
294*61046927SAndroid Build Coastguard Worker .EXT_display_surface_counter = true,
295*61046927SAndroid Build Coastguard Worker .EXT_acquire_drm_display = true,
296*61046927SAndroid Build Coastguard Worker #endif
297*61046927SAndroid Build Coastguard Worker #ifndef VK_USE_PLATFORM_WIN32_KHR
298*61046927SAndroid Build Coastguard Worker .EXT_headless_surface = true,
299*61046927SAndroid Build Coastguard Worker #endif
300*61046927SAndroid Build Coastguard Worker };
301*61046927SAndroid Build Coastguard Worker
302*61046927SAndroid Build Coastguard Worker static void
radv_handle_legacy_sqtt_trigger(struct vk_instance * instance)303*61046927SAndroid Build Coastguard Worker radv_handle_legacy_sqtt_trigger(struct vk_instance *instance)
304*61046927SAndroid Build Coastguard Worker {
305*61046927SAndroid Build Coastguard Worker char *trigger_file = secure_getenv("RADV_THREAD_TRACE_TRIGGER");
306*61046927SAndroid Build Coastguard Worker if (trigger_file) {
307*61046927SAndroid Build Coastguard Worker instance->trace_trigger_file = trigger_file;
308*61046927SAndroid Build Coastguard Worker instance->trace_mode |= RADV_TRACE_MODE_RGP;
309*61046927SAndroid Build Coastguard Worker fprintf(stderr, "WARNING: RADV_THREAD_TRACE_TRIGGER is deprecated, please use MESA_VK_TRACE_TRIGGER instead.\n");
310*61046927SAndroid Build Coastguard Worker }
311*61046927SAndroid Build Coastguard Worker }
312*61046927SAndroid Build Coastguard Worker
313*61046927SAndroid Build Coastguard Worker static enum radeon_ctx_pstate
radv_parse_pstate(const char * str)314*61046927SAndroid Build Coastguard Worker radv_parse_pstate(const char* str)
315*61046927SAndroid Build Coastguard Worker {
316*61046927SAndroid Build Coastguard Worker if (!strcmp(str, "peak")) {
317*61046927SAndroid Build Coastguard Worker return RADEON_CTX_PSTATE_PEAK;
318*61046927SAndroid Build Coastguard Worker } else if (!strcmp(str, "standard")) {
319*61046927SAndroid Build Coastguard Worker return RADEON_CTX_PSTATE_STANDARD;
320*61046927SAndroid Build Coastguard Worker } else if (!strcmp(str, "min_sclk")) {
321*61046927SAndroid Build Coastguard Worker return RADEON_CTX_PSTATE_MIN_SCLK;
322*61046927SAndroid Build Coastguard Worker } else if (!strcmp(str, "min_mclk")) {
323*61046927SAndroid Build Coastguard Worker return RADEON_CTX_PSTATE_MIN_MCLK;
324*61046927SAndroid Build Coastguard Worker } else {
325*61046927SAndroid Build Coastguard Worker return RADEON_CTX_PSTATE_NONE;
326*61046927SAndroid Build Coastguard Worker }
327*61046927SAndroid Build Coastguard Worker }
328*61046927SAndroid Build Coastguard Worker
329*61046927SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL
radv_CreateInstance(const VkInstanceCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkInstance * pInstance)330*61046927SAndroid Build Coastguard Worker radv_CreateInstance(const VkInstanceCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator,
331*61046927SAndroid Build Coastguard Worker VkInstance *pInstance)
332*61046927SAndroid Build Coastguard Worker {
333*61046927SAndroid Build Coastguard Worker struct radv_instance *instance;
334*61046927SAndroid Build Coastguard Worker VkResult result;
335*61046927SAndroid Build Coastguard Worker
336*61046927SAndroid Build Coastguard Worker if (!pAllocator)
337*61046927SAndroid Build Coastguard Worker pAllocator = vk_default_allocator();
338*61046927SAndroid Build Coastguard Worker
339*61046927SAndroid Build Coastguard Worker instance = vk_zalloc(pAllocator, sizeof(*instance), 8, VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE);
340*61046927SAndroid Build Coastguard Worker if (!instance)
341*61046927SAndroid Build Coastguard Worker return vk_error(NULL, VK_ERROR_OUT_OF_HOST_MEMORY);
342*61046927SAndroid Build Coastguard Worker
343*61046927SAndroid Build Coastguard Worker struct vk_instance_dispatch_table dispatch_table;
344*61046927SAndroid Build Coastguard Worker vk_instance_dispatch_table_from_entrypoints(&dispatch_table, &radv_instance_entrypoints, true);
345*61046927SAndroid Build Coastguard Worker vk_instance_dispatch_table_from_entrypoints(&dispatch_table, &wsi_instance_entrypoints, false);
346*61046927SAndroid Build Coastguard Worker
347*61046927SAndroid Build Coastguard Worker result =
348*61046927SAndroid Build Coastguard Worker vk_instance_init(&instance->vk, &radv_instance_extensions_supported, &dispatch_table, pCreateInfo, pAllocator);
349*61046927SAndroid Build Coastguard Worker if (result != VK_SUCCESS) {
350*61046927SAndroid Build Coastguard Worker vk_free(pAllocator, instance);
351*61046927SAndroid Build Coastguard Worker return vk_error(NULL, result);
352*61046927SAndroid Build Coastguard Worker }
353*61046927SAndroid Build Coastguard Worker
354*61046927SAndroid Build Coastguard Worker vk_instance_add_driver_trace_modes(&instance->vk, trace_options);
355*61046927SAndroid Build Coastguard Worker radv_handle_legacy_sqtt_trigger(&instance->vk);
356*61046927SAndroid Build Coastguard Worker
357*61046927SAndroid Build Coastguard Worker simple_mtx_init(&instance->shader_dump_mtx, mtx_plain);
358*61046927SAndroid Build Coastguard Worker
359*61046927SAndroid Build Coastguard Worker instance->debug_flags = parse_debug_string(getenv("RADV_DEBUG"), radv_debug_options);
360*61046927SAndroid Build Coastguard Worker instance->perftest_flags = parse_debug_string(getenv("RADV_PERFTEST"), radv_perftest_options);
361*61046927SAndroid Build Coastguard Worker instance->profile_pstate = radv_parse_pstate(debug_get_option("RADV_PROFILE_PSTATE", "peak"));
362*61046927SAndroid Build Coastguard Worker
363*61046927SAndroid Build Coastguard Worker /* When RADV_FORCE_FAMILY is set, the driver creates a null
364*61046927SAndroid Build Coastguard Worker * device that allows to test the compiler without having an
365*61046927SAndroid Build Coastguard Worker * AMDGPU instance.
366*61046927SAndroid Build Coastguard Worker */
367*61046927SAndroid Build Coastguard Worker if (getenv("RADV_FORCE_FAMILY"))
368*61046927SAndroid Build Coastguard Worker instance->vk.physical_devices.enumerate = create_null_physical_device;
369*61046927SAndroid Build Coastguard Worker else
370*61046927SAndroid Build Coastguard Worker instance->vk.physical_devices.try_create_for_drm = create_drm_physical_device;
371*61046927SAndroid Build Coastguard Worker
372*61046927SAndroid Build Coastguard Worker instance->vk.physical_devices.destroy = radv_physical_device_destroy;
373*61046927SAndroid Build Coastguard Worker
374*61046927SAndroid Build Coastguard Worker if (instance->debug_flags & RADV_DEBUG_STARTUP)
375*61046927SAndroid Build Coastguard Worker fprintf(stderr, "radv: info: Created an instance.\n");
376*61046927SAndroid Build Coastguard Worker
377*61046927SAndroid Build Coastguard Worker VG(VALGRIND_CREATE_MEMPOOL(instance, 0, false));
378*61046927SAndroid Build Coastguard Worker
379*61046927SAndroid Build Coastguard Worker radv_init_dri_options(instance);
380*61046927SAndroid Build Coastguard Worker
381*61046927SAndroid Build Coastguard Worker *pInstance = radv_instance_to_handle(instance);
382*61046927SAndroid Build Coastguard Worker
383*61046927SAndroid Build Coastguard Worker return VK_SUCCESS;
384*61046927SAndroid Build Coastguard Worker }
385*61046927SAndroid Build Coastguard Worker
386*61046927SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL
radv_DestroyInstance(VkInstance _instance,const VkAllocationCallbacks * pAllocator)387*61046927SAndroid Build Coastguard Worker radv_DestroyInstance(VkInstance _instance, const VkAllocationCallbacks *pAllocator)
388*61046927SAndroid Build Coastguard Worker {
389*61046927SAndroid Build Coastguard Worker VK_FROM_HANDLE(radv_instance, instance, _instance);
390*61046927SAndroid Build Coastguard Worker
391*61046927SAndroid Build Coastguard Worker if (!instance)
392*61046927SAndroid Build Coastguard Worker return;
393*61046927SAndroid Build Coastguard Worker
394*61046927SAndroid Build Coastguard Worker VG(VALGRIND_DESTROY_MEMPOOL(instance));
395*61046927SAndroid Build Coastguard Worker
396*61046927SAndroid Build Coastguard Worker simple_mtx_destroy(&instance->shader_dump_mtx);
397*61046927SAndroid Build Coastguard Worker
398*61046927SAndroid Build Coastguard Worker driDestroyOptionCache(&instance->drirc.options);
399*61046927SAndroid Build Coastguard Worker driDestroyOptionInfo(&instance->drirc.available_options);
400*61046927SAndroid Build Coastguard Worker
401*61046927SAndroid Build Coastguard Worker vk_instance_finish(&instance->vk);
402*61046927SAndroid Build Coastguard Worker vk_free(&instance->vk.alloc, instance);
403*61046927SAndroid Build Coastguard Worker }
404*61046927SAndroid Build Coastguard Worker
405*61046927SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL
radv_EnumerateInstanceExtensionProperties(const char * pLayerName,uint32_t * pPropertyCount,VkExtensionProperties * pProperties)406*61046927SAndroid Build Coastguard Worker radv_EnumerateInstanceExtensionProperties(const char *pLayerName, uint32_t *pPropertyCount,
407*61046927SAndroid Build Coastguard Worker VkExtensionProperties *pProperties)
408*61046927SAndroid Build Coastguard Worker {
409*61046927SAndroid Build Coastguard Worker if (pLayerName)
410*61046927SAndroid Build Coastguard Worker return vk_error(NULL, VK_ERROR_LAYER_NOT_PRESENT);
411*61046927SAndroid Build Coastguard Worker
412*61046927SAndroid Build Coastguard Worker return vk_enumerate_instance_extension_properties(&radv_instance_extensions_supported, pPropertyCount, pProperties);
413*61046927SAndroid Build Coastguard Worker }
414*61046927SAndroid Build Coastguard Worker
415*61046927SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL
radv_EnumerateInstanceVersion(uint32_t * pApiVersion)416*61046927SAndroid Build Coastguard Worker radv_EnumerateInstanceVersion(uint32_t *pApiVersion)
417*61046927SAndroid Build Coastguard Worker {
418*61046927SAndroid Build Coastguard Worker *pApiVersion = RADV_API_VERSION;
419*61046927SAndroid Build Coastguard Worker return VK_SUCCESS;
420*61046927SAndroid Build Coastguard Worker }
421*61046927SAndroid Build Coastguard Worker
422*61046927SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL
radv_EnumerateInstanceLayerProperties(uint32_t * pPropertyCount,VkLayerProperties * pProperties)423*61046927SAndroid Build Coastguard Worker radv_EnumerateInstanceLayerProperties(uint32_t *pPropertyCount, VkLayerProperties *pProperties)
424*61046927SAndroid Build Coastguard Worker {
425*61046927SAndroid Build Coastguard Worker if (pProperties == NULL) {
426*61046927SAndroid Build Coastguard Worker *pPropertyCount = 0;
427*61046927SAndroid Build Coastguard Worker return VK_SUCCESS;
428*61046927SAndroid Build Coastguard Worker }
429*61046927SAndroid Build Coastguard Worker
430*61046927SAndroid Build Coastguard Worker /* None supported at this time */
431*61046927SAndroid Build Coastguard Worker return vk_error(NULL, VK_ERROR_LAYER_NOT_PRESENT);
432*61046927SAndroid Build Coastguard Worker }
433*61046927SAndroid Build Coastguard Worker
434*61046927SAndroid Build Coastguard Worker VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL
radv_GetInstanceProcAddr(VkInstance _instance,const char * pName)435*61046927SAndroid Build Coastguard Worker radv_GetInstanceProcAddr(VkInstance _instance, const char *pName)
436*61046927SAndroid Build Coastguard Worker {
437*61046927SAndroid Build Coastguard Worker VK_FROM_HANDLE(vk_instance, instance, _instance);
438*61046927SAndroid Build Coastguard Worker return vk_instance_get_proc_addr(instance, &radv_instance_entrypoints, pName);
439*61046927SAndroid Build Coastguard Worker }
440*61046927SAndroid Build Coastguard Worker
441*61046927SAndroid Build Coastguard Worker /* Windows will use a dll definition file to avoid build errors. */
442*61046927SAndroid Build Coastguard Worker #ifdef _WIN32
443*61046927SAndroid Build Coastguard Worker #undef PUBLIC
444*61046927SAndroid Build Coastguard Worker #define PUBLIC
445*61046927SAndroid Build Coastguard Worker #endif
446*61046927SAndroid Build Coastguard Worker
447*61046927SAndroid Build Coastguard Worker /* The loader wants us to expose a second GetInstanceProcAddr function
448*61046927SAndroid Build Coastguard Worker * to work around certain LD_PRELOAD issues seen in apps.
449*61046927SAndroid Build Coastguard Worker */
450*61046927SAndroid Build Coastguard Worker PUBLIC
451*61046927SAndroid Build Coastguard Worker VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL
vk_icdGetInstanceProcAddr(VkInstance instance,const char * pName)452*61046927SAndroid Build Coastguard Worker vk_icdGetInstanceProcAddr(VkInstance instance, const char *pName)
453*61046927SAndroid Build Coastguard Worker {
454*61046927SAndroid Build Coastguard Worker return radv_GetInstanceProcAddr(instance, pName);
455*61046927SAndroid Build Coastguard Worker }
456