92 lines
3.4 KiB
Diff
92 lines
3.4 KiB
Diff
|
From 7effaf722086c91a878b4f1c16be3f7fa46f038a Mon Sep 17 00:00:00 2001
|
||
|
From: Martin Peres <martin.peres@linux.intel.com>
|
||
|
Date: Thu, 6 Oct 2016 17:07:22 +0300
|
||
|
Subject: [PATCH 1/2] loader/dri3: add get_dri_screen() to the vtable
|
||
|
|
||
|
This allows querying the current active screen from the
|
||
|
loader's common code.
|
||
|
|
||
|
Cc: mesa-stable@lists.freedesktop.org
|
||
|
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
|
||
|
Signed-off-by: Martin Peres <martin.peres@linux.intel.com>
|
||
|
---
|
||
|
src/egl/drivers/dri2/platform_x11_dri3.c | 12 ++++++++++++
|
||
|
src/glx/dri3_glx.c | 11 +++++++++++
|
||
|
src/loader/loader_dri3_helper.h | 1 +
|
||
|
3 files changed, 24 insertions(+)
|
||
|
|
||
|
diff --git a/src/egl/drivers/dri2/platform_x11_dri3.c b/src/egl/drivers/dri2/platform_x11_dri3.c
|
||
|
index 9363a8a..69bfcd8 100644
|
||
|
--- a/src/egl/drivers/dri2/platform_x11_dri3.c
|
||
|
+++ b/src/egl/drivers/dri2/platform_x11_dri3.c
|
||
|
@@ -103,6 +103,17 @@ egl_dri3_get_dri_context(struct loader_dri3_drawable *draw)
|
||
|
return dri2_ctx->dri_context;
|
||
|
}
|
||
|
|
||
|
+static __DRIscreen *
|
||
|
+egl_dri3_get_dri_screen(struct loader_dri3_drawable *draw)
|
||
|
+{
|
||
|
+ _EGLContext *ctx = _eglGetCurrentContext();
|
||
|
+ struct dri2_egl_context *dri2_ctx;
|
||
|
+ if (!ctx)
|
||
|
+ return NULL;
|
||
|
+ dri2_ctx = dri2_egl_context(ctx);
|
||
|
+ return dri2_egl_display(dri2_ctx->base.Resource.Display)->dri_screen;
|
||
|
+}
|
||
|
+
|
||
|
static void
|
||
|
egl_dri3_flush_drawable(struct loader_dri3_drawable *draw, unsigned flags)
|
||
|
{
|
||
|
@@ -119,6 +130,7 @@ static struct loader_dri3_vtable egl_dri3_vtable = {
|
||
|
.set_drawable_size = egl_dri3_set_drawable_size,
|
||
|
.in_current_context = egl_dri3_in_current_context,
|
||
|
.get_dri_context = egl_dri3_get_dri_context,
|
||
|
+ .get_dri_screen = egl_dri3_get_dri_screen,
|
||
|
.flush_drawable = egl_dri3_flush_drawable,
|
||
|
.show_fps = NULL,
|
||
|
};
|
||
|
diff --git a/src/glx/dri3_glx.c b/src/glx/dri3_glx.c
|
||
|
index 90d7bba..51b6b1c 100644
|
||
|
--- a/src/glx/dri3_glx.c
|
||
|
+++ b/src/glx/dri3_glx.c
|
||
|
@@ -132,6 +132,16 @@ glx_dri3_get_dri_context(struct loader_dri3_drawable *draw)
|
||
|
return (gc != &dummyContext) ? dri3Ctx->driContext : NULL;
|
||
|
}
|
||
|
|
||
|
+static __DRIscreen *
|
||
|
+glx_dri3_get_dri_screen(struct loader_dri3_drawable *draw)
|
||
|
+{
|
||
|
+ struct glx_context *gc = __glXGetCurrentContext();
|
||
|
+ struct dri3_context *pcp = (struct dri3_context *) gc;
|
||
|
+ struct dri3_screen *psc = (struct dri3_screen *) pcp->base.psc;
|
||
|
+
|
||
|
+ return (gc != &dummyContext && psc) ? psc->driScreen : NULL;
|
||
|
+}
|
||
|
+
|
||
|
static void
|
||
|
glx_dri3_flush_drawable(struct loader_dri3_drawable *draw, unsigned flags)
|
||
|
{
|
||
|
@@ -169,6 +179,7 @@ static struct loader_dri3_vtable glx_dri3_vtable = {
|
||
|
.set_drawable_size = glx_dri3_set_drawable_size,
|
||
|
.in_current_context = glx_dri3_in_current_context,
|
||
|
.get_dri_context = glx_dri3_get_dri_context,
|
||
|
+ .get_dri_screen = glx_dri3_get_dri_screen,
|
||
|
.flush_drawable = glx_dri3_flush_drawable,
|
||
|
.show_fps = glx_dri3_show_fps,
|
||
|
};
|
||
|
diff --git a/src/loader/loader_dri3_helper.h b/src/loader/loader_dri3_helper.h
|
||
|
index 5b8fd1d..658e190 100644
|
||
|
--- a/src/loader/loader_dri3_helper.h
|
||
|
+++ b/src/loader/loader_dri3_helper.h
|
||
|
@@ -103,6 +103,7 @@ struct loader_dri3_vtable {
|
||
|
void (*set_drawable_size)(struct loader_dri3_drawable *, int, int);
|
||
|
bool (*in_current_context)(struct loader_dri3_drawable *);
|
||
|
__DRIcontext *(*get_dri_context)(struct loader_dri3_drawable *);
|
||
|
+ __DRIscreen *(*get_dri_screen)(struct loader_dri3_drawable *);
|
||
|
void (*flush_drawable)(struct loader_dri3_drawable *, unsigned);
|
||
|
void (*show_fps)(struct loader_dri3_drawable *, uint64_t);
|
||
|
};
|
||
|
--
|
||
|
2.9.3
|
||
|
|