From afd9274d4801d93dfaad13591d65c135d1c9e466 Mon Sep 17 00:00:00 2001 From: Bas Nieuwenhuizen Date: Wed, 12 Feb 2020 16:54:21 +0100 Subject: st/dri: Set next in template instead of after creation. (v2) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This should prevent horrors like Iris has with the delayed calls to iris_resource_finish_aux_import just because info is not available at allocation time. AFAICT all drivers just copy the template except radeonsi/r600 which reset the next pointer. AFAICT there is also no other place we get a state tracker setting next ptrs on a resource. v2: Updated Gallium docs. Reviewed-by: Marek Olšák Part-of: --- src/gallium/docs/source/screen.rst | 4 ++++ src/gallium/drivers/r600/r600_texture.c | 1 - src/gallium/drivers/radeonsi/si_texture.c | 1 - src/gallium/state_trackers/dri/dri2.c | 2 +- 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/gallium/docs/source/screen.rst b/src/gallium/docs/source/screen.rst index 3a9ccb4246b..a40461fed70 100644 --- a/src/gallium/docs/source/screen.rst +++ b/src/gallium/docs/source/screen.rst @@ -943,7 +943,11 @@ replaced by ``nr_storage_samples``. **flags** bitmask of PIPE_RESOURCE_FLAG flags. +**next**: Pointer to the next plane for resources that consist of multiple +memory planes. +As a corollary, this mean resources for an image with multiple planes have +to be created starting from the highest plane. resource_changed ^^^^^^^^^^^^^^^^ diff --git a/src/gallium/drivers/r600/r600_texture.c b/src/gallium/drivers/r600/r600_texture.c index 5c8b9dd4af9..42cc09e8b76 100644 --- a/src/gallium/drivers/r600/r600_texture.c +++ b/src/gallium/drivers/r600/r600_texture.c @@ -918,7 +918,6 @@ r600_texture_create_object(struct pipe_screen *screen, resource = &rtex->resource; resource->b.b = *base; - resource->b.b.next = NULL; resource->b.vtbl = &r600_texture_vtbl; pipe_reference_init(&resource->b.b.reference, 1); resource->b.b.screen = screen; diff --git a/src/gallium/drivers/radeonsi/si_texture.c b/src/gallium/drivers/radeonsi/si_texture.c index f67794c610e..db470457551 100644 --- a/src/gallium/drivers/radeonsi/si_texture.c +++ b/src/gallium/drivers/radeonsi/si_texture.c @@ -1210,7 +1210,6 @@ static struct si_texture *si_texture_create_object(struct pipe_screen *screen, resource = &tex->buffer; resource->b.b = *base; - resource->b.b.next = NULL; resource->b.vtbl = &si_texture_vtbl; pipe_reference_init(&resource->b.b.reference, 1); resource->b.b.screen = screen; diff --git a/src/gallium/state_trackers/dri/dri2.c b/src/gallium/state_trackers/dri/dri2.c index 630817b6cbe..ec78d0985ed 100644 --- a/src/gallium/state_trackers/dri/dri2.c +++ b/src/gallium/state_trackers/dri/dri2.c @@ -776,6 +776,7 @@ dri2_create_image_from_winsys(__DRIscreen *_screen, for (i = (use_lowered ? map->nplanes : num_handles) - 1; i >= 0; i--) { struct pipe_resource *tex; + templ.next = img->texture; templ.width0 = width >> map->planes[i].width_shift; templ.height0 = height >> map->planes[i].height_shift; if (use_lowered) @@ -793,7 +794,6 @@ dri2_create_image_from_winsys(__DRIscreen *_screen, return NULL; } - tex->next = img->texture; img->texture = tex; } -- cgit v1.2.3