diff options
author | Marek Olšák <[email protected]> | 2018-01-10 13:37:08 +0100 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2018-01-24 21:08:45 +0100 |
commit | 022c5b22fee5d92da67f48601ea80b1c810a829d (patch) | |
tree | 29da5d02751cb41855d66498db767af78c23d544 | |
parent | 0b8d38bd48b219bd979b2ee0ef1ce2b7184f7095 (diff) |
radeonsi: don't ignore pitch for imported textures
Cc: 17.2 17.3 <[email protected]>
Tested-by: Dieter Nützel <[email protected]>
Reviewed-by: Nicolai Hähnle <[email protected]>
-rw-r--r-- | src/gallium/drivers/radeon/r600_texture.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/gallium/drivers/radeon/r600_texture.c b/src/gallium/drivers/radeon/r600_texture.c index 34b3ab0cdeb..36eff40949f 100644 --- a/src/gallium/drivers/radeon/r600_texture.c +++ b/src/gallium/drivers/radeon/r600_texture.c @@ -298,11 +298,21 @@ static int r600_init_surface(struct si_screen *sscreen, return r; } + unsigned pitch = pitch_in_bytes_override / bpe; + if (sscreen->info.chip_class >= GFX9) { - assert(!pitch_in_bytes_override || - pitch_in_bytes_override == surface->u.gfx9.surf_pitch * bpe); + if (pitch) { + surface->u.gfx9.surf_pitch = pitch; + surface->u.gfx9.surf_slice_size = + (uint64_t)pitch * surface->u.gfx9.surf_height * bpe; + } surface->u.gfx9.surf_offset = offset; } else { + if (pitch) { + surface->u.legacy.level[0].nblk_x = pitch; + surface->u.legacy.level[0].slice_size_dw = + ((uint64_t)pitch * surface->u.legacy.level[0].nblk_y * bpe) / 4; + } if (offset) { for (i = 0; i < ARRAY_SIZE(surface->u.legacy.level); ++i) surface->u.legacy.level[i].offset += offset; |