gallium: Add block depth to the format utils.
I decided not to update nblocks() with a depth arg as the callers wouldn't be doing ASTC 3D. Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
@@ -102,6 +102,9 @@ struct util_format_block
|
||||
/** Block height in pixels */
|
||||
unsigned height;
|
||||
|
||||
/** Block depth in pixels */
|
||||
unsigned depth;
|
||||
|
||||
/** Block size in bits */
|
||||
unsigned bits;
|
||||
};
|
||||
@@ -842,6 +845,19 @@ util_format_get_blockheight(enum pipe_format format)
|
||||
return desc->block.height;
|
||||
}
|
||||
|
||||
static inline uint
|
||||
util_format_get_blockdepth(enum pipe_format format)
|
||||
{
|
||||
const struct util_format_description *desc = util_format_description(format);
|
||||
|
||||
assert(desc);
|
||||
if (!desc) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
return desc->block.depth;
|
||||
}
|
||||
|
||||
static inline unsigned
|
||||
util_format_get_nblocksx(enum pipe_format format,
|
||||
unsigned x)
|
||||
@@ -858,11 +874,20 @@ util_format_get_nblocksy(enum pipe_format format,
|
||||
return (y + blockheight - 1) / blockheight;
|
||||
}
|
||||
|
||||
static inline unsigned
|
||||
util_format_get_nblocksz(enum pipe_format format,
|
||||
unsigned z)
|
||||
{
|
||||
unsigned blockdepth = util_format_get_blockdepth(format);
|
||||
return (z + blockdepth - 1) / blockdepth;
|
||||
}
|
||||
|
||||
static inline unsigned
|
||||
util_format_get_nblocks(enum pipe_format format,
|
||||
unsigned width,
|
||||
unsigned height)
|
||||
{
|
||||
assert(util_format_get_blockdepth(format) == 1);
|
||||
return util_format_get_nblocksx(format, width) * util_format_get_nblocksy(format, height);
|
||||
}
|
||||
|
||||
|
||||
@@ -130,7 +130,7 @@ def write_format_table(formats):
|
||||
print(" %s," % (format.name,))
|
||||
print(" \"%s\"," % (format.name,))
|
||||
print(" \"%s\"," % (format.short_name(),))
|
||||
print(" {%u, %u, %u},\t/* block */" % (format.block_width, format.block_height, format.block_size()))
|
||||
print(" {%u, %u, %u, %u},\t/* block */" % (format.block_width, format.block_height, format.block_depth, format.block_size()))
|
||||
print(" %s," % (layout_map(format.layout),))
|
||||
print(" %u,\t/* nr_channels */" % (format.nr_channels(),))
|
||||
print(" %s,\t/* is_array */" % (bool_map(format.is_array()),))
|
||||
|
||||
Reference in New Issue
Block a user