Commit 0e9cd8b4 authored by Gunnar Sletta's avatar Gunnar Sletta Committed by The Qt Project
Browse files

Cut performance cost in QSGContext::prepareMaterial()


The hash-lookup in this function is costing us a lot, and
since we're looking up the same materials again and again,
and the material has a place holder for it, we can store it
directly in the material at no extra cost. This was a 10%
gain in this particular benchmark.

Change-Id: I46b67791ce39f453fa86d1ee82f6f5c7785b46a1
Reviewed-by: default avatarYoann Lopes <yoann.lopes@digia.com>
Reviewed-by: default avatarSamuel Rødal <samuel.rodal@digia.com>
parent c23dfece
dev 5.10 5.11 5.12 5.12.1 5.12.10 5.12.11 5.12.12 5.12.2 5.12.3 5.12.4 5.12.5 5.12.6 5.12.7 5.12.8 5.12.9 5.13 5.13.0 5.13.1 5.13.2 5.14 5.14.0 5.14.1 5.14.2 5.15 5.15.0 5.15.1 5.15.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 5.9.8 6.0 6.0.0 6.1 6.1.0 6.1.1 6.1.2 6.1.3 6.2 6.2.0 6.2.1 6.2.2 old/5.1 old/5.2 wip/cmake wip/dbus wip/gc wip/itemviews wip/nacl wip/new-backend wip/pointerhandler wip/propertycache-refactor wip/qquickdeliveryagent wip/scenegraphng wip/tizen wip/webassembly v5.15.0-alpha1 v5.14.1 v5.14.0 v5.14.0-rc2 v5.14.0-rc1 v5.14.0-beta3 v5.14.0-beta2 v5.14.0-beta1 v5.14.0-alpha1 v5.13.2 v5.13.1 v5.13.0 v5.13.0-rc3 v5.13.0-rc2 v5.13.0-rc1 v5.13.0-beta4 v5.13.0-beta3 v5.13.0-beta2 v5.13.0-beta1 v5.13.0-alpha1 v5.12.7 v5.12.6 v5.12.5 v5.12.4 v5.12.3 v5.12.2 v5.12.1 v5.12.0 v5.12.0-rc2 v5.12.0-rc1 v5.12.0-beta4 v5.12.0-beta3 v5.12.0-beta2 v5.12.0-beta1 v5.12.0-alpha1 v5.11.3 v5.11.2 v5.11.1 v5.11.0 v5.11.0-rc2 v5.11.0-rc1 v5.11.0-beta4 v5.11.0-beta3 v5.11.0-beta2 v5.11.0-beta1 v5.11.0-alpha1 v5.10.1 v5.10.0 v5.10.0-rc3 v5.10.0-rc2 v5.10.0-rc1 v5.10.0-beta4 v5.10.0-beta3 v5.10.0-beta2 v5.10.0-beta1 v5.10.0-alpha1 v5.9.9 v5.9.8 v5.9.7 v5.9.6 v5.9.5 v5.9.4 v5.9.3 v5.9.2 v5.9.1 v5.9.0 v5.9.0-rc2 v5.9.0-rc1 v5.9.0-beta4 v5.9.0-beta3 v5.9.0-beta2 v5.9.0-beta1 v5.9.0-alpha1 v5.8.0 v5.8.0-rc1 v5.8.0-beta1 v5.8.0-alpha1 v5.7.1 v5.7.0 v5.7.0-rc1 v5.7.0-beta1 v5.7.0-alpha1 v5.6.3 v5.6.2 v5.6.1 v5.6.1-1 v5.6.0 v5.6.0-rc1 v5.6.0-beta1 v5.6.0-alpha1 v5.5.1 v5.5.0 v5.5.0-rc1 v5.5.0-beta1 v5.5.0-alpha1 v5.4.2 v5.4.1 v5.4.0 v5.4.0-rc1 v5.4.0-beta1 v5.4.0-alpha1 v5.3.2 v5.3.1 v5.3.0 v5.3.0-rc1 v5.3.0-beta1 v5.3.0-alpha1 v5.2.1 v5.2.0 v5.2.0-rc1 v5.2.0-beta1 v5.2.0-alpha1 v5.1.1 v5.1.0 v5.1.0-rc2 v5.1.0-rc1
No related merge requests found
Showing with 10 additions and 1 deletion
...@@ -556,6 +556,7 @@ static void qt_print_material_count() ...@@ -556,6 +556,7 @@ static void qt_print_material_count()
QSGMaterial::QSGMaterial() QSGMaterial::QSGMaterial()
: m_flags(0) : m_flags(0)
, m_reserved(0)
{ {
#ifndef QT_NO_DEBUG #ifndef QT_NO_DEBUG
if (qsg_leak_check) { if (qsg_leak_check) {
......
...@@ -133,6 +133,7 @@ public: ...@@ -133,6 +133,7 @@ public:
void setFlag(Flags flags, bool on = true); void setFlag(Flags flags, bool on = true);
private: private:
friend class QSGContext;
Flags m_flags; Flags m_flags;
void *m_reserved; void *m_reserved;
Q_DISABLE_COPY(QSGMaterial) Q_DISABLE_COPY(QSGMaterial)
......
...@@ -478,10 +478,16 @@ QSGDepthStencilBufferManager *QSGContext::depthStencilBufferManager() ...@@ -478,10 +478,16 @@ QSGDepthStencilBufferManager *QSGContext::depthStencilBufferManager()
QSGMaterialShader *QSGContext::prepareMaterial(QSGMaterial *material) QSGMaterialShader *QSGContext::prepareMaterial(QSGMaterial *material)
{ {
Q_D(QSGContext); Q_D(QSGContext);
if (material->m_reserved)
return reinterpret_cast<QSGMaterialShader *>(material->m_reserved);
QSGMaterialType *type = material->type(); QSGMaterialType *type = material->type();
QSGMaterialShader *shader = d->materials.value(type); QSGMaterialShader *shader = d->materials.value(type);
if (shader) if (shader) {
material->m_reserved = shader;
return shader; return shader;
}
#ifndef QSG_NO_RENDER_TIMING #ifndef QSG_NO_RENDER_TIMING
if (qsg_render_timing || QQmlProfilerService::enabled) if (qsg_render_timing || QQmlProfilerService::enabled)
...@@ -489,6 +495,7 @@ QSGMaterialShader *QSGContext::prepareMaterial(QSGMaterial *material) ...@@ -489,6 +495,7 @@ QSGMaterialShader *QSGContext::prepareMaterial(QSGMaterial *material)
#endif #endif
shader = material->createShader(); shader = material->createShader();
material->m_reserved = shader;
shader->compile(); shader->compile();
shader->initialize(); shader->initialize();
d->materials[type] = shader; d->materials[type] = shader;
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment