Lines Matching refs:vctx
66 virgl_can_rebind_resource(struct virgl_context *vctx,
86 virgl_rebind_resource(struct virgl_context *vctx,
99 assert(virgl_can_rebind_resource(vctx, res) &&
103 for (i = 0; i < vctx->num_vertex_buffers; i++) {
104 if (vctx->vertex_buffer[i].buffer.resource == res) {
105 vctx->vertex_array_dirty = true;
112 uint32_t remaining_mask = vctx->atomic_buffer_enabled_mask;
115 if (vctx->atomic_buffers[i].buffer == res) {
116 const struct pipe_shader_buffer *abo = &vctx->atomic_buffers[i];
117 virgl_encode_set_hw_atomic_buffers(vctx, i, 1, abo);
129 &vctx->shader_bindings[shader_type];
137 virgl_encoder_set_uniform_buffer(vctx, shader_type, i,
151 virgl_encode_set_shader_buffers(vctx, shader_type, i, 1,
163 virgl_encode_set_shader_images(vctx, shader_type, i, 1,
172 static void virgl_attach_res_framebuffer(struct virgl_context *vctx)
174 struct virgl_winsys *vws = virgl_screen(vctx->base.screen)->vws;
179 surf = vctx->framebuffer.zsbuf;
183 vws->emit_res(vws, vctx->cbuf, res->hw_res, FALSE);
187 for (i = 0; i < vctx->framebuffer.nr_cbufs; i++) {
188 surf = vctx->framebuffer.cbufs[i];
192 vws->emit_res(vws, vctx->cbuf, res->hw_res, FALSE);
199 static void virgl_attach_res_sampler_views(struct virgl_context *vctx,
202 struct virgl_winsys *vws = virgl_screen(vctx->base.screen)->vws;
204 &vctx->shader_bindings[shader_type];
209 vws->emit_res(vws, vctx->cbuf, res->hw_res, FALSE);
214 static void virgl_attach_res_vertex_buffers(struct virgl_context *vctx)
216 struct virgl_winsys *vws = virgl_screen(vctx->base.screen)->vws;
220 for (i = 0; i < vctx->num_vertex_buffers; i++) {
221 res = virgl_resource(vctx->vertex_buffer[i].buffer.resource);
223 vws->emit_res(vws, vctx->cbuf, res->hw_res, FALSE);
227 static void virgl_attach_res_index_buffer(struct virgl_context *vctx,
230 struct virgl_winsys *vws = virgl_screen(vctx->base.screen)->vws;
235 vws->emit_res(vws, vctx->cbuf, res->hw_res, FALSE);
238 static void virgl_attach_res_so_targets(struct virgl_context *vctx)
240 struct virgl_winsys *vws = virgl_screen(vctx->base.screen)->vws;
244 for (i = 0; i < vctx->num_so_targets; i++) {
245 res = virgl_resource(vctx->so_targets[i].base.buffer);
247 vws->emit_res(vws, vctx->cbuf, res->hw_res, FALSE);
251 static void virgl_attach_res_uniform_buffers(struct virgl_context *vctx,
254 struct virgl_winsys *vws = virgl_screen(vctx->base.screen)->vws;
256 &vctx->shader_bindings[shader_type];
264 vws->emit_res(vws, vctx->cbuf, res->hw_res, FALSE);
268 static void virgl_attach_res_shader_buffers(struct virgl_context *vctx,
271 struct virgl_winsys *vws = virgl_screen(vctx->base.screen)->vws;
273 &vctx->shader_bindings[shader_type];
281 vws->emit_res(vws, vctx->cbuf, res->hw_res, FALSE);
285 static void virgl_attach_res_shader_images(struct virgl_context *vctx,
288 struct virgl_winsys *vws = virgl_screen(vctx->base.screen)->vws;
290 &vctx->shader_bindings[shader_type];
298 vws->emit_res(vws, vctx->cbuf, res->hw_res, FALSE);
302 static void virgl_attach_res_atomic_buffers(struct virgl_context *vctx)
304 struct virgl_winsys *vws = virgl_screen(vctx->base.screen)->vws;
305 uint32_t remaining_mask = vctx->atomic_buffer_enabled_mask;
310 res = virgl_resource(vctx->atomic_buffers[i].buffer);
312 vws->emit_res(vws, vctx->cbuf, res->hw_res, FALSE);
320 static void virgl_reemit_draw_resources(struct virgl_context *vctx)
326 virgl_attach_res_framebuffer(vctx);
329 virgl_attach_res_sampler_views(vctx, shader_type);
330 virgl_attach_res_uniform_buffers(vctx, shader_type);
331 virgl_attach_res_shader_buffers(vctx, shader_type);
332 virgl_attach_res_shader_images(vctx, shader_type);
334 virgl_attach_res_atomic_buffers(vctx);
335 virgl_attach_res_vertex_buffers(vctx);
336 virgl_attach_res_so_targets(vctx);
339 static void virgl_reemit_compute_resources(struct virgl_context *vctx)
341 virgl_attach_res_sampler_views(vctx, PIPE_SHADER_COMPUTE);
342 virgl_attach_res_uniform_buffers(vctx, PIPE_SHADER_COMPUTE);
343 virgl_attach_res_shader_buffers(vctx, PIPE_SHADER_COMPUTE);
344 virgl_attach_res_shader_images(vctx, PIPE_SHADER_COMPUTE);
346 virgl_attach_res_atomic_buffers(vctx);
353 struct virgl_context *vctx = virgl_context(ctx);
385 virgl_encoder_create_surface(vctx, handle, res, &surf->base);
393 struct virgl_context *vctx = virgl_context(ctx);
397 virgl_encode_delete_object(vctx, surf->handle, VIRGL_OBJECT_SURFACE);
404 struct virgl_context *vctx = virgl_context(ctx);
408 virgl_encode_blend_state(vctx, handle, blend_state);
416 struct virgl_context *vctx = virgl_context(ctx);
418 virgl_encode_bind_object(vctx, handle, VIRGL_OBJECT_BLEND);
424 struct virgl_context *vctx = virgl_context(ctx);
426 virgl_encode_delete_object(vctx, handle, VIRGL_OBJECT_BLEND);
432 struct virgl_context *vctx = virgl_context(ctx);
436 virgl_encode_dsa_state(vctx, handle, blend_state);
443 struct virgl_context *vctx = virgl_context(ctx);
445 virgl_encode_bind_object(vctx, handle, VIRGL_OBJECT_DSA);
451 struct virgl_context *vctx = virgl_context(ctx);
453 virgl_encode_delete_object(vctx, handle, VIRGL_OBJECT_DSA);
459 struct virgl_context *vctx = virgl_context(ctx);
470 virgl_encode_rasterizer_state(vctx, vrs->handle, rs_state);
477 struct virgl_context *vctx = virgl_context(ctx);
481 vctx->rs_state = *vrs;
484 virgl_encode_bind_object(vctx, handle, VIRGL_OBJECT_RASTERIZER);
490 struct virgl_context *vctx = virgl_context(ctx);
492 virgl_encode_delete_object(vctx, vrs->handle, VIRGL_OBJECT_RASTERIZER);
499 struct virgl_context *vctx = virgl_context(ctx);
501 vctx->framebuffer = *state;
502 virgl_encoder_set_framebuffer_state(vctx, state);
503 virgl_attach_res_framebuffer(vctx);
511 struct virgl_context *vctx = virgl_context(ctx);
512 virgl_encoder_set_viewport_states(vctx, start_slot, num_viewports, state);
520 struct virgl_context *vctx = virgl_context(ctx);
542 virgl_encoder_create_vertex_elements(vctx, state->handle,
550 struct virgl_context *vctx = virgl_context(ctx);
553 virgl_encode_delete_object(vctx, state->handle, VIRGL_OBJECT_VERTEX_ELEMENTS);
560 struct virgl_context *vctx = virgl_context(ctx);
563 vctx->vertex_elements = state;
564 virgl_encode_bind_object(vctx, state ? state->handle : 0,
566 vctx->vertex_array_dirty = TRUE;
576 struct virgl_context *vctx = virgl_context(ctx);
578 util_set_vertex_buffers_count(vctx->vertex_buffer,
579 &vctx->num_vertex_buffers,
593 vctx->vertex_array_dirty = TRUE;
596 static void virgl_hw_set_vertex_buffers(struct virgl_context *vctx)
598 if (vctx->vertex_array_dirty) {
599 struct virgl_vertex_elements_state *ve = vctx->vertex_elements;
604 vertex_buffers[i] = vctx->vertex_buffer[ve->binding_map[i]];
606 virgl_encoder_set_vertex_buffers(vctx, ve->num_bindings, vertex_buffers);
608 virgl_encoder_set_vertex_buffers(vctx, vctx->num_vertex_buffers, vctx->vertex_buffer);
610 virgl_attach_res_vertex_buffers(vctx);
612 vctx->vertex_array_dirty = FALSE;
619 struct virgl_context *vctx = virgl_context(ctx);
620 virgl_encoder_set_stencil_ref(vctx, &ref);
626 struct virgl_context *vctx = virgl_context(ctx);
627 virgl_encoder_set_blend_color(vctx, color);
630 static void virgl_hw_set_index_buffer(struct virgl_context *vctx,
633 virgl_encoder_set_index_buffer(vctx, ib);
634 virgl_attach_res_index_buffer(vctx, ib);
642 struct virgl_context *vctx = virgl_context(ctx);
644 &vctx->shader_bindings[shader];
650 virgl_encoder_set_uniform_buffer(vctx, shader, index,
666 virgl_encoder_write_constant_buffer(vctx, shader, index,
679 struct virgl_context *vctx = virgl_context(ctx);
697 ntt_tokens = tokens = nir_to_tgsi_options(s, vctx->base.screen, &options); /* takes ownership */
702 new_tokens = virgl_tgsi_transform((struct virgl_screen *)vctx->base.screen, tokens, is_separable);
708 ret = virgl_encode_shader_state(vctx, handle, type,
756 struct virgl_context *vctx = virgl_context(ctx);
758 virgl_encode_delete_object(vctx, handle, VIRGL_OBJECT_SHADER);
766 struct virgl_context *vctx = virgl_context(ctx);
768 virgl_encode_delete_object(vctx, handle, VIRGL_OBJECT_SHADER);
776 struct virgl_context *vctx = virgl_context(ctx);
778 virgl_encode_delete_object(vctx, handle, VIRGL_OBJECT_SHADER);
786 struct virgl_context *vctx = virgl_context(ctx);
788 virgl_encode_delete_object(vctx, handle, VIRGL_OBJECT_SHADER);
796 struct virgl_context *vctx = virgl_context(ctx);
798 virgl_encode_delete_object(vctx, handle, VIRGL_OBJECT_SHADER);
805 struct virgl_context *vctx = virgl_context(ctx);
807 virgl_encode_bind_shader(vctx, handle, PIPE_SHADER_VERTEX);
814 struct virgl_context *vctx = virgl_context(ctx);
816 virgl_encode_bind_shader(vctx, handle, PIPE_SHADER_TESS_CTRL);
823 struct virgl_context *vctx = virgl_context(ctx);
825 virgl_encode_bind_shader(vctx, handle, PIPE_SHADER_TESS_EVAL);
832 struct virgl_context *vctx = virgl_context(ctx);
834 virgl_encode_bind_shader(vctx, handle, PIPE_SHADER_GEOMETRY);
842 struct virgl_context *vctx = virgl_context(ctx);
844 virgl_encode_bind_shader(vctx, handle, PIPE_SHADER_FRAGMENT);
853 struct virgl_context *vctx = virgl_context(ctx);
855 if (!vctx->num_draws)
856 virgl_reemit_draw_resources(vctx);
857 vctx->num_draws++;
859 virgl_encode_clear(vctx, buffers, color, depth, stencil);
868 struct virgl_context *vctx = virgl_context(ctx);
871 virgl_encode_clear_texture(vctx, vres, level, box, data);
895 struct virgl_context *vctx = virgl_context(ctx);
906 util_primconvert_save_rasterizer_state(vctx->primconvert, &vctx->rs_state.rs);
907 util_primconvert_draw_vbo(vctx->primconvert, dinfo, drawid_offset, indirect, draws, num_draws);
918 u_upload_data(vctx->uploader, start_offset,
927 if (!vctx->num_draws)
928 virgl_reemit_draw_resources(vctx);
929 vctx->num_draws++;
931 virgl_hw_set_vertex_buffers(vctx);
933 virgl_hw_set_index_buffer(vctx, &ib);
935 virgl_encoder_draw_vbo(vctx, &info, drawid_offset, indirect, &draws[0]);
996 struct virgl_context *vctx = virgl_context(ctx);
998 virgl_flush_eq(vctx, vctx, fence);
1005 struct virgl_context *vctx = virgl_context(ctx);
1019 virgl_encode_sampler_view(vctx, handle, res, state);
1039 struct virgl_context *vctx = virgl_context(ctx);
1041 &vctx->shader_bindings[shader_type];
1060 virgl_encode_set_sampler_views(vctx, shader_type,
1062 virgl_attach_res_sampler_views(vctx, shader_type);
1073 struct virgl_context *vctx = virgl_context(ctx);
1079 virgl_encode_texture_barrier(vctx, flags);
1085 struct virgl_context *vctx = virgl_context(ctx);
1088 virgl_encode_delete_object(vctx, grview->handle, VIRGL_OBJECT_SAMPLER_VIEW);
1096 struct virgl_context *vctx = virgl_context(ctx);
1101 virgl_encode_sampler_state(vctx, handle, state);
1108 struct virgl_context *vctx = virgl_context(ctx);
1111 virgl_encode_delete_object(vctx, handle, VIRGL_OBJECT_SAMPLER_STATE);
1120 struct virgl_context *vctx = virgl_context(ctx);
1126 virgl_encode_bind_sampler_states(vctx, shader, start_slot, num_samplers, handles);
1132 struct virgl_context *vctx = virgl_context(ctx);
1133 virgl_encoder_set_polygon_stipple(vctx, ps);
1141 struct virgl_context *vctx = virgl_context(ctx);
1142 virgl_encoder_set_scissor_state(vctx, start_slot, num_scissor, ss);
1148 struct virgl_context *vctx = virgl_context(ctx);
1149 virgl_encoder_set_sample_mask(vctx, sample_mask);
1155 struct virgl_context *vctx = virgl_context(ctx);
1160 virgl_encoder_set_min_samples(vctx, min_samples);
1166 struct virgl_context *vctx = virgl_context(ctx);
1167 virgl_encoder_set_clip_state(vctx, clip);
1174 struct virgl_context *vctx = virgl_context(ctx);
1179 virgl_encode_set_tess_state(vctx, default_outer_level, default_inner_level);
1184 struct virgl_context *vctx = virgl_context(ctx);
1186 vctx->patch_vertices = patch_vertices;
1197 struct virgl_context *vctx = virgl_context(ctx);
1205 virgl_encode_resource_copy_region(vctx, dres,
1220 struct virgl_context *vctx = virgl_context(ctx);
1230 virgl_encode_blit(vctx, dres, sres,
1239 struct virgl_context *vctx = virgl_context(ctx);
1241 vctx->atomic_buffer_enabled_mask &= ~u_bit_consecutive(start_slot, count);
1248 pipe_resource_reference(&vctx->atomic_buffers[idx].buffer,
1250 vctx->atomic_buffers[idx] = buffers[i];
1251 vctx->atomic_buffer_enabled_mask |= 1 << idx;
1253 pipe_resource_reference(&vctx->atomic_buffers[idx].buffer, NULL);
1257 virgl_encode_set_hw_atomic_buffers(vctx, start_slot, count, buffers);
1266 struct virgl_context *vctx = virgl_context(ctx);
1269 &vctx->shader_bindings[shader];
1291 virgl_encode_set_shader_buffers(vctx, shader, start_slot, count, buffers);
1309 struct virgl_context *vctx = virgl_context(ctx);
1313 rs->vws->fence_server_sync(rs->vws, vctx->cbuf, fence);
1322 struct virgl_context *vctx = virgl_context(ctx);
1325 &vctx->shader_bindings[shader];
1348 virgl_encode_set_shader_images(vctx, shader, start_slot, count, images);
1359 struct virgl_context *vctx = virgl_context(ctx);
1364 virgl_encode_memory_barrier(vctx, flags);
1370 struct virgl_context *vctx = virgl_context(ctx);
1383 ntt_tokens = tokens = nir_to_tgsi_options(s, vctx->base.screen, &options); /* takes ownership */
1388 void *new_tokens = virgl_tgsi_transform((struct virgl_screen *)vctx->base.screen, tokens, false);
1393 ret = virgl_encode_shader_state(vctx, handle, PIPE_SHADER_COMPUTE,
1411 struct virgl_context *vctx = virgl_context(ctx);
1413 virgl_encode_bind_shader(vctx, handle, PIPE_SHADER_COMPUTE);
1419 struct virgl_context *vctx = virgl_context(ctx);
1421 virgl_encode_delete_object(vctx, handle, VIRGL_OBJECT_SHADER);
1427 struct virgl_context *vctx = virgl_context(ctx);
1429 if (!vctx->num_compute)
1430 virgl_reemit_compute_resources(vctx);
1431 vctx->num_compute++;
1433 virgl_encode_launch_grid(vctx, info);
1437 virgl_release_shader_binding(struct virgl_context *vctx,
1441 &vctx->shader_bindings[shader_type];
1469 struct virgl_context *vctx = virgl_context(ctx);
1470 virgl_encode_emit_string_marker(vctx, message, len);
1476 struct virgl_context *vctx = virgl_context(ctx);
1480 vctx->framebuffer.zsbuf = NULL;
1481 vctx->framebuffer.nr_cbufs = 0;
1482 virgl_encoder_destroy_sub_ctx(vctx, vctx->hw_sub_ctx_id);
1483 virgl_flush_eq(vctx, vctx, NULL);
1486 virgl_release_shader_binding(vctx, shader_type);
1488 while (vctx->atomic_buffer_enabled_mask) {
1489 int i = u_bit_scan(&vctx->atomic_buffer_enabled_mask);
1490 pipe_resource_reference(&vctx->atomic_buffers[i].buffer, NULL);
1493 rs->vws->cmd_buf_destroy(vctx->cbuf);
1494 if (vctx->uploader)
1495 u_upload_destroy(vctx->uploader);
1496 if (vctx->supports_staging)
1497 virgl_staging_destroy(&vctx->staging);
1498 util_primconvert_destroy(vctx->primconvert);
1499 virgl_transfer_queue_fini(&vctx->queue);
1501 slab_destroy_child(&vctx->transfer_pool);
1502 FREE(vctx);
1510 struct virgl_context *vctx = virgl_context(ctx);
1511 struct virgl_screen *vs = virgl_screen(vctx->base.screen);
1543 static void virgl_send_tweaks(struct virgl_context *vctx, struct virgl_screen *rs)
1546 virgl_encode_tweak(vctx, virgl_tweak_gles_brga_emulate, 1);
1549 virgl_encode_tweak(vctx, virgl_tweak_gles_brga_apply_dest_swizzle, 1);
1552 virgl_encode_tweak(vctx, virgl_tweak_gles_tf3_samples_passes_multiplier,
1558 struct virgl_context *vctx = virgl_context(ctx);
1562 virgl_encode_link_shader(vctx, shader_handles);
1569 struct virgl_context *vctx;
1571 vctx = CALLOC_STRUCT(virgl_context);
1574 vctx->cbuf = rs->vws->cmd_buf_create(rs->vws, VIRGL_MAX_CMDBUF_DWORDS);
1575 if (!vctx->cbuf) {
1576 FREE(vctx);
1580 vctx->base.destroy = virgl_context_destroy;
1581 vctx->base.create_surface = virgl_create_surface;
1582 vctx->base.surface_destroy = virgl_surface_destroy;
1583 vctx->base.set_framebuffer_state = virgl_set_framebuffer_state;
1584 vctx->base.create_blend_state = virgl_create_blend_state;
1585 vctx->base.bind_blend_state = virgl_bind_blend_state;
1586 vctx->base.delete_blend_state = virgl_delete_blend_state;
1587 vctx->base.create_depth_stencil_alpha_state = virgl_create_depth_stencil_alpha_state;
1588 vctx->base.bind_depth_stencil_alpha_state = virgl_bind_depth_stencil_alpha_state;
1589 vctx->base.delete_depth_stencil_alpha_state = virgl_delete_depth_stencil_alpha_state;
1590 vctx->base.create_rasterizer_state = virgl_create_rasterizer_state;
1591 vctx->base.bind_rasterizer_state = virgl_bind_rasterizer_state;
1592 vctx->base.delete_rasterizer_state = virgl_delete_rasterizer_state;
1594 vctx->base.set_viewport_states = virgl_set_viewport_states;
1595 vctx->base.create_vertex_elements_state = virgl_create_vertex_elements_state;
1596 vctx->base.bind_vertex_elements_state = virgl_bind_vertex_elements_state;
1597 vctx->base.delete_vertex_elements_state = virgl_delete_vertex_elements_state;
1598 vctx->base.set_vertex_buffers = virgl_set_vertex_buffers;
1599 vctx->base.set_constant_buffer = virgl_set_constant_buffer;
1601 vctx->base.set_tess_state = virgl_set_tess_state;
1602 vctx->base.set_patch_vertices = virgl_set_patch_vertices;
1603 vctx->base.create_vs_state = virgl_create_vs_state;
1604 vctx->base.create_tcs_state = virgl_create_tcs_state;
1605 vctx->base.create_tes_state = virgl_create_tes_state;
1606 vctx->base.create_gs_state = virgl_create_gs_state;
1607 vctx->base.create_fs_state = virgl_create_fs_state;
1609 vctx->base.bind_vs_state = virgl_bind_vs_state;
1610 vctx->base.bind_tcs_state = virgl_bind_tcs_state;
1611 vctx->base.bind_tes_state = virgl_bind_tes_state;
1612 vctx->base.bind_gs_state = virgl_bind_gs_state;
1613 vctx->base.bind_fs_state = virgl_bind_fs_state;
1615 vctx->base.delete_vs_state = virgl_delete_vs_state;
1616 vctx->base.delete_tcs_state = virgl_delete_tcs_state;
1617 vctx->base.delete_tes_state = virgl_delete_tes_state;
1618 vctx->base.delete_gs_state = virgl_delete_gs_state;
1619 vctx->base.delete_fs_state = virgl_delete_fs_state;
1621 vctx->base.create_compute_state = virgl_create_compute_state;
1622 vctx->base.bind_compute_state = virgl_bind_compute_state;
1623 vctx->base.delete_compute_state = virgl_delete_compute_state;
1624 vctx->base.launch_grid = virgl_launch_grid;
1626 vctx->base.clear = virgl_clear;
1627 vctx->base.clear_texture = virgl_clear_texture;
1628 vctx->base.draw_vbo = virgl_draw_vbo;
1629 vctx->base.flush = virgl_flush_from_st;
1630 vctx->base.screen = pscreen;
1631 vctx->base.create_sampler_view = virgl_create_sampler_view;
1632 vctx->base.sampler_view_destroy = virgl_destroy_sampler_view;
1633 vctx->base.set_sampler_views = virgl_set_sampler_views;
1634 vctx->base.texture_barrier = virgl_texture_barrier;
1636 vctx->base.create_sampler_state = virgl_create_sampler_state;
1637 vctx->base.delete_sampler_state = virgl_delete_sampler_state;
1638 vctx->base.bind_sampler_states = virgl_bind_sampler_states;
1640 vctx->base.set_polygon_stipple = virgl_set_polygon_stipple;
1641 vctx->base.set_scissor_states = virgl_set_scissor_states;
1642 vctx->base.set_sample_mask = virgl_set_sample_mask;
1643 vctx->base.set_min_samples = virgl_set_min_samples;
1644 vctx->base.set_stencil_ref = virgl_set_stencil_ref;
1645 vctx->base.set_clip_state = virgl_set_clip_state;
1647 vctx->base.set_blend_color = virgl_set_blend_color;
1649 vctx->base.get_sample_position = virgl_get_sample_position;
1651 vctx->base.resource_copy_region = virgl_resource_copy_region;
1652 vctx->base.flush_resource = virgl_flush_resource;
1653 vctx->base.blit = virgl_blit;
1654 vctx->base.create_fence_fd = virgl_create_fence_fd;
1655 vctx->base.fence_server_sync = virgl_fence_server_sync;
1657 vctx->base.set_shader_buffers = virgl_set_shader_buffers;
1658 vctx->base.set_hw_atomic_buffers = virgl_set_hw_atomic_buffers;
1659 vctx->base.set_shader_images = virgl_set_shader_images;
1660 vctx->base.memory_barrier = virgl_memory_barrier;
1661 vctx->base.emit_string_marker = virgl_emit_string_marker;
1664 vctx->base.link_shader = virgl_link_shader;
1666 virgl_init_context_resource_functions(&vctx->base);
1667 virgl_init_query_functions(vctx);
1668 virgl_init_so_functions(vctx);
1670 slab_create_child(&vctx->transfer_pool, &rs->transfer_pool);
1671 virgl_transfer_queue_init(&vctx->queue, vctx);
1672 vctx->encoded_transfers = (rs->vws->supports_encoded_transfers &&
1676 if (vctx->encoded_transfers)
1677 vctx->cbuf->cdw = VIRGL_MAX_TBUF_DWORDS;
1679 vctx->primconvert = util_primconvert_create(&vctx->base, rs->caps.caps.v1.prim_mask);
1680 vctx->uploader = u_upload_create(&vctx->base, 1024 * 1024,
1682 if (!vctx->uploader)
1684 vctx->base.stream_uploader = vctx->uploader;
1685 vctx->base.const_uploader = vctx->uploader;
1689 vctx->encoded_transfers) {
1690 virgl_staging_init(&vctx->staging, &vctx->base, 1024 * 1024);
1691 vctx->supports_staging = true;
1694 vctx->hw_sub_ctx_id = p_atomic_inc_return(&rs->sub_ctx_id);
1695 virgl_encoder_create_sub_ctx(vctx, vctx->hw_sub_ctx_id);
1697 virgl_encoder_set_sub_ctx(vctx, vctx->hw_sub_ctx_id);
1702 virgl_encode_host_debug_flagstring(vctx, host_debug_flagstring);
1706 virgl_send_tweaks(vctx, rs);
1708 return &vctx->base;
1710 virgl_context_destroy(&vctx->base);