[Mesa-dev] [PATCH] r600: consolidate PIPE_BIND_SHARED/SCANOUT handling

Michel Dänzer michel at daenzer.net
Thu Mar 15 18:04:10 UTC 2018


From: Marek Olšák <marek.olsak at amd.com>

(Ported from radeonsi commit f70f6baaa3bb0f8b280ac2eaea69bbffaf7de840)

Allows cached BOs to be reused in more cases.

Bugzilla: https://bugs.freedesktop.org/105171
Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>
---
 src/gallium/drivers/r600/r600_buffer_common.c | 16 +++++-----------
 src/gallium/drivers/r600/r600_texture.c       |  4 ----
 2 files changed, 5 insertions(+), 15 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_buffer_common.c b/src/gallium/drivers/r600/r600_buffer_common.c
index 501b96fa0ba..88b0081abdb 100644
--- a/src/gallium/drivers/r600/r600_buffer_common.c
+++ b/src/gallium/drivers/r600/r600_buffer_common.c
@@ -167,21 +167,15 @@ void r600_init_resource_fields(struct r600_common_screen *rscreen,
 			 RADEON_FLAG_GTT_WC;
 	}
 
-	/* Only displayable single-sample textures can be shared between
-	 * processes. */
-	if (res->b.b.target == PIPE_BUFFER ||
-	    res->b.b.nr_samples >= 2 ||
-	    (rtex->surface.micro_tile_mode != RADEON_MICRO_MODE_DISPLAY &&
-	     /* Raven doesn't use display micro mode for 32bpp, so check this: */
-	     !(res->b.b.bind & PIPE_BIND_SCANOUT)))
-		res->flags |= RADEON_FLAG_NO_INTERPROCESS_SHARING;
+	/* Displayable and shareable surfaces are not suballocated. */
+	if (res->b.b.bind & (PIPE_BIND_SHARED | PIPE_BIND_SCANOUT))
+		res->flags |= RADEON_FLAG_NO_SUBALLOC; /* shareable */
+	else
+ 		res->flags |= RADEON_FLAG_NO_INTERPROCESS_SHARING;
 
 	if (rscreen->debug_flags & DBG_NO_WC)
 		res->flags &= ~RADEON_FLAG_GTT_WC;
 
-	if (res->b.b.bind & PIPE_BIND_SHARED)
-		res->flags |= RADEON_FLAG_NO_SUBALLOC;
-
 	/* Set expected VRAM and GART usage for the buffer. */
 	res->vram_usage = 0;
 	res->gart_usage = 0;
diff --git a/src/gallium/drivers/r600/r600_texture.c b/src/gallium/drivers/r600/r600_texture.c
index fbcc878a247..806bc278b08 100644
--- a/src/gallium/drivers/r600/r600_texture.c
+++ b/src/gallium/drivers/r600/r600_texture.c
@@ -953,10 +953,6 @@ r600_texture_create_object(struct pipe_screen *screen,
 		r600_init_resource_fields(rscreen, resource, rtex->size,
 					  rtex->surface.surf_alignment);
 
-		/* Displayable surfaces are not suballocated. */
-		if (resource->b.b.bind & PIPE_BIND_SCANOUT)
-			resource->flags |= RADEON_FLAG_NO_SUBALLOC;
-
 		if (!r600_alloc_resource(rscreen, resource)) {
 			FREE(rtex);
 			return NULL;
-- 
2.16.2



More information about the mesa-dev mailing list