Lines Matching refs:ctx

311 static int virgl_encoder_write_cmd_dword(struct virgl_context *ctx,
316 if ((ctx->cbuf->cdw + len + 1) > VIRGL_MAX_CMDBUF_DWORDS)
317 ctx->base.flush(&ctx->base, NULL, 0);
319 virgl_encoder_write_dword(ctx->cbuf, dword);
335 static void virgl_encoder_write_res(struct virgl_context *ctx,
338 struct virgl_screen *vs = virgl_screen(ctx->base.screen);
339 virgl_encoder_emit_resource(vs, ctx->cbuf, res);
342 int virgl_encode_bind_object(struct virgl_context *ctx,
345 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_BIND_OBJECT, object, 1));
346 virgl_encoder_write_dword(ctx->cbuf, handle);
350 int virgl_encode_delete_object(struct virgl_context *ctx,
353 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_DESTROY_OBJECT, object, 1));
354 virgl_encoder_write_dword(ctx->cbuf, handle);
358 int virgl_encode_blend_state(struct virgl_context *ctx,
365 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_CREATE_OBJECT, VIRGL_OBJECT_BLEND, VIRGL_OBJ_BLEND_SIZE));
366 virgl_encoder_write_dword(ctx->cbuf, handle);
375 virgl_encoder_write_dword(ctx->cbuf, tmp);
378 virgl_encoder_write_dword(ctx->cbuf, tmp);
396 virgl_encoder_write_dword(ctx->cbuf, tmp);
401 int virgl_encode_dsa_state(struct virgl_context *ctx,
407 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_CREATE_OBJECT, VIRGL_OBJECT_DSA, VIRGL_OBJ_DSA_SIZE));
408 virgl_encoder_write_dword(ctx->cbuf, handle);
415 virgl_encoder_write_dword(ctx->cbuf, tmp);
425 virgl_encoder_write_dword(ctx->cbuf, tmp);
428 virgl_encoder_write_dword(ctx->cbuf, fui(dsa_state->alpha_ref_value));
431 int virgl_encode_rasterizer_state(struct virgl_context *ctx,
437 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_CREATE_OBJECT, VIRGL_OBJECT_RASTERIZER, VIRGL_OBJ_RS_SIZE));
438 virgl_encoder_write_dword(ctx->cbuf, handle);
470 virgl_encoder_write_dword(ctx->cbuf, tmp); /* S0 */
471 virgl_encoder_write_dword(ctx->cbuf, fui(state->point_size)); /* S1 */
472 virgl_encoder_write_dword(ctx->cbuf, state->sprite_coord_enable); /* S2 */
476 virgl_encoder_write_dword(ctx->cbuf, tmp); /* S3 */
477 virgl_encoder_write_dword(ctx->cbuf, fui(state->line_width)); /* S4 */
478 virgl_encoder_write_dword(ctx->cbuf, fui(state->offset_units)); /* S5 */
479 virgl_encoder_write_dword(ctx->cbuf, fui(state->offset_scale)); /* S6 */
480 virgl_encoder_write_dword(ctx->cbuf, fui(state->offset_clamp)); /* S7 */
484 static void virgl_emit_shader_header(struct virgl_context *ctx,
489 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_CREATE_OBJECT, VIRGL_OBJECT_SHADER, len));
490 virgl_encoder_write_dword(ctx->cbuf, handle);
491 virgl_encoder_write_dword(ctx->cbuf, type);
492 virgl_encoder_write_dword(ctx->cbuf, offlen);
493 virgl_encoder_write_dword(ctx->cbuf, num_tokens);
496 static void virgl_emit_shader_streamout(struct virgl_context *ctx,
506 virgl_encoder_write_dword(ctx->cbuf, num_outputs);
509 virgl_encoder_write_dword(ctx->cbuf, so_info->stride[i]);
518 virgl_encoder_write_dword(ctx->cbuf, tmp);
519 virgl_encoder_write_dword(ctx->cbuf, so_info->output[i].stream);
524 int virgl_encode_shader_state(struct virgl_context *ctx,
583 if (ctx->cbuf->cdw + hdr_len + 1 >= VIRGL_ENCODE_MAX_DWORDS)
584 ctx->base.flush(&ctx->base, NULL, 0);
586 thispass = (VIRGL_ENCODE_MAX_DWORDS - ctx->cbuf->cdw - hdr_len - 1) * 4;
596 virgl_emit_shader_header(ctx, handle, len, type, offlen, num_tokens);
599 virgl_encoder_write_dword(ctx->cbuf, cs_req_local_mem);
601 virgl_emit_shader_streamout(ctx, first_pass ? so_info : NULL);
603 virgl_encoder_write_block(ctx->cbuf, (uint8_t *)sptr, length);
615 int virgl_encode_clear(struct virgl_context *ctx,
626 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_CLEAR, 0, VIRGL_OBJ_CLEAR_SIZE));
627 virgl_encoder_write_dword(ctx->cbuf, buffers);
629 virgl_encoder_write_dword(ctx->cbuf, color->ui[i]);
630 virgl_encoder_write_qword(ctx->cbuf, qword);
631 virgl_encoder_write_dword(ctx->cbuf, stencil);
635 int virgl_encode_clear_texture(struct virgl_context *ctx,
653 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_CLEAR_TEXTURE, 0, VIRGL_CLEAR_TEXTURE_SIZE));
654 virgl_encoder_write_res(ctx, res);
655 virgl_encoder_write_dword(ctx->cbuf, level);
656 virgl_encoder_write_dword(ctx->cbuf, box->x);
657 virgl_encoder_write_dword(ctx->cbuf, box->y);
658 virgl_encoder_write_dword(ctx->cbuf, box->z);
659 virgl_encoder_write_dword(ctx->cbuf, box->width);
660 virgl_encoder_write_dword(ctx->cbuf, box->height);
661 virgl_encoder_write_dword(ctx->cbuf, box->depth);
663 virgl_encoder_write_dword(ctx->cbuf, arr[i]);
667 int virgl_encoder_set_framebuffer_state(struct virgl_context *ctx,
673 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_SET_FRAMEBUFFER_STATE, 0, VIRGL_SET_FRAMEBUFFER_STATE_SIZE(state->nr_cbufs)));
674 virgl_encoder_write_dword(ctx->cbuf, state->nr_cbufs);
675 virgl_encoder_write_dword(ctx->cbuf, zsurf ? zsurf->handle : 0);
678 virgl_encoder_write_dword(ctx->cbuf, surf ? surf->handle : 0);
681 struct virgl_screen *rs = virgl_screen(ctx->base.screen);
683 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_SET_FRAMEBUFFER_STATE_NO_ATTACH, 0, VIRGL_SET_FRAMEBUFFER_STATE_NO_ATTACH_SIZE));
684 virgl_encoder_write_dword(ctx->cbuf, state->width | (state->height << 16));
685 virgl_encoder_write_dword(ctx->cbuf, state->layers | (state->samples << 16));
690 int virgl_encoder_set_viewport_states(struct virgl_context *ctx,
696 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_SET_VIEWPORT_STATE, 0, VIRGL_SET_VIEWPORT_STATE_SIZE(num_viewports)));
697 virgl_encoder_write_dword(ctx->cbuf, start_slot);
700 virgl_encoder_write_dword(ctx->cbuf, fui(states[v].scale[i]));
702 virgl_encoder_write_dword(ctx->cbuf, fui(states[v].translate[i]));
707 int virgl_encoder_create_vertex_elements(struct virgl_context *ctx,
713 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_CREATE_OBJECT, VIRGL_OBJECT_VERTEX_ELEMENTS, VIRGL_OBJ_VERTEX_ELEMENTS_SIZE(num_elements)));
714 virgl_encoder_write_dword(ctx->cbuf, handle);
716 virgl_encoder_write_dword(ctx->cbuf, element[i].src_offset);
717 virgl_encoder_write_dword(ctx->cbuf, element[i].instance_divisor);
718 virgl_encoder_write_dword(ctx->cbuf, element[i].vertex_buffer_index);
719 virgl_encoder_write_dword(ctx->cbuf, pipe_to_virgl_format(element[i].src_format));
724 int virgl_encoder_set_vertex_buffers(struct virgl_context *ctx,
729 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_SET_VERTEX_BUFFERS, 0, VIRGL_SET_VERTEX_BUFFERS_SIZE(num_buffers)));
732 virgl_encoder_write_dword(ctx->cbuf, buffers[i].stride);
733 virgl_encoder_write_dword(ctx->cbuf, buffers[i].buffer_offset);
734 virgl_encoder_write_res(ctx, res);
739 int virgl_encoder_set_index_buffer(struct virgl_context *ctx,
747 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_SET_INDEX_BUFFER, 0, length));
748 virgl_encoder_write_res(ctx, res);
750 virgl_encoder_write_dword(ctx->cbuf, ib->index_size);
751 virgl_encoder_write_dword(ctx->cbuf, ib->offset);
756 int virgl_encoder_draw_vbo(struct virgl_context *ctx,
767 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_DRAW_VBO, 0, length));
768 virgl_encoder_write_dword(ctx->cbuf, draw->start);
769 virgl_encoder_write_dword(ctx->cbuf, draw->count);
770 virgl_encoder_write_dword(ctx->cbuf, info->mode);
771 virgl_encoder_write_dword(ctx->cbuf, !!info->index_size);
772 virgl_encoder_write_dword(ctx->cbuf, info->instance_count);
773 virgl_encoder_write_dword(ctx->cbuf, info->index_size ? draw->index_bias : 0);
774 virgl_encoder_write_dword(ctx->cbuf, info->start_instance);
775 virgl_encoder_write_dword(ctx->cbuf, info->primitive_restart);
776 virgl_encoder_write_dword(ctx->cbuf, info->primitive_restart ? info->restart_index : 0);
777 virgl_encoder_write_dword(ctx->cbuf, info->index_bounds_valid ? info->min_index : 0);
778 virgl_encoder_write_dword(ctx->cbuf, info->index_bounds_valid ? info->max_index : ~0);
780 virgl_encoder_write_dword(ctx->cbuf, indirect->count_from_stream_output->buffer_size);
782 virgl_encoder_write_dword(ctx->cbuf, 0);
784 virgl_encoder_write_dword(ctx->cbuf, ctx->patch_vertices); /* vertices per patch */
785 virgl_encoder_write_dword(ctx->cbuf, drawid_offset); /* drawid */
788 virgl_encoder_write_res(ctx, virgl_resource(indirect->buffer));
789 virgl_encoder_write_dword(ctx->cbuf, indirect->offset);
790 virgl_encoder_write_dword(ctx->cbuf, indirect->stride); /* indirect stride */
791 virgl_encoder_write_dword(ctx->cbuf, indirect->draw_count); /* indirect draw count */
792 virgl_encoder_write_dword(ctx->cbuf, indirect->indirect_draw_count_offset); /* indirect draw count offset */
794 virgl_encoder_write_res(ctx, virgl_resource(indirect->indirect_draw_count));
796 virgl_encoder_write_dword(ctx->cbuf, 0); /* indirect draw count handle */
801 static int virgl_encoder_create_surface_common(struct virgl_context *ctx,
806 virgl_encoder_write_dword(ctx->cbuf, handle);
807 virgl_encoder_write_res(ctx, res);
808 virgl_encoder_write_dword(ctx->cbuf, pipe_to_virgl_format(templat->format));
811 virgl_encoder_write_dword(ctx->cbuf, templat->u.tex.level);
812 virgl_encoder_write_dword(ctx->cbuf, templat->u.tex.first_layer | (templat->u.tex.last_layer << 16));
817 int virgl_encoder_create_surface(struct virgl_context *ctx,
823 ASSERTED struct virgl_screen *rs = virgl_screen(ctx->base.screen);
826 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_CREATE_OBJECT, VIRGL_OBJECT_MSAA_SURFACE, VIRGL_OBJ_MSAA_SURFACE_SIZE));
827 virgl_encoder_create_surface_common(ctx, handle, res, templat);
828 virgl_encoder_write_dword(ctx->cbuf, templat->nr_samples);
830 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_CREATE_OBJECT, VIRGL_OBJECT_SURFACE, VIRGL_OBJ_SURFACE_SIZE));
831 virgl_encoder_create_surface_common(ctx, handle, res, templat);
837 int virgl_encoder_create_so_target(struct virgl_context *ctx,
843 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_CREATE_OBJECT, VIRGL_OBJECT_STREAMOUT_TARGET, VIRGL_OBJ_STREAMOUT_SIZE));
844 virgl_encoder_write_dword(ctx->cbuf, handle);
845 virgl_encoder_write_res(ctx, res);
846 virgl_encoder_write_dword(ctx->cbuf, buffer_offset);
847 virgl_encoder_write_dword(ctx->cbuf, buffer_size);
897 int virgl_encoder_inline_write(struct virgl_context *ctx,
907 struct virgl_screen *vs = virgl_screen(ctx->base.screen);
916 if ((ctx->cbuf->cdw + length + 1) > VIRGL_ENCODE_MAX_DWORDS) {
925 if (ctx->cbuf->cdw + 12 >= VIRGL_ENCODE_MAX_DWORDS)
926 ctx->base.flush(&ctx->base, NULL, 0);
928 thispass = (VIRGL_ENCODE_MAX_DWORDS - ctx->cbuf->cdw - 12) * 4;
933 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_RESOURCE_INLINE_WRITE, 0, ((length + 3) / 4) + 11));
934 virgl_encoder_transfer3d_common(vs, ctx->cbuf, &transfer,
936 virgl_encoder_write_block(ctx->cbuf, data, length);
944 int virgl_encoder_flush_frontbuffer(struct virgl_context *ctx,
947 // virgl_encoder_write_dword(ctx->cbuf, VIRGL_CMD0(VIRGL_CCMD_FLUSH_FRONTUBFFER, 0, 1));
948 // virgl_encoder_write_dword(ctx->cbuf, res_handle);
952 int virgl_encode_sampler_state(struct virgl_context *ctx,
958 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_CREATE_OBJECT, VIRGL_OBJECT_SAMPLER_STATE, VIRGL_OBJ_SAMPLER_STATE_SIZE));
959 virgl_encoder_write_dword(ctx->cbuf, handle);
972 virgl_encoder_write_dword(ctx->cbuf, tmp);
973 virgl_encoder_write_dword(ctx->cbuf, fui(state->lod_bias));
974 virgl_encoder_write_dword(ctx->cbuf, fui(state->min_lod));
975 virgl_encoder_write_dword(ctx->cbuf, fui(state->max_lod));
977 virgl_encoder_write_dword(ctx->cbuf, state->border_color.ui[i]);
982 int virgl_encode_sampler_view(struct virgl_context *ctx,
988 struct virgl_screen *rs = virgl_screen(ctx->base.screen);
991 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_CREATE_OBJECT, VIRGL_OBJECT_SAMPLER_VIEW, VIRGL_OBJ_SAMPLER_VIEW_SIZE));
992 virgl_encoder_write_dword(ctx->cbuf, handle);
993 virgl_encoder_write_res(ctx, res);
996 virgl_encoder_write_dword(ctx->cbuf, dword_fmt_target);
998 virgl_encoder_write_dword(ctx->cbuf, state->u.buf.offset / elem_size);
999 virgl_encoder_write_dword(ctx->cbuf, (state->u.buf.offset + state->u.buf.size) / elem_size - 1);
1003 virgl_encoder_write_dword(ctx->cbuf, res->metadata.plane);
1005 virgl_encoder_write_dword(ctx->cbuf, state->u.tex.first_layer | state->u.tex.last_layer << 16);
1007 virgl_encoder_write_dword(ctx->cbuf, state->u.tex.first_level | state->u.tex.last_level << 8);
1013 virgl_encoder_write_dword(ctx->cbuf, tmp);
1017 int virgl_encode_set_sampler_views(struct virgl_context *ctx,
1024 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_SET_SAMPLER_VIEWS, 0, VIRGL_SET_SAMPLER_VIEWS_SIZE(num_views)));
1025 virgl_encoder_write_dword(ctx->cbuf, shader_type);
1026 virgl_encoder_write_dword(ctx->cbuf, start_slot);
1029 virgl_encoder_write_dword(ctx->cbuf, handle);
1034 int virgl_encode_bind_sampler_states(struct virgl_context *ctx,
1041 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_BIND_SAMPLER_STATES, 0, VIRGL_BIND_SAMPLER_STATES(num_handles)));
1042 virgl_encoder_write_dword(ctx->cbuf, shader_type);
1043 virgl_encoder_write_dword(ctx->cbuf, start_slot);
1045 virgl_encoder_write_dword(ctx->cbuf, handles[i]);
1049 int virgl_encoder_write_constant_buffer(struct virgl_context *ctx,
1055 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_SET_CONSTANT_BUFFER, 0, size + 2));
1056 virgl_encoder_write_dword(ctx->cbuf, shader);
1057 virgl_encoder_write_dword(ctx->cbuf, index);
1059 virgl_encoder_write_block(ctx->cbuf, data, size * 4);
1063 int virgl_encoder_set_uniform_buffer(struct virgl_context *ctx,
1070 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_SET_UNIFORM_BUFFER, 0, VIRGL_SET_UNIFORM_BUFFER_SIZE));
1071 virgl_encoder_write_dword(ctx->cbuf, shader);
1072 virgl_encoder_write_dword(ctx->cbuf, index);
1073 virgl_encoder_write_dword(ctx->cbuf, offset);
1074 virgl_encoder_write_dword(ctx->cbuf, length);
1075 virgl_encoder_write_res(ctx, res);
1080 int virgl_encoder_set_stencil_ref(struct virgl_context *ctx,
1083 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_SET_STENCIL_REF, 0, VIRGL_SET_STENCIL_REF_SIZE));
1084 virgl_encoder_write_dword(ctx->cbuf, VIRGL_STENCIL_REF_VAL(ref->ref_value[0] , (ref->ref_value[1])));
1088 int virgl_encoder_set_blend_color(struct virgl_context *ctx,
1092 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_SET_BLEND_COLOR, 0, VIRGL_SET_BLEND_COLOR_SIZE));
1094 virgl_encoder_write_dword(ctx->cbuf, fui(color->color[i]));
1098 int virgl_encoder_set_scissor_state(struct virgl_context *ctx,
1104 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_SET_SCISSOR_STATE, 0, VIRGL_SET_SCISSOR_STATE_SIZE(num_scissors)));
1105 virgl_encoder_write_dword(ctx->cbuf, start_slot);
1107 virgl_encoder_write_dword(ctx->cbuf, (ss[i].minx | ss[i].miny << 16));
1108 virgl_encoder_write_dword(ctx->cbuf, (ss[i].maxx | ss[i].maxy << 16));
1113 void virgl_encoder_set_polygon_stipple(struct virgl_context *ctx,
1117 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_SET_POLYGON_STIPPLE, 0, VIRGL_POLYGON_STIPPLE_SIZE));
1119 virgl_encoder_write_dword(ctx->cbuf, ps->stipple[i]);
1123 void virgl_encoder_set_sample_mask(struct virgl_context *ctx,
1126 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_SET_SAMPLE_MASK, 0, VIRGL_SET_SAMPLE_MASK_SIZE));
1127 virgl_encoder_write_dword(ctx->cbuf, sample_mask);
1130 void virgl_encoder_set_min_samples(struct virgl_context *ctx,
1133 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_SET_MIN_SAMPLES, 0, VIRGL_SET_MIN_SAMPLES_SIZE));
1134 virgl_encoder_write_dword(ctx->cbuf, min_samples);
1137 void virgl_encoder_set_clip_state(struct virgl_context *ctx,
1141 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_SET_CLIP_STATE, 0, VIRGL_SET_CLIP_STATE_SIZE));
1144 virgl_encoder_write_dword(ctx->cbuf, fui(clip->ucp[i][j]));
1149 int virgl_encode_resource_copy_region(struct virgl_context *ctx,
1157 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_RESOURCE_COPY_REGION, 0, VIRGL_CMD_RESOURCE_COPY_REGION_SIZE));
1158 virgl_encoder_write_res(ctx, dst_res);
1159 virgl_encoder_write_dword(ctx->cbuf, dst_level);
1160 virgl_encoder_write_dword(ctx->cbuf, dstx);
1161 virgl_encoder_write_dword(ctx->cbuf, dsty);
1162 virgl_encoder_write_dword(ctx->cbuf, dstz);
1163 virgl_encoder_write_res(ctx, src_res);
1164 virgl_encoder_write_dword(ctx->cbuf, src_level);
1165 virgl_encoder_write_dword(ctx->cbuf, src_box->x);
1166 virgl_encoder_write_dword(ctx->cbuf, src_box->y);
1167 virgl_encoder_write_dword(ctx->cbuf, src_box->z);
1168 virgl_encoder_write_dword(ctx->cbuf, src_box->width);
1169 virgl_encoder_write_dword(ctx->cbuf, src_box->height);
1170 virgl_encoder_write_dword(ctx->cbuf, src_box->depth);
1174 int virgl_encode_blit(struct virgl_context *ctx,
1180 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_BLIT, 0, VIRGL_CMD_BLIT_SIZE));
1186 virgl_encoder_write_dword(ctx->cbuf, tmp);
1187 virgl_encoder_write_dword(ctx->cbuf, (blit->scissor.minx | blit->scissor.miny << 16));
1188 virgl_encoder_write_dword(ctx->cbuf, (blit->scissor.maxx | blit->scissor.maxy << 16));
1190 virgl_encoder_write_res(ctx, dst_res);
1191 virgl_encoder_write_dword(ctx->cbuf, blit->dst.level);
1192 virgl_encoder_write_dword(ctx->cbuf, pipe_to_virgl_format(blit->dst.format));
1193 virgl_encoder_write_dword(ctx->cbuf, blit->dst.box.x);
1194 virgl_encoder_write_dword(ctx->cbuf, blit->dst.box.y);
1195 virgl_encoder_write_dword(ctx->cbuf, blit->dst.box.z);
1196 virgl_encoder_write_dword(ctx->cbuf, blit->dst.box.width);
1197 virgl_encoder_write_dword(ctx->cbuf, blit->dst.box.height);
1198 virgl_encoder_write_dword(ctx->cbuf, blit->dst.box.depth);
1200 virgl_encoder_write_res(ctx, src_res);
1201 virgl_encoder_write_dword(ctx->cbuf, blit->src.level);
1202 virgl_encoder_write_dword(ctx->cbuf, pipe_to_virgl_format(blit->src.format));
1203 virgl_encoder_write_dword(ctx->cbuf, blit->src.box.x);
1204 virgl_encoder_write_dword(ctx->cbuf, blit->src.box.y);
1205 virgl_encoder_write_dword(ctx->cbuf, blit->src.box.z);
1206 virgl_encoder_write_dword(ctx->cbuf, blit->src.box.width);
1207 virgl_encoder_write_dword(ctx->cbuf, blit->src.box.height);
1208 virgl_encoder_write_dword(ctx->cbuf, blit->src.box.depth);
1212 int virgl_encoder_create_query(struct virgl_context *ctx,
1219 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_CREATE_OBJECT, VIRGL_OBJECT_QUERY, VIRGL_OBJ_QUERY_SIZE));
1220 virgl_encoder_write_dword(ctx->cbuf, handle);
1221 virgl_encoder_write_dword(ctx->cbuf, ((query_type & 0xffff) | (query_index << 16)));
1222 virgl_encoder_write_dword(ctx->cbuf, offset);
1223 virgl_encoder_write_res(ctx, res);
1227 int virgl_encoder_begin_query(struct virgl_context *ctx,
1230 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_BEGIN_QUERY, 0, 1));
1231 virgl_encoder_write_dword(ctx->cbuf, handle);
1235 int virgl_encoder_end_query(struct virgl_context *ctx,
1238 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_END_QUERY, 0, 1));
1239 virgl_encoder_write_dword(ctx->cbuf, handle);
1243 int virgl_encoder_get_query_result(struct virgl_context *ctx,
1246 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_GET_QUERY_RESULT, 0, 2));
1247 virgl_encoder_write_dword(ctx->cbuf, handle);
1248 virgl_encoder_write_dword(ctx->cbuf, wait ? 1 : 0);
1252 int virgl_encoder_render_condition(struct virgl_context *ctx,
1256 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_SET_RENDER_CONDITION, 0, VIRGL_RENDER_CONDITION_SIZE));
1257 virgl_encoder_write_dword(ctx->cbuf, handle);
1258 virgl_encoder_write_dword(ctx->cbuf, condition);
1259 virgl_encoder_write_dword(ctx->cbuf, mode);
1263 int virgl_encoder_set_so_targets(struct virgl_context *ctx,
1270 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_SET_STREAMOUT_TARGETS, 0, num_targets + 1));
1271 virgl_encoder_write_dword(ctx->cbuf, append_bitmask);
1274 virgl_encoder_write_dword(ctx->cbuf, tg ? tg->handle : 0);
1280 int virgl_encoder_set_sub_ctx(struct virgl_context *ctx, uint32_t sub_ctx_id)
1282 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_SET_SUB_CTX, 0, 1));
1283 virgl_encoder_write_dword(ctx->cbuf, sub_ctx_id);
1287 int virgl_encoder_create_sub_ctx(struct virgl_context *ctx, uint32_t sub_ctx_id)
1289 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_CREATE_SUB_CTX, 0, 1));
1290 virgl_encoder_write_dword(ctx->cbuf, sub_ctx_id);
1294 int virgl_encoder_destroy_sub_ctx(struct virgl_context *ctx, uint32_t sub_ctx_id)
1296 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_DESTROY_SUB_CTX, 0, 1));
1297 virgl_encoder_write_dword(ctx->cbuf, sub_ctx_id);
1301 int virgl_encode_link_shader(struct virgl_context *ctx, uint32_t *handles)
1303 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_LINK_SHADER, 0, VIRGL_LINK_SHADER_SIZE));
1304 virgl_encoder_write_dword(ctx->cbuf, handles[PIPE_SHADER_VERTEX]);
1305 virgl_encoder_write_dword(ctx->cbuf, handles[PIPE_SHADER_FRAGMENT]);
1306 virgl_encoder_write_dword(ctx->cbuf, handles[PIPE_SHADER_GEOMETRY]);
1307 virgl_encoder_write_dword(ctx->cbuf, handles[PIPE_SHADER_TESS_CTRL]);
1308 virgl_encoder_write_dword(ctx->cbuf, handles[PIPE_SHADER_TESS_EVAL]);
1309 virgl_encoder_write_dword(ctx->cbuf, handles[PIPE_SHADER_COMPUTE]);
1313 int virgl_encode_bind_shader(struct virgl_context *ctx,
1316 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_BIND_SHADER, 0, 2));
1317 virgl_encoder_write_dword(ctx->cbuf, handle);
1318 virgl_encoder_write_dword(ctx->cbuf, type);
1322 int virgl_encode_set_tess_state(struct virgl_context *ctx,
1327 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_SET_TESS_STATE, 0, 6));
1329 virgl_encoder_write_dword(ctx->cbuf, fui(outer[i]));
1331 virgl_encoder_write_dword(ctx->cbuf, fui(inner[i]));
1335 int virgl_encode_set_shader_buffers(struct virgl_context *ctx,
1341 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_SET_SHADER_BUFFERS, 0, VIRGL_SET_SHADER_BUFFER_SIZE(count)));
1343 virgl_encoder_write_dword(ctx->cbuf, shader);
1344 virgl_encoder_write_dword(ctx->cbuf, start_slot);
1348 virgl_encoder_write_dword(ctx->cbuf, buffers[i].buffer_offset);
1349 virgl_encoder_write_dword(ctx->cbuf, buffers[i].buffer_size);
1350 virgl_encoder_write_res(ctx, res);
1356 virgl_encoder_write_dword(ctx->cbuf, 0);
1357 virgl_encoder_write_dword(ctx->cbuf, 0);
1358 virgl_encoder_write_dword(ctx->cbuf, 0);
1364 int virgl_encode_set_hw_atomic_buffers(struct virgl_context *ctx,
1369 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_SET_ATOMIC_BUFFERS, 0, VIRGL_SET_ATOMIC_BUFFER_SIZE(count)));
1371 virgl_encoder_write_dword(ctx->cbuf, start_slot);
1375 virgl_encoder_write_dword(ctx->cbuf, buffers[i].buffer_offset);
1376 virgl_encoder_write_dword(ctx->cbuf, buffers[i].buffer_size);
1377 virgl_encoder_write_res(ctx, res);
1383 virgl_encoder_write_dword(ctx->cbuf, 0);
1384 virgl_encoder_write_dword(ctx->cbuf, 0);
1385 virgl_encoder_write_dword(ctx->cbuf, 0);
1391 int virgl_encode_set_shader_images(struct virgl_context *ctx,
1397 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_SET_SHADER_IMAGES, 0, VIRGL_SET_SHADER_IMAGE_SIZE(count)));
1399 virgl_encoder_write_dword(ctx->cbuf, shader);
1400 virgl_encoder_write_dword(ctx->cbuf, start_slot);
1404 virgl_encoder_write_dword(ctx->cbuf, pipe_to_virgl_format(images[i].format));
1405 virgl_encoder_write_dword(ctx->cbuf, images[i].access);
1406 virgl_encoder_write_dword(ctx->cbuf, images[i].u.buf.offset);
1407 virgl_encoder_write_dword(ctx->cbuf, images[i].u.buf.size);
1408 virgl_encoder_write_res(ctx, res);
1416 virgl_encoder_write_dword(ctx->cbuf, 0);
1417 virgl_encoder_write_dword(ctx->cbuf, 0);
1418 virgl_encoder_write_dword(ctx->cbuf, 0);
1419 virgl_encoder_write_dword(ctx->cbuf, 0);
1420 virgl_encoder_write_dword(ctx->cbuf, 0);
1426 int virgl_encode_memory_barrier(struct virgl_context *ctx,
1429 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_MEMORY_BARRIER, 0, 1));
1430 virgl_encoder_write_dword(ctx->cbuf, flags);
1434 int virgl_encode_launch_grid(struct virgl_context *ctx,
1437 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_LAUNCH_GRID, 0, VIRGL_LAUNCH_GRID_SIZE));
1438 virgl_encoder_write_dword(ctx->cbuf, grid_info->block[0]);
1439 virgl_encoder_write_dword(ctx->cbuf, grid_info->block[1]);
1440 virgl_encoder_write_dword(ctx->cbuf, grid_info->block[2]);
1441 virgl_encoder_write_dword(ctx->cbuf, grid_info->grid[0]);
1442 virgl_encoder_write_dword(ctx->cbuf, grid_info->grid[1]);
1443 virgl_encoder_write_dword(ctx->cbuf, grid_info->grid[2]);
1446 virgl_encoder_write_res(ctx, res);
1448 virgl_encoder_write_dword(ctx->cbuf, 0);
1449 virgl_encoder_write_dword(ctx->cbuf, grid_info->indirect_offset);
1453 int virgl_encode_texture_barrier(struct virgl_context *ctx,
1456 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_TEXTURE_BARRIER, 0, 1));
1457 virgl_encoder_write_dword(ctx->cbuf, flags);
1461 int virgl_encode_host_debug_flagstring(struct virgl_context *ctx,
1479 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_SET_DEBUG_FLAGS, 0, sslen));
1480 virgl_encoder_write_block(ctx->cbuf, (const uint8_t *)flagstring, string_length);
1484 int virgl_encode_tweak(struct virgl_context *ctx, enum vrend_tweak_type tweak, uint32_t value)
1486 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_SET_TWEAKS, 0, VIRGL_SET_TWEAKS_SIZE));
1487 virgl_encoder_write_dword(ctx->cbuf, tweak);
1488 virgl_encoder_write_dword(ctx->cbuf, value);
1493 int virgl_encode_get_query_result_qbo(struct virgl_context *ctx,
1500 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_GET_QUERY_RESULT_QBO, 0, VIRGL_QUERY_RESULT_QBO_SIZE));
1501 virgl_encoder_write_dword(ctx->cbuf, handle);
1502 virgl_encoder_write_res(ctx, res);
1503 virgl_encoder_write_dword(ctx->cbuf, wait ? 1 : 0);
1504 virgl_encoder_write_dword(ctx->cbuf, result_type);
1505 virgl_encoder_write_dword(ctx->cbuf, offset);
1506 virgl_encoder_write_dword(ctx->cbuf, index);
1530 void virgl_encode_copy_transfer(struct virgl_context *ctx,
1534 struct virgl_screen *vs = virgl_screen(ctx->base.screen);
1551 virgl_encoder_write_cmd_dword(ctx, command);
1555 virgl_encoder_transfer3d_common(vs, ctx->cbuf, trans, virgl_transfer3d_explicit_stride);
1556 vs->vws->emit_res(vs->vws, ctx->cbuf, trans->copy_src_hw_res, TRUE);
1557 virgl_encoder_write_dword(ctx->cbuf, trans->copy_src_offset);
1558 virgl_encoder_write_dword(ctx->cbuf, direction_and_synchronized);
1571 void virgl_encode_get_memory_info(struct virgl_context *ctx, struct virgl_resource *res)
1573 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_GET_MEMORY_INFO, 0, 1));
1574 virgl_encoder_write_res(ctx, res);
1577 void virgl_encode_emit_string_marker(struct virgl_context *ctx,
1591 virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_EMIT_STRING_MARKER, 0, buf_len));
1592 virgl_encoder_write_dword(ctx->cbuf, len);
1593 virgl_encoder_write_block(ctx->cbuf, (const uint8_t *)message, len);