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