On 27.11.2017 23:05, Alex Deucher wrote:
On Mon, Nov 27, 2017 at 5:01 PM, Adam Jackson <a...@redhat.com> wrote:
On Thu, 2017-11-23 at 18:35 +0100, Marek Olšák wrote:
Hi everybody,
Mario, feel free to push your patches if you haven't yet. (except the
workaround)
For AMD, I applied Mario's patches (except Wayland - that didn't
apply) and added initial Gallium support:
https://cgit.freedesktop.org/~mareko/mesa/log/?h=10bit
What's the status of Glamor?
Probably not working at all:
https://cgit.freedesktop.org/xorg/xserver/tree/glamor/glamor_transfer.c#n26
I think we have a branch internally somewhere with support added to
glamor. I though Nicolai had sent it out a while ago, but maybe I'm
mixing it up with something else.
The patches in question are attached. I thought I had a cleaned up
version somewhere, but it doesn't really matter much either way since it
needs to be cleaned up again for Mario's work anyway (not using
MESA_drm_image, I suppose -- I haven't looked at this in quite some
time). But with these patches it used to work at one point :)
Cheers,
Nicolai
Alex
At best I'd expect things to be largely unaccelerated. At the moment
glamor assumes pictures are either [ax]rgb8888 or a8 because it doesn't
know about ARB_texture_view/ARB_texture_storage/ARB_sampler_objects.
The last, at least, has a work-in-progress branch here:
https://github.com/anholt/xserver/tree/glamor-sampler-objects
- ajax
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev
--
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.
>From 9cf5e237e764bc05b6da190051f0f5b0e29b99c2 Mon Sep 17 00:00:00 2001
From: Hawking Zhang <hawking.zh...@amd.com>
Date: Sat, 16 Jul 2016 00:25:31 +0800
Subject: [PATCH xserver 1/3] [HYBRID] glamor: Add 30bit RGB color format
support
Change-Id: I78cffe8638cc1c85006a8a1cc9d518855189a594
Signed-off-by: Hawking Zhang <hawking.zh...@amd.com>
Reviewed-by: Qiang Yu <qiang...@amd.com>
Reviewed-by: Jim Qu <jim...@amd.com>
---
glamor/glamor_egl.c | 11 ++++++++---
glamor/glamor_fbo.c | 5 ++++-
glamor/glamor_transfer.c | 4 ++++
glamor/glamor_utils.h | 3 +++
4 files changed, 19 insertions(+), 4 deletions(-)
diff --git a/glamor/glamor_egl.c b/glamor/glamor_egl.c
index 4bde637a0..d09ef16e6 100644
--- a/glamor/glamor_egl.c
+++ b/glamor/glamor_egl.c
@@ -42,20 +42,24 @@
#include <gbm.h>
#include <drm_fourcc.h>
#endif
#include "glamor_egl.h"
#include "glamor.h"
#include "glamor_priv.h"
#include "dri3.h"
+#ifndef EGL_DRM_BUFFER_FORMAT_ARGB2101010_MESA
+#define EGL_DRM_BUFFER_FORMAT_ARGB2101010_MESA 0x31D9
+#endif
+
static const char glamor_name[] = "glamor";
static void
glamor_identify(int flags)
{
xf86Msg(X_INFO, "%s: OpenGL accelerated X.org driver based.\n",
glamor_name);
}
struct glamor_egl_screen_private {
@@ -112,30 +116,31 @@ glamor_egl_make_current(struct glamor_context *glamor_ctx)
static EGLImageKHR
_glamor_egl_create_image(struct glamor_egl_screen_private *glamor_egl,
int width, int height, int stride, int name, int depth)
{
EGLImageKHR image;
EGLint attribs[] = {
EGL_WIDTH, 0,
EGL_HEIGHT, 0,
EGL_DRM_BUFFER_STRIDE_MESA, 0,
- EGL_DRM_BUFFER_FORMAT_MESA,
- EGL_DRM_BUFFER_FORMAT_ARGB32_MESA,
+ EGL_DRM_BUFFER_FORMAT_MESA, 0,
EGL_DRM_BUFFER_USE_MESA,
EGL_DRM_BUFFER_USE_SHARE_MESA | EGL_DRM_BUFFER_USE_SCANOUT_MESA,
EGL_NONE
};
attribs[1] = width;
attribs[3] = height;
attribs[5] = stride;
- if (depth != 32 && depth != 24)
+ attribs[7] =
+ (depth == 30) ? EGL_DRM_BUFFER_FORMAT_ARGB2101010_MESA : EGL_DRM_BUFFER_FORMAT_ARGB32_MESA;
+ if (depth != 32 && depth != 24 && depth != 30)
return EGL_NO_IMAGE_KHR;
image = eglCreateImageKHR(glamor_egl->display,
glamor_egl->context,
EGL_DRM_BUFFER_MESA,
(void *) (uintptr_t) name,
attribs);
if (image == EGL_NO_IMAGE_KHR)
return EGL_NO_IMAGE_KHR;
return image;
diff --git a/glamor/glamor_fbo.c b/glamor/glamor_fbo.c
index 988bb585b..421a4ceaa 100644
--- a/glamor/glamor_fbo.c
+++ b/glamor/glamor_fbo.c
@@ -116,30 +116,33 @@ glamor_create_fbo_from_tex(glamor_screen_private *glamor_priv,
}
return fbo;
}
static int
_glamor_create_tex(glamor_screen_private *glamor_priv,
int w, int h, GLenum format)
{
unsigned int tex;
+ GLenum iformat = format;
+ if (format == GL_RGB10_A2)
+ format = GL_RGBA;
glamor_make_current(glamor_priv);
glGenTextures(1, &tex);
glBindTexture(GL_TEXTURE_2D, tex);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
if (format == glamor_priv->one_channel_format && format == GL_RED)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_A, GL_RED);
glamor_priv->suppress_gl_out_of_memory_logging = true;
- glTexImage2D(GL_TEXTURE_2D, 0, format, w, h, 0,
+ glTexImage2D(GL_TEXTURE_2D, 0, iformat, w, h, 0,
format, GL_UNSIGNED_BYTE, NULL);
glamor_priv->suppress_gl_out_of_memory_logging = false;
if (glGetError() == GL_OUT_OF_MEMORY) {
if (!glamor_priv->logged_any_fbo_allocation_failure) {
LogMessageVerb(X_WARNING, 0, "glamor: Failed to allocate %dx%d "
"FBO due to GL_OUT_OF_MEMORY.\n", w, h);
LogMessageVerb(X_WARNING, 0,
"glamor: Expect reduced performance.\n");
glamor_priv->logged_any_fbo_allocation_failure = true;
diff --git a/glamor/glamor_transfer.c b/glamor/glamor_transfer.c
index d788d06f4..ebb5101d1 100644
--- a/glamor/glamor_transfer.c
+++ b/glamor/glamor_transfer.c
@@ -26,20 +26,24 @@
/* XXX a kludge for now */
void
glamor_format_for_pixmap(PixmapPtr pixmap, GLenum *format, GLenum *type)
{
switch (pixmap->drawable.depth) {
case 24:
case 32:
*format = GL_BGRA;
*type = GL_UNSIGNED_INT_8_8_8_8_REV;
break;
+ case 30:
+ *format = GL_BGRA;
+ *type = GL_UNSIGNED_INT_2_10_10_10_REV;
+ break;
case 16:
*format = GL_RGB;
*type = GL_UNSIGNED_SHORT_5_6_5;
break;
case 15:
*format = GL_BGRA;
*type = GL_UNSIGNED_SHORT_1_5_5_5_REV;
break;
case 8:
*format = glamor_get_screen_private(pixmap->drawable.pScreen)->one_channel_format;
diff --git a/glamor/glamor_utils.h b/glamor/glamor_utils.h
index 6b88527e6..0ed9c9125 100644
--- a/glamor/glamor_utils.h
+++ b/glamor/glamor_utils.h
@@ -616,20 +616,23 @@ format_for_depth(int depth)
static inline GLenum
gl_iformat_for_pixmap(PixmapPtr pixmap)
{
glamor_screen_private *glamor_priv =
glamor_get_screen_private((pixmap)->drawable.pScreen);
if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP &&
((pixmap)->drawable.depth == 1 || (pixmap)->drawable.depth == 8)) {
return glamor_priv->one_channel_format;
+ } else if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP &&
+ (pixmap)->drawable.depth == 30) {
+ return GL_RGB10_A2;
} else {
return GL_RGBA;
}
}
static inline CARD32
format_for_pixmap(PixmapPtr pixmap)
{
return format_for_depth((pixmap)->drawable.depth);
}
--
2.11.0
>From 356031ff84f252e528cfbdca39a2ca456c30f644 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nicolai=20H=C3=A4hnle?= <nicolai.haeh...@amd.com>
Date: Tue, 24 Jan 2017 14:28:22 +0100
Subject: [PATCH xserver 2/3] glamor: Update for latest draft of
EGL_MESA_drm_image_formats
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Question: Should EGL_MESA_drm_image_formats be optional? It looks like Mesa
will be able to support EGL_MESA_drm_image_formats whenever
EGL_MESA_drm_image is present.
Signed-off-by: Nicolai Hähnle <nicolai.haeh...@amd.com>
---
glamor/glamor_egl.c | 30 ++++++++++++++++++++++++++----
glamor/glamor_fbo.c | 2 +-
glamor/glamor_utils.h | 19 +++++++++++--------
3 files changed, 38 insertions(+), 13 deletions(-)
diff --git a/glamor/glamor_egl.c b/glamor/glamor_egl.c
index d09ef16e6..71f2b8f9d 100644
--- a/glamor/glamor_egl.c
+++ b/glamor/glamor_egl.c
@@ -43,21 +43,27 @@
#include <drm_fourcc.h>
#endif
#include "glamor_egl.h"
#include "glamor.h"
#include "glamor_priv.h"
#include "dri3.h"
#ifndef EGL_DRM_BUFFER_FORMAT_ARGB2101010_MESA
-#define EGL_DRM_BUFFER_FORMAT_ARGB2101010_MESA 0x31D9
+#define EGL_DRM_BUFFER_FORMAT_ARGB2101010_MESA 0x3290
+#endif
+#ifndef EGL_DRM_BUFFER_FORMAT_ARGB1555_MESA
+#define EGL_DRM_BUFFER_FORMAT_ARGB1555_MESA 0x3291
+#endif
+#ifndef EGL_DRM_BUFFER_FORMAT_RGB565_MESA
+#define EGL_DRM_BUFFER_FORMAT_RGB565_MESA 0x3292
#endif
static const char glamor_name[] = "glamor";
static void
glamor_identify(int flags)
{
xf86Msg(X_INFO, "%s: OpenGL accelerated X.org driver based.\n",
glamor_name);
}
@@ -124,24 +130,39 @@ _glamor_egl_create_image(struct glamor_egl_screen_private *glamor_egl,
EGL_HEIGHT, 0,
EGL_DRM_BUFFER_STRIDE_MESA, 0,
EGL_DRM_BUFFER_FORMAT_MESA, 0,
EGL_DRM_BUFFER_USE_MESA,
EGL_DRM_BUFFER_USE_SHARE_MESA | EGL_DRM_BUFFER_USE_SCANOUT_MESA,
EGL_NONE
};
attribs[1] = width;
attribs[3] = height;
attribs[5] = stride;
- attribs[7] =
- (depth == 30) ? EGL_DRM_BUFFER_FORMAT_ARGB2101010_MESA : EGL_DRM_BUFFER_FORMAT_ARGB32_MESA;
- if (depth != 32 && depth != 24 && depth != 30)
+
+ switch (depth) {
+ case 15:
+ attribs[7] = EGL_DRM_BUFFER_FORMAT_ARGB1555_MESA;
+ break;
+ case 16:
+ attribs[7] = EGL_DRM_BUFFER_FORMAT_RGB565_MESA;
+ break;
+ case 24:
+ case 32:
+ attribs[7] = EGL_DRM_BUFFER_FORMAT_ARGB32_MESA;
+ break;
+ case 30:
+ attribs[7] = EGL_DRM_BUFFER_FORMAT_ARGB2101010_MESA;
+ break;
+ default:
return EGL_NO_IMAGE_KHR;
+ }
+
image = eglCreateImageKHR(glamor_egl->display,
glamor_egl->context,
EGL_DRM_BUFFER_MESA,
(void *) (uintptr_t) name,
attribs);
if (image == EGL_NO_IMAGE_KHR)
return EGL_NO_IMAGE_KHR;
return image;
}
@@ -807,20 +828,21 @@ glamor_egl_init(ScrnInfoPtr scrn, int fd)
}
#define GLAMOR_CHECK_EGL_EXTENSIONS(EXT1, EXT2) \
if (!epoxy_has_egl_extension(glamor_egl->display, "EGL_" #EXT1) && \
!epoxy_has_egl_extension(glamor_egl->display, "EGL_" #EXT2)) { \
ErrorF("EGL_" #EXT1 " or EGL_" #EXT2 " required.\n"); \
goto error; \
}
GLAMOR_CHECK_EGL_EXTENSION(MESA_drm_image);
+ GLAMOR_CHECK_EGL_EXTENSION(MESA_drm_image_formats);
GLAMOR_CHECK_EGL_EXTENSION(KHR_gl_renderbuffer_image);
#ifdef GLAMOR_GLES2
GLAMOR_CHECK_EGL_EXTENSIONS(KHR_surfaceless_context, KHR_surfaceless_gles2);
#else
GLAMOR_CHECK_EGL_EXTENSIONS(KHR_surfaceless_context,
KHR_surfaceless_opengl);
#endif
#ifndef GLAMOR_GLES2
glamor_egl->context = eglCreateContext(glamor_egl->display,
diff --git a/glamor/glamor_fbo.c b/glamor/glamor_fbo.c
index 421a4ceaa..e7d209f52 100644
--- a/glamor/glamor_fbo.c
+++ b/glamor/glamor_fbo.c
@@ -118,21 +118,21 @@ glamor_create_fbo_from_tex(glamor_screen_private *glamor_priv,
return fbo;
}
static int
_glamor_create_tex(glamor_screen_private *glamor_priv,
int w, int h, GLenum format)
{
unsigned int tex;
GLenum iformat = format;
- if (format == GL_RGB10_A2)
+ if (format == GL_RGB10_A2 || format == GL_RGB5_A1)
format = GL_RGBA;
glamor_make_current(glamor_priv);
glGenTextures(1, &tex);
glBindTexture(GL_TEXTURE_2D, tex);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
if (format == glamor_priv->one_channel_format && format == GL_RED)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_A, GL_RED);
glamor_priv->suppress_gl_out_of_memory_logging = true;
glTexImage2D(GL_TEXTURE_2D, 0, iformat, w, h, 0,
diff --git a/glamor/glamor_utils.h b/glamor/glamor_utils.h
index 0ed9c9125..bb6621703 100644
--- a/glamor/glamor_utils.h
+++ b/glamor/glamor_utils.h
@@ -613,29 +613,32 @@ format_for_depth(int depth)
return PICT_a8r8g8b8;
}
}
static inline GLenum
gl_iformat_for_pixmap(PixmapPtr pixmap)
{
glamor_screen_private *glamor_priv =
glamor_get_screen_private((pixmap)->drawable.pScreen);
- if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP &&
- ((pixmap)->drawable.depth == 1 || (pixmap)->drawable.depth == 8)) {
- return glamor_priv->one_channel_format;
- } else if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP &&
- (pixmap)->drawable.depth == 30) {
- return GL_RGB10_A2;
- } else {
- return GL_RGBA;
+ if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) {
+ if ((pixmap)->drawable.depth == 1 || (pixmap)->drawable.depth == 8)
+ return glamor_priv->one_channel_format;
+ else if ((pixmap)->drawable.depth == 30)
+ return GL_RGB10_A2;
+ else if ((pixmap)->drawable.depth == 16)
+ return GL_RGB565;
+ else if ((pixmap)->drawable.depth == 15)
+ return GL_RGB5_A1;
}
+
+ return GL_RGBA;
}
static inline CARD32
format_for_pixmap(PixmapPtr pixmap)
{
return format_for_depth((pixmap)->drawable.depth);
}
#define REVERT_NONE 0
#define REVERT_NORMAL 1
--
2.11.0
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev