Mesa (main): gallium: remove u_resource_vtbl::transfer_(un)map
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Fri May 21 18:27:26 UTC 2021
Module: Mesa
Branch: main
Commit: 38171635af4ed836e9627c0292f0d034267ce9c3
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=38171635af4ed836e9627c0292f0d034267ce9c3
Author: Marek Olšák <marek.olsak at amd.com>
Date: Wed May 5 16:06:28 2021 -0400
gallium: remove u_resource_vtbl::transfer_(un)map
This removes the call indirection.
Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Acked-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer at amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10659>
---
src/gallium/auxiliary/util/u_transfer.c | 19 ----------------
src/gallium/auxiliary/util/u_transfer.h | 20 ----------------
src/gallium/drivers/i915/i915_resource.c | 8 +++----
src/gallium/drivers/i915/i915_resource.h | 24 ++++++++++++++++++++
src/gallium/drivers/i915/i915_resource_buffer.c | 6 ++---
src/gallium/drivers/i915/i915_resource_texture.c | 6 ++---
src/gallium/drivers/nouveau/nouveau_buffer.c | 29 ++++++++++++++++++------
src/gallium/drivers/nouveau/nouveau_buffer.h | 11 +++++++++
src/gallium/drivers/nouveau/nv30/nv30_miptree.c | 6 ++---
src/gallium/drivers/nouveau/nv30/nv30_resource.c | 8 +++----
src/gallium/drivers/nouveau/nv30/nv30_resource.h | 10 ++++++++
src/gallium/drivers/nouveau/nv50/nv50_miptree.c | 2 --
src/gallium/drivers/nouveau/nv50/nv50_resource.c | 8 +++----
src/gallium/drivers/nouveau/nvc0/nvc0_miptree.c | 2 --
src/gallium/drivers/nouveau/nvc0/nvc0_resource.c | 8 +++----
src/gallium/drivers/r300/r300_resource.c | 9 ++++----
src/gallium/drivers/r300/r300_screen_buffer.c | 8 +++----
src/gallium/drivers/r300/r300_screen_buffer.h | 11 +++++++++
src/gallium/drivers/r300/r300_texture.c | 2 --
src/gallium/drivers/r600/evergreen_compute.c | 18 +++++++--------
src/gallium/drivers/r600/evergreen_compute.h | 8 +++++++
src/gallium/drivers/r600/r600_buffer_common.c | 28 +++++++++++++++--------
src/gallium/drivers/r600/r600_pipe_common.c | 8 +++----
src/gallium/drivers/r600/r600_pipe_common.h | 16 +++++++++++++
src/gallium/drivers/r600/r600_texture.c | 18 +++++++--------
src/gallium/drivers/radeonsi/si_buffer.c | 8 ++-----
src/gallium/drivers/radeonsi/si_texture.c | 9 ++++----
src/gallium/drivers/svga/svga_resource.c | 8 +++----
src/gallium/drivers/svga/svga_resource_buffer.c | 6 ++---
src/gallium/drivers/svga/svga_resource_buffer.h | 12 ++++++++++
src/gallium/drivers/svga/svga_resource_texture.c | 6 ++---
src/gallium/drivers/svga/svga_resource_texture.h | 12 ++++++++++
src/gallium/drivers/virgl/virgl_buffer.c | 6 ++---
src/gallium/drivers/virgl/virgl_resource.c | 8 +++----
src/gallium/drivers/virgl/virgl_resource.h | 13 +++++++++++
src/gallium/drivers/virgl/virgl_texture.c | 18 +++++++--------
36 files changed, 236 insertions(+), 163 deletions(-)
diff --git a/src/gallium/auxiliary/util/u_transfer.c b/src/gallium/auxiliary/util/u_transfer.c
index 7b4ee2b4113..5dcaa276f93 100644
--- a/src/gallium/auxiliary/util/u_transfer.c
+++ b/src/gallium/auxiliary/util/u_transfer.c
@@ -97,22 +97,3 @@ u_resource( struct pipe_resource *res )
{
return (struct u_resource *)res;
}
-
-void *u_transfer_map_vtbl(struct pipe_context *context,
- struct pipe_resource *resource,
- unsigned level,
- unsigned usage,
- const struct pipe_box *box,
- struct pipe_transfer **transfer)
-{
- struct u_resource *ur = u_resource(resource);
- return ur->vtbl->transfer_map(context, resource, level, usage, box,
- transfer);
-}
-
-void u_transfer_unmap_vtbl( struct pipe_context *pipe,
- struct pipe_transfer *transfer )
-{
- struct u_resource *ur = u_resource(transfer->resource);
- ur->vtbl->transfer_unmap(pipe, transfer);
-}
diff --git a/src/gallium/auxiliary/util/u_transfer.h b/src/gallium/auxiliary/util/u_transfer.h
index d73ad5f98c1..ce041f53eed 100644
--- a/src/gallium/auxiliary/util/u_transfer.h
+++ b/src/gallium/auxiliary/util/u_transfer.h
@@ -36,15 +36,6 @@ void u_default_transfer_flush_region( struct pipe_context *pipe,
* to exist in a single driver. This is intended to be transitionary!
*/
struct u_resource_vtbl {
- void *(*transfer_map)(struct pipe_context *,
- struct pipe_resource *resource,
- unsigned level,
- unsigned usage,
- const struct pipe_box *,
- struct pipe_transfer **);
-
- void (*transfer_unmap)( struct pipe_context *,
- struct pipe_transfer *transfer );
};
@@ -53,17 +44,6 @@ struct u_resource {
const struct u_resource_vtbl *vtbl;
};
-
-void *u_transfer_map_vtbl(struct pipe_context *context,
- struct pipe_resource *resource,
- unsigned level,
- unsigned usage,
- const struct pipe_box *box,
- struct pipe_transfer **transfer);
-
-void u_transfer_unmap_vtbl( struct pipe_context *rm_ctx,
- struct pipe_transfer *transfer );
-
#ifdef __cplusplus
} // extern "C" {
#endif
diff --git a/src/gallium/drivers/i915/i915_resource.c b/src/gallium/drivers/i915/i915_resource.c
index 3790a52ec4b..ed3d5eeadba 100644
--- a/src/gallium/drivers/i915/i915_resource.c
+++ b/src/gallium/drivers/i915/i915_resource.c
@@ -36,11 +36,11 @@ i915_resource_from_handle(struct pipe_screen * screen,
void
i915_init_resource_functions(struct i915_context *i915 )
{
- i915->base.buffer_map = u_transfer_map_vtbl;
- i915->base.texture_map = u_transfer_map_vtbl;
+ i915->base.buffer_map = i915_buffer_transfer_map;
+ i915->base.texture_map = i915_texture_transfer_map;
i915->base.transfer_flush_region = u_default_transfer_flush_region;
- i915->base.buffer_unmap = u_transfer_unmap_vtbl;
- i915->base.texture_unmap = u_transfer_unmap_vtbl;
+ i915->base.buffer_unmap = i915_buffer_transfer_unmap;
+ i915->base.texture_unmap = i915_texture_transfer_unmap;
i915->base.buffer_subdata = i915_buffer_subdata;
i915->base.texture_subdata = u_default_texture_subdata;
}
diff --git a/src/gallium/drivers/i915/i915_resource.h b/src/gallium/drivers/i915/i915_resource.h
index 42511b6e07c..743608165fc 100644
--- a/src/gallium/drivers/i915/i915_resource.h
+++ b/src/gallium/drivers/i915/i915_resource.h
@@ -146,4 +146,28 @@ i915_buffer_subdata(struct pipe_context *rm_ctx,
unsigned usage, unsigned offset,
unsigned size, const void *data);
+void *
+i915_buffer_transfer_map(struct pipe_context *pipe,
+ struct pipe_resource *resource,
+ unsigned level,
+ unsigned usage,
+ const struct pipe_box *box,
+ struct pipe_transfer **ptransfer);
+
+void
+i915_buffer_transfer_unmap(struct pipe_context *pipe,
+ struct pipe_transfer *transfer);
+
+void *
+i915_texture_transfer_map(struct pipe_context *pipe,
+ struct pipe_resource *resource,
+ unsigned level,
+ unsigned usage,
+ const struct pipe_box *box,
+ struct pipe_transfer **ptransfer);
+
+void
+i915_texture_transfer_unmap(struct pipe_context *pipe,
+ struct pipe_transfer *transfer);
+
#endif /* I915_RESOURCE_H */
diff --git a/src/gallium/drivers/i915/i915_resource_buffer.c b/src/gallium/drivers/i915/i915_resource_buffer.c
index 1840a96652d..94781eacf1f 100644
--- a/src/gallium/drivers/i915/i915_resource_buffer.c
+++ b/src/gallium/drivers/i915/i915_resource_buffer.c
@@ -66,7 +66,7 @@ i915_resource_destroy(struct pipe_screen *screen,
}
-static void *
+void *
i915_buffer_transfer_map(struct pipe_context *pipe,
struct pipe_resource *resource,
unsigned level,
@@ -90,7 +90,7 @@ i915_buffer_transfer_map(struct pipe_context *pipe,
return buffer->data + transfer->box.x;
}
-static void
+void
i915_buffer_transfer_unmap(struct pipe_context *pipe,
struct pipe_transfer *transfer)
{
@@ -112,8 +112,6 @@ i915_buffer_subdata(struct pipe_context *rm_ctx,
struct u_resource_vtbl i915_buffer_vtbl =
{
- i915_buffer_transfer_map, /* transfer_map */
- i915_buffer_transfer_unmap, /* transfer_unmap */
};
diff --git a/src/gallium/drivers/i915/i915_resource_texture.c b/src/gallium/drivers/i915/i915_resource_texture.c
index 9274941dea7..bdfdeae44c5 100644
--- a/src/gallium/drivers/i915/i915_resource_texture.c
+++ b/src/gallium/drivers/i915/i915_resource_texture.c
@@ -698,7 +698,7 @@ i915_resource_get_handle(struct pipe_screen *screen,
return iws->buffer_get_handle(iws, tex->buffer, whandle, tex->stride);
}
-static void *
+void *
i915_texture_transfer_map(struct pipe_context *pipe,
struct pipe_resource *resource,
unsigned level,
@@ -774,7 +774,7 @@ i915_texture_transfer_map(struct pipe_context *pipe,
box->x / util_format_get_blockwidth(format) * util_format_get_blocksize(format);
}
-static void
+void
i915_texture_transfer_unmap(struct pipe_context *pipe,
struct pipe_transfer *transfer)
{
@@ -895,8 +895,6 @@ out:
struct u_resource_vtbl i915_texture_vtbl =
{
- i915_texture_transfer_map, /* transfer_map */
- i915_texture_transfer_unmap, /* transfer_unmap */
};
diff --git a/src/gallium/drivers/nouveau/nouveau_buffer.c b/src/gallium/drivers/nouveau/nouveau_buffer.c
index 7b320c1a1e5..05fc506797e 100644
--- a/src/gallium/drivers/nouveau/nouveau_buffer.c
+++ b/src/gallium/drivers/nouveau/nouveau_buffer.c
@@ -20,6 +20,17 @@ struct nouveau_transfer {
uint32_t offset;
};
+static void *
+nouveau_user_ptr_transfer_map(struct pipe_context *pipe,
+ struct pipe_resource *resource,
+ unsigned level, unsigned usage,
+ const struct pipe_box *box,
+ struct pipe_transfer **ptransfer);
+
+static void
+nouveau_user_ptr_transfer_unmap(struct pipe_context *pipe,
+ struct pipe_transfer *transfer);
+
static inline struct nouveau_transfer *
nouveau_transfer(struct pipe_transfer *transfer)
{
@@ -377,7 +388,7 @@ nouveau_buffer_should_discard(struct nv04_resource *buf, unsigned usage)
* The strategy for determining what kind of memory area to return is complex,
* see comments inside of the function.
*/
-static void *
+void *
nouveau_buffer_transfer_map(struct pipe_context *pipe,
struct pipe_resource *resource,
unsigned level, unsigned usage,
@@ -386,6 +397,10 @@ nouveau_buffer_transfer_map(struct pipe_context *pipe,
{
struct nouveau_context *nv = nouveau_context(pipe);
struct nv04_resource *buf = nv04_resource(resource);
+
+ if (buf->status & NOUVEAU_BUFFER_STATUS_USER_PTR)
+ return nouveau_user_ptr_transfer_map(pipe, resource, level, usage, box, ptransfer);
+
struct nouveau_transfer *tx = MALLOC_STRUCT(nouveau_transfer);
uint8_t *map;
int ret;
@@ -533,14 +548,18 @@ nouveau_buffer_transfer_flush_region(struct pipe_context *pipe,
*
* Also marks vbo dirty based on the buffer's binding
*/
-static void
+void
nouveau_buffer_transfer_unmap(struct pipe_context *pipe,
struct pipe_transfer *transfer)
{
struct nouveau_context *nv = nouveau_context(pipe);
- struct nouveau_transfer *tx = nouveau_transfer(transfer);
struct nv04_resource *buf = nv04_resource(transfer->resource);
+ if (buf->status & NOUVEAU_BUFFER_STATUS_USER_PTR)
+ return nouveau_user_ptr_transfer_unmap(pipe, transfer);
+
+ struct nouveau_transfer *tx = nouveau_transfer(transfer);
+
if (tx->base.usage & PIPE_MAP_WRITE) {
if (!(tx->base.usage & PIPE_MAP_FLUSH_EXPLICIT)) {
if (tx->map)
@@ -635,8 +654,6 @@ nouveau_resource_map_offset(struct nouveau_context *nv,
const struct u_resource_vtbl nouveau_buffer_vtbl =
{
- nouveau_buffer_transfer_map, /* transfer_map */
- nouveau_buffer_transfer_unmap, /* transfer_unmap */
};
static void *
@@ -664,8 +681,6 @@ nouveau_user_ptr_transfer_unmap(struct pipe_context *pipe,
const struct u_resource_vtbl nouveau_user_ptr_buffer_vtbl =
{
- nouveau_user_ptr_transfer_map, /* transfer_map */
- nouveau_user_ptr_transfer_unmap, /* transfer_unmap */
};
struct pipe_resource *
diff --git a/src/gallium/drivers/nouveau/nouveau_buffer.h b/src/gallium/drivers/nouveau/nouveau_buffer.h
index 509e654cbdf..7a3429ea06a 100644
--- a/src/gallium/drivers/nouveau/nouveau_buffer.h
+++ b/src/gallium/drivers/nouveau/nouveau_buffer.h
@@ -128,4 +128,15 @@ nouveau_scratch_data(struct nouveau_context *,
const void *data, unsigned base, unsigned size,
struct nouveau_bo **);
+void *
+nouveau_buffer_transfer_map(struct pipe_context *pipe,
+ struct pipe_resource *resource,
+ unsigned level, unsigned usage,
+ const struct pipe_box *box,
+ struct pipe_transfer **ptransfer);
+
+void
+nouveau_buffer_transfer_unmap(struct pipe_context *pipe,
+ struct pipe_transfer *transfer);
+
#endif
diff --git a/src/gallium/drivers/nouveau/nv30/nv30_miptree.c b/src/gallium/drivers/nouveau/nv30/nv30_miptree.c
index 6f2ce94edc0..f7f4fd38454 100644
--- a/src/gallium/drivers/nouveau/nv30/nv30_miptree.c
+++ b/src/gallium/drivers/nouveau/nv30/nv30_miptree.c
@@ -276,7 +276,7 @@ nv30_flush_resource(struct pipe_context *pipe,
{
}
-static void *
+void *
nv30_miptree_transfer_map(struct pipe_context *pipe, struct pipe_resource *pt,
unsigned level, unsigned usage,
const struct pipe_box *box,
@@ -370,7 +370,7 @@ nv30_miptree_transfer_map(struct pipe_context *pipe, struct pipe_resource *pt,
return tx->tmp.bo->map;
}
-static void
+void
nv30_miptree_transfer_unmap(struct pipe_context *pipe,
struct pipe_transfer *ptx)
{
@@ -403,8 +403,6 @@ nv30_miptree_transfer_unmap(struct pipe_context *pipe,
}
const struct u_resource_vtbl nv30_miptree_vtbl = {
- nv30_miptree_transfer_map,
- nv30_miptree_transfer_unmap,
};
struct pipe_resource *
diff --git a/src/gallium/drivers/nouveau/nv30/nv30_resource.c b/src/gallium/drivers/nouveau/nv30/nv30_resource.c
index f00e6ee44a8..f4e66fa4458 100644
--- a/src/gallium/drivers/nouveau/nv30/nv30_resource.c
+++ b/src/gallium/drivers/nouveau/nv30/nv30_resource.c
@@ -92,11 +92,11 @@ nv30_resource_screen_init(struct pipe_screen *pscreen)
void
nv30_resource_init(struct pipe_context *pipe)
{
- pipe->buffer_map = u_transfer_map_vtbl;
- pipe->texture_map = u_transfer_map_vtbl;
+ pipe->buffer_map = nouveau_buffer_transfer_map;
+ pipe->texture_map = nv30_miptree_transfer_map;
pipe->transfer_flush_region = nouveau_buffer_transfer_flush_region;
- pipe->buffer_unmap = u_transfer_unmap_vtbl;
- pipe->texture_unmap = u_transfer_unmap_vtbl;
+ pipe->buffer_unmap = nouveau_buffer_transfer_unmap;
+ pipe->texture_unmap = nv30_miptree_transfer_unmap;
pipe->buffer_subdata = u_default_buffer_subdata;
pipe->texture_subdata = u_default_texture_subdata;
pipe->create_surface = nv30_miptree_surface_new;
diff --git a/src/gallium/drivers/nouveau/nv30/nv30_resource.h b/src/gallium/drivers/nouveau/nv30/nv30_resource.h
index 1a541e37908..7dcc19952af 100644
--- a/src/gallium/drivers/nouveau/nv30/nv30_resource.h
+++ b/src/gallium/drivers/nouveau/nv30/nv30_resource.h
@@ -83,4 +83,14 @@ void
nv30_flush_resource(struct pipe_context *pipe,
struct pipe_resource *resource);
+void *
+nv30_miptree_transfer_map(struct pipe_context *pipe, struct pipe_resource *pt,
+ unsigned level, unsigned usage,
+ const struct pipe_box *box,
+ struct pipe_transfer **ptransfer);
+
+void
+nv30_miptree_transfer_unmap(struct pipe_context *pipe,
+ struct pipe_transfer *ptx);
+
#endif
diff --git a/src/gallium/drivers/nouveau/nv50/nv50_miptree.c b/src/gallium/drivers/nouveau/nv50/nv50_miptree.c
index 94661412037..ad22bc2578e 100644
--- a/src/gallium/drivers/nouveau/nv50/nv50_miptree.c
+++ b/src/gallium/drivers/nouveau/nv50/nv50_miptree.c
@@ -204,8 +204,6 @@ nv50_miptree_get_handle(struct pipe_screen *pscreen,
const struct u_resource_vtbl nv50_miptree_vtbl =
{
- nv50_miptree_transfer_map, /* transfer_map */
- nv50_miptree_transfer_unmap, /* transfer_unmap */
};
static inline bool
diff --git a/src/gallium/drivers/nouveau/nv50/nv50_resource.c b/src/gallium/drivers/nouveau/nv50/nv50_resource.c
index 4f53d2f58e3..023c85b420f 100644
--- a/src/gallium/drivers/nouveau/nv50/nv50_resource.c
+++ b/src/gallium/drivers/nouveau/nv50/nv50_resource.c
@@ -103,11 +103,11 @@ nv50_invalidate_resource(struct pipe_context *pipe, struct pipe_resource *res)
void
nv50_init_resource_functions(struct pipe_context *pcontext)
{
- pcontext->buffer_map = u_transfer_map_vtbl;
- pcontext->texture_map = u_transfer_map_vtbl;
+ pcontext->buffer_map = nouveau_buffer_transfer_map;
+ pcontext->texture_map = nv50_miptree_transfer_map;
pcontext->transfer_flush_region = nouveau_buffer_transfer_flush_region;
- pcontext->buffer_unmap = u_transfer_unmap_vtbl;
- pcontext->texture_unmap = u_transfer_unmap_vtbl;
+ pcontext->buffer_unmap = nouveau_buffer_transfer_unmap;
+ pcontext->texture_unmap = nv50_miptree_transfer_unmap;
pcontext->buffer_subdata = u_default_buffer_subdata;
pcontext->texture_subdata = u_default_texture_subdata;
pcontext->create_surface = nv50_surface_create;
diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_miptree.c b/src/gallium/drivers/nouveau/nvc0/nvc0_miptree.c
index 5f70c48a68a..70e167d1c49 100644
--- a/src/gallium/drivers/nouveau/nvc0/nvc0_miptree.c
+++ b/src/gallium/drivers/nouveau/nvc0/nvc0_miptree.c
@@ -438,8 +438,6 @@ nvc0_miptree_select_best_modifier(struct pipe_screen *pscreen,
const struct u_resource_vtbl nvc0_miptree_vtbl =
{
- nvc0_miptree_transfer_map, /* transfer_map */
- nvc0_miptree_transfer_unmap, /* transfer_unmap */
};
struct pipe_resource *
diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_resource.c b/src/gallium/drivers/nouveau/nvc0/nvc0_resource.c
index 1ba6978f95d..10001174448 100644
--- a/src/gallium/drivers/nouveau/nvc0/nvc0_resource.c
+++ b/src/gallium/drivers/nouveau/nvc0/nvc0_resource.c
@@ -154,11 +154,11 @@ nvc0_resource_from_user_memory(struct pipe_screen *pipe,
void
nvc0_init_resource_functions(struct pipe_context *pcontext)
{
- pcontext->buffer_map = u_transfer_map_vtbl;
- pcontext->texture_map = u_transfer_map_vtbl;
+ pcontext->buffer_map = nouveau_buffer_transfer_map;
+ pcontext->texture_map = nvc0_miptree_transfer_map;
pcontext->transfer_flush_region = nouveau_buffer_transfer_flush_region;
- pcontext->buffer_unmap = u_transfer_unmap_vtbl;
- pcontext->texture_unmap = u_transfer_unmap_vtbl;
+ pcontext->buffer_unmap = nouveau_buffer_transfer_unmap;
+ pcontext->texture_unmap = nvc0_miptree_transfer_unmap;
pcontext->buffer_subdata = u_default_buffer_subdata;
pcontext->texture_subdata = u_default_texture_subdata;
pcontext->create_surface = nvc0_surface_create;
diff --git a/src/gallium/drivers/r300/r300_resource.c b/src/gallium/drivers/r300/r300_resource.c
index 7eb99b724b4..aa9018f5cbe 100644
--- a/src/gallium/drivers/r300/r300_resource.c
+++ b/src/gallium/drivers/r300/r300_resource.c
@@ -25,6 +25,7 @@
#include "r300_context.h"
#include "r300_texture.h"
+#include "r300_transfer.h"
#include "r300_screen_buffer.h"
static struct pipe_resource *
@@ -40,11 +41,11 @@ r300_resource_create(struct pipe_screen *screen,
void r300_init_resource_functions(struct r300_context *r300)
{
- r300->context.buffer_map = u_transfer_map_vtbl;
- r300->context.texture_map = u_transfer_map_vtbl;
+ r300->context.buffer_map = r300_buffer_transfer_map;
+ r300->context.texture_map = r300_texture_transfer_map;
r300->context.transfer_flush_region = u_default_transfer_flush_region;
- r300->context.buffer_unmap = u_transfer_unmap_vtbl;
- r300->context.texture_unmap = u_transfer_unmap_vtbl;
+ r300->context.buffer_unmap = r300_buffer_transfer_unmap;
+ r300->context.texture_unmap = r300_texture_transfer_unmap;
r300->context.buffer_subdata = u_default_buffer_subdata;
r300->context.texture_subdata = u_default_texture_subdata;
r300->context.create_surface = r300_create_surface;
diff --git a/src/gallium/drivers/r300/r300_screen_buffer.c b/src/gallium/drivers/r300/r300_screen_buffer.c
index 5a03d1767d9..ee51073e7da 100644
--- a/src/gallium/drivers/r300/r300_screen_buffer.c
+++ b/src/gallium/drivers/r300/r300_screen_buffer.c
@@ -78,7 +78,7 @@ void r300_resource_destroy(struct pipe_screen *screen,
}
}
-static void *
+void *
r300_buffer_transfer_map( struct pipe_context *context,
struct pipe_resource *resource,
unsigned level,
@@ -153,8 +153,8 @@ r300_buffer_transfer_map( struct pipe_context *context,
return map + box->x;
}
-static void r300_buffer_transfer_unmap( struct pipe_context *pipe,
- struct pipe_transfer *transfer )
+void r300_buffer_transfer_unmap( struct pipe_context *pipe,
+ struct pipe_transfer *transfer )
{
struct r300_context *r300 = r300_context(pipe);
@@ -163,8 +163,6 @@ static void r300_buffer_transfer_unmap( struct pipe_context *pipe,
static const struct u_resource_vtbl r300_buffer_vtbl =
{
- r300_buffer_transfer_map, /* transfer_map */
- r300_buffer_transfer_unmap, /* transfer_unmap */
};
struct pipe_resource *r300_buffer_create(struct pipe_screen *screen,
diff --git a/src/gallium/drivers/r300/r300_screen_buffer.h b/src/gallium/drivers/r300/r300_screen_buffer.h
index bd025dfddec..da37d34cea2 100644
--- a/src/gallium/drivers/r300/r300_screen_buffer.h
+++ b/src/gallium/drivers/r300/r300_screen_buffer.h
@@ -54,4 +54,15 @@ static inline struct r300_buffer *r300_buffer(struct pipe_resource *buffer)
return (struct r300_buffer *)buffer;
}
+void *
+r300_buffer_transfer_map( struct pipe_context *context,
+ struct pipe_resource *resource,
+ unsigned level,
+ unsigned usage,
+ const struct pipe_box *box,
+ struct pipe_transfer **ptransfer );
+
+void r300_buffer_transfer_unmap( struct pipe_context *pipe,
+ struct pipe_transfer *transfer );
+
#endif
diff --git a/src/gallium/drivers/r300/r300_texture.c b/src/gallium/drivers/r300/r300_texture.c
index d58934663d5..0e9b97f8fb1 100644
--- a/src/gallium/drivers/r300/r300_texture.c
+++ b/src/gallium/drivers/r300/r300_texture.c
@@ -1042,8 +1042,6 @@ bool r300_resource_get_handle(struct pipe_screen* screen,
static const struct u_resource_vtbl r300_texture_vtbl =
{
- r300_texture_transfer_map, /* transfer_map */
- r300_texture_transfer_unmap, /* transfer_unmap */
};
/* The common texture constructor. */
diff --git a/src/gallium/drivers/r600/evergreen_compute.c b/src/gallium/drivers/r600/evergreen_compute.c
index ca58cbd7efe..cd309d500d9 100644
--- a/src/gallium/drivers/r600/evergreen_compute.c
+++ b/src/gallium/drivers/r600/evergreen_compute.c
@@ -1230,12 +1230,12 @@ void evergreen_init_compute_state_functions(struct r600_context *rctx)
}
-static void *r600_compute_global_transfer_map(struct pipe_context *ctx,
- struct pipe_resource *resource,
- unsigned level,
- unsigned usage,
- const struct pipe_box *box,
- struct pipe_transfer **ptransfer)
+void *r600_compute_global_transfer_map(struct pipe_context *ctx,
+ struct pipe_resource *resource,
+ unsigned level,
+ unsigned usage,
+ const struct pipe_box *box,
+ struct pipe_transfer **ptransfer)
{
struct r600_context *rctx = (struct r600_context*)ctx;
struct compute_memory_pool *pool = rctx->screen->global_pool;
@@ -1281,8 +1281,8 @@ static void *r600_compute_global_transfer_map(struct pipe_context *ctx,
offset, box->width, usage, ptransfer);
}
-static void r600_compute_global_transfer_unmap(struct pipe_context *ctx,
- struct pipe_transfer *transfer)
+void r600_compute_global_transfer_unmap(struct pipe_context *ctx,
+ struct pipe_transfer *transfer)
{
/* struct r600_resource_global are not real resources, they just map
* to an offset within the compute memory pool. The function
@@ -1317,8 +1317,6 @@ void r600_compute_global_buffer_destroy(struct pipe_screen *screen,
static const struct u_resource_vtbl r600_global_buffer_vtbl =
{
- r600_compute_global_transfer_map, /* transfer_map */
- r600_compute_global_transfer_unmap, /* transfer_unmap */
};
struct pipe_resource *r600_compute_global_buffer_create(struct pipe_screen *screen,
diff --git a/src/gallium/drivers/r600/evergreen_compute.h b/src/gallium/drivers/r600/evergreen_compute.h
index e1e00276b93..cfe43f9d42d 100644
--- a/src/gallium/drivers/r600/evergreen_compute.h
+++ b/src/gallium/drivers/r600/evergreen_compute.h
@@ -46,5 +46,13 @@ struct r600_resource* r600_compute_buffer_alloc_vram(struct r600_screen *screen,
struct pipe_resource *r600_compute_global_buffer_create(struct pipe_screen *screen, const struct pipe_resource *templ);
void r600_compute_global_buffer_destroy(struct pipe_screen *screen,
struct pipe_resource *res);
+void *r600_compute_global_transfer_map(struct pipe_context *ctx,
+ struct pipe_resource *resource,
+ unsigned level,
+ unsigned usage,
+ const struct pipe_box *box,
+ struct pipe_transfer **ptransfer);
+void r600_compute_global_transfer_unmap(struct pipe_context *ctx,
+ struct pipe_transfer *transfer);
#endif
diff --git a/src/gallium/drivers/r600/r600_buffer_common.c b/src/gallium/drivers/r600/r600_buffer_common.c
index 1b35d737f44..2a4bcc0d758 100644
--- a/src/gallium/drivers/r600/r600_buffer_common.c
+++ b/src/gallium/drivers/r600/r600_buffer_common.c
@@ -25,6 +25,7 @@
*/
#include "r600_cs.h"
+#include "evergreen_compute.h"
#include "util/u_memory.h"
#include "util/u_upload_mgr.h"
#include <inttypes.h>
@@ -338,18 +339,22 @@ static bool r600_can_dma_copy_buffer(struct r600_common_context *rctx,
}
-static void *r600_buffer_transfer_map(struct pipe_context *ctx,
- struct pipe_resource *resource,
- unsigned level,
- unsigned usage,
- const struct pipe_box *box,
- struct pipe_transfer **ptransfer)
+void *r600_buffer_transfer_map(struct pipe_context *ctx,
+ struct pipe_resource *resource,
+ unsigned level,
+ unsigned usage,
+ const struct pipe_box *box,
+ struct pipe_transfer **ptransfer)
{
struct r600_common_context *rctx = (struct r600_common_context*)ctx;
struct r600_common_screen *rscreen = (struct r600_common_screen*)ctx->screen;
struct r600_resource *rbuffer = r600_resource(resource);
uint8_t *data;
+ if (r600_resource(resource)->compute_global_bo) {
+ return r600_compute_global_transfer_map(ctx, resource, level, usage, box, ptransfer);
+ }
+
assert(box->x + box->width <= resource->width0);
/* From GL_AMD_pinned_memory issues:
@@ -519,12 +524,17 @@ void r600_buffer_flush_region(struct pipe_context *ctx,
}
}
-static void r600_buffer_transfer_unmap(struct pipe_context *ctx,
- struct pipe_transfer *transfer)
+void r600_buffer_transfer_unmap(struct pipe_context *ctx,
+ struct pipe_transfer *transfer)
{
struct r600_common_context *rctx = (struct r600_common_context*)ctx;
struct r600_transfer *rtransfer = (struct r600_transfer*)transfer;
+ if (r600_resource(transfer->resource)->compute_global_bo) {
+ r600_compute_global_transfer_unmap(ctx, transfer);
+ return;
+ }
+
if (transfer->usage & PIPE_MAP_WRITE &&
!(transfer->usage & PIPE_MAP_FLUSH_EXPLICIT))
r600_buffer_do_flush_region(ctx, transfer, &transfer->box);
@@ -563,8 +573,6 @@ void r600_buffer_subdata(struct pipe_context *ctx,
static const struct u_resource_vtbl r600_buffer_vtbl =
{
- r600_buffer_transfer_map, /* transfer_map */
- r600_buffer_transfer_unmap, /* transfer_unmap */
};
static struct r600_resource *
diff --git a/src/gallium/drivers/r600/r600_pipe_common.c b/src/gallium/drivers/r600/r600_pipe_common.c
index c42d3605b97..5c6a02087d4 100644
--- a/src/gallium/drivers/r600/r600_pipe_common.c
+++ b/src/gallium/drivers/r600/r600_pipe_common.c
@@ -590,11 +590,11 @@ bool r600_common_context_init(struct r600_common_context *rctx,
rctx->b.invalidate_resource = r600_invalidate_resource;
rctx->b.resource_commit = r600_resource_commit;
- rctx->b.buffer_map = u_transfer_map_vtbl;
- rctx->b.texture_map = u_transfer_map_vtbl;
+ rctx->b.buffer_map = r600_buffer_transfer_map;
+ rctx->b.texture_map = r600_texture_transfer_map;
rctx->b.transfer_flush_region = r600_buffer_flush_region;
- rctx->b.buffer_unmap = u_transfer_unmap_vtbl;
- rctx->b.texture_unmap = u_transfer_unmap_vtbl;
+ rctx->b.buffer_unmap = r600_buffer_transfer_unmap;
+ rctx->b.texture_unmap = r600_texture_transfer_unmap;
rctx->b.texture_subdata = u_default_texture_subdata;
rctx->b.flush = r600_flush_from_st;
rctx->b.set_debug_callback = r600_set_debug_callback;
diff --git a/src/gallium/drivers/r600/r600_pipe_common.h b/src/gallium/drivers/r600/r600_pipe_common.h
index 0c1c74c182f..34293a44528 100644
--- a/src/gallium/drivers/r600/r600_pipe_common.h
+++ b/src/gallium/drivers/r600/r600_pipe_common.h
@@ -663,6 +663,14 @@ r600_invalidate_resource(struct pipe_context *ctx,
void r600_replace_buffer_storage(struct pipe_context *ctx,
struct pipe_resource *dst,
struct pipe_resource *src);
+void *r600_buffer_transfer_map(struct pipe_context *ctx,
+ struct pipe_resource *resource,
+ unsigned level,
+ unsigned usage,
+ const struct pipe_box *box,
+ struct pipe_transfer **ptransfer);
+void r600_buffer_transfer_unmap(struct pipe_context *ctx,
+ struct pipe_transfer *transfer);
/* r600_common_pipe.c */
void r600_gfx_write_event_eop(struct r600_common_context *ctx,
@@ -775,6 +783,14 @@ void r600_init_context_texture_functions(struct r600_common_context *rctx);
void eg_resource_alloc_immed(struct r600_common_screen *rscreen,
struct r600_resource *res,
unsigned immed_size);
+void *r600_texture_transfer_map(struct pipe_context *ctx,
+ struct pipe_resource *texture,
+ unsigned level,
+ unsigned usage,
+ const struct pipe_box *box,
+ struct pipe_transfer **ptransfer);
+void r600_texture_transfer_unmap(struct pipe_context *ctx,
+ struct pipe_transfer* transfer);
/* r600_viewport.c */
void evergreen_apply_scissor_bug_workaround(struct r600_common_context *rctx,
diff --git a/src/gallium/drivers/r600/r600_texture.c b/src/gallium/drivers/r600/r600_texture.c
index 0f4acf50845..d1caf7abc74 100644
--- a/src/gallium/drivers/r600/r600_texture.c
+++ b/src/gallium/drivers/r600/r600_texture.c
@@ -1287,12 +1287,12 @@ static void r600_texture_invalidate_storage(struct r600_common_context *rctx,
rctx->num_alloc_tex_transfer_bytes += rtex->size;
}
-static void *r600_texture_transfer_map(struct pipe_context *ctx,
- struct pipe_resource *texture,
- unsigned level,
- unsigned usage,
- const struct pipe_box *box,
- struct pipe_transfer **ptransfer)
+void *r600_texture_transfer_map(struct pipe_context *ctx,
+ struct pipe_resource *texture,
+ unsigned level,
+ unsigned usage,
+ const struct pipe_box *box,
+ struct pipe_transfer **ptransfer)
{
struct r600_common_context *rctx = (struct r600_common_context*)ctx;
struct r600_texture *rtex = (struct r600_texture*)texture;
@@ -1472,8 +1472,8 @@ static void *r600_texture_transfer_map(struct pipe_context *ctx,
return map + offset;
}
-static void r600_texture_transfer_unmap(struct pipe_context *ctx,
- struct pipe_transfer* transfer)
+void r600_texture_transfer_unmap(struct pipe_context *ctx,
+ struct pipe_transfer* transfer)
{
struct r600_common_context *rctx = (struct r600_common_context*)ctx;
struct r600_transfer *rtransfer = (struct r600_transfer*)transfer;
@@ -1520,8 +1520,6 @@ static void r600_texture_transfer_unmap(struct pipe_context *ctx,
static const struct u_resource_vtbl r600_texture_vtbl =
{
- r600_texture_transfer_map, /* transfer_map */
- r600_texture_transfer_unmap, /* transfer_unmap */
};
struct pipe_surface *r600_create_surface_custom(struct pipe_context *pipe,
diff --git a/src/gallium/drivers/radeonsi/si_buffer.c b/src/gallium/drivers/radeonsi/si_buffer.c
index 3f27f2a9157..1cfe9891355 100644
--- a/src/gallium/drivers/radeonsi/si_buffer.c
+++ b/src/gallium/drivers/radeonsi/si_buffer.c
@@ -569,8 +569,6 @@ static void si_buffer_subdata(struct pipe_context *ctx, struct pipe_resource *bu
}
static const struct u_resource_vtbl si_buffer_vtbl = {
- si_buffer_transfer_map, /* transfer_map */
- si_buffer_transfer_unmap, /* transfer_unmap */
};
static struct si_resource *si_alloc_buffer_struct(struct pipe_screen *screen,
@@ -745,11 +743,9 @@ void si_init_screen_buffer_functions(struct si_screen *sscreen)
void si_init_buffer_functions(struct si_context *sctx)
{
sctx->b.invalidate_resource = si_invalidate_resource;
- sctx->b.buffer_map = u_transfer_map_vtbl;
- sctx->b.texture_map = u_transfer_map_vtbl;
+ sctx->b.buffer_map = si_buffer_transfer_map;
sctx->b.transfer_flush_region = si_buffer_flush_region;
- sctx->b.buffer_unmap = u_transfer_unmap_vtbl;
- sctx->b.texture_unmap = u_transfer_unmap_vtbl;
+ sctx->b.buffer_unmap = si_buffer_transfer_unmap;
sctx->b.texture_subdata = u_default_texture_subdata;
sctx->b.buffer_subdata = si_buffer_subdata;
sctx->b.resource_commit = si_resource_commit;
diff --git a/src/gallium/drivers/radeonsi/si_texture.c b/src/gallium/drivers/radeonsi/si_texture.c
index 4bdfffddef2..d20bc3424bd 100644
--- a/src/gallium/drivers/radeonsi/si_texture.c
+++ b/src/gallium/drivers/radeonsi/si_texture.c
@@ -1432,8 +1432,6 @@ si_texture_create_with_modifiers(struct pipe_screen *screen,
}
static const struct u_resource_vtbl si_auxiliary_texture_vtbl = {
- NULL, /* transfer_map */
- NULL, /* transfer_unmap */
};
static bool si_texture_is_aux_plane(const struct pipe_resource *resource)
@@ -1742,6 +1740,9 @@ static void *si_texture_transfer_map(struct pipe_context *ctx, struct pipe_resou
assert(!(texture->flags & SI_RESOURCE_FLAG_FORCE_LINEAR));
assert(box->width && box->height && box->depth);
+ if (tex->buffer.b.b.flags & SI_RESOURCE_AUX_PLANE)
+ return NULL;
+
if (tex->buffer.flags & RADEON_FLAG_ENCRYPTED)
return NULL;
@@ -1918,8 +1919,6 @@ static void si_texture_transfer_unmap(struct pipe_context *ctx, struct pipe_tran
}
static const struct u_resource_vtbl si_texture_vtbl = {
- si_texture_transfer_map, /* transfer_map */
- si_texture_transfer_unmap, /* transfer_unmap */
};
/* Return if it's allowed to reinterpret one format as another with DCC enabled.
@@ -2232,6 +2231,8 @@ void si_init_screen_texture_functions(struct si_screen *sscreen)
void si_init_context_texture_functions(struct si_context *sctx)
{
+ sctx->b.texture_map = si_texture_transfer_map;
+ sctx->b.texture_unmap = si_texture_transfer_unmap;
sctx->b.create_surface = si_create_surface;
sctx->b.surface_destroy = si_surface_destroy;
}
diff --git a/src/gallium/drivers/svga/svga_resource.c b/src/gallium/drivers/svga/svga_resource.c
index 986381c5b62..29f5db1f3b5 100644
--- a/src/gallium/drivers/svga/svga_resource.c
+++ b/src/gallium/drivers/svga/svga_resource.c
@@ -120,11 +120,11 @@ svga_can_create_resource(struct pipe_screen *screen,
void
svga_init_resource_functions(struct svga_context *svga)
{
- svga->pipe.buffer_map = u_transfer_map_vtbl;
- svga->pipe.texture_map = u_transfer_map_vtbl;
+ svga->pipe.buffer_map = svga_buffer_transfer_map;
+ svga->pipe.texture_map = svga_texture_transfer_map;
svga->pipe.transfer_flush_region = svga_buffer_transfer_flush_region;
- svga->pipe.buffer_unmap = u_transfer_unmap_vtbl;
- svga->pipe.texture_unmap = u_transfer_unmap_vtbl;
+ svga->pipe.buffer_unmap = svga_buffer_transfer_unmap;
+ svga->pipe.texture_unmap = svga_texture_transfer_unmap;
svga->pipe.buffer_subdata = u_default_buffer_subdata;
svga->pipe.texture_subdata = u_default_texture_subdata;
diff --git a/src/gallium/drivers/svga/svga_resource_buffer.c b/src/gallium/drivers/svga/svga_resource_buffer.c
index f04edbb971a..53830a6ad86 100644
--- a/src/gallium/drivers/svga/svga_resource_buffer.c
+++ b/src/gallium/drivers/svga/svga_resource_buffer.c
@@ -90,7 +90,7 @@ svga_buffer_needs_hw_storage(const struct svga_screen *ss,
* the end result is exactly the same as if one DMA was used for every mapped
* range.
*/
-static void *
+void *
svga_buffer_transfer_map(struct pipe_context *pipe,
struct pipe_resource *resource,
unsigned level,
@@ -329,7 +329,7 @@ svga_buffer_transfer_flush_region(struct pipe_context *pipe,
}
-static void
+void
svga_buffer_transfer_unmap(struct pipe_context *pipe,
struct pipe_transfer *transfer)
{
@@ -456,8 +456,6 @@ svga_resource_destroy(struct pipe_screen *screen,
struct u_resource_vtbl svga_buffer_vtbl =
{
- svga_buffer_transfer_map, /* transfer_map */
- svga_buffer_transfer_unmap, /* transfer_unmap */
};
diff --git a/src/gallium/drivers/svga/svga_resource_buffer.h b/src/gallium/drivers/svga/svga_resource_buffer.h
index cc93b8aeb47..35ee1f59c5e 100644
--- a/src/gallium/drivers/svga/svga_resource_buffer.h
+++ b/src/gallium/drivers/svga/svga_resource_buffer.h
@@ -382,4 +382,16 @@ void
svga_resource_destroy(struct pipe_screen *screen,
struct pipe_resource *buf);
+void *
+svga_buffer_transfer_map(struct pipe_context *pipe,
+ struct pipe_resource *resource,
+ unsigned level,
+ unsigned usage,
+ const struct pipe_box *box,
+ struct pipe_transfer **ptransfer);
+
+void
+svga_buffer_transfer_unmap(struct pipe_context *pipe,
+ struct pipe_transfer *transfer);
+
#endif /* SVGA_BUFFER_H */
diff --git a/src/gallium/drivers/svga/svga_resource_texture.c b/src/gallium/drivers/svga/svga_resource_texture.c
index 0bedea84a17..4766ff8fc6e 100644
--- a/src/gallium/drivers/svga/svga_resource_texture.c
+++ b/src/gallium/drivers/svga/svga_resource_texture.c
@@ -486,7 +486,7 @@ svga_texture_transfer_map_direct(struct svga_context *svga,
/**
* Request a transfer map to the texture resource
*/
-static void *
+void *
svga_texture_transfer_map(struct pipe_context *pipe,
struct pipe_resource *texture,
unsigned level,
@@ -789,7 +789,7 @@ svga_texture_transfer_unmap_direct(struct svga_context *svga,
}
-static void
+void
svga_texture_transfer_unmap(struct pipe_context *pipe,
struct pipe_transfer *transfer)
{
@@ -843,8 +843,6 @@ format_has_depth(enum pipe_format format)
struct u_resource_vtbl svga_texture_vtbl =
{
- svga_texture_transfer_map, /* transfer_map */
- svga_texture_transfer_unmap, /* transfer_unmap */
};
diff --git a/src/gallium/drivers/svga/svga_resource_texture.h b/src/gallium/drivers/svga/svga_resource_texture.h
index 5178ce7dc23..e942e5f8937 100644
--- a/src/gallium/drivers/svga/svga_resource_texture.h
+++ b/src/gallium/drivers/svga/svga_resource_texture.h
@@ -324,4 +324,16 @@ svga_texture_transfer_unmap_upload(struct svga_context *svga,
boolean
svga_texture_device_format_has_alpha(struct pipe_resource *texture);
+void *
+svga_texture_transfer_map(struct pipe_context *pipe,
+ struct pipe_resource *texture,
+ unsigned level,
+ unsigned usage,
+ const struct pipe_box *box,
+ struct pipe_transfer **ptransfer);
+
+void
+svga_texture_transfer_unmap(struct pipe_context *pipe,
+ struct pipe_transfer *transfer);
+
#endif /* SVGA_TEXTURE_H */
diff --git a/src/gallium/drivers/virgl/virgl_buffer.c b/src/gallium/drivers/virgl/virgl_buffer.c
index f039bbdb7ca..74029612320 100644
--- a/src/gallium/drivers/virgl/virgl_buffer.c
+++ b/src/gallium/drivers/virgl/virgl_buffer.c
@@ -28,8 +28,8 @@
#include "virgl_resource.h"
#include "virgl_screen.h"
-static void virgl_buffer_transfer_unmap(struct pipe_context *ctx,
- struct pipe_transfer *transfer)
+void virgl_buffer_transfer_unmap(struct pipe_context *ctx,
+ struct pipe_transfer *transfer)
{
struct virgl_context *vctx = virgl_context(ctx);
struct virgl_transfer *trans = virgl_transfer(transfer);
@@ -78,8 +78,6 @@ void virgl_buffer_transfer_flush_region(struct pipe_context *ctx,
static const struct u_resource_vtbl virgl_buffer_vtbl =
{
- virgl_resource_transfer_map, /* transfer_map */
- virgl_buffer_transfer_unmap, /* transfer_unmap */
};
void virgl_buffer_init(struct virgl_resource *res)
diff --git a/src/gallium/drivers/virgl/virgl_resource.c b/src/gallium/drivers/virgl/virgl_resource.c
index fe4407bb239..bae31de6034 100644
--- a/src/gallium/drivers/virgl/virgl_resource.c
+++ b/src/gallium/drivers/virgl/virgl_resource.c
@@ -672,11 +672,11 @@ static void virgl_buffer_subdata(struct pipe_context *pipe,
void virgl_init_context_resource_functions(struct pipe_context *ctx)
{
- ctx->buffer_map = u_transfer_map_vtbl;
- ctx->texture_map = u_transfer_map_vtbl;
+ ctx->buffer_map = virgl_resource_transfer_map;
+ ctx->texture_map = virgl_texture_transfer_map;
ctx->transfer_flush_region = virgl_buffer_transfer_flush_region;
- ctx->buffer_unmap = u_transfer_unmap_vtbl;
- ctx->texture_unmap = u_transfer_unmap_vtbl;
+ ctx->buffer_unmap = virgl_buffer_transfer_unmap;
+ ctx->texture_unmap = virgl_texture_transfer_unmap;
ctx->buffer_subdata = virgl_buffer_subdata;
ctx->texture_subdata = u_default_texture_subdata;
}
diff --git a/src/gallium/drivers/virgl/virgl_resource.h b/src/gallium/drivers/virgl/virgl_resource.h
index 296724c1333..420d5dd18b8 100644
--- a/src/gallium/drivers/virgl/virgl_resource.h
+++ b/src/gallium/drivers/virgl/virgl_resource.h
@@ -111,6 +111,9 @@ void virgl_buffer_transfer_flush_region(struct pipe_context *ctx,
struct pipe_transfer *transfer,
const struct pipe_box *box);
+void virgl_buffer_transfer_unmap(struct pipe_context *ctx,
+ struct pipe_transfer *transfer);
+
void virgl_buffer_init(struct virgl_resource *res);
static inline unsigned pipe_to_virgl_bind(const struct virgl_screen *vs,
@@ -199,4 +202,14 @@ bool virgl_resource_get_handle(struct pipe_screen *screen,
void virgl_resource_dirty(struct virgl_resource *res, uint32_t level);
+void *virgl_texture_transfer_map(struct pipe_context *ctx,
+ struct pipe_resource *resource,
+ unsigned level,
+ unsigned usage,
+ const struct pipe_box *box,
+ struct pipe_transfer **transfer);
+
+void virgl_texture_transfer_unmap(struct pipe_context *ctx,
+ struct pipe_transfer *transfer);
+
#endif
diff --git a/src/gallium/drivers/virgl/virgl_texture.c b/src/gallium/drivers/virgl/virgl_texture.c
index 15b6274d263..48ebf298053 100644
--- a/src/gallium/drivers/virgl/virgl_texture.c
+++ b/src/gallium/drivers/virgl/virgl_texture.c
@@ -230,12 +230,12 @@ static bool needs_resolve(struct pipe_screen *screen,
return false;
}
-static void *virgl_texture_transfer_map(struct pipe_context *ctx,
- struct pipe_resource *resource,
- unsigned level,
- unsigned usage,
- const struct pipe_box *box,
- struct pipe_transfer **transfer)
+void *virgl_texture_transfer_map(struct pipe_context *ctx,
+ struct pipe_resource *resource,
+ unsigned level,
+ unsigned usage,
+ const struct pipe_box *box,
+ struct pipe_transfer **transfer)
{
if (needs_resolve(ctx->screen, resource, usage))
return texture_transfer_map_resolve(ctx, resource, level, usage, box,
@@ -254,8 +254,8 @@ static void flush_data(struct pipe_context *ctx,
trans->base.level);
}
-static void virgl_texture_transfer_unmap(struct pipe_context *ctx,
- struct pipe_transfer *transfer)
+void virgl_texture_transfer_unmap(struct pipe_context *ctx,
+ struct pipe_transfer *transfer)
{
struct virgl_context *vctx = virgl_context(ctx);
struct virgl_transfer *trans = virgl_transfer(transfer);
@@ -304,8 +304,6 @@ static void virgl_texture_transfer_unmap(struct pipe_context *ctx,
static const struct u_resource_vtbl virgl_texture_vtbl =
{
- virgl_texture_transfer_map, /* transfer_map */
- virgl_texture_transfer_unmap, /* transfer_unmap */
};
void virgl_texture_init(struct virgl_resource *res)
More information about the mesa-commit
mailing list