Home | History | Annotate | Download | only in virgl

Lines Matching full:vctx

55 static void virgl_buffer_flush(struct virgl_context *vctx,
58 struct virgl_screen *rs = virgl_screen(vctx->base.screen);
71 vctx->num_transfers++;
78 static void virgl_attach_res_framebuffer(struct virgl_context *vctx)
80 struct virgl_winsys *vws = virgl_screen(vctx->base.screen)->vws;
85 surf = vctx->framebuffer.zsbuf;
89 vws->emit_res(vws, vctx->cbuf, res->hw_res, FALSE);
91 for (i = 0; i < vctx->framebuffer.nr_cbufs; i++) {
92 surf = vctx->framebuffer.cbufs[i];
96 vws->emit_res(vws, vctx->cbuf, res->hw_res, FALSE);
101 static void virgl_attach_res_sampler_views(struct virgl_context *vctx,
104 struct virgl_winsys *vws = virgl_screen(vctx->base.screen)->vws;
105 struct virgl_textures_info *tinfo = &vctx->samplers[shader_type];
115 vws->emit_res(vws, vctx->cbuf, res->hw_res, FALSE);
119 static void virgl_attach_res_vertex_buffers(struct virgl_context *vctx)
121 struct virgl_winsys *vws = virgl_screen(vctx->base.screen)->vws;
125 for (i = 0; i < vctx->num_vertex_buffers; i++) {
126 res = virgl_resource(vctx->vertex_buffer[i].buffer);
128 vws->emit_res(vws, vctx->cbuf, res->hw_res, FALSE);
132 static void virgl_attach_res_index_buffer(struct virgl_context *vctx)
134 struct virgl_winsys *vws = virgl_screen(vctx->base.screen)->vws;
137 res = virgl_resource(vctx->index_buffer.buffer);
139 vws->emit_res(vws, vctx->cbuf, res->hw_res, FALSE);
142 static void virgl_attach_res_so_targets(struct virgl_context *vctx)
144 struct virgl_winsys *vws = virgl_screen(vctx->base.screen)->vws;
148 for (i = 0; i < vctx->num_so_targets; i++) {
149 res = virgl_resource(vctx->so_targets[i].base.buffer);
151 vws->emit_res(vws, vctx->cbuf, res->hw_res, FALSE);
155 static void virgl_attach_res_uniform_buffers(struct virgl_context *vctx,
158 struct virgl_winsys *vws = virgl_screen(vctx->base.screen)->vws;
162 res = virgl_resource(vctx->ubos[shader_type][i]);
164 vws->emit_res(vws, vctx->cbuf, res->hw_res, FALSE);
173 static void virgl_reemit_res(struct virgl_context *vctx)
179 virgl_attach_res_framebuffer(vctx);
182 virgl_attach_res_sampler_views(vctx, shader_type);
183 virgl_attach_res_uniform_buffers(vctx, shader_type);
185 virgl_attach_res_index_buffer(vctx);
186 virgl_attach_res_vertex_buffers(vctx);
187 virgl_attach_res_so_targets(vctx);
194 struct virgl_context *vctx = virgl_context(ctx);
221 virgl_encoder_create_surface(vctx, handle, res, &surf->base);
229 struct virgl_context *vctx = virgl_context(ctx);
233 virgl_encode_delete_object(vctx, surf->handle, VIRGL_OBJECT_SURFACE);
240 struct virgl_context *vctx = virgl_context(ctx);
244 virgl_encode_blend_state(vctx, handle, blend_state);
252 struct virgl_context *vctx = virgl_context(ctx);
254 virgl_encode_bind_object(vctx, handle, VIRGL_OBJECT_BLEND);
260 struct virgl_context *vctx = virgl_context(ctx);
262 virgl_encode_delete_object(vctx, handle, VIRGL_OBJECT_BLEND);
268 struct virgl_context *vctx = virgl_context(ctx);
272 virgl_encode_dsa_state(vctx, handle, blend_state);
279 struct virgl_context *vctx = virgl_context(ctx);
281 virgl_encode_bind_object(vctx, handle, VIRGL_OBJECT_DSA);
287 struct virgl_context *vctx = virgl_context(ctx);
289 virgl_encode_delete_object(vctx, handle, VIRGL_OBJECT_DSA);
295 struct virgl_context *vctx = virgl_context(ctx);
299 virgl_encode_rasterizer_state(vctx, handle, rs_state);
306 struct virgl_context *vctx = virgl_context(ctx);
309 virgl_encode_bind_object(vctx, handle, VIRGL_OBJECT_RASTERIZER);
315 struct virgl_context *vctx = virgl_context(ctx);
317 virgl_encode_delete_object(vctx, handle, VIRGL_OBJECT_RASTERIZER);
323 struct virgl_context *vctx = virgl_context(ctx);
325 vctx->framebuffer = *state;
326 virgl_encoder_set_framebuffer_state(vctx, state);
327 virgl_attach_res_framebuffer(vctx);
335 struct virgl_context *vctx = virgl_context(ctx);
336 virgl_encoder_set_viewport_states(vctx, start_slot, num_viewports, state);
343 struct virgl_context *vctx = virgl_context(ctx);
345 virgl_encoder_create_vertex_elements(vctx, handle,
354 struct virgl_context *vctx = virgl_context(ctx);
357 virgl_encode_delete_object(vctx, handle, VIRGL_OBJECT_VERTEX_ELEMENTS);
363 struct virgl_context *vctx = virgl_context(ctx);
365 virgl_encode_bind_object(vctx, handle, VIRGL_OBJECT_VERTEX_ELEMENTS);
373 struct virgl_context *vctx = virgl_context(ctx);
375 util_set_vertex_buffers_count(vctx->vertex_buffer,
376 &vctx->num_vertex_buffers,
379 vctx->vertex_array_dirty = TRUE;
384 struct virgl_context *vctx = virgl_context(ctx);
386 if (vctx->vertex_array_dirty) {
387 virgl_encoder_set_vertex_buffers(vctx, vctx->num_vertex_buffers, vctx->vertex_buffer);
388 virgl_attach_res_vertex_buffers(vctx);
395 struct virgl_context *vctx = virgl_context(ctx);
396 virgl_encoder_set_stencil_ref(vctx, ref);
402 struct virgl_context *vctx = virgl_context(ctx);
403 virgl_encoder_set_blend_color(vctx, color);
409 struct virgl_context *vctx = virgl_context(ctx);
412 pipe_resource_reference(&vctx->index_buffer.buffer, ib->buffer);
413 memcpy(&vctx->index_buffer, ib, sizeof(*ib));
415 pipe_resource_reference(&vctx->index_buffer.buffer, NULL);
422 struct virgl_context *vctx = virgl_context(ctx);
423 virgl_encoder_set_index_buffer(vctx, ib);
424 virgl_attach_res_index_buffer(vctx);
431 struct virgl_context *vctx = virgl_context(ctx);
436 virgl_encoder_set_uniform_buffer(vctx, shader, index, buf->buffer_offset,
438 pipe_resource_reference(&vctx->ubos[shader][index], buf->buffer);
441 pipe_resource_reference(&vctx->ubos[shader][index], NULL);
442 virgl_encoder_write_constant_buffer(vctx, shader, index, buf->buffer_size / 4, buf->user_buffer);
444 virgl_encoder_write_constant_buffer(vctx, shader, index, 0, NULL);
445 pipe_resource_reference(&vctx->ubos[shader][index], NULL);
458 struct virgl_context *vctx = virgl_context(ctx);
465 if (virgl_res_needs_flush_wait(vctx, &vbuf->base, usage)) {
471 vctx, grres, level, usage,
479 struct virgl_context *vctx = virgl_context(ctx);
490 ret = virgl_encode_shader_state(vctx, handle, type,
524 struct virgl_context *vctx = virgl_context(ctx);
526 virgl_encode_delete_object(vctx, handle, VIRGL_OBJECT_SHADER);
534 struct virgl_context *vctx = virgl_context(ctx);
536 virgl_encode_delete_object(vctx, handle, VIRGL_OBJECT_SHADER);
544 struct virgl_context *vctx = virgl_context(ctx);
546 virgl_encode_delete_object(vctx, handle, VIRGL_OBJECT_SHADER);
553 struct virgl_context *vctx = virgl_context(ctx);
555 virgl_encode_bind_shader(vctx, handle, PIPE_SHADER_VERTEX);
562 struct virgl_context *vctx = virgl_context(ctx);
564 virgl_encode_bind_shader(vctx, handle, PIPE_SHADER_GEOMETRY);
572 struct virgl_context *vctx = virgl_context(ctx);
574 virgl_encode_bind_shader(vctx, handle, PIPE_SHADER_FRAGMENT);
582 struct virgl_context *vctx = virgl_context(ctx);
584 virgl_encode_clear(vctx, buffers, color, depth, stencil);
590 struct virgl_context *vctx = virgl_context(ctx);
596 util_primconvert_save_index_buffer(vctx->primconvert, &vctx->index_buffer);
597 util_primconvert_draw_vbo(vctx->primconvert, dinfo);
601 pipe_resource_reference(&ib.buffer, vctx->index_buffer.buffer);
602 ib.user_buffer = vctx->index_buffer.user_buffer;
603 ib.index_size = vctx->index_buffer.index_size;
604 ib.offset = vctx->index_buffer.offset + info.start * ib.index_size;
607 u_upload_data(vctx->uploader, 0, info.count * ib.index_size, 256,
613 u_upload_unmap(vctx->uploader);
615 vctx->num_draws++;
620 virgl_encoder_draw_vbo(vctx, &info);
644 struct virgl_context *vctx = virgl_context(ctx);
651 LIST_FOR_EACH_ENTRY_SAFE(buf, tmp, &vctx->to_flush_bufs, flush_list) {
653 virgl_buffer_flush(vctx, buf);
659 virgl_flush_eq(vctx, vctx);
666 struct virgl_context *vctx = virgl_context(ctx);
680 virgl_encode_sampler_view(vctx, handle, res, state);
698 struct virgl_context *vctx = virgl_context(ctx);
701 struct virgl_textures_info *tinfo = &vctx->samplers[shader_type];
731 virgl_encode_set_sampler_views(vctx, shader_type, start_slot, num_views, tinfo->views);
732 virgl_attach_res_sampler_views(vctx, shader_type);
738 struct virgl_context *vctx = virgl_context(ctx);
741 virgl_encode_delete_object(vctx, grview->handle, VIRGL_OBJECT_SAMPLER_VIEW);
749 struct virgl_context *vctx = virgl_context(ctx);
754 virgl_encode_sampler_state(vctx, handle, state);
761 struct virgl_context *vctx = virgl_context(ctx);
764 virgl_encode_delete_object(vctx, handle, VIRGL_OBJECT_SAMPLER_STATE);
773 struct virgl_context *vctx = virgl_context(ctx);
779 virgl_encode_bind_sampler_states(vctx, shader, start_slot, num_samplers, handles);
785 struct virgl_context *vctx = virgl_context(ctx);
786 virgl_encoder_set_polygon_stipple(vctx, ps);
794 struct virgl_context *vctx = virgl_context(ctx);
795 virgl_encoder_set_scissor_state(vctx, start_slot, num_scissor, ss);
801 struct virgl_context *vctx = virgl_context(ctx);
802 virgl_encoder_set_sample_mask(vctx, sample_mask);
808 struct virgl_context *vctx = virgl_context(ctx);
809 virgl_encoder_set_clip_state(vctx, clip);
820 struct virgl_context *vctx = virgl_context(ctx);
825 virgl_encode_resource_copy_region(vctx, dres,
840 struct virgl_context *vctx = virgl_context(ctx);
845 virgl_encode_blit(vctx, dres, sres,
852 struct virgl_context *vctx = virgl_context(ctx);
855 vctx->framebuffer.zsbuf = NULL;
856 vctx->framebuffer.nr_cbufs = 0;
857 virgl_encoder_destroy_sub_ctx(vctx, vctx->hw_sub_ctx_id);
858 virgl_flush_eq(vctx, vctx);
860 rs->vws->cmd_buf_destroy(vctx->cbuf);
861 if (vctx->uploader)
862 u_upload_destroy(vctx->uploader);
863 util_primconvert_destroy(vctx->primconvert);
865 slab_destroy_child(&vctx->texture_transfer_pool);
866 FREE(vctx);
873 struct virgl_context *vctx;
875 vctx = CALLOC_STRUCT(virgl_context);
877 vctx->cbuf = rs->vws->cmd_buf_create(rs->vws);
878 if (!vctx->cbuf) {
879 FREE(vctx);
883 vctx->base.destroy = virgl_context_destroy;
884 vctx->base.create_surface = virgl_create_surface;
885 vctx->base.surface_destroy = virgl_surface_destroy;
886 vctx->base.set_framebuffer_state = virgl_set_framebuffer_state;
887 vctx->base.create_blend_state = virgl_create_blend_state;
888 vctx->base.bind_blend_state = virgl_bind_blend_state;
889 vctx->base.delete_blend_state = virgl_delete_blend_state;
890 vctx->base.create_depth_stencil_alpha_state = virgl_create_depth_stencil_alpha_state;
891 vctx->base.bind_depth_stencil_alpha_state = virgl_bind_depth_stencil_alpha_state;
892 vctx->base.delete_depth_stencil_alpha_state = virgl_delete_depth_stencil_alpha_state;
893 vctx->base.create_rasterizer_state = virgl_create_rasterizer_state;
894 vctx->base.bind_rasterizer_state = virgl_bind_rasterizer_state;
895 vctx->base.delete_rasterizer_state = virgl_delete_rasterizer_state;
897 vctx->base.set_viewport_states = virgl_set_viewport_states;
898 vctx->base.create_vertex_elements_state = virgl_create_vertex_elements_state;
899 vctx->base.bind_vertex_elements_state = virgl_bind_vertex_elements_state;
900 vctx->base.delete_vertex_elements_state = virgl_delete_vertex_elements_state;
901 vctx->base.set_vertex_buffers = virgl_set_vertex_buffers;
902 vctx->base.set_index_buffer = virgl_set_index_buffer;
903 vctx->base.set_constant_buffer = virgl_set_constant_buffer;
905 vctx->base.create_vs_state = virgl_create_vs_state;
906 vctx->base.create_gs_state = virgl_create_gs_state;
907 vctx->base.create_fs_state = virgl_create_fs_state;
909 vctx->base.bind_vs_state = virgl_bind_vs_state;
910 vctx->base.bind_gs_state = virgl_bind_gs_state;
911 vctx->base.bind_fs_state = virgl_bind_fs_state;
913 vctx->base.delete_vs_state = virgl_delete_vs_state;
914 vctx->base.delete_gs_state = virgl_delete_gs_state;
915 vctx->base.delete_fs_state = virgl_delete_fs_state;
917 vctx->base.clear = virgl_clear;
918 vctx->base.draw_vbo = virgl_draw_vbo;
919 vctx->base.flush = virgl_flush_from_st;
920 vctx->base.screen = pscreen;
921 vctx->base.create_sampler_view = virgl_create_sampler_view;
922 vctx->base.sampler_view_destroy = virgl_destroy_sampler_view;
923 vctx->base.set_sampler_views = virgl_set_sampler_views;
925 vctx->base.create_sampler_state = virgl_create_sampler_state;
926 vctx->base.delete_sampler_state = virgl_delete_sampler_state;
927 vctx->base.bind_sampler_states = virgl_bind_sampler_states;
929 vctx->base.set_polygon_stipple = virgl_set_polygon_stipple;
930 vctx->base.set_scissor_states = virgl_set_scissor_states;
931 vctx->base.set_sample_mask = virgl_set_sample_mask;
932 vctx->base.set_stencil_ref = virgl_set_stencil_ref;
933 vctx->base.set_clip_state = virgl_set_clip_state;
935 vctx->base.set_blend_color = virgl_set_blend_color;
937 vctx->base.resource_copy_region = virgl_resource_copy_region;
938 vctx->base.flush_resource = virgl_flush_resource;
939 vctx->base.blit = virgl_blit;
941 virgl_init_context_resource_functions(&vctx->base);
942 virgl_init_query_functions(vctx);
943 virgl_init_so_functions(vctx);
945 list_inithead(&vctx->to_flush_bufs);
946 slab_create_child(&vctx
948 vctx->primconvert = util_primconvert_create(&vctx->base, rs->caps.caps.v1.prim_mask);
949 vctx->uploader = u_upload_create(&vctx->base, 1024 * 1024,
951 if (!vctx->uploader)
954 vctx->hw_sub_ctx_id = rs->sub_ctx_id++;
955 virgl_encoder_create_sub_ctx(vctx, vctx->hw_sub_ctx_id);
957 virgl_encoder_set_sub_ctx(vctx, vctx->hw_sub_ctx_id);
958 return &vctx->base;