summaryrefslogtreecommitdiffstats
path: root/src/hardwareintegration
diff options
context:
space:
mode:
authorJorgen Lind <jorgen.lind@digia.com>2013-12-20 14:34:16 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-01-06 10:19:53 +0100
commit445cf0105544eb0002971b652460efc6b841e671 (patch)
tree8caae6c04918583cfcafff8591c52e34394e6ae5 /src/hardwareintegration
parent76bb668aee8be5e8e1f022c4d09603d957e8e7e7 (diff)
update DrmEglServerIntegration to handle experimental 8 bit support
Change-Id: I8fa4ecf8b0848ca681f944a5fa56a4f6bb0a76be Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
Diffstat (limited to 'src/hardwareintegration')
-rw-r--r--src/hardwareintegration/client/drm-egl-server/drmeglserverbufferintegration.cpp44
-rw-r--r--src/hardwareintegration/compositor/drm-egl-server/drmeglserverbufferintegration.cpp18
2 files changed, 43 insertions, 19 deletions
diff --git a/src/hardwareintegration/client/drm-egl-server/drmeglserverbufferintegration.cpp b/src/hardwareintegration/client/drm-egl-server/drmeglserverbufferintegration.cpp
index 7edfa2c90..999347fbd 100644
--- a/src/hardwareintegration/client/drm-egl-server/drmeglserverbufferintegration.cpp
+++ b/src/hardwareintegration/client/drm-egl-server/drmeglserverbufferintegration.cpp
@@ -54,31 +54,43 @@ DrmServerBuffer::DrmServerBuffer(DrmEglServerBufferIntegration *integration
, int32_t height
, int32_t stride
, int32_t format)
- : m_integration(integration)
+ : QWaylandServerBuffer()
+ , m_integration(integration)
{
- EGLint attribs[] = {
- EGL_WIDTH, width,
- EGL_HEIGHT, height,
- EGL_DRM_BUFFER_STRIDE_MESA, stride /4,
- EGL_DRM_BUFFER_FORMAT_MESA, EGL_DRM_BUFFER_FORMAT_ARGB32_MESA,
- EGL_NONE
- };
-
- qintptr name_pointer = name;
- m_image = integration->eglCreateImageKHR(EGL_NO_CONTEXT, EGL_DRM_BUFFER_MESA, (EGLClientBuffer) name_pointer, attribs);
-
+ m_size = QSize(width, height);
+ EGLint egl_format;
+ int32_t format_stride;
switch (format) {
case QtWayland::qt_drm_egl_server_buffer::format_RGBA32:
m_format = QWaylandServerBuffer::RGBA32;
+ egl_format = EGL_DRM_BUFFER_FORMAT_ARGB32_MESA;
+ format_stride = stride / 4;
break;
+#ifdef EGL_DRM_BUFFER_FORMAT_A8_MESA
case QtWayland::qt_drm_egl_server_buffer::format_A8:
m_format = QWaylandServerBuffer::A8;
+ egl_format = EGL_DRM_BUFFER_FORMAT_A8_MESA;
+ format_stride = stride;
break;
+#endif
default:
qWarning("DrmServerBuffer: unknown format");
m_format = QWaylandServerBuffer::RGBA32;
+ egl_format = EGL_DRM_BUFFER_FORMAT_ARGB32_MESA;
+ format_stride = stride / 4;
break;
}
+ EGLint attribs[] = {
+ EGL_WIDTH, width,
+ EGL_HEIGHT, height,
+ EGL_DRM_BUFFER_STRIDE_MESA, format_stride,
+ EGL_DRM_BUFFER_FORMAT_MESA, egl_format,
+ EGL_NONE
+ };
+
+ qintptr name_pointer = name;
+ m_image = integration->eglCreateImageKHR(EGL_NO_CONTEXT, EGL_DRM_BUFFER_MESA, (EGLClientBuffer) name_pointer, attribs);
+
}
DrmServerBuffer::~DrmServerBuffer()
@@ -96,10 +108,10 @@ GLuint DrmServerBuffer::createTexture()
glBindTexture(GL_TEXTURE_2D, texture_id);
m_integration->glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, m_image);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
return texture_id;
}
diff --git a/src/hardwareintegration/compositor/drm-egl-server/drmeglserverbufferintegration.cpp b/src/hardwareintegration/compositor/drm-egl-server/drmeglserverbufferintegration.cpp
index 3a7986ede..d43fc70b4 100644
--- a/src/hardwareintegration/compositor/drm-egl-server/drmeglserverbufferintegration.cpp
+++ b/src/hardwareintegration/compositor/drm-egl-server/drmeglserverbufferintegration.cpp
@@ -48,24 +48,30 @@ DrmEglServerBuffer::DrmEglServerBuffer(DrmEglServerBufferIntegration *integratio
: QWaylandServerBuffer(size,format)
, m_integration(integration)
{
- m_format = RGBA32;
+ m_format = format;
+ EGLint egl_format;
switch (m_format) {
case RGBA32:
m_drm_format = QtWaylandServer::qt_drm_egl_server_buffer::format_RGBA32;
+ egl_format = EGL_DRM_BUFFER_FORMAT_ARGB32_MESA;
break;
+#ifdef EGL_DRM_BUFFER_FORMAT_A8_MESA
case A8:
m_drm_format = QtWaylandServer::qt_drm_egl_server_buffer::format_A8;
+ egl_format = EGL_DRM_BUFFER_FORMAT_A8_MESA;
break;
+#endif
default:
- qWarning("DrmEglServerBuffer: invalid format");
+ qWarning("DrmEglServerBuffer: unsupported format");
m_drm_format = QtWaylandServer::qt_drm_egl_server_buffer::format_RGBA32;
+ egl_format = EGL_DRM_BUFFER_FORMAT_ARGB32_MESA;
break;
}
EGLint imageAttribs[] = {
EGL_WIDTH, m_size.width(),
EGL_HEIGHT, m_size.height(),
- EGL_DRM_BUFFER_FORMAT_MESA, EGL_DRM_BUFFER_FORMAT_ARGB32_MESA,
+ EGL_DRM_BUFFER_FORMAT_MESA, egl_format,
EGL_DRM_BUFFER_USE_MESA, EGL_DRM_BUFFER_USE_SHARE_MESA,
EGL_NONE
};
@@ -106,8 +112,14 @@ GLuint DrmEglServerBuffer::createTexture()
GLuint texture;
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
+
m_integration->glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, m_image);
+ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+
return texture;
}