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()
|
||||
{
|
||||
m_program.reset(new QOpenGLShaderProgram);
|
||||
m_program->addShaderFromSourceCode(QOpenGLShader::Vertex, vertexShaderSource);
|
||||
m_program->addShaderFromSourceCode(QOpenGLShader::Fragment, fragmentShaderSource);
|
||||
m_program->addCacheableShaderFromSourceCode(QOpenGLShader::Vertex, vertexShaderSource);
|
||||
m_program->addCacheableShaderFromSourceCode(QOpenGLShader::Fragment, fragmentShaderSource);
|
||||
m_program->bindAttributeLocation("vertex", 0);
|
||||
m_program->bindAttributeLocation("normal", 1);
|
||||
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"
|
||||
"}\n";
|
||||
m_program = new QOpenGLShaderProgram;
|
||||
m_program->addShaderFromSourceCode(QOpenGLShader::Vertex, vertexShaderSource);
|
||||
m_program->addShaderFromSourceCode(QOpenGLShader::Fragment, fragmentShaderSource);
|
||||
m_program->addCacheableShaderFromSourceCode(QOpenGLShader::Vertex, vertexShaderSource);
|
||||
m_program->addCacheableShaderFromSourceCode(QOpenGLShader::Fragment, fragmentShaderSource);
|
||||
m_program->bindAttributeLocation("vertex", 0);
|
||||
m_program->bindAttributeLocation("coord", 1);
|
||||
m_program->link();
|
||||
|
|
|
@ -125,22 +125,22 @@ void SquircleRenderer::paint()
|
|||
initializeOpenGLFunctions();
|
||||
|
||||
m_program = new QOpenGLShaderProgram();
|
||||
m_program->addShaderFromSourceCode(QOpenGLShader::Vertex,
|
||||
"attribute highp vec4 vertices;"
|
||||
"varying highp vec2 coords;"
|
||||
"void main() {"
|
||||
" gl_Position = vertices;"
|
||||
" coords = vertices.xy;"
|
||||
"}");
|
||||
m_program->addShaderFromSourceCode(QOpenGLShader::Fragment,
|
||||
"uniform lowp float t;"
|
||||
"varying highp vec2 coords;"
|
||||
"void main() {"
|
||||
" lowp float i = 1. - (pow(abs(coords.x), 4.) + pow(abs(coords.y), 4.));"
|
||||
" i = smoothstep(t - 0.8, t + 0.8, i);"
|
||||
" i = floor(i * 20.) / 20.;"
|
||||
" gl_FragColor = vec4(coords * .5 + .5, i, i);"
|
||||
"}");
|
||||
m_program->addCacheableShaderFromSourceCode(QOpenGLShader::Vertex,
|
||||
"attribute highp vec4 vertices;"
|
||||
"varying highp vec2 coords;"
|
||||
"void main() {"
|
||||
" gl_Position = vertices;"
|
||||
" coords = vertices.xy;"
|
||||
"}");
|
||||
m_program->addCacheableShaderFromSourceCode(QOpenGLShader::Fragment,
|
||||
"uniform lowp float t;"
|
||||
"varying highp vec2 coords;"
|
||||
"void main() {"
|
||||
" lowp float i = 1. - (pow(abs(coords.x), 4.) + pow(abs(coords.y), 4.));"
|
||||
" i = smoothstep(t - 0.8, t + 0.8, i);"
|
||||
" i = floor(i * 20.) / 20.;"
|
||||
" gl_FragColor = vec4(coords * .5 + .5, i, i);"
|
||||
"}");
|
||||
|
||||
m_program->bindAttributeLocation("vertices", 0);
|
||||
m_program->link();
|
||||
|
|
|
@ -86,8 +86,8 @@ void OpenGLRenderNode::init()
|
|||
" gl_FragColor = col * opacity;\n"
|
||||
"}\n";
|
||||
|
||||
m_program->addShaderFromSourceCode(QOpenGLShader::Vertex, vertexShaderSource);
|
||||
m_program->addShaderFromSourceCode(QOpenGLShader::Fragment, fragmentShaderSource);
|
||||
m_program->addCacheableShaderFromSourceCode(QOpenGLShader::Vertex, vertexShaderSource);
|
||||
m_program->addCacheableShaderFromSourceCode(QOpenGLShader::Fragment, fragmentShaderSource);
|
||||
m_program->bindAttributeLocation("posAttr", 0);
|
||||
m_program->bindAttributeLocation("colAttr", 1);
|
||||
m_program->link();
|
||||
|
|
|
@ -70,7 +70,6 @@ void LogoRenderer::initialize()
|
|||
|
||||
glClearColor(0.1f, 0.1f, 0.2f, 1.0f);
|
||||
|
||||
QOpenGLShader *vshader1 = new QOpenGLShader(QOpenGLShader::Vertex, &program1);
|
||||
const char *vsrc1 =
|
||||
"attribute highp vec4 vertex;\n"
|
||||
"attribute mediump vec3 normal;\n"
|
||||
|
@ -85,19 +84,16 @@ void LogoRenderer::initialize()
|
|||
" color = clamp(color, 0.0, 1.0);\n"
|
||||
" gl_Position = matrix * vertex;\n"
|
||||
"}\n";
|
||||
vshader1->compileSourceCode(vsrc1);
|
||||
|
||||
QOpenGLShader *fshader1 = new QOpenGLShader(QOpenGLShader::Fragment, &program1);
|
||||
const char *fsrc1 =
|
||||
"varying mediump vec4 color;\n"
|
||||
"void main(void)\n"
|
||||
"{\n"
|
||||
" gl_FragColor = color;\n"
|
||||
"}\n";
|
||||
fshader1->compileSourceCode(fsrc1);
|
||||
|
||||
program1.addShader(vshader1);
|
||||
program1.addShader(fshader1);
|
||||
program1.addCacheableShaderFromSourceCode(QOpenGLShader::Vertex, vsrc1);
|
||||
program1.addCacheableShaderFromSourceCode(QOpenGLShader::Fragment, fsrc1);
|
||||
program1.link();
|
||||
|
||||
vertexAttr1 = program1.attributeLocation("vertex");
|
||||
|
|
|
@ -260,11 +260,11 @@ void QQuickCustomMaterialShader::compile()
|
|||
|
||||
m_log.clear();
|
||||
m_compiled = true;
|
||||
if (!program()->addShaderFromSourceCode(QOpenGLShader::Vertex, vertexShader())) {
|
||||
if (!program()->addCacheableShaderFromSourceCode(QOpenGLShader::Vertex, vertexShader())) {
|
||||
m_log += QLatin1String("*** Vertex shader ***\n") + program()->log();
|
||||
m_compiled = false;
|
||||
}
|
||||
if (!program()->addShaderFromSourceCode(QOpenGLShader::Fragment, fragmentShader())) {
|
||||
if (!program()->addCacheableShaderFromSourceCode(QOpenGLShader::Fragment, fragmentShader())) {
|
||||
m_log += QLatin1String("*** Fragment shader ***\n") + program()->log();
|
||||
m_compiled = false;
|
||||
}
|
||||
|
|
|
@ -364,8 +364,8 @@ void QSGMaterialShader::compile()
|
|||
{
|
||||
Q_ASSERT_X(!m_program.isLinked(), "QSGSMaterialShader::compile()", "Compile called multiple times!");
|
||||
|
||||
program()->addShaderFromSourceCode(QOpenGLShader::Vertex, vertexShader());
|
||||
program()->addShaderFromSourceCode(QOpenGLShader::Fragment, fragmentShader());
|
||||
program()->addCacheableShaderFromSourceCode(QOpenGLShader::Vertex, vertexShader());
|
||||
program()->addCacheableShaderFromSourceCode(QOpenGLShader::Fragment, fragmentShader());
|
||||
|
||||
char const *const *attr = attributeNames();
|
||||
#ifndef QT_NO_DEBUG
|
||||
|
|
|
@ -119,19 +119,13 @@ private:
|
|||
const QString source = QLatin1String(qopenglslMainWithTexCoordsVertexShader)
|
||||
+ QLatin1String(qopenglslUntransformedPositionVertexShader);
|
||||
|
||||
QOpenGLShader *vertexShader = new QOpenGLShader(QOpenGLShader::Vertex, m_blitProgram);
|
||||
vertexShader->compileSourceCode(source);
|
||||
|
||||
m_blitProgram->addShader(vertexShader);
|
||||
m_blitProgram->addCacheableShaderFromSourceCode(QOpenGLShader::Vertex, source);
|
||||
}
|
||||
{
|
||||
const QString source = QLatin1String(qopenglslMainFragmentShader)
|
||||
+ QLatin1String(qopenglslImageSrcFragmentShader);
|
||||
|
||||
QOpenGLShader *fragmentShader = new QOpenGLShader(QOpenGLShader::Fragment, m_blitProgram);
|
||||
fragmentShader->compileSourceCode(source);
|
||||
|
||||
m_blitProgram->addShader(fragmentShader);
|
||||
m_blitProgram->addCacheableShaderFromSourceCode(QOpenGLShader::Fragment, source);
|
||||
}
|
||||
m_blitProgram->bindAttributeLocation("vertexCoordsArray", QT_VERTEX_COORDS_ATTR);
|
||||
m_blitProgram->bindAttributeLocation("textureCoordArray", QT_TEXTURE_COORDS_ATTR);
|
||||
|
|
|
@ -262,8 +262,8 @@ void QSGDefaultRenderContext::compileShader(QSGMaterialShader *shader, QSGMateri
|
|||
"QSGRenderContext::compile()",
|
||||
"materials with custom compile step cannot have custom vertex/fragment code");
|
||||
QOpenGLShaderProgram *p = shader->program();
|
||||
p->addShaderFromSourceCode(QOpenGLShader::Vertex, vertexCode ? vertexCode : shader->vertexShader());
|
||||
p->addShaderFromSourceCode(QOpenGLShader::Fragment, fragmentCode ? fragmentCode : shader->fragmentShader());
|
||||
p->addCacheableShaderFromSourceCode(QOpenGLShader::Vertex, vertexCode ? vertexCode : shader->vertexShader());
|
||||
p->addCacheableShaderFromSourceCode(QOpenGLShader::Fragment, fragmentCode ? fragmentCode : shader->fragmentShader());
|
||||
p->link();
|
||||
if (!p->isLinked())
|
||||
qWarning() << "shader compilation failed:" << endl << p->log();
|
||||
|
|
|
@ -217,11 +217,11 @@ void QSGShaderSourceBuilder::initializeProgramFromFiles(QOpenGLShaderProgram *pr
|
|||
QSGShaderSourceBuilder builder;
|
||||
|
||||
builder.appendSourceFile(vertexShader);
|
||||
program->addShaderFromSourceCode(QOpenGLShader::Vertex, builder.source());
|
||||
program->addCacheableShaderFromSourceCode(QOpenGLShader::Vertex, builder.source());
|
||||
builder.clear();
|
||||
|
||||
builder.appendSourceFile(fragmentShader);
|
||||
program->addShaderFromSourceCode(QOpenGLShader::Fragment, builder.source());
|
||||
program->addCacheableShaderFromSourceCode(QOpenGLShader::Fragment, builder.source());
|
||||
}
|
||||
|
||||
QByteArray QSGShaderSourceBuilder::source() const
|
||||
|
|
Loading…
Reference in New Issue