Backport upstream fix for EGL issues with qemu
This commit is contained in:
parent
f7435f6777
commit
e4ffbf1534
89
fix-egl.patch
Normal file
89
fix-egl.patch
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
diff --git a/src/gallium/drivers/iris/iris_resource.c b/src/gallium/drivers/iris/iris_resource.c
|
||||||
|
index 8747ef4aa8a..3b34e32cd21 100644
|
||||||
|
--- a/src/gallium/drivers/iris/iris_resource.c
|
||||||
|
+++ b/src/gallium/drivers/iris/iris_resource.c
|
||||||
|
@@ -1125,6 +1125,20 @@ iris_flush_resource(struct pipe_context *ctx, struct pipe_resource *resource)
|
||||||
|
0, INTEL_REMAINING_LAYERS,
|
||||||
|
mod ? mod->aux_usage : ISL_AUX_USAGE_NONE,
|
||||||
|
mod ? mod->supports_clear_color : false);
|
||||||
|
+
|
||||||
|
+ if (!res->mod_info && res->aux.usage != ISL_AUX_USAGE_NONE) {
|
||||||
|
+ /* flush_resource may be used to prepare an image for sharing external
|
||||||
|
+ * to the driver (e.g. via eglCreateImage). To account for this, make
|
||||||
|
+ * sure to get rid of any compression that a consumer wouldn't know how
|
||||||
|
+ * to handle.
|
||||||
|
+ */
|
||||||
|
+ for (int i = 0; i < IRIS_BATCH_COUNT; i++) {
|
||||||
|
+ if (iris_batch_references(&ice->batches[i], res->bo))
|
||||||
|
+ iris_batch_flush(&ice->batches[i]);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ iris_resource_disable_aux(res);
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
diff --git a/src/gallium/frontends/dri/dri_helpers.c b/src/gallium/frontends/dri/dri_helpers.c
|
||||||
|
index 01a1fb3d96c..5e87df35a55 100644
|
||||||
|
--- a/src/gallium/frontends/dri/dri_helpers.c
|
||||||
|
+++ b/src/gallium/frontends/dri/dri_helpers.c
|
||||||
|
@@ -258,7 +258,9 @@ dri2_create_image_from_renderbuffer2(__DRIcontext *context,
|
||||||
|
int renderbuffer, void *loaderPrivate,
|
||||||
|
unsigned *error)
|
||||||
|
{
|
||||||
|
- struct gl_context *ctx = ((struct st_context *)dri_context(context)->st)->ctx;
|
||||||
|
+ struct st_context *st_ctx = (struct st_context *)dri_context(context)->st;
|
||||||
|
+ struct gl_context *ctx = st_ctx->ctx;
|
||||||
|
+ struct pipe_context *p_ctx = st_ctx->pipe;
|
||||||
|
struct gl_renderbuffer *rb;
|
||||||
|
struct pipe_resource *tex;
|
||||||
|
__DRIimage *img;
|
||||||
|
@@ -299,6 +301,13 @@ dri2_create_image_from_renderbuffer2(__DRIcontext *context,
|
||||||
|
|
||||||
|
pipe_resource_reference(&img->texture, tex);
|
||||||
|
|
||||||
|
+ /* If the resource supports EGL_MESA_image_dma_buf_export, make sure that
|
||||||
|
+ * it's in a shareable state. Do this now while we still have the access to
|
||||||
|
+ * the context.
|
||||||
|
+ */
|
||||||
|
+ if (dri2_get_mapping_by_format(img->dri_format))
|
||||||
|
+ p_ctx->flush_resource(p_ctx, tex);
|
||||||
|
+
|
||||||
|
*error = __DRI_IMAGE_ERROR_SUCCESS;
|
||||||
|
return img;
|
||||||
|
}
|
||||||
|
@@ -326,7 +335,9 @@ dri2_create_from_texture(__DRIcontext *context, int target, unsigned texture,
|
||||||
|
void *loaderPrivate)
|
||||||
|
{
|
||||||
|
__DRIimage *img;
|
||||||
|
- struct gl_context *ctx = ((struct st_context *)dri_context(context)->st)->ctx;
|
||||||
|
+ struct st_context *st_ctx = (struct st_context *)dri_context(context)->st;
|
||||||
|
+ struct gl_context *ctx = st_ctx->ctx;
|
||||||
|
+ struct pipe_context *p_ctx = st_ctx->pipe;
|
||||||
|
struct gl_texture_object *obj;
|
||||||
|
struct pipe_resource *tex;
|
||||||
|
GLuint face = 0;
|
||||||
|
@@ -376,6 +387,13 @@ dri2_create_from_texture(__DRIcontext *context, int target, unsigned texture,
|
||||||
|
|
||||||
|
pipe_resource_reference(&img->texture, tex);
|
||||||
|
|
||||||
|
+ /* If the resource supports EGL_MESA_image_dma_buf_export, make sure that
|
||||||
|
+ * it's in a shareable state. Do this now while we still have the access to
|
||||||
|
+ * the context.
|
||||||
|
+ */
|
||||||
|
+ if (dri2_get_mapping_by_format(img->dri_format))
|
||||||
|
+ p_ctx->flush_resource(p_ctx, tex);
|
||||||
|
+
|
||||||
|
*error = __DRI_IMAGE_ERROR_SUCCESS;
|
||||||
|
return img;
|
||||||
|
}
|
||||||
|
@@ -547,6 +565,9 @@ dri2_get_mapping_by_fourcc(int fourcc)
|
||||||
|
const struct dri2_format_mapping *
|
||||||
|
dri2_get_mapping_by_format(int format)
|
||||||
|
{
|
||||||
|
+ if (format == __DRI_IMAGE_FORMAT_NONE)
|
||||||
|
+ return NULL;
|
||||||
|
+
|
||||||
|
for (unsigned i = 0; i < ARRAY_SIZE(dri2_format_table); i++) {
|
||||||
|
if (dri2_format_table[i].dri_format == format)
|
||||||
|
return &dri2_format_table[i];
|
@ -54,7 +54,7 @@ Name: mesa
|
|||||||
Summary: Mesa graphics libraries
|
Summary: Mesa graphics libraries
|
||||||
%global ver 20.3.3
|
%global ver 20.3.3
|
||||||
Version: %{lua:ver = string.gsub(rpm.expand("%{ver}"), "-", "~"); print(ver)}
|
Version: %{lua:ver = string.gsub(rpm.expand("%{ver}"), "-", "~"); print(ver)}
|
||||||
Release: 6%{?dist}
|
Release: 7%{?dist}
|
||||||
License: MIT
|
License: MIT
|
||||||
URL: http://www.mesa3d.org
|
URL: http://www.mesa3d.org
|
||||||
|
|
||||||
@ -69,6 +69,9 @@ Patch0: 0001-device-select-layer-update-for-vulkan-1.2.patch
|
|||||||
# fix lvp extension missing
|
# fix lvp extension missing
|
||||||
Patch1: 0001-lavapipe-fix-missing-piece-of-VK_KHR_get_physical_de.patch
|
Patch1: 0001-lavapipe-fix-missing-piece-of-VK_KHR_get_physical_de.patch
|
||||||
|
|
||||||
|
# fix qemu/egl issue
|
||||||
|
Patch2: fix-egl.patch
|
||||||
|
|
||||||
BuildRequires: meson >= 0.45
|
BuildRequires: meson >= 0.45
|
||||||
BuildRequires: gcc
|
BuildRequires: gcc
|
||||||
BuildRequires: gcc-c++
|
BuildRequires: gcc-c++
|
||||||
@ -602,6 +605,9 @@ popd
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri Jan 29 2021 Dave Airlie <airlied@redhat.com> - 20.3.3-7
|
||||||
|
- Backport upstream fix for EGL issues with qemu
|
||||||
|
|
||||||
* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 20.3.3-6
|
* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 20.3.3-6
|
||||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user