1*bbecb9d1SAndroid Build Coastguard Worker /**************************************************************************
2*bbecb9d1SAndroid Build Coastguard Worker *
3*bbecb9d1SAndroid Build Coastguard Worker * Copyright (C) 2014 Red Hat Inc.
4*bbecb9d1SAndroid Build Coastguard Worker *
5*bbecb9d1SAndroid Build Coastguard Worker * Permission is hereby granted, free of charge, to any person obtaining a
6*bbecb9d1SAndroid Build Coastguard Worker * copy of this software and associated documentation files (the "Software"),
7*bbecb9d1SAndroid Build Coastguard Worker * to deal in the Software without restriction, including without limitation
8*bbecb9d1SAndroid Build Coastguard Worker * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9*bbecb9d1SAndroid Build Coastguard Worker * and/or sell copies of the Software, and to permit persons to whom the
10*bbecb9d1SAndroid Build Coastguard Worker * Software is furnished to do so, subject to the following conditions:
11*bbecb9d1SAndroid Build Coastguard Worker *
12*bbecb9d1SAndroid Build Coastguard Worker * The above copyright notice and this permission notice shall be included
13*bbecb9d1SAndroid Build Coastguard Worker * in all copies or substantial portions of the Software.
14*bbecb9d1SAndroid Build Coastguard Worker *
15*bbecb9d1SAndroid Build Coastguard Worker * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
16*bbecb9d1SAndroid Build Coastguard Worker * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17*bbecb9d1SAndroid Build Coastguard Worker * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18*bbecb9d1SAndroid Build Coastguard Worker * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
19*bbecb9d1SAndroid Build Coastguard Worker * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
20*bbecb9d1SAndroid Build Coastguard Worker * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
21*bbecb9d1SAndroid Build Coastguard Worker * OTHER DEALINGS IN THE SOFTWARE.
22*bbecb9d1SAndroid Build Coastguard Worker *
23*bbecb9d1SAndroid Build Coastguard Worker **************************************************************************/
24*bbecb9d1SAndroid Build Coastguard Worker
25*bbecb9d1SAndroid Build Coastguard Worker #ifndef VREND_RENDERER_H
26*bbecb9d1SAndroid Build Coastguard Worker #define VREND_RENDERER_H
27*bbecb9d1SAndroid Build Coastguard Worker
28*bbecb9d1SAndroid Build Coastguard Worker #include "pipe/p_state.h"
29*bbecb9d1SAndroid Build Coastguard Worker #include "util/u_double_list.h"
30*bbecb9d1SAndroid Build Coastguard Worker #include "util/u_inlines.h"
31*bbecb9d1SAndroid Build Coastguard Worker #include "virgl_protocol.h"
32*bbecb9d1SAndroid Build Coastguard Worker #include "vrend_debug.h"
33*bbecb9d1SAndroid Build Coastguard Worker #include "vrend_tweaks.h"
34*bbecb9d1SAndroid Build Coastguard Worker #include "vrend_iov.h"
35*bbecb9d1SAndroid Build Coastguard Worker #include "vrend_winsys_gbm.h"
36*bbecb9d1SAndroid Build Coastguard Worker #include "virgl_hw.h"
37*bbecb9d1SAndroid Build Coastguard Worker #include <epoxy/gl.h>
38*bbecb9d1SAndroid Build Coastguard Worker
39*bbecb9d1SAndroid Build Coastguard Worker typedef void *virgl_gl_context;
40*bbecb9d1SAndroid Build Coastguard Worker typedef void *virgl_gl_drawable;
41*bbecb9d1SAndroid Build Coastguard Worker
42*bbecb9d1SAndroid Build Coastguard Worker struct virgl_gl_ctx_param {
43*bbecb9d1SAndroid Build Coastguard Worker int major_ver;
44*bbecb9d1SAndroid Build Coastguard Worker int minor_ver;
45*bbecb9d1SAndroid Build Coastguard Worker bool shared;
46*bbecb9d1SAndroid Build Coastguard Worker };
47*bbecb9d1SAndroid Build Coastguard Worker
48*bbecb9d1SAndroid Build Coastguard Worker struct virgl_context;
49*bbecb9d1SAndroid Build Coastguard Worker struct virgl_resource;
50*bbecb9d1SAndroid Build Coastguard Worker struct vrend_context;
51*bbecb9d1SAndroid Build Coastguard Worker
52*bbecb9d1SAndroid Build Coastguard Worker /* Number of mipmap levels for which to keep the backing iov offsets.
53*bbecb9d1SAndroid Build Coastguard Worker * Value mirrored from mesa/virgl
54*bbecb9d1SAndroid Build Coastguard Worker */
55*bbecb9d1SAndroid Build Coastguard Worker #define VR_MAX_TEXTURE_2D_LEVELS 15
56*bbecb9d1SAndroid Build Coastguard Worker
57*bbecb9d1SAndroid Build Coastguard Worker #define VREND_STORAGE_GUEST_MEMORY BIT(0)
58*bbecb9d1SAndroid Build Coastguard Worker #define VREND_STORAGE_GL_TEXTURE BIT(1)
59*bbecb9d1SAndroid Build Coastguard Worker #define VREND_STORAGE_GL_BUFFER BIT(2)
60*bbecb9d1SAndroid Build Coastguard Worker #define VREND_STORAGE_EGL_IMAGE BIT(3)
61*bbecb9d1SAndroid Build Coastguard Worker #define VREND_STORAGE_GBM_BUFFER BIT(4)
62*bbecb9d1SAndroid Build Coastguard Worker #define VREND_STORAGE_HOST_SYSTEM_MEMORY BIT(5)
63*bbecb9d1SAndroid Build Coastguard Worker #define VREND_STORAGE_GL_IMMUTABLE BIT(6)
64*bbecb9d1SAndroid Build Coastguard Worker #define VREND_STORAGE_GL_MEMOBJ BIT(7)
65*bbecb9d1SAndroid Build Coastguard Worker
66*bbecb9d1SAndroid Build Coastguard Worker struct vrend_resource {
67*bbecb9d1SAndroid Build Coastguard Worker struct pipe_resource base;
68*bbecb9d1SAndroid Build Coastguard Worker uint32_t storage_bits;
69*bbecb9d1SAndroid Build Coastguard Worker uint32_t map_info;
70*bbecb9d1SAndroid Build Coastguard Worker
71*bbecb9d1SAndroid Build Coastguard Worker GLuint id;
72*bbecb9d1SAndroid Build Coastguard Worker GLenum target;
73*bbecb9d1SAndroid Build Coastguard Worker
74*bbecb9d1SAndroid Build Coastguard Worker GLuint tbo_tex_id;/* tbos have two ids to track */
75*bbecb9d1SAndroid Build Coastguard Worker bool y_0_top;
76*bbecb9d1SAndroid Build Coastguard Worker
77*bbecb9d1SAndroid Build Coastguard Worker /* used for keeping track of multisampled renderbuffer for
78*bbecb9d1SAndroid Build Coastguard Worker * GL_EXT_multisampled_render_to_texture. */
79*bbecb9d1SAndroid Build Coastguard Worker GLuint rbo_id;
80*bbecb9d1SAndroid Build Coastguard Worker
81*bbecb9d1SAndroid Build Coastguard Worker /* Pointer to system memory storage for this resource. Only valid for
82*bbecb9d1SAndroid Build Coastguard Worker * VREND_RESOURCE_STORAGE_GUEST_ELSE_SYSTEM buffer storage.
83*bbecb9d1SAndroid Build Coastguard Worker */
84*bbecb9d1SAndroid Build Coastguard Worker char *ptr;
85*bbecb9d1SAndroid Build Coastguard Worker /* IOV pointing to shared guest memory storage for this resource. */
86*bbecb9d1SAndroid Build Coastguard Worker const struct iovec *iov;
87*bbecb9d1SAndroid Build Coastguard Worker uint32_t num_iovs;
88*bbecb9d1SAndroid Build Coastguard Worker uint64_t mipmap_offsets[VR_MAX_TEXTURE_2D_LEVELS];
89*bbecb9d1SAndroid Build Coastguard Worker void *gbm_bo, *egl_image;
90*bbecb9d1SAndroid Build Coastguard Worker void *aux_plane_egl_image[VIRGL_GBM_MAX_PLANES];
91*bbecb9d1SAndroid Build Coastguard Worker
92*bbecb9d1SAndroid Build Coastguard Worker uint64_t size;
93*bbecb9d1SAndroid Build Coastguard Worker GLbitfield buffer_storage_flags;
94*bbecb9d1SAndroid Build Coastguard Worker GLuint memobj;
95*bbecb9d1SAndroid Build Coastguard Worker
96*bbecb9d1SAndroid Build Coastguard Worker uint32_t blob_id;
97*bbecb9d1SAndroid Build Coastguard Worker struct list_head head;
98*bbecb9d1SAndroid Build Coastguard Worker };
99*bbecb9d1SAndroid Build Coastguard Worker
100*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_TEXTURE_NEED_SWIZZLE (1 << 0)
101*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_TEXTURE_CAN_TEXTURE_STORAGE (1 << 1)
102*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_TEXTURE_CAN_READBACK (1 << 2)
103*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_TEXTURE_CAN_TARGET_RECTANGLE (1 << 3)
104*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_TEXTURE_CAN_MULTISAMPLE (1 << 4)
105*bbecb9d1SAndroid Build Coastguard Worker
106*bbecb9d1SAndroid Build Coastguard Worker struct vrend_format_table {
107*bbecb9d1SAndroid Build Coastguard Worker enum virgl_formats format;
108*bbecb9d1SAndroid Build Coastguard Worker GLenum internalformat;
109*bbecb9d1SAndroid Build Coastguard Worker GLenum glformat;
110*bbecb9d1SAndroid Build Coastguard Worker GLenum gltype;
111*bbecb9d1SAndroid Build Coastguard Worker uint8_t swizzle[4];
112*bbecb9d1SAndroid Build Coastguard Worker uint32_t bindings;
113*bbecb9d1SAndroid Build Coastguard Worker uint32_t flags;
114*bbecb9d1SAndroid Build Coastguard Worker };
115*bbecb9d1SAndroid Build Coastguard Worker
116*bbecb9d1SAndroid Build Coastguard Worker typedef void (*vrend_context_fence_retire)(uint64_t fence_id,
117*bbecb9d1SAndroid Build Coastguard Worker void *retire_data);
118*bbecb9d1SAndroid Build Coastguard Worker
119*bbecb9d1SAndroid Build Coastguard Worker struct vrend_if_cbs {
120*bbecb9d1SAndroid Build Coastguard Worker vrend_context_fence_retire ctx0_fence_retire;
121*bbecb9d1SAndroid Build Coastguard Worker
122*bbecb9d1SAndroid Build Coastguard Worker virgl_gl_context (*create_gl_context)(int scanout, struct virgl_gl_ctx_param *params);
123*bbecb9d1SAndroid Build Coastguard Worker void (*destroy_gl_context)(virgl_gl_context ctx);
124*bbecb9d1SAndroid Build Coastguard Worker int (*make_current)(virgl_gl_context ctx);
125*bbecb9d1SAndroid Build Coastguard Worker int (*get_drm_fd)(void);
126*bbecb9d1SAndroid Build Coastguard Worker };
127*bbecb9d1SAndroid Build Coastguard Worker
128*bbecb9d1SAndroid Build Coastguard Worker #define VREND_USE_THREAD_SYNC (1 << 0)
129*bbecb9d1SAndroid Build Coastguard Worker #define VREND_USE_EXTERNAL_BLOB (1 << 1)
130*bbecb9d1SAndroid Build Coastguard Worker #define VREND_USE_ASYNC_FENCE_CB (1 << 2)
131*bbecb9d1SAndroid Build Coastguard Worker #define VREND_USE_VIDEO (1 << 3)
132*bbecb9d1SAndroid Build Coastguard Worker
133*bbecb9d1SAndroid Build Coastguard Worker bool vrend_check_no_error(struct vrend_context *ctx);
134*bbecb9d1SAndroid Build Coastguard Worker
135*bbecb9d1SAndroid Build Coastguard Worker const struct virgl_resource_pipe_callbacks *
136*bbecb9d1SAndroid Build Coastguard Worker vrend_renderer_get_pipe_callbacks(void);
137*bbecb9d1SAndroid Build Coastguard Worker
138*bbecb9d1SAndroid Build Coastguard Worker int vrend_renderer_init(const struct vrend_if_cbs *cbs, uint32_t flags);
139*bbecb9d1SAndroid Build Coastguard Worker
140*bbecb9d1SAndroid Build Coastguard Worker void vrend_insert_format(struct vrend_format_table *entry, uint32_t bindings, uint32_t flags);
141*bbecb9d1SAndroid Build Coastguard Worker bool vrend_check_framebuffer_mixed_color_attachements(void);
142*bbecb9d1SAndroid Build Coastguard Worker
143*bbecb9d1SAndroid Build Coastguard Worker void vrend_insert_format_swizzle(int override_format, struct vrend_format_table *entry,
144*bbecb9d1SAndroid Build Coastguard Worker uint32_t bindings, uint8_t swizzle[4], uint32_t flags);
145*bbecb9d1SAndroid Build Coastguard Worker const struct vrend_format_table *vrend_get_format_table_entry(enum virgl_formats format);
146*bbecb9d1SAndroid Build Coastguard Worker
147*bbecb9d1SAndroid Build Coastguard Worker int vrend_create_shader(struct vrend_context *ctx,
148*bbecb9d1SAndroid Build Coastguard Worker uint32_t handle,
149*bbecb9d1SAndroid Build Coastguard Worker const struct pipe_stream_output_info *stream_output,
150*bbecb9d1SAndroid Build Coastguard Worker uint32_t req_local_mem,
151*bbecb9d1SAndroid Build Coastguard Worker const char *shd_text, uint32_t offlen, uint32_t num_tokens,
152*bbecb9d1SAndroid Build Coastguard Worker uint32_t type, uint32_t pkt_length);
153*bbecb9d1SAndroid Build Coastguard Worker
154*bbecb9d1SAndroid Build Coastguard Worker void vrend_link_program_hook(struct vrend_context *ctx, uint32_t *handles);
155*bbecb9d1SAndroid Build Coastguard Worker
156*bbecb9d1SAndroid Build Coastguard Worker void vrend_bind_shader(struct vrend_context *ctx,
157*bbecb9d1SAndroid Build Coastguard Worker uint32_t type,
158*bbecb9d1SAndroid Build Coastguard Worker uint32_t handle);
159*bbecb9d1SAndroid Build Coastguard Worker
160*bbecb9d1SAndroid Build Coastguard Worker void vrend_bind_vs_so(struct vrend_context *ctx,
161*bbecb9d1SAndroid Build Coastguard Worker uint32_t handle);
162*bbecb9d1SAndroid Build Coastguard Worker void vrend_clear(struct vrend_context *ctx,
163*bbecb9d1SAndroid Build Coastguard Worker unsigned buffers,
164*bbecb9d1SAndroid Build Coastguard Worker const union pipe_color_union *color,
165*bbecb9d1SAndroid Build Coastguard Worker double depth, unsigned stencil);
166*bbecb9d1SAndroid Build Coastguard Worker
167*bbecb9d1SAndroid Build Coastguard Worker int vrend_clear_texture(struct vrend_context* ctx,
168*bbecb9d1SAndroid Build Coastguard Worker uint32_t handle, uint32_t level,
169*bbecb9d1SAndroid Build Coastguard Worker const struct pipe_box *box,
170*bbecb9d1SAndroid Build Coastguard Worker const void * data);
171*bbecb9d1SAndroid Build Coastguard Worker
172*bbecb9d1SAndroid Build Coastguard Worker int vrend_draw_vbo(struct vrend_context *ctx,
173*bbecb9d1SAndroid Build Coastguard Worker const struct pipe_draw_info *info,
174*bbecb9d1SAndroid Build Coastguard Worker uint32_t cso, uint32_t indirect_handle, uint32_t indirect_draw_count_handle);
175*bbecb9d1SAndroid Build Coastguard Worker
176*bbecb9d1SAndroid Build Coastguard Worker void vrend_set_framebuffer_state(struct vrend_context *ctx,
177*bbecb9d1SAndroid Build Coastguard Worker uint32_t nr_cbufs, uint32_t surf_handle[PIPE_MAX_COLOR_BUFS],
178*bbecb9d1SAndroid Build Coastguard Worker uint32_t zsurf_handle);
179*bbecb9d1SAndroid Build Coastguard Worker
180*bbecb9d1SAndroid Build Coastguard Worker struct vrend_context *vrend_create_context(int id, uint32_t nlen, const char *debug_name);
181*bbecb9d1SAndroid Build Coastguard Worker void vrend_destroy_context(struct vrend_context *ctx);
182*bbecb9d1SAndroid Build Coastguard Worker struct virgl_context *vrend_renderer_context_create(uint32_t handle,
183*bbecb9d1SAndroid Build Coastguard Worker uint32_t nlen,
184*bbecb9d1SAndroid Build Coastguard Worker const char *name);
185*bbecb9d1SAndroid Build Coastguard Worker
186*bbecb9d1SAndroid Build Coastguard Worker struct vrend_renderer_resource_create_args {
187*bbecb9d1SAndroid Build Coastguard Worker enum pipe_texture_target target;
188*bbecb9d1SAndroid Build Coastguard Worker uint32_t format;
189*bbecb9d1SAndroid Build Coastguard Worker uint32_t bind;
190*bbecb9d1SAndroid Build Coastguard Worker uint32_t width;
191*bbecb9d1SAndroid Build Coastguard Worker uint32_t height;
192*bbecb9d1SAndroid Build Coastguard Worker uint32_t depth;
193*bbecb9d1SAndroid Build Coastguard Worker uint32_t array_size;
194*bbecb9d1SAndroid Build Coastguard Worker uint32_t last_level;
195*bbecb9d1SAndroid Build Coastguard Worker uint32_t nr_samples;
196*bbecb9d1SAndroid Build Coastguard Worker uint32_t flags;
197*bbecb9d1SAndroid Build Coastguard Worker };
198*bbecb9d1SAndroid Build Coastguard Worker
199*bbecb9d1SAndroid Build Coastguard Worker /* set the type info of an untyped blob resource */
200*bbecb9d1SAndroid Build Coastguard Worker struct vrend_renderer_resource_set_type_args {
201*bbecb9d1SAndroid Build Coastguard Worker uint32_t format;
202*bbecb9d1SAndroid Build Coastguard Worker uint32_t bind;
203*bbecb9d1SAndroid Build Coastguard Worker uint32_t width;
204*bbecb9d1SAndroid Build Coastguard Worker uint32_t height;
205*bbecb9d1SAndroid Build Coastguard Worker uint32_t usage;
206*bbecb9d1SAndroid Build Coastguard Worker uint64_t modifier;
207*bbecb9d1SAndroid Build Coastguard Worker uint32_t plane_count;
208*bbecb9d1SAndroid Build Coastguard Worker uint32_t plane_strides[VIRGL_GBM_MAX_PLANES];
209*bbecb9d1SAndroid Build Coastguard Worker uint32_t plane_offsets[VIRGL_GBM_MAX_PLANES];
210*bbecb9d1SAndroid Build Coastguard Worker };
211*bbecb9d1SAndroid Build Coastguard Worker
212*bbecb9d1SAndroid Build Coastguard Worker struct pipe_resource *
213*bbecb9d1SAndroid Build Coastguard Worker vrend_renderer_resource_create(const struct vrend_renderer_resource_create_args *args,
214*bbecb9d1SAndroid Build Coastguard Worker void *image_eos);
215*bbecb9d1SAndroid Build Coastguard Worker
216*bbecb9d1SAndroid Build Coastguard Worker int vrend_create_surface(struct vrend_context *ctx,
217*bbecb9d1SAndroid Build Coastguard Worker uint32_t handle,
218*bbecb9d1SAndroid Build Coastguard Worker uint32_t res_handle, uint32_t format,
219*bbecb9d1SAndroid Build Coastguard Worker uint32_t val0, uint32_t val1,
220*bbecb9d1SAndroid Build Coastguard Worker uint32_t nr_samples);
221*bbecb9d1SAndroid Build Coastguard Worker int vrend_create_sampler_view(struct vrend_context *ctx,
222*bbecb9d1SAndroid Build Coastguard Worker uint32_t handle,
223*bbecb9d1SAndroid Build Coastguard Worker uint32_t res_handle, uint32_t format,
224*bbecb9d1SAndroid Build Coastguard Worker uint32_t val0, uint32_t val1, uint32_t swizzle_packed);
225*bbecb9d1SAndroid Build Coastguard Worker
226*bbecb9d1SAndroid Build Coastguard Worker int vrend_create_sampler_state(struct vrend_context *ctx,
227*bbecb9d1SAndroid Build Coastguard Worker uint32_t handle,
228*bbecb9d1SAndroid Build Coastguard Worker struct pipe_sampler_state *templ);
229*bbecb9d1SAndroid Build Coastguard Worker
230*bbecb9d1SAndroid Build Coastguard Worker int vrend_create_so_target(struct vrend_context *ctx,
231*bbecb9d1SAndroid Build Coastguard Worker uint32_t handle,
232*bbecb9d1SAndroid Build Coastguard Worker uint32_t res_handle,
233*bbecb9d1SAndroid Build Coastguard Worker uint32_t buffer_offset,
234*bbecb9d1SAndroid Build Coastguard Worker uint32_t buffer_size);
235*bbecb9d1SAndroid Build Coastguard Worker
236*bbecb9d1SAndroid Build Coastguard Worker void vrend_set_streamout_targets(struct vrend_context *ctx,
237*bbecb9d1SAndroid Build Coastguard Worker uint32_t append_bitmask,
238*bbecb9d1SAndroid Build Coastguard Worker uint32_t num_targets,
239*bbecb9d1SAndroid Build Coastguard Worker uint32_t *handles);
240*bbecb9d1SAndroid Build Coastguard Worker
241*bbecb9d1SAndroid Build Coastguard Worker int vrend_create_vertex_elements_state(struct vrend_context *ctx,
242*bbecb9d1SAndroid Build Coastguard Worker uint32_t handle,
243*bbecb9d1SAndroid Build Coastguard Worker unsigned num_elements,
244*bbecb9d1SAndroid Build Coastguard Worker const struct pipe_vertex_element *elements);
245*bbecb9d1SAndroid Build Coastguard Worker void vrend_bind_vertex_elements_state(struct vrend_context *ctx,
246*bbecb9d1SAndroid Build Coastguard Worker uint32_t handle);
247*bbecb9d1SAndroid Build Coastguard Worker
248*bbecb9d1SAndroid Build Coastguard Worker void vrend_set_single_vbo(struct vrend_context *ctx,
249*bbecb9d1SAndroid Build Coastguard Worker uint32_t index,
250*bbecb9d1SAndroid Build Coastguard Worker uint32_t stride,
251*bbecb9d1SAndroid Build Coastguard Worker uint32_t buffer_offset,
252*bbecb9d1SAndroid Build Coastguard Worker uint32_t res_handle);
253*bbecb9d1SAndroid Build Coastguard Worker void vrend_set_num_vbo(struct vrend_context *ctx,
254*bbecb9d1SAndroid Build Coastguard Worker int num_vbo);
255*bbecb9d1SAndroid Build Coastguard Worker
256*bbecb9d1SAndroid Build Coastguard Worker int vrend_transfer_inline_write(struct vrend_context *ctx,
257*bbecb9d1SAndroid Build Coastguard Worker uint32_t dst_handle,
258*bbecb9d1SAndroid Build Coastguard Worker const struct vrend_transfer_info *info);
259*bbecb9d1SAndroid Build Coastguard Worker
260*bbecb9d1SAndroid Build Coastguard Worker int vrend_renderer_copy_transfer3d(struct vrend_context *ctx,
261*bbecb9d1SAndroid Build Coastguard Worker uint32_t dst_handle,
262*bbecb9d1SAndroid Build Coastguard Worker uint32_t src_handle,
263*bbecb9d1SAndroid Build Coastguard Worker const struct vrend_transfer_info *info);
264*bbecb9d1SAndroid Build Coastguard Worker
265*bbecb9d1SAndroid Build Coastguard Worker int vrend_renderer_copy_transfer3d_from_host(struct vrend_context *ctx,
266*bbecb9d1SAndroid Build Coastguard Worker uint32_t dst_handle,
267*bbecb9d1SAndroid Build Coastguard Worker uint32_t src_handle,
268*bbecb9d1SAndroid Build Coastguard Worker const struct vrend_transfer_info *info);
269*bbecb9d1SAndroid Build Coastguard Worker
270*bbecb9d1SAndroid Build Coastguard Worker void vrend_set_viewport_states(struct vrend_context *ctx,
271*bbecb9d1SAndroid Build Coastguard Worker uint32_t start_slot, uint32_t num_viewports,
272*bbecb9d1SAndroid Build Coastguard Worker const struct pipe_viewport_state *state);
273*bbecb9d1SAndroid Build Coastguard Worker void vrend_set_num_sampler_views(struct vrend_context *ctx,
274*bbecb9d1SAndroid Build Coastguard Worker uint32_t shader_type,
275*bbecb9d1SAndroid Build Coastguard Worker uint32_t start_slot,
276*bbecb9d1SAndroid Build Coastguard Worker uint32_t num_sampler_views);
277*bbecb9d1SAndroid Build Coastguard Worker void vrend_set_single_sampler_view(struct vrend_context *ctx,
278*bbecb9d1SAndroid Build Coastguard Worker uint32_t shader_type,
279*bbecb9d1SAndroid Build Coastguard Worker uint32_t index,
280*bbecb9d1SAndroid Build Coastguard Worker uint32_t res_handle);
281*bbecb9d1SAndroid Build Coastguard Worker
282*bbecb9d1SAndroid Build Coastguard Worker void vrend_object_bind_blend(struct vrend_context *ctx,
283*bbecb9d1SAndroid Build Coastguard Worker uint32_t handle);
284*bbecb9d1SAndroid Build Coastguard Worker void vrend_object_bind_dsa(struct vrend_context *ctx,
285*bbecb9d1SAndroid Build Coastguard Worker uint32_t handle);
286*bbecb9d1SAndroid Build Coastguard Worker void vrend_object_bind_rasterizer(struct vrend_context *ctx,
287*bbecb9d1SAndroid Build Coastguard Worker uint32_t handle);
288*bbecb9d1SAndroid Build Coastguard Worker
289*bbecb9d1SAndroid Build Coastguard Worker void vrend_bind_sampler_states(struct vrend_context *ctx,
290*bbecb9d1SAndroid Build Coastguard Worker uint32_t shader_type,
291*bbecb9d1SAndroid Build Coastguard Worker uint32_t start_slot,
292*bbecb9d1SAndroid Build Coastguard Worker uint32_t num_states,
293*bbecb9d1SAndroid Build Coastguard Worker const uint32_t *handles);
294*bbecb9d1SAndroid Build Coastguard Worker void vrend_set_index_buffer(struct vrend_context *ctx,
295*bbecb9d1SAndroid Build Coastguard Worker uint32_t res_handle,
296*bbecb9d1SAndroid Build Coastguard Worker uint32_t index_size,
297*bbecb9d1SAndroid Build Coastguard Worker uint32_t offset);
298*bbecb9d1SAndroid Build Coastguard Worker void vrend_set_single_image_view(struct vrend_context *ctx,
299*bbecb9d1SAndroid Build Coastguard Worker uint32_t shader_type,
300*bbecb9d1SAndroid Build Coastguard Worker uint32_t index,
301*bbecb9d1SAndroid Build Coastguard Worker uint32_t format, uint32_t access,
302*bbecb9d1SAndroid Build Coastguard Worker uint32_t layer_offset, uint32_t level_size,
303*bbecb9d1SAndroid Build Coastguard Worker uint32_t handle);
304*bbecb9d1SAndroid Build Coastguard Worker void vrend_set_single_ssbo(struct vrend_context *ctx,
305*bbecb9d1SAndroid Build Coastguard Worker uint32_t shader_type,
306*bbecb9d1SAndroid Build Coastguard Worker uint32_t index,
307*bbecb9d1SAndroid Build Coastguard Worker uint32_t offset, uint32_t length,
308*bbecb9d1SAndroid Build Coastguard Worker uint32_t handle);
309*bbecb9d1SAndroid Build Coastguard Worker void vrend_set_single_abo(struct vrend_context *ctx,
310*bbecb9d1SAndroid Build Coastguard Worker uint32_t index,
311*bbecb9d1SAndroid Build Coastguard Worker uint32_t offset, uint32_t length,
312*bbecb9d1SAndroid Build Coastguard Worker uint32_t handle);
313*bbecb9d1SAndroid Build Coastguard Worker void vrend_memory_barrier(struct vrend_context *ctx,
314*bbecb9d1SAndroid Build Coastguard Worker unsigned flags);
315*bbecb9d1SAndroid Build Coastguard Worker void vrend_launch_grid(struct vrend_context *ctx,
316*bbecb9d1SAndroid Build Coastguard Worker uint32_t *block,
317*bbecb9d1SAndroid Build Coastguard Worker uint32_t *grid,
318*bbecb9d1SAndroid Build Coastguard Worker uint32_t indirect_handle,
319*bbecb9d1SAndroid Build Coastguard Worker uint32_t indirect_offset);
320*bbecb9d1SAndroid Build Coastguard Worker void vrend_set_framebuffer_state_no_attach(struct vrend_context *ctx,
321*bbecb9d1SAndroid Build Coastguard Worker uint32_t width, uint32_t height,
322*bbecb9d1SAndroid Build Coastguard Worker uint32_t layers, uint32_t samples);
323*bbecb9d1SAndroid Build Coastguard Worker void vrend_texture_barrier(struct vrend_context *ctx,
324*bbecb9d1SAndroid Build Coastguard Worker unsigned flags);
325*bbecb9d1SAndroid Build Coastguard Worker
326*bbecb9d1SAndroid Build Coastguard Worker int vrend_renderer_transfer_iov(struct vrend_context *ctx,
327*bbecb9d1SAndroid Build Coastguard Worker uint32_t dst_handle,
328*bbecb9d1SAndroid Build Coastguard Worker const struct vrend_transfer_info *info,
329*bbecb9d1SAndroid Build Coastguard Worker int transfer_mode);
330*bbecb9d1SAndroid Build Coastguard Worker
331*bbecb9d1SAndroid Build Coastguard Worker int vrend_renderer_transfer_pipe(struct pipe_resource *pres,
332*bbecb9d1SAndroid Build Coastguard Worker const struct vrend_transfer_info *info,
333*bbecb9d1SAndroid Build Coastguard Worker int transfer_mode);
334*bbecb9d1SAndroid Build Coastguard Worker
335*bbecb9d1SAndroid Build Coastguard Worker void vrend_renderer_resource_copy_region(struct vrend_context *ctx,
336*bbecb9d1SAndroid Build Coastguard Worker uint32_t dst_handle, uint32_t dst_level,
337*bbecb9d1SAndroid Build Coastguard Worker uint32_t dstx, uint32_t dsty, uint32_t dstz,
338*bbecb9d1SAndroid Build Coastguard Worker uint32_t src_handle, uint32_t src_level,
339*bbecb9d1SAndroid Build Coastguard Worker const struct pipe_box *src_box);
340*bbecb9d1SAndroid Build Coastguard Worker
341*bbecb9d1SAndroid Build Coastguard Worker void vrend_renderer_blit(struct vrend_context *ctx,
342*bbecb9d1SAndroid Build Coastguard Worker uint32_t dst_handle, uint32_t src_handle,
343*bbecb9d1SAndroid Build Coastguard Worker const struct pipe_blit_info *info);
344*bbecb9d1SAndroid Build Coastguard Worker
345*bbecb9d1SAndroid Build Coastguard Worker void vrend_set_stencil_ref(struct vrend_context *ctx, struct pipe_stencil_ref *ref);
346*bbecb9d1SAndroid Build Coastguard Worker void vrend_set_blend_color(struct vrend_context *ctx, struct pipe_blend_color *color);
347*bbecb9d1SAndroid Build Coastguard Worker void vrend_set_scissor_state(struct vrend_context *ctx,
348*bbecb9d1SAndroid Build Coastguard Worker uint32_t start_slot,
349*bbecb9d1SAndroid Build Coastguard Worker uint32_t num_scissor,
350*bbecb9d1SAndroid Build Coastguard Worker struct pipe_scissor_state *ss);
351*bbecb9d1SAndroid Build Coastguard Worker
352*bbecb9d1SAndroid Build Coastguard Worker void vrend_set_polygon_stipple(struct vrend_context *ctx, struct pipe_poly_stipple *ps);
353*bbecb9d1SAndroid Build Coastguard Worker
354*bbecb9d1SAndroid Build Coastguard Worker void vrend_set_clip_state(struct vrend_context *ctx, struct pipe_clip_state *ucp);
355*bbecb9d1SAndroid Build Coastguard Worker void vrend_set_sample_mask(struct vrend_context *ctx, unsigned sample_mask);
356*bbecb9d1SAndroid Build Coastguard Worker void vrend_set_min_samples(struct vrend_context *ctx, unsigned min_samples);
357*bbecb9d1SAndroid Build Coastguard Worker
358*bbecb9d1SAndroid Build Coastguard Worker void vrend_set_constants(struct vrend_context *ctx,
359*bbecb9d1SAndroid Build Coastguard Worker uint32_t shader,
360*bbecb9d1SAndroid Build Coastguard Worker uint32_t num_constant,
361*bbecb9d1SAndroid Build Coastguard Worker const float *data);
362*bbecb9d1SAndroid Build Coastguard Worker
363*bbecb9d1SAndroid Build Coastguard Worker void vrend_set_uniform_buffer(struct vrend_context *ctx, uint32_t shader,
364*bbecb9d1SAndroid Build Coastguard Worker uint32_t index, uint32_t offset, uint32_t length,
365*bbecb9d1SAndroid Build Coastguard Worker uint32_t res_handle);
366*bbecb9d1SAndroid Build Coastguard Worker
367*bbecb9d1SAndroid Build Coastguard Worker void vrend_fb_bind_texture_id(struct vrend_resource *res,
368*bbecb9d1SAndroid Build Coastguard Worker int id, int idx, uint32_t level,
369*bbecb9d1SAndroid Build Coastguard Worker uint32_t layer, uint32_t samples);
370*bbecb9d1SAndroid Build Coastguard Worker
371*bbecb9d1SAndroid Build Coastguard Worker void vrend_set_tess_state(struct vrend_context *ctx, const float tess_factors[6]);
372*bbecb9d1SAndroid Build Coastguard Worker
373*bbecb9d1SAndroid Build Coastguard Worker void vrend_renderer_fini(void);
374*bbecb9d1SAndroid Build Coastguard Worker
375*bbecb9d1SAndroid Build Coastguard Worker void vrend_renderer_set_fence_retire(struct vrend_context *ctx,
376*bbecb9d1SAndroid Build Coastguard Worker vrend_context_fence_retire retire,
377*bbecb9d1SAndroid Build Coastguard Worker void *retire_data);
378*bbecb9d1SAndroid Build Coastguard Worker
379*bbecb9d1SAndroid Build Coastguard Worker int vrend_renderer_create_fence(struct vrend_context *ctx,
380*bbecb9d1SAndroid Build Coastguard Worker uint32_t flags,
381*bbecb9d1SAndroid Build Coastguard Worker uint64_t fence_id);
382*bbecb9d1SAndroid Build Coastguard Worker
383*bbecb9d1SAndroid Build Coastguard Worker void vrend_renderer_check_fences(void);
384*bbecb9d1SAndroid Build Coastguard Worker
385*bbecb9d1SAndroid Build Coastguard Worker int vrend_renderer_create_ctx0_fence(uint32_t fence_id);
386*bbecb9d1SAndroid Build Coastguard Worker int vrend_renderer_export_ctx0_fence(uint32_t fence_id, int* out_fd);
387*bbecb9d1SAndroid Build Coastguard Worker
388*bbecb9d1SAndroid Build Coastguard Worker bool vrend_hw_switch_context(struct vrend_context *ctx, bool now);
389*bbecb9d1SAndroid Build Coastguard Worker uint32_t vrend_renderer_object_insert(struct vrend_context *ctx, void *data,
390*bbecb9d1SAndroid Build Coastguard Worker uint32_t handle, enum virgl_object_type type);
391*bbecb9d1SAndroid Build Coastguard Worker void vrend_renderer_object_destroy(struct vrend_context *ctx, uint32_t handle);
392*bbecb9d1SAndroid Build Coastguard Worker
393*bbecb9d1SAndroid Build Coastguard Worker int vrend_create_query(struct vrend_context *ctx, uint32_t handle,
394*bbecb9d1SAndroid Build Coastguard Worker uint32_t query_type, uint32_t query_index,
395*bbecb9d1SAndroid Build Coastguard Worker uint32_t res_handle, uint32_t offset);
396*bbecb9d1SAndroid Build Coastguard Worker
397*bbecb9d1SAndroid Build Coastguard Worker int vrend_begin_query(struct vrend_context *ctx, uint32_t handle);
398*bbecb9d1SAndroid Build Coastguard Worker int vrend_end_query(struct vrend_context *ctx, uint32_t handle);
399*bbecb9d1SAndroid Build Coastguard Worker void vrend_get_query_result(struct vrend_context *ctx, uint32_t handle,
400*bbecb9d1SAndroid Build Coastguard Worker uint32_t wait);
401*bbecb9d1SAndroid Build Coastguard Worker void vrend_get_query_result_qbo(struct vrend_context *ctx, uint32_t handle,
402*bbecb9d1SAndroid Build Coastguard Worker uint32_t qbo_handle,
403*bbecb9d1SAndroid Build Coastguard Worker uint32_t wait, uint32_t result_type, uint32_t offset,
404*bbecb9d1SAndroid Build Coastguard Worker int32_t index);
405*bbecb9d1SAndroid Build Coastguard Worker void vrend_render_condition(struct vrend_context *ctx,
406*bbecb9d1SAndroid Build Coastguard Worker uint32_t handle,
407*bbecb9d1SAndroid Build Coastguard Worker bool condtion,
408*bbecb9d1SAndroid Build Coastguard Worker uint mode);
409*bbecb9d1SAndroid Build Coastguard Worker void *vrend_renderer_get_cursor_contents(struct pipe_resource *pres,
410*bbecb9d1SAndroid Build Coastguard Worker uint32_t *width,
411*bbecb9d1SAndroid Build Coastguard Worker uint32_t *height);
412*bbecb9d1SAndroid Build Coastguard Worker
413*bbecb9d1SAndroid Build Coastguard Worker void vrend_renderer_fill_caps(uint32_t set, uint32_t version,
414*bbecb9d1SAndroid Build Coastguard Worker union virgl_caps *caps);
415*bbecb9d1SAndroid Build Coastguard Worker
416*bbecb9d1SAndroid Build Coastguard Worker GLint64 vrend_renderer_get_timestamp(void);
417*bbecb9d1SAndroid Build Coastguard Worker
418*bbecb9d1SAndroid Build Coastguard Worker void vrend_build_format_list_common(void);
419*bbecb9d1SAndroid Build Coastguard Worker void vrend_build_format_list_gl(void);
420*bbecb9d1SAndroid Build Coastguard Worker void vrend_build_format_list_gles(void);
421*bbecb9d1SAndroid Build Coastguard Worker void vrend_build_emulated_format_list_gles(void);
422*bbecb9d1SAndroid Build Coastguard Worker void vrend_check_texture_storage(struct vrend_format_table *table);
423*bbecb9d1SAndroid Build Coastguard Worker void vrend_check_texture_multisample(struct vrend_format_table *table,
424*bbecb9d1SAndroid Build Coastguard Worker bool enable_storage);
425*bbecb9d1SAndroid Build Coastguard Worker
426*bbecb9d1SAndroid Build Coastguard Worker struct vrend_resource *vrend_renderer_ctx_res_lookup(struct vrend_context *ctx,
427*bbecb9d1SAndroid Build Coastguard Worker int res_handle);
428*bbecb9d1SAndroid Build Coastguard Worker
429*bbecb9d1SAndroid Build Coastguard Worker void vrend_renderer_resource_destroy(struct vrend_resource *res);
430*bbecb9d1SAndroid Build Coastguard Worker
431*bbecb9d1SAndroid Build Coastguard Worker static inline void
vrend_resource_reference(struct vrend_resource ** ptr,struct vrend_resource * tex)432*bbecb9d1SAndroid Build Coastguard Worker vrend_resource_reference(struct vrend_resource **ptr, struct vrend_resource *tex)
433*bbecb9d1SAndroid Build Coastguard Worker {
434*bbecb9d1SAndroid Build Coastguard Worker struct vrend_resource *old_tex = *ptr;
435*bbecb9d1SAndroid Build Coastguard Worker
436*bbecb9d1SAndroid Build Coastguard Worker if (pipe_reference(&(*ptr)->base.reference, &tex->base.reference))
437*bbecb9d1SAndroid Build Coastguard Worker vrend_renderer_resource_destroy(old_tex);
438*bbecb9d1SAndroid Build Coastguard Worker *ptr = tex;
439*bbecb9d1SAndroid Build Coastguard Worker }
440*bbecb9d1SAndroid Build Coastguard Worker
441*bbecb9d1SAndroid Build Coastguard Worker void vrend_renderer_force_ctx_0(void);
442*bbecb9d1SAndroid Build Coastguard Worker
443*bbecb9d1SAndroid Build Coastguard Worker void vrend_renderer_get_rect(struct pipe_resource *pres,
444*bbecb9d1SAndroid Build Coastguard Worker const struct iovec *iov, unsigned int num_iovs,
445*bbecb9d1SAndroid Build Coastguard Worker uint32_t offset,
446*bbecb9d1SAndroid Build Coastguard Worker int x, int y, int width, int height);
447*bbecb9d1SAndroid Build Coastguard Worker
448*bbecb9d1SAndroid Build Coastguard Worker void vrend_renderer_attach_res_ctx(struct vrend_context *ctx,
449*bbecb9d1SAndroid Build Coastguard Worker struct virgl_resource *res);
450*bbecb9d1SAndroid Build Coastguard Worker void vrend_renderer_detach_res_ctx(struct vrend_context *ctx,
451*bbecb9d1SAndroid Build Coastguard Worker struct virgl_resource *res);
452*bbecb9d1SAndroid Build Coastguard Worker
453*bbecb9d1SAndroid Build Coastguard Worker struct vrend_context_tweaks *vrend_get_context_tweaks(struct vrend_context *ctx);
454*bbecb9d1SAndroid Build Coastguard Worker
455*bbecb9d1SAndroid Build Coastguard Worker struct vrend_renderer_resource_info {
456*bbecb9d1SAndroid Build Coastguard Worker uint32_t handle;
457*bbecb9d1SAndroid Build Coastguard Worker uint32_t format;
458*bbecb9d1SAndroid Build Coastguard Worker uint32_t width;
459*bbecb9d1SAndroid Build Coastguard Worker uint32_t height;
460*bbecb9d1SAndroid Build Coastguard Worker uint32_t depth;
461*bbecb9d1SAndroid Build Coastguard Worker uint32_t flags;
462*bbecb9d1SAndroid Build Coastguard Worker uint32_t tex_id;
463*bbecb9d1SAndroid Build Coastguard Worker uint32_t stride;
464*bbecb9d1SAndroid Build Coastguard Worker };
465*bbecb9d1SAndroid Build Coastguard Worker
466*bbecb9d1SAndroid Build Coastguard Worker struct vrend_blit_info {
467*bbecb9d1SAndroid Build Coastguard Worker const struct pipe_blit_info b;
468*bbecb9d1SAndroid Build Coastguard Worker GLuint src_view;
469*bbecb9d1SAndroid Build Coastguard Worker GLuint dst_view;
470*bbecb9d1SAndroid Build Coastguard Worker uint8_t swizzle[4];
471*bbecb9d1SAndroid Build Coastguard Worker int src_y1, src_y2, dst_y1, dst_y2;
472*bbecb9d1SAndroid Build Coastguard Worker GLenum gl_filter;
473*bbecb9d1SAndroid Build Coastguard Worker bool needs_swizzle;
474*bbecb9d1SAndroid Build Coastguard Worker bool can_fbo_blit;
475*bbecb9d1SAndroid Build Coastguard Worker bool has_texture_srgb_decode;
476*bbecb9d1SAndroid Build Coastguard Worker bool has_srgb_write_control;
477*bbecb9d1SAndroid Build Coastguard Worker bool needs_manual_srgb_decode;
478*bbecb9d1SAndroid Build Coastguard Worker bool needs_manual_srgb_encode;
479*bbecb9d1SAndroid Build Coastguard Worker };
480*bbecb9d1SAndroid Build Coastguard Worker
481*bbecb9d1SAndroid Build Coastguard Worker void vrend_renderer_resource_get_info(struct pipe_resource *pres,
482*bbecb9d1SAndroid Build Coastguard Worker struct vrend_renderer_resource_info *info);
483*bbecb9d1SAndroid Build Coastguard Worker
484*bbecb9d1SAndroid Build Coastguard Worker void vrend_renderer_get_cap_set(uint32_t cap_set, uint32_t *max_ver,
485*bbecb9d1SAndroid Build Coastguard Worker uint32_t *max_size);
486*bbecb9d1SAndroid Build Coastguard Worker
487*bbecb9d1SAndroid Build Coastguard Worker void vrend_renderer_create_sub_ctx(struct vrend_context *ctx, int sub_ctx_id);
488*bbecb9d1SAndroid Build Coastguard Worker void vrend_renderer_destroy_sub_ctx(struct vrend_context *ctx, int sub_ctx_id);
489*bbecb9d1SAndroid Build Coastguard Worker void vrend_renderer_set_sub_ctx(struct vrend_context *ctx, int sub_ctx_id);
490*bbecb9d1SAndroid Build Coastguard Worker
491*bbecb9d1SAndroid Build Coastguard Worker void vrend_report_context_error_internal(const char *fname, struct vrend_context *ctx,
492*bbecb9d1SAndroid Build Coastguard Worker enum virgl_ctx_errors error, uint32_t value);
493*bbecb9d1SAndroid Build Coastguard Worker
494*bbecb9d1SAndroid Build Coastguard Worker #define vrend_report_context_error(ctx, error, value) \
495*bbecb9d1SAndroid Build Coastguard Worker vrend_report_context_error_internal(__func__, ctx, error, value)
496*bbecb9d1SAndroid Build Coastguard Worker
497*bbecb9d1SAndroid Build Coastguard Worker #define vrend_report_buffer_error(ctx, cmd) \
498*bbecb9d1SAndroid Build Coastguard Worker vrend_report_context_error(ctx, VIRGL_ERROR_CTX_ILLEGAL_CMD_BUFFER, cmd)
499*bbecb9d1SAndroid Build Coastguard Worker
500*bbecb9d1SAndroid Build Coastguard Worker void vrend_fb_bind_texture(struct vrend_resource *res,
501*bbecb9d1SAndroid Build Coastguard Worker int idx,
502*bbecb9d1SAndroid Build Coastguard Worker uint32_t level, uint32_t layer);
503*bbecb9d1SAndroid Build Coastguard Worker bool vrend_format_is_emulated_alpha(enum virgl_formats format);
504*bbecb9d1SAndroid Build Coastguard Worker bool vrend_format_is_bgra(enum virgl_formats format);
505*bbecb9d1SAndroid Build Coastguard Worker
506*bbecb9d1SAndroid Build Coastguard Worker #define VREND_COPY_COMPAT_FLAG_ALLOW_COMPRESSED (1u << 0)
507*bbecb9d1SAndroid Build Coastguard Worker #define VREND_COPY_COMPAT_FLAG_ONE_IS_EGL_IMAGE (1u << 1)
508*bbecb9d1SAndroid Build Coastguard Worker boolean format_is_copy_compatible(enum virgl_formats src, enum virgl_formats dst,
509*bbecb9d1SAndroid Build Coastguard Worker unsigned int flags);
510*bbecb9d1SAndroid Build Coastguard Worker
511*bbecb9d1SAndroid Build Coastguard Worker void vrend_renderer_prepare_reset(void);
512*bbecb9d1SAndroid Build Coastguard Worker void vrend_renderer_reset(void);
513*bbecb9d1SAndroid Build Coastguard Worker void vrend_renderer_poll(void);
514*bbecb9d1SAndroid Build Coastguard Worker int vrend_renderer_get_poll_fd(void);
515*bbecb9d1SAndroid Build Coastguard Worker
516*bbecb9d1SAndroid Build Coastguard Worker unsigned vrend_context_has_debug_flag(const struct vrend_context *ctx,
517*bbecb9d1SAndroid Build Coastguard Worker enum virgl_debug_flags flag);
518*bbecb9d1SAndroid Build Coastguard Worker
519*bbecb9d1SAndroid Build Coastguard Worker unsigned vrend_renderer_query_multisample_caps(unsigned max_samples,
520*bbecb9d1SAndroid Build Coastguard Worker struct virgl_caps_v2 *caps);
521*bbecb9d1SAndroid Build Coastguard Worker
522*bbecb9d1SAndroid Build Coastguard Worker struct gl_version {
523*bbecb9d1SAndroid Build Coastguard Worker uint32_t major;
524*bbecb9d1SAndroid Build Coastguard Worker uint32_t minor;
525*bbecb9d1SAndroid Build Coastguard Worker };
526*bbecb9d1SAndroid Build Coastguard Worker
527*bbecb9d1SAndroid Build Coastguard Worker static const struct gl_version gl_versions[] = { {4,6}, {4,5}, {4,4}, {4,3}, {4,2}, {4,1}, {4,0},
528*bbecb9d1SAndroid Build Coastguard Worker {3,3}, {3,2}, {3,1}, {3,0} };
529*bbecb9d1SAndroid Build Coastguard Worker
530*bbecb9d1SAndroid Build Coastguard Worker extern const struct vrend_if_cbs *vrend_clicbs;
531*bbecb9d1SAndroid Build Coastguard Worker
532*bbecb9d1SAndroid Build Coastguard Worker int vrend_renderer_export_query(struct pipe_resource *pres,
533*bbecb9d1SAndroid Build Coastguard Worker struct virgl_renderer_export_query *export_query);
534*bbecb9d1SAndroid Build Coastguard Worker
535*bbecb9d1SAndroid Build Coastguard Worker void vrend_sync_make_current(virgl_gl_context);
536*bbecb9d1SAndroid Build Coastguard Worker
537*bbecb9d1SAndroid Build Coastguard Worker int
538*bbecb9d1SAndroid Build Coastguard Worker vrend_renderer_pipe_resource_create(struct vrend_context *ctx, uint32_t blob_id,
539*bbecb9d1SAndroid Build Coastguard Worker const struct vrend_renderer_resource_create_args *args);
540*bbecb9d1SAndroid Build Coastguard Worker
541*bbecb9d1SAndroid Build Coastguard Worker struct pipe_resource *vrend_get_blob_pipe(struct vrend_context *ctx, uint64_t blob_id);
542*bbecb9d1SAndroid Build Coastguard Worker
543*bbecb9d1SAndroid Build Coastguard Worker int
544*bbecb9d1SAndroid Build Coastguard Worker vrend_renderer_pipe_resource_set_type(struct vrend_context *ctx,
545*bbecb9d1SAndroid Build Coastguard Worker uint32_t res_id,
546*bbecb9d1SAndroid Build Coastguard Worker const struct vrend_renderer_resource_set_type_args *args);
547*bbecb9d1SAndroid Build Coastguard Worker
548*bbecb9d1SAndroid Build Coastguard Worker uint32_t vrend_renderer_resource_get_map_info(struct pipe_resource *pres);
549*bbecb9d1SAndroid Build Coastguard Worker
550*bbecb9d1SAndroid Build Coastguard Worker int vrend_renderer_resource_map(struct pipe_resource *pres, void **map, uint64_t *out_size);
551*bbecb9d1SAndroid Build Coastguard Worker
552*bbecb9d1SAndroid Build Coastguard Worker int vrend_renderer_resource_unmap(struct pipe_resource *pres);
553*bbecb9d1SAndroid Build Coastguard Worker
554*bbecb9d1SAndroid Build Coastguard Worker void vrend_renderer_get_meminfo(struct vrend_context *ctx, uint32_t res_handle);
555*bbecb9d1SAndroid Build Coastguard Worker
556*bbecb9d1SAndroid Build Coastguard Worker void vrend_context_emit_string_marker(struct vrend_context *ctx, GLsizei length, const char * message);
557*bbecb9d1SAndroid Build Coastguard Worker
558*bbecb9d1SAndroid Build Coastguard Worker struct vrend_video_context *vrend_context_get_video_ctx(struct vrend_context *ctx);
559*bbecb9d1SAndroid Build Coastguard Worker
560*bbecb9d1SAndroid Build Coastguard Worker #endif
561