[Mesa-dev] [PATCH 05/12] virgl: move vrend_get_tex_image_offset to common code
Gurchetan Singh
gurchetansingh at chromium.org
Fri Dec 7 01:19:26 UTC 2018
Will be reused.
---
src/gallium/drivers/virgl/virgl_resource.c | 24 +++++++++++++++++++
src/gallium/drivers/virgl/virgl_resource.h | 3 +++
src/gallium/drivers/virgl/virgl_texture.c | 27 +---------------------
3 files changed, 28 insertions(+), 26 deletions(-)
diff --git a/src/gallium/drivers/virgl/virgl_resource.c b/src/gallium/drivers/virgl/virgl_resource.c
index 4608ad0361..b252be1ba3 100644
--- a/src/gallium/drivers/virgl/virgl_resource.c
+++ b/src/gallium/drivers/virgl/virgl_resource.c
@@ -147,3 +147,27 @@ void virgl_resource_layout(struct pipe_resource *pt,
else /* don't create guest backing store for MSAA */
metadata->total_size = 0;
}
+
+unsigned virgl_resource_offset(struct pipe_resource *pres,
+ struct virgl_resource_metadata *metadata,
+ unsigned level, unsigned layer)
+{
+ const unsigned hgt = u_minify(pres->height0, level);
+ const unsigned nblocksy = util_format_get_nblocksy(pres->format, hgt);
+ unsigned offset = metadata->level_offset[level];
+
+ if (pres->target == PIPE_TEXTURE_CUBE ||
+ pres->target == PIPE_TEXTURE_CUBE_ARRAY ||
+ pres->target == PIPE_TEXTURE_3D ||
+ pres->target == PIPE_TEXTURE_2D_ARRAY) {
+ offset += layer * nblocksy * metadata->stride[level];
+ }
+ else if (pres->target == PIPE_TEXTURE_1D_ARRAY) {
+ offset += layer * metadata->stride[level];
+ }
+ else {
+ assert(layer == 0);
+ }
+
+ return offset;
+}
diff --git a/src/gallium/drivers/virgl/virgl_resource.h b/src/gallium/drivers/virgl/virgl_resource.h
index df53465251..1a43e5ddc5 100644
--- a/src/gallium/drivers/virgl/virgl_resource.h
+++ b/src/gallium/drivers/virgl/virgl_resource.h
@@ -154,4 +154,7 @@ bool virgl_res_needs_readback(struct virgl_context *vctx,
void virgl_resource_layout(struct pipe_resource *pt,
struct virgl_resource_metadata *metadata);
+unsigned virgl_resource_offset(struct pipe_resource *pres,
+ struct virgl_resource_metadata *metadata,
+ unsigned level, unsigned layer);
#endif
diff --git a/src/gallium/drivers/virgl/virgl_texture.c b/src/gallium/drivers/virgl/virgl_texture.c
index 7eba476ff3..c9d8e541f7 100644
--- a/src/gallium/drivers/virgl/virgl_texture.c
+++ b/src/gallium/drivers/virgl/virgl_texture.c
@@ -94,31 +94,6 @@ static void virgl_init_temp_resource_from_box(struct pipe_resource *res,
}
}
-static unsigned
-vrend_get_tex_image_offset(const struct virgl_texture *res,
- unsigned level, unsigned layer)
-{
- const struct pipe_resource *pres = &res->base.u.b;
- const unsigned hgt = u_minify(pres->height0, level);
- const unsigned nblocksy = util_format_get_nblocksy(pres->format, hgt);
- unsigned offset = res->metadata.level_offset[level];
-
- if (pres->target == PIPE_TEXTURE_CUBE ||
- pres->target == PIPE_TEXTURE_CUBE_ARRAY ||
- pres->target == PIPE_TEXTURE_3D ||
- pres->target == PIPE_TEXTURE_2D_ARRAY) {
- offset += layer * nblocksy * res->metadata.stride[level];
- }
- else if (pres->target == PIPE_TEXTURE_1D_ARRAY) {
- offset += layer * res->metadata.stride[level];
- }
- else {
- assert(layer == 0);
- }
-
- return offset;
-}
-
static void *virgl_texture_transfer_map(struct pipe_context *ctx,
struct pipe_resource *resource,
unsigned level,
@@ -179,7 +154,7 @@ static void *virgl_texture_transfer_map(struct pipe_context *ctx,
trans->base.stride = ((struct virgl_texture*)trans->resolve_tmp)->metadata.stride[level];
trans->base.layer_stride = trans->base.stride * nblocksy;
} else {
- offset = vrend_get_tex_image_offset(vtex, level, box->z);
+ offset = virgl_resource_offset(&vtex->base.u.b, &vtex->metadata, level, box->z);
offset += box->y / util_format_get_blockheight(format) * trans->base.stride +
box->x / util_format_get_blockwidth(format) * util_format_get_blocksize(format);
--
2.18.1
More information about the mesa-dev
mailing list