Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mesa
Path: blob/21.2-virgl/src/gallium/drivers/vc4/vc4_screen.h
4570 views
1
/*
2
* Copyright © 2014 Broadcom
3
*
4
* Permission is hereby granted, free of charge, to any person obtaining a
5
* copy of this software and associated documentation files (the "Software"),
6
* to deal in the Software without restriction, including without limitation
7
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
8
* and/or sell copies of the Software, and to permit persons to whom the
9
* Software is furnished to do so, subject to the following conditions:
10
*
11
* The above copyright notice and this permission notice (including the next
12
* paragraph) shall be included in all copies or substantial portions of the
13
* Software.
14
*
15
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21
* IN THE SOFTWARE.
22
*/
23
24
#ifndef VC4_SCREEN_H
25
#define VC4_SCREEN_H
26
27
#include "pipe/p_screen.h"
28
#include "renderonly/renderonly.h"
29
#include "os/os_thread.h"
30
#include "frontend/drm_driver.h"
31
#include "util/list.h"
32
#include "util/slab.h"
33
34
#ifndef DRM_VC4_PARAM_SUPPORTS_ETC1
35
#define DRM_VC4_PARAM_SUPPORTS_ETC1 4
36
#endif
37
38
struct vc4_bo;
39
40
#define VC4_DEBUG_CL 0x0001
41
#define VC4_DEBUG_QPU 0x0002
42
#define VC4_DEBUG_QIR 0x0004
43
#define VC4_DEBUG_TGSI 0x0008
44
#define VC4_DEBUG_SHADERDB 0x0010
45
#define VC4_DEBUG_PERF 0x0020
46
#define VC4_DEBUG_NORAST 0x0040
47
#define VC4_DEBUG_ALWAYS_FLUSH 0x0080
48
#define VC4_DEBUG_ALWAYS_SYNC 0x0100
49
#define VC4_DEBUG_NIR 0x0200
50
#define VC4_DEBUG_DUMP 0x0400
51
#define VC4_DEBUG_SURFACE 0x0800
52
53
#define VC4_MAX_MIP_LEVELS 12
54
#define VC4_MAX_TEXTURE_SAMPLERS 16
55
56
struct vc4_simulator_file;
57
58
struct vc4_screen {
59
struct pipe_screen base;
60
struct renderonly *ro;
61
62
int fd;
63
64
int v3d_ver;
65
66
const char *name;
67
68
/** The last seqno we've completed a wait for.
69
*
70
* This lets us slightly optimize our waits by skipping wait syscalls
71
* if we know the job's already done.
72
*/
73
uint64_t finished_seqno;
74
75
struct slab_parent_pool transfer_pool;
76
77
struct vc4_bo_cache {
78
/** List of struct vc4_bo freed, by age. */
79
struct list_head time_list;
80
/** List of struct vc4_bo freed, per size, by age. */
81
struct list_head *size_list;
82
uint32_t size_list_size;
83
84
mtx_t lock;
85
86
uint32_t bo_size;
87
uint32_t bo_count;
88
} bo_cache;
89
90
struct hash_table *bo_handles;
91
mtx_t bo_handles_mutex;
92
93
uint32_t bo_size;
94
uint32_t bo_count;
95
bool has_control_flow;
96
bool has_etc1;
97
bool has_threaded_fs;
98
bool has_madvise;
99
bool has_tiling_ioctl;
100
bool has_perfmon_ioctl;
101
bool has_syncobj;
102
103
struct vc4_simulator_file *sim_file;
104
};
105
106
static inline struct vc4_screen *
107
vc4_screen(struct pipe_screen *screen)
108
{
109
return (struct vc4_screen *)screen;
110
}
111
112
struct pipe_screen *vc4_screen_create(int fd, struct renderonly *ro);
113
114
const void *
115
vc4_screen_get_compiler_options(struct pipe_screen *pscreen,
116
enum pipe_shader_ir ir,
117
enum pipe_shader_type shader);
118
119
extern uint32_t vc4_debug;
120
121
void
122
vc4_fence_screen_init(struct vc4_screen *screen);
123
124
struct vc4_fence *
125
vc4_fence_create(struct vc4_screen *screen, uint64_t seqno, int fd);
126
127
#endif /* VC4_SCREEN_H */
128
129