Lines Matching refs:res
34 struct vmw_resource res; member
47 struct vmw_resource res; member
59 static void vmw_user_shader_free(struct vmw_resource *res);
63 static int vmw_gb_shader_create(struct vmw_resource *res);
64 static int vmw_gb_shader_bind(struct vmw_resource *res,
66 static int vmw_gb_shader_unbind(struct vmw_resource *res,
69 static int vmw_gb_shader_destroy(struct vmw_resource *res);
71 static int vmw_dx_shader_create(struct vmw_resource *res);
72 static int vmw_dx_shader_bind(struct vmw_resource *res,
74 static int vmw_dx_shader_unbind(struct vmw_resource *res,
77 static void vmw_dx_shader_commit_notify(struct vmw_resource *res,
128 vmw_res_to_shader(struct vmw_resource *res) in vmw_res_to_shader() argument
130 return container_of(res, struct vmw_shader, res); in vmw_res_to_shader()
140 vmw_res_to_dx_shader(struct vmw_resource *res) in vmw_res_to_dx_shader() argument
142 return container_of(res, struct vmw_dx_shader, res); in vmw_res_to_dx_shader()
145 static void vmw_hw_shader_destroy(struct vmw_resource *res) in vmw_hw_shader_destroy() argument
147 if (likely(res->func->destroy)) in vmw_hw_shader_destroy()
148 (void) res->func->destroy(res); in vmw_hw_shader_destroy()
150 res->id = -1; in vmw_hw_shader_destroy()
155 struct vmw_resource *res, in vmw_gb_shader_init() argument
162 void (*res_free) (struct vmw_resource *res)) in vmw_gb_shader_init()
164 struct vmw_shader *shader = vmw_res_to_shader(res); in vmw_gb_shader_init()
167 ret = vmw_resource_init(dev_priv, res, true, res_free, in vmw_gb_shader_init()
172 res_free(res); in vmw_gb_shader_init()
174 kfree(res); in vmw_gb_shader_init()
178 res->backup_size = size; in vmw_gb_shader_init()
180 res->backup = vmw_dmabuf_reference(byte_code); in vmw_gb_shader_init()
181 res->backup_offset = offset; in vmw_gb_shader_init()
188 vmw_resource_activate(res, vmw_hw_shader_destroy); in vmw_gb_shader_init()
196 static int vmw_gb_shader_create(struct vmw_resource *res) in vmw_gb_shader_create() argument
198 struct vmw_private *dev_priv = res->dev_priv; in vmw_gb_shader_create()
199 struct vmw_shader *shader = vmw_res_to_shader(res); in vmw_gb_shader_create()
206 if (likely(res->id != -1)) in vmw_gb_shader_create()
209 ret = vmw_resource_alloc_id(res); in vmw_gb_shader_create()
215 if (unlikely(res->id >= VMWGFX_NUM_GB_SHADER)) { in vmw_gb_shader_create()
230 cmd->body.shid = res->id; in vmw_gb_shader_create()
239 vmw_resource_release_id(res); in vmw_gb_shader_create()
244 static int vmw_gb_shader_bind(struct vmw_resource *res, in vmw_gb_shader_bind() argument
247 struct vmw_private *dev_priv = res->dev_priv; in vmw_gb_shader_bind()
265 cmd->body.shid = res->id; in vmw_gb_shader_bind()
267 cmd->body.offsetInBytes = res->backup_offset; in vmw_gb_shader_bind()
268 res->backup_dirty = false; in vmw_gb_shader_bind()
274 static int vmw_gb_shader_unbind(struct vmw_resource *res, in vmw_gb_shader_unbind() argument
278 struct vmw_private *dev_priv = res->dev_priv; in vmw_gb_shader_unbind()
285 BUG_ON(res->backup->base.mem.mem_type != VMW_PL_MOB); in vmw_gb_shader_unbind()
296 cmd->body.shid = res->id; in vmw_gb_shader_unbind()
316 static int vmw_gb_shader_destroy(struct vmw_resource *res) in vmw_gb_shader_destroy() argument
318 struct vmw_private *dev_priv = res->dev_priv; in vmw_gb_shader_destroy()
324 if (likely(res->id == -1)) in vmw_gb_shader_destroy()
328 vmw_binding_res_list_scrub(&res->binding_head); in vmw_gb_shader_destroy()
340 cmd->body.shid = res->id; in vmw_gb_shader_destroy()
343 vmw_resource_release_id(res); in vmw_gb_shader_destroy()
361 static void vmw_dx_shader_commit_notify(struct vmw_resource *res, in vmw_dx_shader_commit_notify() argument
364 struct vmw_dx_shader *shader = vmw_res_to_dx_shader(res); in vmw_dx_shader_commit_notify()
365 struct vmw_private *dev_priv = res->dev_priv; in vmw_dx_shader_commit_notify()
372 res->id = shader->id; in vmw_dx_shader_commit_notify()
378 res->id = -1; in vmw_dx_shader_commit_notify()
390 static int vmw_dx_shader_unscrub(struct vmw_resource *res) in vmw_dx_shader_unscrub() argument
392 struct vmw_dx_shader *shader = vmw_res_to_dx_shader(res); in vmw_dx_shader_unscrub()
393 struct vmw_private *dev_priv = res->dev_priv; in vmw_dx_shader_unscrub()
414 cmd->body.mobid = res->backup->base.mem.start; in vmw_dx_shader_unscrub()
415 cmd->body.offsetInBytes = res->backup_offset; in vmw_dx_shader_unscrub()
431 static int vmw_dx_shader_create(struct vmw_resource *res) in vmw_dx_shader_create() argument
433 struct vmw_private *dev_priv = res->dev_priv; in vmw_dx_shader_create()
434 struct vmw_dx_shader *shader = vmw_res_to_dx_shader(res); in vmw_dx_shader_create()
439 if (!list_empty(&res->mob_head)) { in vmw_dx_shader_create()
441 ret = vmw_dx_shader_unscrub(res); in vmw_dx_shader_create()
445 res->id = shader->id; in vmw_dx_shader_create()
456 static int vmw_dx_shader_bind(struct vmw_resource *res, in vmw_dx_shader_bind() argument
459 struct vmw_private *dev_priv = res->dev_priv; in vmw_dx_shader_bind()
464 vmw_dx_shader_unscrub(res); in vmw_dx_shader_bind()
480 static int vmw_dx_shader_scrub(struct vmw_resource *res) in vmw_dx_shader_scrub() argument
482 struct vmw_dx_shader *shader = vmw_res_to_dx_shader(res); in vmw_dx_shader_scrub()
483 struct vmw_private *dev_priv = res->dev_priv; in vmw_dx_shader_scrub()
503 cmd->body.shid = res->id; in vmw_dx_shader_scrub()
507 res->id = -1; in vmw_dx_shader_scrub()
520 static int vmw_dx_shader_unbind(struct vmw_resource *res, in vmw_dx_shader_unbind() argument
524 struct vmw_private *dev_priv = res->dev_priv; in vmw_dx_shader_unbind()
528 BUG_ON(res->backup->base.mem.mem_type != VMW_PL_MOB); in vmw_dx_shader_unbind()
531 ret = vmw_dx_shader_scrub(res); in vmw_dx_shader_unbind()
567 WARN_ON(vmw_dx_shader_scrub(&entry->res)); in vmw_dx_shader_cotable_list_scrub()
580 static void vmw_dx_shader_res_free(struct vmw_resource *res) in vmw_dx_shader_res_free() argument
582 struct vmw_private *dev_priv = res->dev_priv; in vmw_dx_shader_res_free()
583 struct vmw_dx_shader *shader = vmw_res_to_dx_shader(res); in vmw_dx_shader_res_free()
607 struct vmw_resource *res; in vmw_dx_shader_add() local
632 res = &shader->res; in vmw_dx_shader_add()
638 ret = vmw_resource_init(dev_priv, res, true, in vmw_dx_shader_add()
649 res, list); in vmw_dx_shader_add()
653 res->id = shader->id; in vmw_dx_shader_add()
654 vmw_resource_activate(res, vmw_hw_shader_destroy); in vmw_dx_shader_add()
657 vmw_resource_unreference(&res); in vmw_dx_shader_add()
672 shader.res); in vmw_user_shader_base_to_res()
675 static void vmw_user_shader_free(struct vmw_resource *res) in vmw_user_shader_free() argument
678 container_of(res, struct vmw_user_shader, shader.res); in vmw_user_shader_free()
679 struct vmw_private *dev_priv = res->dev_priv; in vmw_user_shader_free()
686 static void vmw_shader_free(struct vmw_resource *res) in vmw_shader_free() argument
688 struct vmw_shader *shader = vmw_res_to_shader(res); in vmw_shader_free()
689 struct vmw_private *dev_priv = res->dev_priv; in vmw_shader_free()
704 struct vmw_resource *res = vmw_user_shader_base_to_res(base); in vmw_user_shader_base_release() local
707 vmw_resource_unreference(&res); in vmw_user_shader_base_release()
731 struct vmw_resource *res, *tmp; in vmw_user_shader_alloc() local
760 res = &ushader->shader.res; in vmw_user_shader_alloc()
768 ret = vmw_gb_shader_init(dev_priv, res, shader_size, in vmw_user_shader_alloc()
775 tmp = vmw_resource_reference(res); in vmw_user_shader_alloc()
788 vmw_resource_unreference(&res); in vmw_user_shader_alloc()
801 struct vmw_resource *res; in vmw_shader_alloc() local
830 res = &shader->res; in vmw_shader_alloc()
835 ret = vmw_gb_shader_init(dev_priv, res, shader_size, in vmw_shader_alloc()
840 return ret ? ERR_PTR(ret) : res; in vmw_shader_alloc()
976 struct vmw_resource *res; in vmw_compat_shader_add() local
1011 res = vmw_shader_alloc(dev_priv, buf, size, 0, shader_type); in vmw_compat_shader_add()
1017 res, list); in vmw_compat_shader_add()
1018 vmw_resource_unreference(&res); in vmw_compat_shader_add()