diff options
author | Gurchetan Singh <gurchetansingh@chromium.org> | 2020-04-28 15:02:53 -0700 |
---|---|---|
committer | Gurchetan Singh <gurchetansingh@chromium.org> | 2020-10-01 16:15:57 -0700 |
commit | c73c0cc31775f3a1532e0f0b9e1d2e956ff1b00e (patch) | |
tree | 6042e6ee003f97841ac8cfca270e58b1e646ec97 /src/gallium/winsys/virgl/drm | |
parent | 1aac47db69d5cf40329ccd26acfea8f615db3415 (diff) |
virgl: add flags to (*resource_create) callback
We never seemed to use these. But for ARB_buffer_storage we'll
need it.
Reviewed-by: Tomeu Vizoso <tomeu.vizoso@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4821>
Diffstat (limited to 'src/gallium/winsys/virgl/drm')
-rw-r--r-- | src/gallium/winsys/virgl/drm/virgl_drm_winsys.c | 11 | ||||
-rw-r--r-- | src/gallium/winsys/virgl/drm/virgl_drm_winsys.h | 1 |
2 files changed, 7 insertions, 5 deletions
diff --git a/src/gallium/winsys/virgl/drm/virgl_drm_winsys.c b/src/gallium/winsys/virgl/drm/virgl_drm_winsys.c index c6cc99bbe0e..3cbe9a5280f 100644 --- a/src/gallium/winsys/virgl/drm/virgl_drm_winsys.c +++ b/src/gallium/winsys/virgl/drm/virgl_drm_winsys.c @@ -55,7 +55,7 @@ #define cache_entry_container_res(ptr) \ (struct virgl_hw_res*)((char*)ptr - offsetof(struct virgl_hw_res, cache_entry)) -static inline boolean can_cache_resource_with_bind(uint32_t bind) +static inline boolean can_cache_resource(uint32_t bind) { return bind == VIRGL_BIND_CONSTANT_BUFFER || bind == VIRGL_BIND_INDEX_BUFFER || @@ -132,7 +132,7 @@ static void virgl_drm_resource_reference(struct virgl_winsys *qws, if (pipe_reference(&(*dres)->reference, &sres->reference)) { - if (!can_cache_resource_with_bind(old->bind) || + if (!can_cache_resource(old->bind) || p_atomic_read(&old->external)) { virgl_hw_res_destroy(qdws, old); } else { @@ -202,7 +202,7 @@ virgl_drm_winsys_resource_create(struct virgl_winsys *qws, */ p_atomic_set(&res->maybe_busy, for_fencing); - virgl_resource_cache_entry_init(&res->cache_entry, size, bind, format); + virgl_resource_cache_entry_init(&res->cache_entry, size, bind, format, 0); return res; } @@ -272,19 +272,20 @@ virgl_drm_winsys_resource_cache_create(struct virgl_winsys *qws, uint32_t array_size, uint32_t last_level, uint32_t nr_samples, + uint32_t flags, uint32_t size) { struct virgl_drm_winsys *qdws = virgl_drm_winsys(qws); struct virgl_hw_res *res; struct virgl_resource_cache_entry *entry; - if (!can_cache_resource_with_bind(bind)) + if (!can_cache_resource(bind)) goto alloc; mtx_lock(&qdws->mutex); entry = virgl_resource_cache_remove_compatible(&qdws->cache, size, - bind, format); + bind, format, flags); if (entry) { res = cache_entry_container_res(entry); mtx_unlock(&qdws->mutex); diff --git a/src/gallium/winsys/virgl/drm/virgl_drm_winsys.h b/src/gallium/winsys/virgl/drm/virgl_drm_winsys.h index f3cb7f2fd07..29612c0e4f2 100644 --- a/src/gallium/winsys/virgl/drm/virgl_drm_winsys.h +++ b/src/gallium/winsys/virgl/drm/virgl_drm_winsys.h @@ -44,6 +44,7 @@ struct virgl_hw_res { struct virgl_resource_cache_entry cache_entry; uint32_t bind; + uint32_t flags; uint32_t flink_name; /* true when the resource is imported or exported */ |