mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-06 04:30:10 +01:00
radv: Use given stride for images imported from Android.
Handled similarly as radeonsi. I checked the offsets are actually used. Acked-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
This commit is contained in:
parent
11602ccd5d
commit
8139efbbbd
3 changed files with 35 additions and 0 deletions
|
|
@ -191,6 +191,8 @@ radv_image_from_gralloc(VkDevice device_h,
|
|||
|
||||
image = radv_image_from_handle(image_h);
|
||||
|
||||
radv_image_override_offset_stride(device, image, 0, gralloc_info->stride);
|
||||
|
||||
radv_BindImageMemory(device_h, image_h, memory_h, 0);
|
||||
|
||||
image->owned_memory = memory_h;
|
||||
|
|
|
|||
|
|
@ -760,6 +760,34 @@ radv_init_metadata(struct radv_device *device,
|
|||
radv_query_opaque_metadata(device, image, metadata);
|
||||
}
|
||||
|
||||
void
|
||||
radv_image_override_offset_stride(struct radv_device *device,
|
||||
struct radv_image *image,
|
||||
uint64_t offset, uint32_t stride)
|
||||
{
|
||||
struct radeon_surf *surface = &image->planes[0].surface;
|
||||
unsigned bpe = vk_format_get_blocksizebits(image->vk_format) / 8;
|
||||
|
||||
if (device->physical_device->rad_info.chip_class >= GFX9) {
|
||||
if (stride) {
|
||||
surface->u.gfx9.surf_pitch = stride;
|
||||
surface->u.gfx9.surf_slice_size =
|
||||
(uint64_t)stride * surface->u.gfx9.surf_height * bpe;
|
||||
}
|
||||
surface->u.gfx9.surf_offset = offset;
|
||||
} else {
|
||||
surface->u.legacy.level[0].nblk_x = stride;
|
||||
surface->u.legacy.level[0].slice_size_dw =
|
||||
((uint64_t)stride * surface->u.legacy.level[0].nblk_y * bpe) / 4;
|
||||
|
||||
if (offset) {
|
||||
for (unsigned i = 0; i < ARRAY_SIZE(surface->u.legacy.level); ++i)
|
||||
surface->u.legacy.level[i].offset += offset;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/* The number of samples can be specified independently of the texture. */
|
||||
static void
|
||||
radv_image_get_fmask_info(struct radv_device *device,
|
||||
|
|
|
|||
|
|
@ -1672,6 +1672,11 @@ radv_init_metadata(struct radv_device *device,
|
|||
struct radv_image *image,
|
||||
struct radeon_bo_metadata *metadata);
|
||||
|
||||
void
|
||||
radv_image_override_offset_stride(struct radv_device *device,
|
||||
struct radv_image *image,
|
||||
uint64_t offset, uint32_t stride);
|
||||
|
||||
union radv_descriptor {
|
||||
struct {
|
||||
uint32_t plane0_descriptor[8];
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue