Enable shader disk cache in Qt Quick
Change-Id: I14ee97ee75664c5dfcd229a5be2be6294c936b2c Task-number: QTBUG-55496 Reviewed-by: Andy Nichols <andy.nichols@qt.io>
This commit is contained in:
parent
af4516ac86
commit
e8801e7c09
|
@ -263,8 +263,8 @@ static const char *fragmentShaderSource =
|
||||||
void FbItemRenderer::initProgram()
|
void FbItemRenderer::initProgram()
|
||||||
{
|
{
|
||||||
m_program.reset(new QOpenGLShaderProgram);
|
m_program.reset(new QOpenGLShaderProgram);
|
||||||
m_program->addShaderFromSourceCode(QOpenGLShader::Vertex, vertexShaderSource);
|
m_program->addCacheableShaderFromSourceCode(QOpenGLShader::Vertex, vertexShaderSource);
|
||||||
m_program->addShaderFromSourceCode(QOpenGLShader::Fragment, fragmentShaderSource);
|
m_program->addCacheableShaderFromSourceCode(QOpenGLShader::Fragment, fragmentShaderSource);
|
||||||
m_program->bindAttributeLocation("vertex", 0);
|
m_program->bindAttributeLocation("vertex", 0);
|
||||||
m_program->bindAttributeLocation("normal", 1);
|
m_program->bindAttributeLocation("normal", 1);
|
||||||
m_program->link();
|
m_program->link();
|
||||||
|
|
|
@ -101,8 +101,8 @@ void CubeRenderer::init(QWindow *w, QOpenGLContext *share)
|
||||||
" gl_FragColor = vec4(texture2D(sampler, v_coord).rgb, 1.0);\n"
|
" gl_FragColor = vec4(texture2D(sampler, v_coord).rgb, 1.0);\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
m_program = new QOpenGLShaderProgram;
|
m_program = new QOpenGLShaderProgram;
|
||||||
m_program->addShaderFromSourceCode(QOpenGLShader::Vertex, vertexShaderSource);
|
m_program->addCacheableShaderFromSourceCode(QOpenGLShader::Vertex, vertexShaderSource);
|
||||||
m_program->addShaderFromSourceCode(QOpenGLShader::Fragment, fragmentShaderSource);
|
m_program->addCacheableShaderFromSourceCode(QOpenGLShader::Fragment, fragmentShaderSource);
|
||||||
m_program->bindAttributeLocation("vertex", 0);
|
m_program->bindAttributeLocation("vertex", 0);
|
||||||
m_program->bindAttributeLocation("coord", 1);
|
m_program->bindAttributeLocation("coord", 1);
|
||||||
m_program->link();
|
m_program->link();
|
||||||
|
|
|
@ -125,14 +125,14 @@ void SquircleRenderer::paint()
|
||||||
initializeOpenGLFunctions();
|
initializeOpenGLFunctions();
|
||||||
|
|
||||||
m_program = new QOpenGLShaderProgram();
|
m_program = new QOpenGLShaderProgram();
|
||||||
m_program->addShaderFromSourceCode(QOpenGLShader::Vertex,
|
m_program->addCacheableShaderFromSourceCode(QOpenGLShader::Vertex,
|
||||||
"attribute highp vec4 vertices;"
|
"attribute highp vec4 vertices;"
|
||||||
"varying highp vec2 coords;"
|
"varying highp vec2 coords;"
|
||||||
"void main() {"
|
"void main() {"
|
||||||
" gl_Position = vertices;"
|
" gl_Position = vertices;"
|
||||||
" coords = vertices.xy;"
|
" coords = vertices.xy;"
|
||||||
"}");
|
"}");
|
||||||
m_program->addShaderFromSourceCode(QOpenGLShader::Fragment,
|
m_program->addCacheableShaderFromSourceCode(QOpenGLShader::Fragment,
|
||||||
"uniform lowp float t;"
|
"uniform lowp float t;"
|
||||||
"varying highp vec2 coords;"
|
"varying highp vec2 coords;"
|
||||||
"void main() {"
|
"void main() {"
|
||||||
|
|
|
@ -86,8 +86,8 @@ void OpenGLRenderNode::init()
|
||||||
" gl_FragColor = col * opacity;\n"
|
" gl_FragColor = col * opacity;\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
|
|
||||||
m_program->addShaderFromSourceCode(QOpenGLShader::Vertex, vertexShaderSource);
|
m_program->addCacheableShaderFromSourceCode(QOpenGLShader::Vertex, vertexShaderSource);
|
||||||
m_program->addShaderFromSourceCode(QOpenGLShader::Fragment, fragmentShaderSource);
|
m_program->addCacheableShaderFromSourceCode(QOpenGLShader::Fragment, fragmentShaderSource);
|
||||||
m_program->bindAttributeLocation("posAttr", 0);
|
m_program->bindAttributeLocation("posAttr", 0);
|
||||||
m_program->bindAttributeLocation("colAttr", 1);
|
m_program->bindAttributeLocation("colAttr", 1);
|
||||||
m_program->link();
|
m_program->link();
|
||||||
|
|
|
@ -70,7 +70,6 @@ void LogoRenderer::initialize()
|
||||||
|
|
||||||
glClearColor(0.1f, 0.1f, 0.2f, 1.0f);
|
glClearColor(0.1f, 0.1f, 0.2f, 1.0f);
|
||||||
|
|
||||||
QOpenGLShader *vshader1 = new QOpenGLShader(QOpenGLShader::Vertex, &program1);
|
|
||||||
const char *vsrc1 =
|
const char *vsrc1 =
|
||||||
"attribute highp vec4 vertex;\n"
|
"attribute highp vec4 vertex;\n"
|
||||||
"attribute mediump vec3 normal;\n"
|
"attribute mediump vec3 normal;\n"
|
||||||
|
@ -85,19 +84,16 @@ void LogoRenderer::initialize()
|
||||||
" color = clamp(color, 0.0, 1.0);\n"
|
" color = clamp(color, 0.0, 1.0);\n"
|
||||||
" gl_Position = matrix * vertex;\n"
|
" gl_Position = matrix * vertex;\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
vshader1->compileSourceCode(vsrc1);
|
|
||||||
|
|
||||||
QOpenGLShader *fshader1 = new QOpenGLShader(QOpenGLShader::Fragment, &program1);
|
|
||||||
const char *fsrc1 =
|
const char *fsrc1 =
|
||||||
"varying mediump vec4 color;\n"
|
"varying mediump vec4 color;\n"
|
||||||
"void main(void)\n"
|
"void main(void)\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
" gl_FragColor = color;\n"
|
" gl_FragColor = color;\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
fshader1->compileSourceCode(fsrc1);
|
|
||||||
|
|
||||||
program1.addShader(vshader1);
|
program1.addCacheableShaderFromSourceCode(QOpenGLShader::Vertex, vsrc1);
|
||||||
program1.addShader(fshader1);
|
program1.addCacheableShaderFromSourceCode(QOpenGLShader::Fragment, fsrc1);
|
||||||
program1.link();
|
program1.link();
|
||||||
|
|
||||||
vertexAttr1 = program1.attributeLocation("vertex");
|
vertexAttr1 = program1.attributeLocation("vertex");
|
||||||
|
|
|
@ -260,11 +260,11 @@ void QQuickCustomMaterialShader::compile()
|
||||||
|
|
||||||
m_log.clear();
|
m_log.clear();
|
||||||
m_compiled = true;
|
m_compiled = true;
|
||||||
if (!program()->addShaderFromSourceCode(QOpenGLShader::Vertex, vertexShader())) {
|
if (!program()->addCacheableShaderFromSourceCode(QOpenGLShader::Vertex, vertexShader())) {
|
||||||
m_log += QLatin1String("*** Vertex shader ***\n") + program()->log();
|
m_log += QLatin1String("*** Vertex shader ***\n") + program()->log();
|
||||||
m_compiled = false;
|
m_compiled = false;
|
||||||
}
|
}
|
||||||
if (!program()->addShaderFromSourceCode(QOpenGLShader::Fragment, fragmentShader())) {
|
if (!program()->addCacheableShaderFromSourceCode(QOpenGLShader::Fragment, fragmentShader())) {
|
||||||
m_log += QLatin1String("*** Fragment shader ***\n") + program()->log();
|
m_log += QLatin1String("*** Fragment shader ***\n") + program()->log();
|
||||||
m_compiled = false;
|
m_compiled = false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -364,8 +364,8 @@ void QSGMaterialShader::compile()
|
||||||
{
|
{
|
||||||
Q_ASSERT_X(!m_program.isLinked(), "QSGSMaterialShader::compile()", "Compile called multiple times!");
|
Q_ASSERT_X(!m_program.isLinked(), "QSGSMaterialShader::compile()", "Compile called multiple times!");
|
||||||
|
|
||||||
program()->addShaderFromSourceCode(QOpenGLShader::Vertex, vertexShader());
|
program()->addCacheableShaderFromSourceCode(QOpenGLShader::Vertex, vertexShader());
|
||||||
program()->addShaderFromSourceCode(QOpenGLShader::Fragment, fragmentShader());
|
program()->addCacheableShaderFromSourceCode(QOpenGLShader::Fragment, fragmentShader());
|
||||||
|
|
||||||
char const *const *attr = attributeNames();
|
char const *const *attr = attributeNames();
|
||||||
#ifndef QT_NO_DEBUG
|
#ifndef QT_NO_DEBUG
|
||||||
|
|
|
@ -119,19 +119,13 @@ private:
|
||||||
const QString source = QLatin1String(qopenglslMainWithTexCoordsVertexShader)
|
const QString source = QLatin1String(qopenglslMainWithTexCoordsVertexShader)
|
||||||
+ QLatin1String(qopenglslUntransformedPositionVertexShader);
|
+ QLatin1String(qopenglslUntransformedPositionVertexShader);
|
||||||
|
|
||||||
QOpenGLShader *vertexShader = new QOpenGLShader(QOpenGLShader::Vertex, m_blitProgram);
|
m_blitProgram->addCacheableShaderFromSourceCode(QOpenGLShader::Vertex, source);
|
||||||
vertexShader->compileSourceCode(source);
|
|
||||||
|
|
||||||
m_blitProgram->addShader(vertexShader);
|
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
const QString source = QLatin1String(qopenglslMainFragmentShader)
|
const QString source = QLatin1String(qopenglslMainFragmentShader)
|
||||||
+ QLatin1String(qopenglslImageSrcFragmentShader);
|
+ QLatin1String(qopenglslImageSrcFragmentShader);
|
||||||
|
|
||||||
QOpenGLShader *fragmentShader = new QOpenGLShader(QOpenGLShader::Fragment, m_blitProgram);
|
m_blitProgram->addCacheableShaderFromSourceCode(QOpenGLShader::Fragment, source);
|
||||||
fragmentShader->compileSourceCode(source);
|
|
||||||
|
|
||||||
m_blitProgram->addShader(fragmentShader);
|
|
||||||
}
|
}
|
||||||
m_blitProgram->bindAttributeLocation("vertexCoordsArray", QT_VERTEX_COORDS_ATTR);
|
m_blitProgram->bindAttributeLocation("vertexCoordsArray", QT_VERTEX_COORDS_ATTR);
|
||||||
m_blitProgram->bindAttributeLocation("textureCoordArray", QT_TEXTURE_COORDS_ATTR);
|
m_blitProgram->bindAttributeLocation("textureCoordArray", QT_TEXTURE_COORDS_ATTR);
|
||||||
|
|
|
@ -262,8 +262,8 @@ void QSGDefaultRenderContext::compileShader(QSGMaterialShader *shader, QSGMateri
|
||||||
"QSGRenderContext::compile()",
|
"QSGRenderContext::compile()",
|
||||||
"materials with custom compile step cannot have custom vertex/fragment code");
|
"materials with custom compile step cannot have custom vertex/fragment code");
|
||||||
QOpenGLShaderProgram *p = shader->program();
|
QOpenGLShaderProgram *p = shader->program();
|
||||||
p->addShaderFromSourceCode(QOpenGLShader::Vertex, vertexCode ? vertexCode : shader->vertexShader());
|
p->addCacheableShaderFromSourceCode(QOpenGLShader::Vertex, vertexCode ? vertexCode : shader->vertexShader());
|
||||||
p->addShaderFromSourceCode(QOpenGLShader::Fragment, fragmentCode ? fragmentCode : shader->fragmentShader());
|
p->addCacheableShaderFromSourceCode(QOpenGLShader::Fragment, fragmentCode ? fragmentCode : shader->fragmentShader());
|
||||||
p->link();
|
p->link();
|
||||||
if (!p->isLinked())
|
if (!p->isLinked())
|
||||||
qWarning() << "shader compilation failed:" << endl << p->log();
|
qWarning() << "shader compilation failed:" << endl << p->log();
|
||||||
|
|
|
@ -217,11 +217,11 @@ void QSGShaderSourceBuilder::initializeProgramFromFiles(QOpenGLShaderProgram *pr
|
||||||
QSGShaderSourceBuilder builder;
|
QSGShaderSourceBuilder builder;
|
||||||
|
|
||||||
builder.appendSourceFile(vertexShader);
|
builder.appendSourceFile(vertexShader);
|
||||||
program->addShaderFromSourceCode(QOpenGLShader::Vertex, builder.source());
|
program->addCacheableShaderFromSourceCode(QOpenGLShader::Vertex, builder.source());
|
||||||
builder.clear();
|
builder.clear();
|
||||||
|
|
||||||
builder.appendSourceFile(fragmentShader);
|
builder.appendSourceFile(fragmentShader);
|
||||||
program->addShaderFromSourceCode(QOpenGLShader::Fragment, builder.source());
|
program->addCacheableShaderFromSourceCode(QOpenGLShader::Fragment, builder.source());
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray QSGShaderSourceBuilder::source() const
|
QByteArray QSGShaderSourceBuilder::source() const
|
||||||
|
|
Loading…
Reference in New Issue