Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mesa
Path: blob/21.2-virgl/src/glx/dri3_priv.h
4558 views
1
/*
2
* Copyright © 2013 Keith Packard
3
*
4
* Permission to use, copy, modify, distribute, and sell this software and its
5
* documentation for any purpose is hereby granted without fee, provided that
6
* the above copyright notice appear in all copies and that both that copyright
7
* notice and this permission notice appear in supporting documentation, and
8
* that the name of the copyright holders not be used in advertising or
9
* publicity pertaining to distribution of the software without specific,
10
* written prior permission. The copyright holders make no representations
11
* about the suitability of this software for any purpose. It is provided "as
12
* is" without express or implied warranty.
13
*
14
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
15
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
16
* EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
17
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
18
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
19
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
20
* OF THIS SOFTWARE.
21
*/
22
23
/* This file was derived from dri2_priv.h which carries the following
24
* copyright:
25
*
26
* Copyright © 2008 Red Hat, Inc.
27
*
28
* Permission is hereby granted, free of charge, to any person obtaining a
29
* copy of this software and associated documentation files (the "Soft-
30
* ware"), to deal in the Software without restriction, including without
31
* limitation the rights to use, copy, modify, merge, publish, distribute,
32
* and/or sell copies of the Software, and to permit persons to whom the
33
* Software is furnished to do so, provided that the above copyright
34
* notice(s) and this permission notice appear in all copies of the Soft-
35
* ware and that both the above copyright notice(s) and this permission
36
* notice appear in supporting documentation.
37
*
38
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
39
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-
40
* ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY
41
* RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN
42
* THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSE-
43
* QUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
44
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
45
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFOR-
46
* MANCE OF THIS SOFTWARE.
47
*
48
* Except as contained in this notice, the name of a copyright holder shall
49
* not be used in advertising or otherwise to promote the sale, use or
50
* other dealings in this Software without prior written authorization of
51
* the copyright holder.
52
*
53
* Authors:
54
* Kristian Høgsberg ([email protected])
55
*/
56
57
#include <xcb/xcb.h>
58
#include <xcb/dri3.h>
59
#include <xcb/present.h>
60
#include <xcb/sync.h>
61
62
#include "loader_dri3_helper.h"
63
64
/* From driconf.h, user exposed so should be stable */
65
#define DRI_CONF_VBLANK_NEVER 0
66
#define DRI_CONF_VBLANK_DEF_INTERVAL_0 1
67
#define DRI_CONF_VBLANK_DEF_INTERVAL_1 2
68
#define DRI_CONF_VBLANK_ALWAYS_SYNC 3
69
70
struct dri3_display
71
{
72
__GLXDRIdisplay base;
73
74
const __DRIextension **loader_extensions;
75
76
/* DRI3 bits */
77
int dri3Major;
78
int dri3Minor;
79
80
/* Present bits */
81
int hasPresent;
82
int presentMajor;
83
int presentMinor;
84
};
85
86
struct dri3_screen {
87
struct glx_screen base;
88
89
__DRIscreen *driScreen;
90
__GLXDRIscreen vtable;
91
92
/* DRI screen is created for display GPU in case of prime.
93
* This screen is used to allocate linear_buffer from
94
* display GPU space in dri3_alloc_render_buffer() function.
95
*/
96
__DRIscreen *driScreenDisplayGPU;
97
98
const __DRIimageExtension *image;
99
const __DRIimageDriverExtension *image_driver;
100
const __DRIcoreExtension *core;
101
const __DRI2flushExtension *f;
102
const __DRI2configQueryExtension *config;
103
const __DRItexBufferExtension *texBuffer;
104
const __DRI2rendererQueryExtension *rendererQuery;
105
const __DRI2interopExtension *interop;
106
const __DRIconfig **driver_configs;
107
108
void *driver;
109
int fd;
110
bool is_different_gpu;
111
112
/* fd for display GPU in case of prime */
113
int fd_display_gpu;
114
115
int show_fps_interval;
116
117
struct loader_dri3_extensions loader_dri3_ext;
118
};
119
120
struct dri3_context
121
{
122
struct glx_context base;
123
__DRIcontext *driContext;
124
};
125
126
struct dri3_drawable {
127
__GLXDRIdrawable base;
128
struct loader_dri3_drawable loader_drawable;
129
130
/* LIBGL_SHOW_FPS support */
131
uint64_t previous_ust;
132
unsigned frames;
133
};
134
135
136
_X_HIDDEN int
137
dri3_query_renderer_integer(struct glx_screen *base, int attribute,
138
unsigned int *value);
139
140
_X_HIDDEN int
141
dri3_query_renderer_string(struct glx_screen *base, int attribute,
142
const char **value);
143
144
_X_HIDDEN int
145
dri3_interop_query_device_info(struct glx_context *ctx,
146
struct mesa_glinterop_device_info *out);
147
148
_X_HIDDEN int
149
dri3_interop_export_object(struct glx_context *ctx,
150
struct mesa_glinterop_export_in *in,
151
struct mesa_glinterop_export_out *out);
152
153