From df49f29a507119c0efee5731c346400c2b3462c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Tue, 26 Nov 2024 02:18:57 -0500 Subject: [PATCH] Revert "gbm: mark surface buffers as explicit flushed" This reverts commit c49a71c03c9166b0814db92420eadac74cbc4b11. It broke radeonsi. GBM can't set __DRI_IMAGE_USE_BACKBUFFER if gbm itself doesn't use it as a back buffer by rendering to it and calling SwapBuffers. If another library uses it as a back buffer, that library should set __DRI_IMAGE_USE_BACKBUFFER, not GBM. A different flag could be added to indicate the behavior that the original commit expected. Fixes: c49a71c03c9166 - gbm: mark surface buffers as explicit flushed Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/11996 Part-of: (cherry picked from commit 1a7c54b84090b4dac1a7ff0387c09e7fb319496f) --- .pick_status.json | 2 +- src/gbm/backends/dri/gbm_dri.c | 10 ++-------- src/gbm/main/gbm.h | 6 +----- 3 files changed, 4 insertions(+), 14 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 5b8e84a3354..5f08b9ea105 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -2174,7 +2174,7 @@ "description": "Revert \"gbm: mark surface buffers as explicit flushed\"", "nominated": true, "nomination_type": 2, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "c49a71c03c9166b0814db92420eadac74cbc4b11", "notes": null diff --git a/src/gbm/backends/dri/gbm_dri.c b/src/gbm/backends/dri/gbm_dri.c index 3922a313622..33fc5402e90 100644 --- a/src/gbm/backends/dri/gbm_dri.c +++ b/src/gbm/backends/dri/gbm_dri.c @@ -899,14 +899,8 @@ gbm_dri_bo_create(struct gbm_device *gbm, dri_use |= __DRI_IMAGE_USE_LINEAR; if (usage & GBM_BO_USE_PROTECTED) dri_use |= __DRI_IMAGE_USE_PROTECTED; - if (usage & GBM_BO_USE_FRONT_RENDERING) { - assert (!(usage & GBM_BO_EXPLICIT_FLUSH)); + if (usage & GBM_BO_USE_FRONT_RENDERING) dri_use |= __DRI_IMAGE_USE_FRONT_RENDERING; - } - if (usage & GBM_BO_EXPLICIT_FLUSH) { - assert (!(usage & GBM_BO_USE_FRONT_RENDERING)); - dri_use |= __DRI_IMAGE_USE_BACKBUFFER; - } /* Gallium drivers requires shared in order to get the handle/stride */ dri_use |= __DRI_IMAGE_USE_SHARE; @@ -1110,7 +1104,7 @@ gbm_dri_surface_create(struct gbm_device *gbm, surf->base.v0.width = width; surf->base.v0.height = height; surf->base.v0.format = core->v0.format_canonicalize(format); - surf->base.v0.flags = flags | GBM_BO_EXPLICIT_FLUSH; + surf->base.v0.flags = flags; if (!modifiers) { assert(!count); return &surf->base; diff --git a/src/gbm/main/gbm.h b/src/gbm/main/gbm.h index be529cd272d..9c680f65b95 100644 --- a/src/gbm/main/gbm.h +++ b/src/gbm/main/gbm.h @@ -330,11 +330,7 @@ enum gbm_bo_flags { */ GBM_BO_FIXED_COMPRESSION_12BPC = (13 << 7), - /** - * This buffer will be used with an API with well defined transition points - * between context internal usage and external visibility. - */ - GBM_BO_EXPLICIT_FLUSH = (1 << 11), + /* next available value is (1 << 11) */ }; #define GBM_BO_FIXED_COMPRESSION_MASK (((1 << 11) - 1) & ~((1 << 7) - 1))