diff options
author | Sean Harmer <sean.harmer@kdab.com> | 2013-03-01 16:32:04 +0000 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-03-02 12:58:18 +0100 |
commit | 8c4d02ef875518be21f63bd115a0bec813da5a91 (patch) | |
tree | c00bf5811c64e054657d0c321ceb0c3048e32f9e /src | |
parent | 7e5d1c1c2fc764d4cacc3e367542e1f42e6b772e (diff) |
OpenGL: Add support for the Compute shader stage
Change-Id: Ibb1b79358758c2adf818af8c6fcd5c379efad8c3
Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/gui/opengl/qopengl.h | 1 | ||||
-rw-r--r-- | src/gui/opengl/qopenglshaderprogram.cpp | 15 | ||||
-rw-r--r-- | src/gui/opengl/qopenglshaderprogram.h | 3 |
3 files changed, 17 insertions, 2 deletions
diff --git a/src/gui/opengl/qopengl.h b/src/gui/opengl/qopengl.h index df63eac1f7..e4e06ba284 100644 --- a/src/gui/opengl/qopengl.h +++ b/src/gui/opengl/qopengl.h @@ -108,6 +108,7 @@ typedef GLfloat GLdouble; # endif #if !defined(Q_OS_MAC) # define QT_OPENGL_4 +# define QT_OPENGL_4_3 #endif #endif diff --git a/src/gui/opengl/qopenglshaderprogram.cpp b/src/gui/opengl/qopenglshaderprogram.cpp index e48b922dac..1cde0cb92d 100644 --- a/src/gui/opengl/qopenglshaderprogram.cpp +++ b/src/gui/opengl/qopenglshaderprogram.cpp @@ -156,6 +156,8 @@ QT_BEGIN_NAMESPACE shading language (GLSL), based on the core feature (requires OpenGL >= 4.0). \value TessellationEvaluation Tessellation evaluation shaders written in the OpenGL shading language (GLSL), based on the core feature (requires OpenGL >= 4.0). + \value Compute Compute shaders written in the OpenGL shading language (GLSL), + based on the core feature (requires OpenGL >= 4.3). */ class QOpenGLShaderPrivate : public QObjectPrivate @@ -236,6 +238,10 @@ bool QOpenGLShaderPrivate::create() } else if (shaderType == QOpenGLShader::TessellationEvaluation && supportsTessellationShaders) { shader = glfuncs->glCreateShader(GL_TESS_EVALUATION_SHADER); #endif +#if defined(QT_OPENGL_4_3) + } else if (shaderType == QOpenGLShader::Compute) { + shader = glfuncs->glCreateShader(GL_COMPUTE_SHADER); +#endif } else { shader = glfuncs->glCreateShader(GL_FRAGMENT_SHADER); } @@ -3230,7 +3236,7 @@ bool QOpenGLShader::hasOpenGLShaders(ShaderType type, QOpenGLContext *context) if (!context) return false; - if ((type & ~(Geometry | Vertex | Fragment | TessellationControl | TessellationEvaluation)) || type == 0) + if ((type & ~(Geometry | Vertex | Fragment | TessellationControl | TessellationEvaluation | Compute)) || type == 0) return false; QSurfaceFormat format = context->format(); @@ -3250,6 +3256,13 @@ bool QOpenGLShader::hasOpenGLShaders(ShaderType type, QOpenGLContext *context) // No tessellation shader support in OpenGL ES2 return false; #endif + } else if (type == Compute) { +#if defined(QT_OPENGL_4_3) + return (format.version() >= qMakePair<int, int>(4, 3)); +#else + // No compute shader support without OpenGL 4.3 or newer + return false; +#endif } // Unconditional support of vertex and fragment shaders implicitly assumes diff --git a/src/gui/opengl/qopenglshaderprogram.h b/src/gui/opengl/qopenglshaderprogram.h index 3677779a6a..6c3dd37843 100644 --- a/src/gui/opengl/qopenglshaderprogram.h +++ b/src/gui/opengl/qopenglshaderprogram.h @@ -67,7 +67,8 @@ public: Fragment = 0x0002, Geometry = 0x0004, TessellationControl = 0x0008, - TessellationEvaluation = 0x0010 + TessellationEvaluation = 0x0010, + Compute = 0x0020 }; Q_DECLARE_FLAGS(ShaderType, ShaderTypeBit) |