Fix shader graph metatypes for static builds

Cannot rely on Q_COREAPP_STARTUP_FUNCTION inside Qt since static builds
have to be fully supported. Due to not registering those types, the shader
builder silently generated incompilable shader code in static builds. This
is critical especially on platforms where static builds are the only
choice (INTEGRITY).

Task-number: QTBUG-64365
Change-Id: I8820ded239ac160ab00c7fc34918fd3f273f0afb
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
This commit is contained in:
Laszlo Agocs 2017-11-08 13:45:26 +01:00
parent 490b24b064
commit 48afcf97b4
2 changed files with 9 additions and 8 deletions

View File

@ -48,10 +48,13 @@
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
void qt_register_ShaderLanguage_enums();
QShaderGraphLoader::QShaderGraphLoader() Q_DECL_NOTHROW QShaderGraphLoader::QShaderGraphLoader() Q_DECL_NOTHROW
: m_status(Null), : m_status(Null),
m_device(nullptr) m_device(nullptr)
{ {
qt_register_ShaderLanguage_enums();
} }
QShaderGraphLoader::Status QShaderGraphLoader::status() const Q_DECL_NOTHROW QShaderGraphLoader::Status QShaderGraphLoader::status() const Q_DECL_NOTHROW

View File

@ -43,14 +43,12 @@
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
namespace { // Note: to be invoked explicitly. Relying for example on
void registerEnums() // Q_COREAPP_STARTUP_FUNCTION would not be acceptable in static builds.
{ void qt_register_ShaderLanguage_enums()
qRegisterMetaType<QShaderLanguage::StorageQualifier>(); {
qRegisterMetaType<QShaderLanguage::VariableType>(); qRegisterMetaType<QShaderLanguage::StorageQualifier>();
} qRegisterMetaType<QShaderLanguage::VariableType>();
} }
Q_COREAPP_STARTUP_FUNCTION(registerEnums)
QT_END_NAMESPACE QT_END_NAMESPACE