1b8e80941Smrg/*
2b8e80941Smrg * Copyright 2014, 2015 Red Hat.
3b8e80941Smrg *
4b8e80941Smrg * Permission is hereby granted, free of charge, to any person obtaining a
5b8e80941Smrg * copy of this software and associated documentation files (the "Software"),
6b8e80941Smrg * to deal in the Software without restriction, including without limitation
7b8e80941Smrg * on the rights to use, copy, modify, merge, publish, distribute, sub
8b8e80941Smrg * license, and/or sell copies of the Software, and to permit persons to whom
9b8e80941Smrg * the Software is furnished to do so, subject to the following conditions:
10b8e80941Smrg *
11b8e80941Smrg * The above copyright notice and this permission notice (including the next
12b8e80941Smrg * paragraph) shall be included in all copies or substantial portions of the
13b8e80941Smrg * Software.
14b8e80941Smrg *
15b8e80941Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16b8e80941Smrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17b8e80941Smrg * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
18b8e80941Smrg * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
19b8e80941Smrg * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
20b8e80941Smrg * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
21b8e80941Smrg * USE OR OTHER DEALINGS IN THE SOFTWARE.
22b8e80941Smrg */
23b8e80941Smrg#ifndef VIRGL_HW_H
24b8e80941Smrg#define VIRGL_HW_H
25b8e80941Smrg
26b8e80941Smrgstruct virgl_box {
27b8e80941Smrg	uint32_t x, y, z;
28b8e80941Smrg	uint32_t w, h, d;
29b8e80941Smrg};
30b8e80941Smrg
31b8e80941Smrg/* formats known by the HW device - based on gallium subset */
32b8e80941Smrgenum virgl_formats {
33b8e80941Smrg   VIRGL_FORMAT_B8G8R8A8_UNORM          = 1,
34b8e80941Smrg   VIRGL_FORMAT_B8G8R8X8_UNORM          = 2,
35b8e80941Smrg   VIRGL_FORMAT_A8R8G8B8_UNORM          = 3,
36b8e80941Smrg   VIRGL_FORMAT_X8R8G8B8_UNORM          = 4,
37b8e80941Smrg   VIRGL_FORMAT_B5G5R5A1_UNORM          = 5,
38b8e80941Smrg   VIRGL_FORMAT_B4G4R4A4_UNORM          = 6,
39b8e80941Smrg   VIRGL_FORMAT_B5G6R5_UNORM            = 7,
40b8e80941Smrg   VIRGL_FORMAT_R10G10B10A2_UNORM       = 8,
41b8e80941Smrg   VIRGL_FORMAT_L8_UNORM                = 9,    /**< ubyte luminance */
42b8e80941Smrg   VIRGL_FORMAT_A8_UNORM                = 10,   /**< ubyte alpha */
43b8e80941Smrg   VIRGL_FORMAT_L8A8_UNORM              = 12,   /**< ubyte alpha, luminance */
44b8e80941Smrg   VIRGL_FORMAT_L16_UNORM               = 13,   /**< ushort luminance */
45b8e80941Smrg
46b8e80941Smrg   VIRGL_FORMAT_Z16_UNORM               = 16,
47b8e80941Smrg   VIRGL_FORMAT_Z32_UNORM               = 17,
48b8e80941Smrg   VIRGL_FORMAT_Z32_FLOAT               = 18,
49b8e80941Smrg   VIRGL_FORMAT_Z24_UNORM_S8_UINT       = 19,
50b8e80941Smrg   VIRGL_FORMAT_S8_UINT_Z24_UNORM       = 20,
51b8e80941Smrg   VIRGL_FORMAT_Z24X8_UNORM             = 21,
52b8e80941Smrg   VIRGL_FORMAT_S8_UINT                 = 23,   /**< ubyte stencil */
53b8e80941Smrg
54b8e80941Smrg   VIRGL_FORMAT_R32_FLOAT               = 28,
55b8e80941Smrg   VIRGL_FORMAT_R32G32_FLOAT            = 29,
56b8e80941Smrg   VIRGL_FORMAT_R32G32B32_FLOAT         = 30,
57b8e80941Smrg   VIRGL_FORMAT_R32G32B32A32_FLOAT      = 31,
58b8e80941Smrg
59b8e80941Smrg   VIRGL_FORMAT_R16_UNORM               = 48,
60b8e80941Smrg   VIRGL_FORMAT_R16G16_UNORM            = 49,
61b8e80941Smrg
62b8e80941Smrg   VIRGL_FORMAT_R16G16B16A16_UNORM      = 51,
63b8e80941Smrg
64b8e80941Smrg   VIRGL_FORMAT_R16_SNORM               = 56,
65b8e80941Smrg   VIRGL_FORMAT_R16G16_SNORM            = 57,
66b8e80941Smrg   VIRGL_FORMAT_R16G16B16A16_SNORM      = 59,
67b8e80941Smrg
68b8e80941Smrg   VIRGL_FORMAT_R8_UNORM                = 64,
69b8e80941Smrg   VIRGL_FORMAT_R8G8_UNORM              = 65,
70b8e80941Smrg
71b8e80941Smrg   VIRGL_FORMAT_R8G8B8A8_UNORM          = 67,
72b8e80941Smrg
73b8e80941Smrg   VIRGL_FORMAT_R8_SNORM                = 74,
74b8e80941Smrg   VIRGL_FORMAT_R8G8_SNORM              = 75,
75b8e80941Smrg   VIRGL_FORMAT_R8G8B8_SNORM            = 76,
76b8e80941Smrg   VIRGL_FORMAT_R8G8B8A8_SNORM          = 77,
77b8e80941Smrg
78b8e80941Smrg   VIRGL_FORMAT_R16_FLOAT               = 91,
79b8e80941Smrg   VIRGL_FORMAT_R16G16_FLOAT            = 92,
80b8e80941Smrg   VIRGL_FORMAT_R16G16B16_FLOAT         = 93,
81b8e80941Smrg   VIRGL_FORMAT_R16G16B16A16_FLOAT      = 94,
82b8e80941Smrg
83b8e80941Smrg   VIRGL_FORMAT_L8_SRGB                 = 95,
84b8e80941Smrg   VIRGL_FORMAT_L8A8_SRGB               = 96,
85b8e80941Smrg   VIRGL_FORMAT_B8G8R8A8_SRGB           = 100,
86b8e80941Smrg   VIRGL_FORMAT_B8G8R8X8_SRGB           = 101,
87b8e80941Smrg   VIRGL_FORMAT_R8G8B8A8_SRGB           = 104,
88b8e80941Smrg
89b8e80941Smrg   /* compressed formats */
90b8e80941Smrg   VIRGL_FORMAT_DXT1_RGB                = 105,
91b8e80941Smrg   VIRGL_FORMAT_DXT1_RGBA               = 106,
92b8e80941Smrg   VIRGL_FORMAT_DXT3_RGBA               = 107,
93b8e80941Smrg   VIRGL_FORMAT_DXT5_RGBA               = 108,
94b8e80941Smrg
95b8e80941Smrg   /* sRGB, compressed */
96b8e80941Smrg   VIRGL_FORMAT_DXT1_SRGB               = 109,
97b8e80941Smrg   VIRGL_FORMAT_DXT1_SRGBA              = 110,
98b8e80941Smrg   VIRGL_FORMAT_DXT3_SRGBA              = 111,
99b8e80941Smrg   VIRGL_FORMAT_DXT5_SRGBA              = 112,
100b8e80941Smrg
101b8e80941Smrg   /* rgtc compressed */
102b8e80941Smrg   VIRGL_FORMAT_RGTC1_UNORM             = 113,
103b8e80941Smrg   VIRGL_FORMAT_RGTC1_SNORM             = 114,
104b8e80941Smrg   VIRGL_FORMAT_RGTC2_UNORM             = 115,
105b8e80941Smrg   VIRGL_FORMAT_RGTC2_SNORM             = 116,
106b8e80941Smrg
107b8e80941Smrg   VIRGL_FORMAT_A8B8G8R8_UNORM          = 121,
108b8e80941Smrg   VIRGL_FORMAT_B5G5R5X1_UNORM          = 122,
109b8e80941Smrg   VIRGL_FORMAT_R11G11B10_FLOAT         = 124,
110b8e80941Smrg   VIRGL_FORMAT_R9G9B9E5_FLOAT          = 125,
111b8e80941Smrg   VIRGL_FORMAT_Z32_FLOAT_S8X24_UINT    = 126,
112b8e80941Smrg
113b8e80941Smrg   VIRGL_FORMAT_B10G10R10A2_UNORM       = 131,
114b8e80941Smrg   VIRGL_FORMAT_R8G8B8X8_UNORM          = 134,
115b8e80941Smrg   VIRGL_FORMAT_B4G4R4X4_UNORM          = 135,
116b8e80941Smrg   VIRGL_FORMAT_X24S8_UINT              = 136,
117b8e80941Smrg   VIRGL_FORMAT_S8X24_UINT              = 137,
118b8e80941Smrg   VIRGL_FORMAT_B2G3R3_UNORM            = 139,
119b8e80941Smrg
120b8e80941Smrg   VIRGL_FORMAT_L16A16_UNORM            = 140,
121b8e80941Smrg   VIRGL_FORMAT_A16_UNORM               = 141,
122b8e80941Smrg
123b8e80941Smrg   VIRGL_FORMAT_A8_SNORM                = 147,
124b8e80941Smrg   VIRGL_FORMAT_L8_SNORM                = 148,
125b8e80941Smrg   VIRGL_FORMAT_L8A8_SNORM              = 149,
126b8e80941Smrg
127b8e80941Smrg   VIRGL_FORMAT_A16_SNORM               = 151,
128b8e80941Smrg   VIRGL_FORMAT_L16_SNORM               = 152,
129b8e80941Smrg   VIRGL_FORMAT_L16A16_SNORM            = 153,
130b8e80941Smrg
131b8e80941Smrg   VIRGL_FORMAT_A16_FLOAT               = 155,
132b8e80941Smrg   VIRGL_FORMAT_L16_FLOAT               = 156,
133b8e80941Smrg   VIRGL_FORMAT_L16A16_FLOAT            = 157,
134b8e80941Smrg
135b8e80941Smrg   VIRGL_FORMAT_A32_FLOAT               = 159,
136b8e80941Smrg   VIRGL_FORMAT_L32_FLOAT               = 160,
137b8e80941Smrg   VIRGL_FORMAT_L32A32_FLOAT            = 161,
138b8e80941Smrg
139b8e80941Smrg   VIRGL_FORMAT_R8_UINT                 = 177,
140b8e80941Smrg   VIRGL_FORMAT_R8G8_UINT               = 178,
141b8e80941Smrg   VIRGL_FORMAT_R8G8B8_UINT             = 179,
142b8e80941Smrg   VIRGL_FORMAT_R8G8B8A8_UINT           = 180,
143b8e80941Smrg
144b8e80941Smrg   VIRGL_FORMAT_R8_SINT                 = 181,
145b8e80941Smrg   VIRGL_FORMAT_R8G8_SINT               = 182,
146b8e80941Smrg   VIRGL_FORMAT_R8G8B8_SINT             = 183,
147b8e80941Smrg   VIRGL_FORMAT_R8G8B8A8_SINT           = 184,
148b8e80941Smrg
149b8e80941Smrg   VIRGL_FORMAT_R16_UINT                = 185,
150b8e80941Smrg   VIRGL_FORMAT_R16G16_UINT             = 186,
151b8e80941Smrg   VIRGL_FORMAT_R16G16B16_UINT          = 187,
152b8e80941Smrg   VIRGL_FORMAT_R16G16B16A16_UINT       = 188,
153b8e80941Smrg
154b8e80941Smrg   VIRGL_FORMAT_R16_SINT                = 189,
155b8e80941Smrg   VIRGL_FORMAT_R16G16_SINT             = 190,
156b8e80941Smrg   VIRGL_FORMAT_R16G16B16_SINT          = 191,
157b8e80941Smrg   VIRGL_FORMAT_R16G16B16A16_SINT       = 192,
158b8e80941Smrg   VIRGL_FORMAT_R32_UINT                = 193,
159b8e80941Smrg   VIRGL_FORMAT_R32G32_UINT             = 194,
160b8e80941Smrg   VIRGL_FORMAT_R32G32B32_UINT          = 195,
161b8e80941Smrg   VIRGL_FORMAT_R32G32B32A32_UINT       = 196,
162b8e80941Smrg
163b8e80941Smrg   VIRGL_FORMAT_R32_SINT                = 197,
164b8e80941Smrg   VIRGL_FORMAT_R32G32_SINT             = 198,
165b8e80941Smrg   VIRGL_FORMAT_R32G32B32_SINT          = 199,
166b8e80941Smrg   VIRGL_FORMAT_R32G32B32A32_SINT       = 200,
167b8e80941Smrg
168b8e80941Smrg   VIRGL_FORMAT_A8_UINT                 = 201,
169b8e80941Smrg   VIRGL_FORMAT_L8_UINT                 = 203,
170b8e80941Smrg   VIRGL_FORMAT_L8A8_UINT               = 204,
171b8e80941Smrg
172b8e80941Smrg   VIRGL_FORMAT_A8_SINT                 = 205,
173b8e80941Smrg   VIRGL_FORMAT_L8_SINT                 = 207,
174b8e80941Smrg   VIRGL_FORMAT_L8A8_SINT               = 208,
175b8e80941Smrg
176b8e80941Smrg   VIRGL_FORMAT_A16_UINT                = 209,
177b8e80941Smrg   VIRGL_FORMAT_L16_UINT                = 211,
178b8e80941Smrg   VIRGL_FORMAT_L16A16_UINT             = 212,
179b8e80941Smrg
180b8e80941Smrg   VIRGL_FORMAT_A16_SINT                = 213,
181b8e80941Smrg   VIRGL_FORMAT_L16_SINT                = 215,
182b8e80941Smrg   VIRGL_FORMAT_L16A16_SINT             = 216,
183b8e80941Smrg
184b8e80941Smrg   VIRGL_FORMAT_A32_UINT                = 217,
185b8e80941Smrg   VIRGL_FORMAT_L32_UINT                = 219,
186b8e80941Smrg   VIRGL_FORMAT_L32A32_UINT             = 220,
187b8e80941Smrg
188b8e80941Smrg   VIRGL_FORMAT_A32_SINT                = 221,
189b8e80941Smrg   VIRGL_FORMAT_L32_SINT                = 223,
190b8e80941Smrg   VIRGL_FORMAT_L32A32_SINT             = 224,
191b8e80941Smrg
192b8e80941Smrg   VIRGL_FORMAT_B10G10R10A2_UINT        = 225,
193b8e80941Smrg   VIRGL_FORMAT_R8G8B8X8_SNORM          = 229,
194b8e80941Smrg
195b8e80941Smrg   VIRGL_FORMAT_R8G8B8X8_SRGB           = 230,
196b8e80941Smrg
197b8e80941Smrg   VIRGL_FORMAT_R8G8B8X8_UINT           = 231,
198b8e80941Smrg   VIRGL_FORMAT_R8G8B8X8_SINT           = 232,
199b8e80941Smrg   VIRGL_FORMAT_B10G10R10X2_UNORM       = 233,
200b8e80941Smrg   VIRGL_FORMAT_R16G16B16X16_UNORM      = 234,
201b8e80941Smrg   VIRGL_FORMAT_R16G16B16X16_SNORM      = 235,
202b8e80941Smrg   VIRGL_FORMAT_R16G16B16X16_FLOAT      = 236,
203b8e80941Smrg   VIRGL_FORMAT_R16G16B16X16_UINT       = 237,
204b8e80941Smrg   VIRGL_FORMAT_R16G16B16X16_SINT       = 238,
205b8e80941Smrg
206b8e80941Smrg   VIRGL_FORMAT_R10G10B10A2_UINT        = 253,
207b8e80941Smrg
208b8e80941Smrg   VIRGL_FORMAT_BPTC_RGBA_UNORM         = 255,
209b8e80941Smrg   VIRGL_FORMAT_BPTC_SRGBA              = 256,
210b8e80941Smrg   VIRGL_FORMAT_BPTC_RGB_FLOAT          = 257,
211b8e80941Smrg   VIRGL_FORMAT_BPTC_RGB_UFLOAT         = 258,
212b8e80941Smrg
213b8e80941Smrg   VIRGL_FORMAT_R10G10B10X2_UNORM       = 308,
214b8e80941Smrg   VIRGL_FORMAT_A4B4G4R4_UNORM          = 311,
215b8e80941Smrg   VIRGL_FORMAT_MAX,
216b8e80941Smrg};
217b8e80941Smrg
218b8e80941Smrg/* These are used by the capability_bits field in virgl_caps_v2. */
219b8e80941Smrg#define VIRGL_CAP_NONE 0
220b8e80941Smrg#define VIRGL_CAP_TGSI_INVARIANT       (1 << 0)
221b8e80941Smrg#define VIRGL_CAP_TEXTURE_VIEW         (1 << 1)
222b8e80941Smrg#define VIRGL_CAP_SET_MIN_SAMPLES      (1 << 2)
223b8e80941Smrg#define VIRGL_CAP_COPY_IMAGE           (1 << 3)
224b8e80941Smrg#define VIRGL_CAP_TGSI_PRECISE         (1 << 4)
225b8e80941Smrg#define VIRGL_CAP_TXQS                 (1 << 5)
226b8e80941Smrg#define VIRGL_CAP_MEMORY_BARRIER       (1 << 6)
227b8e80941Smrg#define VIRGL_CAP_COMPUTE_SHADER       (1 << 7)
228b8e80941Smrg#define VIRGL_CAP_FB_NO_ATTACH         (1 << 8)
229b8e80941Smrg#define VIRGL_CAP_ROBUST_BUFFER_ACCESS (1 << 9)
230b8e80941Smrg#define VIRGL_CAP_TGSI_FBFETCH         (1 << 10)
231b8e80941Smrg#define VIRGL_CAP_SHADER_CLOCK         (1 << 11)
232b8e80941Smrg#define VIRGL_CAP_TEXTURE_BARRIER      (1 << 12)
233b8e80941Smrg#define VIRGL_CAP_TGSI_COMPONENTS      (1 << 13)
234b8e80941Smrg#define VIRGL_CAP_GUEST_MAY_INIT_LOG   (1 << 14)
235b8e80941Smrg#define VIRGL_CAP_SRGB_WRITE_CONTROL   (1 << 15)
236b8e80941Smrg#define VIRGL_CAP_QBO                  (1 << 16)
237b8e80941Smrg#define VIRGL_CAP_TRANSFER             (1 << 17)
238b8e80941Smrg#define VIRGL_CAP_FBO_MIXED_COLOR_FORMATS (1 << 18)
239b8e80941Smrg#define VIRGL_CAP_FAKE_FP64            (1 << 19)
240b8e80941Smrg#define VIRGL_CAP_BIND_COMMAND_ARGS    (1 << 20)
241b8e80941Smrg#define VIRGL_CAP_MULTI_DRAW_INDIRECT  (1 << 21)
242b8e80941Smrg#define VIRGL_CAP_INDIRECT_PARAMS      (1 << 22)
243b8e80941Smrg#define VIRGL_CAP_TRANSFORM_FEEDBACK3  (1 << 23)
244b8e80941Smrg#define VIRGL_CAP_INDIRECT_INPUT_ADDR  (1 << 25)
245b8e80941Smrg
246b8e80941Smrg
247b8e80941Smrg/* virgl bind flags - these are compatible with mesa 10.5 gallium.
248b8e80941Smrg * but are fixed, no other should be passed to virgl either.
249b8e80941Smrg */
250b8e80941Smrg#define VIRGL_BIND_DEPTH_STENCIL (1 << 0)
251b8e80941Smrg#define VIRGL_BIND_RENDER_TARGET (1 << 1)
252b8e80941Smrg#define VIRGL_BIND_SAMPLER_VIEW  (1 << 3)
253b8e80941Smrg#define VIRGL_BIND_VERTEX_BUFFER (1 << 4)
254b8e80941Smrg#define VIRGL_BIND_INDEX_BUFFER  (1 << 5)
255b8e80941Smrg#define VIRGL_BIND_CONSTANT_BUFFER (1 << 6)
256b8e80941Smrg#define VIRGL_BIND_DISPLAY_TARGET (1 << 7)
257b8e80941Smrg#define VIRGL_BIND_COMMAND_ARGS  (1 << 8)
258b8e80941Smrg#define VIRGL_BIND_STREAM_OUTPUT (1 << 11)
259b8e80941Smrg#define VIRGL_BIND_SHADER_BUFFER (1 << 14)
260b8e80941Smrg#define VIRGL_BIND_QUERY_BUFFER  (1 << 15)
261b8e80941Smrg#define VIRGL_BIND_CURSOR        (1 << 16)
262b8e80941Smrg#define VIRGL_BIND_CUSTOM        (1 << 17)
263b8e80941Smrg#define VIRGL_BIND_SCANOUT       (1 << 18)
264b8e80941Smrg
265b8e80941Smrgstruct virgl_caps_bool_set1 {
266b8e80941Smrg        unsigned indep_blend_enable:1;
267b8e80941Smrg        unsigned indep_blend_func:1;
268b8e80941Smrg        unsigned cube_map_array:1;
269b8e80941Smrg        unsigned shader_stencil_export:1;
270b8e80941Smrg        unsigned conditional_render:1;
271b8e80941Smrg        unsigned start_instance:1;
272b8e80941Smrg        unsigned primitive_restart:1;
273b8e80941Smrg        unsigned blend_eq_sep:1;
274b8e80941Smrg        unsigned instanceid:1;
275b8e80941Smrg        unsigned vertex_element_instance_divisor:1;
276b8e80941Smrg        unsigned seamless_cube_map:1;
277b8e80941Smrg        unsigned occlusion_query:1;
278b8e80941Smrg        unsigned timer_query:1;
279b8e80941Smrg        unsigned streamout_pause_resume:1;
280b8e80941Smrg        unsigned texture_multisample:1;
281b8e80941Smrg        unsigned fragment_coord_conventions:1;
282b8e80941Smrg        unsigned depth_clip_disable:1;
283b8e80941Smrg        unsigned seamless_cube_map_per_texture:1;
284b8e80941Smrg        unsigned ubo:1;
285b8e80941Smrg        unsigned color_clamping:1; /* not in GL 3.1 core profile */
286b8e80941Smrg        unsigned poly_stipple:1; /* not in GL 3.1 core profile */
287b8e80941Smrg        unsigned mirror_clamp:1;
288b8e80941Smrg        unsigned texture_query_lod:1;
289b8e80941Smrg        unsigned has_fp64:1;
290b8e80941Smrg        unsigned has_tessellation_shaders:1;
291b8e80941Smrg        unsigned has_indirect_draw:1;
292b8e80941Smrg        unsigned has_sample_shading:1;
293b8e80941Smrg        unsigned has_cull:1;
294b8e80941Smrg        unsigned conditional_render_inverted:1;
295b8e80941Smrg        unsigned derivative_control:1;
296b8e80941Smrg        unsigned polygon_offset_clamp:1;
297b8e80941Smrg        unsigned transform_feedback_overflow_query:1;
298b8e80941Smrg        /* DO NOT ADD ANYMORE MEMBERS - need to add another 32-bit to v2 caps */
299b8e80941Smrg};
300b8e80941Smrg
301b8e80941Smrg/* endless expansion capabilites - current gallium has 252 formats */
302b8e80941Smrgstruct virgl_supported_format_mask {
303b8e80941Smrg        uint32_t bitmask[16];
304b8e80941Smrg};
305b8e80941Smrg/* capabilities set 2 - version 1 - 32-bit and float values */
306b8e80941Smrgstruct virgl_caps_v1 {
307b8e80941Smrg        uint32_t max_version;
308b8e80941Smrg        struct virgl_supported_format_mask sampler;
309b8e80941Smrg        struct virgl_supported_format_mask render;
310b8e80941Smrg        struct virgl_supported_format_mask depthstencil;
311b8e80941Smrg        struct virgl_supported_format_mask vertexbuffer;
312b8e80941Smrg        struct virgl_caps_bool_set1 bset;
313b8e80941Smrg        uint32_t glsl_level;
314b8e80941Smrg        uint32_t max_texture_array_layers;
315b8e80941Smrg        uint32_t max_streamout_buffers;
316b8e80941Smrg        uint32_t max_dual_source_render_targets;
317b8e80941Smrg        uint32_t max_render_targets;
318b8e80941Smrg        uint32_t max_samples;
319b8e80941Smrg        uint32_t prim_mask;
320b8e80941Smrg        uint32_t max_tbo_size;
321b8e80941Smrg        uint32_t max_uniform_blocks;
322b8e80941Smrg        uint32_t max_viewports;
323b8e80941Smrg        uint32_t max_texture_gather_components;
324b8e80941Smrg};
325b8e80941Smrg
326b8e80941Smrg/*
327b8e80941Smrg * This struct should be growable when used in capset 2,
328b8e80941Smrg * so we shouldn't have to add a v3 ever.
329b8e80941Smrg */
330b8e80941Smrgstruct virgl_caps_v2 {
331b8e80941Smrg        struct virgl_caps_v1 v1;
332b8e80941Smrg        float min_aliased_point_size;
333b8e80941Smrg        float max_aliased_point_size;
334b8e80941Smrg        float min_smooth_point_size;
335b8e80941Smrg        float max_smooth_point_size;
336b8e80941Smrg        float min_aliased_line_width;
337b8e80941Smrg        float max_aliased_line_width;
338b8e80941Smrg        float min_smooth_line_width;
339b8e80941Smrg        float max_smooth_line_width;
340b8e80941Smrg        float max_texture_lod_bias;
341b8e80941Smrg        uint32_t max_geom_output_vertices;
342b8e80941Smrg        uint32_t max_geom_total_output_components;
343b8e80941Smrg        uint32_t max_vertex_outputs;
344b8e80941Smrg        uint32_t max_vertex_attribs;
345b8e80941Smrg        uint32_t max_shader_patch_varyings;
346b8e80941Smrg        int32_t min_texel_offset;
347b8e80941Smrg        int32_t max_texel_offset;
348b8e80941Smrg        int32_t min_texture_gather_offset;
349b8e80941Smrg        int32_t max_texture_gather_offset;
350b8e80941Smrg        uint32_t texture_buffer_offset_alignment;
351b8e80941Smrg        uint32_t uniform_buffer_offset_alignment;
352b8e80941Smrg        uint32_t shader_buffer_offset_alignment;
353b8e80941Smrg        uint32_t capability_bits;
354b8e80941Smrg        uint32_t sample_locations[8];
355b8e80941Smrg        uint32_t max_vertex_attrib_stride;
356b8e80941Smrg        uint32_t max_shader_buffer_frag_compute;
357b8e80941Smrg        uint32_t max_shader_buffer_other_stages;
358b8e80941Smrg        uint32_t max_shader_image_frag_compute;
359b8e80941Smrg        uint32_t max_shader_image_other_stages;
360b8e80941Smrg        uint32_t max_image_samples;
361b8e80941Smrg        uint32_t max_compute_work_group_invocations;
362b8e80941Smrg        uint32_t max_compute_shared_memory_size;
363b8e80941Smrg        uint32_t max_compute_grid_size[3];
364b8e80941Smrg        uint32_t max_compute_block_size[3];
365b8e80941Smrg        uint32_t max_texture_2d_size;
366b8e80941Smrg        uint32_t max_texture_3d_size;
367b8e80941Smrg        uint32_t max_texture_cube_size;
368b8e80941Smrg        uint32_t max_combined_shader_buffers;
369b8e80941Smrg        uint32_t max_atomic_counters[6];
370b8e80941Smrg        uint32_t max_atomic_counter_buffers[6];
371b8e80941Smrg        uint32_t max_combined_atomic_counters;
372b8e80941Smrg        uint32_t max_combined_atomic_counter_buffers;
373b8e80941Smrg        uint32_t host_feature_check_version;
374b8e80941Smrg        struct virgl_supported_format_mask supported_readback_formats;
375b8e80941Smrg};
376b8e80941Smrg
377b8e80941Smrgunion virgl_caps {
378b8e80941Smrg        uint32_t max_version;
379b8e80941Smrg        struct virgl_caps_v1 v1;
380b8e80941Smrg        struct virgl_caps_v2 v2;
381b8e80941Smrg};
382b8e80941Smrg
383b8e80941Smrgenum virgl_errors {
384b8e80941Smrg        VIRGL_ERROR_NONE,
385b8e80941Smrg        VIRGL_ERROR_UNKNOWN,
386b8e80941Smrg        VIRGL_ERROR_UNKNOWN_RESOURCE_FORMAT,
387b8e80941Smrg};
388b8e80941Smrg
389b8e80941Smrgenum virgl_ctx_errors {
390b8e80941Smrg        VIRGL_ERROR_CTX_NONE,
391b8e80941Smrg        VIRGL_ERROR_CTX_UNKNOWN,
392b8e80941Smrg        VIRGL_ERROR_CTX_ILLEGAL_SHADER,
393b8e80941Smrg        VIRGL_ERROR_CTX_ILLEGAL_HANDLE,
394b8e80941Smrg        VIRGL_ERROR_CTX_ILLEGAL_RESOURCE,
395b8e80941Smrg        VIRGL_ERROR_CTX_ILLEGAL_SURFACE,
396b8e80941Smrg        VIRGL_ERROR_CTX_ILLEGAL_VERTEX_FORMAT,
397b8e80941Smrg        VIRGL_ERROR_CTX_ILLEGAL_CMD_BUFFER,
398b8e80941Smrg};
399b8e80941Smrg
400b8e80941Smrg
401b8e80941Smrg#define VIRGL_RESOURCE_Y_0_TOP (1 << 0)
402b8e80941Smrg#endif
403