diff options
author | Jorgen Lind <jorgen.lind@digia.com> | 2013-12-20 14:34:16 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-01-06 10:19:53 +0100 |
commit | 445cf0105544eb0002971b652460efc6b841e671 (patch) | |
tree | 8caae6c04918583cfcafff8591c52e34394e6ae5 /src/hardwareintegration | |
parent | 76bb668aee8be5e8e1f022c4d09603d957e8e7e7 (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.cpp | 44 | ||||
-rw-r--r-- | src/hardwareintegration/compositor/drm-egl-server/drmeglserverbufferintegration.cpp | 18 |
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; } |