Lines Matching refs:sw_context
102 struct vmw_sw_context *sw_context,
105 struct vmw_sw_context *sw_context,
108 static int vmw_bo_to_validate_list(struct vmw_sw_context *sw_context,
121 static void vmw_resources_unreserve(struct vmw_sw_context *sw_context, in vmw_resources_unreserve() argument
125 struct list_head *list = &sw_context->resource_list; in vmw_resources_unreserve()
127 if (sw_context->dx_query_mob && !backoff) in vmw_resources_unreserve()
128 vmw_context_bind_dx_query(sw_context->dx_query_ctx, in vmw_resources_unreserve()
129 sw_context->dx_query_mob); in vmw_resources_unreserve()
147 if (val->staged_bindings != sw_context->staged_bindings) in vmw_resources_unreserve()
150 sw_context->staged_bindings_inuse = false; in vmw_resources_unreserve()
168 struct vmw_sw_context *sw_context, in vmw_cmd_ctx_first_setup() argument
173 ret = vmw_resource_context_res_add(dev_priv, sw_context, node->res); in vmw_cmd_ctx_first_setup()
177 if (!sw_context->staged_bindings) { in vmw_cmd_ctx_first_setup()
178 sw_context->staged_bindings = in vmw_cmd_ctx_first_setup()
180 if (IS_ERR(sw_context->staged_bindings)) { in vmw_cmd_ctx_first_setup()
183 ret = PTR_ERR(sw_context->staged_bindings); in vmw_cmd_ctx_first_setup()
184 sw_context->staged_bindings = NULL; in vmw_cmd_ctx_first_setup()
189 if (sw_context->staged_bindings_inuse) { in vmw_cmd_ctx_first_setup()
199 node->staged_bindings = sw_context->staged_bindings; in vmw_cmd_ctx_first_setup()
200 sw_context->staged_bindings_inuse = true; in vmw_cmd_ctx_first_setup()
217 static int vmw_resource_val_add(struct vmw_sw_context *sw_context, in vmw_resource_val_add() argument
226 if (likely(drm_ht_find_item(&sw_context->res_ht, (unsigned long) res, in vmw_resource_val_add()
243 ret = drm_ht_insert_item(&sw_context->res_ht, &node->hash); in vmw_resource_val_add()
256 list_add_tail(&node->head, &sw_context->resource_list); in vmw_resource_val_add()
263 list_add(&node->head, &sw_context->ctx_resource_list); in vmw_resource_val_add()
264 ret = vmw_cmd_ctx_first_setup(dev_priv, sw_context, node); in vmw_resource_val_add()
267 list_add_tail(&node->head, &sw_context->ctx_resource_list); in vmw_resource_val_add()
270 list_add_tail(&node->head, &sw_context->resource_list); in vmw_resource_val_add()
286 static int vmw_view_res_val_add(struct vmw_sw_context *sw_context, in vmw_view_res_val_add() argument
295 ret = vmw_resource_val_add(sw_context, vmw_view_srf(view), NULL); in vmw_view_res_val_add()
299 return vmw_resource_val_add(sw_context, view, NULL); in vmw_view_res_val_add()
314 static int vmw_view_id_val_add(struct vmw_sw_context *sw_context, in vmw_view_id_val_add() argument
317 struct vmw_resource_val_node *ctx_node = sw_context->dx_ctx_node; in vmw_view_id_val_add()
326 view = vmw_view_lookup(sw_context->man, view_type, id); in vmw_view_id_val_add()
330 ret = vmw_view_res_val_add(sw_context, view); in vmw_view_id_val_add()
348 struct vmw_sw_context *sw_context, in vmw_resource_context_res_add() argument
364 ret = vmw_resource_val_add(sw_context, res, NULL); in vmw_resource_context_res_add()
383 ret = vmw_view_res_val_add(sw_context, entry->res); in vmw_resource_context_res_add()
385 ret = vmw_resource_val_add(sw_context, entry->res, in vmw_resource_context_res_add()
397 ret = vmw_bo_to_validate_list(sw_context, in vmw_resource_context_res_add()
471 struct vmw_sw_context *sw_context, in vmw_cmd_invalid() argument
478 struct vmw_sw_context *sw_context, in vmw_cmd_ok() argument
496 static int vmw_bo_to_validate_list(struct vmw_sw_context *sw_context, in vmw_bo_to_validate_list() argument
507 if (likely(drm_ht_find_item(&sw_context->res_ht, (unsigned long) vbo, in vmw_bo_to_validate_list()
516 val_node = vval_buf - sw_context->val_bufs; in vmw_bo_to_validate_list()
518 val_node = sw_context->cur_val_buf; in vmw_bo_to_validate_list()
524 vval_buf = &sw_context->val_bufs[val_node]; in vmw_bo_to_validate_list()
526 ret = drm_ht_insert_item(&sw_context->res_ht, &vval_buf->hash); in vmw_bo_to_validate_list()
532 ++sw_context->cur_val_buf; in vmw_bo_to_validate_list()
536 list_add_tail(&val_buf->head, &sw_context->validate_nodes); in vmw_bo_to_validate_list()
556 static int vmw_resources_reserve(struct vmw_sw_context *sw_context) in vmw_resources_reserve() argument
561 list_for_each_entry(val, &sw_context->resource_list, head) { in vmw_resources_reserve()
572 (sw_context, vbo, in vmw_resources_reserve()
580 if (sw_context->dx_query_mob) { in vmw_resources_reserve()
584 vmw_context_get_dx_query_mob(sw_context->dx_query_ctx); in vmw_resources_reserve()
586 expected_dx_query_mob != sw_context->dx_query_mob) { in vmw_resources_reserve()
603 static int vmw_resources_validate(struct vmw_sw_context *sw_context) in vmw_resources_validate() argument
608 list_for_each_entry(val, &sw_context->resource_list, head) { in vmw_resources_validate()
624 (sw_context, vbo, in vmw_resources_validate()
647 struct vmw_sw_context *sw_context, in vmw_cmd_res_reloc_add() argument
656 ret = vmw_resource_relocation_add(&sw_context->res_relocations, in vmw_cmd_res_reloc_add()
658 id_loc - sw_context->buf_start); in vmw_cmd_res_reloc_add()
662 ret = vmw_resource_val_add(sw_context, res, &node); in vmw_cmd_res_reloc_add()
688 struct vmw_sw_context *sw_context, in vmw_cmd_res_check() argument
695 &sw_context->res_cache[res_type]; in vmw_cmd_res_check()
723 (&sw_context->res_relocations, res, in vmw_cmd_res_check()
724 id_loc - sw_context->buf_start); in vmw_cmd_res_check()
728 sw_context->fp->tfile, in vmw_cmd_res_check()
743 ret = vmw_cmd_res_reloc_add(dev_priv, sw_context, id_loc, in vmw_cmd_res_check()
755 BUG_ON(sw_context->error_resource != NULL); in vmw_cmd_res_check()
756 sw_context->error_resource = res; in vmw_cmd_res_check()
809 static int vmw_rebind_contexts(struct vmw_sw_context *sw_context) in vmw_rebind_contexts() argument
814 list_for_each_entry(val, &sw_context->resource_list, head) { in vmw_rebind_contexts()
846 static int vmw_view_bindings_add(struct vmw_sw_context *sw_context, in vmw_view_bindings_add() argument
853 struct vmw_resource_val_node *ctx_node = sw_context->dx_ctx_node; in vmw_view_bindings_add()
863 man = sw_context->man; in vmw_view_bindings_add()
875 ret = vmw_view_res_val_add(sw_context, view); in vmw_view_bindings_add()
908 struct vmw_sw_context *sw_context, in vmw_cmd_cid_check() argument
917 return vmw_cmd_res_check(dev_priv, sw_context, vmw_res_context, in vmw_cmd_cid_check()
922 struct vmw_sw_context *sw_context, in vmw_cmd_set_render_target_check() argument
941 ret = vmw_cmd_res_check(dev_priv, sw_context, vmw_res_context, in vmw_cmd_set_render_target_check()
947 ret = vmw_cmd_res_check(dev_priv, sw_context, vmw_res_surface, in vmw_cmd_set_render_target_check()
968 struct vmw_sw_context *sw_context, in vmw_cmd_surface_copy_check() argument
979 ret = vmw_cmd_res_check(dev_priv, sw_context, vmw_res_surface, in vmw_cmd_surface_copy_check()
985 return vmw_cmd_res_check(dev_priv, sw_context, vmw_res_surface, in vmw_cmd_surface_copy_check()
991 struct vmw_sw_context *sw_context, in vmw_cmd_buffer_copy_check() argument
1001 ret = vmw_cmd_res_check(dev_priv, sw_context, vmw_res_surface, in vmw_cmd_buffer_copy_check()
1007 return vmw_cmd_res_check(dev_priv, sw_context, vmw_res_surface, in vmw_cmd_buffer_copy_check()
1013 struct vmw_sw_context *sw_context, in vmw_cmd_pred_copy_check() argument
1023 ret = vmw_cmd_res_check(dev_priv, sw_context, vmw_res_surface, in vmw_cmd_pred_copy_check()
1029 return vmw_cmd_res_check(dev_priv, sw_context, vmw_res_surface, in vmw_cmd_pred_copy_check()
1035 struct vmw_sw_context *sw_context, in vmw_cmd_stretch_blt_check() argument
1045 ret = vmw_cmd_res_check(dev_priv, sw_context, vmw_res_surface, in vmw_cmd_stretch_blt_check()
1050 return vmw_cmd_res_check(dev_priv, sw_context, vmw_res_surface, in vmw_cmd_stretch_blt_check()
1056 struct vmw_sw_context *sw_context, in vmw_cmd_blt_surf_screen_check() argument
1066 return vmw_cmd_res_check(dev_priv, sw_context, vmw_res_surface, in vmw_cmd_blt_surf_screen_check()
1072 struct vmw_sw_context *sw_context, in vmw_cmd_present_check() argument
1083 return vmw_cmd_res_check(dev_priv, sw_context, vmw_res_surface, in vmw_cmd_present_check()
1103 struct vmw_sw_context *sw_context) in vmw_query_bo_switch_prepare() argument
1106 &sw_context->res_cache[vmw_res_context]; in vmw_query_bo_switch_prepare()
1110 sw_context->last_query_ctx = ctx_entry->res; in vmw_query_bo_switch_prepare()
1112 if (unlikely(new_query_bo != sw_context->cur_query_bo)) { in vmw_query_bo_switch_prepare()
1119 if (unlikely(sw_context->cur_query_bo != NULL)) { in vmw_query_bo_switch_prepare()
1120 sw_context->needs_post_query_barrier = true; in vmw_query_bo_switch_prepare()
1121 ret = vmw_bo_to_validate_list(sw_context, in vmw_query_bo_switch_prepare()
1122 sw_context->cur_query_bo, in vmw_query_bo_switch_prepare()
1127 sw_context->cur_query_bo = new_query_bo; in vmw_query_bo_switch_prepare()
1129 ret = vmw_bo_to_validate_list(sw_context, in vmw_query_bo_switch_prepare()
1159 struct vmw_sw_context *sw_context) in vmw_query_bo_switch_commit() argument
1166 if (sw_context->needs_post_query_barrier) { in vmw_query_bo_switch_commit()
1168 &sw_context->res_cache[vmw_res_context]; in vmw_query_bo_switch_commit()
1181 if (dev_priv->pinned_bo != sw_context->cur_query_bo) { in vmw_query_bo_switch_commit()
1187 if (!sw_context->needs_post_query_barrier) { in vmw_query_bo_switch_commit()
1188 vmw_bo_pin_reserved(sw_context->cur_query_bo, true); in vmw_query_bo_switch_commit()
1202 BUG_ON(sw_context->last_query_ctx == NULL); in vmw_query_bo_switch_commit()
1203 dev_priv->query_cid = sw_context->last_query_ctx->id; in vmw_query_bo_switch_commit()
1206 vmw_dmabuf_reference(sw_context->cur_query_bo); in vmw_query_bo_switch_commit()
1230 struct vmw_sw_context *sw_context, in vmw_translate_mob_ptr() argument
1239 ret = vmw_user_dmabuf_lookup(sw_context->fp->tfile, handle, &vmw_bo, in vmw_translate_mob_ptr()
1247 if (unlikely(sw_context->cur_reloc >= VMWGFX_MAX_RELOCATIONS)) { in vmw_translate_mob_ptr()
1254 reloc = &sw_context->relocs[sw_context->cur_reloc++]; in vmw_translate_mob_ptr()
1258 ret = vmw_bo_to_validate_list(sw_context, vmw_bo, true, &reloc->index); in vmw_translate_mob_ptr()
1291 struct vmw_sw_context *sw_context, in vmw_translate_guest_ptr() argument
1300 ret = vmw_user_dmabuf_lookup(sw_context->fp->tfile, handle, &vmw_bo, in vmw_translate_guest_ptr()
1308 if (unlikely(sw_context->cur_reloc >= VMWGFX_MAX_RELOCATIONS)) { in vmw_translate_guest_ptr()
1315 reloc = &sw_context->relocs[sw_context->cur_reloc++]; in vmw_translate_guest_ptr()
1318 ret = vmw_bo_to_validate_list(sw_context, vmw_bo, false, &reloc->index); in vmw_translate_guest_ptr()
1343 struct vmw_sw_context *sw_context, in vmw_cmd_dx_define_query() argument
1352 struct vmw_resource_val_node *ctx_node = sw_context->dx_ctx_node; in vmw_cmd_dx_define_query()
1389 struct vmw_sw_context *sw_context, in vmw_cmd_dx_bind_query() argument
1407 ret = vmw_translate_mob_ptr(dev_priv, sw_context, &cmd->q.mobid, in vmw_cmd_dx_bind_query()
1413 sw_context->dx_query_mob = vmw_bo; in vmw_cmd_dx_bind_query()
1414 sw_context->dx_query_ctx = sw_context->dx_ctx_node->res; in vmw_cmd_dx_bind_query()
1431 struct vmw_sw_context *sw_context, in vmw_cmd_begin_gb_query() argument
1442 return vmw_cmd_res_check(dev_priv, sw_context, vmw_res_context, in vmw_cmd_begin_gb_query()
1455 struct vmw_sw_context *sw_context, in vmw_cmd_begin_query() argument
1480 return vmw_cmd_begin_gb_query(dev_priv, sw_context, header); in vmw_cmd_begin_query()
1483 return vmw_cmd_res_check(dev_priv, sw_context, vmw_res_context, in vmw_cmd_begin_query()
1496 struct vmw_sw_context *sw_context, in vmw_cmd_end_gb_query() argument
1507 ret = vmw_cmd_cid_check(dev_priv, sw_context, header); in vmw_cmd_end_gb_query()
1511 ret = vmw_translate_mob_ptr(dev_priv, sw_context, in vmw_cmd_end_gb_query()
1517 ret = vmw_query_bo_switch_prepare(dev_priv, vmw_bo, sw_context); in vmw_cmd_end_gb_query()
1531 struct vmw_sw_context *sw_context, in vmw_cmd_end_query() argument
1558 return vmw_cmd_end_gb_query(dev_priv, sw_context, header); in vmw_cmd_end_query()
1561 ret = vmw_cmd_cid_check(dev_priv, sw_context, header); in vmw_cmd_end_query()
1565 ret = vmw_translate_guest_ptr(dev_priv, sw_context, in vmw_cmd_end_query()
1571 ret = vmw_query_bo_switch_prepare(dev_priv, vmw_bo, sw_context); in vmw_cmd_end_query()
1585 struct vmw_sw_context *sw_context, in vmw_cmd_wait_gb_query() argument
1596 ret = vmw_cmd_cid_check(dev_priv, sw_context, header); in vmw_cmd_wait_gb_query()
1600 ret = vmw_translate_mob_ptr(dev_priv, sw_context, in vmw_cmd_wait_gb_query()
1618 struct vmw_sw_context *sw_context, in vmw_cmd_wait_query() argument
1645 return vmw_cmd_wait_gb_query(dev_priv, sw_context, header); in vmw_cmd_wait_query()
1648 ret = vmw_cmd_cid_check(dev_priv, sw_context, header); in vmw_cmd_wait_query()
1652 ret = vmw_translate_guest_ptr(dev_priv, sw_context, in vmw_cmd_wait_query()
1663 struct vmw_sw_context *sw_context, in vmw_cmd_dma() argument
1686 ret = vmw_translate_guest_ptr(dev_priv, sw_context, in vmw_cmd_dma()
1703 ret = vmw_cmd_res_check(dev_priv, sw_context, vmw_res_surface, in vmw_cmd_dma()
1712 srf = vmw_res_to_srf(sw_context->res_cache[vmw_res_surface].res); in vmw_cmd_dma()
1714 vmw_kms_cursor_snoop(srf, sw_context->fp->tfile, &vmw_bo->base, in vmw_cmd_dma()
1723 struct vmw_sw_context *sw_context, in vmw_cmd_draw() argument
1737 ret = vmw_cmd_cid_check(dev_priv, sw_context, header); in vmw_cmd_draw()
1750 ret = vmw_cmd_res_check(dev_priv, sw_context, vmw_res_surface, in vmw_cmd_draw()
1766 ret = vmw_cmd_res_check(dev_priv, sw_context, vmw_res_surface, in vmw_cmd_draw()
1777 struct vmw_sw_context *sw_context, in vmw_cmd_tex_state() argument
1796 ret = vmw_cmd_res_check(dev_priv, sw_context, vmw_res_context, in vmw_cmd_tex_state()
1812 ret = vmw_cmd_res_check(dev_priv, sw_context, vmw_res_surface, in vmw_cmd_tex_state()
1834 struct vmw_sw_context *sw_context, in vmw_cmd_check_define_gmrfb() argument
1845 ret = vmw_translate_guest_ptr(dev_priv, sw_context, in vmw_cmd_check_define_gmrfb()
1873 struct vmw_sw_context *sw_context, in vmw_cmd_res_switch_backup() argument
1881 ret = vmw_translate_mob_ptr(dev_priv, sw_context, buf_id, &dma_buf); in vmw_cmd_res_switch_backup()
1914 struct vmw_sw_context *sw_context, in vmw_cmd_switch_backup() argument
1925 ret = vmw_cmd_res_check(dev_priv, sw_context, res_type, in vmw_cmd_switch_backup()
1930 return vmw_cmd_res_switch_backup(dev_priv, sw_context, val_node, in vmw_cmd_switch_backup()
1943 struct vmw_sw_context *sw_context, in vmw_cmd_bind_gb_surface() argument
1953 return vmw_cmd_switch_backup(dev_priv, sw_context, vmw_res_surface, in vmw_cmd_bind_gb_surface()
1968 struct vmw_sw_context *sw_context, in vmw_cmd_update_gb_image() argument
1978 return vmw_cmd_res_check(dev_priv, sw_context, vmw_res_surface, in vmw_cmd_update_gb_image()
1992 struct vmw_sw_context *sw_context, in vmw_cmd_update_gb_surface() argument
2002 return vmw_cmd_res_check(dev_priv, sw_context, vmw_res_surface, in vmw_cmd_update_gb_surface()
2016 struct vmw_sw_context *sw_context, in vmw_cmd_readback_gb_image() argument
2026 return vmw_cmd_res_check(dev_priv, sw_context, vmw_res_surface, in vmw_cmd_readback_gb_image()
2040 struct vmw_sw_context *sw_context, in vmw_cmd_readback_gb_surface() argument
2050 return vmw_cmd_res_check(dev_priv, sw_context, vmw_res_surface, in vmw_cmd_readback_gb_surface()
2064 struct vmw_sw_context *sw_context, in vmw_cmd_invalidate_gb_image() argument
2074 return vmw_cmd_res_check(dev_priv, sw_context, vmw_res_surface, in vmw_cmd_invalidate_gb_image()
2088 struct vmw_sw_context *sw_context, in vmw_cmd_invalidate_gb_surface() argument
2098 return vmw_cmd_res_check(dev_priv, sw_context, vmw_res_surface, in vmw_cmd_invalidate_gb_surface()
2113 struct vmw_sw_context *sw_context, in vmw_cmd_shader_define() argument
2127 ret = vmw_cmd_res_check(dev_priv, sw_context, vmw_res_context, in vmw_cmd_shader_define()
2141 &sw_context->staged_cmd_res); in vmw_cmd_shader_define()
2145 return vmw_resource_relocation_add(&sw_context->res_relocations, in vmw_cmd_shader_define()
2147 sw_context->buf_start); in vmw_cmd_shader_define()
2161 struct vmw_sw_context *sw_context, in vmw_cmd_shader_destroy() argument
2174 ret = vmw_cmd_res_check(dev_priv, sw_context, vmw_res_context, in vmw_cmd_shader_destroy()
2186 &sw_context->staged_cmd_res); in vmw_cmd_shader_destroy()
2190 return vmw_resource_relocation_add(&sw_context->res_relocations, in vmw_cmd_shader_destroy()
2192 sw_context->buf_start); in vmw_cmd_shader_destroy()
2206 struct vmw_sw_context *sw_context, in vmw_cmd_set_shader() argument
2227 ret = vmw_cmd_res_check(dev_priv, sw_context, vmw_res_context, in vmw_cmd_set_shader()
2242 ret = vmw_cmd_res_reloc_add(dev_priv, sw_context, in vmw_cmd_set_shader()
2252 ret = vmw_cmd_res_check(dev_priv, sw_context, in vmw_cmd_set_shader()
2278 struct vmw_sw_context *sw_context, in vmw_cmd_set_shader_const() argument
2290 ret = vmw_cmd_res_check(dev_priv, sw_context, vmw_res_context, in vmw_cmd_set_shader_const()
2311 struct vmw_sw_context *sw_context, in vmw_cmd_bind_gb_shader() argument
2322 return vmw_cmd_switch_backup(dev_priv, sw_context, vmw_res_shader, in vmw_cmd_bind_gb_shader()
2338 struct vmw_sw_context *sw_context, in vmw_cmd_dx_set_single_constant_buffer() argument
2346 struct vmw_resource_val_node *ctx_node = sw_context->dx_ctx_node; in vmw_cmd_dx_set_single_constant_buffer()
2356 ret = vmw_cmd_res_check(dev_priv, sw_context, vmw_res_surface, in vmw_cmd_dx_set_single_constant_buffer()
2393 struct vmw_sw_context *sw_context, in vmw_cmd_dx_set_shader_res() argument
2410 return vmw_view_bindings_add(sw_context, vmw_view_sr, in vmw_cmd_dx_set_shader_res()
2426 struct vmw_sw_context *sw_context, in vmw_cmd_dx_set_shader() argument
2434 struct vmw_resource_val_node *ctx_node = sw_context->dx_ctx_node; in vmw_cmd_dx_set_shader()
2452 res = vmw_shader_lookup(sw_context->man, cmd->body.shaderId, 0); in vmw_cmd_dx_set_shader()
2458 ret = vmw_resource_val_add(sw_context, res, NULL); in vmw_cmd_dx_set_shader()
2486 struct vmw_sw_context *sw_context, in vmw_cmd_dx_set_vertex_buffers() argument
2489 struct vmw_resource_val_node *ctx_node = sw_context->dx_ctx_node; in vmw_cmd_dx_set_vertex_buffers()
2514 ret = vmw_cmd_res_check(dev_priv, sw_context, vmw_res_surface, in vmw_cmd_dx_set_vertex_buffers()
2543 struct vmw_sw_context *sw_context, in vmw_cmd_dx_set_index_buffer() argument
2546 struct vmw_resource_val_node *ctx_node = sw_context->dx_ctx_node; in vmw_cmd_dx_set_index_buffer()
2561 ret = vmw_cmd_res_check(dev_priv, sw_context, vmw_res_surface, in vmw_cmd_dx_set_index_buffer()
2587 struct vmw_sw_context *sw_context, in vmw_cmd_dx_set_rendertargets() argument
2603 ret = vmw_view_bindings_add(sw_context, vmw_view_ds, in vmw_cmd_dx_set_rendertargets()
2609 return vmw_view_bindings_add(sw_context, vmw_view_rt, in vmw_cmd_dx_set_rendertargets()
2623 struct vmw_sw_context *sw_context, in vmw_cmd_dx_clear_rendertarget_view() argument
2631 return vmw_view_id_val_add(sw_context, vmw_view_rt, in vmw_cmd_dx_clear_rendertarget_view()
2644 struct vmw_sw_context *sw_context, in vmw_cmd_dx_clear_depthstencil_view() argument
2652 return vmw_view_id_val_add(sw_context, vmw_view_ds, in vmw_cmd_dx_clear_depthstencil_view()
2657 struct vmw_sw_context *sw_context, in vmw_cmd_dx_view_define() argument
2660 struct vmw_resource_val_node *ctx_node = sw_context->dx_ctx_node; in vmw_cmd_dx_view_define()
2682 ret = vmw_cmd_res_check(dev_priv, sw_context, vmw_res_surface, in vmw_cmd_dx_view_define()
2694 return vmw_view_add(sw_context->man, in vmw_cmd_dx_view_define()
2701 &sw_context->staged_cmd_res); in vmw_cmd_dx_view_define()
2713 struct vmw_sw_context *sw_context, in vmw_cmd_dx_set_so_targets() argument
2716 struct vmw_resource_val_node *ctx_node = sw_context->dx_ctx_node; in vmw_cmd_dx_set_so_targets()
2741 ret = vmw_cmd_res_check(dev_priv, sw_context, vmw_res_surface, in vmw_cmd_dx_set_so_targets()
2762 struct vmw_sw_context *sw_context, in vmw_cmd_dx_so_define() argument
2765 struct vmw_resource_val_node *ctx_node = sw_context->dx_ctx_node; in vmw_cmd_dx_so_define()
2801 struct vmw_sw_context *sw_context, in vmw_cmd_dx_check_subresource() argument
2823 return vmw_cmd_res_check(dev_priv, sw_context, vmw_res_surface, in vmw_cmd_dx_check_subresource()
2829 struct vmw_sw_context *sw_context, in vmw_cmd_dx_cid_check() argument
2832 struct vmw_resource_val_node *ctx_node = sw_context->dx_ctx_node; in vmw_cmd_dx_cid_check()
2855 struct vmw_sw_context *sw_context, in vmw_cmd_dx_view_remove() argument
2858 struct vmw_resource_val_node *ctx_node = sw_context->dx_ctx_node; in vmw_cmd_dx_view_remove()
2872 ret = vmw_view_remove(sw_context->man, in vmw_cmd_dx_view_remove()
2874 &sw_context->staged_cmd_res, in vmw_cmd_dx_view_remove()
2883 return vmw_view_res_val_add(sw_context, view); in vmw_cmd_dx_view_remove()
2895 struct vmw_sw_context *sw_context, in vmw_cmd_dx_define_shader() argument
2898 struct vmw_resource_val_node *ctx_node = sw_context->dx_ctx_node; in vmw_cmd_dx_define_shader()
2917 return vmw_dx_shader_add(sw_context->man, ctx_node->res, in vmw_cmd_dx_define_shader()
2919 &sw_context->staged_cmd_res); in vmw_cmd_dx_define_shader()
2931 struct vmw_sw_context *sw_context, in vmw_cmd_dx_destroy_shader() argument
2934 struct vmw_resource_val_node *ctx_node = sw_context->dx_ctx_node; in vmw_cmd_dx_destroy_shader()
2946 ret = vmw_shader_remove(sw_context->man, cmd->body.shaderId, 0, in vmw_cmd_dx_destroy_shader()
2947 &sw_context->staged_cmd_res); in vmw_cmd_dx_destroy_shader()
2963 struct vmw_sw_context *sw_context, in vmw_cmd_dx_bind_shader() argument
2976 ret = vmw_cmd_res_check(dev_priv, sw_context, vmw_res_context, in vmw_cmd_dx_bind_shader()
2982 ctx_node = sw_context->dx_ctx_node; in vmw_cmd_dx_bind_shader()
2996 ret = vmw_resource_val_add(sw_context, res, &res_node); in vmw_cmd_dx_bind_shader()
3003 ret = vmw_cmd_res_switch_backup(dev_priv, sw_context, res_node, in vmw_cmd_dx_bind_shader()
3013 struct vmw_sw_context *sw_context, in vmw_cmd_check_not_3d() argument
3044 if (unlikely(!sw_context->kernel)) { in vmw_cmd_check_not_3d()
3050 return vmw_cmd_check_define_gmrfb(dev_priv, sw_context, buf); in vmw_cmd_check_not_3d()
3365 struct vmw_sw_context *sw_context, in vmw_cmd_check() argument
3378 return vmw_cmd_check_not_3d(dev_priv, sw_context, buf, size); in vmw_cmd_check()
3395 if (unlikely(!entry->user_allow && !sw_context->kernel)) in vmw_cmd_check()
3404 ret = entry->func(dev_priv, sw_context, header); in vmw_cmd_check()
3428 struct vmw_sw_context *sw_context, in vmw_cmd_check_all() argument
3435 sw_context->buf_start = buf; in vmw_cmd_check_all()
3439 ret = vmw_cmd_check(dev_priv, sw_context, buf, &size); in vmw_cmd_check_all()
3454 static void vmw_free_relocations(struct vmw_sw_context *sw_context) in vmw_free_relocations() argument
3456 sw_context->cur_reloc = 0; in vmw_free_relocations()
3459 static void vmw_apply_relocations(struct vmw_sw_context *sw_context) in vmw_apply_relocations() argument
3466 for (i = 0; i < sw_context->cur_reloc; ++i) { in vmw_apply_relocations()
3467 reloc = &sw_context->relocs[i]; in vmw_apply_relocations()
3468 validate = &sw_context->val_bufs[reloc->index].base; in vmw_apply_relocations()
3485 vmw_free_relocations(sw_context); in vmw_apply_relocations()
3494 static void vmw_resource_list_unreference(struct vmw_sw_context *sw_context, in vmw_resource_list_unreference() argument
3508 if (val->staged_bindings != sw_context->staged_bindings) in vmw_resource_list_unreference()
3511 sw_context->staged_bindings_inuse = false; in vmw_resource_list_unreference()
3519 static void vmw_clear_validations(struct vmw_sw_context *sw_context) in vmw_clear_validations() argument
3527 list_for_each_entry_safe(entry, next, &sw_context->validate_nodes, in vmw_clear_validations()
3531 (void) drm_ht_remove_item(&sw_context->res_ht, &entry->hash); in vmw_clear_validations()
3532 sw_context->cur_val_buf--; in vmw_clear_validations()
3534 BUG_ON(sw_context->cur_val_buf != 0); in vmw_clear_validations()
3536 list_for_each_entry(val, &sw_context->resource_list, head) in vmw_clear_validations()
3537 (void) drm_ht_remove_item(&sw_context->res_ht, &val->hash); in vmw_clear_validations()
3578 struct vmw_sw_context *sw_context) in vmw_validate_buffers() argument
3583 list_for_each_entry(entry, &sw_context->validate_nodes, base.head) { in vmw_validate_buffers()
3593 static int vmw_resize_cmd_bounce(struct vmw_sw_context *sw_context, in vmw_resize_cmd_bounce() argument
3596 if (likely(sw_context->cmd_bounce_size >= size)) in vmw_resize_cmd_bounce()
3599 if (sw_context->cmd_bounce_size == 0) in vmw_resize_cmd_bounce()
3600 sw_context->cmd_bounce_size = VMWGFX_CMD_BOUNCE_INIT_SIZE; in vmw_resize_cmd_bounce()
3602 while (sw_context->cmd_bounce_size < size) { in vmw_resize_cmd_bounce()
3603 sw_context->cmd_bounce_size = in vmw_resize_cmd_bounce()
3604 PAGE_ALIGN(sw_context->cmd_bounce_size + in vmw_resize_cmd_bounce()
3605 (sw_context->cmd_bounce_size >> 1)); in vmw_resize_cmd_bounce()
3608 if (sw_context->cmd_bounce != NULL) in vmw_resize_cmd_bounce()
3609 vfree(sw_context->cmd_bounce); in vmw_resize_cmd_bounce()
3611 sw_context->cmd_bounce = vmalloc(sw_context->cmd_bounce_size); in vmw_resize_cmd_bounce()
3613 if (sw_context->cmd_bounce == NULL) { in vmw_resize_cmd_bounce()
3615 sw_context->cmd_bounce_size = 0; in vmw_resize_cmd_bounce()
3748 struct vmw_sw_context *sw_context) in vmw_execbuf_submit_fifo() argument
3752 if (sw_context->dx_ctx_node) in vmw_execbuf_submit_fifo()
3754 sw_context->dx_ctx_node->res->id); in vmw_execbuf_submit_fifo()
3762 vmw_apply_relocations(sw_context); in vmw_execbuf_submit_fifo()
3764 vmw_resource_relocations_apply(cmd, &sw_context->res_relocations); in vmw_execbuf_submit_fifo()
3765 vmw_resource_relocations_free(&sw_context->res_relocations); in vmw_execbuf_submit_fifo()
3786 struct vmw_sw_context *sw_context) in vmw_execbuf_submit_cmdbuf() argument
3788 u32 id = ((sw_context->dx_ctx_node) ? sw_context->dx_ctx_node->res->id : in vmw_execbuf_submit_cmdbuf()
3793 vmw_apply_relocations(sw_context); in vmw_execbuf_submit_cmdbuf()
3794 vmw_resource_relocations_apply(cmd, &sw_context->res_relocations); in vmw_execbuf_submit_cmdbuf()
3795 vmw_resource_relocations_free(&sw_context->res_relocations); in vmw_execbuf_submit_cmdbuf()
3862 struct vmw_sw_context *sw_context, in vmw_execbuf_tie_context() argument
3872 ret = vmw_user_resource_lookup_handle(dev_priv, sw_context->fp->tfile, in vmw_execbuf_tie_context()
3881 ret = vmw_resource_val_add(sw_context, res, &ctx_node); in vmw_execbuf_tie_context()
3885 sw_context->dx_ctx_node = ctx_node; in vmw_execbuf_tie_context()
3886 sw_context->man = vmw_context_res_man(res); in vmw_execbuf_tie_context()
3902 struct vmw_sw_context *sw_context = &dev_priv->ctx; in vmw_execbuf_process() local
3931 sw_context->kernel = false; in vmw_execbuf_process()
3933 ret = vmw_resize_cmd_bounce(sw_context, command_size); in vmw_execbuf_process()
3938 ret = copy_from_user(sw_context->cmd_bounce, in vmw_execbuf_process()
3946 kernel_commands = sw_context->cmd_bounce; in vmw_execbuf_process()
3948 sw_context->kernel = true; in vmw_execbuf_process()
3950 sw_context->fp = vmw_fpriv(file_priv); in vmw_execbuf_process()
3951 sw_context->cur_reloc = 0; in vmw_execbuf_process()
3952 sw_context->cur_val_buf = 0; in vmw_execbuf_process()
3953 INIT_LIST_HEAD(&sw_context->resource_list); in vmw_execbuf_process()
3954 INIT_LIST_HEAD(&sw_context->ctx_resource_list); in vmw_execbuf_process()
3955 sw_context->cur_query_bo = dev_priv->pinned_bo; in vmw_execbuf_process()
3956 sw_context->last_query_ctx = NULL; in vmw_execbuf_process()
3957 sw_context->needs_post_query_barrier = false; in vmw_execbuf_process()
3958 sw_context->dx_ctx_node = NULL; in vmw_execbuf_process()
3959 sw_context->dx_query_mob = NULL; in vmw_execbuf_process()
3960 sw_context->dx_query_ctx = NULL; in vmw_execbuf_process()
3961 memset(sw_context->res_cache, 0, sizeof(sw_context->res_cache)); in vmw_execbuf_process()
3962 INIT_LIST_HEAD(&sw_context->validate_nodes); in vmw_execbuf_process()
3963 INIT_LIST_HEAD(&sw_context->res_relocations); in vmw_execbuf_process()
3964 if (sw_context->staged_bindings) in vmw_execbuf_process()
3965 vmw_binding_state_reset(sw_context->staged_bindings); in vmw_execbuf_process()
3967 if (!sw_context->res_ht_initialized) { in vmw_execbuf_process()
3968 ret = drm_ht_create(&sw_context->res_ht, VMW_RES_HT_ORDER); in vmw_execbuf_process()
3971 sw_context->res_ht_initialized = true; in vmw_execbuf_process()
3973 INIT_LIST_HEAD(&sw_context->staged_cmd_res); in vmw_execbuf_process()
3975 ret = vmw_execbuf_tie_context(dev_priv, sw_context, dx_context_handle); in vmw_execbuf_process()
3977 list_splice_init(&sw_context->ctx_resource_list, in vmw_execbuf_process()
3978 &sw_context->resource_list); in vmw_execbuf_process()
3982 ret = vmw_cmd_check_all(dev_priv, sw_context, kernel_commands, in vmw_execbuf_process()
3989 list_splice_init(&sw_context->ctx_resource_list, in vmw_execbuf_process()
3990 &sw_context->resource_list); in vmw_execbuf_process()
3995 ret = vmw_resources_reserve(sw_context); in vmw_execbuf_process()
3999 ret = ttm_eu_reserve_buffers(&ticket, &sw_context->validate_nodes, in vmw_execbuf_process()
4004 ret = vmw_validate_buffers(dev_priv, sw_context); in vmw_execbuf_process()
4008 ret = vmw_resources_validate(sw_context); in vmw_execbuf_process()
4019 ret = vmw_rebind_contexts(sw_context); in vmw_execbuf_process()
4026 command_size, sw_context); in vmw_execbuf_process()
4029 sw_context); in vmw_execbuf_process()
4036 vmw_query_bo_switch_commit(dev_priv, sw_context); in vmw_execbuf_process()
4049 vmw_resources_unreserve(sw_context, false); in vmw_execbuf_process()
4051 ttm_eu_fence_buffer_objects(&ticket, &sw_context->validate_nodes, in vmw_execbuf_process()
4058 vmw_clear_validations(sw_context); in vmw_execbuf_process()
4070 list_splice_init(&sw_context->resource_list, &resource_list); in vmw_execbuf_process()
4071 vmw_cmdbuf_res_commit(&sw_context->staged_cmd_res); in vmw_execbuf_process()
4078 vmw_resource_list_unreference(sw_context, &resource_list); in vmw_execbuf_process()
4085 ttm_eu_backoff_reservation(&ticket, &sw_context->validate_nodes); in vmw_execbuf_process()
4087 vmw_resources_unreserve(sw_context, true); in vmw_execbuf_process()
4088 vmw_resource_relocations_free(&sw_context->res_relocations); in vmw_execbuf_process()
4089 vmw_free_relocations(sw_context); in vmw_execbuf_process()
4090 vmw_clear_validations(sw_context); in vmw_execbuf_process()
4095 list_splice_init(&sw_context->resource_list, &resource_list); in vmw_execbuf_process()
4096 error_resource = sw_context->error_resource; in vmw_execbuf_process()
4097 sw_context->error_resource = NULL; in vmw_execbuf_process()
4098 vmw_cmdbuf_res_revert(&sw_context->staged_cmd_res); in vmw_execbuf_process()
4105 vmw_resource_list_unreference(sw_context, &resource_list); in vmw_execbuf_process()