diff options
-rw-r--r-- | src/gallium/auxiliary/util/u_format.h | 22 | ||||
-rw-r--r-- | src/gallium/auxiliary/util/u_format_pack.py | 2 | ||||
-rwxr-xr-x | src/gallium/auxiliary/util/u_format_table.py | 12 |
3 files changed, 32 insertions, 4 deletions
diff --git a/src/gallium/auxiliary/util/u_format.h b/src/gallium/auxiliary/util/u_format.h index 9694c9034d2..874ea7eb12a 100644 --- a/src/gallium/auxiliary/util/u_format.h +++ b/src/gallium/auxiliary/util/u_format.h @@ -254,7 +254,7 @@ struct util_format_description /** * Fetch a single pixel (i, j) from a block. * - * Only defined for non-depth-stencil formats. + * Only defined for non-depth-stencil and non-integer formats. */ void (*fetch_rgba_float)(float *dst, @@ -358,6 +358,26 @@ struct util_format_description (*pack_rgba_sint)(uint8_t *dst, unsigned dst_stride, const int *src, unsigned src_stride, unsigned width, unsigned height); + + /** + * Fetch a single pixel (i, j) from a block. + * + * Only defined for unsigned (pure) integer formats. + */ + void + (*fetch_rgba_uint)(uint32_t *dst, + const uint8_t *src, + unsigned i, unsigned j); + + /** + * Fetch a single pixel (i, j) from a block. + * + * Only defined for signed (pure) integer formats. + */ + void + (*fetch_rgba_sint)(int32_t *dst, + const uint8_t *src, + unsigned i, unsigned j); }; diff --git a/src/gallium/auxiliary/util/u_format_pack.py b/src/gallium/auxiliary/util/u_format_pack.py index fff409fb75d..0b3a890d591 100644 --- a/src/gallium/auxiliary/util/u_format_pack.py +++ b/src/gallium/auxiliary/util/u_format_pack.py @@ -686,6 +686,7 @@ def generate(formats): generate_format_unpack(format, channel, native_type, suffix) generate_format_pack(format, channel, native_type, suffix) + generate_format_fetch(format, channel, native_type, suffix) channel = Channel(SIGNED, False, True, 32) native_type = 'int' @@ -699,6 +700,7 @@ def generate(formats): generate_format_unpack(format, channel, native_type, suffix) generate_format_pack(format, channel, native_type, suffix) + generate_format_fetch(format, channel, native_type, suffix) native_type = 'unsigned' suffix = 'unsigned' diff --git a/src/gallium/auxiliary/util/u_format_table.py b/src/gallium/auxiliary/util/u_format_table.py index 07beb38723b..8edb505237d 100755 --- a/src/gallium/auxiliary/util/u_format_table.py +++ b/src/gallium/auxiliary/util/u_format_table.py @@ -169,17 +169,23 @@ def write_format_table(formats): print " &util_format_%s_unpack_unsigned, /* unpack_rgba_uint */" % format.short_name() print " &util_format_%s_pack_unsigned, /* pack_rgba_uint */" % format.short_name() print " &util_format_%s_unpack_signed, /* unpack_rgba_sint */" % format.short_name() - print " &util_format_%s_pack_signed /* pack_rgba_sint */" % format.short_name() + print " &util_format_%s_pack_signed, /* pack_rgba_sint */" % format.short_name() + print " &util_format_%s_fetch_unsigned, /* fetch_rgba_uint */" % format.short_name() + print " NULL /* fetch_rgba_sint */" elif format.colorspace != ZS and format.channels[0].pure == True and format.channels[0].type == SIGNED: print " &util_format_%s_unpack_unsigned, /* unpack_rgba_uint */" % format.short_name() print " &util_format_%s_pack_unsigned, /* pack_rgba_uint */" % format.short_name() print " &util_format_%s_unpack_signed, /* unpack_rgba_sint */" % format.short_name() - print " &util_format_%s_pack_signed /* pack_rgba_sint */" % format.short_name() + print " &util_format_%s_pack_signed, /* pack_rgba_sint */" % format.short_name() + print " NULL, /* fetch_rgba_uint */" + print " &util_format_%s_fetch_signed /* fetch_rgba_sint */" % format.short_name() else: print " NULL, /* unpack_rgba_uint */" print " NULL, /* pack_rgba_uint */" print " NULL, /* unpack_rgba_sint */" - print " NULL /* pack_rgba_sint */" + print " NULL, /* pack_rgba_sint */" + print " NULL, /* fetch_rgba_uint */" + print " NULL /* fetch_rgba_sint */" print "};" print |