1*bbecb9d1SAndroid Build Coastguard Worker /*
2*bbecb9d1SAndroid Build Coastguard Worker * Copyright 2020 Google LLC
3*bbecb9d1SAndroid Build Coastguard Worker * SPDX-License-Identifier: MIT
4*bbecb9d1SAndroid Build Coastguard Worker */
5*bbecb9d1SAndroid Build Coastguard Worker
6*bbecb9d1SAndroid Build Coastguard Worker #include "vkr_common.h"
7*bbecb9d1SAndroid Build Coastguard Worker
8*bbecb9d1SAndroid Build Coastguard Worker #include "util/u_debug.h"
9*bbecb9d1SAndroid Build Coastguard Worker #include "venus-protocol/vn_protocol_renderer_info.h"
10*bbecb9d1SAndroid Build Coastguard Worker #include "virglrenderer_hw.h"
11*bbecb9d1SAndroid Build Coastguard Worker
12*bbecb9d1SAndroid Build Coastguard Worker static const struct debug_named_value vkr_debug_options[] = {
13*bbecb9d1SAndroid Build Coastguard Worker { "validate", VKR_DEBUG_VALIDATE, "Force enabling the validation layer" },
14*bbecb9d1SAndroid Build Coastguard Worker DEBUG_NAMED_VALUE_END
15*bbecb9d1SAndroid Build Coastguard Worker };
16*bbecb9d1SAndroid Build Coastguard Worker
17*bbecb9d1SAndroid Build Coastguard Worker uint32_t vkr_renderer_flags;
18*bbecb9d1SAndroid Build Coastguard Worker uint32_t vkr_debug_flags;
19*bbecb9d1SAndroid Build Coastguard Worker
20*bbecb9d1SAndroid Build Coastguard Worker size_t
vkr_get_capset(void * capset)21*bbecb9d1SAndroid Build Coastguard Worker vkr_get_capset(void *capset)
22*bbecb9d1SAndroid Build Coastguard Worker {
23*bbecb9d1SAndroid Build Coastguard Worker struct virgl_renderer_capset_venus *c = capset;
24*bbecb9d1SAndroid Build Coastguard Worker if (c) {
25*bbecb9d1SAndroid Build Coastguard Worker memset(c, 0, sizeof(*c));
26*bbecb9d1SAndroid Build Coastguard Worker c->wire_format_version = vn_info_wire_format_version();
27*bbecb9d1SAndroid Build Coastguard Worker c->vk_xml_version = vn_info_vk_xml_version();
28*bbecb9d1SAndroid Build Coastguard Worker c->vk_ext_command_serialization_spec_version =
29*bbecb9d1SAndroid Build Coastguard Worker vkr_extension_get_spec_version("VK_EXT_command_serialization");
30*bbecb9d1SAndroid Build Coastguard Worker c->vk_mesa_venus_protocol_spec_version =
31*bbecb9d1SAndroid Build Coastguard Worker vkr_extension_get_spec_version("VK_MESA_venus_protocol");
32*bbecb9d1SAndroid Build Coastguard Worker /* After https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/688,
33*bbecb9d1SAndroid Build Coastguard Worker * this flag is used to indicate render server config, and will be needed until drm
34*bbecb9d1SAndroid Build Coastguard Worker * virtio-gpu blob mem gets fixed to attach_resource before resource_map.
35*bbecb9d1SAndroid Build Coastguard Worker */
36*bbecb9d1SAndroid Build Coastguard Worker c->supports_blob_id_0 = (bool)(vkr_renderer_flags & VKR_RENDERER_RENDER_SERVER);
37*bbecb9d1SAndroid Build Coastguard Worker
38*bbecb9d1SAndroid Build Coastguard Worker uint32_t ext_mask[VN_INFO_EXTENSION_MAX_NUMBER / 32 + 1] = { 0 };
39*bbecb9d1SAndroid Build Coastguard Worker vn_info_extension_mask_init(ext_mask);
40*bbecb9d1SAndroid Build Coastguard Worker
41*bbecb9d1SAndroid Build Coastguard Worker static_assert(sizeof(ext_mask) <= sizeof(c->vk_extension_mask1),
42*bbecb9d1SAndroid Build Coastguard Worker "Time to extend venus capset with vk_extension_mask2");
43*bbecb9d1SAndroid Build Coastguard Worker memcpy(c->vk_extension_mask1, ext_mask, sizeof(ext_mask));
44*bbecb9d1SAndroid Build Coastguard Worker
45*bbecb9d1SAndroid Build Coastguard Worker /* set bit 0 to enable the extension mask(s) */
46*bbecb9d1SAndroid Build Coastguard Worker assert(!(c->vk_extension_mask1[0] & 0x1u));
47*bbecb9d1SAndroid Build Coastguard Worker c->vk_extension_mask1[0] |= 0x1u;
48*bbecb9d1SAndroid Build Coastguard Worker
49*bbecb9d1SAndroid Build Coastguard Worker c->allow_vk_wait_syncs = 1;
50*bbecb9d1SAndroid Build Coastguard Worker c->supports_multiple_timelines = 1;
51*bbecb9d1SAndroid Build Coastguard Worker }
52*bbecb9d1SAndroid Build Coastguard Worker
53*bbecb9d1SAndroid Build Coastguard Worker return sizeof(*c);
54*bbecb9d1SAndroid Build Coastguard Worker }
55*bbecb9d1SAndroid Build Coastguard Worker
56*bbecb9d1SAndroid Build Coastguard Worker int
vkr_renderer_init(uint32_t flags)57*bbecb9d1SAndroid Build Coastguard Worker vkr_renderer_init(uint32_t flags)
58*bbecb9d1SAndroid Build Coastguard Worker {
59*bbecb9d1SAndroid Build Coastguard Worker if ((vkr_renderer_flags & VKR_RENDERER_ASYNC_FENCE_CB) &&
60*bbecb9d1SAndroid Build Coastguard Worker !(vkr_renderer_flags & VKR_RENDERER_THREAD_SYNC))
61*bbecb9d1SAndroid Build Coastguard Worker return -EINVAL;
62*bbecb9d1SAndroid Build Coastguard Worker
63*bbecb9d1SAndroid Build Coastguard Worker vkr_renderer_flags = flags;
64*bbecb9d1SAndroid Build Coastguard Worker vkr_debug_flags = debug_get_flags_option("VKR_DEBUG", vkr_debug_options, 0);
65*bbecb9d1SAndroid Build Coastguard Worker
66*bbecb9d1SAndroid Build Coastguard Worker return 0;
67*bbecb9d1SAndroid Build Coastguard Worker }
68*bbecb9d1SAndroid Build Coastguard Worker
69*bbecb9d1SAndroid Build Coastguard Worker void
vkr_renderer_fini(void)70*bbecb9d1SAndroid Build Coastguard Worker vkr_renderer_fini(void)
71*bbecb9d1SAndroid Build Coastguard Worker {
72*bbecb9d1SAndroid Build Coastguard Worker vkr_renderer_flags = 0;
73*bbecb9d1SAndroid Build Coastguard Worker vkr_debug_flags = 0;
74*bbecb9d1SAndroid Build Coastguard Worker }
75*bbecb9d1SAndroid Build Coastguard Worker
76*bbecb9d1SAndroid Build Coastguard Worker void
vkr_renderer_reset(void)77*bbecb9d1SAndroid Build Coastguard Worker vkr_renderer_reset(void)
78*bbecb9d1SAndroid Build Coastguard Worker {
79*bbecb9d1SAndroid Build Coastguard Worker }
80