ac/surface: add astc block size to bpe_to_format() function
v2: remove old comment (Chia-I Wu) v3: add comment on matching BC3 and ASTC4x4 (Chia-I Wu) Acked-by: : Chia-I Wu <olvaffe@gmail.com> Acked-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24672>
This commit is contained in:
committed by
Marge Bot
parent
ff36024576
commit
718b85a1f2
+42
-12
@@ -636,18 +636,48 @@ static int surf_config_sanity(const struct ac_surf_config *config, unsigned flag
|
||||
|
||||
static unsigned bpe_to_format(struct radeon_surf *surf)
|
||||
{
|
||||
/* The format must be set correctly for the allocation of compressed
|
||||
* textures to work. In other cases, setting the bpp is sufficient.
|
||||
*/
|
||||
if (surf->blk_w == 4 && surf->blk_h == 4) {
|
||||
switch (surf->bpe) {
|
||||
case 8:
|
||||
return ADDR_FMT_BC1;
|
||||
case 16:
|
||||
return ADDR_FMT_BC3;
|
||||
default:
|
||||
unreachable("invalid compressed bpe");
|
||||
}
|
||||
if (surf->blk_w != 1 || surf->blk_h != 1) {
|
||||
if (surf->blk_w == 4 && surf->blk_h == 4) {
|
||||
switch (surf->bpe) {
|
||||
case 8:
|
||||
return ADDR_FMT_BC1;
|
||||
case 16:
|
||||
/* since BC3 and ASTC4x4 has same blk dimension and bpe reporting BC3 also for ASTC4x4.
|
||||
* matching is fine since addrlib needs only blk_w, blk_h and bpe to compute surface
|
||||
* properties.
|
||||
* TODO: If compress_type can be passed to this function, then this ugly BC3 and ASTC4x4
|
||||
* matching can be avoided.
|
||||
*/
|
||||
return ADDR_FMT_BC3;
|
||||
default:
|
||||
unreachable("invalid compressed bpe");
|
||||
}
|
||||
} else if (surf->blk_w == 5 && surf->blk_h == 4)
|
||||
return ADDR_FMT_ASTC_5x4;
|
||||
else if (surf->blk_w == 5 && surf->blk_h == 5)
|
||||
return ADDR_FMT_ASTC_5x5;
|
||||
else if (surf->blk_w == 6 && surf->blk_h == 5)
|
||||
return ADDR_FMT_ASTC_6x5;
|
||||
else if (surf->blk_w == 6 && surf->blk_h == 6)
|
||||
return ADDR_FMT_ASTC_6x6;
|
||||
else if (surf->blk_w == 8 && surf->blk_h == 5)
|
||||
return ADDR_FMT_ASTC_8x5;
|
||||
else if (surf->blk_w == 8 && surf->blk_h == 6)
|
||||
return ADDR_FMT_ASTC_8x6;
|
||||
else if (surf->blk_w == 8 && surf->blk_h == 8)
|
||||
return ADDR_FMT_ASTC_8x8;
|
||||
else if (surf->blk_w == 10 && surf->blk_h == 5)
|
||||
return ADDR_FMT_ASTC_10x5;
|
||||
else if (surf->blk_w == 10 && surf->blk_h == 6)
|
||||
return ADDR_FMT_ASTC_10x6;
|
||||
else if (surf->blk_w == 10 && surf->blk_h == 8)
|
||||
return ADDR_FMT_ASTC_10x8;
|
||||
else if (surf->blk_w == 10 && surf->blk_h == 10)
|
||||
return ADDR_FMT_ASTC_10x10;
|
||||
else if (surf->blk_w == 12 && surf->blk_h == 10)
|
||||
return ADDR_FMT_ASTC_12x10;
|
||||
else if (surf->blk_w == 12 && surf->blk_h == 12)
|
||||
return ADDR_FMT_ASTC_12x12;
|
||||
} else {
|
||||
switch (surf->bpe) {
|
||||
case 1:
|
||||
|
||||
Reference in New Issue
Block a user