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 #ifndef VKR_DEVICE_H
7*bbecb9d1SAndroid Build Coastguard Worker #define VKR_DEVICE_H
8*bbecb9d1SAndroid Build Coastguard Worker
9*bbecb9d1SAndroid Build Coastguard Worker #include "vkr_common.h"
10*bbecb9d1SAndroid Build Coastguard Worker
11*bbecb9d1SAndroid Build Coastguard Worker #include "venus-protocol/vn_protocol_renderer_util.h"
12*bbecb9d1SAndroid Build Coastguard Worker
13*bbecb9d1SAndroid Build Coastguard Worker #include "vkr_context.h"
14*bbecb9d1SAndroid Build Coastguard Worker
15*bbecb9d1SAndroid Build Coastguard Worker struct vkr_device {
16*bbecb9d1SAndroid Build Coastguard Worker struct vkr_object base;
17*bbecb9d1SAndroid Build Coastguard Worker
18*bbecb9d1SAndroid Build Coastguard Worker struct vkr_physical_device *physical_device;
19*bbecb9d1SAndroid Build Coastguard Worker
20*bbecb9d1SAndroid Build Coastguard Worker struct vn_device_proc_table proc_table;
21*bbecb9d1SAndroid Build Coastguard Worker
22*bbecb9d1SAndroid Build Coastguard Worker struct list_head queues;
23*bbecb9d1SAndroid Build Coastguard Worker
24*bbecb9d1SAndroid Build Coastguard Worker mtx_t free_sync_mutex;
25*bbecb9d1SAndroid Build Coastguard Worker struct list_head free_syncs;
26*bbecb9d1SAndroid Build Coastguard Worker
27*bbecb9d1SAndroid Build Coastguard Worker struct list_head objects;
28*bbecb9d1SAndroid Build Coastguard Worker };
29*bbecb9d1SAndroid Build Coastguard Worker VKR_DEFINE_OBJECT_CAST(device, VK_OBJECT_TYPE_DEVICE, VkDevice)
30*bbecb9d1SAndroid Build Coastguard Worker
31*bbecb9d1SAndroid Build Coastguard Worker void
32*bbecb9d1SAndroid Build Coastguard Worker vkr_context_init_device_dispatch(struct vkr_context *ctx);
33*bbecb9d1SAndroid Build Coastguard Worker
34*bbecb9d1SAndroid Build Coastguard Worker void
35*bbecb9d1SAndroid Build Coastguard Worker vkr_device_destroy(struct vkr_context *ctx, struct vkr_device *dev);
36*bbecb9d1SAndroid Build Coastguard Worker
37*bbecb9d1SAndroid Build Coastguard Worker static inline bool
vkr_device_should_track_object(const struct vkr_object * obj)38*bbecb9d1SAndroid Build Coastguard Worker vkr_device_should_track_object(const struct vkr_object *obj)
39*bbecb9d1SAndroid Build Coastguard Worker {
40*bbecb9d1SAndroid Build Coastguard Worker assert(vkr_is_recognized_object_type(obj->type));
41*bbecb9d1SAndroid Build Coastguard Worker
42*bbecb9d1SAndroid Build Coastguard Worker switch (obj->type) {
43*bbecb9d1SAndroid Build Coastguard Worker case VK_OBJECT_TYPE_INSTANCE: /* non-device objects */
44*bbecb9d1SAndroid Build Coastguard Worker case VK_OBJECT_TYPE_PHYSICAL_DEVICE: /* non-device objects */
45*bbecb9d1SAndroid Build Coastguard Worker case VK_OBJECT_TYPE_DEVICE: /* device itself */
46*bbecb9d1SAndroid Build Coastguard Worker case VK_OBJECT_TYPE_QUEUE: /* not tracked as device objects */
47*bbecb9d1SAndroid Build Coastguard Worker case VK_OBJECT_TYPE_COMMAND_BUFFER: /* pool objects */
48*bbecb9d1SAndroid Build Coastguard Worker case VK_OBJECT_TYPE_DESCRIPTOR_SET: /* pool objects */
49*bbecb9d1SAndroid Build Coastguard Worker return false;
50*bbecb9d1SAndroid Build Coastguard Worker default:
51*bbecb9d1SAndroid Build Coastguard Worker return true;
52*bbecb9d1SAndroid Build Coastguard Worker }
53*bbecb9d1SAndroid Build Coastguard Worker }
54*bbecb9d1SAndroid Build Coastguard Worker
55*bbecb9d1SAndroid Build Coastguard Worker static inline void
vkr_device_add_object(struct vkr_context * ctx,struct vkr_device * dev,struct vkr_object * obj)56*bbecb9d1SAndroid Build Coastguard Worker vkr_device_add_object(struct vkr_context *ctx,
57*bbecb9d1SAndroid Build Coastguard Worker struct vkr_device *dev,
58*bbecb9d1SAndroid Build Coastguard Worker struct vkr_object *obj)
59*bbecb9d1SAndroid Build Coastguard Worker {
60*bbecb9d1SAndroid Build Coastguard Worker vkr_context_add_object(ctx, obj);
61*bbecb9d1SAndroid Build Coastguard Worker
62*bbecb9d1SAndroid Build Coastguard Worker assert(vkr_device_should_track_object(obj));
63*bbecb9d1SAndroid Build Coastguard Worker list_add(&obj->track_head, &dev->objects);
64*bbecb9d1SAndroid Build Coastguard Worker }
65*bbecb9d1SAndroid Build Coastguard Worker
66*bbecb9d1SAndroid Build Coastguard Worker static inline void
vkr_device_remove_object(struct vkr_context * ctx,UNUSED struct vkr_device * dev,struct vkr_object * obj)67*bbecb9d1SAndroid Build Coastguard Worker vkr_device_remove_object(struct vkr_context *ctx,
68*bbecb9d1SAndroid Build Coastguard Worker UNUSED struct vkr_device *dev,
69*bbecb9d1SAndroid Build Coastguard Worker struct vkr_object *obj)
70*bbecb9d1SAndroid Build Coastguard Worker {
71*bbecb9d1SAndroid Build Coastguard Worker assert(vkr_device_should_track_object(obj));
72*bbecb9d1SAndroid Build Coastguard Worker list_del(&obj->track_head);
73*bbecb9d1SAndroid Build Coastguard Worker
74*bbecb9d1SAndroid Build Coastguard Worker /* this frees obj */
75*bbecb9d1SAndroid Build Coastguard Worker vkr_context_remove_object(ctx, obj);
76*bbecb9d1SAndroid Build Coastguard Worker }
77*bbecb9d1SAndroid Build Coastguard Worker
78*bbecb9d1SAndroid Build Coastguard Worker #endif /* VKR_DEVICE_H */
79