Lines Matching refs:cbs

126 static int vmw_binding_emit_dirty(struct vmw_ctx_binding_state *cbs);
285 vmw_cbs_context(const struct vmw_ctx_binding_state *cbs) in vmw_cbs_context() argument
287 if (list_empty(&cbs->list)) in vmw_cbs_context()
290 return list_first_entry(&cbs->list, struct vmw_ctx_bindinfo, in vmw_cbs_context()
303 vmw_binding_loc(struct vmw_ctx_binding_state *cbs, in vmw_binding_loc() argument
309 return (struct vmw_ctx_bindinfo *)((u8 *) cbs + offset); in vmw_binding_loc()
340 void vmw_binding_add(struct vmw_ctx_binding_state *cbs, in vmw_binding_add() argument
345 vmw_binding_loc(cbs, bi->bt, shader_slot, slot); in vmw_binding_add()
353 list_add(&loc->ctx_list, &cbs->list); in vmw_binding_add()
368 void vmw_binding_cb_offset_update(struct vmw_ctx_binding_state *cbs, in vmw_binding_cb_offset_update() argument
372 vmw_binding_loc(cbs, vmw_ctx_binding_cb, shader_slot, slot); in vmw_binding_cb_offset_update()
384 void vmw_binding_add_uav_index(struct vmw_ctx_binding_state *cbs, uint32 slot, in vmw_binding_add_uav_index() argument
387 cbs->ua_views[slot].index = index; in vmw_binding_add_uav_index()
398 static void vmw_binding_transfer(struct vmw_ctx_binding_state *cbs, in vmw_binding_transfer() argument
404 ((unsigned long) cbs + offset); in vmw_binding_transfer()
414 list_add_tail(&loc->ctx_list, &cbs->list); in vmw_binding_transfer()
428 void vmw_binding_state_kill(struct vmw_ctx_binding_state *cbs) in vmw_binding_state_kill() argument
432 vmw_binding_state_scrub(cbs); in vmw_binding_state_kill()
433 list_for_each_entry_safe(entry, next, &cbs->list, ctx_list) in vmw_binding_state_kill()
446 void vmw_binding_state_scrub(struct vmw_ctx_binding_state *cbs) in vmw_binding_state_scrub() argument
450 list_for_each_entry(entry, &cbs->list, ctx_list) { in vmw_binding_state_scrub()
458 (void) vmw_binding_emit_dirty(cbs); in vmw_binding_state_scrub()
501 struct vmw_ctx_binding_state *cbs = in vmw_binding_res_list_scrub() local
504 (void) vmw_binding_emit_dirty(cbs); in vmw_binding_res_list_scrub()
543 int vmw_binding_rebind_all(struct vmw_ctx_binding_state *cbs) in vmw_binding_rebind_all() argument
548 list_for_each_entry(entry, &cbs->list, ctx_list) { in vmw_binding_rebind_all()
563 return vmw_binding_emit_dirty(cbs); in vmw_binding_rebind_all()
749 static void vmw_collect_view_ids(struct vmw_ctx_binding_state *cbs, in vmw_collect_view_ids() argument
755 cbs->bind_cmd_count = 0; in vmw_collect_view_ids()
756 cbs->bind_first_slot = 0; in vmw_collect_view_ids()
762 cbs->bind_cmd_buffer[cbs->bind_cmd_count++] = in vmw_collect_view_ids()
782 static void vmw_collect_dirty_view_ids(struct vmw_ctx_binding_state *cbs, in vmw_collect_dirty_view_ids() argument
791 cbs->bind_cmd_count = 0; in vmw_collect_dirty_view_ids()
794 cbs->bind_first_slot = i; in vmw_collect_dirty_view_ids()
798 cbs->bind_cmd_buffer[cbs->bind_cmd_count++] = in vmw_collect_dirty_view_ids()
816 static int vmw_emit_set_sr(struct vmw_ctx_binding_state *cbs, in vmw_emit_set_sr() argument
820 &cbs->per_shader[shader_slot].shader_res[0].bi; in vmw_emit_set_sr()
826 const struct vmw_resource *ctx = vmw_cbs_context(cbs); in vmw_emit_set_sr()
828 vmw_collect_dirty_view_ids(cbs, loc, in vmw_emit_set_sr()
829 cbs->per_shader[shader_slot].dirty_sr, in vmw_emit_set_sr()
831 if (cbs->bind_cmd_count == 0) in vmw_emit_set_sr()
834 view_id_size = cbs->bind_cmd_count*sizeof(uint32); in vmw_emit_set_sr()
843 cmd->body.startView = cbs->bind_first_slot; in vmw_emit_set_sr()
845 memcpy(&cmd[1], cbs->bind_cmd_buffer, view_id_size); in vmw_emit_set_sr()
848 bitmap_clear(cbs->per_shader[shader_slot].dirty_sr, in vmw_emit_set_sr()
849 cbs->bind_first_slot, cbs->bind_cmd_count); in vmw_emit_set_sr()
859 static int vmw_emit_set_rt(struct vmw_ctx_binding_state *cbs) in vmw_emit_set_rt() argument
861 const struct vmw_ctx_bindinfo_view *loc = &cbs->render_targets[0]; in vmw_emit_set_rt()
867 const struct vmw_resource *ctx = vmw_cbs_context(cbs); in vmw_emit_set_rt()
869 vmw_collect_view_ids(cbs, loc, SVGA3D_DX_MAX_RENDER_TARGETS); in vmw_emit_set_rt()
870 view_id_size = cbs->bind_cmd_count*sizeof(uint32); in vmw_emit_set_rt()
879 if (cbs->ds_view.bi.ctx && !cbs->ds_view.bi.scrubbed) in vmw_emit_set_rt()
880 cmd->body.depthStencilViewId = cbs->ds_view.bi.res->id; in vmw_emit_set_rt()
884 memcpy(&cmd[1], cbs->bind_cmd_buffer, view_id_size); in vmw_emit_set_rt()
906 static void vmw_collect_so_targets(struct vmw_ctx_binding_state *cbs, in vmw_collect_so_targets() argument
911 SVGA3dSoTarget *so_buffer = (SVGA3dSoTarget *) cbs->bind_cmd_buffer; in vmw_collect_so_targets()
913 cbs->bind_cmd_count = 0; in vmw_collect_so_targets()
914 cbs->bind_first_slot = 0; in vmw_collect_so_targets()
917 ++cbs->bind_cmd_count) { in vmw_collect_so_targets()
938 static int vmw_emit_set_so_target(struct vmw_ctx_binding_state *cbs) in vmw_emit_set_so_target() argument
940 const struct vmw_ctx_bindinfo_so_target *loc = &cbs->so_targets[0]; in vmw_emit_set_so_target()
946 const struct vmw_resource *ctx = vmw_cbs_context(cbs); in vmw_emit_set_so_target()
948 vmw_collect_so_targets(cbs, loc, SVGA3D_DX_MAX_SOTARGETS); in vmw_emit_set_so_target()
949 if (cbs->bind_cmd_count == 0) in vmw_emit_set_so_target()
952 so_target_size = cbs->bind_cmd_count*sizeof(SVGA3dSoTarget); in vmw_emit_set_so_target()
960 memcpy(&cmd[1], cbs->bind_cmd_buffer, so_target_size); in vmw_emit_set_so_target()
974 static int vmw_binding_emit_dirty_ps(struct vmw_ctx_binding_state *cbs) in vmw_binding_emit_dirty_ps() argument
976 struct vmw_dx_shader_bindings *sb = &cbs->per_shader[0]; in vmw_binding_emit_dirty_ps()
984 ret = vmw_emit_set_sr(cbs, i); in vmw_binding_emit_dirty_ps()
1009 static void vmw_collect_dirty_vbs(struct vmw_ctx_binding_state *cbs, in vmw_collect_dirty_vbs() argument
1017 SVGA3dVertexBuffer *vbs = (SVGA3dVertexBuffer *) &cbs->bind_cmd_buffer; in vmw_collect_dirty_vbs()
1019 cbs->bind_cmd_count = 0; in vmw_collect_dirty_vbs()
1022 cbs->bind_first_slot = i; in vmw_collect_dirty_vbs()
1035 cbs->bind_cmd_count++; in vmw_collect_dirty_vbs()
1050 static int vmw_emit_set_vb(struct vmw_ctx_binding_state *cbs) in vmw_emit_set_vb() argument
1053 &cbs->vertex_buffers[0].bi; in vmw_emit_set_vb()
1059 const struct vmw_resource *ctx = vmw_cbs_context(cbs); in vmw_emit_set_vb()
1061 vmw_collect_dirty_vbs(cbs, loc, cbs->dirty_vb, in vmw_emit_set_vb()
1063 if (cbs->bind_cmd_count == 0) in vmw_emit_set_vb()
1066 set_vb_size = cbs->bind_cmd_count*sizeof(SVGA3dVertexBuffer); in vmw_emit_set_vb()
1074 cmd->body.startBuffer = cbs->bind_first_slot; in vmw_emit_set_vb()
1076 memcpy(&cmd[1], cbs->bind_cmd_buffer, set_vb_size); in vmw_emit_set_vb()
1079 bitmap_clear(cbs->dirty_vb, in vmw_emit_set_vb()
1080 cbs->bind_first_slot, cbs->bind_cmd_count); in vmw_emit_set_vb()
1085 static int vmw_emit_set_uav(struct vmw_ctx_binding_state *cbs) in vmw_emit_set_uav() argument
1087 const struct vmw_ctx_bindinfo_view *loc = &cbs->ua_views[0].views[0]; in vmw_emit_set_uav()
1093 const struct vmw_resource *ctx = vmw_cbs_context(cbs); in vmw_emit_set_uav()
1095 vmw_collect_view_ids(cbs, loc, vmw_max_num_uavs(cbs->dev_priv)); in vmw_emit_set_uav()
1096 view_id_size = cbs->bind_cmd_count*sizeof(uint32); in vmw_emit_set_uav()
1106 cmd->body.uavSpliceIndex = cbs->ua_views[0].index; in vmw_emit_set_uav()
1108 memcpy(&cmd[1], cbs->bind_cmd_buffer, view_id_size); in vmw_emit_set_uav()
1115 static int vmw_emit_set_cs_uav(struct vmw_ctx_binding_state *cbs) in vmw_emit_set_cs_uav() argument
1117 const struct vmw_ctx_bindinfo_view *loc = &cbs->ua_views[1].views[0]; in vmw_emit_set_cs_uav()
1123 const struct vmw_resource *ctx = vmw_cbs_context(cbs); in vmw_emit_set_cs_uav()
1125 vmw_collect_view_ids(cbs, loc, vmw_max_num_uavs(cbs->dev_priv)); in vmw_emit_set_cs_uav()
1126 view_id_size = cbs->bind_cmd_count*sizeof(uint32); in vmw_emit_set_cs_uav()
1136 cmd->body.startIndex = cbs->ua_views[1].index; in vmw_emit_set_cs_uav()
1138 memcpy(&cmd[1], cbs->bind_cmd_buffer, view_id_size); in vmw_emit_set_cs_uav()
1155 static int vmw_binding_emit_dirty(struct vmw_ctx_binding_state *cbs) in vmw_binding_emit_dirty() argument
1160 while ((hit = find_next_bit(&cbs->dirty, VMW_BINDING_NUM_BITS, hit)) in vmw_binding_emit_dirty()
1165 ret = vmw_emit_set_rt(cbs); in vmw_binding_emit_dirty()
1168 ret = vmw_binding_emit_dirty_ps(cbs); in vmw_binding_emit_dirty()
1171 ret = vmw_emit_set_so_target(cbs); in vmw_binding_emit_dirty()
1174 ret = vmw_emit_set_vb(cbs); in vmw_binding_emit_dirty()
1177 ret = vmw_emit_set_uav(cbs); in vmw_binding_emit_dirty()
1180 ret = vmw_emit_set_cs_uav(cbs); in vmw_binding_emit_dirty()
1188 __clear_bit(hit, &cbs->dirty); in vmw_binding_emit_dirty()
1206 struct vmw_ctx_binding_state *cbs = in vmw_binding_scrub_sr() local
1209 __set_bit(biv->slot, cbs->per_shader[biv->shader_slot].dirty_sr); in vmw_binding_scrub_sr()
1211 &cbs->per_shader[biv->shader_slot].dirty); in vmw_binding_scrub_sr()
1212 __set_bit(VMW_BINDING_PS_BIT, &cbs->dirty); in vmw_binding_scrub_sr()
1226 struct vmw_ctx_binding_state *cbs = in vmw_binding_scrub_dx_rt() local
1229 __set_bit(VMW_BINDING_RT_BIT, &cbs->dirty); in vmw_binding_scrub_dx_rt()
1243 struct vmw_ctx_binding_state *cbs = in vmw_binding_scrub_so_target() local
1246 __set_bit(VMW_BINDING_SO_T_BIT, &cbs->dirty); in vmw_binding_scrub_so_target()
1262 struct vmw_ctx_binding_state *cbs = in vmw_binding_scrub_vb() local
1265 __set_bit(bivb->slot, cbs->dirty_vb); in vmw_binding_scrub_vb()
1266 __set_bit(VMW_BINDING_VB_BIT, &cbs->dirty); in vmw_binding_scrub_vb()
1310 struct vmw_ctx_binding_state *cbs = vmw_context_binding_state(bi->ctx); in vmw_binding_scrub_uav() local
1312 __set_bit(VMW_BINDING_UAV_BIT, &cbs->dirty); in vmw_binding_scrub_uav()
1318 struct vmw_ctx_binding_state *cbs = vmw_context_binding_state(bi->ctx); in vmw_binding_scrub_cs_uav() local
1320 __set_bit(VMW_BINDING_CS_UAV_BIT, &cbs->dirty); in vmw_binding_scrub_cs_uav()
1361 struct vmw_ctx_binding_state *cbs; in vmw_binding_state_alloc() local
1363 cbs = vzalloc(sizeof(*cbs)); in vmw_binding_state_alloc()
1364 if (!cbs) { in vmw_binding_state_alloc()
1368 cbs->dev_priv = dev_priv; in vmw_binding_state_alloc()
1369 INIT_LIST_HEAD(&cbs->list); in vmw_binding_state_alloc()
1371 return cbs; in vmw_binding_state_alloc()
1379 void vmw_binding_state_free(struct vmw_ctx_binding_state *cbs) in vmw_binding_state_free() argument
1381 vfree(cbs); in vmw_binding_state_free()
1393 struct list_head *vmw_binding_state_list(struct vmw_ctx_binding_state *cbs) in vmw_binding_state_list() argument
1395 return &cbs->list; in vmw_binding_state_list()
1406 void vmw_binding_state_reset(struct vmw_ctx_binding_state *cbs) in vmw_binding_state_reset() argument
1410 list_for_each_entry_safe(entry, next, &cbs->list, ctx_list) in vmw_binding_state_reset()