summaryrefslogtreecommitdiff
path: root/src/gallium/winsys/virgl/drm
diff options
context:
space:
mode:
authorGurchetan Singh <gurchetansingh@chromium.org>2020-04-28 15:02:53 -0700
committerGurchetan Singh <gurchetansingh@chromium.org>2020-10-01 16:15:57 -0700
commitc73c0cc31775f3a1532e0f0b9e1d2e956ff1b00e (patch)
tree6042e6ee003f97841ac8cfca270e58b1e646ec97 /src/gallium/winsys/virgl/drm
parent1aac47db69d5cf40329ccd26acfea8f615db3415 (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.c11
-rw-r--r--src/gallium/winsys/virgl/drm/virgl_drm_winsys.h1
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 */