summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gallium/auxiliary/util/u_format.c34
-rw-r--r--src/gallium/auxiliary/util/u_format.h13
2 files changed, 47 insertions, 0 deletions
diff --git a/src/gallium/auxiliary/util/u_format.c b/src/gallium/auxiliary/util/u_format.c
index 34df01d8b5e..cbdb5ce9ddc 100644
--- a/src/gallium/auxiliary/util/u_format.c
+++ b/src/gallium/auxiliary/util/u_format.c
@@ -739,6 +739,40 @@ util_format_translate(enum pipe_format dst_format,
return TRUE;
}
+boolean
+util_format_translate_3d(enum pipe_format dst_format,
+ void *dst, unsigned dst_stride,
+ unsigned dst_slice_stride,
+ unsigned dst_x, unsigned dst_y,
+ unsigned dst_z,
+ enum pipe_format src_format,
+ const void *src, unsigned src_stride,
+ unsigned src_slice_stride,
+ unsigned src_x, unsigned src_y,
+ unsigned src_z, unsigned width,
+ unsigned height, unsigned depth)
+{
+ uint8_t *dst_layer;
+ const uint8_t *src_layer;
+ unsigned z;
+ dst_layer = dst;
+ src_layer = src;
+ dst_layer += dst_z * dst_slice_stride;
+ src_layer += src_z * src_slice_stride;
+ for (z = 0; z < depth; ++z) {
+ if (!util_format_translate(dst_format, dst_layer, dst_stride,
+ dst_x, dst_y,
+ src_format, src_layer, src_stride,
+ src_x, src_y,
+ width, height))
+ return FALSE;
+
+ dst_layer += dst_slice_stride;
+ src_layer += src_slice_stride;
+ }
+ return TRUE;
+}
+
void util_format_compose_swizzles(const unsigned char swz1[4],
const unsigned char swz2[4],
unsigned char dst[4])
diff --git a/src/gallium/auxiliary/util/u_format.h b/src/gallium/auxiliary/util/u_format.h
index a99c1bc7bad..d0557785f93 100644
--- a/src/gallium/auxiliary/util/u_format.h
+++ b/src/gallium/auxiliary/util/u_format.h
@@ -1271,6 +1271,19 @@ util_format_translate(enum pipe_format dst_format,
unsigned src_x, unsigned src_y,
unsigned width, unsigned height);
+boolean
+util_format_translate_3d(enum pipe_format dst_format,
+ void *dst, unsigned dst_stride,
+ unsigned dst_slice_stride,
+ unsigned dst_x, unsigned dst_y,
+ unsigned dst_z,
+ enum pipe_format src_format,
+ const void *src, unsigned src_stride,
+ unsigned src_slice_stride,
+ unsigned src_x, unsigned src_y,
+ unsigned src_z, unsigned width,
+ unsigned height, unsigned depth);
+
/*
* Swizzle operations.
*/