[Mesa-dev] [PATCH] ac/surface: Don't assert that bpp is power of two.
Bas Nieuwenhuizen
bas at basnieuwenhuizen.nl
Mon May 14 21:10:11 UTC 2018
There are non-shared linear images too, and those don't
need the extra alignment at all.
So just keep track of whether the image can be exported.
Fixes: e361970ed73 "radv: Add support for IMG_DATA_FORMAT_32_32_32."
---
src/amd/common/ac_surface.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/src/amd/common/ac_surface.c b/src/amd/common/ac_surface.c
index 9e742dc8a45..f6c4cd7db0f 100644
--- a/src/amd/common/ac_surface.c
+++ b/src/amd/common/ac_surface.c
@@ -281,7 +281,7 @@ static int surf_config_sanity(const struct ac_surf_config *config,
static int gfx6_compute_level(ADDR_HANDLE addrlib,
const struct ac_surf_config *config,
struct radeon_surf *surf, bool is_stencil,
- unsigned level, bool compressed,
+ unsigned level, bool compressed, bool shareable,
ADDR_COMPUTE_SURFACE_INFO_INPUT *AddrSurfInfoIn,
ADDR_COMPUTE_SURFACE_INFO_OUTPUT *AddrSurfInfoOut,
ADDR_COMPUTE_DCCINFO_INPUT *AddrDccIn,
@@ -301,7 +301,7 @@ static int gfx6_compute_level(ADDR_HANDLE addrlib,
*/
if (config->info.levels == 1 &&
AddrSurfInfoIn->tileMode == ADDR_TM_LINEAR_ALIGNED &&
- AddrSurfInfoIn->bpp) {
+ AddrSurfInfoIn->bpp && shareable) {
unsigned alignment = 256 / (AddrSurfInfoIn->bpp / 8);
assert(util_is_power_of_two_or_zero(AddrSurfInfoIn->bpp));
@@ -560,6 +560,7 @@ static int gfx6_compute_surface(ADDR_HANDLE addrlib,
{
unsigned level;
bool compressed;
+ bool shareable;
ADDR_COMPUTE_SURFACE_INFO_INPUT AddrSurfInfoIn = {0};
ADDR_COMPUTE_SURFACE_INFO_OUTPUT AddrSurfInfoOut = {0};
ADDR_COMPUTE_DCCINFO_INPUT AddrDccIn = {0};
@@ -579,6 +580,7 @@ static int gfx6_compute_surface(ADDR_HANDLE addrlib,
AddrSurfInfoOut.pTileInfo = &AddrTileInfoOut;
compressed = surf->blk_w == 4 && surf->blk_h == 4;
+ shareable = (surf->flags & RADEON_SURF_SHAREABLE);
/* MSAA requires 2D tiling. */
if (config->info.samples > 1)
@@ -773,7 +775,7 @@ static int gfx6_compute_surface(ADDR_HANDLE addrlib,
if (!only_stencil) {
for (level = 0; level < config->info.levels; level++) {
r = gfx6_compute_level(addrlib, config, surf, false, level, compressed,
- &AddrSurfInfoIn, &AddrSurfInfoOut,
+ shareable, &AddrSurfInfoIn, &AddrSurfInfoOut,
&AddrDccIn, &AddrDccOut, &AddrHtileIn, &AddrHtileOut);
if (r)
return r;
@@ -820,7 +822,7 @@ static int gfx6_compute_surface(ADDR_HANDLE addrlib,
for (level = 0; level < config->info.levels; level++) {
r = gfx6_compute_level(addrlib, config, surf, true, level, compressed,
- &AddrSurfInfoIn, &AddrSurfInfoOut,
+ shareable, &AddrSurfInfoIn, &AddrSurfInfoOut,
&AddrDccIn, &AddrDccOut,
NULL, NULL);
if (r)
--
2.17.0
More information about the mesa-dev
mailing list