Lines Matching refs:cbs

119 static int vmw_binding_emit_dirty(struct vmw_ctx_binding_state *cbs);
244 vmw_cbs_context(const struct vmw_ctx_binding_state *cbs) in vmw_cbs_context() argument
246 if (list_empty(&cbs->list)) in vmw_cbs_context()
249 return list_first_entry(&cbs->list, struct vmw_ctx_bindinfo, in vmw_cbs_context()
262 vmw_binding_loc(struct vmw_ctx_binding_state *cbs, in vmw_binding_loc() argument
268 return (struct vmw_ctx_bindinfo *)((u8 *) cbs + offset); in vmw_binding_loc()
297 void vmw_binding_add(struct vmw_ctx_binding_state *cbs, in vmw_binding_add() argument
302 vmw_binding_loc(cbs, bi->bt, shader_slot, slot); in vmw_binding_add()
310 list_add(&loc->ctx_list, &cbs->list); in vmw_binding_add()
321 static void vmw_binding_transfer(struct vmw_ctx_binding_state *cbs, in vmw_binding_transfer() argument
327 ((unsigned long) cbs + offset); in vmw_binding_transfer()
337 list_add_tail(&loc->ctx_list, &cbs->list); in vmw_binding_transfer()
351 void vmw_binding_state_kill(struct vmw_ctx_binding_state *cbs) in vmw_binding_state_kill() argument
355 vmw_binding_state_scrub(cbs); in vmw_binding_state_kill()
356 list_for_each_entry_safe(entry, next, &cbs->list, ctx_list) in vmw_binding_state_kill()
369 void vmw_binding_state_scrub(struct vmw_ctx_binding_state *cbs) in vmw_binding_state_scrub() argument
373 list_for_each_entry(entry, &cbs->list, ctx_list) { in vmw_binding_state_scrub()
381 (void) vmw_binding_emit_dirty(cbs); in vmw_binding_state_scrub()
424 struct vmw_ctx_binding_state *cbs = in vmw_binding_res_list_scrub() local
427 (void) vmw_binding_emit_dirty(cbs); in vmw_binding_res_list_scrub()
463 int vmw_binding_rebind_all(struct vmw_ctx_binding_state *cbs) in vmw_binding_rebind_all() argument
468 list_for_each_entry(entry, &cbs->list, ctx_list) { in vmw_binding_rebind_all()
483 return vmw_binding_emit_dirty(cbs); in vmw_binding_rebind_all()
683 static void vmw_collect_view_ids(struct vmw_ctx_binding_state *cbs, in vmw_collect_view_ids() argument
691 cbs->bind_cmd_count = 0; in vmw_collect_view_ids()
692 cbs->bind_first_slot = 0; in vmw_collect_view_ids()
698 cbs->bind_cmd_buffer[cbs->bind_cmd_count++] = in vmw_collect_view_ids()
718 static void vmw_collect_dirty_view_ids(struct vmw_ctx_binding_state *cbs, in vmw_collect_dirty_view_ids() argument
727 cbs->bind_cmd_count = 0; in vmw_collect_dirty_view_ids()
730 cbs->bind_first_slot = i; in vmw_collect_dirty_view_ids()
734 cbs->bind_cmd_buffer[cbs->bind_cmd_count++] = in vmw_collect_dirty_view_ids()
751 static int vmw_emit_set_sr(struct vmw_ctx_binding_state *cbs, in vmw_emit_set_sr() argument
755 &cbs->per_shader[shader_slot].shader_res[0].bi; in vmw_emit_set_sr()
761 const struct vmw_resource *ctx = vmw_cbs_context(cbs); in vmw_emit_set_sr()
763 vmw_collect_dirty_view_ids(cbs, loc, in vmw_emit_set_sr()
764 cbs->per_shader[shader_slot].dirty_sr, in vmw_emit_set_sr()
766 if (cbs->bind_cmd_count == 0) in vmw_emit_set_sr()
769 view_id_size = cbs->bind_cmd_count*sizeof(uint32); in vmw_emit_set_sr()
781 cmd->body.startView = cbs->bind_first_slot; in vmw_emit_set_sr()
783 memcpy(&cmd[1], cbs->bind_cmd_buffer, view_id_size); in vmw_emit_set_sr()
786 bitmap_clear(cbs->per_shader[shader_slot].dirty_sr, in vmw_emit_set_sr()
787 cbs->bind_first_slot, cbs->bind_cmd_count); in vmw_emit_set_sr()
797 static int vmw_emit_set_rt(struct vmw_ctx_binding_state *cbs) in vmw_emit_set_rt() argument
799 const struct vmw_ctx_bindinfo *loc = &cbs->render_targets[0].bi; in vmw_emit_set_rt()
805 const struct vmw_resource *ctx = vmw_cbs_context(cbs); in vmw_emit_set_rt()
807 vmw_collect_view_ids(cbs, loc, SVGA3D_MAX_SIMULTANEOUS_RENDER_TARGETS); in vmw_emit_set_rt()
808 view_id_size = cbs->bind_cmd_count*sizeof(uint32); in vmw_emit_set_rt()
820 if (cbs->ds_view.bi.ctx && !cbs->ds_view.bi.scrubbed) in vmw_emit_set_rt()
821 cmd->body.depthStencilViewId = cbs->ds_view.bi.res->id; in vmw_emit_set_rt()
825 memcpy(&cmd[1], cbs->bind_cmd_buffer, view_id_size); in vmw_emit_set_rt()
847 static void vmw_collect_so_targets(struct vmw_ctx_binding_state *cbs, in vmw_collect_so_targets() argument
854 SVGA3dSoTarget *so_buffer = (SVGA3dSoTarget *) cbs->bind_cmd_buffer; in vmw_collect_so_targets()
856 cbs->bind_cmd_count = 0; in vmw_collect_so_targets()
857 cbs->bind_first_slot = 0; in vmw_collect_so_targets()
860 ++cbs->bind_cmd_count) { in vmw_collect_so_targets()
881 static int vmw_emit_set_so(struct vmw_ctx_binding_state *cbs) in vmw_emit_set_so() argument
883 const struct vmw_ctx_bindinfo *loc = &cbs->so_targets[0].bi; in vmw_emit_set_so()
889 const struct vmw_resource *ctx = vmw_cbs_context(cbs); in vmw_emit_set_so()
891 vmw_collect_so_targets(cbs, loc, SVGA3D_DX_MAX_SOTARGETS); in vmw_emit_set_so()
892 if (cbs->bind_cmd_count == 0) in vmw_emit_set_so()
895 so_target_size = cbs->bind_cmd_count*sizeof(SVGA3dSoTarget); in vmw_emit_set_so()
906 memcpy(&cmd[1], cbs->bind_cmd_buffer, so_target_size); in vmw_emit_set_so()
920 static int vmw_binding_emit_dirty_ps(struct vmw_ctx_binding_state *cbs) in vmw_binding_emit_dirty_ps() argument
922 struct vmw_dx_shader_bindings *sb = &cbs->per_shader[0]; in vmw_binding_emit_dirty_ps()
930 ret = vmw_emit_set_sr(cbs, i); in vmw_binding_emit_dirty_ps()
955 static void vmw_collect_dirty_vbs(struct vmw_ctx_binding_state *cbs, in vmw_collect_dirty_vbs() argument
963 SVGA3dVertexBuffer *vbs = (SVGA3dVertexBuffer *) &cbs->bind_cmd_buffer; in vmw_collect_dirty_vbs()
965 cbs->bind_cmd_count = 0; in vmw_collect_dirty_vbs()
968 cbs->bind_first_slot = i; in vmw_collect_dirty_vbs()
981 cbs->bind_cmd_count++; in vmw_collect_dirty_vbs()
996 static int vmw_emit_set_vb(struct vmw_ctx_binding_state *cbs) in vmw_emit_set_vb() argument
999 &cbs->vertex_buffers[0].bi; in vmw_emit_set_vb()
1005 const struct vmw_resource *ctx = vmw_cbs_context(cbs); in vmw_emit_set_vb()
1007 vmw_collect_dirty_vbs(cbs, loc, cbs->dirty_vb, in vmw_emit_set_vb()
1009 if (cbs->bind_cmd_count == 0) in vmw_emit_set_vb()
1012 set_vb_size = cbs->bind_cmd_count*sizeof(SVGA3dVertexBuffer); in vmw_emit_set_vb()
1023 cmd->body.startBuffer = cbs->bind_first_slot; in vmw_emit_set_vb()
1025 memcpy(&cmd[1], cbs->bind_cmd_buffer, set_vb_size); in vmw_emit_set_vb()
1028 bitmap_clear(cbs->dirty_vb, in vmw_emit_set_vb()
1029 cbs->bind_first_slot, cbs->bind_cmd_count); in vmw_emit_set_vb()
1044 static int vmw_binding_emit_dirty(struct vmw_ctx_binding_state *cbs) in vmw_binding_emit_dirty() argument
1049 while ((hit = find_next_bit(&cbs->dirty, VMW_BINDING_NUM_BITS, hit)) in vmw_binding_emit_dirty()
1054 ret = vmw_emit_set_rt(cbs); in vmw_binding_emit_dirty()
1057 ret = vmw_binding_emit_dirty_ps(cbs); in vmw_binding_emit_dirty()
1060 ret = vmw_emit_set_so(cbs); in vmw_binding_emit_dirty()
1063 ret = vmw_emit_set_vb(cbs); in vmw_binding_emit_dirty()
1071 __clear_bit(hit, &cbs->dirty); in vmw_binding_emit_dirty()
1089 struct vmw_ctx_binding_state *cbs = in vmw_binding_scrub_sr() local
1092 __set_bit(biv->slot, cbs->per_shader[biv->shader_slot].dirty_sr); in vmw_binding_scrub_sr()
1094 &cbs->per_shader[biv->shader_slot].dirty); in vmw_binding_scrub_sr()
1095 __set_bit(VMW_BINDING_PS_BIT, &cbs->dirty); in vmw_binding_scrub_sr()
1109 struct vmw_ctx_binding_state *cbs = in vmw_binding_scrub_dx_rt() local
1112 __set_bit(VMW_BINDING_RT_BIT, &cbs->dirty); in vmw_binding_scrub_dx_rt()
1126 struct vmw_ctx_binding_state *cbs = in vmw_binding_scrub_so() local
1129 __set_bit(VMW_BINDING_SO_BIT, &cbs->dirty); in vmw_binding_scrub_so()
1145 struct vmw_ctx_binding_state *cbs = in vmw_binding_scrub_vb() local
1148 __set_bit(bivb->slot, cbs->dirty_vb); in vmw_binding_scrub_vb()
1149 __set_bit(VMW_BINDING_VB_BIT, &cbs->dirty); in vmw_binding_scrub_vb()
1204 struct vmw_ctx_binding_state *cbs; in vmw_binding_state_alloc() local
1207 ret = ttm_mem_global_alloc(vmw_mem_glob(dev_priv), sizeof(*cbs), in vmw_binding_state_alloc()
1212 cbs = vzalloc(sizeof(*cbs)); in vmw_binding_state_alloc()
1213 if (!cbs) { in vmw_binding_state_alloc()
1214 ttm_mem_global_free(vmw_mem_glob(dev_priv), sizeof(*cbs)); in vmw_binding_state_alloc()
1218 cbs->dev_priv = dev_priv; in vmw_binding_state_alloc()
1219 INIT_LIST_HEAD(&cbs->list); in vmw_binding_state_alloc()
1221 return cbs; in vmw_binding_state_alloc()
1230 void vmw_binding_state_free(struct vmw_ctx_binding_state *cbs) in vmw_binding_state_free() argument
1232 struct vmw_private *dev_priv = cbs->dev_priv; in vmw_binding_state_free()
1234 vfree(cbs); in vmw_binding_state_free()
1235 ttm_mem_global_free(vmw_mem_glob(dev_priv), sizeof(*cbs)); in vmw_binding_state_free()
1247 struct list_head *vmw_binding_state_list(struct vmw_ctx_binding_state *cbs) in vmw_binding_state_list() argument
1249 return &cbs->list; in vmw_binding_state_list()
1260 void vmw_binding_state_reset(struct vmw_ctx_binding_state *cbs) in vmw_binding_state_reset() argument
1264 list_for_each_entry_safe(entry, next, &cbs->list, ctx_list) in vmw_binding_state_reset()