xref: /aosp_15_r20/external/virglrenderer/src/proxy/proxy_context.h (revision bbecb9d118dfdb95f99bd754f8fa9be01f189df3)
1*bbecb9d1SAndroid Build Coastguard Worker /*
2*bbecb9d1SAndroid Build Coastguard Worker  * Copyright 2021 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 PROXY_CONTEXT_H
7*bbecb9d1SAndroid Build Coastguard Worker #define PROXY_CONTEXT_H
8*bbecb9d1SAndroid Build Coastguard Worker 
9*bbecb9d1SAndroid Build Coastguard Worker #include "proxy_common.h"
10*bbecb9d1SAndroid Build Coastguard Worker 
11*bbecb9d1SAndroid Build Coastguard Worker #include "c11/threads.h"
12*bbecb9d1SAndroid Build Coastguard Worker #include "virgl_context.h"
13*bbecb9d1SAndroid Build Coastguard Worker 
14*bbecb9d1SAndroid Build Coastguard Worker /* matches virtio-gpu */
15*bbecb9d1SAndroid Build Coastguard Worker #define PROXY_CONTEXT_TIMELINE_COUNT 64
16*bbecb9d1SAndroid Build Coastguard Worker 
17*bbecb9d1SAndroid Build Coastguard Worker static_assert(ATOMIC_INT_LOCK_FREE == 2, "proxy renderer requires lock-free atomic_uint");
18*bbecb9d1SAndroid Build Coastguard Worker 
19*bbecb9d1SAndroid Build Coastguard Worker struct proxy_timeline {
20*bbecb9d1SAndroid Build Coastguard Worker    uint32_t cur_seqno;
21*bbecb9d1SAndroid Build Coastguard Worker    uint32_t next_seqno;
22*bbecb9d1SAndroid Build Coastguard Worker    struct list_head fences;
23*bbecb9d1SAndroid Build Coastguard Worker 
24*bbecb9d1SAndroid Build Coastguard Worker    int cur_seqno_stall_count;
25*bbecb9d1SAndroid Build Coastguard Worker };
26*bbecb9d1SAndroid Build Coastguard Worker 
27*bbecb9d1SAndroid Build Coastguard Worker struct proxy_context {
28*bbecb9d1SAndroid Build Coastguard Worker    struct virgl_context base;
29*bbecb9d1SAndroid Build Coastguard Worker 
30*bbecb9d1SAndroid Build Coastguard Worker    struct proxy_client *client;
31*bbecb9d1SAndroid Build Coastguard Worker    struct proxy_socket socket;
32*bbecb9d1SAndroid Build Coastguard Worker 
33*bbecb9d1SAndroid Build Coastguard Worker    /* this tracks resources early attached in get_blob */
34*bbecb9d1SAndroid Build Coastguard Worker    struct hash_table *resource_table;
35*bbecb9d1SAndroid Build Coastguard Worker 
36*bbecb9d1SAndroid Build Coastguard Worker    /* this is shared with the render worker */
37*bbecb9d1SAndroid Build Coastguard Worker    struct {
38*bbecb9d1SAndroid Build Coastguard Worker       int fd;
39*bbecb9d1SAndroid Build Coastguard Worker       size_t size;
40*bbecb9d1SAndroid Build Coastguard Worker       void *ptr;
41*bbecb9d1SAndroid Build Coastguard Worker    } shmem;
42*bbecb9d1SAndroid Build Coastguard Worker 
43*bbecb9d1SAndroid Build Coastguard Worker    mtx_t timeline_mutex;
44*bbecb9d1SAndroid Build Coastguard Worker    struct proxy_timeline timelines[PROXY_CONTEXT_TIMELINE_COUNT];
45*bbecb9d1SAndroid Build Coastguard Worker    /* which timelines have fences */
46*bbecb9d1SAndroid Build Coastguard Worker    uint64_t timeline_busy_mask;
47*bbecb9d1SAndroid Build Coastguard Worker    /* this points a region of shmem updated by the render worker */
48*bbecb9d1SAndroid Build Coastguard Worker    const volatile atomic_uint *timeline_seqnos;
49*bbecb9d1SAndroid Build Coastguard Worker 
50*bbecb9d1SAndroid Build Coastguard Worker    mtx_t free_fences_mutex;
51*bbecb9d1SAndroid Build Coastguard Worker    struct list_head free_fences;
52*bbecb9d1SAndroid Build Coastguard Worker 
53*bbecb9d1SAndroid Build Coastguard Worker    struct {
54*bbecb9d1SAndroid Build Coastguard Worker       /* when VIRGL_RENDERER_THREAD_SYNC is set */
55*bbecb9d1SAndroid Build Coastguard Worker       int fence_eventfd;
56*bbecb9d1SAndroid Build Coastguard Worker 
57*bbecb9d1SAndroid Build Coastguard Worker       /* when VIRGL_RENDERER_ASYNC_FENCE_CB is also set */
58*bbecb9d1SAndroid Build Coastguard Worker       thrd_t thread;
59*bbecb9d1SAndroid Build Coastguard Worker       bool created;
60*bbecb9d1SAndroid Build Coastguard Worker       bool stop;
61*bbecb9d1SAndroid Build Coastguard Worker    } sync_thread;
62*bbecb9d1SAndroid Build Coastguard Worker };
63*bbecb9d1SAndroid Build Coastguard Worker 
64*bbecb9d1SAndroid Build Coastguard Worker #endif /* PROXY_CONTEXT_H */
65