Lines Matching refs:cbs

125 static int vmw_binding_emit_dirty(struct vmw_ctx_binding_state *cbs);
284 vmw_cbs_context(const struct vmw_ctx_binding_state *cbs) in vmw_cbs_context() argument
286 if (list_empty(&cbs->list)) in vmw_cbs_context()
289 return list_first_entry(&cbs->list, struct vmw_ctx_bindinfo, in vmw_cbs_context()
302 vmw_binding_loc(struct vmw_ctx_binding_state *cbs, in vmw_binding_loc() argument
308 return (struct vmw_ctx_bindinfo *)((u8 *) cbs + offset); in vmw_binding_loc()
337 void vmw_binding_add(struct vmw_ctx_binding_state *cbs, in vmw_binding_add() argument
342 vmw_binding_loc(cbs, bi->bt, shader_slot, slot); in vmw_binding_add()
350 list_add(&loc->ctx_list, &cbs->list); in vmw_binding_add()
360 void vmw_binding_add_uav_index(struct vmw_ctx_binding_state *cbs, uint32 slot, in vmw_binding_add_uav_index() argument
363 cbs->ua_views[slot].index = index; in vmw_binding_add_uav_index()
373 static void vmw_binding_transfer(struct vmw_ctx_binding_state *cbs, in vmw_binding_transfer() argument
379 ((unsigned long) cbs + offset); in vmw_binding_transfer()
389 list_add_tail(&loc->ctx_list, &cbs->list); in vmw_binding_transfer()
403 void vmw_binding_state_kill(struct vmw_ctx_binding_state *cbs) in vmw_binding_state_kill() argument
407 vmw_binding_state_scrub(cbs); in vmw_binding_state_kill()
408 list_for_each_entry_safe(entry, next, &cbs->list, ctx_list) in vmw_binding_state_kill()
421 void vmw_binding_state_scrub(struct vmw_ctx_binding_state *cbs) in vmw_binding_state_scrub() argument
425 list_for_each_entry(entry, &cbs->list, ctx_list) { in vmw_binding_state_scrub()
433 (void) vmw_binding_emit_dirty(cbs); in vmw_binding_state_scrub()
476 struct vmw_ctx_binding_state *cbs = in vmw_binding_res_list_scrub() local
479 (void) vmw_binding_emit_dirty(cbs); in vmw_binding_res_list_scrub()
519 int vmw_binding_rebind_all(struct vmw_ctx_binding_state *cbs) in vmw_binding_rebind_all() argument
524 list_for_each_entry(entry, &cbs->list, ctx_list) { in vmw_binding_rebind_all()
539 return vmw_binding_emit_dirty(cbs); in vmw_binding_rebind_all()
725 static void vmw_collect_view_ids(struct vmw_ctx_binding_state *cbs, in vmw_collect_view_ids() argument
733 cbs->bind_cmd_count = 0; in vmw_collect_view_ids()
734 cbs->bind_first_slot = 0; in vmw_collect_view_ids()
740 cbs->bind_cmd_buffer[cbs->bind_cmd_count++] = in vmw_collect_view_ids()
760 static void vmw_collect_dirty_view_ids(struct vmw_ctx_binding_state *cbs, in vmw_collect_dirty_view_ids() argument
769 cbs->bind_cmd_count = 0; in vmw_collect_dirty_view_ids()
772 cbs->bind_first_slot = i; in vmw_collect_dirty_view_ids()
776 cbs->bind_cmd_buffer[cbs->bind_cmd_count++] = in vmw_collect_dirty_view_ids()
793 static int vmw_emit_set_sr(struct vmw_ctx_binding_state *cbs, in vmw_emit_set_sr() argument
797 &cbs->per_shader[shader_slot].shader_res[0].bi; in vmw_emit_set_sr()
803 const struct vmw_resource *ctx = vmw_cbs_context(cbs); in vmw_emit_set_sr()
805 vmw_collect_dirty_view_ids(cbs, loc, in vmw_emit_set_sr()
806 cbs->per_shader[shader_slot].dirty_sr, in vmw_emit_set_sr()
808 if (cbs->bind_cmd_count == 0) in vmw_emit_set_sr()
811 view_id_size = cbs->bind_cmd_count*sizeof(uint32); in vmw_emit_set_sr()
820 cmd->body.startView = cbs->bind_first_slot; in vmw_emit_set_sr()
822 memcpy(&cmd[1], cbs->bind_cmd_buffer, view_id_size); in vmw_emit_set_sr()
825 bitmap_clear(cbs->per_shader[shader_slot].dirty_sr, in vmw_emit_set_sr()
826 cbs->bind_first_slot, cbs->bind_cmd_count); in vmw_emit_set_sr()
836 static int vmw_emit_set_rt(struct vmw_ctx_binding_state *cbs) in vmw_emit_set_rt() argument
838 const struct vmw_ctx_bindinfo *loc = &cbs->render_targets[0].bi; in vmw_emit_set_rt()
844 const struct vmw_resource *ctx = vmw_cbs_context(cbs); in vmw_emit_set_rt()
846 vmw_collect_view_ids(cbs, loc, SVGA3D_MAX_SIMULTANEOUS_RENDER_TARGETS); in vmw_emit_set_rt()
847 view_id_size = cbs->bind_cmd_count*sizeof(uint32); in vmw_emit_set_rt()
856 if (cbs->ds_view.bi.ctx && !cbs->ds_view.bi.scrubbed) in vmw_emit_set_rt()
857 cmd->body.depthStencilViewId = cbs->ds_view.bi.res->id; in vmw_emit_set_rt()
861 memcpy(&cmd[1], cbs->bind_cmd_buffer, view_id_size); in vmw_emit_set_rt()
883 static void vmw_collect_so_targets(struct vmw_ctx_binding_state *cbs, in vmw_collect_so_targets() argument
890 SVGA3dSoTarget *so_buffer = (SVGA3dSoTarget *) cbs->bind_cmd_buffer; in vmw_collect_so_targets()
892 cbs->bind_cmd_count = 0; in vmw_collect_so_targets()
893 cbs->bind_first_slot = 0; in vmw_collect_so_targets()
896 ++cbs->bind_cmd_count) { in vmw_collect_so_targets()
917 static int vmw_emit_set_so_target(struct vmw_ctx_binding_state *cbs) in vmw_emit_set_so_target() argument
919 const struct vmw_ctx_bindinfo *loc = &cbs->so_targets[0].bi; in vmw_emit_set_so_target()
925 const struct vmw_resource *ctx = vmw_cbs_context(cbs); in vmw_emit_set_so_target()
927 vmw_collect_so_targets(cbs, loc, SVGA3D_DX_MAX_SOTARGETS); in vmw_emit_set_so_target()
928 if (cbs->bind_cmd_count == 0) in vmw_emit_set_so_target()
931 so_target_size = cbs->bind_cmd_count*sizeof(SVGA3dSoTarget); in vmw_emit_set_so_target()
939 memcpy(&cmd[1], cbs->bind_cmd_buffer, so_target_size); in vmw_emit_set_so_target()
953 static int vmw_binding_emit_dirty_ps(struct vmw_ctx_binding_state *cbs) in vmw_binding_emit_dirty_ps() argument
955 struct vmw_dx_shader_bindings *sb = &cbs->per_shader[0]; in vmw_binding_emit_dirty_ps()
963 ret = vmw_emit_set_sr(cbs, i); in vmw_binding_emit_dirty_ps()
988 static void vmw_collect_dirty_vbs(struct vmw_ctx_binding_state *cbs, in vmw_collect_dirty_vbs() argument
996 SVGA3dVertexBuffer *vbs = (SVGA3dVertexBuffer *) &cbs->bind_cmd_buffer; in vmw_collect_dirty_vbs()
998 cbs->bind_cmd_count = 0; in vmw_collect_dirty_vbs()
1001 cbs->bind_first_slot = i; in vmw_collect_dirty_vbs()
1014 cbs->bind_cmd_count++; in vmw_collect_dirty_vbs()
1029 static int vmw_emit_set_vb(struct vmw_ctx_binding_state *cbs) in vmw_emit_set_vb() argument
1032 &cbs->vertex_buffers[0].bi; in vmw_emit_set_vb()
1038 const struct vmw_resource *ctx = vmw_cbs_context(cbs); in vmw_emit_set_vb()
1040 vmw_collect_dirty_vbs(cbs, loc, cbs->dirty_vb, in vmw_emit_set_vb()
1042 if (cbs->bind_cmd_count == 0) in vmw_emit_set_vb()
1045 set_vb_size = cbs->bind_cmd_count*sizeof(SVGA3dVertexBuffer); in vmw_emit_set_vb()
1053 cmd->body.startBuffer = cbs->bind_first_slot; in vmw_emit_set_vb()
1055 memcpy(&cmd[1], cbs->bind_cmd_buffer, set_vb_size); in vmw_emit_set_vb()
1058 bitmap_clear(cbs->dirty_vb, in vmw_emit_set_vb()
1059 cbs->bind_first_slot, cbs->bind_cmd_count); in vmw_emit_set_vb()
1064 static int vmw_emit_set_uav(struct vmw_ctx_binding_state *cbs) in vmw_emit_set_uav() argument
1066 const struct vmw_ctx_bindinfo *loc = &cbs->ua_views[0].views[0].bi; in vmw_emit_set_uav()
1072 const struct vmw_resource *ctx = vmw_cbs_context(cbs); in vmw_emit_set_uav()
1074 vmw_collect_view_ids(cbs, loc, SVGA3D_MAX_UAVIEWS); in vmw_emit_set_uav()
1075 view_id_size = cbs->bind_cmd_count*sizeof(uint32); in vmw_emit_set_uav()
1085 cmd->body.uavSpliceIndex = cbs->ua_views[0].index; in vmw_emit_set_uav()
1087 memcpy(&cmd[1], cbs->bind_cmd_buffer, view_id_size); in vmw_emit_set_uav()
1094 static int vmw_emit_set_cs_uav(struct vmw_ctx_binding_state *cbs) in vmw_emit_set_cs_uav() argument
1096 const struct vmw_ctx_bindinfo *loc = &cbs->ua_views[1].views[0].bi; in vmw_emit_set_cs_uav()
1102 const struct vmw_resource *ctx = vmw_cbs_context(cbs); in vmw_emit_set_cs_uav()
1104 vmw_collect_view_ids(cbs, loc, SVGA3D_MAX_UAVIEWS); in vmw_emit_set_cs_uav()
1105 view_id_size = cbs->bind_cmd_count*sizeof(uint32); in vmw_emit_set_cs_uav()
1115 cmd->body.startIndex = cbs->ua_views[1].index; in vmw_emit_set_cs_uav()
1117 memcpy(&cmd[1], cbs->bind_cmd_buffer, view_id_size); in vmw_emit_set_cs_uav()
1134 static int vmw_binding_emit_dirty(struct vmw_ctx_binding_state *cbs) in vmw_binding_emit_dirty() argument
1139 while ((hit = find_next_bit(&cbs->dirty, VMW_BINDING_NUM_BITS, hit)) in vmw_binding_emit_dirty()
1144 ret = vmw_emit_set_rt(cbs); in vmw_binding_emit_dirty()
1147 ret = vmw_binding_emit_dirty_ps(cbs); in vmw_binding_emit_dirty()
1150 ret = vmw_emit_set_so_target(cbs); in vmw_binding_emit_dirty()
1153 ret = vmw_emit_set_vb(cbs); in vmw_binding_emit_dirty()
1156 ret = vmw_emit_set_uav(cbs); in vmw_binding_emit_dirty()
1159 ret = vmw_emit_set_cs_uav(cbs); in vmw_binding_emit_dirty()
1167 __clear_bit(hit, &cbs->dirty); in vmw_binding_emit_dirty()
1185 struct vmw_ctx_binding_state *cbs = in vmw_binding_scrub_sr() local
1188 __set_bit(biv->slot, cbs->per_shader[biv->shader_slot].dirty_sr); in vmw_binding_scrub_sr()
1190 &cbs->per_shader[biv->shader_slot].dirty); in vmw_binding_scrub_sr()
1191 __set_bit(VMW_BINDING_PS_BIT, &cbs->dirty); in vmw_binding_scrub_sr()
1205 struct vmw_ctx_binding_state *cbs = in vmw_binding_scrub_dx_rt() local
1208 __set_bit(VMW_BINDING_RT_BIT, &cbs->dirty); in vmw_binding_scrub_dx_rt()
1222 struct vmw_ctx_binding_state *cbs = in vmw_binding_scrub_so_target() local
1225 __set_bit(VMW_BINDING_SO_T_BIT, &cbs->dirty); in vmw_binding_scrub_so_target()
1241 struct vmw_ctx_binding_state *cbs = in vmw_binding_scrub_vb() local
1244 __set_bit(bivb->slot, cbs->dirty_vb); in vmw_binding_scrub_vb()
1245 __set_bit(VMW_BINDING_VB_BIT, &cbs->dirty); in vmw_binding_scrub_vb()
1289 struct vmw_ctx_binding_state *cbs = vmw_context_binding_state(bi->ctx); in vmw_binding_scrub_uav() local
1291 __set_bit(VMW_BINDING_UAV_BIT, &cbs->dirty); in vmw_binding_scrub_uav()
1297 struct vmw_ctx_binding_state *cbs = vmw_context_binding_state(bi->ctx); in vmw_binding_scrub_cs_uav() local
1299 __set_bit(VMW_BINDING_CS_UAV_BIT, &cbs->dirty); in vmw_binding_scrub_cs_uav()
1341 struct vmw_ctx_binding_state *cbs; in vmw_binding_state_alloc() local
1348 ret = ttm_mem_global_alloc(vmw_mem_glob(dev_priv), sizeof(*cbs), in vmw_binding_state_alloc()
1353 cbs = vzalloc(sizeof(*cbs)); in vmw_binding_state_alloc()
1354 if (!cbs) { in vmw_binding_state_alloc()
1355 ttm_mem_global_free(vmw_mem_glob(dev_priv), sizeof(*cbs)); in vmw_binding_state_alloc()
1359 cbs->dev_priv = dev_priv; in vmw_binding_state_alloc()
1360 INIT_LIST_HEAD(&cbs->list); in vmw_binding_state_alloc()
1362 return cbs; in vmw_binding_state_alloc()
1371 void vmw_binding_state_free(struct vmw_ctx_binding_state *cbs) in vmw_binding_state_free() argument
1373 struct vmw_private *dev_priv = cbs->dev_priv; in vmw_binding_state_free()
1375 vfree(cbs); in vmw_binding_state_free()
1376 ttm_mem_global_free(vmw_mem_glob(dev_priv), sizeof(*cbs)); in vmw_binding_state_free()
1388 struct list_head *vmw_binding_state_list(struct vmw_ctx_binding_state *cbs) in vmw_binding_state_list() argument
1390 return &cbs->list; in vmw_binding_state_list()
1401 void vmw_binding_state_reset(struct vmw_ctx_binding_state *cbs) in vmw_binding_state_reset() argument
1405 list_for_each_entry_safe(entry, next, &cbs->list, ctx_list) in vmw_binding_state_reset()