xref: /aosp_15_r20/external/virglrenderer/src/venus/vkr_device.h (revision bbecb9d118dfdb95f99bd754f8fa9be01f189df3)
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