Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mesa
Path: blob/21.2-virgl/src/gallium/drivers/virgl/virgl_encode.h
4570 views
1
/*
2
* Copyright 2014, 2015 Red Hat.
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
* on the rights to use, copy, modify, merge, publish, distribute, sub
8
* license, and/or sell copies of the Software, and to permit persons to whom
9
* the 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 NON-INFRINGEMENT. IN NO EVENT SHALL
18
* THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
19
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
20
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
21
* USE OR OTHER DEALINGS IN THE SOFTWARE.
22
*/
23
#ifndef VIRGL_ENCODE_H
24
#define VIRGL_ENCODE_H
25
26
#include "pipe/p_defines.h"
27
#include "pipe/p_state.h"
28
29
#include "virgl_winsys.h"
30
#include "virtio-gpu/virgl_protocol.h"
31
32
struct tgsi_token;
33
34
struct virgl_context;
35
struct virgl_resource;
36
struct virgl_screen;
37
struct virgl_transfer;
38
struct virgl_sampler_view;
39
40
struct virgl_surface {
41
struct pipe_surface base;
42
uint32_t handle;
43
};
44
45
struct virgl_indexbuf {
46
unsigned offset;
47
unsigned index_size; /**< size of an index, in bytes */
48
struct pipe_resource *buffer; /**< the actual buffer */
49
const void *user_buffer; /**< pointer to a user buffer if buffer == NULL */
50
};
51
52
static inline struct virgl_surface *virgl_surface(struct pipe_surface *surf)
53
{
54
return (struct virgl_surface *)surf;
55
}
56
57
static inline void virgl_encoder_write_dword(struct virgl_cmd_buf *state,
58
uint32_t dword)
59
{
60
state->buf[state->cdw++] = dword;
61
}
62
63
static inline void virgl_encoder_write_qword(struct virgl_cmd_buf *state,
64
uint64_t qword)
65
{
66
memcpy(state->buf + state->cdw, &qword, sizeof(uint64_t));
67
state->cdw += 2;
68
}
69
70
static inline void virgl_encoder_write_block(struct virgl_cmd_buf *state,
71
const uint8_t *ptr, uint32_t len)
72
{
73
int x;
74
memcpy(state->buf + state->cdw, ptr, len);
75
x = (len % 4);
76
if (x) {
77
uint8_t *mp = (uint8_t *)(state->buf + state->cdw);
78
mp += len;
79
memset(mp, 0, x);
80
}
81
state->cdw += (len + 3) / 4;
82
}
83
84
extern int virgl_encode_blend_state(struct virgl_context *ctx,
85
uint32_t handle,
86
const struct pipe_blend_state *blend_state);
87
extern int virgl_encode_rasterizer_state(struct virgl_context *ctx,
88
uint32_t handle,
89
const struct pipe_rasterizer_state *state);
90
91
extern int virgl_encode_shader_state(struct virgl_context *ctx,
92
uint32_t handle,
93
uint32_t type,
94
const struct pipe_stream_output_info *so_info,
95
uint32_t cs_req_local_mem,
96
const struct tgsi_token *tokens);
97
98
int virgl_encode_stream_output_info(struct virgl_context *ctx,
99
uint32_t handle,
100
uint32_t type,
101
const struct pipe_shader_state *shader);
102
103
int virgl_encoder_set_so_targets(struct virgl_context *ctx,
104
unsigned num_targets,
105
struct pipe_stream_output_target **targets,
106
unsigned append_bitmask);
107
108
int virgl_encoder_create_so_target(struct virgl_context *ctx,
109
uint32_t handle,
110
struct virgl_resource *res,
111
unsigned buffer_offset,
112
unsigned buffer_size);
113
114
int virgl_encode_clear(struct virgl_context *ctx,
115
unsigned buffers,
116
const union pipe_color_union *color,
117
double depth, unsigned stencil);
118
119
int virgl_encode_clear_texture(struct virgl_context *ctx,
120
struct virgl_resource *res,
121
unsigned int level,
122
const struct pipe_box *box,
123
const void *data);
124
125
int virgl_encode_bind_object(struct virgl_context *ctx,
126
uint32_t handle, uint32_t object);
127
int virgl_encode_delete_object(struct virgl_context *ctx,
128
uint32_t handle, uint32_t object);
129
130
int virgl_encoder_set_framebuffer_state(struct virgl_context *ctx,
131
const struct pipe_framebuffer_state *state);
132
int virgl_encoder_set_viewport_states(struct virgl_context *ctx,
133
int start_slot,
134
int num_viewports,
135
const struct pipe_viewport_state *states);
136
137
int virgl_encoder_draw_vbo(struct virgl_context *ctx,
138
const struct pipe_draw_info *info,
139
unsigned drawid_offset,
140
const struct pipe_draw_indirect_info *indirect,
141
const struct pipe_draw_start_count_bias *draw);
142
143
144
int virgl_encoder_create_surface(struct virgl_context *ctx,
145
uint32_t handle,
146
struct virgl_resource *res,
147
const struct pipe_surface *templat);
148
149
int virgl_encoder_flush_frontbuffer(struct virgl_context *ctx,
150
struct virgl_resource *res);
151
152
int virgl_encoder_create_vertex_elements(struct virgl_context *ctx,
153
uint32_t handle,
154
unsigned num_elements,
155
const struct pipe_vertex_element *element);
156
157
int virgl_encoder_set_vertex_buffers(struct virgl_context *ctx,
158
unsigned num_buffers,
159
const struct pipe_vertex_buffer *buffers);
160
161
162
int virgl_encoder_inline_write(struct virgl_context *ctx,
163
struct virgl_resource *res,
164
unsigned level, unsigned usage,
165
const struct pipe_box *box,
166
const void *data, unsigned stride,
167
unsigned layer_stride);
168
int virgl_encode_sampler_state(struct virgl_context *ctx,
169
uint32_t handle,
170
const struct pipe_sampler_state *state);
171
int virgl_encode_sampler_view(struct virgl_context *ctx,
172
uint32_t handle,
173
struct virgl_resource *res,
174
const struct pipe_sampler_view *state);
175
176
int virgl_encode_set_sampler_views(struct virgl_context *ctx,
177
uint32_t shader_type,
178
uint32_t start_slot,
179
uint32_t num_views,
180
struct virgl_sampler_view **views);
181
182
int virgl_encode_bind_sampler_states(struct virgl_context *ctx,
183
uint32_t shader_type,
184
uint32_t start_slot,
185
uint32_t num_handles,
186
uint32_t *handles);
187
188
int virgl_encoder_set_index_buffer(struct virgl_context *ctx,
189
const struct virgl_indexbuf *ib);
190
191
uint32_t virgl_object_assign_handle(void);
192
193
int virgl_encoder_write_constant_buffer(struct virgl_context *ctx,
194
uint32_t shader,
195
uint32_t index,
196
uint32_t size,
197
const void *data);
198
199
int virgl_encoder_set_uniform_buffer(struct virgl_context *ctx,
200
uint32_t shader,
201
uint32_t index,
202
uint32_t offset,
203
uint32_t length,
204
struct virgl_resource *res);
205
int virgl_encode_dsa_state(struct virgl_context *ctx,
206
uint32_t handle,
207
const struct pipe_depth_stencil_alpha_state *dsa_state);
208
209
int virgl_encoder_set_stencil_ref(struct virgl_context *ctx,
210
const struct pipe_stencil_ref *ref);
211
212
int virgl_encoder_set_blend_color(struct virgl_context *ctx,
213
const struct pipe_blend_color *color);
214
215
int virgl_encoder_set_scissor_state(struct virgl_context *ctx,
216
unsigned start_slot,
217
int num_scissors,
218
const struct pipe_scissor_state *ss);
219
220
void virgl_encoder_set_polygon_stipple(struct virgl_context *ctx,
221
const struct pipe_poly_stipple *ps);
222
223
void virgl_encoder_set_sample_mask(struct virgl_context *ctx,
224
unsigned sample_mask);
225
226
void virgl_encoder_set_min_samples(struct virgl_context *ctx,
227
unsigned min_samples);
228
229
void virgl_encoder_set_clip_state(struct virgl_context *ctx,
230
const struct pipe_clip_state *clip);
231
232
int virgl_encode_resource_copy_region(struct virgl_context *ctx,
233
struct virgl_resource *dst_res,
234
unsigned dst_level,
235
unsigned dstx, unsigned dsty, unsigned dstz,
236
struct virgl_resource *src_res,
237
unsigned src_level,
238
const struct pipe_box *src_box);
239
240
int virgl_encode_blit(struct virgl_context *ctx,
241
struct virgl_resource *dst_res,
242
struct virgl_resource *src_res,
243
const struct pipe_blit_info *blit);
244
245
int virgl_encoder_create_query(struct virgl_context *ctx,
246
uint32_t handle,
247
uint query_type,
248
uint query_index,
249
struct virgl_resource *res,
250
uint32_t offset);
251
252
int virgl_encoder_begin_query(struct virgl_context *ctx,
253
uint32_t handle);
254
int virgl_encoder_end_query(struct virgl_context *ctx,
255
uint32_t handle);
256
int virgl_encoder_get_query_result(struct virgl_context *ctx,
257
uint32_t handle, boolean wait);
258
259
int virgl_encoder_render_condition(struct virgl_context *ctx,
260
uint32_t handle, boolean condition,
261
enum pipe_render_cond_flag mode);
262
263
int virgl_encoder_set_sub_ctx(struct virgl_context *ctx, uint32_t sub_ctx_id);
264
int virgl_encoder_create_sub_ctx(struct virgl_context *ctx, uint32_t sub_ctx_id);
265
int virgl_encoder_destroy_sub_ctx(struct virgl_context *ctx, uint32_t sub_ctx_id);
266
267
int virgl_encode_bind_shader(struct virgl_context *ctx,
268
uint32_t handle, uint32_t type);
269
270
int virgl_encode_set_tess_state(struct virgl_context *ctx,
271
const float outer[4],
272
const float inner[2]);
273
274
int virgl_encode_set_shader_buffers(struct virgl_context *ctx,
275
enum pipe_shader_type shader,
276
unsigned start_slot, unsigned count,
277
const struct pipe_shader_buffer *buffers);
278
int virgl_encode_set_shader_images(struct virgl_context *ctx,
279
enum pipe_shader_type shader,
280
unsigned start_slot, unsigned count,
281
const struct pipe_image_view *images);
282
int virgl_encode_set_hw_atomic_buffers(struct virgl_context *ctx,
283
unsigned start_slot, unsigned count,
284
const struct pipe_shader_buffer *buffers);
285
int virgl_encode_memory_barrier(struct virgl_context *ctx,
286
unsigned flags);
287
int virgl_encode_launch_grid(struct virgl_context *ctx,
288
const struct pipe_grid_info *grid_info);
289
int virgl_encode_texture_barrier(struct virgl_context *ctx,
290
unsigned flags);
291
292
int virgl_encode_host_debug_flagstring(struct virgl_context *ctx,
293
const char *envname);
294
295
int virgl_encode_get_query_result_qbo(struct virgl_context *ctx,
296
uint32_t handle,
297
struct virgl_resource *res, boolean wait,
298
uint32_t result_type,
299
uint32_t offset,
300
uint32_t index);
301
302
void virgl_encode_transfer(struct virgl_screen *vs, struct virgl_cmd_buf *buf,
303
struct virgl_transfer *trans, uint32_t direction);
304
305
void virgl_encode_copy_transfer(struct virgl_context *ctx,
306
struct virgl_transfer *trans);
307
308
void virgl_encode_end_transfers(struct virgl_cmd_buf *buf);
309
310
int virgl_encode_tweak(struct virgl_context *ctx, enum vrend_tweak_type tweak, uint32_t value);
311
312
void virgl_encode_get_memory_info(struct virgl_context *ctx, struct virgl_resource *res);
313
314
void virgl_encode_emit_string_marker(struct virgl_context *ctx, const char *message,
315
int len);
316
317
enum virgl_formats pipe_to_virgl_format(enum pipe_format format);
318
#endif
319
320