summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.eslintignore2
-rw-r--r--AUTHORS7
-rw-r--r--README.md3
-rw-r--r--application/basilisk/base/content/aboutNetError.xhtml114
-rw-r--r--application/basilisk/base/content/browser-fullScreenAndPointerLock.js12
-rw-r--r--application/basilisk/base/content/browser.js92
-rw-r--r--application/basilisk/base/content/content.js3
-rw-r--r--application/basilisk/locales/en-US/chrome/browser/aboutPrivateBrowsing.dtd6
-rw-r--r--application/basilisk/locales/en-US/chrome/browser/browser.properties7
-rw-r--r--application/basilisk/locales/en-US/chrome/overrides/netError.dtd1
-rw-r--r--application/basilisk/themes/shared/aboutNetError.css27
-rw-r--r--application/palemoon/app/profile/palemoon.js23
-rw-r--r--application/palemoon/base/content/aboutDialog.xul7
-rw-r--r--application/palemoon/base/content/baseMenuOverlay.xul2
-rw-r--r--application/palemoon/base/content/blockedSite.xhtml193
-rw-r--r--application/palemoon/base/content/browser-fullScreen.js12
-rw-r--r--application/palemoon/base/content/browser.js22
-rw-r--r--application/palemoon/base/content/browser.xul2
-rw-r--r--application/palemoon/base/content/nsContextMenu.js14
-rw-r--r--application/palemoon/base/content/pageinfo/permissions.js27
-rw-r--r--application/palemoon/base/content/report-phishing-overlay.xul35
-rw-r--r--application/palemoon/base/content/tabbrowser.xml26
-rw-r--r--application/palemoon/base/content/utilityOverlay.js56
-rw-r--r--application/palemoon/branding/official/locales/en-US/brand.properties6
-rw-r--r--application/palemoon/branding/official/pref/palemoon-branding.js4
-rw-r--r--application/palemoon/branding/unofficial/locales/en-US/brand.dtd2
-rw-r--r--application/palemoon/branding/unofficial/newmoon.desktop352
-rw-r--r--application/palemoon/branding/unstable/locales/en-US/brand.properties6
-rw-r--r--application/palemoon/components/permissions/aboutPermissions.js38
-rw-r--r--application/palemoon/components/permissions/aboutPermissions.xul2
-rw-r--r--application/palemoon/components/places/content/controller.js5
-rw-r--r--application/palemoon/components/preferences/applications.js105
-rw-r--r--application/palemoon/config/version.txt2
-rw-r--r--application/palemoon/locales/en-US/chrome/browser/browser.properties13
-rw-r--r--application/palemoon/locales/en-US/chrome/browser/downloads/downloads.properties4
-rw-r--r--application/palemoon/locales/en-US/chrome/browser/preferences/preferences.properties7
-rw-r--r--application/palemoon/locales/en-US/chrome/overrides/appstrings.properties2
-rw-r--r--application/palemoon/locales/en-US/chrome/overrides/netError.dtd12
-rw-r--r--application/palemoon/locales/en-US/pdfviewer/chrome.properties18
-rw-r--r--application/palemoon/locales/en-US/pdfviewer/viewer.properties124
-rw-r--r--application/palemoon/locales/jar.mn3
-rw-r--r--application/palemoon/themes/linux/permissions/aboutPermissions.css5
-rw-r--r--application/palemoon/themes/osx/browser.css330
-rw-r--r--application/palemoon/themes/osx/jar.mn7
-rw-r--r--application/palemoon/themes/osx/panel-expander-closed.pngbin0 -> 155 bytes
-rw-r--r--application/palemoon/themes/osx/panel-expander-closed@2x.pngbin0 -> 362 bytes
-rw-r--r--application/palemoon/themes/osx/panel-expander-open.pngbin0 -> 155 bytes
-rw-r--r--application/palemoon/themes/osx/panel-expander-open@2x.pngbin0 -> 356 bytes
-rw-r--r--application/palemoon/themes/osx/panel-plus-sign.pngbin0 -> 212 bytes
-rw-r--r--application/palemoon/themes/osx/permissions/aboutPermissions.css5
-rw-r--r--application/palemoon/themes/osx/privatebrowsing-mask.pngbin0 -> 1074 bytes
-rw-r--r--application/palemoon/themes/osx/privatebrowsing-mask@2x.pngbin0 -> 2639 bytes
-rw-r--r--application/palemoon/themes/windows/permissions/aboutPermissions.css5
-rw-r--r--caps/nsScriptSecurityManager.cpp3
-rw-r--r--config/milestone.txt2
-rw-r--r--devtools/client/themes/webconsole.css2
-rw-r--r--dom/base/Element.cpp36
-rw-r--r--dom/base/Element.h2
-rw-r--r--dom/base/nsImageLoadingContent.cpp36
-rw-r--r--dom/base/nsImageLoadingContent.h10
-rw-r--r--dom/bindings/Bindings.conf5
-rw-r--r--dom/bindings/test/test_dom_xrays.html2
-rw-r--r--dom/canvas/WebGLContextExtensions.cpp8
-rw-r--r--dom/canvas/WebGLContextState.cpp12
-rw-r--r--dom/canvas/WebGLContextUtils.cpp12
-rw-r--r--dom/canvas/WebGLContextUtils.h2
-rw-r--r--dom/canvas/WebGLExtensionDebugGet.cpp79
-rw-r--r--dom/canvas/WebGLExtensions.h14
-rw-r--r--dom/canvas/WebGLShaderValidator.cpp68
-rw-r--r--dom/canvas/WebGLShaderValidator.h6
-rw-r--r--dom/canvas/WebGLTypes.h1
-rw-r--r--dom/canvas/moz.build1
-rw-r--r--dom/events/DataTransfer.cpp17
-rw-r--r--dom/events/DataTransfer.h3
-rw-r--r--dom/html/HTMLMediaElement.cpp2
-rw-r--r--dom/html/nsHTMLDocument.cpp6
-rw-r--r--dom/locales/en-US/chrome/security/security.properties1
-rw-r--r--dom/media/fmp4/MP4Demuxer.cpp9
-rw-r--r--dom/webidl/DataTransfer.webidl2
-rw-r--r--dom/webidl/Element.webidl2
-rw-r--r--dom/webidl/Event.webidl2
-rw-r--r--dom/webidl/HTMLDocument.webidl2
-rw-r--r--dom/webidl/WebGLRenderingContext.webidl9
-rw-r--r--editor/libeditor/TextEditor.cpp2
-rw-r--r--gfx/2d/image_operations.cpp25
-rwxr-xr-xgfx/angle/BUILD.gn98
-rwxr-xr-xgfx/angle/CONTRIBUTORS6
-rwxr-xr-xgfx/angle/DEPS43
-rwxr-xr-xgfx/angle/include/EGL/eglext.h22
-rwxr-xr-xgfx/angle/include/GLES2/gl2ext.h147
-rwxr-xr-xgfx/angle/include/GLSLANG/ShaderLang.h584
-rwxr-xr-xgfx/angle/include/GLSLANG/ShaderVars.h20
-rwxr-xr-xgfx/angle/include/export.h6
-rwxr-xr-xgfx/angle/moz.build17
-rwxr-xr-xgfx/angle/src/angle.gyp13
-rwxr-xr-xgfx/angle/src/commit.h6
-rwxr-xr-xgfx/angle/src/common/BitSetIterator.h1
-rwxr-xr-xgfx/angle/src/common/angleutils.h8
-rwxr-xr-xgfx/angle/src/common/debug.cpp5
-rwxr-xr-xgfx/angle/src/common/debug.h90
-rwxr-xr-xgfx/angle/src/common/mathutil.cpp18
-rwxr-xr-xgfx/angle/src/common/mathutil.h43
-rwxr-xr-xgfx/angle/src/common/third_party/numerics/base/logging.h4
-rwxr-xr-xgfx/angle/src/common/third_party/numerics/base/numerics/safe_conversions_impl.h2
-rwxr-xr-xgfx/angle/src/common/utilities.cpp37
-rwxr-xr-xgfx/angle/src/common/utilities.h70
-rwxr-xr-xgfx/angle/src/compiler.gypi106
-rw-r--r--gfx/angle/src/compiler/fuzz/translator_fuzzer.cpp161
-rwxr-xr-xgfx/angle/src/compiler/preprocessor/64bit-tokenizer-safety.patch104
-rwxr-xr-xgfx/angle/src/compiler/preprocessor/DiagnosticsBase.cpp12
-rwxr-xr-xgfx/angle/src/compiler/preprocessor/DiagnosticsBase.h1
-rwxr-xr-xgfx/angle/src/compiler/preprocessor/DirectiveHandlerBase.cpp2
-rwxr-xr-xgfx/angle/src/compiler/preprocessor/DirectiveParser.cpp65
-rwxr-xr-xgfx/angle/src/compiler/preprocessor/DirectiveParser.h8
-rwxr-xr-xgfx/angle/src/compiler/preprocessor/ExpressionParser.cpp69
-rwxr-xr-xgfx/angle/src/compiler/preprocessor/ExpressionParser.h8
-rwxr-xr-xgfx/angle/src/compiler/preprocessor/ExpressionParser.y54
-rwxr-xr-xgfx/angle/src/compiler/preprocessor/Input.cpp7
-rwxr-xr-xgfx/angle/src/compiler/preprocessor/Input.h2
-rwxr-xr-xgfx/angle/src/compiler/preprocessor/Lexer.cpp2
-rwxr-xr-xgfx/angle/src/compiler/preprocessor/Lexer.h4
-rwxr-xr-xgfx/angle/src/compiler/preprocessor/Macro.cpp12
-rwxr-xr-xgfx/angle/src/compiler/preprocessor/Macro.h8
-rwxr-xr-xgfx/angle/src/compiler/preprocessor/MacroExpander.cpp151
-rwxr-xr-xgfx/angle/src/compiler/preprocessor/MacroExpander.h38
-rwxr-xr-xgfx/angle/src/compiler/preprocessor/Preprocessor.cpp21
-rwxr-xr-xgfx/angle/src/compiler/preprocessor/Preprocessor.h8
-rwxr-xr-xgfx/angle/src/compiler/preprocessor/Token.cpp13
-rwxr-xr-xgfx/angle/src/compiler/preprocessor/Token.h4
-rwxr-xr-xgfx/angle/src/compiler/preprocessor/Tokenizer.cpp690
-rwxr-xr-xgfx/angle/src/compiler/preprocessor/Tokenizer.h7
-rwxr-xr-xgfx/angle/src/compiler/preprocessor/Tokenizer.l16
-rwxr-xr-xgfx/angle/src/compiler/preprocessor/numeric_lex.h3
-rw-r--r--gfx/angle/src/compiler/preprocessor/pp_utils.h18
-rwxr-xr-xgfx/angle/src/compiler/translator/64bit-lexer-safety.patch118
-rwxr-xr-xgfx/angle/src/compiler/translator/ASTMetadataHLSL.cpp33
-rwxr-xr-xgfx/angle/src/compiler/translator/ASTMetadataHLSL.h11
-rw-r--r--gfx/angle/src/compiler/translator/AddAndTrueToLoopCondition.cpp59
-rw-r--r--gfx/angle/src/compiler/translator/AddAndTrueToLoopCondition.h20
-rwxr-xr-xgfx/angle/src/compiler/translator/AddDefaultReturnStatements.cpp56
-rwxr-xr-xgfx/angle/src/compiler/translator/ArrayReturnValueToOutParameter.cpp92
-rwxr-xr-xgfx/angle/src/compiler/translator/ArrayReturnValueToOutParameter.h3
-rwxr-xr-xgfx/angle/src/compiler/translator/BaseTypes.h299
-rw-r--r--gfx/angle/src/compiler/translator/BreakVariableAliasingInInnerLoops.cpp106
-rw-r--r--gfx/angle/src/compiler/translator/BreakVariableAliasingInInnerLoops.h23
-rwxr-xr-xgfx/angle/src/compiler/translator/BuiltInFunctionEmulator.cpp5
-rwxr-xr-xgfx/angle/src/compiler/translator/BuiltInFunctionEmulator.h5
-rwxr-xr-xgfx/angle/src/compiler/translator/BuiltInFunctionEmulatorGLSL.cpp80
-rwxr-xr-xgfx/angle/src/compiler/translator/BuiltInFunctionEmulatorGLSL.h14
-rwxr-xr-xgfx/angle/src/compiler/translator/BuiltInFunctionEmulatorHLSL.cpp58
-rwxr-xr-xgfx/angle/src/compiler/translator/BuiltInFunctionEmulatorHLSL.h11
-rwxr-xr-xgfx/angle/src/compiler/translator/Cache.cpp6
-rwxr-xr-xgfx/angle/src/compiler/translator/Cache.h5
-rwxr-xr-xgfx/angle/src/compiler/translator/CallDAG.cpp185
-rwxr-xr-xgfx/angle/src/compiler/translator/CallDAG.h8
-rwxr-xr-xgfx/angle/src/compiler/translator/CodeGen.cpp90
-rwxr-xr-xgfx/angle/src/compiler/translator/Common.h5
-rwxr-xr-xgfx/angle/src/compiler/translator/Compiler.cpp504
-rwxr-xr-xgfx/angle/src/compiler/translator/Compiler.h76
-rw-r--r--gfx/angle/src/compiler/translator/ConstantUnion.cpp642
-rwxr-xr-xgfx/angle/src/compiler/translator/ConstantUnion.h373
-rwxr-xr-xgfx/angle/src/compiler/translator/DeferGlobalInitializers.cpp74
-rwxr-xr-xgfx/angle/src/compiler/translator/DeferGlobalInitializers.h7
-rwxr-xr-xgfx/angle/src/compiler/translator/Diagnostics.cpp5
-rwxr-xr-xgfx/angle/src/compiler/translator/Diagnostics.h5
-rwxr-xr-xgfx/angle/src/compiler/translator/DirectiveHandler.cpp5
-rwxr-xr-xgfx/angle/src/compiler/translator/DirectiveHandler.h4
-rwxr-xr-xgfx/angle/src/compiler/translator/EmulateGLFragColorBroadcast.cpp103
-rwxr-xr-xgfx/angle/src/compiler/translator/EmulateGLFragColorBroadcast.h5
-rwxr-xr-xgfx/angle/src/compiler/translator/EmulatePrecision.cpp71
-rwxr-xr-xgfx/angle/src/compiler/translator/EmulatePrecision.h8
-rwxr-xr-xgfx/angle/src/compiler/translator/ExpandIntegerPowExpressions.cpp11
-rwxr-xr-xgfx/angle/src/compiler/translator/ExtensionGLSL.cpp5
-rwxr-xr-xgfx/angle/src/compiler/translator/ExtensionGLSL.h5
-rwxr-xr-xgfx/angle/src/compiler/translator/ForLoopUnroll.cpp7
-rwxr-xr-xgfx/angle/src/compiler/translator/ForLoopUnroll.h5
-rwxr-xr-xgfx/angle/src/compiler/translator/InfoSink.cpp5
-rwxr-xr-xgfx/angle/src/compiler/translator/InfoSink.h5
-rwxr-xr-xgfx/angle/src/compiler/translator/Initialize.cpp187
-rwxr-xr-xgfx/angle/src/compiler/translator/Initialize.h5
-rwxr-xr-xgfx/angle/src/compiler/translator/InitializeDll.cpp5
-rwxr-xr-xgfx/angle/src/compiler/translator/InitializeDll.h3
-rwxr-xr-xgfx/angle/src/compiler/translator/InitializeParseContext.cpp4
-rwxr-xr-xgfx/angle/src/compiler/translator/InitializeParseContext.h4
-rwxr-xr-xgfx/angle/src/compiler/translator/InitializeVariables.cpp183
-rwxr-xr-xgfx/angle/src/compiler/translator/InitializeVariables.h15
-rwxr-xr-xgfx/angle/src/compiler/translator/IntermNode.cpp2054
-rwxr-xr-xgfx/angle/src/compiler/translator/IntermNode.h403
-rwxr-xr-xgfx/angle/src/compiler/translator/IntermNodePatternMatcher.cpp23
-rwxr-xr-xgfx/angle/src/compiler/translator/IntermNodePatternMatcher.h9
-rwxr-xr-xgfx/angle/src/compiler/translator/IntermTraverse.cpp271
-rwxr-xr-xgfx/angle/src/compiler/translator/Intermediate.cpp222
-rwxr-xr-xgfx/angle/src/compiler/translator/Intermediate.h52
-rwxr-xr-xgfx/angle/src/compiler/translator/LoopInfo.cpp7
-rwxr-xr-xgfx/angle/src/compiler/translator/LoopInfo.h5
-rwxr-xr-xgfx/angle/src/compiler/translator/Operator.cpp2
-rwxr-xr-xgfx/angle/src/compiler/translator/Operator.h5
-rwxr-xr-xgfx/angle/src/compiler/translator/OutputESSL.cpp13
-rwxr-xr-xgfx/angle/src/compiler/translator/OutputESSL.h23
-rwxr-xr-xgfx/angle/src/compiler/translator/OutputGLSL.cpp27
-rwxr-xr-xgfx/angle/src/compiler/translator/OutputGLSL.h15
-rwxr-xr-xgfx/angle/src/compiler/translator/OutputGLSLBase.cpp891
-rwxr-xr-xgfx/angle/src/compiler/translator/OutputGLSLBase.h31
-rwxr-xr-xgfx/angle/src/compiler/translator/OutputHLSL.cpp854
-rwxr-xr-xgfx/angle/src/compiler/translator/OutputHLSL.h25
-rwxr-xr-xgfx/angle/src/compiler/translator/ParseContext.cpp1775
-rwxr-xr-xgfx/angle/src/compiler/translator/ParseContext.h292
-rwxr-xr-xgfx/angle/src/compiler/translator/PoolAlloc.cpp94
-rwxr-xr-xgfx/angle/src/compiler/translator/PoolAlloc.h18
-rwxr-xr-xgfx/angle/src/compiler/translator/PruneEmptyDeclarations.cpp105
-rwxr-xr-xgfx/angle/src/compiler/translator/PruneEmptyDeclarations.h3
-rw-r--r--gfx/angle/src/compiler/translator/QualifierTypes.cpp727
-rw-r--r--gfx/angle/src/compiler/translator/QualifierTypes.h191
-rwxr-xr-xgfx/angle/src/compiler/translator/RecordConstantPrecision.cpp10
-rwxr-xr-xgfx/angle/src/compiler/translator/RecordConstantPrecision.h3
-rwxr-xr-xgfx/angle/src/compiler/translator/RegenerateStructNames.cpp30
-rwxr-xr-xgfx/angle/src/compiler/translator/RegenerateStructNames.h7
-rwxr-xr-xgfx/angle/src/compiler/translator/RemoveDynamicIndexing.cpp73
-rwxr-xr-xgfx/angle/src/compiler/translator/RemoveDynamicIndexing.h5
-rw-r--r--gfx/angle/src/compiler/translator/RemoveInvariantDeclaration.cpp47
-rw-r--r--gfx/angle/src/compiler/translator/RemoveInvariantDeclaration.h18
-rwxr-xr-xgfx/angle/src/compiler/translator/RemovePow.cpp13
-rwxr-xr-xgfx/angle/src/compiler/translator/RemovePow.h3
-rwxr-xr-xgfx/angle/src/compiler/translator/RemoveSwitchFallThrough.cpp31
-rwxr-xr-xgfx/angle/src/compiler/translator/RemoveSwitchFallThrough.h21
-rw-r--r--gfx/angle/src/compiler/translator/RenameFunction.h36
-rwxr-xr-xgfx/angle/src/compiler/translator/RewriteDoWhile.cpp44
-rwxr-xr-xgfx/angle/src/compiler/translator/RewriteDoWhile.h3
-rwxr-xr-xgfx/angle/src/compiler/translator/RewriteElseBlocks.cpp87
-rwxr-xr-xgfx/angle/src/compiler/translator/RewriteTexelFetchOffset.cpp54
-rwxr-xr-xgfx/angle/src/compiler/translator/RewriteTexelFetchOffset.h1
-rw-r--r--gfx/angle/src/compiler/translator/RewriteUnaryMinusOperatorInt.cpp112
-rw-r--r--gfx/angle/src/compiler/translator/RewriteUnaryMinusOperatorInt.h20
-rwxr-xr-xgfx/angle/src/compiler/translator/ScalarizeVecAndMatConstructorArgs.cpp187
-rwxr-xr-xgfx/angle/src/compiler/translator/ScalarizeVecAndMatConstructorArgs.h46
-rwxr-xr-xgfx/angle/src/compiler/translator/SeparateArrayInitialization.cpp59
-rwxr-xr-xgfx/angle/src/compiler/translator/SeparateArrayInitialization.h3
-rwxr-xr-xgfx/angle/src/compiler/translator/SeparateDeclarations.cpp43
-rwxr-xr-xgfx/angle/src/compiler/translator/SeparateDeclarations.h3
-rwxr-xr-xgfx/angle/src/compiler/translator/SeparateExpressionsReturningArrays.cpp14
-rwxr-xr-xgfx/angle/src/compiler/translator/SeparateExpressionsReturningArrays.h3
-rwxr-xr-xgfx/angle/src/compiler/translator/ShaderLang.cpp173
-rwxr-xr-xgfx/angle/src/compiler/translator/SimplifyLoopConditions.cpp32
-rwxr-xr-xgfx/angle/src/compiler/translator/SimplifyLoopConditions.h3
-rwxr-xr-xgfx/angle/src/compiler/translator/SplitSequenceOperator.cpp34
-rwxr-xr-xgfx/angle/src/compiler/translator/SplitSequenceOperator.h5
-rwxr-xr-xgfx/angle/src/compiler/translator/SymbolTable.cpp72
-rwxr-xr-xgfx/angle/src/compiler/translator/SymbolTable.h33
-rwxr-xr-xgfx/angle/src/compiler/translator/TextureFunctionHLSL.cpp55
-rwxr-xr-xgfx/angle/src/compiler/translator/TranslatorESSL.cpp19
-rwxr-xr-xgfx/angle/src/compiler/translator/TranslatorESSL.h9
-rwxr-xr-xgfx/angle/src/compiler/translator/TranslatorGLSL.cpp43
-rwxr-xr-xgfx/angle/src/compiler/translator/TranslatorGLSL.h11
-rwxr-xr-xgfx/angle/src/compiler/translator/TranslatorHLSL.cpp24
-rwxr-xr-xgfx/angle/src/compiler/translator/TranslatorHLSL.h9
-rwxr-xr-xgfx/angle/src/compiler/translator/Types.cpp157
-rwxr-xr-xgfx/angle/src/compiler/translator/Types.h232
-rwxr-xr-xgfx/angle/src/compiler/translator/UnfoldShortCircuitAST.cpp17
-rwxr-xr-xgfx/angle/src/compiler/translator/UnfoldShortCircuitAST.h5
-rwxr-xr-xgfx/angle/src/compiler/translator/UnfoldShortCircuitToIf.cpp40
-rwxr-xr-xgfx/angle/src/compiler/translator/UnfoldShortCircuitToIf.h3
-rw-r--r--gfx/angle/src/compiler/translator/UseInterfaceBlockFields.cpp163
-rw-r--r--gfx/angle/src/compiler/translator/UseInterfaceBlockFields.h30
-rwxr-xr-xgfx/angle/src/compiler/translator/UtilsHLSL.cpp2
-rwxr-xr-xgfx/angle/src/compiler/translator/ValidateGlobalInitializer.cpp4
-rwxr-xr-xgfx/angle/src/compiler/translator/ValidateGlobalInitializer.h5
-rwxr-xr-xgfx/angle/src/compiler/translator/ValidateLimitations.cpp11
-rwxr-xr-xgfx/angle/src/compiler/translator/ValidateLimitations.h5
-rwxr-xr-xgfx/angle/src/compiler/translator/ValidateMaxParameters.cpp5
-rwxr-xr-xgfx/angle/src/compiler/translator/ValidateMaxParameters.h5
-rwxr-xr-xgfx/angle/src/compiler/translator/ValidateOutputs.cpp5
-rwxr-xr-xgfx/angle/src/compiler/translator/ValidateOutputs.h5
-rwxr-xr-xgfx/angle/src/compiler/translator/ValidateSwitch.cpp21
-rwxr-xr-xgfx/angle/src/compiler/translator/ValidateSwitch.h13
-rwxr-xr-xgfx/angle/src/compiler/translator/VariableInfo.cpp71
-rwxr-xr-xgfx/angle/src/compiler/translator/VariableInfo.h2
-rwxr-xr-xgfx/angle/src/compiler/translator/VersionGLSL.cpp27
-rwxr-xr-xgfx/angle/src/compiler/translator/VersionGLSL.h6
-rwxr-xr-xgfx/angle/src/compiler/translator/blocklayout.h6
-rwxr-xr-xgfx/angle/src/compiler/translator/blocklayoutHLSL.h7
-rw-r--r--gfx/angle/src/compiler/translator/depgraph/DependencyGraph.cpp95
-rw-r--r--gfx/angle/src/compiler/translator/depgraph/DependencyGraph.h199
-rw-r--r--gfx/angle/src/compiler/translator/depgraph/DependencyGraphBuilder.cpp255
-rw-r--r--gfx/angle/src/compiler/translator/depgraph/DependencyGraphBuilder.h199
-rw-r--r--gfx/angle/src/compiler/translator/depgraph/DependencyGraphOutput.cpp64
-rw-r--r--gfx/angle/src/compiler/translator/depgraph/DependencyGraphOutput.h31
-rw-r--r--gfx/angle/src/compiler/translator/depgraph/DependencyGraphTraverse.cpp69
-rwxr-xr-xgfx/angle/src/compiler/translator/glslang.h14
-rwxr-xr-xgfx/angle/src/compiler/translator/glslang.l75
-rwxr-xr-xgfx/angle/src/compiler/translator/glslang.y544
-rwxr-xr-xgfx/angle/src/compiler/translator/glslang_lex.cpp195
-rwxr-xr-xgfx/angle/src/compiler/translator/glslang_tab.cpp2467
-rwxr-xr-xgfx/angle/src/compiler/translator/glslang_tab.h294
-rwxr-xr-xgfx/angle/src/compiler/translator/intermOut.cpp426
-rwxr-xr-xgfx/angle/src/compiler/translator/length_limits.h5
-rw-r--r--gfx/angle/src/compiler/translator/timing/RestrictFragmentShaderTiming.cpp130
-rw-r--r--gfx/angle/src/compiler/translator/timing/RestrictFragmentShaderTiming.h39
-rw-r--r--gfx/angle/src/compiler/translator/timing/RestrictVertexShaderTiming.cpp17
-rw-r--r--gfx/angle/src/compiler/translator/timing/RestrictVertexShaderTiming.h32
-rwxr-xr-xgfx/angle/src/compiler/translator/util.cpp84
-rwxr-xr-xgfx/angle/src/compiler/translator/util.h13
-rwxr-xr-xgfx/angle/src/image_util/loadimage_etc.cpp4
-rwxr-xr-xgfx/angle/src/libANGLE/Buffer.cpp116
-rwxr-xr-xgfx/angle/src/libANGLE/Buffer.h72
-rwxr-xr-xgfx/angle/src/libANGLE/Caps.cpp254
-rwxr-xr-xgfx/angle/src/libANGLE/Caps.h47
-rwxr-xr-xgfx/angle/src/libANGLE/Compiler.cpp30
-rwxr-xr-xgfx/angle/src/libANGLE/Context.cpp470
-rwxr-xr-xgfx/angle/src/libANGLE/Context.h61
-rwxr-xr-xgfx/angle/src/libANGLE/ContextState.cpp94
-rwxr-xr-xgfx/angle/src/libANGLE/ContextState.h57
-rwxr-xr-xgfx/angle/src/libANGLE/Display.cpp43
-rwxr-xr-xgfx/angle/src/libANGLE/Display.h14
-rwxr-xr-xgfx/angle/src/libANGLE/HandleAllocator.cpp21
-rwxr-xr-xgfx/angle/src/libANGLE/HandleAllocator.h1
-rwxr-xr-xgfx/angle/src/libANGLE/HandleAllocator_unittest.cpp16
-rwxr-xr-xgfx/angle/src/libANGLE/HandleRangeAllocator.cpp1
-rwxr-xr-xgfx/angle/src/libANGLE/ImageIndex.cpp27
-rwxr-xr-xgfx/angle/src/libANGLE/ImageIndex.h1
-rwxr-xr-xgfx/angle/src/libANGLE/ImageIndexIterator_unittest.cpp8
-rwxr-xr-xgfx/angle/src/libANGLE/Path.h4
-rwxr-xr-xgfx/angle/src/libANGLE/Program.cpp242
-rwxr-xr-xgfx/angle/src/libANGLE/Program.h20
-rwxr-xr-xgfx/angle/src/libANGLE/Renderbuffer.cpp7
-rwxr-xr-xgfx/angle/src/libANGLE/Renderbuffer.h3
-rwxr-xr-xgfx/angle/src/libANGLE/ResourceManager.cpp19
-rwxr-xr-xgfx/angle/src/libANGLE/ResourceManager.h7
-rwxr-xr-xgfx/angle/src/libANGLE/ResourceManager_unittest.cpp2
-rwxr-xr-xgfx/angle/src/libANGLE/Sampler.cpp16
-rwxr-xr-xgfx/angle/src/libANGLE/Sampler.h6
-rwxr-xr-xgfx/angle/src/libANGLE/Shader.cpp36
-rwxr-xr-xgfx/angle/src/libANGLE/Shader.h5
-rwxr-xr-xgfx/angle/src/libANGLE/State.cpp47
-rwxr-xr-xgfx/angle/src/libANGLE/State.h19
-rwxr-xr-xgfx/angle/src/libANGLE/Surface.cpp18
-rwxr-xr-xgfx/angle/src/libANGLE/Surface.h4
-rwxr-xr-xgfx/angle/src/libANGLE/Surface_unittest.cpp1
-rwxr-xr-xgfx/angle/src/libANGLE/Texture.cpp67
-rwxr-xr-xgfx/angle/src/libANGLE/Texture.h42
-rw-r--r--gfx/angle/src/libANGLE/Thread.cpp88
-rw-r--r--gfx/angle/src/libANGLE/Thread.h57
-rwxr-xr-xgfx/angle/src/libANGLE/TransformFeedback_unittest.cpp9
-rwxr-xr-xgfx/angle/src/libANGLE/Uniform.cpp5
-rwxr-xr-xgfx/angle/src/libANGLE/Uniform.h1
-rwxr-xr-xgfx/angle/src/libANGLE/Version.h7
-rwxr-xr-xgfx/angle/src/libANGLE/Version.inl32
-rwxr-xr-xgfx/angle/src/libANGLE/VertexArray.h3
-rwxr-xr-xgfx/angle/src/libANGLE/VertexAttribute.h3
-rwxr-xr-xgfx/angle/src/libANGLE/VertexAttribute.inl27
-rw-r--r--gfx/angle/src/libANGLE/Workarounds.h25
-rwxr-xr-xgfx/angle/src/libANGLE/angletypes.cpp3
-rwxr-xr-xgfx/angle/src/libANGLE/angletypes.h91
-rw-r--r--gfx/angle/src/libANGLE/es3_copy_conversion_formats.json44
-rw-r--r--gfx/angle/src/libANGLE/es3_copy_conversion_table_autogen.cpp171
-rw-r--r--gfx/angle/src/libANGLE/es3_format_type_combinations.json171
-rw-r--r--gfx/angle/src/libANGLE/format_map_autogen.cpp1530
-rw-r--r--gfx/angle/src/libANGLE/format_map_data.json130
-rwxr-xr-xgfx/angle/src/libANGLE/formatutils.cpp508
-rwxr-xr-xgfx/angle/src/libANGLE/formatutils.h58
-rw-r--r--gfx/angle/src/libANGLE/gen_copy_conversion_table.py91
-rw-r--r--gfx/angle/src/libANGLE/gen_format_map.py187
-rwxr-xr-xgfx/angle/src/libANGLE/moz.build56
-rwxr-xr-xgfx/angle/src/libANGLE/queryconversions.cpp11
-rwxr-xr-xgfx/angle/src/libANGLE/queryconversions.h28
-rw-r--r--gfx/angle/src/libANGLE/queryutils.cpp772
-rw-r--r--gfx/angle/src/libANGLE/queryutils.h79
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/BufferImpl.h13
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/BufferImpl_mock.h8
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/DisplayImpl.cpp9
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/DisplayImpl.h4
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/EGLImplFactory.h3
-rw-r--r--gfx/angle/src/libANGLE/renderer/Format.cpp60
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/Format.h58
-rw-r--r--gfx/angle/src/libANGLE/renderer/Format_autogen.cpp1126
-rw-r--r--gfx/angle/src/libANGLE/renderer/Format_table_autogen.cpp157
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/FramebufferAttachmentObjectImpl.h6
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/GLImplFactory.h2
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/ProgramImpl.h13
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/ShaderImpl.h6
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/SurfaceImpl.cpp6
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/SurfaceImpl.h1
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/TextureImpl.cpp7
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/TextureImpl.h5
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/TextureImpl_mock.h8
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/BufferD3D.cpp10
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/BufferD3D.h2
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/DisplayD3D.cpp32
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/DisplayD3D.h7
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/DynamicHLSL.cpp12
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/FramebufferD3D.cpp18
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/HLSLCompiler.cpp5
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/ImageD3D.cpp10
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/ImageD3D.h2
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/ProgramD3D.cpp93
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/ProgramD3D.h2
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/RendererD3D.h12
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/ShaderD3D.cpp19
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/ShaderD3D.h6
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/SurfaceD3D.cpp44
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/SurfaceD3D.h7
-rw-r--r--gfx/angle/src/libANGLE/renderer/d3d/SwapChainD3D.cpp34
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/SwapChainD3D.h16
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/TextureD3D.cpp668
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/TextureD3D.h3
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/VaryingPacking.cpp36
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/VertexDataManager.cpp1
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/WorkaroundsD3D.h36
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d11/Blit11.cpp143
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d11/Buffer11.cpp360
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d11/Buffer11.h39
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d11/Clear11.cpp537
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d11/Context11.cpp4
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d11/Context11.h2
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d11/Fence11.cpp54
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d11/Framebuffer11.cpp23
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d11/Framebuffer11.h2
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d11/Image11.cpp304
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d11/Query11.cpp66
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d11/RenderStateCache.cpp3
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d11/RenderTarget11.cpp4
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp1234
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.h15
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d11/ShaderExecutable11.cpp1
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d11/StateManager11.cpp71
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.cpp49
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.h1
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d11/TextureStorage11.cpp733
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d11/TextureStorage11.h55
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d11/VertexArray11.cpp8
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d11/VertexBuffer11.cpp47
-rw-r--r--gfx/angle/src/libANGLE/renderer/d3d/d3d11/dxgi_format_data.json118
-rw-r--r--gfx/angle/src/libANGLE/renderer/d3d/d3d11/dxgi_format_map_autogen.cpp516
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d11/dxgi_support_data.json617
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d11/dxgi_support_table.cpp1303
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d11/formatutils11.cpp871
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d11/formatutils11.h45
-rw-r--r--gfx/angle/src/libANGLE/renderer/d3d/d3d11/gen_dxgi_format_table.py134
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d11/gen_dxgi_support_tables.py70
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d11/gen_texture_format_table.py49
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.cpp1589
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.h1
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d11/texture_format_table.cpp39
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d11/texture_format_table.h65
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d11/texture_format_table_autogen.cpp2540
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d9/Blit9.cpp73
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d9/Buffer9.cpp9
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d9/Buffer9.h19
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d9/Context9.cpp4
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d9/Context9.h2
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d9/Framebuffer9.cpp4
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d9/Image9.cpp21
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d9/Renderer9.cpp143
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d9/Renderer9.h13
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d9/StateManager9.cpp2
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d9/SwapChain9.cpp46
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d9/SwapChain9.h1
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d9/TextureStorage9.cpp4
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d9/VertexDeclarationCache.cpp2
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d9/formatutils9.cpp251
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d9/formatutils9.h17
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/d3d/d3d9/renderer9_utils.cpp11
-rw-r--r--gfx/angle/src/libANGLE/renderer/driver_utils.cpp81
-rw-r--r--gfx/angle/src/libANGLE/renderer/driver_utils.h57
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gen_angle_format_table.py97
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/BlitGL.cpp274
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/BlitGL.h12
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/BufferGL.cpp10
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/BufferGL.h8
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/ContextGL.cpp7
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/ContextGL.h2
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/DisplayGL.cpp15
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/DisplayGL.h7
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/FramebufferGL.cpp199
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/FramebufferGL.h19
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/FunctionsGL.cpp10
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/FunctionsGL.h2
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/ProgramGL.cpp12
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/RenderbufferGL.h6
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/RendererGL.cpp12
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/SamplerGL.cpp1
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/ShaderGL.cpp36
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/ShaderGL.h4
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/StateManagerGL.cpp62
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/StateManagerGL.h5
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/SurfaceGL.cpp7
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/SurfaceGL.h7
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/TextureGL.cpp472
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/TextureGL.h23
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/WorkaroundsGL.h55
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/cgl/DisplayCGL.h3
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/cgl/DisplayCGL.mm3
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/cgl/PbufferSurfaceCGL.h2
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/cgl/PbufferSurfaceCGL.mm5
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/cgl/WindowSurfaceCGL.h1
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/cgl/WindowSurfaceCGL.mm8
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/egl/SurfaceEGL.cpp4
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/egl/android/DisplayAndroid.cpp7
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/egl/android/DisplayAndroid.h3
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/egl/ozone/DisplayOzone.cpp9
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/egl/ozone/DisplayOzone.h3
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/formatutilsgl.cpp36
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/formatutilsgl.h10
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/glx/DisplayGLX.cpp5
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/glx/DisplayGLX.h3
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/renderergl_utils.cpp105
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/renderergl_utils.h9
-rw-r--r--gfx/angle/src/libANGLE/renderer/gl/wgl/D3DTextureSurfaceWGL.cpp384
-rw-r--r--gfx/angle/src/libANGLE/renderer/gl/wgl/D3DTextureSurfaceWGL.h86
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/wgl/DXGISwapChainWindowSurfaceWGL.cpp4
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/wgl/DXGISwapChainWindowSurfaceWGL.h1
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/wgl/DisplayWGL.cpp50
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/wgl/DisplayWGL.h9
-rw-r--r--gfx/angle/src/libANGLE/renderer/null/BufferNULL.cpp74
-rw-r--r--gfx/angle/src/libANGLE/renderer/null/BufferNULL.h43
-rw-r--r--gfx/angle/src/libANGLE/renderer/null/CompilerNULL.cpp37
-rw-r--r--gfx/angle/src/libANGLE/renderer/null/CompilerNULL.h32
-rw-r--r--gfx/angle/src/libANGLE/renderer/null/ContextNULL.cpp175
-rw-r--r--gfx/angle/src/libANGLE/renderer/null/ContextNULL.h95
-rw-r--r--gfx/angle/src/libANGLE/renderer/null/DeviceNULL.cpp48
-rw-r--r--gfx/angle/src/libANGLE/renderer/null/DeviceNULL.h32
-rw-r--r--gfx/angle/src/libANGLE/renderer/null/DisplayNULL.cpp168
-rw-r--r--gfx/angle/src/libANGLE/renderer/null/DisplayNULL.h82
-rw-r--r--gfx/angle/src/libANGLE/renderer/null/FenceNVNULL.cpp43
-rw-r--r--gfx/angle/src/libANGLE/renderer/null/FenceNVNULL.h31
-rw-r--r--gfx/angle/src/libANGLE/renderer/null/FenceSyncNULL.cpp49
-rw-r--r--gfx/angle/src/libANGLE/renderer/null/FenceSyncNULL.h32
-rw-r--r--gfx/angle/src/libANGLE/renderer/null/FramebufferNULL.cpp131
-rw-r--r--gfx/angle/src/libANGLE/renderer/null/FramebufferNULL.h70
-rw-r--r--gfx/angle/src/libANGLE/renderer/null/ImageNULL.cpp37
-rw-r--r--gfx/angle/src/libANGLE/renderer/null/ImageNULL.h30
-rw-r--r--gfx/angle/src/libANGLE/renderer/null/PathNULL.cpp40
-rw-r--r--gfx/angle/src/libANGLE/renderer/null/PathNULL.h35
-rw-r--r--gfx/angle/src/libANGLE/renderer/null/ProgramNULL.cpp212
-rw-r--r--gfx/angle/src/libANGLE/renderer/null/ProgramNULL.h101
-rw-r--r--gfx/angle/src/libANGLE/renderer/null/QueryNULL.cpp73
-rw-r--r--gfx/angle/src/libANGLE/renderer/null/QueryNULL.h36
-rw-r--r--gfx/angle/src/libANGLE/renderer/null/RenderbufferNULL.cpp46
-rw-r--r--gfx/angle/src/libANGLE/renderer/null/RenderbufferNULL.h34
-rw-r--r--gfx/angle/src/libANGLE/renderer/null/SamplerNULL.cpp25
-rw-r--r--gfx/angle/src/libANGLE/renderer/null/SamplerNULL.h27
-rw-r--r--gfx/angle/src/libANGLE/renderer/null/ShaderNULL.cpp44
-rw-r--r--gfx/angle/src/libANGLE/renderer/null/ShaderNULL.h35
-rw-r--r--gfx/angle/src/libANGLE/renderer/null/SurfaceNULL.cpp103
-rw-r--r--gfx/angle/src/libANGLE/renderer/null/SurfaceNULL.h46
-rw-r--r--gfx/angle/src/libANGLE/renderer/null/TextureNULL.cpp143
-rw-r--r--gfx/angle/src/libANGLE/renderer/null/TextureNULL.h89
-rw-r--r--gfx/angle/src/libANGLE/renderer/null/TransformFeedbackNULL.cpp57
-rw-r--r--gfx/angle/src/libANGLE/renderer/null/TransformFeedbackNULL.h35
-rw-r--r--gfx/angle/src/libANGLE/renderer/null/VertexArrayNULL.cpp25
-rw-r--r--gfx/angle/src/libANGLE/renderer/null/VertexArrayNULL.h27
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/renderer_utils.cpp21
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/renderer_utils.h22
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/vulkan/BufferVk.cpp6
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/vulkan/BufferVk.h6
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/vulkan/ContextVk.cpp4
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/vulkan/ContextVk.h2
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/vulkan/DisplayVk.cpp3
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/vulkan/DisplayVk.h3
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/vulkan/ProgramVk.cpp4
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/vulkan/ShaderVk.cpp4
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/vulkan/ShaderVk.h6
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/vulkan/TextureVk.cpp5
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/vulkan/TextureVk.h2
-rwxr-xr-xgfx/angle/src/libANGLE/validationEGL.cpp97
-rwxr-xr-xgfx/angle/src/libANGLE/validationEGL.h9
-rwxr-xr-xgfx/angle/src/libANGLE/validationES.cpp2973
-rwxr-xr-xgfx/angle/src/libANGLE/validationES.h312
-rwxr-xr-xgfx/angle/src/libANGLE/validationES2.cpp686
-rwxr-xr-xgfx/angle/src/libANGLE/validationES2.h73
-rwxr-xr-xgfx/angle/src/libANGLE/validationES3.cpp1124
-rwxr-xr-xgfx/angle/src/libANGLE/validationES3.h67
-rwxr-xr-xgfx/angle/src/libANGLE/validationES31.cpp38
-rwxr-xr-xgfx/angle/src/libANGLE/validationES31.h6
-rwxr-xr-xgfx/angle/src/libANGLE/validationES_unittest.cpp20
-rwxr-xr-xgfx/angle/src/libEGL.gypi2
-rwxr-xr-xgfx/angle/src/libEGL/libEGL.cpp8
-rwxr-xr-xgfx/angle/src/libEGL/libEGL.def1
-rwxr-xr-xgfx/angle/src/libEGL/moz.build8
-rwxr-xr-xgfx/angle/src/libGLESv2.gypi74
-rwxr-xr-xgfx/angle/src/libGLESv2/entry_points_egl.cpp467
-rwxr-xr-xgfx/angle/src/libGLESv2/entry_points_egl_ext.cpp260
-rwxr-xr-xgfx/angle/src/libGLESv2/entry_points_egl_ext.h7
-rwxr-xr-xgfx/angle/src/libGLESv2/entry_points_gles_2_0.cpp1338
-rwxr-xr-xgfx/angle/src/libGLESv2/entry_points_gles_2_0_ext.cpp1494
-rwxr-xr-xgfx/angle/src/libGLESv2/entry_points_gles_2_0_ext.h332
-rwxr-xr-xgfx/angle/src/libGLESv2/entry_points_gles_3_0.cpp342
-rwxr-xr-xgfx/angle/src/libGLESv2/global_state.cpp250
-rwxr-xr-xgfx/angle/src/libGLESv2/global_state.h28
-rwxr-xr-xgfx/angle/src/libGLESv2/moz.build8
-rwxr-xr-xgfx/angle/src/tests/BUILD.gn7
-rwxr-xr-xgfx/angle/src/tests/angle_end2end_tests.gypi6
-rwxr-xr-xgfx/angle/src/tests/angle_perftests.gypi1
-rwxr-xr-xgfx/angle/src/tests/angle_unittests.gypi6
-rwxr-xr-xgfx/angle/src/tests/angle_unittests_main.cpp8
-rwxr-xr-xgfx/angle/src/tests/angle_unittests_utils.h7
-rwxr-xr-xgfx/angle/src/tests/compiler_tests/API_test.cpp4
-rw-r--r--gfx/angle/src/tests/compiler_tests/BuiltInFunctionEmulator_test.cpp43
-rwxr-xr-xgfx/angle/src/tests/compiler_tests/CollectVariables_test.cpp106
-rwxr-xr-xgfx/angle/src/tests/compiler_tests/ConstantFolding_test.cpp272
-rwxr-xr-xgfx/angle/src/tests/compiler_tests/DebugShaderPrecision_test.cpp22
-rwxr-xr-xgfx/angle/src/tests/compiler_tests/EXT_blend_func_extended_test.cpp12
-rwxr-xr-xgfx/angle/src/tests/compiler_tests/EmulateGLFragColorBroadcast_test.cpp2
-rwxr-xr-xgfx/angle/src/tests/compiler_tests/ExpressionLimit_test.cpp55
-rwxr-xr-xgfx/angle/src/tests/compiler_tests/FragDepth_test.cpp12
-rwxr-xr-xgfx/angle/src/tests/compiler_tests/GLSLCompatibilityOutput_test.cpp2
-rwxr-xr-xgfx/angle/src/tests/compiler_tests/IntermNode_test.cpp23
-rwxr-xr-xgfx/angle/src/tests/compiler_tests/MalformedShader_test.cpp749
-rwxr-xr-xgfx/angle/src/tests/compiler_tests/NV_draw_buffers_test.cpp2
-rwxr-xr-xgfx/angle/src/tests/compiler_tests/Pack_Unpack_test.cpp2
-rwxr-xr-xgfx/angle/src/tests/compiler_tests/PruneEmptyDeclarations_test.cpp2
-rwxr-xr-xgfx/angle/src/tests/compiler_tests/PruneUnusedFunctions_test.cpp2
-rw-r--r--gfx/angle/src/tests/compiler_tests/QualificationOrderESSL31_test.cpp184
-rw-r--r--gfx/angle/src/tests/compiler_tests/QualificationOrder_test.cpp571
-rwxr-xr-xgfx/angle/src/tests/compiler_tests/RecordConstantPrecision_test.cpp10
-rwxr-xr-xgfx/angle/src/tests/compiler_tests/RemovePow_test.cpp9
-rwxr-xr-xgfx/angle/src/tests/compiler_tests/ShCompile_test.cpp18
-rwxr-xr-xgfx/angle/src/tests/compiler_tests/ShaderExtension_test.cpp12
-rw-r--r--gfx/angle/src/tests/compiler_tests/ShaderImage_test.cpp259
-rwxr-xr-xgfx/angle/src/tests/compiler_tests/ShaderVariable_test.cpp66
-rwxr-xr-xgfx/angle/src/tests/compiler_tests/TypeTracking_test.cpp30
-rwxr-xr-xgfx/angle/src/tests/compiler_tests/UnrollFlatten_test.cpp2
-rwxr-xr-xgfx/angle/src/tests/compiler_tests/WorkGroupSize_test.cpp10
-rwxr-xr-xgfx/angle/src/tests/deqp.gypi14
-rwxr-xr-xgfx/angle/src/tests/deqp_support/angle_deqp_gtest.cpp157
-rwxr-xr-xgfx/angle/src/tests/deqp_support/angle_deqp_gtest_main.cpp9
-rwxr-xr-xgfx/angle/src/tests/deqp_support/angle_deqp_libtester.h1
-rwxr-xr-xgfx/angle/src/tests/deqp_support/angle_deqp_libtester_main.cpp32
-rwxr-xr-xgfx/angle/src/tests/deqp_support/deqp_egl_test_expectations.txt128
-rwxr-xr-xgfx/angle/src/tests/deqp_support/deqp_gles2_test_expectations.txt70
-rwxr-xr-xgfx/angle/src/tests/deqp_support/deqp_gles31_test_expectations.txt11505
-rwxr-xr-xgfx/angle/src/tests/deqp_support/deqp_gles3_test_expectations.txt18
-rw-r--r--gfx/angle/src/tests/gl_tests/BindGeneratesResourceTest.cpp123
-rwxr-xr-xgfx/angle/src/tests/gl_tests/BlendMinMaxTest.cpp79
-rwxr-xr-xgfx/angle/src/tests/gl_tests/BufferDataTest.cpp56
-rw-r--r--gfx/angle/src/tests/gl_tests/CopyCompressedTextureTest.cpp369
-rwxr-xr-xgfx/angle/src/tests/gl_tests/D3D11EmulatedIndexedBufferTest.cpp9
-rwxr-xr-xgfx/angle/src/tests/gl_tests/D3D11FormatTablesTest.cpp14
-rw-r--r--gfx/angle/src/tests/gl_tests/D3DTextureTest.cpp326
-rwxr-xr-xgfx/angle/src/tests/gl_tests/DrawBuffersTest.cpp21
-rwxr-xr-xgfx/angle/src/tests/gl_tests/ETCTextureTest.cpp8
-rwxr-xr-xgfx/angle/src/tests/gl_tests/GLSLTest.cpp188
-rwxr-xr-xgfx/angle/src/tests/gl_tests/MipmapTest.cpp10
-rwxr-xr-xgfx/angle/src/tests/gl_tests/MultisampleCompatibilityTest.cpp140
-rwxr-xr-xgfx/angle/src/tests/gl_tests/ReadPixelsTest.cpp145
-rw-r--r--gfx/angle/src/tests/gl_tests/RobustClientMemoryTest.cpp385
-rw-r--r--gfx/angle/src/tests/gl_tests/SRGBFramebufferTest.cpp141
-rwxr-xr-xgfx/angle/src/tests/gl_tests/SRGBTextureTest.cpp122
-rwxr-xr-xgfx/angle/src/tests/gl_tests/SwizzleTest.cpp31
-rwxr-xr-xgfx/angle/src/tests/gl_tests/TextureTest.cpp248
-rwxr-xr-xgfx/angle/src/tests/gl_tests/TimerQueriesTest.cpp7
-rwxr-xr-xgfx/angle/src/tests/gl_tests/TransformFeedbackTest.cpp77
-rwxr-xr-xgfx/angle/src/tests/gl_tests/UniformBufferTest.cpp242
-rwxr-xr-xgfx/angle/src/tests/gl_tests/UniformTest.cpp52
-rwxr-xr-xgfx/angle/src/tests/gl_tests/VertexAttributeTest.cpp2
-rw-r--r--gfx/angle/src/tests/gl_tests/WebGLCompatibilityTest.cpp154
-rwxr-xr-xgfx/angle/src/tests/perf_tests/IndexDataManagerTest.cpp57
-rw-r--r--gfx/angle/src/tests/perf_tests/TexturesPerf.cpp293
-rwxr-xr-xgfx/angle/src/tests/preprocessor_tests/define_test.cpp49
-rwxr-xr-xgfx/angle/src/tests/preprocessor_tests/if_test.cpp94
-rwxr-xr-xgfx/angle/src/tests/test_utils/ANGLETest.cpp71
-rwxr-xr-xgfx/angle/src/tests/test_utils/ANGLETest.h45
-rwxr-xr-xgfx/angle/src/tests/test_utils/compiler_test.cpp98
-rwxr-xr-xgfx/angle/src/tests/test_utils/compiler_test.h29
-rwxr-xr-xgfx/angle/src/tests/test_utils/gl_raii.h1
-rwxr-xr-xgfx/angle/src/tests/tests.gyp40
-rwxr-xr-xgfx/angle/src/tests/third_party/gpu_test_expectations/HowToMakeChanges.md2
-rwxr-xr-xgfx/angle/src/tests/third_party/gpu_test_expectations/angle-mods.patch83
-rwxr-xr-xgfx/angle/src/tests/third_party/gpu_test_expectations/gpu_test_config.cc54
-rwxr-xr-xgfx/angle/src/third_party/compiler/ArrayBoundsClamper.cpp8
-rwxr-xr-xgfx/angle/src/third_party/compiler/ArrayBoundsClamper.h10
-rw-r--r--gfx/gl/GLContext.h2
-rw-r--r--gfx/gl/GLContextCGL.h2
-rw-r--r--gfx/gl/GLContextEAGL.h2
-rw-r--r--gfx/gl/GLContextEGL.h2
-rw-r--r--gfx/gl/GLContextGLX.h2
-rw-r--r--gfx/gl/GLContextProviderCGL.mm5
-rw-r--r--gfx/gl/GLContextProviderEAGL.mm5
-rw-r--r--gfx/gl/GLContextProviderEGL.cpp18
-rw-r--r--gfx/gl/GLContextProviderGLX.cpp21
-rw-r--r--gfx/gl/GLContextProviderWGL.cpp7
-rw-r--r--gfx/gl/GLContextWGL.h2
-rw-r--r--gfx/thebes/gfxPrefs.h1
-rw-r--r--js/src/jit/BaselineBailouts.cpp56
-rw-r--r--js/src/jit/JitFrameIterator.h2
-rw-r--r--js/src/vm/EnvironmentObject.h3
-rw-r--r--layout/base/nsDisplayList.cpp5
-rw-r--r--layout/base/nsLayoutUtils.cpp2
-rw-r--r--layout/generic/ReflowInput.cpp64
-rw-r--r--layout/generic/ReflowInput.h30
-rw-r--r--layout/generic/nsFrame.cpp14
-rw-r--r--layout/generic/nsFrame.h2
-rw-r--r--layout/reftests/css-grid/grid-auto-min-sizing-definite-001-ref.html47
-rw-r--r--layout/reftests/css-grid/grid-item-sizing-percent-001-ref.html4
-rw-r--r--layout/reftests/css-grid/grid-item-sizing-percent-001.html4
-rw-r--r--layout/reftests/css-grid/grid-item-sizing-px-001.html4
-rw-r--r--layout/reftests/css-grid/reftest.list2
-rw-r--r--layout/reftests/w3c-css/submitted/flexbox/flexbox-mbp-horiz-004-ref.xhtml28
-rw-r--r--layout/reftests/w3c-css/submitted/flexbox/flexbox-mbp-horiz-004.xhtml20
-rw-r--r--layout/svg/SVGFEImageFrame.cpp6
-rw-r--r--layout/svg/nsSVGImageFrame.cpp6
-rw-r--r--media/libstagefright/binding/Index.cpp64
-rw-r--r--media/libstagefright/binding/MoofParser.cpp479
-rw-r--r--media/libstagefright/binding/SinfParser.cpp24
-rw-r--r--media/libstagefright/binding/include/mp4_demuxer/Box.h6
-rw-r--r--media/libstagefright/binding/include/mp4_demuxer/BufferReader.h225
-rw-r--r--media/libstagefright/binding/include/mp4_demuxer/ByteReader.h38
-rw-r--r--media/libstagefright/binding/include/mp4_demuxer/Index.h3
-rw-r--r--media/libstagefright/binding/include/mp4_demuxer/MoofParser.h55
-rw-r--r--media/libstagefright/frameworks/av/media/libstagefright/MPEG4Extractor.cpp1
-rw-r--r--media/libstagefright/moz.build1
-rw-r--r--modules/libpref/init/all.js25
-rw-r--r--modules/zlib/src/ChangeLog55
-rw-r--r--modules/zlib/src/ChangeLog.moz4
-rw-r--r--modules/zlib/src/README6
-rw-r--r--modules/zlib/src/adler32.c21
-rw-r--r--modules/zlib/src/compress.c42
-rw-r--r--modules/zlib/src/crc32.c41
-rw-r--r--modules/zlib/src/deflate.c802
-rw-r--r--modules/zlib/src/deflate.h35
-rw-r--r--modules/zlib/src/gzguts.h23
-rw-r--r--modules/zlib/src/gzlib.c31
-rw-r--r--modules/zlib/src/gzread.c156
-rw-r--r--modules/zlib/src/gzwrite.c332
-rw-r--r--modules/zlib/src/infback.c4
-rw-r--r--modules/zlib/src/inffast.c85
-rw-r--r--modules/zlib/src/inflate.c122
-rw-r--r--modules/zlib/src/inflate.h11
-rw-r--r--modules/zlib/src/inftrees.c26
-rw-r--r--modules/zlib/src/mozzconf.h42
-rw-r--r--modules/zlib/src/trees.c99
-rw-r--r--modules/zlib/src/uncompr.c98
-rw-r--r--modules/zlib/src/zconf.h43
-rw-r--r--modules/zlib/src/zlib.h453
-rw-r--r--modules/zlib/src/zutil.c49
-rw-r--r--modules/zlib/src/zutil.h57
-rw-r--r--netwerk/base/nsFileStreams.cpp7
-rw-r--r--netwerk/protocol/http/nsCORSListenerProxy.cpp2
-rw-r--r--old-configure.in8
-rw-r--r--parser/html/nsHtml5AtomTable.cpp11
-rw-r--r--parser/html/nsHtml5AtomTable.h6
-rw-r--r--security/certverifier/ExtendedValidation.cpp10
-rwxr-xr-xsecurity/manager/locales/en-US/chrome/pipnss/pipnss.properties3
-rw-r--r--security/manager/ssl/TransportSecurityInfo.cpp2
-rw-r--r--security/manager/ssl/nsNSSErrors.cpp2
-rw-r--r--security/manager/ssl/nsSTSPreloadList.errors3757
-rw-r--r--security/manager/ssl/nsSTSPreloadList.inc4280
-rw-r--r--services/sync/modules/service.js3
-rw-r--r--services/sync/services-sync.js2
-rw-r--r--testing/mozharness/requirements.txt6
-rw-r--r--testing/web-platform/meta/html/dom/interfaces.html.ini3
-rw-r--r--toolkit/components/startup/nsAppStartup.cpp5
-rw-r--r--toolkit/components/thumbnails/BackgroundPageThumbs.jsm15
-rw-r--r--toolkit/components/thumbnails/PageThumbs.jsm13
-rw-r--r--toolkit/components/thumbnails/blankthumb.inc87
-rw-r--r--toolkit/components/thumbnails/moz.build6
-rw-r--r--toolkit/content/aboutSupport.js15
-rw-r--r--toolkit/content/tests/chrome/window_browser_drop.xul14
-rw-r--r--toolkit/locales/en-US/chrome/global/aboutRights.dtd2
-rw-r--r--toolkit/locales/en-US/chrome/global/aboutSupport.properties12
-rw-r--r--toolkit/modules/LightweightThemeConsumer.jsm10
-rw-r--r--toolkit/modules/Troubleshoot.jsm33
-rw-r--r--toolkit/modules/tests/browser/browser_Troubleshoot.js26
-rw-r--r--toolkit/mozapps/downloads/content/downloads.js10
-rw-r--r--toolkit/mozapps/extensions/content/newaddon.js7
-rw-r--r--toolkit/mozapps/extensions/jar.mn2
-rw-r--r--toolkit/mozapps/handling/content/dialog.xul5
-rw-r--r--toolkit/mozapps/handling/jar.mn2
-rw-r--r--toolkit/mozapps/webextensions/jar.mn2
-rw-r--r--toolkit/themes/shared/jar.inc.mn1
-rw-r--r--widget/windows/nsNativeThemeWin.cpp5
770 files changed, 30082 insertions, 60666 deletions
diff --git a/.eslintignore b/.eslintignore
index 0588cbb7c..6abbfe529 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -57,7 +57,7 @@ b2g/locales/en-US/b2g-l10n.js
# browser/ exclusions
browser/app/**
-browser/branding/**/firefox-branding.js
+browser/branding/**/basilisk-branding.js
browser/base/content/browser-social.js
browser/base/content/nsContextMenu.js
browser/base/content/sanitizeDialog.js
diff --git a/AUTHORS b/AUTHORS
index 7e9d1f491..149ea5cc4 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -3,8 +3,10 @@ codebase which lives in this repository. If you make a contribution
here, you may add your name and, optionally, email address in the
appropriate place.
-For a full list of the people who are credited with making a
-contribution to Mozilla, see http://www.mozilla.org/credits/ .
+For a more comprehensive list of the people who are credited with
+making a contribution to this project and its Mozilla roots, see
+http://www.palemoon.org/Contributors.shtml
+
<1010mozilla@Ostermiller.com>
Aaron Boodman <aa@google.com>
@@ -650,6 +652,7 @@ Mark Mentovai <mark@moxienet.com>
Mark Pilgrim <pilgrim@gmail.com>
Mark Smith <mcs@pearlcrescent.com>
Mark Steele <mwsteele@gmail.com>
+Mark Straver <moonchild@palemoon.org>
Markus G. Kuhn <mkuhn@acm.org>
Markus Stange <mstange@themasta.com>
Martijn Pieters <mj@digicool.com>
diff --git a/README.md b/README.md
index 69f81ca3b..4f5f58255 100644
--- a/README.md
+++ b/README.md
@@ -18,6 +18,9 @@ Additional documentation relevant to this source code can be found in the `/docs
directory. This will contain relevant documentation regarding contributing,
using and distributing this code and its binaries.
+If you are interested in the development and building side of things, some
+information will be available on the [Pale Moon developer wiki](http://developer.palemoon.org).
+
### A note about trademarks and branding
Although this repository is licensed under Mozilla Public License v2.0, the
diff --git a/application/basilisk/base/content/aboutNetError.xhtml b/application/basilisk/base/content/aboutNetError.xhtml
index 609725c9e..3296600c8 100644
--- a/application/basilisk/base/content/aboutNetError.xhtml
+++ b/application/basilisk/base/content/aboutNetError.xhtml
@@ -123,13 +123,6 @@
document.getElementById("advancedButton")
.addEventListener("click", function togglePanelVisibility() {
toggleDisplay(panel);
- if (gIsCertError) {
- // Toggling the advanced panel must ensure that the debugging
- // information panel is hidden as well, since it's opened by the
- // error code link in the advanced panel.
- var div = document.getElementById("certificateErrorDebugInformation");
- div.style.display = "none";
- }
if (panel.style.display == "block") {
// send event to trigger telemetry ping
@@ -149,11 +142,6 @@
if (getCSSClass() == "expertBadCert") {
toggleDisplay(document.getElementById("badCertAdvancedPanel"));
- // Toggling the advanced panel must ensure that the debugging
- // information panel is hidden as well, since it's opened by the
- // error code link in the advanced panel.
- var div = document.getElementById("certificateErrorDebugInformation");
- div.style.display = "none";
}
disallowCertOverridesIfNeeded();
@@ -224,9 +212,6 @@
}
if (err == "sslv3Used") {
- document.getElementById("learnMoreContainer").style.display = "block";
- var learnMoreLink = document.getElementById("learnMoreLink");
- learnMoreLink.href = "https://support.mozilla.org/kb/how-resolve-sslv3-error-messages-firefox";
document.body.className = "certerror";
}
@@ -270,17 +255,6 @@
window.addEventListener("AboutNetErrorOptions", function(evt) {
// Pinning errors are of type nssFailure2
if (getErrorCode() == "nssFailure2" || getErrorCode() == "weakCryptoUsed") {
- document.getElementById("learnMoreContainer").style.display = "block";
- var learnMoreLink = document.getElementById("learnMoreLink");
- // nssFailure2 also gets us other non-overrideable errors. Choose
- // a "learn more" link based on description:
- if (getDescription().includes("mozilla_pkix_error_key_pinning_failure")) {
- learnMoreLink.href = "https://support.mozilla.org/kb/certificate-pinning-reports";
- }
- if (getErrorCode() == "weakCryptoUsed") {
- learnMoreLink.href = "https://support.mozilla.org/kb/how-resolve-weak-crypto-error-messages-firefox";
- }
-
const hasPrefStyleError = [
"interrupted", // This happens with subresources that are above the max tls
"SSL_ERROR_PROTOCOL_VERSION_ALERT",
@@ -312,7 +286,7 @@
}
}
- addDomainErrorLinks();
+ addDomainErrorLink();
}
function initPageCaptivePortal()
@@ -329,7 +303,7 @@
addAutofocus("openPortalLoginPageButton");
setupAdvancedButton(true);
- addDomainErrorLinks();
+ addDomainErrorLink();
// When the portal is freed, an event is generated by the frame script
// that we can pick up and attempt to reload the original page.
@@ -348,12 +322,10 @@
addAutofocus("returnButton");
setupAdvancedButton(true);
- document.getElementById("learnMoreContainer").style.display = "block";
-
let event = new CustomEvent("AboutNetErrorLoad", {bubbles:true});
document.getElementById("advancedButton").dispatchEvent(event);
- addDomainErrorLinks();
+ addDomainErrorLink();
}
/* Only do autofocus if we're the toplevel frame; otherwise we
@@ -372,16 +344,13 @@
}
}
- /* Try to preserve the links contained in the error description, like
- the error code.
-
- Also, in the case of SSL error pages about domain mismatch, see if
+ /* In the case of SSL error pages about domain mismatch, see if
we can hyperlink the user to the correct site. We don't want
to do this generically since it allows MitM attacks to redirect
users to a site under attacker control, but in certain cases
it is safe (and helpful!) to do so. Bug 402210
*/
- function addDomainErrorLinks() {
+ function addDomainErrorLink() {
// Rather than textContent, we need to treat description as HTML
var sdid = gIsCertError ? "badCertTechnicalInfo" : "errorShortDescText";
var sd = document.getElementById(sdid);
@@ -390,50 +359,28 @@
// sanitize description text - see bug 441169
- // First, find the index of the <a> tags we care about, being
+ // First, find the index of the <a> tag we care about, being
// careful not to use an over-greedy regex.
- var codeRe = /<a id="errorCode" title="([^"]+)">/;
- var codeResult = codeRe.exec(desc);
- var domainRe = /<a id="cert_domain_link" title="([^"]+)">/;
- var domainResult = domainRe.exec(desc);
-
- // The order of these links in the description is fixed in
- // TransportSecurityInfo.cpp:formatOverridableCertErrorMessage.
- var firstResult = domainResult;
- if (!domainResult)
- firstResult = codeResult;
- if (!firstResult)
+ var re = /<a id="cert_domain_link" title="([^"]+)">/;
+ var result = domainRe.exec(desc);
+
+ if (!result)
return;
// Remove sd's existing children
sd.textContent = "";
- // Everything up to the first link should be text content.
- sd.appendChild(document.createTextNode(desc.slice(0, firstResult.index)));
+ // Everything up to the link should be text content.
+ sd.appendChild(document.createTextNode(desc.slice(0, result.index)));
- // Now create the actual links.
- if (domainResult) {
- createLink(sd, "cert_domain_link", domainResult[1])
- // Append text for anything between the two links.
- sd.appendChild(document.createTextNode(desc.slice(desc.indexOf("</a>") + "</a>".length, codeResult.index)));
- }
- createLink(sd, "errorCode", codeResult[1])
+ // Now create the link itself.
+ var anchorEl = document.createElement("a");
+ anchorEl.setAttribute("id", "cert_domain_link");
+ anchorEl.setAttribute("title", result[1]);
+ anchorEl.appendChild(document.createTextNode(result[1]));
+ sd.appendChild(anchorEl);
- // Finally, append text for anything after the last closing </a>.
- sd.appendChild(document.createTextNode(desc.slice(desc.lastIndexOf("</a>") + "</a>".length)));
- }
-
- if (gIsCertError) {
- // Initialize the error code link embedded in the error message to
- // display debug information about the cert error.
- var errorCode = document.getElementById("errorCode");
- if (errorCode) {
- errorCode.href = "javascript:void(0)";
- errorCode.addEventListener("click", () => {
- let debugInfo = document.getElementById("certificateErrorDebugInformation");
- debugInfo.style.display = "block";
- debugInfo.scrollIntoView({block: "start", behavior: "smooth"});
- }, false);
- }
+ // Finally, append text for anything after the closing </a>.
+ sd.appendChild(document.createTextNode(desc.slice(desc.indexOf("</a>") + "</a>".length)));
}
// Initialize the cert domain link.
@@ -479,23 +426,8 @@
if (link.href && getCSSClass() != "expertBadCert") {
var panelId = gIsCertError ? "badCertAdvancedPanel" : "weakCryptoAdvancedPanel"
toggleDisplay(document.getElementById(panelId));
- if (gIsCertError) {
- // Toggling the advanced panel must ensure that the debugging
- // information panel is hidden as well, since it's opened by the
- // error code link in the advanced panel.
- var div = document.getElementById("certificateErrorDebugInformation");
- div.style.display = "none";
- }
}
}
-
- function createLink(el, id, text) {
- var anchorEl = document.createElement("a");
- anchorEl.setAttribute("id", id);
- anchorEl.setAttribute("title", text);
- anchorEl.appendChild(document.createTextNode(text));
- el.appendChild(anchorEl);
- }
]]></script>
</head>
@@ -628,12 +560,6 @@
</div>
- <div id="certificateErrorDebugInformation">
- <button id="copyToClipboard">&certerror.copyToClipboard.label;</button>
- <div id="certificateErrorText"/>
- <button id="copyToClipboard">&certerror.copyToClipboard.label;</button>
- </div>
-
<!--
- Note: It is important to run the script this way, instead of using
- an onload handler. This is because error pages are loaded as
diff --git a/application/basilisk/base/content/browser-fullScreenAndPointerLock.js b/application/basilisk/base/content/browser-fullScreenAndPointerLock.js
index 497e51121..dbc9478c1 100644
--- a/application/basilisk/base/content/browser-fullScreenAndPointerLock.js
+++ b/application/basilisk/base/content/browser-fullScreenAndPointerLock.js
@@ -320,6 +320,18 @@ var FullScreen = {
document.addEventListener("keypress", this._keyToggleCallback, false);
document.addEventListener("popupshown", this._setPopupOpen, false);
document.addEventListener("popuphidden", this._setPopupOpen, false);
+ // If it is not safe to collapse, add the mouse position tracker or
+ // else it won't be possible to hide the navigation toolbox again
+ if (!this._safeToCollapse()) {
+ let rect = gBrowser.mPanelContainer.getBoundingClientRect();
+ this._mouseTargetRect = {
+ top: rect.top + 50,
+ bottom: rect.bottom,
+ left: rect.left,
+ right: rect.right
+ };
+ MousePosTracker.addListener(this);
+ }
// In DOM fullscreen mode, we hide toolbars with CSS
if (!document.fullscreenElement)
this.hideNavToolbox(true);
diff --git a/application/basilisk/base/content/browser.js b/application/basilisk/base/content/browser.js
index 9ec7715fa..031144dfd 100644
--- a/application/basilisk/base/content/browser.js
+++ b/application/basilisk/base/content/browser.js
@@ -2888,24 +2888,7 @@ var BrowserOnClick = {
secHistogram.add(Ci.nsISecurityUITelemetry.WARNING_BAD_CERT_TOP_UNDERSTAND_RISKS);
}
- securityInfo = getSecurityInfo(securityInfoAsString);
- let errorInfo = getDetailedCertErrorInfo(location,
- securityInfo);
- browser.messageManager.sendAsyncMessage( "CertErrorDetails", {
- code: securityInfo.errorCode,
- info: errorInfo
- });
- break;
-
- case "copyToClipboard":
- const gClipboardHelper = Cc["@mozilla.org/widget/clipboardhelper;1"]
- .getService(Ci.nsIClipboardHelper);
- securityInfo = getSecurityInfo(securityInfoAsString);
- let detailedInfo = getDetailedCertErrorInfo(location,
- securityInfo);
- gClipboardHelper.copyString(detailedInfo);
break;
-
}
},
@@ -3145,81 +3128,6 @@ function getSecurityInfo(securityInfoAsString) {
return securityInfo;
}
-/**
- * Returns a string with detailed information about the certificate validation
- * failure from the specified URI that can be used to send a report.
- */
-function getDetailedCertErrorInfo(location, securityInfo) {
- if (!securityInfo)
- return "";
-
- let certErrorDetails = location;
- let code = securityInfo.errorCode;
- let errors = Cc["@mozilla.org/nss_errors_service;1"]
- .getService(Ci.nsINSSErrorsService);
-
- certErrorDetails += "\r\n\r\n" + errors.getErrorMessage(errors.getXPCOMFromNSSError(code));
-
- const sss = Cc["@mozilla.org/ssservice;1"]
- .getService(Ci.nsISiteSecurityService);
- // SiteSecurityService uses different storage if the channel is
- // private. Thus we must give isSecureHost correct flags or we
- // might get incorrect results.
- let flags = PrivateBrowsingUtils.isWindowPrivate(window) ?
- Ci.nsISocketProvider.NO_PERMANENT_STORAGE : 0;
-
- let uri = Services.io.newURI(location, null, null);
-
- let hasHSTS = sss.isSecureHost(sss.HEADER_HSTS, uri.host, flags);
- let hasHPKP = sss.isSecureHost(sss.HEADER_HPKP, uri.host, flags);
- certErrorDetails += "\r\n\r\n" +
- gNavigatorBundle.getFormattedString("certErrorDetailsHSTS.label",
- [hasHSTS]);
- certErrorDetails += "\r\n" +
- gNavigatorBundle.getFormattedString("certErrorDetailsKeyPinning.label",
- [hasHPKP]);
-
- let certChain = "";
- if (securityInfo.failedCertChain) {
- let certs = securityInfo.failedCertChain.getEnumerator();
- while (certs.hasMoreElements()) {
- let cert = certs.getNext();
- cert.QueryInterface(Ci.nsIX509Cert);
- certChain += getPEMString(cert);
- }
- }
-
- certErrorDetails += "\r\n\r\n" +
- gNavigatorBundle.getString("certErrorDetailsCertChain.label") +
- "\r\n\r\n" + certChain;
-
- return certErrorDetails;
-}
-
-// TODO: can we pull getDERString and getPEMString in from pippki.js instead of
-// duplicating them here?
-function getDERString(cert)
-{
- var length = {};
- var derArray = cert.getRawDER(length);
- var derString = '';
- for (var i = 0; i < derArray.length; i++) {
- derString += String.fromCharCode(derArray[i]);
- }
- return derString;
-}
-
-function getPEMString(cert)
-{
- var derb64 = btoa(getDERString(cert));
- // Wrap the Base64 string into lines of 64 characters,
- // with CRLF line breaks (as specified in RFC 1421).
- var wrapped = derb64.replace(/(\S{64}(?!$))/g, "$1\r\n");
- return "-----BEGIN CERTIFICATE-----\r\n"
- + wrapped
- + "\r\n-----END CERTIFICATE-----\r\n";
-}
-
var PrintPreviewListener = {
_printPreviewTab: null,
_tabBeforePrintPreview: null,
diff --git a/application/basilisk/base/content/content.js b/application/basilisk/base/content/content.js
index 88e58b501..5accbdf7b 100644
--- a/application/basilisk/base/content/content.js
+++ b/application/basilisk/base/content/content.js
@@ -298,12 +298,10 @@ var AboutNetAndCertErrorListener = {
onCertErrorDetails(msg) {
let div = content.document.getElementById("certificateErrorText");
div.textContent = msg.data.info;
- let learnMoreLink = content.document.getElementById("learnMoreLink");
let baseURL = Services.urlFormatter.formatURLPref("app.support.baseURL");
switch (msg.data.code) {
case SEC_ERROR_UNKNOWN_ISSUER:
- learnMoreLink.href = baseURL + "security-error";
break;
// in case the certificate expired we make sure the system clock
@@ -336,7 +334,6 @@ var AboutNetAndCertErrorListener = {
content.document.getElementById("wrongSystemTimePanel")
.style.display = "block";
}
- learnMoreLink.href = baseURL + "time-errors";
break;
}
},
diff --git a/application/basilisk/locales/en-US/chrome/browser/aboutPrivateBrowsing.dtd b/application/basilisk/locales/en-US/chrome/browser/aboutPrivateBrowsing.dtd
index 381da356a..ccb0d297f 100644
--- a/application/basilisk/locales/en-US/chrome/browser/aboutPrivateBrowsing.dtd
+++ b/application/basilisk/locales/en-US/chrome/browser/aboutPrivateBrowsing.dtd
@@ -8,14 +8,14 @@
<!ENTITY privateBrowsing.title "Private Browsing">
<!ENTITY privateBrowsing.title.tracking "Private Browsing with Tracking Protection">
-<!ENTITY aboutPrivateBrowsing.info.notsaved.before "When you browse in a Private Window, Firefox ">
+<!ENTITY aboutPrivateBrowsing.info.notsaved.before "When you browse in a Private Window, &brandShortName; ">
<!ENTITY aboutPrivateBrowsing.info.notsaved.emphasize "does not save">
<!ENTITY aboutPrivateBrowsing.info.notsaved.after ":">
<!ENTITY aboutPrivateBrowsing.info.visited "visited pages">
<!ENTITY aboutPrivateBrowsing.info.searches "searches">
<!ENTITY aboutPrivateBrowsing.info.cookies "cookies">
<!ENTITY aboutPrivateBrowsing.info.temporaryFiles "temporary files">
-<!ENTITY aboutPrivateBrowsing.info.saved.before "Firefox ">
+<!ENTITY aboutPrivateBrowsing.info.saved.before "&brandShortName; ">
<!ENTITY aboutPrivateBrowsing.info.saved.emphasize "will save">
<!ENTITY aboutPrivateBrowsing.info.saved.after2 " your:">
<!ENTITY aboutPrivateBrowsing.info.downloads "downloads">
@@ -27,5 +27,5 @@
<!ENTITY aboutPrivateBrowsing.learnMore2.title "Private Browsing">
<!ENTITY trackingProtection.title "Tracking Protection">
-<!ENTITY trackingProtection.description2 "Some websites use trackers that can monitor your activity across the Internet. With Tracking Protection Firefox will block many trackers that can collect information about your browsing behavior.">
+<!ENTITY trackingProtection.description2 "Some websites use trackers that can monitor your activity across the Internet. With Tracking Protection &brandShortName; will block many trackers that can collect information about your browsing behavior.">
<!ENTITY trackingProtection.startTour1 "See how it works">
diff --git a/application/basilisk/locales/en-US/chrome/browser/browser.properties b/application/basilisk/locales/en-US/chrome/browser/browser.properties
index aa7a82e4f..f1c39839b 100644
--- a/application/basilisk/locales/en-US/chrome/browser/browser.properties
+++ b/application/basilisk/locales/en-US/chrome/browser/browser.properties
@@ -679,13 +679,6 @@ weakCryptoOverriding.message = %S recommends that you don’t enter your passwor
revokeOverride.label = Don’t Trust This Website
revokeOverride.accesskey = D
-# LOCALIZATION NOTE (certErrorDetails*.label): These are text strings that
-# appear in the about:certerror page, so that the user can copy and send them to
-# the server administrators for troubleshooting.
-certErrorDetailsHSTS.label = HTTP Strict Transport Security: %S
-certErrorDetailsKeyPinning.label = HTTP Public Key Pinning: %S
-certErrorDetailsCertChain.label = Certificate chain:
-
# LOCALIZATION NOTE (pendingCrashReports2.label): Semi-colon list of plural forms
# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
# #1 is the number of pending crash reports
diff --git a/application/basilisk/locales/en-US/chrome/overrides/netError.dtd b/application/basilisk/locales/en-US/chrome/overrides/netError.dtd
index 872847458..55da9a36c 100644
--- a/application/basilisk/locales/en-US/chrome/overrides/netError.dtd
+++ b/application/basilisk/locales/en-US/chrome/overrides/netError.dtd
@@ -203,7 +203,6 @@ was trying to connect. -->
Strict Transport Security (HSTS) to specify that &brandShortName; may only connect
to it securely. As a result, it is not possible to add an exception for this
certificate.">
-<!ENTITY certerror.copyToClipboard.label "Copy text to clipboard">
<!ENTITY inadequateSecurityError.title "Your connection is not secure">
<!-- LOCALIZATION NOTE (inadequateSecurityError.longDesc) - Do not translate
diff --git a/application/basilisk/themes/shared/aboutNetError.css b/application/basilisk/themes/shared/aboutNetError.css
index c0b76aa47..7e1e7c32b 100644
--- a/application/basilisk/themes/shared/aboutNetError.css
+++ b/application/basilisk/themes/shared/aboutNetError.css
@@ -39,10 +39,6 @@ button:disabled {
display: none;
}
-#learnMoreContainer {
- display: none;
-}
-
#certErrorAndCaptivePortalButtonContainer {
display: none;
}
@@ -132,16 +128,12 @@ span#hostname {
line-height: 16px
}
-#errorCode:not([href]) {
+#errorCode {
color: var(--in-content-page-color);
cursor: text;
text-decoration: none;
}
-#errorCode[href] {
- white-space: nowrap;
-}
-
#badCertTechnicalInfo {
overflow: auto;
white-space: pre-wrap;
@@ -150,20 +142,3 @@ span#hostname {
#certificateErrorReporting {
display: none;
}
-
-#certificateErrorDebugInformation {
- display: none;
- background-color: var(--in-content-box-background-hover) !important;
- border-top: 1px solid var(--in-content-border-color);
- position: absolute;
- left: 0%;
- top: 100%;
- width: 65%;
- padding: 1em 17.5%;
-}
-
-#certificateErrorText {
- font-family: monospace;
- white-space: pre-wrap;
- padding: 1em 0;
-}
diff --git a/application/palemoon/app/profile/palemoon.js b/application/palemoon/app/profile/palemoon.js
index 22c4f8654..15accd146 100644
--- a/application/palemoon/app/profile/palemoon.js
+++ b/application/palemoon/app/profile/palemoon.js
@@ -59,9 +59,9 @@ pref("extensions.blocklist.level.updated", false);
// Controls what level the blocklist switches from warning about items to forcibly
// blocking them.
pref("extensions.blocklist.level", 2);
-pref("extensions.blocklist.url", "http://blocklist.palemoon.org/%VERSION%/blocklist.xml");
+pref("extensions.blocklist.url", "https://blocklist.palemoon.org/?version=%VERSION%");
pref("extensions.blocklist.detailsURL", "https://blocklist.palemoon.org/about.shtml");
-pref("extensions.blocklist.itemURL", "http://blocklist.palemoon.org/info/?id=%blockID%");
+pref("extensions.blocklist.itemURL", "https://blocklist.palemoon.org/info/?id=%blockID%");
pref("extensions.update.autoUpdateDefault", true);
@@ -544,6 +544,25 @@ pref("privacy.sanitize.migrateFx3Prefs", false);
pref("network.proxy.share_proxy_settings", false); // use the same proxy settings for all protocols
+// Disable speculative half-open connections on Pale Moon
+pref("network.http.speculative-parallel-limit", 0);
+
+// Enable pipelining over SSL
+pref("network.http.pipelining.ssl", true);
+
+// Disable predictor/prefetch of URIs
+pref("network.predictor.enabled", false);
+pref("network.prefetch-next", false);
+
+// Disable DNS prefetching
+pref("network.dns.disablePrefetch", true);
+
+// Tune DNS lookups
+pref("network.dnsCacheEntries", 800);
+pref("network.dnsCacheExpiration", 180); // 3 minutes if no TTL given by DNS resolver
+pref("network.dns.get-ttl", true); // Get and use DNS resolver TTL
+pref("network.dnsCacheExpirationGracePeriod", 60); // 1 minute grace period for stale entry
+
// simple gestures support
pref("browser.gesture.swipe.left", "Browser:BackOrBackDuplicate");
pref("browser.gesture.swipe.right", "Browser:ForwardOrForwardDuplicate");
diff --git a/application/palemoon/base/content/aboutDialog.xul b/application/palemoon/base/content/aboutDialog.xul
index 743ff21df..5c344f55d 100644
--- a/application/palemoon/base/content/aboutDialog.xul
+++ b/application/palemoon/base/content/aboutDialog.xul
@@ -88,6 +88,7 @@
</vbox>
<description class="text-pmcreds">
+#if defined(MOZ_OFFICIAL_BRANDING) || defined(MC_OFFICIAL)
#ifdef MC_PRIVATE_BUILD
This is a private build of Pale Moon. If you did not manually build this copy from source yourself, then please download an official version from the <label class="text-link" href="http://www.palemoon.org/">Pale Moon website</label>.
#else
@@ -100,6 +101,12 @@
If you wish to contribute, please consider helping out by providing support to other users on the <label class="text-link" href="https://forum.palemoon.org/">Pale Moon forum</label>
or getting involved in our development by tackling some of the issues found in our GitHub issue tracker.
#endif
+#else
+ &brandFullName; is released by &vendorShortName;.
+ </description>
+ <description class="text-blurb">
+ This is an unofficial build of Pale Moon. For official builds, please go to <label class="text-link" href="http://www.palemoon.org/">the Pale Moon website</label>.
+#endif
</description>
</vbox>
</vbox>
diff --git a/application/palemoon/base/content/baseMenuOverlay.xul b/application/palemoon/base/content/baseMenuOverlay.xul
index f61348c9f..e9019dc55 100644
--- a/application/palemoon/base/content/baseMenuOverlay.xul
+++ b/application/palemoon/base/content/baseMenuOverlay.xul
@@ -41,7 +41,7 @@
label="&helpMenu.label;"
accesskey="&helpMenu.accesskey;">
#endif
- <menupopup id="menu_HelpPopup" onpopupshowing="buildHelpMenu();">
+ <menupopup id="menu_HelpPopup">
<menuitem id="menu_openHelp"
oncommand="openHelpLink('firefox-help')"
onclick="checkForMiddleClick(this, event);"
diff --git a/application/palemoon/base/content/blockedSite.xhtml b/application/palemoon/base/content/blockedSite.xhtml
deleted file mode 100644
index b56875eb6..000000000
--- a/application/palemoon/base/content/blockedSite.xhtml
+++ /dev/null
@@ -1,193 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!DOCTYPE html [
- <!ENTITY % htmlDTD PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
- %htmlDTD;
- <!ENTITY % globalDTD SYSTEM "chrome://global/locale/global.dtd">
- %globalDTD;
- <!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd" >
- %brandDTD;
- <!ENTITY % blockedSiteDTD SYSTEM "chrome://browser/locale/safebrowsing/phishing-afterload-warning-message.dtd">
- %blockedSiteDTD;
-]>
-
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<html xmlns="http://www.w3.org/1999/xhtml" class="blacklist">
- <head>
- <link rel="stylesheet" href="chrome://global/skin/netError.css" type="text/css" media="all" />
- <link rel="icon" type="image/png" id="favicon" href="chrome://global/skin/icons/blacklist_favicon.png"/>
-
- <script type="application/javascript"><![CDATA[
- // Error url MUST be formatted like this:
- // about:blocked?e=error_code&u=url
-
- // Note that this file uses document.documentURI to get
- // the URL (with the format from above). This is because
- // document.location.href gets the current URI off the docshell,
- // which is the URL displayed in the location bar, i.e.
- // the URI that the user attempted to load.
-
- function getErrorCode()
- {
- var url = document.documentURI;
- var error = url.search(/e\=/);
- var duffUrl = url.search(/\&u\=/);
- return decodeURIComponent(url.slice(error + 2, duffUrl));
- }
-
- function getURL()
- {
- var url = document.documentURI;
- var match = url.match(/&u=([^&]+)&/);
-
- // match == null if not found; if so, return an empty string
- // instead of what would turn out to be portions of the URI
- if (!match)
- return "";
-
- url = decodeURIComponent(match[1]);
-
- // If this is a view-source page, then get then real URI of the page
- if (url.startsWith("view-source:"))
- url = url.slice(12);
- return url;
- }
-
- /**
- * Attempt to get the hostname via document.location. Fail back
- * to getURL so that we always return something meaningful.
- */
- function getHostString()
- {
- try {
- return document.location.hostname;
- } catch (e) {
- return getURL();
- }
- }
-
- function initPage()
- {
- // Handoff to the appropriate initializer, based on error code
- switch (getErrorCode()) {
- case "malwareBlocked" :
- initPage_malware();
- break;
- case "phishingBlocked" :
- initPage_phishing();
- break;
- }
- }
-
- /**
- * Initialize custom strings and functionality for blocked malware case
- */
- function initPage_malware()
- {
- // Remove phishing strings
- var el = document.getElementById("errorTitleText_phishing");
- el.parentNode.removeChild(el);
-
- el = document.getElementById("errorShortDescText_phishing");
- el.parentNode.removeChild(el);
-
- el = document.getElementById("errorLongDescText_phishing");
- el.parentNode.removeChild(el);
-
- // Set sitename
- document.getElementById("malware_sitename").textContent = getHostString();
- document.title = document.getElementById("errorTitleText_malware")
- .innerHTML;
- }
-
- /**
- * Initialize custom strings and functionality for blocked phishing case
- */
- function initPage_phishing()
- {
- // Remove malware strings
- var el = document.getElementById("errorTitleText_malware");
- el.parentNode.removeChild(el);
-
- el = document.getElementById("errorShortDescText_malware");
- el.parentNode.removeChild(el);
-
- el = document.getElementById("errorLongDescText_malware");
- el.parentNode.removeChild(el);
-
- // Set sitename
- document.getElementById("phishing_sitename").textContent = getHostString();
- document.title = document.getElementById("errorTitleText_phishing")
- .innerHTML;
- }
- ]]></script>
- <style type="text/css">
- /* Style warning button to look like a small text link in the
- bottom right. This is preferable to just using a text link
- since there is already a mechanism in browser.js for trapping
- oncommand events from unprivileged chrome pages (BrowserOnCommand).*/
- #ignoreWarningButton {
- -moz-appearance: none;
- background: transparent;
- border: none;
- color: white; /* Hard coded because netError.css forces this page's background to dark red */
- text-decoration: underline;
- margin: 0;
- padding: 0;
- position: relative;
- top: 23px;
- left: 20px;
- font-size: smaller;
- }
-
- #ignoreWarning {
- text-align: right;
- }
- </style>
- </head>
-
- <body dir="&locale.dir;">
- <div id="errorPageContainer">
-
- <!-- Error Title -->
- <div id="errorTitle">
- <h1 id="errorTitleText_phishing">&safeb.blocked.phishingPage.title;</h1>
- <h1 id="errorTitleText_malware">&safeb.blocked.malwarePage.title;</h1>
- </div>
-
- <div id="errorLongContent">
-
- <!-- Short Description -->
- <div id="errorShortDesc">
- <p id="errorShortDescText_phishing">&safeb.blocked.phishingPage.shortDesc;</p>
- <p id="errorShortDescText_malware">&safeb.blocked.malwarePage.shortDesc;</p>
- </div>
-
- <!-- Long Description -->
- <div id="errorLongDesc">
- <p id="errorLongDescText_phishing">&safeb.blocked.phishingPage.longDesc;</p>
- <p id="errorLongDescText_malware">&safeb.blocked.malwarePage.longDesc;</p>
- </div>
-
- <!-- Action buttons -->
- <div id="buttons">
- <!-- Commands handled in browser.js -->
- <button id="getMeOutButton">&safeb.palm.accept.label;</button>
- <button id="reportButton">&safeb.palm.reportPage.label;</button>
- </div>
- </div>
- <div id="ignoreWarning">
- <button id="ignoreWarningButton">&safeb.palm.decline.label;</button>
- </div>
- </div>
- <!--
- - Note: It is important to run the script this way, instead of using
- - an onload handler. This is because error pages are loaded as
- - LOAD_BACKGROUND, which means that onload handlers will not be executed.
- -->
- <script type="application/javascript">initPage();</script>
- </body>
-</html>
diff --git a/application/palemoon/base/content/browser-fullScreen.js b/application/palemoon/base/content/browser-fullScreen.js
index 6afd247be..b1235a8d3 100644
--- a/application/palemoon/base/content/browser-fullScreen.js
+++ b/application/palemoon/base/content/browser-fullScreen.js
@@ -53,6 +53,18 @@ var FullScreen = {
document.addEventListener("popupshown", this._setPopupOpen, false);
document.addEventListener("popuphidden", this._setPopupOpen, false);
this._shouldAnimate = true;
+ // If it is not safe to collapse, add the mouse position tracker or
+ // else it won't be possible to hide the navigation toolbox again
+ if (!this._safeToCollapse(document.mozFullScreen)) {
+ let rect = gBrowser.mPanelContainer.getBoundingClientRect();
+ this._mouseTargetRect = {
+ top: rect.top + 50,
+ bottom: rect.bottom,
+ left: rect.left,
+ right: rect.right
+ };
+ MousePosTracker.addListener(this);
+ }
// We don't animate the toolbar collapse if in DOM full-screen mode,
// as the size of the content area would still be changing after the
// mozfullscreenchange event fired, which could confuse content script.
diff --git a/application/palemoon/base/content/browser.js b/application/palemoon/base/content/browser.js
index 386bd418b..7421fc5c3 100644
--- a/application/palemoon/base/content/browser.js
+++ b/application/palemoon/base/content/browser.js
@@ -1051,6 +1051,8 @@ var gBrowserInit = {
// [3]: postData (nsIInputStream)
// [4]: allowThirdPartyFixup (bool)
// [5]: referrerPolicy (int)
+ // [6]: originPrincipal (nsIPrincipal)
+ // [7]: triggeringPrincipal (nsIPrincipal)
else if (window.arguments.length >= 3) {
let referrerURI = window.arguments[2];
if (typeof(referrerURI) == "string") {
@@ -1063,7 +1065,10 @@ var gBrowserInit = {
let referrerPolicy = (window.arguments[5] != undefined ?
window.arguments[5] : Ci.nsIHttpChannel.REFERRER_POLICY_DEFAULT);
loadURI(uriToLoad, referrerURI, window.arguments[3] || null,
- window.arguments[4] || false, referrerPolicy);
+ window.arguments[4] || false, referrerPolicy,
+ // pass the origin principal (if any) and force its use to create
+ // an initial about:blank viewer if present:
+ window.arguments[6], !!window.arguments[6], window.arguments[7]);
window.focus();
}
// Note: loadOneOrMoreURIs *must not* be called if window.arguments.length >= 3.
@@ -1952,7 +1957,9 @@ function BrowserTryToCloseWindow()
window.close(); // WindowIsClosing does all the necessary checks
}
-function loadURI(uri, referrer, postData, allowThirdPartyFixup, referrerPolicy) {
+function loadURI(uri, referrer, postData, allowThirdPartyFixup, referrerPolicy,
+ originPrincipal, forceAboutBlankViewerInCurrent,
+ triggeringPrincipal) {
if (postData === undefined)
postData = null;
@@ -1968,6 +1975,9 @@ function loadURI(uri, referrer, postData, allowThirdPartyFixup, referrerPolicy)
referrerURI: referrer,
referrerPolicy: referrerPolicy,
postData: postData,
+ originPrincipal: originPrincipal,
+ triggeringPrincipal: triggeringPrincipal,
+ forceAboutBlankViewerInCurrent: forceAboutBlankViewerInCurrent,
});
} catch (e) {}
}
@@ -4395,9 +4405,11 @@ nsBrowserAccess.prototype = {
}
let referrer = aOpener ? makeURI(aOpener.location.href) : null;
+ let triggeringPrincipal = null;
let referrerPolicy = Ci.nsIHttpChannel.REFERRER_POLICY_DEFAULT;
if (aOpener && aOpener.document) {
referrerPolicy = aOpener.document.referrerPolicy;
+ triggeringPrincipal = aOpener.document.nodePrincipal;
}
switch (aWhere) {
@@ -4437,6 +4449,7 @@ nsBrowserAccess.prototype = {
let referrer = aOpener ? makeURI(aOpener.location.href) : null;
let tab = win.gBrowser.loadOneTab(aURI ? aURI.spec : "about:blank", {
+ triggeringPrincipal: triggeringPrincipal,
referrerURI: referrer,
referrerPolicy: referrerPolicy,
fromExternal: isExternal,
@@ -4459,6 +4472,7 @@ nsBrowserAccess.prototype = {
Ci.nsIWebNavigation.LOAD_FLAGS_NONE;
gBrowser.loadURIWithFlags(aURI.spec, {
flags: loadflags,
+ triggeringPrincipal: triggeringPrincipal,
referrerURI: referrer,
referrerPolicy: referrerPolicy,
});
@@ -5192,7 +5206,9 @@ function handleLinkClick(event, href, linkNode) {
urlSecurityCheck(href, doc.nodePrincipal);
openLinkIn(href, where, { referrerURI: doc.documentURIObject,
charset: doc.characterSet,
- referrerPolicy: doc.referrerPolicy });
+ referrerPolicy: doc.referrerPolicy,
+ originPrincipal: doc.nodePrincipal,
+ triggeringPrincipal: doc.nodePrincipal });
event.preventDefault();
return true;
}
diff --git a/application/palemoon/base/content/browser.xul b/application/palemoon/base/content/browser.xul
index 254e2eee0..90899bb88 100644
--- a/application/palemoon/base/content/browser.xul
+++ b/application/palemoon/base/content/browser.xul
@@ -334,7 +334,9 @@
</button>
</hbox>
#endif
+#ifndef XP_MACOSX
<spacer id="titlebar-spacer" flex="1"/>
+#endif
<hbox id="titlebar-buttonbox-container" align="start">
<hbox id="titlebar-buttonbox">
<toolbarbutton class="titlebar-button" id="titlebar-min" oncommand="window.minimize();"/>
diff --git a/application/palemoon/base/content/nsContextMenu.js b/application/palemoon/base/content/nsContextMenu.js
index 738868ccb..19b2fac77 100644
--- a/application/palemoon/base/content/nsContextMenu.js
+++ b/application/palemoon/base/content/nsContextMenu.js
@@ -754,7 +754,9 @@ nsContextMenu.prototype = {
openLinkIn(this.linkURL, "window",
{ charset: doc.characterSet,
referrerURI: doc.documentURIObject,
- referrerPolicy: doc.referrerPolicy });
+ referrerPolicy: doc.referrerPolicy,
+ originPrincipal: doc.nodePrincipal,
+ triggeringPrincipal: doc.nodePrincipal });
},
// Open linked-to URL in a new private window.
@@ -765,6 +767,8 @@ nsContextMenu.prototype = {
{ charset: doc.characterSet,
referrerURI: doc.documentURIObject,
referrerPolicy: doc.referrerPolicy,
+ originPrincipal: doc.nodePrincipal,
+ triggeringPrincipal: doc.nodePrincipal,
private: true });
},
@@ -775,7 +779,9 @@ nsContextMenu.prototype = {
openLinkIn(this.linkURL, "tab",
{ charset: doc.characterSet,
referrerURI: doc.documentURIObject,
- referrerPolicy: doc.referrerPolicy });
+ referrerPolicy: doc.referrerPolicy,
+ originPrincipal: doc.nodePrincipal,
+ triggeringPrincipal: doc.nodePrincipal });
},
// open URL in current tab
@@ -784,7 +790,9 @@ nsContextMenu.prototype = {
urlSecurityCheck(this.linkURL, doc.nodePrincipal);
openLinkIn(this.linkURL, "current",
{ charset: doc.characterSet,
- referrerURI: doc.documentURIObject });
+ referrerURI: doc.documentURIObject,
+ originPrincipal: doc.nodePrincipal,
+ triggeringPrincipal: doc.nodePrincipal });
},
// Open frame in a new tab.
diff --git a/application/palemoon/base/content/pageinfo/permissions.js b/application/palemoon/base/content/pageinfo/permissions.js
index 5d25a800d..4f8382f66 100644
--- a/application/palemoon/base/content/pageinfo/permissions.js
+++ b/application/palemoon/base/content/pageinfo/permissions.js
@@ -217,14 +217,20 @@ function fillInPluginPermissionTemplate(aPermissionString, aPluginObject) {
.cloneNode(true);
permPluginTemplate.setAttribute("permString", aPermissionString);
permPluginTemplate.setAttribute("tooltiptext", aPluginObject.description);
- let attrs = [
- [ ".permPluginTemplateLabel", "value", aPluginObject.name ],
- [ ".permPluginTemplateRadioGroup", "id", aPermissionString + "RadioGroup" ],
- [ ".permPluginTemplateRadioDefault", "id", aPermissionString + "#0" ],
- [ ".permPluginTemplateRadioAsk", "id", aPermissionString + "#3" ],
- [ ".permPluginTemplateRadioAllow", "id", aPermissionString + "#1" ],
- [ ".permPluginTemplateRadioBlock", "id", aPermissionString + "#2" ]
- ];
+ let attrs = [];
+ attrs.push([".permPluginTemplateLabel", "value", aPluginObject.name]);
+ attrs.push([".permPluginTemplateRadioGroup", "id", aPermissionString + "RadioGroup"]);
+ attrs.push([".permPluginTemplateRadioDefault", "id", aPermissionString + "#0"]);
+ let permPluginTemplateRadioAsk = ".permPluginTemplateRadioAsk";
+ if (Services.prefs.getBoolPref("plugins.click_to_play") ||
+ aPluginObject.vulnerable) {
+ attrs.push([permPluginTemplateRadioAsk, "id", aPermissionString + "#3"]);
+ } else {
+ permPluginTemplate.querySelector(permPluginTemplateRadioAsk)
+ .setAttribute("disabled", "true");
+ }
+ attrs.push([".permPluginTemplateRadioAllow", "id", aPermissionString + "#1"]);
+ attrs.push([".permPluginTemplateRadioBlock", "id", aPermissionString + "#2"]);
for (let attr of attrs) {
permPluginTemplate.querySelector(attr[0]).setAttribute(attr[1], attr[2]);
@@ -264,13 +270,16 @@ function initPluginsRow() {
}
let permString = pluginHost.getPermissionStringForType(mimeType);
if (!permissionMap.has(permString)) {
- var name = makeNicePluginName(plugin.name) + " " + plugin.version;
+ let name = makeNicePluginName(plugin.name) + " " + plugin.version;
+ let vulnerable = false;
if (permString.startsWith("plugin-vulnerable:")) {
name += " \u2014 " + vulnerableLabel;
+ vulnerable = true;
}
permissionMap.set(permString, {
"name": name,
"description": plugin.description,
+ "vulnerable": vulnerable
});
}
}
diff --git a/application/palemoon/base/content/report-phishing-overlay.xul b/application/palemoon/base/content/report-phishing-overlay.xul
deleted file mode 100644
index 76baf01da..000000000
--- a/application/palemoon/base/content/report-phishing-overlay.xul
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!DOCTYPE overlay [
-<!ENTITY % reportphishDTD SYSTEM "chrome://browser/locale/safebrowsing/report-phishing.dtd">
-%reportphishDTD;
-<!ENTITY % safebrowsingDTD SYSTEM "chrome://browser/locale/safebrowsing/phishing-afterload-warning-message.dtd">
-%safebrowsingDTD;
-]>
-
-<overlay id="reportPhishingMenuOverlay"
- xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
- <broadcasterset id="mainBroadcasterSet">
- <broadcaster id="reportPhishingBroadcaster" disabled="true"/>
- <broadcaster id="reportPhishingErrorBroadcaster" disabled="true"/>
- </broadcasterset>
- <menupopup id="menu_HelpPopup">
- <menuitem id="menu_HelpPopup_reportPhishingtoolmenu"
- label="&reportPhishSiteMenu.title2;"
- accesskey="&reportPhishSiteMenu.accesskey;"
- insertbefore="aboutSeparator"
- observes="reportPhishingBroadcaster"
- oncommand="openUILink(gSafeBrowsing.getReportURL('Phish'), event);"
- onclick="checkForMiddleClick(this, event);"/>
- <menuitem id="menu_HelpPopup_reportPhishingErrortoolmenu"
- label="&safeb.palm.notforgery.label2;"
- accesskey="&reportPhishSiteMenu.accesskey;"
- insertbefore="aboutSeparator"
- observes="reportPhishingErrorBroadcaster"
- oncommand="openUILinkIn(gSafeBrowsing.getReportURL('Error'), 'tab');"
- onclick="checkForMiddleClick(this, event);"/>
- </menupopup>
-</overlay>
diff --git a/application/palemoon/base/content/tabbrowser.xml b/application/palemoon/base/content/tabbrowser.xml
index ea68d00ad..d5735149e 100644
--- a/application/palemoon/base/content/tabbrowser.xml
+++ b/application/palemoon/base/content/tabbrowser.xml
@@ -1313,13 +1313,16 @@
<parameter name="aAllowThirdPartyFixup"/>
<body>
<![CDATA[
+ var aTriggeringPrincipal;
var aReferrerPolicy;
var aFromExternal;
var aRelatedToCurrent;
+ var aOriginPrincipal;
if (arguments.length == 2 &&
typeof arguments[1] == "object" &&
!(arguments[1] instanceof Ci.nsIURI)) {
let params = arguments[1];
+ aTriggeringPrincipal = params.triggeringPrincipal;
aReferrerURI = params.referrerURI;
aReferrerPolicy = params.referrerPolicy;
aCharset = params.charset;
@@ -1328,12 +1331,14 @@
aAllowThirdPartyFixup = params.allowThirdPartyFixup;
aFromExternal = params.fromExternal;
aRelatedToCurrent = params.relatedToCurrent;
+ aOriginPrincipal = params.originPrincipal;
}
var bgLoad = (aLoadInBackground != null) ? aLoadInBackground :
Services.prefs.getBoolPref("browser.tabs.loadInBackground");
var owner = bgLoad ? null : this.selectedTab;
var tab = this.addTab(aURI, {
+ triggeringPrincipal: aTriggeringPrincipal,
referrerURI: aReferrerURI,
referrerPolicy: aReferrerPolicy,
charset: aCharset,
@@ -1341,6 +1346,7 @@
ownerTab: owner,
allowThirdPartyFixup: aAllowThirdPartyFixup,
fromExternal: aFromExternal,
+ originPrincipal: aOriginPrincipal,
relatedToCurrent: aRelatedToCurrent});
if (!bgLoad)
this.selectedTab = tab;
@@ -1461,14 +1467,17 @@
<body>
<![CDATA[
const NS_XUL = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
+ var aTriggeringPrincipal;
var aReferrerPolicy;
var aFromExternal;
var aRelatedToCurrent;
var aSkipAnimation;
+ var aOriginPrincipal;
if (arguments.length == 2 &&
typeof arguments[1] == "object" &&
!(arguments[1] instanceof Ci.nsIURI)) {
let params = arguments[1];
+ aTriggeringPrincipal = params.triggeringPrincipal;
aReferrerURI = params.referrerURI;
aReferrerPolicy = params.referrerPolicy;
aCharset = params.charset;
@@ -1478,6 +1487,7 @@
aFromExternal = params.fromExternal;
aRelatedToCurrent = params.relatedToCurrent;
aSkipAnimation = params.skipAnimation;
+ aOriginPrincipal = params.originPrincipal;
}
// if we're adding tabs, we're past interrupt mode, ditch the owner
@@ -1486,6 +1496,11 @@
var t = document.createElementNS(NS_XUL, "tab");
+ let aURIObject = null;
+ try {
+ aURIObject = Services.io.newURI(aURI || "about:blank");
+ } catch (ex) { /* we'll try to fix up this URL later */ }
+
var uriIsAboutBlank = !aURI || aURI == "about:blank";
if (!aURI || isBlankPageURL(aURI))
@@ -1625,6 +1640,16 @@
evt.initEvent("TabOpen", true, false);
t.dispatchEvent(evt);
+ if (aOriginPrincipal && aURI) {
+ let {URI_INHERITS_SECURITY_CONTEXT} = Ci.nsIProtocolHandler;
+ // Unless we know for sure we're not inheriting principals,
+ // force the about:blank viewer to have the right principal:
+ if (!aURIObject ||
+ (Services.io.getProtocolFlags(aURIObject.scheme) & URI_INHERITS_SECURITY_CONTEXT)) {
+ b.createAboutBlankContentViewer(aOriginPrincipal);
+ }
+ }
+
// If we didn't swap docShells with a preloaded browser
// then let's just continue loading the page normally.
if (!docShellsSwapped && !uriIsAboutBlank) {
@@ -1643,6 +1668,7 @@
try {
b.loadURIWithFlags(aURI, {
flags: flags,
+ triggeringPrincipal: aTriggeringPrincipal,
referrerURI: aReferrerURI,
referrerPolicy: aReferrerPolicy,
charset: aCharset,
diff --git a/application/palemoon/base/content/utilityOverlay.js b/application/palemoon/base/content/utilityOverlay.js
index 63488e209..2c1a95f83 100644
--- a/application/palemoon/base/content/utilityOverlay.js
+++ b/application/palemoon/base/content/utilityOverlay.js
@@ -230,6 +230,10 @@ function openLinkIn(url, where, params) {
var aDisallowInheritPrincipal = params.disallowInheritPrincipal;
var aInitiatingDoc = params.initiatingDoc;
var aIsPrivate = params.private;
+ var aPrincipal = params.originPrincipal;
+ var aTriggeringPrincipal = params.triggeringPrincipal;
+ var aForceAboutBlankViewerInCurrent =
+ params.forceAboutBlankViewerInCurrent;
var sendReferrerURI = true;
if (where == "save") {
@@ -254,6 +258,23 @@ function openLinkIn(url, where, params) {
// Note that if |w| is null we might have no current browser (we'll open a new window).
var aCurrentBrowser = params.currentBrowser || (w && w.gBrowser.selectedBrowser);
+ // Teach the principal about the right OA to use, e.g. in case when
+ // opening a link in a new private window.
+ // Please note we do not have to do that for SystemPrincipals and we
+ // can not do it for NullPrincipals since NullPrincipals are only
+ // identical if they actually are the same object (See Bug: 1346759)
+ function useOAForPrincipal(principal) {
+ if (principal && principal.isCodebasePrincipal) {
+ let attrs = {
+ privateBrowsingId: aIsPrivate || (w && PrivateBrowsingUtils.isWindowPrivate(w)),
+ };
+ return Services.scriptSecurityManager.createCodebasePrincipal(principal.URI, attrs);
+ }
+ return principal;
+ }
+ aPrincipal = useOAForPrincipal(aPrincipal);
+ aTriggeringPrincipal = useOAForPrincipal(aTriggeringPrincipal);
+
if (!w || where == "window") {
// This propagates to window.arguments.
// Strip referrer data when opening a new private window, to prevent
@@ -297,6 +318,8 @@ function openLinkIn(url, where, params) {
sa.AppendElement(aPostData);
sa.AppendElement(allowThirdPartyFixupSupports);
sa.AppendElement(referrerPolicySupports);
+ sa.AppendElement(aPrincipal);
+ sa.AppendElement(aTriggeringPrincipal);
let features = "chrome,dialog=no,all";
if (aIsPrivate) {
@@ -314,10 +337,17 @@ function openLinkIn(url, where, params) {
getBoolPref("browser.tabs.loadInBackground");
}
+ let uriObj;
+ if (where == "current") {
+ try {
+ uriObj = Services.io.newURI(url, null, null);
+ } catch (e) {}
+ }
+
if (where == "current" && w.gBrowser.selectedTab.pinned) {
try {
- let uriObj = Services.io.newURI(url, null, null);
- if (!uriObj.schemeIs("javascript") &&
+ // nsIURI.host can throw for non-nsStandardURL nsIURIs.
+ if (!uriObj || !uriObj.schemeIs("javascript") &&
w.gBrowser.currentURI.host != uriObj.host) {
where = "tab";
loadInBackground = false;
@@ -345,11 +375,22 @@ function openLinkIn(url, where, params) {
if (aForceAllowDataURI) {
flags |= Ci.nsIWebNavigation.LOAD_FLAGS_FORCE_ALLOW_DATA_URI;
}
+ let {URI_INHERITS_SECURITY_CONTEXT} = Ci.nsIProtocolHandler;
+ if (aForceAboutBlankViewerInCurrent &&
+ (!uriObj ||
+ (Services.io.getProtocolFlags(uriObj.scheme) & URI_INHERITS_SECURITY_CONTEXT))) {
+ // Unless we know for sure we're not inheriting principals,
+ // force the about:blank viewer to have the right principal:
+ w.gBrowser.selectedBrowser.createAboutBlankContentViewer(aPrincipal);
+ }
+
w.gBrowser.loadURIWithFlags(url, {
flags: flags,
+ triggeringPrincipal: aTriggeringPrincipal,
referrerURI: aReferrerURI,
referrerPolicy: aReferrerPolicy,
postData: aPostData,
+ originPrincipal: aPrincipal,
});
browserUsedForLoad = aCurrentBrowser;
break;
@@ -365,7 +406,9 @@ function openLinkIn(url, where, params) {
postData: aPostData,
inBackground: loadInBackground,
allowThirdPartyFixup: aAllowThirdPartyFixup,
- relatedToCurrent: aRelatedToCurrent});
+ relatedToCurrent: aRelatedToCurrent,
+ originPrincipal: aPrincipal,
+ triggeringPrincipal: aTriggeringPrincipal });
browserUsedForLoad = tabUsedForLoad.linkedBrowser;
break;
}
@@ -564,13 +607,6 @@ function openFeedbackPage()
openUILinkIn(Services.prefs.getCharPref("browser.feedback.url"), "tab");
}
-function buildHelpMenu()
-{
- // Enable/disable the "Report Web Forgery" menu item.
- if (typeof gSafeBrowsing != "undefined")
- gSafeBrowsing.setReportPhishingMenu();
-}
-
function isElementVisible(aElement)
{
if (!aElement)
diff --git a/application/palemoon/branding/official/locales/en-US/brand.properties b/application/palemoon/branding/official/locales/en-US/brand.properties
index d85ceebce..7d4b46954 100644
--- a/application/palemoon/branding/official/locales/en-US/brand.properties
+++ b/application/palemoon/branding/official/locales/en-US/brand.properties
@@ -2,10 +2,4 @@ brandShortName=Pale Moon
brandFullName=Pale Moon
vendorShortName=Moonchild
-homePageSingleStartMain=Pale Moon Start, a convenient home page with built-in search
-homePageImport=Import your home page from %S
-
-homePageMigrationPageTitle=Home Page Selection
-homePageMigrationDescription=Please select the home page you wish to use:
-
syncBrandShortName=Sync
diff --git a/application/palemoon/branding/official/pref/palemoon-branding.js b/application/palemoon/branding/official/pref/palemoon-branding.js
index 8e8703fb7..02e75b6ce 100644
--- a/application/palemoon/branding/official/pref/palemoon-branding.js
+++ b/application/palemoon/branding/official/pref/palemoon-branding.js
@@ -12,7 +12,7 @@ pref("general.useragent.compatMode.gecko", true);
pref("general.useragent.compatMode.firefox", true);
// ========================= updates ========================
-#if defined(XP_WIN)
+#if defined(XP_WIN) || defined(XP_LINUX)
// Updates enabled
pref("app.update.enabled", true);
pref("app.update.cert.checkAttributes", true);
@@ -29,7 +29,7 @@ pref("app.update.url.manual", "http://www.palemoon.org/");
// supplied in the "An update is available" page of the update wizard.
pref("app.update.url.details", "http://www.palemoon.org/releasenotes.shtml");
#else
-// Updates disabled (Linux, etc.)
+// Updates disabled (Mac, etc.)
pref("app.update.enabled", false);
pref("app.update.url", "");
#endif
diff --git a/application/palemoon/branding/unofficial/locales/en-US/brand.dtd b/application/palemoon/branding/unofficial/locales/en-US/brand.dtd
index a90d52441..debb7442d 100644
--- a/application/palemoon/branding/unofficial/locales/en-US/brand.dtd
+++ b/application/palemoon/branding/unofficial/locales/en-US/brand.dtd
@@ -4,5 +4,5 @@
<!ENTITY brandShortName "New Moon">
<!ENTITY brandFullName "New Moon">
-<!ENTITY vendorShortName "Moonchild">
+<!ENTITY vendorShortName "a community developer">
<!ENTITY trademarkInfo.part1 " ">
diff --git a/application/palemoon/branding/unofficial/newmoon.desktop b/application/palemoon/branding/unofficial/newmoon.desktop
new file mode 100644
index 000000000..6dcf32477
--- /dev/null
+++ b/application/palemoon/branding/unofficial/newmoon.desktop
@@ -0,0 +1,352 @@
+[Desktop Entry]
+Name=New Moon
+GenericName=Web Browser
+GenericName[ar]=متصÙØ­ ويب
+GenericName[ast]=Restolador Web
+GenericName[bn]=ওয়েব বà§à¦°à¦¾à¦‰à¦œà¦¾à¦°
+GenericName[ca]=Navegador web
+GenericName[cs]=Webový prohlížeÄ
+GenericName[da]=Webbrowser
+GenericName[el]=ΠεÏιηγητής διαδικτÏου
+GenericName[es]=Navegador web
+GenericName[et]=Veebibrauser
+GenericName[fa]=مرورگر اینترنتی
+GenericName[fi]=WWW-selain
+GenericName[fr]=Navigateur Web
+GenericName[gl]=Navegador Web
+GenericName[he]=דפדפן ×ינטרנט
+GenericName[hr]=Web preglednik
+GenericName[hu]=Webböngésző
+GenericName[it]=Browser web
+GenericName[ja]=ウェブ・ブラウザ
+GenericName[ko]=웹 브ë¼ìš°ì €
+GenericName[ku]=Geroka torê
+GenericName[lt]=Interneto naršyklė
+GenericName[nb]=Nettleser
+GenericName[nl]=Webbrowser
+GenericName[nn]=Nettlesar
+GenericName[no]=Nettleser
+GenericName[pl]=PrzeglÄ…darka WWW
+GenericName[pt]=Navegador Web
+GenericName[pt_BR]=Navegador Web
+GenericName[ro]=Navigator Internet
+GenericName[ru]=Веб-браузер
+GenericName[sk]=Internetový prehliadaÄ
+GenericName[sl]=Spletni brskalnik
+GenericName[sv]=Webbläsare
+GenericName[tr]=Web Tarayıcı
+GenericName[ug]=توركۆرگۈ
+GenericName[uk]=Веб-браузер
+GenericName[vi]=Trình duyệt Web
+GenericName[zh_CN]=网络æµè§ˆå™¨
+GenericName[zh_TW]=網路ç€è¦½å™¨
+Comment=Browse the World Wide Web
+Comment[ar]=تصÙØ­ الشبكة العنكبوتية العالمية
+Comment[ast]=Restola pela Rede
+Comment[bn]=ইনà§à¦Ÿà¦¾à¦°à¦¨à§‡à¦Ÿ বà§à¦°à¦¾à¦‰à¦œ করà§à¦¨
+Comment[ca]=Navegueu per la web
+Comment[cs]=Prohlížení stránek World Wide Webu
+Comment[da]=Surf på internettet
+Comment[de]=Im Internet surfen
+Comment[el]=ΜποÏείτε να πεÏιηγηθείτε στο διαδίκτυο (Web)
+Comment[es]=Navegue por la web
+Comment[et]=Lehitse veebi
+Comment[fa]=صÙحات شبکه جهانی اینترنت را مرور نمایید
+Comment[fi]=Selaa Internetin WWW-sivuja
+Comment[fr]=Naviguer sur le Web
+Comment[gl]=Navegar pola rede
+Comment[he]=גלישה ברחבי ×”×ינטרנט
+Comment[hr]=Pretražite web
+Comment[hu]=A világháló böngészése
+Comment[it]=Esplora il web
+Comment[ja]=ウェブを閲覧ã—ã¾ã™
+Comment[ko]=ì›¹ì„ ëŒì•„ 다닙니다
+Comment[ku]=Li torê bigere
+Comment[lt]=Naršykite internete
+Comment[nb]=Surf på nettet
+Comment[nl]=Verken het internet
+Comment[nn]=Surf på nettet
+Comment[no]=Surf på nettet
+Comment[pl]=PrzeglÄ…danie stron WWW
+Comment[pt]=Navegue na Internet
+Comment[pt_BR]=Navegue na Internet
+Comment[ro]=Navigați pe Internet
+Comment[ru]=ДоÑтуп в Интернет
+Comment[sk]=Prehliadanie internetu
+Comment[sl]=Brskajte po spletu
+Comment[sv]=Surfa på webben
+Comment[tr]=Ä°nternet'te Gezinin
+Comment[ug]=دۇنيادىكى توربەتلەرنى كۆرگىلى بولىدۇ
+Comment[uk]=ПереглÑд Ñторінок Інтернету
+Comment[vi]=Äể duyệt các trang web
+Comment[zh_CN]=æµè§ˆäº’è”网
+Comment[zh_TW]=ç€è¦½ç¶²éš›ç¶²è·¯
+Exec=palemoon %u
+Terminal=false
+Type=Application
+Icon=palemoon
+Categories=Network;WebBrowser;
+MimeType=text/html;text/xml;application/xhtml+xml;application/vnd.mozilla.xul+xml;text/mml;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/ftp;
+StartupNotify=true
+Actions=NewTab;NewWindow;NewPrivateWindow;
+
+[Desktop Action NewTab]
+Name=Open new tab
+Name[ach]=Yab dirica matidi manyen
+Name[af]=Open nuwe oortjie
+Name[an]=Ubrir una pestanya nueva
+Name[ar]=اÙتح لسانًا جديدًا
+Name[as]=নতà§à¦¨ টেব খোলক
+Name[ast]=Abrir llingüeta nueva
+Name[az]=Yeni vərəq aç
+Name[be]=Ðдкрыць новую ÑžÑтаўку
+Name[bg]=ОтварÑне на нов подпрозорец
+Name[bn_BD]=নতà§à¦¨ টà§à¦¯à¦¾à¦¬ খà§à¦²à§à¦¨
+Name[bn_IN]=নতà§à¦¨ টà§à¦¯à¦¾à¦¬ খà§à¦²à§à¦¨
+Name[br]=Digeriñ un ivinell nevez
+Name[bs]=Otvori novi tab
+Name[ca]=Obre una pestanya nova
+Name[cs]=Otevřít nový panel
+Name[cy]=Agor tab newydd
+Name[da]=Ã…bn nyt faneblad
+Name[de]=Neuen Tab öffnen
+Name[dsb]=Nowy rejtark wócyniś
+Name[el]=Άνοιγμα νέας καÏτέλας
+Name[eo]=Malfermi novan langeton
+Name[es_AR]=Abrir nueva pestaña
+Name[es_CL]=Abrir nueva pestaña
+Name[es_ES]=Abrir pestaña nueva
+Name[es_MX]=Abrir una pestaña nueva
+Name[et]=Ava uus kaart
+Name[eu]=Ireki fitxa berria
+Name[ff]=Uddit tabbere hesere
+Name[fi]=Avaa uusi välilehti
+Name[fr]=Ouvrir un nouvel onglet
+Name[fy_NL]=Iepenje nij ljepblêd
+Name[ga_IE]=Oscail i gcluaisín nua
+Name[gd]=Fosgail taba ùr
+Name[gl]=Abrir unha nova lapela
+Name[gu_IN]=નવી ટૅબને ખોલો
+Name[he]=פתיחת לשונית חדשה
+Name[hi_IN]=नया टैब खोलें
+Name[hr]=Otvori novu karticu
+Name[hsb]=Nowy rajtark woÄinić
+Name[hu]=Új lap megnyitása
+Name[hy_AM]=Ô²Õ¡ÖÕ¥Õ¬ Õ¶Õ¸Ö€ Õ¶Õ¥Ö€Õ¤Õ«Ö€
+Name[id]=Buka tab baru
+Name[is]=Opna nýjan flipa
+Name[it]=Apri nuova scheda
+Name[ja]=æ–°ã—ã„タブ
+Name[kk]=Жаңа бетті ашу
+Name[kn]=ಹೊಸ ಹಾಳೆಯನà³à²¨à³ ತೆರೆ
+Name[ko]=새 탭 열기
+Name[lij]=Àrvi nêuvo féuggio
+Name[lt]=Atverti naujÄ… kortelÄ™
+Name[mai]=नव टैब खोलू
+Name[mk]=Отвори ново јазиче
+Name[ml]=à´ªàµà´¤à´¿à´¯ à´±àµà´±à´¾à´¬àµ à´¤àµà´±à´•àµà´•àµà´•
+Name[mr]=नवीन टॅब उघडा
+Name[ms]=Buka tab baru
+Name[nb_NO]=Ã…pne ny fane
+Name[nl]=Nieuw tabblad openen
+Name[nn_NO]=Opna ny fane
+Name[or]=ନୂତନ ଟà­à­Ÿà¬¾à¬¬ ଖୋଲନà­à¬¤à­
+Name[pa_IN]=ਨਵੀਂ ਟੈਬ ਖੋਲà©à¨¹à©‹
+Name[pl]=Otwórz nową kartę
+Name[pt_BR]=Nova aba
+Name[pt_PT]=Abrir novo separador
+Name[rm]=Avrir in nov tab
+Name[ro]=Deschide o filă nouă
+Name[ru]=Открыть новую вкладку
+Name[si]=නව ටà·à¶¶à¶º විවෘත කරන්න
+Name[sk]=Otvoriť novú kartu
+Name[sl]=Odpri nov zavihek
+Name[son]=Nor loku taaga feeri
+Name[sq]=Hap skedë të re
+Name[sr]=Отвори нови језичак
+Name[sv_SE]=Öppna ny flik
+Name[ta]=பà¯à®¤à®¿à®¯ கீறà¯à®±à¯ˆà®¤à¯ திற
+Name[te]=కొతà±à°¤ టాబౠతెరà±à°µà±à°®à±
+Name[th]=เปิดà¹à¸—็บใหม่
+Name[tr]=Yeni sekme aç
+Name[uk]=Відкрити нову вкладку
+Name[uz]=Yangi ichki oyna ochish
+Name[vi]=Mở thẻ mới
+Name[xh]=Vula ithebhu entsha
+Name[zh_CN]=打开新标签页
+Name[zh_TW]=開啟新分é 
+Exec=palemoon -new-tab
+
+[Desktop Action NewWindow]
+Name=Open new window
+Name[ach]=Yab dirica manyen
+Name[af]=Open nuwe venster
+Name[an]=Ubrir una nueva finestra
+Name[ar]=اÙتح ناÙذة جديدة
+Name[as]=নতà§à¦¨ উইনà§à¦¡à§‹ খোলক
+Name[ast]=Abrir ventana nueva
+Name[az]=Yeni pəncərə aç
+Name[be]=Ðдкрыць новае акно
+Name[bg]=ОтварÑне на нов прозорец
+Name[bn_BD]=নতà§à¦¨ উইনà§à¦¡à§‹ খà§à¦²à§à¦¨
+Name[bn_IN]=নতà§à¦¨ উইনà§à¦¡à§‹ খà§à¦²à§à¦¨
+Name[br]=Digeriñ ur prenestr nevez
+Name[bs]=Otvori novi prozor
+Name[ca]=Obre una finestra nova
+Name[cs]=Otevřít nové okno
+Name[cy]=Agor ffenestr newydd
+Name[da]=Ã…bn nyt vindue
+Name[de]=Neues Fenster öffnen
+Name[dsb]=Nowe wokno wócyniś
+Name[el]=Άνοιγμα νέου παÏαθÏÏου
+Name[eo]=Malfermi novan fenestron
+Name[es_AR]=Abrir nueva ventana
+Name[es_CL]=Abrir nueva ventana
+Name[es_ES]=Abrir nueva ventana
+Name[es_MX]=Abrir nueva ventana
+Name[et]=Ava uus aken
+Name[eu]=Ireki leiho berria
+Name[ff]=Uddit henorde hesere
+Name[fi]=Avaa uusi ikkuna
+Name[fr]=Ouvrir une nouvelle fenêtre
+Name[fy_NL]=Iepenje nij finster
+Name[ga_IE]=Oscail fuinneog nua
+Name[gd]=Fosgail uinneag ùr
+Name[gl]=Abrir unha nova xanela
+Name[gu_IN]=નવી વિનà«àª¡à«‹àª¨à«‡ ખોલો
+Name[he]=פתח חלון חדש
+Name[hi_IN]=नई विंडो खोलें
+Name[hr]=Otvori novi prozor
+Name[hsb]=Nowe wokno woÄinić
+Name[hu]=Új ablak megnyitása
+Name[hy_AM]=Ô²Õ¡ÖÕ¥Õ¬ Õ¶Õ¸Ö€ ÕºÕ¡Õ¿Õ¸Ö‚Õ°Õ¡Õ¶
+Name[id]=Buka jendela baru
+Name[is]=Opna nýjan glugga
+Name[it]=Apri nuova finestra
+Name[ja]=æ–°ã—ã„ウィンドウ
+Name[kk]=Жаңа терезені ашу
+Name[kn]=ಹೊಸ ವಿಂಡೊವನà³à²¨à³ ತೆರೆ
+Name[ko]=새 창 열기
+Name[lij]=Àrvi nêuvo barcón
+Name[lt]=Atverti naujÄ… langÄ…
+Name[mai]=नई विंडो खोलू
+Name[mk]=Отвори нов прозорец
+Name[ml]=à´ªàµà´¤à´¿à´¯ ജാലകം à´¤àµà´±à´•àµà´•àµà´•
+Name[mr]=नवीन पटल उघडा
+Name[ms]=Buka tetingkap baru
+Name[nb_NO]=Ã…pne nytt vindu
+Name[nl]=Een nieuw venster openen
+Name[nn_NO]=Opna nytt vindauge
+Name[or]=ନୂତନ ୱିଣà­à¬¡à­‹ ଖୋଲନà­à¬¤à­
+Name[pa_IN]=ਨਵੀਂ ਵਿੰਡੋ ਖੋਲà©à¨¹à©‹
+Name[pl]=Otwórz nowe okno
+Name[pt_BR]=Nova janela
+Name[pt_PT]=Abrir nova janela
+Name[rm]=Avrir ina nova fanestra
+Name[ro]=Deschide o nouă fereastră
+Name[ru]=Открыть новое окно
+Name[si]=නව කවුළුවක් විවෘත කරන්න
+Name[sk]=Otvoriť nové okno
+Name[sl]=Odpri novo okno
+Name[son]=Zanfun taaga feeri
+Name[sq]=Hap dritare të re
+Name[sr]=Отвори нови прозор
+Name[sv_SE]=Öppna nytt fönster
+Name[ta]=பà¯à®¤à®¿à®¯ சாளரதà¯à®¤à¯ˆ திற
+Name[te]=కొతà±à°¤ విండో తెరà±à°µà±à°®à±
+Name[th]=เปิดหน้าต่างใหม่
+Name[tr]=Yeni pencere aç
+Name[uk]=Відкрити нове вікно
+Name[uz]=Yangi oyna ochish
+Name[vi]=Mở cửa sổ mới
+Name[xh]=Vula iwindow entsha
+Name[zh_CN]=打开新窗å£
+Name[zh_TW]=開啟新視窗
+Exec=palemoon -new-window
+
+[Desktop Action NewPrivateWindow]
+Name=New private window
+Name[ach]=Dirica manyen me mung
+Name[af]=Nuwe privaatvenster
+Name[an]=Nueva finestra de navegación privada
+Name[ar]=ناÙذة خاصة جديدة
+Name[as]=নতà§à¦¨ বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত উইনà§à¦¡à§‹
+Name[ast]=Ventana privada nueva
+Name[az]=Yeni məxfi pəncərə
+Name[be]=Ðовае акно адаÑабленнÑ
+Name[bg]=Ðов прозорец за поверително Ñърфиране
+Name[bn_BD]=নতà§à¦¨ বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত উইনà§à¦¡à§‹
+Name[bn_IN]=নতà§à¦¨ বà§à¦¯à¦¾à¦•à§à¦¤à¦¿à¦—ত উইনà§à¦¡à§‹
+Name[br]=Prenestr merdeiñ prevez nevez
+Name[bs]=Novi privatni prozor
+Name[ca]=Finestra privada nova
+Name[cs]=Nové anonymní okno
+Name[cy]=Ffenestr breifat newydd
+Name[da]=Nyt privat vindue
+Name[de]=Neues privates Fenster öffnen
+Name[dsb]=Nowe priwatne wokno
+Name[el]=Îέο παÏάθυÏο ιδιωτικής πεÏιήγησης
+Name[eo]=Nova privata fenestro
+Name[es_AR]=Nueva ventana privada
+Name[es_CL]=Nueva ventana privada
+Name[es_ES]=Nueva ventana privada
+Name[es_MX]=Nueva ventana privada
+Name[et]=Uus privaatne aken
+Name[eu]=Leiho pribatu berria
+Name[ff]=Henorde suturo hesere
+Name[fi]=Uusi yksityinen ikkuna
+Name[fr]=Nouvelle fenêtre de navigation privée
+Name[fy_NL]=Nij priveefinster
+Name[ga_IE]=Fuinneog nua phríobháideach
+Name[gd]=Uinneag phrìobhaideach ùr
+Name[gl]=Nova xanela privada
+Name[gu_IN]=નવી ખાનગી વિનà«àª¡à«‹
+Name[he]=חלון פרטי חדש
+Name[hi_IN]=नया निजी विंडो
+Name[hr]=Novi privatni prozor
+Name[hsb]=Nowe priwatne wokno
+Name[hu]=Új privát ablak
+Name[hy_AM]=Ô³Õ¡Õ²Õ¿Õ¶Õ« Õ¤Õ«Õ¿Õ¡Ö€Õ¯Õ¸Ö‚Õ´
+Name[id]=Jendela mode pribadi baru
+Name[is]=Nýr einkagluggi
+Name[it]=Nuova finestra anonima
+Name[ja]=æ–°ã—ã„プライベートウィンドウ
+Name[kk]=Жаңа жекелік терезе
+Name[kn]=ಹೊಸ ಖಾಸಗಿ ಕಿಟಕಿ
+Name[ko]=새 사ìƒí™œ 보호 ì°½
+Name[lij]=Nêuvo barcón privòu
+Name[lt]=Atverti privaÄiojo narÅ¡ymo langÄ…
+Name[mai]=नव निज विंडो
+Name[mk]=Ðов прозорец за приватно Ñурфање
+Name[ml]=à´ªàµà´¤à´¿à´¯ à´¸àµà´µà´•à´¾à´°àµà´¯ ജാലകം
+Name[mr]=नवीन वैयकà¥à¤¤à¤¿à¤• पटल
+Name[ms]=Tetingkap peribadi baharu
+Name[nb_NO]=Nytt privat vindu
+Name[nl]=Nieuw privévenster
+Name[nn_NO]=Nytt privat vindauge
+Name[or]=ନୂତନ ବà­à­Ÿà¬•à­à¬¤à¬¿à¬—ତ ୱିଣà­à¬¡à­‹
+Name[pa_IN]=ਨਵੀਂ ਪà©à¨°à¨¾à¨ˆà¨µà©‡à¨Ÿ ਵਿੰਡੋ
+Name[pl]=Nowe okno w trybie prywatnym
+Name[pt_BR]=Nova janela privativa
+Name[pt_PT]=Nova janela privada
+Name[rm]=Nova fanestra privata
+Name[ro]=Fereastră fără urme nouă
+Name[ru]=Ðовое приватное окно
+Name[si]=නව පුද්ගලික කවුළුව
+Name[sk]=Nové okno v režime Súkromné prehliadanie
+Name[sl]=Novo zasebno okno
+Name[son]=Sutura zanfun taaga
+Name[sq]=Dritare e re private
+Name[sr]=Ðови приватни прозор
+Name[sv_SE]=Nytt privat fönster
+Name[ta]=பà¯à®¤à®¿à®¯ தனிபà¯à®ªà®Ÿà¯à®Ÿ சாளரமà¯
+Name[te]=కొతà±à°¤ ఆంతరంగిక విండో
+Name[th]=หน้าต่างท่องเว็บà¹à¸šà¸šà¸ªà¹ˆà¸§à¸™à¸•à¸±à¸§à¹ƒà¸«à¸¡à¹ˆ
+Name[tr]=Yeni gizli pencere
+Name[uk]=Ðове приватне вікно
+Name[uz]=Yangi shaxsiy oyna
+Name[vi]=Cửa sổ riêng tư mới
+Name[xh]=Ifestile yangasese entsha
+Name[zh_CN]=新建éšç§æµè§ˆçª—å£
+Name[zh_TW]=新增隱ç§è¦–窗
+Exec=palemoon -private-window
diff --git a/application/palemoon/branding/unstable/locales/en-US/brand.properties b/application/palemoon/branding/unstable/locales/en-US/brand.properties
index d85ceebce..7d4b46954 100644
--- a/application/palemoon/branding/unstable/locales/en-US/brand.properties
+++ b/application/palemoon/branding/unstable/locales/en-US/brand.properties
@@ -2,10 +2,4 @@ brandShortName=Pale Moon
brandFullName=Pale Moon
vendorShortName=Moonchild
-homePageSingleStartMain=Pale Moon Start, a convenient home page with built-in search
-homePageImport=Import your home page from %S
-
-homePageMigrationPageTitle=Home Page Selection
-homePageMigrationDescription=Please select the home page you wish to use:
-
syncBrandShortName=Sync
diff --git a/application/palemoon/components/permissions/aboutPermissions.js b/application/palemoon/components/permissions/aboutPermissions.js
index 750dbaac3..6a02daa29 100644
--- a/application/palemoon/components/permissions/aboutPermissions.js
+++ b/application/palemoon/components/permissions/aboutPermissions.js
@@ -572,13 +572,7 @@ var AboutPermissions = {
permissionEntry.setAttribute("id", permString + "-entry");
// If the plugin is disabled, it makes no sense to change its
// click-to-play status, so don't add it.
- // If the click-to-play pref is not set and the plugin is not
- // click-to-play blocklisted, again click-to-play doesn't apply,
- // so don't add it.
- if (plugin.disabled ||
- (!Services.prefs.getBoolPref("plugins.click_to_play") &&
- (pluginHost.getStateForType(mimeType)
- != Ci.nsIPluginTag.STATE_CLICKTOPLAY))) {
+ if (plugin.disabled) {
permissionEntry.hidden = true;
} else {
permissionEntry.hidden = false;
@@ -588,10 +582,13 @@ var AboutPermissions = {
this._noGlobalDeny.push(permString);
Object.defineProperty(PermissionDefaults, permString, {
get: function() {
- return this.isClickToPlay()
- ? PermissionDefaults.UNKNOWN
- : PermissionDefaults.ALLOW;
- }.bind(permissionEntry),
+ if ((Services.prefs.getBoolPref("plugins.click_to_play") &&
+ plugin.clicktoplay) ||
+ permString.startsWith("plugin-vulnerable:")) {
+ return PermissionDefaults.UNKNOWN;
+ }
+ return PermissionDefaults.ALLOW;
+ },
set: function(aValue) {
this.clicktoplay = (aValue == PermissionDefaults.UNKNOWN);
}.bind(plugin),
@@ -1051,21 +1048,24 @@ var AboutPermissions = {
// which is reserved for site-specific preferences only.
document.getElementById(aType + "-9").hidden = true;
} else if (aType.startsWith("plugin")) {
- if (!Services.prefs.getBoolPref("plugins.click_to_play")) {
- // It is reserved for site-specific preferences only.
- document.getElementById(aType + "-0").disabled = true;
- }
pluginPermissionEntry = document.getElementById(aType + "-entry");
pluginPermissionEntry.setAttribute("vulnerable", "");
+ let vulnerable = false;
if (pluginPermissionEntry.isBlocklisted()) {
permissionMenulist.disabled = true;
permissionMenulist.setAttribute("tooltiptext",
AboutPermissions._stringBundleAboutPermissions
.GetStringFromName("pluginBlocklisted"));
+ vulnerable = true;
} else {
permissionMenulist.disabled = false;
permissionMenulist.setAttribute("tooltiptext", "");
}
+ if (Services.prefs.getBoolPref("plugins.click_to_play") || vulnerable) {
+ document.getElementById(aType + "-0").disabled = false;
+ } else {
+ document.getElementById(aType + "-0").disabled = true;
+ }
}
} else {
let _visibility = "visible";
@@ -1079,14 +1079,20 @@ var AboutPermissions = {
} else if (aType == "cookie") {
document.getElementById(aType + "-9").hidden = false;
} else if (aType.startsWith("plugin")) {
- document.getElementById(aType + "-0").disabled = false;
pluginPermissionEntry = document.getElementById(aType + "-entry");
let permString = pluginPermissionEntry.getAttribute("permString");
+ let vulnerable = false;
if (permString.startsWith("plugin-vulnerable:")) {
let nameVulnerable = " \u2014 "
+ AboutPermissions._stringBundleBrowser
.GetStringFromName("pluginActivateVulnerable.label");
pluginPermissionEntry.setAttribute("vulnerable", nameVulnerable);
+ vulnerable = true;
+ }
+ if (Services.prefs.getBoolPref("plugins.click_to_play") || vulnerable) {
+ document.getElementById(aType + "-0").disabled = false;
+ } else {
+ document.getElementById(aType + "-0").disabled = true;
}
permissionMenulist.disabled = false;
permissionMenulist.setAttribute("tooltiptext", "");
diff --git a/application/palemoon/components/permissions/aboutPermissions.xul b/application/palemoon/components/permissions/aboutPermissions.xul
index afd98247b..dfee14756 100644
--- a/application/palemoon/components/permissions/aboutPermissions.xul
+++ b/application/palemoon/components/permissions/aboutPermissions.xul
@@ -29,7 +29,7 @@
<key key="&focusSearch.key;" modifiers="accel" oncommand="AboutPermissions.focusFilterBox();"/>
</keyset>
- <hbox flex="1" id="permissions-header">
+ <hbox id="permissions-header">
<label id="permissions-pagetitle">&permissionsManager.title;</label>
</hbox>
<hbox flex="1" id="permissions-content" class="main-content">
diff --git a/application/palemoon/components/places/content/controller.js b/application/palemoon/components/places/content/controller.js
index e2ae2afb0..7f27e8347 100644
--- a/application/palemoon/components/places/content/controller.js
+++ b/application/palemoon/components/places/content/controller.js
@@ -300,9 +300,6 @@ PlacesController.prototype = {
* are non-removable. We don't need to worry about recursion here since it
* is a policy decision that a removable item not be placed inside a non-
* removable item.
- * @param aIsMoveCommand
- * True if the command for which this method is called only moves the
- * selected items to another container, false otherwise.
* @returns true if all nodes in the selection can be removed,
* false otherwise.
*/
@@ -462,8 +459,6 @@ PlacesController.prototype = {
uri = NetUtil.newURI(node.uri);
if (PlacesUtils.nodeIsBookmark(node)) {
nodeData["bookmark"] = true;
- PlacesUtils.nodeIsTagQuery(node.parent)
-
var parentNode = node.parent;
if (parentNode) {
if (PlacesUtils.nodeIsTagQuery(parentNode))
diff --git a/application/palemoon/components/preferences/applications.js b/application/palemoon/components/preferences/applications.js
index 5768de708..d06f9f9fb 100644
--- a/application/palemoon/components/preferences/applications.js
+++ b/application/palemoon/components/preferences/applications.js
@@ -8,15 +8,10 @@
//****************************************************************************//
// Constants & Enumeration Values
-/*
-#ifndef XP_MACOSX
-*/
var Cc = Components.classes;
var Ci = Components.interfaces;
var Cr = Components.results;
-/*
-#endif
-*/
+
Components.utils.import('resource://gre/modules/Services.jsm');
const TYPE_MAYBE_FEED = "application/vnd.mozilla.maybe.feed";
@@ -158,7 +153,7 @@ function isFeedType(t) {
*
* We create an instance of this wrapper for each entry we might display
* in the prefpane, and we compose the instances from various sources,
- * including navigator.plugins and the handler service.
+ * including plugins and the handler service.
*
* We don't implement all the original nsIHandlerInfo functionality,
* just the stuff that the prefpane needs.
@@ -272,7 +267,7 @@ HandlerInfoWrapper.prototype = {
// What to do with content of this type.
get preferredAction() {
// If we have an enabled plugin, then the action is to use that plugin.
- if (this.plugin && !this.isDisabledPluginType)
+ if (this.pluginName && !this.isDisabledPluginType)
return kActionUsePlugin;
// If the action is to use a helper app, but we don't have a preferred
@@ -293,6 +288,14 @@ HandlerInfoWrapper.prototype = {
},
set preferredAction(aNewValue) {
+ // If the action is to use the plugin,
+ // we must set the preferred action to "save to disk".
+ // But only if it's not currently the preferred action.
+ if ((aNewValue == kActionUsePlugin) &&
+ (this.preferredAction != Ci.nsIHandlerInfo.saveToDisk)) {
+ aNewValue = Ci.nsIHandlerInfo.saveToDisk;
+ }
+
// We don't modify the preferred action if the new action is to use a plugin
// because handler info objects don't understand our custom "use plugin"
// value. Also, leaving it untouched means that we can automatically revert
@@ -308,7 +311,7 @@ HandlerInfoWrapper.prototype = {
// of any user configuration, and the default in that case is to always ask,
// even though we never ask for content handled by a plugin, so special case
// plugin-handled types by returning false here.
- if (this.plugin && this.handledOnlyByPlugin)
+ if (this.pluginName && this.handledOnlyByPlugin)
return false;
// If this is a protocol type and the preferred action is "save to disk",
@@ -1064,24 +1067,22 @@ var gApplicationsPane = {
* check the pref ourselves to find out if it's enabled.
*/
_loadPluginHandlers: function() {
- for (let i = 0; i < navigator.plugins.length; ++i) {
- let plugin = navigator.plugins[i];
- for (let j = 0; j < plugin.length; ++j) {
- let type = plugin[j].type;
-
- let handlerInfoWrapper;
- if (type in this._handledTypes)
- handlerInfoWrapper = this._handledTypes[type];
- else {
- let wrappedHandlerInfo =
- this._mimeSvc.getFromTypeAndExtension(type, null);
- handlerInfoWrapper = new HandlerInfoWrapper(type, wrappedHandlerInfo);
- handlerInfoWrapper.handledOnlyByPlugin = true;
- this._handledTypes[type] = handlerInfoWrapper;
- }
+ "use strict";
- handlerInfoWrapper.plugin = plugin;
+ let mimeTypes = navigator.mimeTypes;
+
+ for (let mimeType of mimeTypes) {
+ let handlerInfoWrapper;
+ if (mimeType.type in this._handledTypes) {
+ handlerInfoWrapper = this._handledTypes[mimeType.type];
+ } else {
+ let wrappedHandlerInfo =
+ this._mimeSvc.getFromTypeAndExtension(mimeType.type, null);
+ handlerInfoWrapper = new HandlerInfoWrapper(mimeType.type, wrappedHandlerInfo);
+ handlerInfoWrapper.handledOnlyByPlugin = true;
+ this._handledTypes[mimeType.type] = handlerInfoWrapper;
}
+ handlerInfoWrapper.pluginName = mimeType.enabledPlugin.name;
}
},
@@ -1274,7 +1275,7 @@ var gApplicationsPane = {
case kActionUsePlugin:
return this._prefsBundle.getFormattedString("usePluginIn",
- [aHandlerInfo.plugin.name,
+ [aHandlerInfo.pluginName,
this._brandShortName]);
}
},
@@ -1368,7 +1369,7 @@ var gApplicationsPane = {
{
var askMenuItem = document.createElement("menuitem");
- askMenuItem.setAttribute("alwaysAsk", "true");
+ askMenuItem.setAttribute("action", Ci.nsIHandlerInfo.alwaysAsk);
let label;
if (isFeedType(handlerInfo.type))
label = this._prefsBundle.getFormattedString("previewInApp",
@@ -1456,11 +1457,11 @@ var gApplicationsPane = {
}
// Create a menu item for the plugin.
- if (handlerInfo.plugin) {
+ if (handlerInfo.pluginName) {
var pluginMenuItem = document.createElement("menuitem");
pluginMenuItem.setAttribute("action", kActionUsePlugin);
let label = this._prefsBundle.getFormattedString("usePluginIn",
- [handlerInfo.plugin.name,
+ [handlerInfo.pluginName,
this._brandShortName]);
pluginMenuItem.setAttribute("label", label);
pluginMenuItem.setAttribute("tooltiptext", label);
@@ -1614,33 +1615,31 @@ var gApplicationsPane = {
var typeItem = this._list.selectedItem;
var handlerInfo = this._handledTypes[typeItem.type];
- if (aActionItem.hasAttribute("alwaysAsk")) {
+ let action = parseInt(aActionItem.getAttribute("action"));
+
+ // Set the plugin state if we're enabling or disabling a plugin.
+ if (action == kActionUsePlugin)
+ handlerInfo.enablePluginType();
+ else if (handlerInfo.pluginName && !handlerInfo.isDisabledPluginType)
+ handlerInfo.disablePluginType();
+
+ // Set the preferred application handler.
+ // We leave the existing preferred app in the list when we set
+ // the preferred action to something other than useHelperApp so that
+ // legacy datastores that don't have the preferred app in the list
+ // of possible apps still include the preferred app in the list of apps
+ // the user can choose to handle the type.
+ if (action == Ci.nsIHandlerInfo.useHelperApp)
+ handlerInfo.preferredApplicationHandler = aActionItem.handlerApp;
+
+ // Set the "always ask" flag.
+ if (action == Ci.nsIHandlerInfo.alwaysAsk)
handlerInfo.alwaysAskBeforeHandling = true;
- }
- else if (aActionItem.hasAttribute("action")) {
- let action = parseInt(aActionItem.getAttribute("action"));
-
- // Set the plugin state if we're enabling or disabling a plugin.
- if (action == kActionUsePlugin)
- handlerInfo.enablePluginType();
- else if (handlerInfo.plugin && !handlerInfo.isDisabledPluginType)
- handlerInfo.disablePluginType();
-
- // Set the preferred application handler.
- // We leave the existing preferred app in the list when we set
- // the preferred action to something other than useHelperApp so that
- // legacy datastores that don't have the preferred app in the list
- // of possible apps still include the preferred app in the list of apps
- // the user can choose to handle the type.
- if (action == Ci.nsIHandlerInfo.useHelperApp)
- handlerInfo.preferredApplicationHandler = aActionItem.handlerApp;
-
- // Set the "always ask" flag.
+ else
handlerInfo.alwaysAskBeforeHandling = false;
- // Set the preferred action.
- handlerInfo.preferredAction = action;
- }
+ // Set the preferred action.
+ handlerInfo.preferredAction = action;
handlerInfo.store();
diff --git a/application/palemoon/config/version.txt b/application/palemoon/config/version.txt
index abc7f476b..4f88287f0 100644
--- a/application/palemoon/config/version.txt
+++ b/application/palemoon/config/version.txt
@@ -1 +1 @@
-28.0.0b3 \ No newline at end of file
+28.0.0b5 \ No newline at end of file
diff --git a/application/palemoon/locales/en-US/chrome/browser/browser.properties b/application/palemoon/locales/en-US/chrome/browser/browser.properties
index 5dce994fe..9969bd753 100644
--- a/application/palemoon/locales/en-US/chrome/browser/browser.properties
+++ b/application/palemoon/locales/en-US/chrome/browser/browser.properties
@@ -323,19 +323,6 @@ pointerLock.neverAllow.accesskey=N
pointerLock.title2=Would you like to allow the pointer to be hidden on %S?
pointerLock.autoLock.title2=%S will hide the pointer.
-# Phishing/Malware Notification Bar.
-# LOCALIZATION NOTE (notAForgery, notAnAttack)
-# The two button strings will never be shown at the same time, so
-# it's okay for them to have the same access key
-safebrowsing.getMeOutOfHereButton.label=Get me out of here!
-safebrowsing.getMeOutOfHereButton.accessKey=G
-safebrowsing.reportedWebForgery=Reported Web Forgery!
-safebrowsing.notAForgeryButton.label=This isn't a web forgery…
-safebrowsing.notAForgeryButton.accessKey=F
-safebrowsing.reportedAttackSite=Reported Attack Site!
-safebrowsing.notAnAttackButton.label=This isn't an attack site…
-safebrowsing.notAnAttackButton.accessKey=A
-
# Ctrl-Tab
# LOCALIZATION NOTE (ctrlTab.showAll.label): #1 represents the number
# of tabs in the current browser window. It will always be 2 at least.
diff --git a/application/palemoon/locales/en-US/chrome/browser/downloads/downloads.properties b/application/palemoon/locales/en-US/chrome/browser/downloads/downloads.properties
index 761abf61a..2a5b77633 100644
--- a/application/palemoon/locales/en-US/chrome/browser/downloads/downloads.properties
+++ b/application/palemoon/locales/en-US/chrome/browser/downloads/downloads.properties
@@ -67,10 +67,6 @@ shortTimeLeftDays=%1$Sd
statusSeparator=%1$S \u2014 %2$S
statusSeparatorBeforeNumber=%1$S \u2014 %2$S
-fileExecutableSecurityWarning="%S" is an executable file. Executable files may contain viruses or other malicious code that could harm your computer. Use caution when opening this file. Are you sure you want to launch "%S"?
-fileExecutableSecurityWarningTitle=Open Executable File?
-fileExecutableSecurityWarningDontAsk=Don't ask me this again
-
# LOCALIZATION NOTE (otherDownloads2):
# This is displayed in an item at the bottom of the Downloads Panel when
# there are more downloads than can fit in the list in the panel. Use a
diff --git a/application/palemoon/locales/en-US/chrome/browser/preferences/preferences.properties b/application/palemoon/locales/en-US/chrome/browser/preferences/preferences.properties
index 3eebbcbec..b262eebf5 100644
--- a/application/palemoon/locales/en-US/chrome/browser/preferences/preferences.properties
+++ b/application/palemoon/locales/en-US/chrome/browser/preferences/preferences.properties
@@ -2,13 +2,6 @@
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-#### Security
-
-# LOCALIZATION NOTE: phishBefore uses %S to represent the name of the provider
-# whose privacy policy must be accepted (for enabling
-# check-every-page-as-I-load-it phishing protection).
-phishBeforeText=Selecting this option will send the address of web pages you are viewing to %S. To continue, please review and accept the following terms of service.
-
#### Fonts
labelDefaultFont=Default (%S)
diff --git a/application/palemoon/locales/en-US/chrome/overrides/appstrings.properties b/application/palemoon/locales/en-US/chrome/overrides/appstrings.properties
index 1bf544748..28ce0220e 100644
--- a/application/palemoon/locales/en-US/chrome/overrides/appstrings.properties
+++ b/application/palemoon/locales/en-US/chrome/overrides/appstrings.properties
@@ -29,8 +29,6 @@ externalProtocolPrompt=An external application must be launched to handle %1$S:
externalProtocolUnknown=<Unknown>
externalProtocolChkMsg=Remember my choice for all links of this type.
externalProtocolLaunchBtn=Launch application
-malwareBlocked=The site at %S has been reported as an attack site and has been blocked based on your security preferences.
-phishingBlocked=The website at %S has been reported as a web forgery designed to trick users into sharing personal or financial information.
cspBlocked=This page has a content security policy that prevents it from being embedded in this way.
xssBlockMode=This page contains an XSS attack that has been blocked for your security.
corruptedContentError=The page you are trying to view cannot be shown because an error in the data transmission was detected.
diff --git a/application/palemoon/locales/en-US/chrome/overrides/netError.dtd b/application/palemoon/locales/en-US/chrome/overrides/netError.dtd
index 04bfe9925..9e5cbc7e2 100644
--- a/application/palemoon/locales/en-US/chrome/overrides/netError.dtd
+++ b/application/palemoon/locales/en-US/chrome/overrides/netError.dtd
@@ -178,18 +178,6 @@ was trying to connect. -->
</ul>
">
-<!ENTITY malwareBlocked.title "Suspected Attack Site!">
-<!ENTITY malwareBlocked.longDesc "
-<p>Attack sites try to install programs that steal private information, use your computer to attack others, or damage your system.</p>
-<p>Website owners who believe their site has been reported as an attack site in error may <a href='https://www.stopbadware.org/request-review' >request a review</a>.</p>
-">
-
-<!ENTITY phishingBlocked.title "Suspected Web Forgery!">
-<!ENTITY phishingBlocked.longDesc "
-<p>Entering any personal information on this page may result in identity theft or other fraud.</p>
-<p>These types of web forgeries are used in scams known as phishing attacks, in which fraudulent web pages and emails are used to imitate sources you may trust.</p>
-">
-
<!ENTITY cspBlocked.title "Blocked by Content Security Policy">
<!ENTITY cspBlocked.longDesc "<p>&brandShortName; prevented this page from loading in this way because the page has a content security policy that disallows it.</p>">
diff --git a/application/palemoon/locales/en-US/pdfviewer/chrome.properties b/application/palemoon/locales/en-US/pdfviewer/chrome.properties
deleted file mode 100644
index 0b469195c..000000000
--- a/application/palemoon/locales/en-US/pdfviewer/chrome.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright 2012 Mozilla Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# Chrome notification bar messages and buttons
-unsupported_feature=This PDF document might not be displayed correctly.
-open_with_different_viewer=Open With Different Viewer
-open_with_different_viewer.accessKey=o
diff --git a/application/palemoon/locales/en-US/pdfviewer/viewer.properties b/application/palemoon/locales/en-US/pdfviewer/viewer.properties
deleted file mode 100644
index ffc025362..000000000
--- a/application/palemoon/locales/en-US/pdfviewer/viewer.properties
+++ /dev/null
@@ -1,124 +0,0 @@
-# Copyright 2012 Mozilla Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Previous Page
-previous_label=Previous
-next.title=Next Page
-next_label=Next
-
-# LOCALIZATION NOTE (page_label, page_of):
-# These strings are concatenated to form the "Page: X of Y" string.
-# Do not translate "{{pageCount}}", it will be substituted with a number
-# representing the total number of pages.
-page_label=Page:
-page_of=of {{pageCount}}
-
-zoom_out.title=Zoom Out
-zoom_out_label=Zoom Out
-zoom_in.title=Zoom In
-zoom_in_label=Zoom In
-zoom.title=Zoom
-print.title=Print
-print_label=Print
-presentation_mode.title=Switch to Presentation Mode
-presentation_mode_label=Presentation Mode
-open_file.title=Open File
-open_file_label=Open
-download.title=Download
-download_label=Download
-bookmark.title=Current view (copy or open in new window)
-bookmark_label=Current View
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Toggle Sidebar
-toggle_sidebar_label=Toggle Sidebar
-outline.title=Show Document Outline
-outline_label=Document Outline
-thumbs.title=Show Thumbnails
-thumbs_label=Thumbnails
-findbar.title=Find in Document
-findbar_label=Find
-
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Page {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Thumbnail of Page {{page}}
-
-# Context menu
-first_page.label=Go to First Page
-last_page.label=Go to Last Page
-page_rotate_cw.label=Rotate Clockwise
-page_rotate_ccw.label=Rotate Counterclockwise
-
-# Find panel button title and messages
-find_label=Find:
-find_previous.title=Find the previous occurrence of the phrase
-find_previous_label=Previous
-find_next.title=Find the next occurrence of the phrase
-find_next_label=Next
-find_highlight=Highlight all
-find_match_case_label=Match case
-find_reached_top=Reached top of document, continued from bottom
-find_reached_bottom=Reached end of document, continued from top
-find_not_found=Phrase not found
-
-# Error panel labels
-error_more_info=More Information
-error_less_info=Less Information
-error_close=Close
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Message: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Stack: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=File: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Line: {{line}}
-rendering_error=An error occurred while rendering the page.
-
-# Predefined zoom values
-page_scale_width=Page Width
-page_scale_fit=Page Fit
-page_scale_auto=Automatic Zoom
-page_scale_actual=Actual Size
-
-# Loading indicator messages
-loading_error_indicator=Error
-loading_error=An error occurred while loading the PDF.
-invalid_file_error=Invalid or corrupted PDF file.
-missing_file_error=Missing PDF file.
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} Annotation]
-request_password=PDF is protected by a password:
-invalid_password=Invalid Password.
-
-printing_not_supported=Warning: Printing is not fully supported by this browser.
-printing_not_ready=Warning: The PDF is not fully loaded for printing.
-web_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts.
-document_colors_disabled=PDF documents are not allowed to use their own colors: \'Allow pages to choose their own colors\' is deactivated in the browser.
diff --git a/application/palemoon/locales/jar.mn b/application/palemoon/locales/jar.mn
index 8d88e16fd..e3477c320 100644
--- a/application/palemoon/locales/jar.mn
+++ b/application/palemoon/locales/jar.mn
@@ -96,6 +96,3 @@
% override chrome://global/locale/netError.dtd chrome://browser/locale/netError.dtd
% override chrome://global/locale/appstrings.properties chrome://browser/locale/appstrings.properties
% override chrome://mozapps/locale/downloads/settingsChange.dtd chrome://browser/locale/downloads/settingsChange.dtd
-% locale pdf.js @AB_CD@ %locale/pdfviewer/
- locale/pdfviewer/viewer.properties (%pdfviewer/viewer.properties)
- locale/pdfviewer/chrome.properties (%pdfviewer/chrome.properties)
diff --git a/application/palemoon/themes/linux/permissions/aboutPermissions.css b/application/palemoon/themes/linux/permissions/aboutPermissions.css
index f4fd3d0ba..386e167e6 100644
--- a/application/palemoon/themes/linux/permissions/aboutPermissions.css
+++ b/application/palemoon/themes/linux/permissions/aboutPermissions.css
@@ -12,6 +12,11 @@
padding-bottom: 0.5em;
}
+/* content box */
+#permissions-content {
+ height: 100%;
+}
+
/* sites box */
#sites-box {
diff --git a/application/palemoon/themes/osx/browser.css b/application/palemoon/themes/osx/browser.css
index 8d3784afd..97073b161 100644
--- a/application/palemoon/themes/osx/browser.css
+++ b/application/palemoon/themes/osx/browser.css
@@ -27,6 +27,11 @@
border-top: none;
}
+#main-window {
+ -moz-appearance: none;
+ background-color: #eeeeee;
+}
+
#navigator-toolbox::after {
content: "";
display: -moz-box;
@@ -79,7 +84,7 @@
/* ::::: titlebar ::::: */
-#main-window[sizemode="normal"] > #titlebar {
+#main-window[sizemode="normal"]:not([privatebrowsingmode=temporary]) > #titlebar {
-moz-appearance: -moz-window-titlebar;
}
@@ -127,11 +132,16 @@
}
/* ensure extra titlebar doesn't appear on normal (e.g. non-privacy) windows */
-#main-window:not([privatebrowsingmode=temporary]):not(-moz-lwtheme) > #titlebar > #titlebar-content > #titlebar-buttonbox-container,
+#main-window:not([privatebrowsingmode=temporary]):not(:-moz-lwtheme) > #titlebar > #titlebar-content > #titlebar-buttonbox-container,
#main-window:not([drawintitlebar=true]):not(:-moz-lwtheme) > #titlebar {
display: none;
}
+#titlebar-buttonbox-container {
+ margin-left: 7px;
+ margin-top: 3px;
+}
+
/* ::::: bookmark toolbar ::::: */
#personal-bookmarks {
@@ -807,14 +817,6 @@ toolbar[brighttext] #bookmarks-menu-button.bookmark-item {
}
%endif
-/* ::::: fullscreen window controls ::::: */
-
-#minimize-button,
-#close-button,
-#fullscreen-button ~ #window-controls > #restore-button {
- display: none;
-}
-
/* ::::: Location Bar ::::: */
#urlbar,
@@ -1338,6 +1340,257 @@ richlistitem[type~="action"][actiontype="switchtab"][selected="true"] > .ac-url-
min-width: 27em;
}
+/* BOOKMARKING PANEL */
+#editBookmarkPanelStarIcon {
+ list-style-image: url("chrome://browser/skin/places/starred48.png");
+ width: 48px;
+ height: 48px;
+}
+
+#editBookmarkPanelStarIcon[unstarred] {
+ list-style-image: url("chrome://browser/skin/places/unstarred48.png");
+}
+
+#editBookmarkPanelTitle {
+ font-size: 130%;
+ font-weight: bold;
+}
+
+#editBMPanel_rows > row {
+ margin-bottom: 8px;
+}
+
+#editBMPanel_rows > row:last-of-type {
+ margin-bottom: 0;
+}
+
+/**** Input elements ****/
+
+#editBMPanel_rows > row > textbox,
+#editBMPanel_rows > row > hbox > textbox {
+ -moz-appearance: none;
+ background: linear-gradient(#fafafa, #fff);
+ background-clip: padding-box;
+ border-radius: 3px;
+ border: 1px solid rgba(0,0,0,.3) !important;
+ box-shadow: inset 0 1px 1px 1px rgba(0,0,0,.05),
+ 0 1px rgba(255,255,255,.3);
+ margin: 0;
+ padding: 3px 6px;
+}
+
+#editBMPanel_rows > row > textbox[focused="true"],
+#editBMPanel_rows > row > hbox > textbox[focused="true"] {
+ border-color: -moz-mac-focusring !important;
+ box-shadow: @focusRingShadow@;
+}
+
+/**** HUD style buttons ****/
+
+.editBookmarkPanelHeaderButton,
+.editBookmarkPanelBottomButton {
+ @hudButton@
+ margin: 0;
+ min-width: 82px;
+ min-height: 22px;
+}
+
+.editBookmarkPanelHeaderButton:hover:active,
+.editBookmarkPanelBottomButton:hover:active {
+ @hudButtonPressed@
+}
+
+.editBookmarkPanelHeaderButton:-moz-focusring,
+.editBookmarkPanelBottomButton:-moz-focusring {
+ @hudButtonFocused@
+}
+
+.editBookmarkPanelBottomButton[default="true"] {
+ background-color: #666;
+}
+
+#editBookmarkPanelHeader {
+ margin-bottom: 6px;
+}
+
+.editBookmarkPanelBottomButton:last-child {
+ -moz-margin-start: 8px;
+}
+
+/* The following elements come from editBookmarkOverlay.xul. Styling that's
+ specific to the editBookmarkPanel should be in browser.css. Styling that
+ should be shared by all editBookmarkOverlay.xul consumers should be in
+ editBookmarkOverlay.css. */
+
+#editBMPanel_newFolderBox {
+ background: linear-gradient(#fff, #f2f2f2);
+ background-origin: padding-box;
+ background-clip: padding-box;
+ border-radius: 0 0 3px 3px;
+ border: 1px solid #a5a5a5;
+ box-shadow: inset 0 1px rgba(255,255,255,.8),
+ inset 0 0 1px rgba(255,255, 255,.25),
+ 0 1px rgba(255,255,255,.3);
+ margin: 0;
+ padding: 0;
+ height: 20px;
+}
+
+#editBMPanel_newFolderButton {
+ -moz-appearance: none;
+ border: 0 solid #a5a5a5;
+ -moz-border-end-width: 1px;
+ padding: 0 9px;
+ margin: 0;
+ min-width: 21px;
+ min-height: 20px;
+ height: 20px;
+ color: #fff;
+ list-style-image: url("chrome://browser/skin/panel-plus-sign.png");
+ position: relative;
+}
+
+#editBMPanel_newFolderButton:hover:active {
+ background: linear-gradient(rgba(40,40,40,.9), rgba(70,70,70,.9));
+ box-shadow: inset 0 0 3px rgba(0,0,0,.2), inset 0 1px 7px rgba(0,0,0,.4);
+}
+
+#editBMPanel_newFolderButton:-moz-focusring {
+ @hudButtonFocused@
+}
+
+#editBMPanel_newFolderButton .button-text {
+ display: none;
+}
+
+#editBMPanel_folderMenuList {
+ @hudButton@
+ background-clip: padding-box;
+ margin: 0;
+ min-height: 22px;
+ padding-top: 2px;
+ padding-bottom: 1px;
+ -moz-padding-start: 8px;
+ -moz-padding-end: 4px;
+}
+
+#editBMPanel_folderMenuList:-moz-focusring {
+ @hudButtonFocused@
+}
+
+#editBMPanel_folderMenuList[open="true"],
+#editBMPanel_folderMenuList:hover:active {
+ @hudButtonPressed@
+}
+
+#editBMPanel_folderMenuList > .menulist-dropmarker {
+ -moz-appearance: none;
+ display: -moz-box;
+ background-color: transparent;
+ border: 0;
+ margin: 0;
+ padding: 0;
+ -moz-padding-end: 4px;
+ width: 7px;
+}
+
+#editBMPanel_folderMenuList > .menulist-dropmarker > .dropmarker-icon {
+ list-style-image: url("chrome://global/skin/icons/panel-dropmarker.png");
+}
+
+/**** folder tree and tag selector ****/
+
+#editBMPanel_folderTree,
+#editBMPanel_tagsSelector {
+ -moz-appearance: none;
+ background: linear-gradient(#fafafa, #fff);
+ background-clip: padding-box;
+ border-radius: 3px;
+ border: 1px solid rgba(0,0,0,.3);
+ box-shadow: inset 0 1px 1px 1px rgba(0,0,0,.05),
+ 0 1px rgba(255,255,255,.3);
+ margin: 0;
+}
+
+#editBMPanel_folderTree:-moz-focusring,
+#editBMPanel_tagsSelector:-moz-focusring {
+ border-color: -moz-mac-focusring;
+ box-shadow: @focusRingShadow@;
+}
+
+#editBMPanel_folderTree {
+ border-bottom: none;
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+ /* Implements editBookmarkPanel resizing on folderTree un-collapse. */
+ margin: 0 !important;
+ min-width: 27em;
+ position: relative;
+}
+
+/**** expanders ****/
+
+#editBookmarkPanel .expander-up,
+#editBookmarkPanel .expander-down {
+ @hudButton@
+ margin: 0;
+ -moz-margin-start: 4px;
+ min-width: 27px;
+ min-height: 22px;
+}
+
+#editBookmarkPanel .expander-up:-moz-focusring,
+#editBookmarkPanel .expander-down:-moz-focusring {
+ @hudButtonFocused@
+}
+
+#editBookmarkPanel .expander-up:hover:active,
+#editBookmarkPanel .expander-down:hover:active {
+ @hudButtonPressed@
+}
+
+#editBookmarkPanel .expander-up {
+ list-style-image: url("chrome://browser/skin/panel-expander-open.png");
+}
+
+#editBookmarkPanel .expander-down {
+ list-style-image: url("chrome://browser/skin/panel-expander-closed.png");
+}
+
+#editBookmarkPanel .expander-up > .button-box > .button-icon,
+#editBookmarkPanel .expander-down > .button-box > .button-icon {
+ margin: 1px 0 0;
+}
+
+#editBookmarkPanel .expander-up > .button-box > .button-text,
+#editBookmarkPanel .expander-down > .button-box > .button-text {
+ display: none;
+}
+
+@media (min-resolution: 2dppx) {
+ #editBookmarkPanel .expander-up {
+ list-style-image: url("chrome://browser/skin/panel-expander-open@2x.png");
+ }
+
+ #editBookmarkPanel .expander-down {
+ list-style-image: url("chrome://browser/skin/panel-expander-closed@2x.png");
+ }
+
+ #editBookmarkPanel .expander-up > .button-box > .button-icon,
+ #editBookmarkPanel .expander-down > .button-box > .button-icon {
+ width: 9px;
+ }
+}
+
+#editBMPanel_tagsField > .autocomplete-textbox-container > .textbox-input-box > html|*.textbox-input::-moz-placeholder {
+ opacity: 1.0;
+ color: #bbb;
+}
+
+.editBMPanel_rowLabel {
+ text-align: end;
+}
+
/* ::::: content area ::::: */
#sidebar {
@@ -2405,19 +2658,56 @@ toolbar[brighttext] #addonbar-closebutton {
right: auto;
}
-#main-window[privatebrowsingmode=temporary] #toolbar-menubar {
- background-image: url("chrome://browser/skin/privatebrowsing-dark.png");
- background-position: top right;
- background-repeat: no-repeat;
+#main-window[privatebrowsingmode=temporary] {
+ background-image: url("chrome://browser/skin/privatebrowsing-mask.png");
+ background-position: top right;
+ background-repeat: no-repeat;
+ background-color: moz-mac-chrome-active;
}
-#main-window[privatebrowsingmode=temporary] #toolbar-menubar:-moz-locale-dir(rtl) {
- background-position: top left;
+@media (min-resolution: 2dppx) {
+ #main-window[privatebrowsingmode=temporary] {
+ background-image: url("chrome://browser/skin/privatebrowsing-mask@2x.png");
+ background-size: 38px;
+ }
}
-#main-window[privatebrowsingmode=temporary] #appmenu-button > .button-box > .box-inherit > .button-icon {
- list-style-image: url("chrome://browser/skin/privatebrowsing-light.png");
- width: 20px;
- height: 16px;
+#main-window[privatebrowsingmode=temporary] {
+ background-position: top right 40px;
+}
+
+#main-window[privatebrowsingmode=temporary][inFullscreen] {
+ background-position: top right 10px;
}
+#main-window[privatebrowsingmode=temporary]:-moz-locale-dir(rtl) {
+ background-position: top left 70px;
+}
+
+#main-window[privatebrowsingmode=temporary][inFullscreen]:-moz-locale-dir(rtl) {
+ background-position: top left 10px;
+}
+
+#main-window[privatebrowsingmode=temporary]:-moz-window-inactive {
+ background-color: -moz-mac-chrome-inactive;
+}
+
+#main-window[privatebrowsingmode=temporary][inFullscreen] #nav-bar[tabsontop=false] {
+ -moz-padding-end: 50px !important;
+}
+
+@media (-moz-mac-lion-theme) {
+ #main-window[privatebrowsingmode=temporary][inFullscreen] #TabsToolbar[tabsontop=true] {
+ -moz-padding-end: 50px;
+ }
+}
+
+@media not all and (-moz-mac-lion-theme) {
+ #main-window[privatebrowsingmode=temporary] {
+ background-position: top right 10px;
+ }
+
+ #main-window[privatebrowsingmode=temporary][inFullscreen][tabsontop=true] #window-controls {
+ -moz-padding-end: 50px;
+ }
+}
diff --git a/application/palemoon/themes/osx/jar.mn b/application/palemoon/themes/osx/jar.mn
index e0c1ccbba..3df9496e8 100644
--- a/application/palemoon/themes/osx/jar.mn
+++ b/application/palemoon/themes/osx/jar.mn
@@ -41,6 +41,11 @@ browser.jar:
skin/classic/browser/mixed-content-blocked-64.png
skin/classic/browser/monitor.png
skin/classic/browser/monitor_16-10.png
+ skin/classic/browser/panel-expander-closed.png
+ skin/classic/browser/panel-expander-closed@2x.png
+ skin/classic/browser/panel-expander-open.png
+ skin/classic/browser/panel-expander-open@2x.png
+ skin/classic/browser/panel-plus-sign.png
skin/classic/browser/pageInfo.css
skin/classic/browser/pageInfo.png
skin/classic/browser/page-livemarks.png
@@ -50,6 +55,8 @@ browser.jar:
skin/classic/browser/Privacy-16.png
skin/classic/browser/Privacy-32.png
skin/classic/browser/Privacy-48.png
+ skin/classic/browser/privatebrowsing-mask.png
+ skin/classic/browser/privatebrowsing-mask@2x.png
skin/classic/browser/privatebrowsing-light.png
skin/classic/browser/privatebrowsing-dark.png
skin/classic/browser/reload-stop-go.png
diff --git a/application/palemoon/themes/osx/panel-expander-closed.png b/application/palemoon/themes/osx/panel-expander-closed.png
new file mode 100644
index 000000000..f0e97b22e
--- /dev/null
+++ b/application/palemoon/themes/osx/panel-expander-closed.png
Binary files differ
diff --git a/application/palemoon/themes/osx/panel-expander-closed@2x.png b/application/palemoon/themes/osx/panel-expander-closed@2x.png
new file mode 100644
index 000000000..0e7ded50f
--- /dev/null
+++ b/application/palemoon/themes/osx/panel-expander-closed@2x.png
Binary files differ
diff --git a/application/palemoon/themes/osx/panel-expander-open.png b/application/palemoon/themes/osx/panel-expander-open.png
new file mode 100644
index 000000000..e3febf4ff
--- /dev/null
+++ b/application/palemoon/themes/osx/panel-expander-open.png
Binary files differ
diff --git a/application/palemoon/themes/osx/panel-expander-open@2x.png b/application/palemoon/themes/osx/panel-expander-open@2x.png
new file mode 100644
index 000000000..391337030
--- /dev/null
+++ b/application/palemoon/themes/osx/panel-expander-open@2x.png
Binary files differ
diff --git a/application/palemoon/themes/osx/panel-plus-sign.png b/application/palemoon/themes/osx/panel-plus-sign.png
new file mode 100644
index 000000000..375601e68
--- /dev/null
+++ b/application/palemoon/themes/osx/panel-plus-sign.png
Binary files differ
diff --git a/application/palemoon/themes/osx/permissions/aboutPermissions.css b/application/palemoon/themes/osx/permissions/aboutPermissions.css
index 406bb9204..f9a4a88af 100644
--- a/application/palemoon/themes/osx/permissions/aboutPermissions.css
+++ b/application/palemoon/themes/osx/permissions/aboutPermissions.css
@@ -12,6 +12,11 @@
padding-bottom: 0.5em;
}
+/* content box */
+#permissions-content {
+ height: 100%;
+}
+
/* sites box */
#sites-box {
diff --git a/application/palemoon/themes/osx/privatebrowsing-mask.png b/application/palemoon/themes/osx/privatebrowsing-mask.png
new file mode 100644
index 000000000..92f60e29f
--- /dev/null
+++ b/application/palemoon/themes/osx/privatebrowsing-mask.png
Binary files differ
diff --git a/application/palemoon/themes/osx/privatebrowsing-mask@2x.png b/application/palemoon/themes/osx/privatebrowsing-mask@2x.png
new file mode 100644
index 000000000..ec1cf7452
--- /dev/null
+++ b/application/palemoon/themes/osx/privatebrowsing-mask@2x.png
Binary files differ
diff --git a/application/palemoon/themes/windows/permissions/aboutPermissions.css b/application/palemoon/themes/windows/permissions/aboutPermissions.css
index fb28ef02a..60ee81673 100644
--- a/application/palemoon/themes/windows/permissions/aboutPermissions.css
+++ b/application/palemoon/themes/windows/permissions/aboutPermissions.css
@@ -12,6 +12,11 @@
padding-bottom: 0.5em;
}
+/* content box */
+#permissions-content {
+ height: 100%;
+}
+
/* sites box */
#sites-box {
diff --git a/caps/nsScriptSecurityManager.cpp b/caps/nsScriptSecurityManager.cpp
index 0277f771d..129a4d0da 100644
--- a/caps/nsScriptSecurityManager.cpp
+++ b/caps/nsScriptSecurityManager.cpp
@@ -68,9 +68,6 @@
#include "nsILoadInfo.h"
#include "nsXPCOMStrings.h"
-// This should be probably defined on some other place... but I couldn't find it
-#define WEBAPPS_PERM_NAME "webapps-manage"
-
using namespace mozilla;
using namespace mozilla::dom;
diff --git a/config/milestone.txt b/config/milestone.txt
index d4c5c3f4b..4f75be17f 100644
--- a/config/milestone.txt
+++ b/config/milestone.txt
@@ -10,4 +10,4 @@
# hardcoded milestones in the tree from these two files.
#--------------------------------------------------------
-4.1.3
+4.1.4
diff --git a/devtools/client/themes/webconsole.css b/devtools/client/themes/webconsole.css
index c0c0177e1..89bb38628 100644
--- a/devtools/client/themes/webconsole.css
+++ b/devtools/client/themes/webconsole.css
@@ -148,7 +148,7 @@ a {
display: flex;
}
-.message-body > * {
+.message-body {
white-space: pre-wrap;
word-wrap: break-word;
}
diff --git a/dom/base/Element.cpp b/dom/base/Element.cpp
index 52d06b0f8..79b36a314 100644
--- a/dom/base/Element.cpp
+++ b/dom/base/Element.cpp
@@ -1230,6 +1230,42 @@ Element::GetAttribute(const nsAString& aName, DOMString& aReturn)
}
}
+bool
+Element::ToggleAttribute(const nsAString& aName,
+ const Optional<bool>& aForce,
+ ErrorResult& aError)
+{
+ aError = nsContentUtils::CheckQName(aName, false);
+ if (aError.Failed()) {
+ return false;
+ }
+
+ nsAutoString nameToUse;
+ const nsAttrName* name = InternalGetAttrNameFromQName(aName, &nameToUse);
+ if (!name) {
+ if (aForce.WasPassed() && !aForce.Value()) {
+ return false;
+ }
+ nsCOMPtr<nsIAtom> nameAtom = NS_Atomize(nameToUse);
+ if (!nameAtom) {
+ aError.Throw(NS_ERROR_OUT_OF_MEMORY);
+ return false;
+ }
+ aError = SetAttr(kNameSpaceID_None, nameAtom, EmptyString(), true);
+ return true;
+ }
+ if (aForce.WasPassed() && aForce.Value()) {
+ return true;
+ }
+ // Hold a strong reference here so that the atom or nodeinfo doesn't go
+ // away during UnsetAttr. If it did UnsetAttr would be left with a
+ // dangling pointer as argument without knowing it.
+ nsAttrName tmp(*name);
+
+ aError = UnsetAttr(name->NamespaceID(), name->LocalName(), true);
+ return false;
+}
+
void
Element::SetAttribute(const nsAString& aName,
const nsAString& aValue,
diff --git a/dom/base/Element.h b/dom/base/Element.h
index 049984d1b..c269ab14a 100644
--- a/dom/base/Element.h
+++ b/dom/base/Element.h
@@ -686,6 +686,8 @@ public:
void GetAttributeNS(const nsAString& aNamespaceURI,
const nsAString& aLocalName,
nsAString& aReturn);
+ bool ToggleAttribute(const nsAString& aName, const Optional<bool>& aForce,
+ ErrorResult& aError);
void SetAttribute(const nsAString& aName, const nsAString& aValue,
ErrorResult& aError);
void SetAttributeNS(const nsAString& aNamespaceURI,
diff --git a/dom/base/nsImageLoadingContent.cpp b/dom/base/nsImageLoadingContent.cpp
index d25dd6319..0c6c37b44 100644
--- a/dom/base/nsImageLoadingContent.cpp
+++ b/dom/base/nsImageLoadingContent.cpp
@@ -94,8 +94,7 @@ nsImageLoadingContent::nsImageLoadingContent()
mNewRequestsWillNeedAnimationReset(false),
mStateChangerDepth(0),
mCurrentRequestRegistered(false),
- mPendingRequestRegistered(false),
- mFrameCreateCalled(false)
+ mPendingRequestRegistered(false)
{
if (!nsContentUtils::GetImgLoaderForChannel(nullptr, nullptr)) {
mLoadingEnabled = false;
@@ -489,10 +488,8 @@ nsImageLoadingContent::FrameCreated(nsIFrame* aFrame)
{
NS_ASSERTION(aFrame, "aFrame is null");
- mFrameCreateCalled = true;
-
- TrackImage(mCurrentRequest);
- TrackImage(mPendingRequest);
+ TrackImage(mCurrentRequest, aFrame);
+ TrackImage(mPendingRequest, aFrame);
// We need to make sure that our image request is registered, if it should
// be registered.
@@ -513,8 +510,6 @@ nsImageLoadingContent::FrameDestroyed(nsIFrame* aFrame)
{
NS_ASSERTION(aFrame, "aFrame is null");
- mFrameCreateCalled = false;
-
// We need to make sure that our image request is deregistered.
nsPresContext* presContext = GetFramePresContext();
if (mCurrentRequest) {
@@ -1486,7 +1481,8 @@ nsImageLoadingContent::OnVisibilityChange(Visibility aNewVisibility,
}
void
-nsImageLoadingContent::TrackImage(imgIRequest* aImage)
+nsImageLoadingContent::TrackImage(imgIRequest* aImage,
+ nsIFrame* aFrame /*= nullptr */)
{
if (!aImage)
return;
@@ -1499,13 +1495,21 @@ nsImageLoadingContent::TrackImage(imgIRequest* aImage)
return;
}
- // We only want to track this request if we're visible. Ordinarily we check
- // the visible count, but that requires a frame; in cases where
- // GetOurPrimaryFrame() cannot obtain a frame (e.g. <feImage>), we assume
- // we're visible if FrameCreated() was called.
- nsIFrame* frame = GetOurPrimaryFrame();
- if ((frame && frame->GetVisibility() == Visibility::APPROXIMATELY_NONVISIBLE) ||
- (!frame && !mFrameCreateCalled)) {
+ if (!aFrame) {
+ aFrame = GetOurPrimaryFrame();
+ }
+
+ /* This line is deceptively simple. It hides a lot of subtlety. Before we
+ * create an nsImageFrame we call nsImageFrame::ShouldCreateImageFrameFor
+ * to determine if we should create an nsImageFrame or create a frame based
+ * on the display of the element (ie inline, block, etc). Inline, block, etc
+ * frames don't register for visibility tracking so they will return UNTRACKED
+ * from GetVisibility(). So this line is choosing to mark such images as
+ * visible. Once the image loads we will get an nsImageFrame and the proper
+ * visibility. This is a pitfall of tracking the visibility on the frames
+ * instead of the content node.
+ */
+ if (!aFrame || aFrame->GetVisibility() == Visibility::APPROXIMATELY_NONVISIBLE) {
return;
}
diff --git a/dom/base/nsImageLoadingContent.h b/dom/base/nsImageLoadingContent.h
index 85db2bd2c..5f7daff72 100644
--- a/dom/base/nsImageLoadingContent.h
+++ b/dom/base/nsImageLoadingContent.h
@@ -364,6 +364,11 @@ protected:
*
* No-op if aImage is null.
*
+ * @param aFrame If called from FrameCreated the frame passed to FrameCreated.
+ * This is our frame, but at the time of the FrameCreated call
+ * our primary frame pointer hasn't been set yet, so this is
+ * only way to get our frame.
+ *
* @param aNonvisibleAction A requested action if the frame has become
* nonvisible. If Nothing(), no action is
* requested. If DISCARD_IMAGES is specified, the
@@ -371,7 +376,7 @@ protected:
* associated with to discard their surfaces if
* possible.
*/
- void TrackImage(imgIRequest* aImage);
+ void TrackImage(imgIRequest* aImage, nsIFrame* aFrame = nullptr);
void UntrackImage(imgIRequest* aImage,
const Maybe<OnNonvisible>& aNonvisibleAction = Nothing());
@@ -454,9 +459,6 @@ private:
// registered with the refresh driver.
bool mCurrentRequestRegistered;
bool mPendingRequestRegistered;
-
- // True when FrameCreate has been called but FrameDestroy has not.
- bool mFrameCreateCalled;
};
#endif // nsImageLoadingContent_h__
diff --git a/dom/bindings/Bindings.conf b/dom/bindings/Bindings.conf
index aa7f26ad6..6f9733c5f 100644
--- a/dom/bindings/Bindings.conf
+++ b/dom/bindings/Bindings.conf
@@ -1222,6 +1222,11 @@ DOMInterfaces = {
'headerFile': 'WebGLExtensions.h'
},
+'MOZ_debug_get': {
+ 'nativeType': 'mozilla::WebGLExtensionDebugGet',
+ 'headerFile': 'WebGLExtensions.h'
+},
+
'WebGLFramebuffer': {
'nativeType': 'mozilla::WebGLFramebuffer',
'headerFile': 'WebGLFramebuffer.h'
diff --git a/dom/bindings/test/test_dom_xrays.html b/dom/bindings/test/test_dom_xrays.html
index 0700db2f8..15d7013ad 100644
--- a/dom/bindings/test/test_dom_xrays.html
+++ b/dom/bindings/test/test_dom_xrays.html
@@ -172,7 +172,7 @@ function test()
// Check that DataTransfer's .types has the hack to alias contains()
// to includes().
- var dataTransfer = new win.DataTransfer("foo", true);
+ var dataTransfer = new win.DataTransfer();
is(dataTransfer.types.contains, dataTransfer.types.includes,
"Should have contains() set up as an alias to includes()");
// Waive Xrays on the dataTransfer itself, since the .types we get is
diff --git a/dom/canvas/WebGLContextExtensions.cpp b/dom/canvas/WebGLContextExtensions.cpp
index 4a5a23274..7f338b4e9 100644
--- a/dom/canvas/WebGLContextExtensions.cpp
+++ b/dom/canvas/WebGLContextExtensions.cpp
@@ -40,6 +40,7 @@ WebGLContext::GetExtensionString(WebGLExtensionID ext)
WEBGL_EXTENSION_IDENTIFIER(EXT_sRGB)
WEBGL_EXTENSION_IDENTIFIER(EXT_texture_filter_anisotropic)
WEBGL_EXTENSION_IDENTIFIER(EXT_disjoint_timer_query)
+ WEBGL_EXTENSION_IDENTIFIER(MOZ_debug_get)
WEBGL_EXTENSION_IDENTIFIER(OES_element_index_uint)
WEBGL_EXTENSION_IDENTIFIER(OES_standard_derivatives)
WEBGL_EXTENSION_IDENTIFIER(OES_texture_float)
@@ -91,6 +92,8 @@ bool WebGLContext::IsExtensionSupported(dom::CallerType callerType,
switch (ext) {
case WebGLExtensionID::EXT_disjoint_timer_query:
return WebGLExtensionDisjointTimerQuery::IsSupported(this);
+ case WebGLExtensionID::MOZ_debug_get:
+ return true;
case WebGLExtensionID::WEBGL_debug_renderer_info:
return true;
case WebGLExtensionID::WEBGL_debug_shaders:
@@ -372,6 +375,11 @@ WebGLContext::EnableExtension(WebGLExtensionID ext)
obj = new WebGLExtensionTextureFilterAnisotropic(this);
break;
+ // MOZ_
+ case WebGLExtensionID::MOZ_debug_get:
+ obj = new WebGLExtensionDebugGet(this);
+ break;
+
// OES_
case WebGLExtensionID::OES_element_index_uint:
obj = new WebGLExtensionElementIndexUint(this);
diff --git a/dom/canvas/WebGLContextState.cpp b/dom/canvas/WebGLContextState.cpp
index e0234f5c6..c2f4c1a75 100644
--- a/dom/canvas/WebGLContextState.cpp
+++ b/dom/canvas/WebGLContextState.cpp
@@ -61,18 +61,6 @@ WebGLContext::Enable(GLenum cap)
gl->fEnable(cap);
}
-static JS::Value
-StringValue(JSContext* cx, const nsAString& str, ErrorResult& rv)
-{
- JSString* jsStr = JS_NewUCStringCopyN(cx, str.BeginReading(), str.Length());
- if (!jsStr) {
- rv.Throw(NS_ERROR_OUT_OF_MEMORY);
- return JS::NullValue();
- }
-
- return JS::StringValue(jsStr);
-}
-
bool
WebGLContext::GetStencilBits(GLint* const out_stencilBits)
{
diff --git a/dom/canvas/WebGLContextUtils.cpp b/dom/canvas/WebGLContextUtils.cpp
index 9c0d34939..3fd32eb30 100644
--- a/dom/canvas/WebGLContextUtils.cpp
+++ b/dom/canvas/WebGLContextUtils.cpp
@@ -874,4 +874,16 @@ InfoFrom(WebGLTexImageFunc func, WebGLTexDimensions dims)
}
}
+JS::Value
+StringValue(JSContext* cx, const nsAString& str, ErrorResult& er)
+{
+ JSString* jsStr = JS_NewUCStringCopyN(cx, str.BeginReading(), str.Length());
+ if (!jsStr) {
+ er.Throw(NS_ERROR_OUT_OF_MEMORY);
+ return JS::NullValue();
+ }
+
+ return JS::StringValue(jsStr);
+}
+
} // namespace mozilla
diff --git a/dom/canvas/WebGLContextUtils.h b/dom/canvas/WebGLContextUtils.h
index 5401fc878..1d06659b1 100644
--- a/dom/canvas/WebGLContextUtils.h
+++ b/dom/canvas/WebGLContextUtils.h
@@ -94,6 +94,8 @@ WebGLContext::WebGLObjectAsJSObject(JSContext* cx,
*/
const char* InfoFrom(WebGLTexImageFunc func, WebGLTexDimensions dims);
+JS::Value StringValue(JSContext* cx, const nsAString& str, ErrorResult& er);
+
} // namespace mozilla
#endif // WEBGL_CONTEXT_UTILS_H_
diff --git a/dom/canvas/WebGLExtensionDebugGet.cpp b/dom/canvas/WebGLExtensionDebugGet.cpp
new file mode 100644
index 000000000..39bb3c57a
--- /dev/null
+++ b/dom/canvas/WebGLExtensionDebugGet.cpp
@@ -0,0 +1,79 @@
+/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "WebGLExtensions.h"
+
+#include "mozilla/dom/WebGLRenderingContextBinding.h"
+#include "WebGLContext.h"
+#include "WebGLContextUtils.h"
+
+namespace mozilla {
+
+WebGLExtensionDebugGet::WebGLExtensionDebugGet(WebGLContext* webgl)
+ : WebGLExtensionBase(webgl)
+{
+}
+
+WebGLExtensionDebugGet::~WebGLExtensionDebugGet()
+{
+}
+
+void
+WebGLExtensionDebugGet::GetParameter(JSContext* cx, GLenum pname,
+ JS::MutableHandle<JS::Value> retval,
+ ErrorResult& er) const
+{
+ const auto& gl = mContext->gl;
+ gl->MakeCurrent();
+
+ switch (pname) {
+ case LOCAL_GL_EXTENSIONS:
+ {
+ nsString ret;
+ if (!gl->IsCoreProfile()) {
+ const auto rawExts = (const char*)gl->fGetString(LOCAL_GL_EXTENSIONS);
+ ret = NS_ConvertUTF8toUTF16(rawExts);
+ } else {
+ const auto& numExts = gl->GetIntAs<GLuint>(LOCAL_GL_NUM_EXTENSIONS);
+ for (GLuint i = 0; i < numExts; i++) {
+ const auto rawExt = (const char*)gl->fGetStringi(LOCAL_GL_EXTENSIONS,
+ i);
+ if (i > 0) {
+ ret.AppendLiteral(" ");
+ }
+ ret.Append(NS_ConvertUTF8toUTF16(rawExt));
+ }
+ }
+ retval.set(StringValue(cx, ret, er));
+ return;
+ }
+
+ case LOCAL_GL_RENDERER:
+ case LOCAL_GL_VENDOR:
+ case LOCAL_GL_VERSION:
+ {
+ const auto raw = (const char*)gl->fGetString(pname);
+ retval.set(StringValue(cx, NS_ConvertUTF8toUTF16(raw), er));
+ return;
+ }
+
+ case 0x10000: // "WSI_INFO"
+ {
+ nsCString info;
+ gl->GetWSIInfo(&info);
+ retval.set(StringValue(cx, NS_ConvertUTF8toUTF16(info), er));
+ return;
+ }
+
+ default:
+ mContext->ErrorInvalidEnumArg("MOZ_debug_get.getParameter", "pname", pname);
+ retval.set(JS::NullValue());
+ return;
+ }
+}
+
+IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionDebugGet, MOZ_debug_get)
+
+} // namespace mozilla
diff --git a/dom/canvas/WebGLExtensions.h b/dom/canvas/WebGLExtensions.h
index 741f6997f..7b6b6b54b 100644
--- a/dom/canvas/WebGLExtensions.h
+++ b/dom/canvas/WebGLExtensions.h
@@ -12,6 +12,7 @@
#include "WebGLTypes.h"
namespace mozilla {
+class ErrorResult;
namespace dom {
template<typename T>
@@ -385,6 +386,19 @@ public:
DECL_WEBGL_EXTENSION_GOOP
};
+class WebGLExtensionDebugGet final
+ : public WebGLExtensionBase
+{
+public:
+ explicit WebGLExtensionDebugGet(WebGLContext* webgl);
+ virtual ~WebGLExtensionDebugGet();
+
+ void GetParameter(JSContext* cx, GLenum pname,
+ JS::MutableHandle<JS::Value> retval, ErrorResult& er) const;
+
+ DECL_WEBGL_EXTENSION_GOOP
+};
+
} // namespace mozilla
#endif // WEBGL_EXTENSIONS_H_
diff --git a/dom/canvas/WebGLShaderValidator.cpp b/dom/canvas/WebGLShaderValidator.cpp
index 80ba359a3..fda31e212 100644
--- a/dom/canvas/WebGLShaderValidator.cpp
+++ b/dom/canvas/WebGLShaderValidator.cpp
@@ -28,20 +28,39 @@ IdentifierHashFunc(const char* name, size_t len)
return hash[0];
}
-static ShCompileOptions
+static int
ChooseValidatorCompileOptions(const ShBuiltInResources& resources,
const mozilla::gl::GLContext* gl)
{
- ShCompileOptions options = SH_VARIABLES |
- SH_ENFORCE_PACKING_RESTRICTIONS |
- SH_OBJECT_CODE |
- SH_INIT_GL_POSITION;
-
+ int options = SH_VARIABLES |
+ SH_ENFORCE_PACKING_RESTRICTIONS |
+ SH_INIT_VARYINGS_WITHOUT_STATIC_USE |
+ SH_OBJECT_CODE |
+ SH_INIT_GL_POSITION;
+
+ if (resources.MaxExpressionComplexity > 0) {
+ options |= SH_LIMIT_EXPRESSION_COMPLEXITY;
+ }
// Sampler arrays indexed with non-constant expressions are forbidden in
// GLSL 1.30 and later.
// ESSL 3 requires constant-integral-expressions for this as well.
// Just do it universally.
options |= SH_UNROLL_FOR_LOOP_WITH_SAMPLER_ARRAY_INDEX;
+
+ // Needed for driver bug detection
+ options |= SH_EMULATE_BUILT_IN_FUNCTIONS;
+
+ if (gfxPrefs::WebGLAllANGLEOptions()) {
+ return options |
+ SH_VALIDATE_LOOP_INDEXING |
+ SH_UNROLL_FOR_LOOP_WITH_INTEGER_INDEX |
+ SH_UNROLL_FOR_LOOP_WITH_SAMPLER_ARRAY_INDEX |
+ SH_CLAMP_INDIRECT_ARRAY_BOUNDS |
+ SH_UNFOLD_SHORT_CIRCUIT |
+ SH_SCALARIZE_VEC_AND_MAT_CONSTRUCTOR_ARGS |
+ SH_INIT_OUTPUT_VARIABLES |
+ SH_REGENERATE_STRUCT_NAMES;
+ }
#ifndef XP_MACOSX
// We want to do this everywhere, but to do this on Mac, we need
@@ -55,30 +74,23 @@ ChooseValidatorCompileOptions(const ShBuiltInResources& resources,
// Work around https://bugs.webkit.org/show_bug.cgi?id=124684,
// https://chromium.googlesource.com/angle/angle/+/5e70cf9d0b1bb
options |= SH_UNFOLD_SHORT_CIRCUIT;
+
+ // OS X 10.7/10.8 specific:
+
+ // Work around bug 665578 and bug 769810
+ if (gl->Vendor() == gl::GLVendor::ATI) {
+ options |= SH_EMULATE_BUILT_IN_FUNCTIONS;
+ }
+ // Work around bug 735560
+ if (gl->Vendor() == gl::GLVendor::Intel) {
+ options |= SH_EMULATE_BUILT_IN_FUNCTIONS;
+ }
// Work around that Mac drivers handle struct scopes incorrectly.
options |= SH_REGENERATE_STRUCT_NAMES;
- options |= SH_INIT_OUTPUT_VARIABLES;
}
#endif
- if (gfxPrefs::WebGLAllANGLEOptions()) {
- options = -1;
-
- options ^= SH_INTERMEDIATE_TREE;
- options ^= SH_LINE_DIRECTIVES;
- options ^= SH_SOURCE_PATH;
-
- options ^= SH_LIMIT_EXPRESSION_COMPLEXITY;
- options ^= SH_LIMIT_CALL_STACK_DEPTH;
-
- options ^= SH_EXPAND_SELECT_HLSL_INTEGER_POW_EXPRESSIONS;
- options ^= SH_HLSL_GET_DIMENSIONS_IGNORES_BASE_LEVEL;
-
- options ^= SH_DONT_REMOVE_INVARIANT_FOR_FRAGMENT_INPUT;
- options ^= SH_REMOVE_INVARIANT_AND_CENTROID_FOR_ESSL3;
- }
-
if (resources.MaxExpressionComplexity > 0) {
options |= SH_LIMIT_EXPRESSION_COMPLEXITY;
}
@@ -173,7 +185,7 @@ WebGLContext::CreateShaderValidator(GLenum shaderType) const
#endif
}
- const auto compileOptions = webgl::ChooseValidatorCompileOptions(resources, gl);
+ int compileOptions = webgl::ChooseValidatorCompileOptions(resources, gl);
return webgl::ShaderValidator::Create(shaderType, spec, outputLanguage, resources,
compileOptions);
}
@@ -186,7 +198,7 @@ namespace webgl {
ShaderValidator::Create(GLenum shaderType, ShShaderSpec spec,
ShShaderOutput outputLanguage,
const ShBuiltInResources& resources,
- ShCompileOptions compileOptions)
+ int compileOptions)
{
ShHandle handle = ShConstructCompiler(shaderType, spec, outputLanguage, &resources);
if (!handle)
@@ -283,8 +295,8 @@ ShaderValidator::CanLinkTo(const ShaderValidator* prev, nsCString* const out_log
}
}
{
- const auto vertVars = sh::GetInterfaceBlocks(prev->mHandle);
- const auto fragVars = sh::GetInterfaceBlocks(mHandle);
+ const auto vertVars = ShGetInterfaceBlocks(prev->mHandle);
+ const auto fragVars = ShGetInterfaceBlocks(mHandle);
if (!vertVars || !fragVars) {
nsPrintfCString error("Could not create uniform block list.");
*out_log = error;
diff --git a/dom/canvas/WebGLShaderValidator.h b/dom/canvas/WebGLShaderValidator.h
index deb1c7c7f..ba50def28 100644
--- a/dom/canvas/WebGLShaderValidator.h
+++ b/dom/canvas/WebGLShaderValidator.h
@@ -17,7 +17,7 @@ namespace webgl {
class ShaderValidator final
{
const ShHandle mHandle;
- const ShCompileOptions mCompileOptions;
+ const int mCompileOptions;
const int mMaxVaryingVectors;
bool mHasRun;
@@ -25,10 +25,10 @@ public:
static ShaderValidator* Create(GLenum shaderType, ShShaderSpec spec,
ShShaderOutput outputLanguage,
const ShBuiltInResources& resources,
- ShCompileOptions compileOptions);
+ int compileOptions);
private:
- ShaderValidator(ShHandle handle, ShCompileOptions compileOptions,
+ ShaderValidator(ShHandle handle, int compileOptions,
int maxVaryingVectors)
: mHandle(handle)
, mCompileOptions(compileOptions)
diff --git a/dom/canvas/WebGLTypes.h b/dom/canvas/WebGLTypes.h
index 42b8701f3..2f4a4368a 100644
--- a/dom/canvas/WebGLTypes.h
+++ b/dom/canvas/WebGLTypes.h
@@ -149,6 +149,7 @@ enum class WebGLExtensionID : uint8_t {
EXT_shader_texture_lod,
EXT_texture_filter_anisotropic,
EXT_disjoint_timer_query,
+ MOZ_debug_get,
OES_element_index_uint,
OES_standard_derivatives,
OES_texture_float,
diff --git a/dom/canvas/moz.build b/dom/canvas/moz.build
index f7555b33d..6d5e2756f 100644
--- a/dom/canvas/moz.build
+++ b/dom/canvas/moz.build
@@ -105,6 +105,7 @@ UNIFIED_SOURCES += [
'WebGLExtensionCompressedTextureETC1.cpp',
'WebGLExtensionCompressedTexturePVRTC.cpp',
'WebGLExtensionCompressedTextureS3TC.cpp',
+ 'WebGLExtensionDebugGet.cpp',
'WebGLExtensionDebugRendererInfo.cpp',
'WebGLExtensionDebugShaders.cpp',
'WebGLExtensionDepthTexture.cpp',
diff --git a/dom/events/DataTransfer.cpp b/dom/events/DataTransfer.cpp
index 2c6ecdd56..45c72e662 100644
--- a/dom/events/DataTransfer.cpp
+++ b/dom/events/DataTransfer.cpp
@@ -161,22 +161,11 @@ DataTransfer::~DataTransfer()
// static
already_AddRefed<DataTransfer>
-DataTransfer::Constructor(const GlobalObject& aGlobal,
- const nsAString& aEventType, bool aIsExternal,
- ErrorResult& aRv)
+DataTransfer::Constructor(const GlobalObject& aGlobal, ErrorResult& aRv)
{
- nsAutoCString onEventType("on");
- AppendUTF16toUTF8(aEventType, onEventType);
- nsCOMPtr<nsIAtom> eventTypeAtom = NS_Atomize(onEventType);
- if (!eventTypeAtom) {
- aRv.Throw(NS_ERROR_OUT_OF_MEMORY);
- return nullptr;
- }
-
- EventMessage eventMessage = nsContentUtils::GetEventMessage(eventTypeAtom);
RefPtr<DataTransfer> transfer = new DataTransfer(aGlobal.GetAsSupports(),
- eventMessage, aIsExternal,
- -1);
+ eCopy, /* is external */ false, /* clipboard type */ -1);
+ transfer->mEffectAllowed = nsIDragService::DRAGDROP_ACTION_NONE;
return transfer.forget();
}
diff --git a/dom/events/DataTransfer.h b/dom/events/DataTransfer.h
index 7c6b0b8c1..344593ed0 100644
--- a/dom/events/DataTransfer.h
+++ b/dom/events/DataTransfer.h
@@ -115,8 +115,7 @@ public:
}
static already_AddRefed<DataTransfer>
- Constructor(const GlobalObject& aGlobal, const nsAString& aEventType,
- bool aIsExternal, ErrorResult& aRv);
+ Constructor(const GlobalObject& aGlobal, ErrorResult& aRv);
void GetDropEffect(nsString& aDropEffect)
{
diff --git a/dom/html/HTMLMediaElement.cpp b/dom/html/HTMLMediaElement.cpp
index 0b9f606f1..3954e6208 100644
--- a/dom/html/HTMLMediaElement.cpp
+++ b/dom/html/HTMLMediaElement.cpp
@@ -5514,7 +5514,9 @@ void HTMLMediaElement::SuspendOrResumeElement(bool aPauseElement, bool aSuspendE
}
mEventDeliveryPaused = aSuspendEvents;
} else {
+#ifdef MOZ_EME
MOZ_ASSERT(!mMediaKeys);
+#endif
if (mDecoder) {
mDecoder->Resume();
if (!mPaused && !mDecoder->IsEnded()) {
diff --git a/dom/html/nsHTMLDocument.cpp b/dom/html/nsHTMLDocument.cpp
index 69e710242..d64c27727 100644
--- a/dom/html/nsHTMLDocument.cpp
+++ b/dom/html/nsHTMLDocument.cpp
@@ -886,7 +886,7 @@ nsHTMLDocument::GetDomain(nsAString& aDomain)
nsCOMPtr<nsIURI> uri = GetDomainURI();
if (!uri) {
- SetDOMStringToNull(aDomain);
+ aDomain.Truncate();
return NS_OK;
}
@@ -896,8 +896,8 @@ nsHTMLDocument::GetDomain(nsAString& aDomain)
CopyUTF8toUTF16(hostName, aDomain);
} else {
// If we can't get the host from the URI (e.g. about:, javascript:,
- // etc), just return an null string.
- SetDOMStringToNull(aDomain);
+ // etc), just return an empty string.
+ aDomain.Truncate();
}
return NS_OK;
}
diff --git a/dom/locales/en-US/chrome/security/security.properties b/dom/locales/en-US/chrome/security/security.properties
index c0b80996c..8efdb0a6d 100644
--- a/dom/locales/en-US/chrome/security/security.properties
+++ b/dom/locales/en-US/chrome/security/security.properties
@@ -8,6 +8,7 @@ BlockMixedActiveContent = Blocked loading mixed active content “%1$Sâ€
CORSDisabled=Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at %1$S. (Reason: CORS disabled).
CORSRequestNotHttp=Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at %1$S. (Reason: CORS request not http).
CORSMissingAllowOrigin=Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at %1$S. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).
+CORSMultipleAllowOriginNotAllowed=Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at %1$S. (Reason: Multiple CORS headers ‘Access-Control-Allow-Origin’ not allowed).
CORSAllowOriginNotMatchingOrigin=Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at %1$S. (Reason: CORS header ‘Access-Control-Allow-Origin’ does not match ‘%2$S’).
CORSNotSupportingCredentials=Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at ‘%1$S’. (Reason: Credential is not supported if the CORS header ‘Access-Control-Allow-Origin’ is ‘*’).
CORSMethodNotFound=Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at %1$S. (Reason: Did not find method in CORS header ‘Access-Control-Allow-Methods’).
diff --git a/dom/media/fmp4/MP4Demuxer.cpp b/dom/media/fmp4/MP4Demuxer.cpp
index 70b176699..646897468 100644
--- a/dom/media/fmp4/MP4Demuxer.cpp
+++ b/dom/media/fmp4/MP4Demuxer.cpp
@@ -349,8 +349,13 @@ MP4TrackDemuxer::GetNextSample()
if (sample->mCrypto.mValid) {
nsAutoPtr<MediaRawDataWriter> writer(sample->CreateWriter());
writer->mCrypto.mMode = mInfo->mCrypto.mMode;
- writer->mCrypto.mIVSize = mInfo->mCrypto.mIVSize;
- writer->mCrypto.mKeyId.AppendElements(mInfo->mCrypto.mKeyId);
+
+ // Only use the default key parsed from the moov if we haven't already got
+ // one from the sample group description.
+ if (writer->mCrypto.mKeyId.Length() == 0) {
+ writer->mCrypto.mIVSize = mInfo->mCrypto.mIVSize;
+ writer->mCrypto.mKeyId.AppendElements(mInfo->mCrypto.mKeyId);
+ }
}
return sample.forget();
}
diff --git a/dom/webidl/DataTransfer.webidl b/dom/webidl/DataTransfer.webidl
index 206d80804..dd44e1ddc 100644
--- a/dom/webidl/DataTransfer.webidl
+++ b/dom/webidl/DataTransfer.webidl
@@ -7,7 +7,7 @@
* http://www.whatwg.org/specs/web-apps/current-work/#the-datatransfer-interface
*/
-[ChromeConstructor(DOMString eventType, boolean isExternal)]
+[Constructor]
interface DataTransfer {
attribute DOMString dropEffect;
attribute DOMString effectAllowed;
diff --git a/dom/webidl/Element.webidl b/dom/webidl/Element.webidl
index ca5f1b35c..97eb4ffe0 100644
--- a/dom/webidl/Element.webidl
+++ b/dom/webidl/Element.webidl
@@ -41,6 +41,8 @@ interface Element : Node {
[Pure]
DOMString? getAttributeNS(DOMString? namespace, DOMString localName);
[Throws]
+ boolean toggleAttribute(DOMString name, optional boolean force);
+ [Throws]
void setAttribute(DOMString name, DOMString value);
[Throws]
void setAttributeNS(DOMString? namespace, DOMString name, DOMString value);
diff --git a/dom/webidl/Event.webidl b/dom/webidl/Event.webidl
index f87dc195c..70a0ef513 100644
--- a/dom/webidl/Event.webidl
+++ b/dom/webidl/Event.webidl
@@ -17,6 +17,8 @@ interface Event {
readonly attribute DOMString type;
[Pure]
readonly attribute EventTarget? target;
+ [Pure, BinaryName="target"]
+ readonly attribute EventTarget? srcElement;
[Pure]
readonly attribute EventTarget? currentTarget;
diff --git a/dom/webidl/HTMLDocument.webidl b/dom/webidl/HTMLDocument.webidl
index 42f6d98f7..ffb61ccdd 100644
--- a/dom/webidl/HTMLDocument.webidl
+++ b/dom/webidl/HTMLDocument.webidl
@@ -7,7 +7,7 @@
[OverrideBuiltins]
interface HTMLDocument : Document {
[SetterThrows]
- attribute DOMString? domain;
+ attribute DOMString domain;
[Throws]
attribute DOMString cookie;
// DOM tree accessors
diff --git a/dom/webidl/WebGLRenderingContext.webidl b/dom/webidl/WebGLRenderingContext.webidl
index dd0e6ff69..323d23421 100644
--- a/dom/webidl/WebGLRenderingContext.webidl
+++ b/dom/webidl/WebGLRenderingContext.webidl
@@ -1046,3 +1046,12 @@ interface EXT_disjoint_timer_query {
any getQueryEXT(GLenum target, GLenum pname);
any getQueryObjectEXT(WebGLQuery query, GLenum pname);
};
+
+[NoInterfaceObject]
+interface MOZ_debug_get {
+ const GLenum EXTENSIONS = 0x1F03;
+ const GLenum WSI_INFO = 0x10000;
+
+ [Throws]
+ any getParameter(GLenum pname);
+};
diff --git a/editor/libeditor/TextEditor.cpp b/editor/libeditor/TextEditor.cpp
index d21585597..1e855d769 100644
--- a/editor/libeditor/TextEditor.cpp
+++ b/editor/libeditor/TextEditor.cpp
@@ -836,7 +836,7 @@ TextEditor::BeginIMEComposition(WidgetCompositionEvent* aEvent)
nsresult
TextEditor::UpdateIMEComposition(WidgetCompositionEvent* aCompositionChangeEvent)
{
- MOZ_ASSERT(aCompsitionChangeEvent,
+ MOZ_ASSERT(aCompositionChangeEvent,
"aCompositionChangeEvent must not be nullptr");
if (NS_WARN_IF(!aCompositionChangeEvent)) {
diff --git a/gfx/2d/image_operations.cpp b/gfx/2d/image_operations.cpp
index 62215f007..79fa879d9 100644
--- a/gfx/2d/image_operations.cpp
+++ b/gfx/2d/image_operations.cpp
@@ -1,4 +1,5 @@
// Copyright (c) 2006-2012 The Chromium Authors. All rights reserved.
+// Copyright (c) 2018 Mark Straver BASc. All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
@@ -107,7 +108,7 @@ void ComputeFilters(ImageOperations::ResizeMethod method,
// Compute the unnormalized filter value at each location of the source
// it covers.
- float filter_sum = 0.0f; // Sub of the filter values for normalizing.
+ float filter_sum = 0.0f; // Sum of the filter values for normalizing.
for (int cur_filter_pixel = src_begin; cur_filter_pixel <= src_end;
cur_filter_pixel++) {
// Distance from the center of the filter, this is the filter coordinate
@@ -158,28 +159,22 @@ void ComputeFilters(ImageOperations::ResizeMethod method,
ImageOperations::ResizeMethod ResizeMethodToAlgorithmMethod(
ImageOperations::ResizeMethod method) {
- // Convert any "Quality Method" into an "Algorithm Method"
+ // If we already have an "Algorithm Method", just return that.
if (method >= ImageOperations::RESIZE_FIRST_ALGORITHM_METHOD &&
method <= ImageOperations::RESIZE_LAST_ALGORITHM_METHOD) {
return method;
}
- // The call to ImageOperationsGtv::Resize() above took care of
- // GPU-acceleration in the cases where it is possible. So now we just
- // pick the appropriate software method for each resize quality.
+ // Convert any "Quality Method" into an "Algorithm Method"
switch (method) {
- // Users of RESIZE_GOOD are willing to trade a lot of quality to
- // get speed, allowing the use of linear resampling to get hardware
- // acceleration (SRB). Hence any of our "good" software filters
- // will be acceptable, and we use the fastest one, Hamming-1.
case ImageOperations::RESIZE_GOOD:
- // Users of RESIZE_BETTER are willing to trade some quality in order
- // to improve performance, but are guaranteed not to devolve to a linear
- // resampling. In visual tests we see that Hamming-1 is not as good as
- // Lanczos-2, however it is about 40% faster and Lanczos-2 itself is
+ // Users of RESIZE_GOOD are willing to trade quality to get speed.
+ // In visual tests we see that Hamming-1 is not as good as
+ // Lanczos-2, however it is about 40% faster, and Lanczos-2 itself is
// about 30% faster than Lanczos-3. The use of Hamming-1 has been deemed
- // an acceptable trade-off between quality and speed.
+ // an unacceptable trade-off between quality and speed due to the limited
+ // pixel space it operates in, so we pick Lanczos-2 here.
case ImageOperations::RESIZE_BETTER:
- return ImageOperations::RESIZE_HAMMING1;
+ return ImageOperations::RESIZE_LANCZOS2;
default:
return ImageOperations::RESIZE_LANCZOS3;
}
diff --git a/gfx/angle/BUILD.gn b/gfx/angle/BUILD.gn
index 4232008bc..5c0b1fc32 100755
--- a/gfx/angle/BUILD.gn
+++ b/gfx/angle/BUILD.gn
@@ -6,8 +6,7 @@
import("//build/config/dcheck_always_on.gni")
import("//build/config/linux/pkg_config.gni")
import("//build/config/ui.gni")
-import("//testing/libfuzzer/fuzzer_test.gni")
-import("//third_party/angle/gni/angle.gni")
+import("//third_party/angle/build/angle_common.gni")
import("//ui/ozone/ozone.gni")
if (ozone_platform_gbm) {
@@ -55,7 +54,6 @@ config("extra_warnings") {
cflags = [
"/we4244", # Conversion: possible loss of data.
"/we4456", # Variable shadowing.
- "/we4458", # declaration hides class member.
]
}
}
@@ -73,6 +71,22 @@ if (is_win) {
angle_undefine_configs = [ "//build/config/compiler:default_include_dirs" ]
+component("translator") {
+ sources = [
+ "src/compiler/translator/ShaderLang.cpp",
+ "src/compiler/translator/ShaderVars.cpp",
+ ]
+
+ defines = [ "ANGLE_TRANSLATOR_IMPLEMENTATION" ]
+
+ configs -= angle_undefine_configs
+ configs += [ ":internal_config" ]
+
+ public_deps = [
+ ":translator_lib",
+ ]
+}
+
# Holds the shared includes so we only need to list them once.
source_set("includes") {
sources = [
@@ -96,14 +110,10 @@ static_library("preprocessor") {
configs -= angle_undefine_configs
configs += [ ":internal_config" ]
-
- public_deps = [
- ":angle_common",
- ]
}
-config("translator_disable_pool_alloc") {
- defines = [ "ANGLE_TRANSLATOR_DISABLE_POOL_ALLOC" ]
+config("translator_static_config") {
+ defines = [ "ANGLE_TRANSLATOR_STATIC" ]
}
config("debug_annotations_config") {
@@ -162,33 +172,33 @@ static_library("angle_image_util") {
]
}
-static_library("translator") {
- sources = rebase_path(compiler_gypi.angle_translator_sources, ".", "src")
+static_library("translator_lib") {
+ sources = rebase_path(compiler_gypi.angle_translator_lib_sources, ".", "src")
defines = []
- if (angle_enable_essl || use_libfuzzer) {
+ if (angle_enable_essl) {
sources +=
- rebase_path(compiler_gypi.angle_translator_essl_sources, ".", "src")
+ rebase_path(compiler_gypi.angle_translator_lib_essl_sources, ".", "src")
defines += [ "ANGLE_ENABLE_ESSL" ]
}
- if (angle_enable_glsl || use_libfuzzer) {
+ if (angle_enable_glsl) {
sources +=
- rebase_path(compiler_gypi.angle_translator_glsl_sources, ".", "src")
+ rebase_path(compiler_gypi.angle_translator_lib_glsl_sources, ".", "src")
defines += [ "ANGLE_ENABLE_GLSL" ]
}
- if (angle_enable_hlsl || use_libfuzzer) {
+ if (angle_enable_hlsl) {
sources +=
- rebase_path(compiler_gypi.angle_translator_hlsl_sources, ".", "src")
+ rebase_path(compiler_gypi.angle_translator_lib_hlsl_sources, ".", "src")
defines += [ "ANGLE_ENABLE_HLSL" ]
}
configs -= angle_undefine_configs
- configs += [ ":internal_config" ]
+ configs += [
+ ":internal_config",
+ ":translator_static_config",
+ ]
public_configs = [ ":external_config" ]
- if (use_libfuzzer) {
- all_dependent_configs = [ ":translator_disable_pool_alloc" ]
- }
deps = [
":includes",
@@ -206,18 +216,22 @@ static_library("translator") {
}
}
-source_set("translator_fuzzer") {
+static_library("translator_static") {
sources = [
- "src/compiler/fuzz/translator_fuzzer.cpp",
+ "src/compiler/translator/ShaderLang.cpp",
+ "src/compiler/translator/ShaderVars.cpp",
]
- include_dirs = [
- "include",
- "src",
- ]
+ if (angle_enable_hlsl) {
+ defines = [ "ANGLE_ENABLE_HLSL" ]
+ }
- deps = [
- ":translator",
+ configs -= angle_undefine_configs
+ configs += [ ":internal_config" ]
+ public_configs = [ ":translator_static_config" ]
+
+ public_deps = [
+ ":translator_lib",
]
}
@@ -271,13 +285,9 @@ config("libANGLE_config") {
if (angle_enable_vulkan) {
defines += [ "ANGLE_ENABLE_VULKAN" ]
}
- if (angle_enable_null) {
- defines += [ "ANGLE_ENABLE_NULL" ]
- }
defines += [
"GL_GLEXT_PROTOTYPES",
"EGL_EGLEXT_PROTOTYPES",
- "LIBANGLE_IMPLEMENTATION",
]
if (is_win) {
@@ -301,7 +311,7 @@ static_library("libANGLE") {
include_dirs = []
libs = []
- defines = []
+ defines = [ "LIBANGLE_IMPLEMENTATION" ]
public_deps = [
":angle_common",
]
@@ -309,7 +319,7 @@ static_library("libANGLE") {
":angle_image_util",
":commit_id",
":includes",
- ":translator",
+ ":translator_static",
]
# Shared D3D sources.
@@ -379,10 +389,6 @@ static_library("libANGLE") {
sources += rebase_path(gles_gypi.libangle_vulkan_sources, ".", "src")
}
- if (angle_enable_null) {
- sources += rebase_path(gles_gypi.libangle_null_sources, ".", "src")
- }
-
if (is_debug) {
defines += [ "ANGLE_GENERATE_SHADER_DEBUG_INFO" ]
}
@@ -491,7 +497,7 @@ config("angle_util_config") {
}
}
-shared_library("angle_util") {
+static_library("angle_util") {
sources = rebase_path(util_gypi.util_sources, ".", "util")
if (is_win) {
@@ -508,10 +514,6 @@ shared_library("angle_util") {
if (is_mac) {
sources += rebase_path(util_gypi.util_osx_sources, ".", "util")
- libs = [
- "AppKit.framework",
- "QuartzCore.framework",
- ]
}
if (use_x11) {
@@ -536,7 +538,6 @@ shared_library("angle_util") {
defines = [
"GL_GLEXT_PROTOTYPES",
"EGL_EGLEXT_PROTOTYPES",
- "LIBANGLE_UTIL_IMPLEMENTATION",
]
configs += [
@@ -548,13 +549,6 @@ shared_library("angle_util") {
":angle_util_config",
":internal_config",
]
- if (is_mac && !is_component_build) {
- ldflags = [
- "-install_name",
- "@rpath/lib${target_name}.dylib",
- ]
- public_configs += [ ":shared_library_public_config" ]
- }
deps = [
":angle_common",
diff --git a/gfx/angle/CONTRIBUTORS b/gfx/angle/CONTRIBUTORS
index 9e1a81f4f..fbc478f71 100755
--- a/gfx/angle/CONTRIBUTORS
+++ b/gfx/angle/CONTRIBUTORS
@@ -64,18 +64,12 @@ Intel Corporation
Andy Chen
Josh Triplett
Sudarsana Nagineni
- Jiajia Qin
- Jiawei Shao
- Jie Chen
- Qiankun Miao
- Bryan Bernhart
Klarälvdalens Datakonsult AB
Milian Wolff
Mozilla Corp.
Ehsan Akhgari
- Edwin Flores
Jeff Gilbert
Mike Hommey
Benoit Jacob
diff --git a/gfx/angle/DEPS b/gfx/angle/DEPS
index 7c39e0093..b5951d6d9 100755
--- a/gfx/angle/DEPS
+++ b/gfx/angle/DEPS
@@ -3,30 +3,32 @@ vars = {
}
deps = {
- 'third_party/gyp':
- Var('chromium_git') + '/external/gyp' + '@' + '81c2e5ff92af29bab61c982808076ddce3d200a2',
+ "third_party/gyp":
+ Var('chromium_git') + "/external/gyp@81c2e5ff92af29bab61c982808076ddce3d200a2",
- 'testing/gtest':
- Var('chromium_git') + '/external/github.com/google/googletest.git' + '@' + '6f8a66431cb592dad629028a50b3dd418a408c87',
+ # TODO(kbr): figure out how to better stay in sync with Chromium's
+ # versions of googletest and googlemock.
+ "src/tests/third_party/googletest":
+ Var('chromium_git') + "/external/googletest.git@9855a87157778d39b95eccfb201a9dc90f6d61c6",
- 'testing/gmock':
- Var('chromium_git') + '/external/googlemock.git' + '@' + '0421b6f358139f02e102c9c332ce19a33faf75be', # from svn revision 566
+ "src/tests/third_party/googlemock":
+ Var('chromium_git') + "/external/googlemock.git@b2cb211e49d872101d991201362d7b97d7d69910",
# Cherry is a dEQP management GUI written in Go. We use it for viewing test results.
- 'third_party/cherry':
- 'https://android.googlesource.com/platform/external/cherry' + '@' + 'd2e26b4d864ec2a6757e7f1174e464949ca5bf73',
+ "third_party/cherry":
+ "https://android.googlesource.com/platform/external/cherry@d2e26b4d864ec2a6757e7f1174e464949ca5bf73",
- 'third_party/deqp/src':
- 'https://android.googlesource.com/platform/external/deqp' + '@' + 'f4f3d8079e7a37d7675ab93583e6438d0bca0e58',
+ "third_party/deqp/src":
+ "https://android.googlesource.com/platform/external/deqp@f4f3d8079e7a37d7675ab93583e6438d0bca0e58",
- 'third_party/libpng':
- 'https://android.googlesource.com/platform/external/libpng' + '@' + '094e181e79a3d6c23fd005679025058b7df1ad6c',
+ "third_party/libpng":
+ "https://android.googlesource.com/platform/external/libpng@094e181e79a3d6c23fd005679025058b7df1ad6c",
- 'third_party/zlib':
- Var('chromium_git') + '/chromium/src/third_party/zlib' + '@' + 'afd8c4593c010c045902f6c0501718f1823064a3',
+ "third_party/zlib":
+ Var('chromium_git') + "/chromium/src/third_party/zlib@afd8c4593c010c045902f6c0501718f1823064a3",
- 'buildtools':
- Var('chromium_git') + '/chromium/buildtools.git' + '@' + '39b1db2ab4aa4b2ccaa263c29bdf63e7c1ee28aa',
+ "buildtools":
+ Var('chromium_git') + '/chromium/buildtools.git@06e80a0e17319868d4a9b13f9bb6a248dc8d8b20',
}
hooks = [
@@ -100,12 +102,7 @@ hooks = [
},
{
# A change to a .gyp, .gypi, or to GYP itself should run the generator.
- 'pattern': '.',
- 'action': ['python', 'gyp/gyp_angle'],
+ "pattern": ".",
+ "action": ["python", "build/gyp_angle"],
},
]
-
-recursedeps = [
- # buildtools provides clang_format.
- 'buildtools',
-]
diff --git a/gfx/angle/include/EGL/eglext.h b/gfx/angle/include/EGL/eglext.h
index 17e8f73cb..fc0a3779b 100755
--- a/gfx/angle/include/EGL/eglext.h
+++ b/gfx/angle/include/EGL/eglext.h
@@ -472,11 +472,6 @@ EGLAPI EGLint EGLAPIENTRY eglDupNativeFenceFDANDROID (EGLDisplay dpy, EGLSyncKHR
#define EGL_DXGI_KEYED_MUTEX_ANGLE 0x33A2
#endif /* EGL_ANGLE_keyed_mutex */
-#ifndef EGL_ANGLE_d3d_texture_client_buffer
-#define EGL_ANGLE_d3d_texture_client_buffer 1
-#define EGL_D3D_TEXTURE_ANGLE 0x33A3
-#endif /* EGL_ANGLE_d3d_texture_client_buffer */
-
#ifndef EGL_ANGLE_query_surface_pointer
#define EGL_ANGLE_query_surface_pointer 1
typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSURFACEPOINTERANGLEPROC) (EGLDisplay dpy, EGLSurface surface, EGLint attribute, void **value);
@@ -531,11 +526,6 @@ EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurfacePointerANGLE (EGLDisplay dpy, EGLSu
#define EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE 0x320E
#endif /* EGL_ANGLE_platform_angle_opengl */
-#ifndef EGL_ANGLE_platform_angle_null
-#define EGL_ANGLE_platform_angle_null 1
-#define EGL_PLATFORM_ANGLE_TYPE_NULL_ANGLE 0x33AE
-#endif /* EGL_ANGLE_platform_angle_null */
-
#ifndef EGL_ANGLE_window_fixed_size
#define EGL_ANGLE_window_fixed_size 1
#define EGL_FIXED_SIZE_ANGLE 0x3201
@@ -568,7 +558,7 @@ EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurfacePointerANGLE (EGLDisplay dpy, EGLSu
#ifndef EGL_ANGLE_stream_producer_d3d_texture_nv12
#define EGL_ANGLE_stream_producer_d3d_texture_nv12
-#define EGL_D3D_TEXTURE_SUBRESOURCE_ID_ANGLE 0x33AB
+#define EGL_D3D_TEXTURE_SUBRESOURCE_ID_ANGLE 0x3AAB
typedef EGLBoolean(EGLAPIENTRYP PFNEGLCREATESTREAMPRODUCERD3DTEXTURENV12ANGLEPROC)(EGLDisplay dpy, EGLStreamKHR stream, const EGLAttrib *attrib_list);
typedef EGLBoolean(EGLAPIENTRYP PFNEGLSTREAMPOSTD3DTEXTURENV12ANGLEPROC)(EGLDisplay dpy, EGLStreamKHR stream, void *texture, const EGLAttrib *attrib_list);
#ifdef EGL_EGLEXT_PROTOTYPES
@@ -577,16 +567,6 @@ EGLAPI EGLBoolean EGLAPIENTRY eglStreamPostD3DTextureNV12ANGLE(EGLDisplay dpy, E
#endif
#endif /* EGL_ANGLE_stream_producer_d3d_texture_nv12 */
-#ifndef EGL_ANGLE_create_context_webgl_compatibility
-#define EGL_ANGLE_create_context_webgl_compatibility 1
-#define EGL_CONTEXT_WEBGL_COMPATIBILITY_ANGLE 0x3AAC
-#endif /* EGL_ANGLE_create_context_webgl_compatibility */
-
-#ifndef EGL_CHROMIUM_create_context_bind_generates_resource
-#define EGL_CHROMIUM_create_context_bind_generates_resource 1
-#define EGL_CONTEXT_BIND_GENERATES_RESOURCE_CHROMIUM 0x3AAD
-#endif /* EGL_CHROMIUM_create_context_bind_generates_resource */
-
#ifndef EGL_ARM_pixmap_multisample_discard
#define EGL_ARM_pixmap_multisample_discard 1
#define EGL_DISCARD_SAMPLES_ARM 0x3286
diff --git a/gfx/angle/include/GLES2/gl2ext.h b/gfx/angle/include/GLES2/gl2ext.h
index eba6dcc77..9e92a03a4 100755
--- a/gfx/angle/include/GLES2/gl2ext.h
+++ b/gfx/angle/include/GLES2/gl2ext.h
@@ -821,14 +821,6 @@ GL_APICALL void GL_APIENTRY glBlitFramebufferANGLE (GLint srcX0, GLint srcY0, GL
#endif
#endif /* GL_ANGLE_framebuffer_blit */
-#ifndef GL_ANGLE_webgl_compatibility
-#define GL_ANGLE_webgl_compatibility 1
-typedef GLboolean(GL_APIENTRYP PFNGLENABLEEXTENSIONANGLEPROC) (const GLchar *name);
-#ifdef GL_GLEXT_PROTOTYPES
-GL_APICALL GLboolean GL_APIENTRY glEnableExtensionANGLE (const GLchar *name);
-#endif
-#endif /* GL_ANGLE_webgl_compatibility */
-
#ifndef GL_CHROMIUM_framebuffer_mixed_samples
#define GL_CHROMIUM_frambuffer_mixed_samples 1
#define GL_COVERAGE_MODULATION_CHROMIUM 0x9332
@@ -838,11 +830,6 @@ GL_APICALL void GL_APIENTRY glCoverageModulationCHROMIUM(GLenum components);
#endif
#endif /* GL_CHROMIUM_framebuffer_mixed_samples */
-#ifndef GL_CHROMIUM_bind_generates_resource
-#define GL_CHROMIUM_bind_generates_resource 1
-#define GL_BIND_GENERATES_RESOURCE_CHROMIUM 0x9244
-#endif /* GL_CHROMIUM_bind_generates_resource */
-
// needed by NV_path_rendering (and thus CHROMIUM_path_rendering)
// but CHROMIUM_path_rendering only needs MatrixLoadfEXT, MatrixLoadIdentityEXT
#ifndef GL_EXT_direct_state_access
@@ -1316,14 +1303,6 @@ GL_APICALL void GL_APIENTRY glCopySubTextureCHROMIUM(GLuint sourceId,
#endif
#endif /* GL_CHROMIUM_copy_texture */
-#ifndef GL_CHROMIUM_compressed_copy_texture
-#define GL_CHROMIUM_compressed_copy_texture 1
-typedef void(GL_APIENTRYP PFNGLCOMPRESSEDCOPYTEXTURECHROMIUMPROC)(GLuint sourceId, GLuint destId);
-#ifdef GL_GLEXT_PROTOTYPES
-GL_APICALL void GL_APIENTRY glCompressedCopyTextureCHROMIUM(GLuint sourceId, GLuint destId);
-#endif
-#endif /* GL_CHROMIUM_compressed_copy_texture */
-
#ifndef GL_CHROMIUM_sync_query
#define GL_CHROMIUM_sync_query 1
#define GL_COMMANDS_COMPLETED_CHROMIUM 0x84F7
@@ -3255,132 +3234,6 @@ GL_APICALL void GL_APIENTRY glEndTilingQCOM (GLbitfield preserveMask);
#define GL_COMPRESSED_SRGB8_ALPHA8_LOSSY_DECODE_ETC2_EAC_ANGLE 0x969A
#endif /* GL_ANGLE_lossy_etc_decode */
-#ifndef GL_ANGLE_robust_client_memory
-#define GL_ANGLE_robust_client_memory 1
-typedef void (GL_APIENTRYP PFNGLGETBOOLEANVROBUSTANGLE) (GLenum pname, GLsizei bufSize, GLsizei *length, GLboolean *data);
-typedef void (GL_APIENTRYP PFNGLGETBUFFERPARAMETERIVROBUSTANGLE) (GLenum target, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params);
-typedef void (GL_APIENTRYP PFNGLGETFLOATVROBUSTANGLE) (GLenum pname, GLsizei bufSize, GLsizei *length, GLfloat *data);
-typedef void (GL_APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVROBUSTANGLE) (GLenum target, GLenum attachment, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params);
-typedef void (GL_APIENTRYP PFNGLGETINTEGERVROBUSTANGLE) (GLenum pname, GLsizei bufSize, GLsizei *length, GLint *data);
-typedef void (GL_APIENTRYP PFNGLGETPROGRAMIVROBUSTANGLE) (GLuint program, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params);
-typedef void (GL_APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVROBUSTANGLE) (GLenum target, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params);
-typedef void (GL_APIENTRYP PFNGLGETSHADERIVROBUSTANGLE) (GLuint shader, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params);
-typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERFVROBUSTANGLE) (GLenum target, GLenum pname, GLsizei bufSize, GLsizei *length, GLfloat *params);
-typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIVROBUSTANGLE) (GLenum target, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params);
-typedef void (GL_APIENTRYP PFNGLGETUNIFORMFVROBUSTANGLE) (GLuint program, GLint location, GLsizei bufSize, GLsizei *length, GLfloat *params);
-typedef void (GL_APIENTRYP PFNGLGETUNIFORMIVROBUSTANGLE) (GLuint program, GLint location, GLsizei bufSize, GLsizei *length, GLint *params);
-typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBFVROBUSTANGLE) (GLuint index, GLenum pname, GLsizei bufSize, GLsizei *length, GLfloat *params);
-typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBIVROBUSTANGLE) (GLuint index, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params);
-typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVROBUSTANGLE) (GLuint index, GLenum pname, GLsizei bufSize, GLsizei *length, void **pointer);
-typedef void (GL_APIENTRYP PFNGLREADPIXELSROBUSTANGLE) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLsizei *length, void *pixels);
-typedef void (GL_APIENTRYP PFNGLTEXIMAGE2DROBUSTANGLE) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, GLsizei bufSize, const void *pixels);
-typedef void (GL_APIENTRYP PFNGLTEXPARAMETERFVROBUSTANGLE) (GLenum target, GLenum pname, GLsizei bufSize, const GLfloat *params);
-typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIVROBUSTANGLE) (GLenum target, GLenum pname, GLsizei bufSize, const GLint *params);
-typedef void (GL_APIENTRYP PFNGLTEXSUBIMAGE2DROBUSTANGLE) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, const void *pixels);
-typedef void (GL_APIENTRYP PFNGLTEXIMAGE3DROBUSTANGLE) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, GLsizei bufSize, const void *pixels);
-typedef void (GL_APIENTRYP PFNGLTEXSUBIMAGE3DROBUSTANGLE) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLsizei bufSize, const void *pixels);
-typedef void (GL_APIENTRYP PFNGLGETQUERYIVROBUSTANGLE) (GLenum target, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params);
-typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTUIVROBUSTANGLE) (GLuint id, GLenum pname, GLsizei bufSize, GLsizei *length, GLuint *params);
-typedef void (GL_APIENTRYP PFNGLGETBUFFERPOINTERVROBUSTANGLE) (GLenum target, GLenum pname, GLsizei bufSize, GLsizei *length, void **params);
-typedef void (GL_APIENTRYP PFNGLGETINTEGERI_VROBUSTANGLE) (GLenum target, GLuint index, GLsizei bufSize, GLsizei *length, GLint *data);
-typedef void (GL_APIENTRYP PFNGETINTERNALFORMATIVROBUSTANGLE) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params);
-typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBIIVROBUSTANGLE) (GLuint index, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params);
-typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBIUIVROBUSTANGLE) (GLuint index, GLenum pname, GLsizei bufSize, GLsizei *length, GLuint *params);
-typedef void (GL_APIENTRYP PFNGLGETUNIFORMUIVROBUSTANGLE) (GLuint program, GLint location, GLsizei bufSize, GLsizei *length, GLuint *params);
-typedef void (GL_APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVROBUSTANGLE) (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params);
-typedef void (GL_APIENTRYP PFNGLGETINTEGER64VROBUSTANGLE) (GLenum pname, GLsizei bufSize, GLsizei *length, GLint64 *data);
-typedef void (GL_APIENTRYP PFNGLGETINTEGER64I_VROBUSTANGLE) (GLenum target, GLuint index, GLsizei bufSize, GLsizei *length, GLint64 *data);
-typedef void (GL_APIENTRYP PFNGLGETBUFFERPARAMETERI64VROBUSTANGLE) (GLenum target, GLenum pname, GLsizei bufSize, GLsizei *length, GLint64 *params);
-typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIVROBUSTANGLE) (GLuint sampler, GLenum pname, GLsizei bufSize, const GLint *param);
-typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERFVROBUSTANGLE) (GLuint sampler, GLenum pname, GLsizei bufSize, const GLfloat *param);
-typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERIVROBUSTANGLE) (GLuint sampler, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params);
-typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERFVROBUSTANGLE) (GLuint sampler, GLenum pname, GLsizei bufSize, GLsizei *length, GLfloat *params);
-typedef void (GL_APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVROBUSTANGLE) (GLenum target, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params);
-typedef void (GL_APIENTRYP PFNGLGETPROGRAMINTERFACEIVROBUSTANGLE) (GLuint program, GLenum programInterface, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params);
-typedef void (GL_APIENTRYP PFNGLGETBOOLEANI_VROBUSTANGLE) (GLenum target, GLuint index, GLsizei bufSize, GLsizei *length, GLboolean *data);
-typedef void (GL_APIENTRYP PFNGLGETMULTISAMPLEFVROBUSTANGLE) (GLenum pname, GLuint index, GLsizei bufSize, GLsizei *length, GLfloat *val);
-typedef void (GL_APIENTRYP PFNGLGETTEXLEVELPARAMETERIVROBUSTANGLE) (GLenum target, GLint level, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params);
-typedef void (GL_APIENTRYP PFNGLGETTEXLEVELPARAMETERFVROBUSTANGLE) (GLenum target, GLint level, GLenum pname, GLsizei bufSize, GLsizei *length, GLfloat *params);
-typedef void (GL_APIENTRYP PFNGLGETPOINTERVROBUSTANGLEROBUSTANGLE) (GLenum pname, GLsizei bufSize, GLsizei *length, void **params);
-typedef void (GL_APIENTRYP PFNGLREADNPIXELSROBUSTANGLE) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLsizei *length, void *data);
-typedef void (GL_APIENTRYP PFNGLGETNUNIFORMFVROBUSTANGLE) (GLuint program, GLint location, GLsizei bufSize, GLsizei *length, GLfloat *params);
-typedef void (GL_APIENTRYP PFNGLGETNUNIFORMIVROBUSTANGLE) (GLuint program, GLint location, GLsizei bufSize, GLsizei *length, GLint *params);
-typedef void (GL_APIENTRYP PFNGLGETNUNIFORMUIVROBUSTANGLE) (GLuint program, GLint location, GLsizei bufSize, GLsizei *length, GLuint *params);
-typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIIVROBUSTANGLE) (GLenum target, GLenum pname, GLsizei bufSize, const GLint *params);
-typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIUIVROBUSTANGLE) (GLenum target, GLenum pname, GLsizei bufSize, const GLuint *params);
-typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIIVROBUSTANGLE) (GLenum target, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params);
-typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIUIVROBUSTANGLE) (GLenum target, GLenum pname, GLsizei bufSize, GLsizei *length, GLuint *params);
-typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIIVROBUSTANGLE) (GLuint sampler, GLenum pname, GLsizei bufSize, const GLint *param);
-typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIUIVROBUSTANGLE) (GLuint sampler, GLenum pname, GLsizei bufSize, const GLuint *param);
-typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERIIVROBUSTANGLE) (GLuint sampler, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params);
-typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVROBUSTANGLE) (GLuint sampler, GLenum pname, GLsizei bufSize, GLsizei *length, GLuint *params);
-typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTIVROBUSTANGLE)(GLuint id, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params);
-typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTI64VROBUSTANGLE)(GLuint id, GLenum pname, GLsizei bufSize, GLsizei *length, GLint64 *params);
-typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTUI64VROBUSTANGLE)(GLuint id, GLenum pname, GLsizei bufSize, GLsizei *length, GLuint64 *params);
-#ifdef GL_GLEXT_PROTOTYPES
-GL_APICALL void GL_APIENTRY glGetBooleanvRobustANGLE (GLenum pname, GLsizei bufSize, GLsizei *length, GLboolean *data);
-GL_APICALL void GL_APIENTRY glGetBufferParameterivRobustANGLE (GLenum target, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params);
-GL_APICALL void GL_APIENTRY glGetFloatvRobustANGLE (GLenum pname, GLsizei bufSize, GLsizei *length, GLfloat *data);
-GL_APICALL void GL_APIENTRY glGetFramebufferAttachmentParameterivRobustANGLE (GLenum target, GLenum attachment, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params);
-GL_APICALL void GL_APIENTRY glGetIntegervRobustANGLE (GLenum pname, GLsizei bufSize, GLsizei *length, GLint *data);
-GL_APICALL void GL_APIENTRY glGetProgramivRobustANGLE (GLuint program, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params);
-GL_APICALL void GL_APIENTRY glGetRenderbufferParameterivRobustANGLE (GLenum target, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params);
-GL_APICALL void GL_APIENTRY glGetShaderivRobustANGLE (GLuint shader, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params);
-GL_APICALL void GL_APIENTRY glGetTexParameterfvRobustANGLE (GLenum target, GLenum pname, GLsizei bufSize, GLsizei *length, GLfloat *params);
-GL_APICALL void GL_APIENTRY glGetTexParameterivRobustANGLE (GLenum target, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params);
-GL_APICALL void GL_APIENTRY glGetUniformfvRobustANGLE (GLuint program, GLint location, GLsizei bufSize, GLsizei *length, GLfloat *params);
-GL_APICALL void GL_APIENTRY glGetUniformivRobustANGLE (GLuint program, GLint location, GLsizei bufSize, GLsizei *length, GLint *params);
-GL_APICALL void GL_APIENTRY glGetVertexAttribfvRobustANGLE (GLuint index, GLenum pname, GLsizei bufSize, GLsizei *length, GLfloat *params);
-GL_APICALL void GL_APIENTRY glGetVertexAttribivRobustANGLE (GLuint index, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params);
-GL_APICALL void GL_APIENTRY glGetVertexAttribPointervRobustANGLE (GLuint index, GLenum pname, GLsizei bufSize, GLsizei *length, void **pointer);
-GL_APICALL void GL_APIENTRY glReadPixelsRobustANGLE (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLsizei *length, void *pixels);
-GL_APICALL void GL_APIENTRY glTexImage2DRobustANGLE (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, GLsizei bufSize, const void *pixels);
-GL_APICALL void GL_APIENTRY glTexParameterfvRobustANGLE (GLenum target, GLenum pname, GLsizei bufSize, const GLfloat *params);
-GL_APICALL void GL_APIENTRY glTexParameterivRobustANGLE (GLenum target, GLenum pname, GLsizei bufSize, const GLint *params);
-GL_APICALL void GL_APIENTRY glTexSubImage2DRobustANGLE (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, const void *pixels);
-GL_APICALL void GL_APIENTRY glTexImage3DRobustANGLE (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, GLsizei bufSize, const void *pixels);
-GL_APICALL void GL_APIENTRY glTexSubImage3DRobustANGLE (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLsizei bufSize, const void *pixels);
-GL_APICALL void GL_APIENTRY glGetQueryivRobustANGLE (GLenum target, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params);
-GL_APICALL void GL_APIENTRY glGetQueryObjectuivRobustANGLE (GLuint id, GLenum pname, GLsizei bufSize, GLsizei *length, GLuint *params);
-GL_APICALL void GL_APIENTRY glGetBufferPointervRobustANGLE (GLenum target, GLenum pname, GLsizei bufSize, GLsizei *length, void **params);
-GL_APICALL void GL_APIENTRY glGetIntegeri_vRobustANGLE (GLenum target, GLuint index, GLsizei bufSize, GLsizei *length, GLint *data);
-GL_APICALL void GL_APIENTRY glGetInternalformativRobustANGLE (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params);
-GL_APICALL void GL_APIENTRY glGetVertexAttribIivRobustANGLE (GLuint index, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params);
-GL_APICALL void GL_APIENTRY glGetVertexAttribIuivRobustANGLE (GLuint index, GLenum pname, GLsizei bufSize, GLsizei *length, GLuint *params);
-GL_APICALL void GL_APIENTRY glGetUniformuivRobustANGLE (GLuint program, GLint location, GLsizei bufSize, GLsizei *length, GLuint *params);
-GL_APICALL void GL_APIENTRY glGetActiveUniformBlockivRobustANGLE (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params);
-GL_APICALL void GL_APIENTRY glGetInteger64vRobustANGLE (GLenum pname, GLsizei bufSize, GLsizei *length, GLint64 *data);
-GL_APICALL void GL_APIENTRY glGetInteger64i_vRobustANGLE (GLenum target, GLuint index, GLsizei bufSize, GLsizei *length, GLint64 *data);
-GL_APICALL void GL_APIENTRY glGetBufferParameteri64vRobustANGLE (GLenum target, GLenum pname, GLsizei bufSize, GLsizei *length, GLint64 *params);
-GL_APICALL void GL_APIENTRY glSamplerParameterivRobustANGLE (GLuint sampler, GLenum pname, GLsizei bufSize, const GLint *param);
-GL_APICALL void GL_APIENTRY glSamplerParameterfvRobustANGLE (GLuint sampler, GLenum pname, GLsizei bufSize, const GLfloat *param);
-GL_APICALL void GL_APIENTRY glGetSamplerParameterivRobustANGLE (GLuint sampler, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params);
-GL_APICALL void GL_APIENTRY glGetSamplerParameterfvRobustANGLE (GLuint sampler, GLenum pname, GLsizei bufSize, GLsizei *length, GLfloat *params);
-GL_APICALL void GL_APIENTRY glGetFramebufferParameterivRobustANGLE (GLenum target, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params);
-GL_APICALL void GL_APIENTRY glGetProgramInterfaceivRobustANGLE (GLuint program, GLenum programInterface, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params);
-GL_APICALL void GL_APIENTRY glGetBooleani_vRobustANGLE (GLenum target, GLuint index, GLsizei bufSize, GLsizei *length, GLboolean *data);
-GL_APICALL void GL_APIENTRY glGetMultisamplefvRobustANGLE (GLenum pname, GLuint index, GLsizei bufSize, GLsizei *length, GLfloat *val);
-GL_APICALL void GL_APIENTRY glGetTexLevelParameterivRobustANGLE (GLenum target, GLint level, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params);
-GL_APICALL void GL_APIENTRY glGetTexLevelParameterfvRobustANGLE (GLenum target, GLint level, GLenum pname, GLsizei bufSize, GLsizei *length, GLfloat *params);
-GL_APICALL void GL_APIENTRY glGetPointervRobustANGLERobustANGLE (GLenum pname, GLsizei bufSize, GLsizei *length, void **params);
-GL_APICALL void GL_APIENTRY glReadnPixelsRobustANGLE (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLsizei *length, void *data);
-GL_APICALL void GL_APIENTRY glGetnUniformfvRobustANGLE (GLuint program, GLint location, GLsizei bufSize, GLsizei *length, GLfloat *params);
-GL_APICALL void GL_APIENTRY glGetnUniformivRobustANGLE (GLuint program, GLint location, GLsizei bufSize, GLsizei *length, GLint *params);
-GL_APICALL void GL_APIENTRY glGetnUniformuivRobustANGLE (GLuint program, GLint location, GLsizei bufSize, GLsizei *length, GLuint *params);
-GL_APICALL void GL_APIENTRY glTexParameterIivRobustANGLE (GLenum target, GLenum pname, GLsizei bufSize, const GLint *params);
-GL_APICALL void GL_APIENTRY glTexParameterIuivRobustANGLE (GLenum target, GLenum pname, GLsizei bufSize, const GLuint *params);
-GL_APICALL void GL_APIENTRY glGetTexParameterIivRobustANGLE (GLenum target, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params);
-GL_APICALL void GL_APIENTRY glGetTexParameterIuivRobustANGLE (GLenum target, GLenum pname, GLsizei bufSize, GLsizei *length, GLuint *params);
-GL_APICALL void GL_APIENTRY glSamplerParameterIivRobustANGLE (GLuint sampler, GLenum pname, GLsizei bufSize, const GLint *param);
-GL_APICALL void GL_APIENTRY glSamplerParameterIuivRobustANGLE (GLuint sampler, GLenum pname, GLsizei bufSize, const GLuint *param);
-GL_APICALL void GL_APIENTRY glGetSamplerParameterIivRobustANGLE (GLuint sampler, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params);
-GL_APICALL void GL_APIENTRY glGetSamplerParameterIuivRobustANGLE (GLuint sampler, GLenum pname, GLsizei bufSize, GLsizei *length, GLuint *params);
-GL_APICALL void GL_APIENTRY glGetQueryObjectivRobustANGLE(GLuint id, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params);
-GL_APICALL void GL_APIENTRY glGetQueryObjecti64vRobustANGLE(GLuint id, GLenum pname, GLsizei bufSize, GLsizei *length, GLint64 *params);
-GL_APICALL void GL_APIENTRY glGetQueryObjectui64vRobustANGLE(GLuint id, GLenum pname, GLsizei bufSize, GLsizei *length, GLuint64 *params);
-#endif
-#endif /* GL_ANGLE_robust_client_memory */
-
#ifdef __cplusplus
}
#endif
diff --git a/gfx/angle/include/GLSLANG/ShaderLang.h b/gfx/angle/include/GLSLANG/ShaderLang.h
index deead5e43..47c7533e0 100755
--- a/gfx/angle/include/GLSLANG/ShaderLang.h
+++ b/gfx/angle/include/GLSLANG/ShaderLang.h
@@ -6,6 +6,23 @@
#ifndef GLSLANG_SHADERLANG_H_
#define GLSLANG_SHADERLANG_H_
+#if defined(COMPONENT_BUILD) && !defined(ANGLE_TRANSLATOR_STATIC)
+#if defined(_WIN32) || defined(_WIN64)
+
+#if defined(ANGLE_TRANSLATOR_IMPLEMENTATION)
+#define COMPILER_EXPORT __declspec(dllexport)
+#else
+#define COMPILER_EXPORT __declspec(dllimport)
+#endif // defined(ANGLE_TRANSLATOR_IMPLEMENTATION)
+
+#else // defined(_WIN32) || defined(_WIN64)
+#define COMPILER_EXPORT __attribute__((visibility("default")))
+#endif
+
+#else // defined(COMPONENT_BUILD) && !defined(ANGLE_TRANSLATOR_STATIC)
+#define COMPILER_EXPORT
+#endif
+
#include <stddef.h>
#include "KHR/khrplatform.h"
@@ -32,10 +49,9 @@ typedef unsigned int GLenum;
// Version number for shader translation API.
// It is incremented every time the API changes.
-#define ANGLE_SH_VERSION 167
+#define ANGLE_SH_VERSION 155
-enum ShShaderSpec
-{
+typedef enum {
SH_GLES2_SPEC,
SH_WEBGL_SPEC,
@@ -44,9 +60,31 @@ enum ShShaderSpec
SH_GLES3_1_SPEC,
SH_WEBGL3_SPEC,
-};
-enum ShShaderOutput
+ // The CSS Shaders spec is a subset of the WebGL spec.
+ //
+ // In both CSS vertex and fragment shaders, ANGLE:
+ // (1) Reserves the "css_" prefix.
+ // (2) Renames the main function to css_main.
+ // (3) Disables the gl_MaxDrawBuffers built-in.
+ //
+ // In CSS fragment shaders, ANGLE:
+ // (1) Disables the gl_FragColor built-in.
+ // (2) Disables the gl_FragData built-in.
+ // (3) Enables the css_MixColor built-in.
+ // (4) Enables the css_ColorMatrix built-in.
+ //
+ // After passing a CSS shader through ANGLE, the browser is expected to append
+ // a new main function to it.
+ // This new main function will call the css_main function.
+ // It may also perform additional operations like varying assignment, texture
+ // access, and gl_FragColor assignment in order to implement the CSS Shaders
+ // blend modes.
+ //
+ SH_CSS_SHADERS_SPEC
+} ShShaderSpec;
+
+typedef enum
{
// ESSL output only supported in some configurations.
SH_ESSL_OUTPUT = 0x8B45,
@@ -65,171 +103,166 @@ enum ShShaderOutput
SH_GLSL_440_CORE_OUTPUT = 0x8B87,
SH_GLSL_450_CORE_OUTPUT = 0x8B88,
+ // HLSL output only supported in some configurations.
+ // Deprecated:
+ SH_HLSL_OUTPUT = 0x8B48,
+ SH_HLSL9_OUTPUT = 0x8B48,
+ SH_HLSL11_OUTPUT = 0x8B49,
+
// Prefer using these to specify HLSL output type:
SH_HLSL_3_0_OUTPUT = 0x8B48, // D3D 9
SH_HLSL_4_1_OUTPUT = 0x8B49, // D3D 11
SH_HLSL_4_0_FL9_3_OUTPUT = 0x8B4A // D3D 11 feature level 9_3
-};
+} ShShaderOutput;
// Compile options.
-
-using ShCompileOptions = uint64_t;
-
-const ShCompileOptions SH_VALIDATE = 0;
-const ShCompileOptions SH_VALIDATE_LOOP_INDEXING = UINT64_C(1) << 0;
-const ShCompileOptions SH_INTERMEDIATE_TREE = UINT64_C(1) << 1;
-const ShCompileOptions SH_OBJECT_CODE = UINT64_C(1) << 2;
-const ShCompileOptions SH_VARIABLES = UINT64_C(1) << 3;
-const ShCompileOptions SH_LINE_DIRECTIVES = UINT64_C(1) << 4;
-const ShCompileOptions SH_SOURCE_PATH = UINT64_C(1) << 5;
-const ShCompileOptions SH_UNROLL_FOR_LOOP_WITH_INTEGER_INDEX = UINT64_C(1) << 6;
-// If a sampler array index happens to be a loop index,
-// 1) if its type is integer, unroll the loop.
-// 2) if its type is float, fail the shader compile.
-// This is to work around a mac driver bug.
-const ShCompileOptions SH_UNROLL_FOR_LOOP_WITH_SAMPLER_ARRAY_INDEX = UINT64_C(1) << 7;
-
-// This flag works around bug in Intel Mac drivers related to abs(i) where
-// i is an integer.
-const ShCompileOptions SH_EMULATE_ABS_INT_FUNCTION = UINT64_C(1) << 8;
-
-// Enforce the GLSL 1.017 Appendix A section 7 packing restrictions.
-// This flag only enforces (and can only enforce) the packing
-// restrictions for uniform variables in both vertex and fragment
-// shaders. ShCheckVariablesWithinPackingLimits() lets embedders
-// enforce the packing restrictions for varying variables during
-// program link time.
-const ShCompileOptions SH_ENFORCE_PACKING_RESTRICTIONS = UINT64_C(1) << 9;
-
-// This flag ensures all indirect (expression-based) array indexing
-// is clamped to the bounds of the array. This ensures, for example,
-// that you cannot read off the end of a uniform, whether an array
-// vec234, or mat234 type. The ShArrayIndexClampingStrategy enum,
-// specified in the ShBuiltInResources when constructing the
-// compiler, selects the strategy for the clamping implementation.
-const ShCompileOptions SH_CLAMP_INDIRECT_ARRAY_BOUNDS = UINT64_C(1) << 10;
-
-// This flag limits the complexity of an expression.
-const ShCompileOptions SH_LIMIT_EXPRESSION_COMPLEXITY = UINT64_C(1) << 11;
-
-// This flag limits the depth of the call stack.
-const ShCompileOptions SH_LIMIT_CALL_STACK_DEPTH = UINT64_C(1) << 12;
-
-// This flag initializes gl_Position to vec4(0,0,0,0) at the
-// beginning of the vertex shader's main(), and has no effect in the
-// fragment shader. It is intended as a workaround for drivers which
-// incorrectly fail to link programs if gl_Position is not written.
-const ShCompileOptions SH_INIT_GL_POSITION = UINT64_C(1) << 13;
-
-// This flag replaces
-// "a && b" with "a ? b : false",
-// "a || b" with "a ? true : b".
-// This is to work around a MacOSX driver bug that |b| is executed
-// independent of |a|'s value.
-const ShCompileOptions SH_UNFOLD_SHORT_CIRCUIT = UINT64_C(1) << 14;
-
-// This flag initializes output variables to 0 at the beginning of main().
-// It is to avoid undefined behaviors.
-const ShCompileOptions SH_INIT_OUTPUT_VARIABLES = UINT64_C(1) << 15;
-
-// This flag scalarizes vec/ivec/bvec/mat constructor args.
-// It is intended as a workaround for Linux/Mac driver bugs.
-const ShCompileOptions SH_SCALARIZE_VEC_AND_MAT_CONSTRUCTOR_ARGS = UINT64_C(1) << 16;
-
-// This flag overwrites a struct name with a unique prefix.
-// It is intended as a workaround for drivers that do not handle
-// struct scopes correctly, including all Mac drivers and Linux AMD.
-const ShCompileOptions SH_REGENERATE_STRUCT_NAMES = UINT64_C(1) << 17;
-
-// This flag makes the compiler not prune unused function early in the
-// compilation process. Pruning coupled with SH_LIMIT_CALL_STACK_DEPTH
-// helps avoid bad shaders causing stack overflows.
-const ShCompileOptions SH_DONT_PRUNE_UNUSED_FUNCTIONS = UINT64_C(1) << 18;
-
-// This flag works around a bug in NVIDIA 331 series drivers related
-// to pow(x, y) where y is a constant vector.
-const ShCompileOptions SH_REMOVE_POW_WITH_CONSTANT_EXPONENT = UINT64_C(1) << 19;
-
-// This flag works around bugs in Mac drivers related to do-while by
-// transforming them into an other construct.
-const ShCompileOptions SH_REWRITE_DO_WHILE_LOOPS = UINT64_C(1) << 20;
-
-// This flag works around a bug in the HLSL compiler optimizer that folds certain
-// constant pow expressions incorrectly. Only applies to the HLSL back-end. It works
-// by expanding the integer pow expressions into a series of multiplies.
-const ShCompileOptions SH_EXPAND_SELECT_HLSL_INTEGER_POW_EXPRESSIONS = UINT64_C(1) << 21;
-
-// Flatten "#pragma STDGL invariant(all)" into the declarations of
-// varying variables and built-in GLSL variables. This compiler
-// option is enabled automatically when needed.
-const ShCompileOptions SH_FLATTEN_PRAGMA_STDGL_INVARIANT_ALL = UINT64_C(1) << 22;
-
-// Some drivers do not take into account the base level of the texture in the results of the
-// HLSL GetDimensions builtin. This flag instructs the compiler to manually add the base level
-// offsetting.
-const ShCompileOptions SH_HLSL_GET_DIMENSIONS_IGNORES_BASE_LEVEL = UINT64_C(1) << 23;
-
-// This flag works around an issue in translating GLSL function texelFetchOffset on
-// INTEL drivers. It works by translating texelFetchOffset into texelFetch.
-const ShCompileOptions SH_REWRITE_TEXELFETCHOFFSET_TO_TEXELFETCH = UINT64_C(1) << 24;
-
-// This flag works around condition bug of for and while loops in Intel Mac OSX drivers.
-// Condition calculation is not correct. Rewrite it from "CONDITION" to "CONDITION && true".
-const ShCompileOptions SH_ADD_AND_TRUE_TO_LOOP_CONDITION = UINT64_C(1) << 25;
-
-// This flag works around a bug in evaluating unary minus operator on integer on some INTEL
-// drivers. It works by translating -(int) into ~(int) + 1.
-const ShCompileOptions SH_REWRITE_INTEGER_UNARY_MINUS_OPERATOR = UINT64_C(1) << 26;
-
-// This flag works around a bug in evaluating isnan() on some INTEL D3D and Mac OSX drivers.
-// It works by using an expression to emulate this function.
-const ShCompileOptions SH_EMULATE_ISNAN_FLOAT_FUNCTION = UINT64_C(1) << 27;
-
-// This flag will use all uniforms of unused std140 and shared uniform blocks at the
-// beginning of the vertex/fragment shader's main(). It is intended as a workaround for Mac
-// drivers with shader version 4.10. In those drivers, they will treat unused
-// std140 and shared uniform blocks' members as inactive. However, WebGL2.0 based on
-// OpenGL ES3.0.4 requires all members of a named uniform block declared with a shared or std140
-// layout qualifier to be considered active. The uniform block itself is also considered active.
-const ShCompileOptions SH_USE_UNUSED_STANDARD_SHARED_BLOCKS = UINT64_C(1) << 28;
-
-// This flag will keep invariant declaration for input in fragment shader for GLSL >=4.20 on AMD.
-// From GLSL >= 4.20, it's optional to add invariant for fragment input, but GPU vendors have
-// different implementations about this. Some drivers forbid invariant in fragment for GLSL>= 4.20,
-// e.g. Linux Mesa, some drivers treat that as optional, e.g. NVIDIA, some drivers require invariant
-// must match between vertex and fragment shader, e.g. AMD. The behavior on AMD is obviously wrong.
-// Remove invariant for input in fragment shader to workaround the restriction on Intel Mesa.
-// But don't remove on AMD Linux to avoid triggering the bug on AMD.
-const ShCompileOptions SH_DONT_REMOVE_INVARIANT_FOR_FRAGMENT_INPUT = UINT64_C(1) << 29;
-
-// Due to spec difference between GLSL 4.1 or lower and ESSL3, some platforms (for example, Mac OSX
-// core profile) require a variable's "invariant"/"centroid" qualifiers to match between vertex and
-// fragment shader. A simple solution to allow such shaders to link is to omit the two qualifiers.
-// Note that the two flags only take effect on ESSL3 input shaders translated to GLSL 4.1 or lower.
-// TODO(zmo): This is not a good long-term solution. Simply dropping these qualifiers may break some
-// developers' content. A more complex workaround of dynamically generating, compiling, and
-// re-linking shaders that use these qualifiers should be implemented.
-const ShCompileOptions SH_REMOVE_INVARIANT_AND_CENTROID_FOR_ESSL3 = UINT64_C(1) << 30;
+typedef enum {
+ SH_VALIDATE = 0,
+ SH_VALIDATE_LOOP_INDEXING = 0x0001,
+ SH_INTERMEDIATE_TREE = 0x0002,
+ SH_OBJECT_CODE = 0x0004,
+ SH_VARIABLES = 0x0008,
+ SH_LINE_DIRECTIVES = 0x0010,
+ SH_SOURCE_PATH = 0x0020,
+ SH_UNROLL_FOR_LOOP_WITH_INTEGER_INDEX = 0x0040,
+ // If a sampler array index happens to be a loop index,
+ // 1) if its type is integer, unroll the loop.
+ // 2) if its type is float, fail the shader compile.
+ // This is to work around a mac driver bug.
+ SH_UNROLL_FOR_LOOP_WITH_SAMPLER_ARRAY_INDEX = 0x0080,
+
+ // This is needed only as a workaround for certain OpenGL driver bugs.
+ SH_EMULATE_BUILT_IN_FUNCTIONS = 0x0100,
+
+ // This is an experimental flag to enforce restrictions that aim to prevent
+ // timing attacks.
+ // It generates compilation errors for shaders that could expose sensitive
+ // texture information via the timing channel.
+ // To use this flag, you must compile the shader under the WebGL spec
+ // (using the SH_WEBGL_SPEC flag).
+ SH_TIMING_RESTRICTIONS = 0x0200,
+
+ // This flag prints the dependency graph that is used to enforce timing
+ // restrictions on fragment shaders.
+ // This flag only has an effect if all of the following are true:
+ // - The shader spec is SH_WEBGL_SPEC.
+ // - The compile options contain the SH_TIMING_RESTRICTIONS flag.
+ // - The shader type is GL_FRAGMENT_SHADER.
+ SH_DEPENDENCY_GRAPH = 0x0400,
+
+ // Enforce the GLSL 1.017 Appendix A section 7 packing restrictions.
+ // This flag only enforces (and can only enforce) the packing
+ // restrictions for uniform variables in both vertex and fragment
+ // shaders. ShCheckVariablesWithinPackingLimits() lets embedders
+ // enforce the packing restrictions for varying variables during
+ // program link time.
+ SH_ENFORCE_PACKING_RESTRICTIONS = 0x0800,
+
+ // This flag ensures all indirect (expression-based) array indexing
+ // is clamped to the bounds of the array. This ensures, for example,
+ // that you cannot read off the end of a uniform, whether an array
+ // vec234, or mat234 type. The ShArrayIndexClampingStrategy enum,
+ // specified in the ShBuiltInResources when constructing the
+ // compiler, selects the strategy for the clamping implementation.
+ SH_CLAMP_INDIRECT_ARRAY_BOUNDS = 0x1000,
+
+ // This flag limits the complexity of an expression.
+ SH_LIMIT_EXPRESSION_COMPLEXITY = 0x2000,
+
+ // This flag limits the depth of the call stack.
+ SH_LIMIT_CALL_STACK_DEPTH = 0x4000,
+
+ // This flag initializes gl_Position to vec4(0,0,0,0) at the
+ // beginning of the vertex shader's main(), and has no effect in the
+ // fragment shader. It is intended as a workaround for drivers which
+ // incorrectly fail to link programs if gl_Position is not written.
+ SH_INIT_GL_POSITION = 0x8000,
+
+ // This flag replaces
+ // "a && b" with "a ? b : false",
+ // "a || b" with "a ? true : b".
+ // This is to work around a MacOSX driver bug that |b| is executed
+ // independent of |a|'s value.
+ SH_UNFOLD_SHORT_CIRCUIT = 0x10000,
+
+ // This flag initializes output variables to 0 at the beginning of main().
+ // It is to avoid undefined behaviors.
+ SH_INIT_OUTPUT_VARIABLES = 0x20000,
+ // TODO(zmo): obsolete, remove after ANGLE roll into Chromium.
+ SH_INIT_VARYINGS_WITHOUT_STATIC_USE = 0x20000,
+
+ // This flag scalarizes vec/ivec/bvec/mat constructor args.
+ // It is intended as a workaround for Linux/Mac driver bugs.
+ SH_SCALARIZE_VEC_AND_MAT_CONSTRUCTOR_ARGS = 0x40000,
+
+ // This flag overwrites a struct name with a unique prefix.
+ // It is intended as a workaround for drivers that do not handle
+ // struct scopes correctly, including all Mac drivers and Linux AMD.
+ SH_REGENERATE_STRUCT_NAMES = 0x80000,
+
+ // This flag makes the compiler not prune unused function early in the
+ // compilation process. Pruning coupled with SH_LIMIT_CALL_STACK_DEPTH
+ // helps avoid bad shaders causing stack overflows.
+ SH_DONT_PRUNE_UNUSED_FUNCTIONS = 0x100000,
+
+ // This flag works around a bug in NVIDIA 331 series drivers related
+ // to pow(x, y) where y is a constant vector.
+ SH_REMOVE_POW_WITH_CONSTANT_EXPONENT = 0x200000,
+
+ // This flag works around bugs in Mac drivers related to do-while by
+ // transforming them into an other construct.
+ SH_REWRITE_DO_WHILE_LOOPS = 0x400000,
+
+ // This flag works around a bug in the HLSL compiler optimizer that folds certain
+ // constant pow expressions incorrectly. Only applies to the HLSL back-end. It works
+ // by expanding the integer pow expressions into a series of multiplies.
+ SH_EXPAND_SELECT_HLSL_INTEGER_POW_EXPRESSIONS = 0x800000,
+
+ // Flatten "#pragma STDGL invariant(all)" into the declarations of
+ // varying variables and built-in GLSL variables. This compiler
+ // option is enabled automatically when needed.
+ SH_FLATTEN_PRAGMA_STDGL_INVARIANT_ALL = 0x1000000,
+
+ // Some drivers do not take into account the base level of the texture in the results of the
+ // HLSL GetDimensions builtin. This flag instructs the compiler to manually add the base level
+ // offsetting.
+ SH_HLSL_GET_DIMENSIONS_IGNORES_BASE_LEVEL = 0x2000000,
+
+ // This flag works around an issue in translating GLSL function texelFetchOffset on
+ // INTEL drivers. It works by translating texelFetchOffset into texelFetch.
+ SH_REWRITE_TEXELFETCHOFFSET_TO_TEXELFETCH = 0x4000000,
+} ShCompileOptions;
// Defines alternate strategies for implementing array index clamping.
-enum ShArrayIndexClampingStrategy
-{
- // Use the clamp intrinsic for array index clamping.
- SH_CLAMP_WITH_CLAMP_INTRINSIC = 1,
+typedef enum {
+ // Use the clamp intrinsic for array index clamping.
+ SH_CLAMP_WITH_CLAMP_INTRINSIC = 1,
+
+ // Use a user-defined function for array index clamping.
+ SH_CLAMP_WITH_USER_DEFINED_INT_CLAMP_FUNCTION
+} ShArrayIndexClampingStrategy;
- // Use a user-defined function for array index clamping.
- SH_CLAMP_WITH_USER_DEFINED_INT_CLAMP_FUNCTION
-};
+//
+// Driver must call this first, once, before doing any other
+// compiler operations.
+// If the function succeeds, the return value is true, else false.
+//
+COMPILER_EXPORT bool ShInitialize();
+//
+// Driver should call this at shutdown.
+// If the function succeeds, the return value is true, else false.
+//
+COMPILER_EXPORT bool ShFinalize();
// The 64 bits hash function. The first parameter is the input string; the
// second parameter is the string length.
-using ShHashFunction64 = khronos_uint64_t (*)(const char *, size_t);
+typedef khronos_uint64_t (*ShHashFunction64)(const char*, size_t);
//
// Implementation dependent built-in resources (constants and extensions).
// The names for these resources has been obtained by stripping gl_/GL_.
//
-struct ShBuiltInResources
+typedef struct
{
// Constants.
int MaxVertexAttribs;
@@ -361,7 +394,15 @@ struct ShBuiltInResources
// maximum number of buffer object storage in machine units
int MaxAtomicCounterBufferSize;
-};
+
+} ShBuiltInResources;
+
+//
+// Initialize built-in resources with minimum expected values.
+// Parameters:
+// resources: The object to initialize. Will be comparable with memcmp.
+//
+COMPILER_EXPORT void ShInitBuiltInResources(ShBuiltInResources *resources);
//
// ShHandle held by but opaque to the driver. It is allocated,
@@ -370,26 +411,7 @@ struct ShBuiltInResources
//
// If handle creation fails, 0 will be returned.
//
-using ShHandle = void *;
-
-//
-// Driver must call this first, once, before doing any other
-// compiler operations.
-// If the function succeeds, the return value is true, else false.
-//
-bool ShInitialize();
-//
-// Driver should call this at shutdown.
-// If the function succeeds, the return value is true, else false.
-//
-bool ShFinalize();
-
-//
-// Initialize built-in resources with minimum expected values.
-// Parameters:
-// resources: The object to initialize. Will be comparable with memcmp.
-//
-void ShInitBuiltInResources(ShBuiltInResources *resources);
+typedef void *ShHandle;
//
// Returns the a concatenated list of the items in ShBuiltInResources as a
@@ -397,7 +419,7 @@ void ShInitBuiltInResources(ShBuiltInResources *resources);
// This function must be updated whenever ShBuiltInResources is changed.
// Parameters:
// handle: Specifies the handle of the compiler to be used.
-const std::string &ShGetBuiltInResourcesString(const ShHandle handle);
+COMPILER_EXPORT const std::string &ShGetBuiltInResourcesString(const ShHandle handle);
//
// Driver calls these to create and destroy compiler objects.
@@ -412,11 +434,12 @@ const std::string &ShGetBuiltInResourcesString(const ShHandle handle);
// SH_HLSL_3_0_OUTPUT or SH_HLSL_4_1_OUTPUT. Note: Each output type may only
// be supported in some configurations.
// resources: Specifies the built-in resources.
-ShHandle ShConstructCompiler(sh::GLenum type,
- ShShaderSpec spec,
- ShShaderOutput output,
- const ShBuiltInResources *resources);
-void ShDestruct(ShHandle handle);
+COMPILER_EXPORT ShHandle ShConstructCompiler(
+ sh::GLenum type,
+ ShShaderSpec spec,
+ ShShaderOutput output,
+ const ShBuiltInResources *resources);
+COMPILER_EXPORT void ShDestruct(ShHandle handle);
//
// Compiles the given shader source.
@@ -436,42 +459,45 @@ void ShDestruct(ShHandle handle);
// There is no need to specify this parameter when
// compiling for WebGL - it is implied.
// SH_INTERMEDIATE_TREE: Writes intermediate tree to info log.
-// Can be queried by calling sh::GetInfoLog().
+// Can be queried by calling ShGetInfoLog().
// SH_OBJECT_CODE: Translates intermediate tree to glsl or hlsl shader.
-// Can be queried by calling sh::GetObjectCode().
+// Can be queried by calling ShGetObjectCode().
// SH_VARIABLES: Extracts attributes, uniforms, and varyings.
// Can be queried by calling ShGetVariableInfo().
//
-bool ShCompile(const ShHandle handle,
- const char *const shaderStrings[],
- size_t numStrings,
- ShCompileOptions compileOptions);
+COMPILER_EXPORT bool ShCompile(
+ const ShHandle handle,
+ const char * const shaderStrings[],
+ size_t numStrings,
+ int compileOptions);
// Clears the results from the previous compilation.
-void ShClearResults(const ShHandle handle);
+COMPILER_EXPORT void ShClearResults(const ShHandle handle);
// Return the version of the shader language.
-int ShGetShaderVersion(const ShHandle handle);
+COMPILER_EXPORT int ShGetShaderVersion(const ShHandle handle);
// Return the currently set language output type.
-ShShaderOutput ShGetShaderOutputType(const ShHandle handle);
+COMPILER_EXPORT ShShaderOutput ShGetShaderOutputType(
+ const ShHandle handle);
// Returns null-terminated information log for a compiled shader.
// Parameters:
// handle: Specifies the compiler
-const std::string &ShGetInfoLog(const ShHandle handle);
+COMPILER_EXPORT const std::string &ShGetInfoLog(const ShHandle handle);
// Returns null-terminated object code for a compiled shader.
// Parameters:
// handle: Specifies the compiler
-const std::string &ShGetObjectCode(const ShHandle handle);
+COMPILER_EXPORT const std::string &ShGetObjectCode(const ShHandle handle);
// Returns a (original_name, hash) map containing all the user defined
// names in the shader, including variable names, function names, struct
// names, and struct field names.
// Parameters:
// handle: Specifies the compiler
-const std::map<std::string, std::string> *ShGetNameHashingMap(const ShHandle handle);
+COMPILER_EXPORT const std::map<std::string, std::string> *ShGetNameHashingMap(
+ const ShHandle handle);
// Shader variable inspection.
// Returns a pointer to a list of variables of the designated type.
@@ -479,12 +505,18 @@ const std::map<std::string, std::string> *ShGetNameHashingMap(const ShHandle han
// Returns NULL on failure.
// Parameters:
// handle: Specifies the compiler
-const std::vector<sh::Uniform> *ShGetUniforms(const ShHandle handle);
-const std::vector<sh::Varying> *ShGetVaryings(const ShHandle handle);
-const std::vector<sh::Attribute> *ShGetAttributes(const ShHandle handle);
-const std::vector<sh::OutputVariable> *ShGetOutputVariables(const ShHandle handle);
-const std::vector<sh::InterfaceBlock> *ShGetInterfaceBlocks(const ShHandle handle);
-sh::WorkGroupSize ShGetComputeShaderLocalGroupSize(const ShHandle handle);
+COMPILER_EXPORT const std::vector<sh::Uniform> *ShGetUniforms(const ShHandle handle);
+COMPILER_EXPORT const std::vector<sh::Varying> *ShGetVaryings(const ShHandle handle);
+COMPILER_EXPORT const std::vector<sh::Attribute> *ShGetAttributes(const ShHandle handle);
+COMPILER_EXPORT const std::vector<sh::OutputVariable> *ShGetOutputVariables(const ShHandle handle);
+COMPILER_EXPORT const std::vector<sh::InterfaceBlock> *ShGetInterfaceBlocks(const ShHandle handle);
+COMPILER_EXPORT sh::WorkGroupSize ShGetComputeShaderLocalGroupSize(const ShHandle handle);
+
+typedef struct
+{
+ sh::GLenum type;
+ int size;
+} ShVariableInfo;
// Returns true if the passed in variables pack in maxVectors following
// the packing rules from the GLSL 1.017 spec, Appendix A, section 7.
@@ -493,8 +525,9 @@ sh::WorkGroupSize ShGetComputeShaderLocalGroupSize(const ShHandle handle);
// Parameters:
// maxVectors: the available rows of registers.
// variables: an array of variables.
-bool ShCheckVariablesWithinPackingLimits(int maxVectors,
- const std::vector<sh::ShaderVariable> &variables);
+COMPILER_EXPORT bool ShCheckVariablesWithinPackingLimits(
+ int maxVectors,
+ const std::vector<sh::ShaderVariable> &variables);
// Gives the compiler-assigned register for an interface block.
// The method writes the value to the output variable "indexOut".
@@ -503,155 +536,14 @@ bool ShCheckVariablesWithinPackingLimits(int maxVectors,
// handle: Specifies the compiler
// interfaceBlockName: Specifies the interface block
// indexOut: output variable that stores the assigned register
-bool ShGetInterfaceBlockRegister(const ShHandle handle,
- const std::string &interfaceBlockName,
- unsigned int *indexOut);
+COMPILER_EXPORT bool ShGetInterfaceBlockRegister(const ShHandle handle,
+ const std::string &interfaceBlockName,
+ unsigned int *indexOut);
// Gives a map from uniform names to compiler-assigned registers in the default
// interface block. Note that the map contains also registers of samplers that
// have been extracted from structs.
-const std::map<std::string, unsigned int> *ShGetUniformRegisterMap(const ShHandle handle);
-
-// Temporary duplicate of the scoped APIs, to be removed when we roll ANGLE and fix Chromium.
-// TODO(jmadill): Consolidate with these APIs once we roll ANGLE.
-
-namespace sh
-{
-
-//
-// Driver must call this first, once, before doing any other compiler operations.
-// If the function succeeds, the return value is true, else false.
-//
-bool Initialize();
-//
-// Driver should call this at shutdown.
-// If the function succeeds, the return value is true, else false.
-//
-bool Finalize();
-
-//
-// Initialize built-in resources with minimum expected values.
-// Parameters:
-// resources: The object to initialize. Will be comparable with memcmp.
-//
-void InitBuiltInResources(ShBuiltInResources *resources);
-
-//
-// Returns the a concatenated list of the items in ShBuiltInResources as a null-terminated string.
-// This function must be updated whenever ShBuiltInResources is changed.
-// Parameters:
-// handle: Specifies the handle of the compiler to be used.
-const std::string &GetBuiltInResourcesString(const ShHandle handle);
-
-//
-// Driver calls these to create and destroy compiler objects.
-//
-// Returns the handle of constructed compiler, null if the requested compiler is not supported.
-// Parameters:
-// type: Specifies the type of shader - GL_FRAGMENT_SHADER or GL_VERTEX_SHADER.
-// spec: Specifies the language spec the compiler must conform to - SH_GLES2_SPEC or SH_WEBGL_SPEC.
-// output: Specifies the output code type - for example SH_ESSL_OUTPUT, SH_GLSL_OUTPUT,
-// SH_HLSL_3_0_OUTPUT or SH_HLSL_4_1_OUTPUT. Note: Each output type may only
-// be supported in some configurations.
-// resources: Specifies the built-in resources.
-ShHandle ConstructCompiler(sh::GLenum type,
- ShShaderSpec spec,
- ShShaderOutput output,
- const ShBuiltInResources *resources);
-void Destruct(ShHandle handle);
-
-//
-// Compiles the given shader source.
-// If the function succeeds, the return value is true, else false.
-// Parameters:
-// handle: Specifies the handle of compiler to be used.
-// shaderStrings: Specifies an array of pointers to null-terminated strings containing the shader
-// source code.
-// numStrings: Specifies the number of elements in shaderStrings array.
-// compileOptions: A mask containing the following parameters:
-// SH_VALIDATE: Validates shader to ensure that it conforms to the spec
-// specified during compiler construction.
-// SH_VALIDATE_LOOP_INDEXING: Validates loop and indexing in the shader to
-// ensure that they do not exceed the minimum
-// functionality mandated in GLSL 1.0 spec,
-// Appendix A, Section 4 and 5.
-// There is no need to specify this parameter when
-// compiling for WebGL - it is implied.
-// SH_INTERMEDIATE_TREE: Writes intermediate tree to info log.
-// Can be queried by calling sh::GetInfoLog().
-// SH_OBJECT_CODE: Translates intermediate tree to glsl or hlsl shader.
-// Can be queried by calling sh::GetObjectCode().
-// SH_VARIABLES: Extracts attributes, uniforms, and varyings.
-// Can be queried by calling ShGetVariableInfo().
-//
-bool Compile(const ShHandle handle,
- const char *const shaderStrings[],
- size_t numStrings,
- ShCompileOptions compileOptions);
-
-// Clears the results from the previous compilation.
-void ClearResults(const ShHandle handle);
-
-// Return the version of the shader language.
-int GetShaderVersion(const ShHandle handle);
-
-// Return the currently set language output type.
-ShShaderOutput GetShaderOutputType(const ShHandle handle);
-
-// Returns null-terminated information log for a compiled shader.
-// Parameters:
-// handle: Specifies the compiler
-const std::string &GetInfoLog(const ShHandle handle);
-
-// Returns null-terminated object code for a compiled shader.
-// Parameters:
-// handle: Specifies the compiler
-const std::string &GetObjectCode(const ShHandle handle);
-
-// Returns a (original_name, hash) map containing all the user defined names in the shader,
-// including variable names, function names, struct names, and struct field names.
-// Parameters:
-// handle: Specifies the compiler
-const std::map<std::string, std::string> *GetNameHashingMap(const ShHandle handle);
-
-// Shader variable inspection.
-// Returns a pointer to a list of variables of the designated type.
-// (See ShaderVars.h for type definitions, included above)
-// Returns NULL on failure.
-// Parameters:
-// handle: Specifies the compiler
-const std::vector<sh::Uniform> *GetUniforms(const ShHandle handle);
-const std::vector<sh::Varying> *GetVaryings(const ShHandle handle);
-const std::vector<sh::Attribute> *GetAttributes(const ShHandle handle);
-const std::vector<sh::OutputVariable> *GetOutputVariables(const ShHandle handle);
-const std::vector<sh::InterfaceBlock> *GetInterfaceBlocks(const ShHandle handle);
-sh::WorkGroupSize GetComputeShaderLocalGroupSize(const ShHandle handle);
-
-// Returns true if the passed in variables pack in maxVectors followingthe packing rules from the
-// GLSL 1.017 spec, Appendix A, section 7.
-// Returns false otherwise. Also look at the SH_ENFORCE_PACKING_RESTRICTIONS
-// flag above.
-// Parameters:
-// maxVectors: the available rows of registers.
-// variables: an array of variables.
-bool CheckVariablesWithinPackingLimits(int maxVectors,
- const std::vector<sh::ShaderVariable> &variables);
-
-// Gives the compiler-assigned register for an interface block.
-// The method writes the value to the output variable "indexOut".
-// Returns true if it found a valid interface block, false otherwise.
-// Parameters:
-// handle: Specifies the compiler
-// interfaceBlockName: Specifies the interface block
-// indexOut: output variable that stores the assigned register
-bool GetInterfaceBlockRegister(const ShHandle handle,
- const std::string &interfaceBlockName,
- unsigned int *indexOut);
-
-// Gives a map from uniform names to compiler-assigned registers in the default interface block.
-// Note that the map contains also registers of samplers that have been extracted from structs.
-const std::map<std::string, unsigned int> *GetUniformRegisterMap(const ShHandle handle);
-
-} // namespace sh
+COMPILER_EXPORT const std::map<std::string, unsigned int> *ShGetUniformRegisterMap(
+ const ShHandle handle);
#endif // GLSLANG_SHADERLANG_H_
diff --git a/gfx/angle/include/GLSLANG/ShaderVars.h b/gfx/angle/include/GLSLANG/ShaderVars.h
index 2683eb464..e1c140f92 100755
--- a/gfx/angle/include/GLSLANG/ShaderVars.h
+++ b/gfx/angle/include/GLSLANG/ShaderVars.h
@@ -29,7 +29,7 @@ enum InterpolationType
};
// Validate link & SSO consistency of interpolation qualifiers
-bool InterpolationTypesMatch(InterpolationType a, InterpolationType b);
+COMPILER_EXPORT bool InterpolationTypesMatch(InterpolationType a, InterpolationType b);
// Uniform block layout qualifier, see section 4.3.8.3 of the ESSL 3.00.4 spec
enum BlockLayoutType
@@ -43,7 +43,7 @@ enum BlockLayoutType
// Note: we must override the copy constructor and assignment operator so we can
// work around excessive GCC binary bloating:
// See https://code.google.com/p/angleproject/issues/detail?id=697
-struct ShaderVariable
+struct COMPILER_EXPORT ShaderVariable
{
ShaderVariable();
ShaderVariable(GLenum typeIn, unsigned int arraySizeIn);
@@ -92,7 +92,7 @@ struct ShaderVariable
}
};
-struct Uniform : public ShaderVariable
+struct COMPILER_EXPORT Uniform : public ShaderVariable
{
Uniform();
~Uniform();
@@ -113,7 +113,7 @@ struct Uniform : public ShaderVariable
// An interface variable is a variable which passes data between the GL data structures and the
// shader execution: either vertex shader inputs or fragment shader outputs. These variables can
// have integer locations to pass back to the GL API.
-struct InterfaceVariable : public ShaderVariable
+struct COMPILER_EXPORT InterfaceVariable : public ShaderVariable
{
InterfaceVariable();
~InterfaceVariable();
@@ -125,7 +125,7 @@ struct InterfaceVariable : public ShaderVariable
int location;
};
-struct Attribute : public InterfaceVariable
+struct COMPILER_EXPORT Attribute : public InterfaceVariable
{
Attribute();
~Attribute();
@@ -135,7 +135,7 @@ struct Attribute : public InterfaceVariable
bool operator!=(const Attribute &other) const { return !operator==(other); }
};
-struct OutputVariable : public InterfaceVariable
+struct COMPILER_EXPORT OutputVariable : public InterfaceVariable
{
OutputVariable();
~OutputVariable();
@@ -145,7 +145,7 @@ struct OutputVariable : public InterfaceVariable
bool operator!=(const OutputVariable &other) const { return !operator==(other); }
};
-struct InterfaceBlockField : public ShaderVariable
+struct COMPILER_EXPORT InterfaceBlockField : public ShaderVariable
{
InterfaceBlockField();
~InterfaceBlockField();
@@ -167,7 +167,7 @@ struct InterfaceBlockField : public ShaderVariable
bool isRowMajorLayout;
};
-struct Varying : public ShaderVariable
+struct COMPILER_EXPORT Varying : public ShaderVariable
{
Varying();
~Varying();
@@ -193,7 +193,7 @@ struct Varying : public ShaderVariable
bool isInvariant;
};
-struct InterfaceBlock
+struct COMPILER_EXPORT InterfaceBlock
{
InterfaceBlock();
~InterfaceBlock();
@@ -216,7 +216,7 @@ struct InterfaceBlock
std::vector<InterfaceBlockField> fields;
};
-struct WorkGroupSize
+struct COMPILER_EXPORT WorkGroupSize
{
void fill(int fillValue);
void setLocalSize(int localSizeX, int localSizeY, int localSizeZ);
diff --git a/gfx/angle/include/export.h b/gfx/angle/include/export.h
index 809265c1a..cdf6245d6 100755
--- a/gfx/angle/include/export.h
+++ b/gfx/angle/include/export.h
@@ -10,15 +10,13 @@
#define LIBGLESV2_EXPORT_H_
#if defined(_WIN32)
-#if defined(LIBGLESV2_IMPLEMENTATION) || defined(LIBANGLE_IMPLEMENTATION) || \
- defined(LIBANGLE_UTIL_IMPLEMENTATION)
+# if defined(LIBGLESV2_IMPLEMENTATION) || defined(LIBANGLE_IMPLEMENTATION)
# define ANGLE_EXPORT __declspec(dllexport)
# else
# define ANGLE_EXPORT __declspec(dllimport)
# endif
#elif defined(__GNUC__)
-#if defined(LIBGLESV2_IMPLEMENTATION) || defined(LIBANGLE_IMPLEMENTATION) || \
- defined(LIBANGLE_UTIL_IMPLEMENTATION)
+# if defined(LIBGLESV2_IMPLEMENTATION) || defined(LIBANGLE_IMPLEMENTATION)
# define ANGLE_EXPORT __attribute__((visibility ("default")))
# else
# define ANGLE_EXPORT
diff --git a/gfx/angle/moz.build b/gfx/angle/moz.build
index 2a40e0ac6..1dbfaf2ce 100755
--- a/gfx/angle/moz.build
+++ b/gfx/angle/moz.build
@@ -28,13 +28,11 @@ UNIFIED_SOURCES += [
'src/compiler/preprocessor/Preprocessor.cpp',
'src/compiler/preprocessor/Token.cpp',
'src/compiler/preprocessor/Tokenizer.cpp',
- 'src/compiler/translator/AddAndTrueToLoopCondition.cpp',
'src/compiler/translator/AddDefaultReturnStatements.cpp',
'src/compiler/translator/ArrayReturnValueToOutParameter.cpp',
'src/compiler/translator/ASTMetadataHLSL.cpp',
'src/compiler/translator/blocklayout.cpp',
'src/compiler/translator/blocklayoutHLSL.cpp',
- 'src/compiler/translator/BreakVariableAliasingInInnerLoops.cpp',
'src/compiler/translator/BuiltInFunctionEmulator.cpp',
'src/compiler/translator/BuiltInFunctionEmulatorGLSL.cpp',
'src/compiler/translator/BuiltInFunctionEmulatorHLSL.cpp',
@@ -42,8 +40,11 @@ UNIFIED_SOURCES += [
'src/compiler/translator/CallDAG.cpp',
'src/compiler/translator/CodeGen.cpp',
'src/compiler/translator/Compiler.cpp',
- 'src/compiler/translator/ConstantUnion.cpp',
'src/compiler/translator/DeferGlobalInitializers.cpp',
+ 'src/compiler/translator/depgraph/DependencyGraph.cpp',
+ 'src/compiler/translator/depgraph/DependencyGraphBuilder.cpp',
+ 'src/compiler/translator/depgraph/DependencyGraphOutput.cpp',
+ 'src/compiler/translator/depgraph/DependencyGraphTraverse.cpp',
'src/compiler/translator/Diagnostics.cpp',
'src/compiler/translator/DirectiveHandler.cpp',
'src/compiler/translator/EmulatePrecision.cpp',
@@ -70,27 +71,28 @@ UNIFIED_SOURCES += [
'src/compiler/translator/ParseContext.cpp',
'src/compiler/translator/PoolAlloc.cpp',
'src/compiler/translator/PruneEmptyDeclarations.cpp',
- 'src/compiler/translator/QualifierTypes.cpp',
'src/compiler/translator/RecordConstantPrecision.cpp',
'src/compiler/translator/RegenerateStructNames.cpp',
'src/compiler/translator/RemoveDynamicIndexing.cpp',
- 'src/compiler/translator/RemoveInvariantDeclaration.cpp',
'src/compiler/translator/RemovePow.cpp',
'src/compiler/translator/RemoveSwitchFallThrough.cpp',
'src/compiler/translator/RewriteDoWhile.cpp',
'src/compiler/translator/RewriteElseBlocks.cpp',
- 'src/compiler/translator/RewriteUnaryMinusOperatorInt.cpp',
+ 'src/compiler/translator/RewriteTexelFetchOffset.cpp',
'src/compiler/translator/ScalarizeVecAndMatConstructorArgs.cpp',
'src/compiler/translator/SearchSymbol.cpp',
'src/compiler/translator/SeparateArrayInitialization.cpp',
'src/compiler/translator/SeparateDeclarations.cpp',
'src/compiler/translator/SeparateExpressionsReturningArrays.cpp',
+ 'src/compiler/translator/ShaderLang.cpp',
'src/compiler/translator/ShaderVars.cpp',
'src/compiler/translator/SimplifyLoopConditions.cpp',
'src/compiler/translator/SplitSequenceOperator.cpp',
'src/compiler/translator/StructureHLSL.cpp',
'src/compiler/translator/SymbolTable.cpp',
'src/compiler/translator/TextureFunctionHLSL.cpp',
+ 'src/compiler/translator/timing/RestrictFragmentShaderTiming.cpp',
+ 'src/compiler/translator/timing/RestrictVertexShaderTiming.cpp',
'src/compiler/translator/TranslatorESSL.cpp',
'src/compiler/translator/TranslatorGLSL.cpp',
'src/compiler/translator/TranslatorHLSL.cpp',
@@ -98,7 +100,6 @@ UNIFIED_SOURCES += [
'src/compiler/translator/UnfoldShortCircuitAST.cpp',
'src/compiler/translator/UnfoldShortCircuitToIf.cpp',
'src/compiler/translator/UniformHLSL.cpp',
- 'src/compiler/translator/UseInterfaceBlockFields.cpp',
'src/compiler/translator/util.cpp',
'src/compiler/translator/UtilsHLSL.cpp',
'src/compiler/translator/ValidateGlobalInitializer.cpp',
@@ -115,8 +116,6 @@ SOURCES += [
'src/compiler/translator/EmulateGLFragColorBroadcast.cpp',
'src/compiler/translator/glslang_lex.cpp',
'src/compiler/translator/glslang_tab.cpp',
- 'src/compiler/translator/RewriteTexelFetchOffset.cpp',
- 'src/compiler/translator/ShaderLang.cpp',
]
diff --git a/gfx/angle/src/angle.gyp b/gfx/angle/src/angle.gyp
index e4e8ba979..f84436d75 100755
--- a/gfx/angle/src/angle.gyp
+++ b/gfx/angle/src/angle.gyp
@@ -45,7 +45,6 @@
'angle_enable_gl%': 1,
}],
],
- 'angle_enable_null%': 1, # Available on all platforms
},
'includes':
[
@@ -59,7 +58,7 @@
{
'target_name': 'angle_common',
'type': 'static_library',
- 'includes': [ '../gyp/common_defines.gypi', ],
+ 'includes': [ '../build/common_defines.gypi', ],
'sources':
[
'<@(libangle_common_sources)',
@@ -146,7 +145,7 @@
{
'target_name': 'angle_image_util',
'type': 'static_library',
- 'includes': [ '../gyp/common_defines.gypi', ],
+ 'includes': [ '../build/common_defines.gypi', ],
'sources':
[
'<@(libangle_image_util_sources)',
@@ -173,7 +172,7 @@
{
'target_name': 'copy_scripts',
'type': 'none',
- 'includes': [ '../gyp/common_defines.gypi', ],
+ 'includes': [ '../build/common_defines.gypi', ],
'hard_dependency': 1,
'copies':
[
@@ -200,7 +199,7 @@
{
'target_name': 'commit_id',
'type': 'none',
- 'includes': [ '../gyp/common_defines.gypi', ],
+ 'includes': [ '../build/common_defines.gypi', ],
'dependencies': [ 'copy_scripts', ],
'hard_dependency': 1,
'actions':
@@ -242,7 +241,7 @@
'target_name': 'commit_id',
'type': 'none',
'hard_dependency': 1,
- 'includes': [ '../gyp/common_defines.gypi', ],
+ 'includes': [ '../build/common_defines.gypi', ],
'copies':
[
{
@@ -275,7 +274,7 @@
'target_name': 'copy_compiler_dll',
'type': 'none',
'dependencies': [ 'copy_scripts', ],
- 'includes': [ '../gyp/common_defines.gypi', ],
+ 'includes': [ '../build/common_defines.gypi', ],
'conditions':
[
['angle_build_winrt==0',
diff --git a/gfx/angle/src/commit.h b/gfx/angle/src/commit.h
index c9ec95b0a..825dd2be6 100755
--- a/gfx/angle/src/commit.h
+++ b/gfx/angle/src/commit.h
@@ -1,3 +1,3 @@
-#define ANGLE_COMMIT_HASH "2a250c8a0e15"
-#define ANGLE_COMMIT_HASH_SIZE 12
-#define ANGLE_COMMIT_DATE "2016-11-23 17:58:16 +0800"
+#define ANGLE_COMMIT_HASH ""
+#define ANGLE_COMMIT_HASH_SIZE 12
+#define ANGLE_COMMIT_DATE ""
diff --git a/gfx/angle/src/common/BitSetIterator.h b/gfx/angle/src/common/BitSetIterator.h
index 7fecd3769..3248ce44c 100755
--- a/gfx/angle/src/common/BitSetIterator.h
+++ b/gfx/angle/src/common/BitSetIterator.h
@@ -104,6 +104,7 @@ inline unsigned long ScanForward(unsigned long bits)
unsigned long firstBitIndex = 0ul;
unsigned char ret = _BitScanForward(&firstBitIndex, bits);
ASSERT(ret != 0);
+ UNUSED_ASSERTION_VARIABLE(ret);
return firstBitIndex;
#elif defined(ANGLE_PLATFORM_POSIX)
return static_cast<unsigned long>(__builtin_ctzl(bits));
diff --git a/gfx/angle/src/common/angleutils.h b/gfx/angle/src/common/angleutils.h
index f5ef7bdc1..ea1a0cae3 100755
--- a/gfx/angle/src/common/angleutils.h
+++ b/gfx/angle/src/common/angleutils.h
@@ -156,14 +156,6 @@ size_t FormatStringIntoVector(const char *fmt, va_list vararg, std::vector<char>
std::string FormatString(const char *fmt, va_list vararg);
std::string FormatString(const char *fmt, ...);
-template <typename T>
-std::string ToString(const T &value)
-{
- std::ostringstream o;
- o << value;
- return o.str();
-}
-
// snprintf is not defined with MSVC prior to to msvc14
#if defined(_MSC_VER) && _MSC_VER < 1900
#define snprintf _snprintf
diff --git a/gfx/angle/src/common/debug.cpp b/gfx/angle/src/common/debug.cpp
index f64d9322f..746da5e0d 100755
--- a/gfx/angle/src/common/debug.cpp
+++ b/gfx/angle/src/common/debug.cpp
@@ -171,9 +171,4 @@ ScopedPerfEventHelper::~ScopedPerfEventHelper()
}
}
-std::ostream &DummyStream()
-{
- return std::cout;
}
-
-} // namespace gl
diff --git a/gfx/angle/src/common/debug.h b/gfx/angle/src/common/debug.h
index 9356090ae..ccc80e802 100755
--- a/gfx/angle/src/common/debug.h
+++ b/gfx/angle/src/common/debug.h
@@ -57,20 +57,7 @@ void InitializeDebugAnnotations(DebugAnnotator *debugAnnotator);
void UninitializeDebugAnnotations();
bool DebugAnnotationsActive();
-// This class is used to explicitly ignore values in the conditional logging macros. This avoids
-// compiler warnings like "value computed is not used" and "statement has no effect".
-class LogMessageVoidify
-{
- public:
- LogMessageVoidify() {}
- // This has to be an operator with a precedence lower than << but higher than ?:
- void operator&(std::ostream &) {}
-};
-
-// This can be any ostream, it is unused, but needs to be a valid reference.
-std::ostream &DummyStream();
-
-} // namespace gl
+}
#if defined(ANGLE_ENABLE_DEBUG_TRACE) || defined(ANGLE_ENABLE_DEBUG_ANNOTATIONS)
#define ANGLE_TRACE_ENABLED
@@ -117,58 +104,61 @@ std::ostream &DummyStream();
#undef ANGLE_TRACE_ENABLED
#endif
-#if defined(COMPILER_GCC) || defined(__clang__)
-#define ANGLE_CRASH() __builtin_trap()
-#else
-#define ANGLE_CRASH() ((void)(*(volatile char *)0 = 0))
-#endif
-
#if !defined(NDEBUG)
#define ANGLE_ASSERT_IMPL(expression) assert(expression)
#else
// TODO(jmadill): Detect if debugger is attached and break.
-#define ANGLE_ASSERT_IMPL(expression) ANGLE_CRASH()
+#define ANGLE_ASSERT_IMPL(expression) abort()
#endif // !defined(NDEBUG)
-// Helper macro which avoids evaluating the arguments to a stream if the condition doesn't hold.
-// Condition is evaluated once and only once.
-#define ANGLE_LAZY_STREAM(stream, condition) \
- !(condition) ? static_cast<void>(0) : ::gl::LogMessageVoidify() & (stream)
-
-#if defined(NDEBUG) && !defined(ANGLE_ENABLE_ASSERTS)
-#define ANGLE_ASSERTS_ON 0
-#else
-#define ANGLE_ASSERTS_ON 1
-#endif
-
// A macro asserting a condition and outputting failures to the debug log
-#if ANGLE_ASSERTS_ON
-#define ASSERT(expression) \
- (expression ? static_cast<void>(0) \
- : (ERR("\t! Assert failed in %s(%d): %s\n", __FUNCTION__, __LINE__, #expression), \
- ANGLE_ASSERT_IMPL(expression)))
+#if defined(ANGLE_ENABLE_ASSERTS)
+#define ASSERT(expression) \
+ { \
+ if (!(expression)) \
+ { \
+ ERR("\t! Assert failed in %s(%d): %s\n", __FUNCTION__, __LINE__, #expression); \
+ ANGLE_ASSERT_IMPL(expression); \
+ } \
+ } \
+ ANGLE_EMPTY_STATEMENT
+#define UNUSED_ASSERTION_VARIABLE(variable)
#else
-#define ASSERT(condition) \
- ANGLE_LAZY_STREAM(::gl::DummyStream(), ANGLE_ASSERTS_ON ? !(condition) : false) \
- << "Check failed: " #condition ". "
-#endif // ANGLE_ASSERTS_ON
+#define ASSERT(expression) (void(0))
+#define UNUSED_ASSERTION_VARIABLE(variable) ((void)variable)
+#endif
#define UNUSED_VARIABLE(variable) ((void)variable)
// A macro to indicate unimplemented functionality
-#ifndef NOASSERT_UNIMPLEMENTED
+
+#if defined (ANGLE_TEST_CONFIG)
#define NOASSERT_UNIMPLEMENTED 1
#endif
-#define UNIMPLEMENTED() \
- { \
- ERR("\t! Unimplemented: %s(%d)\n", __FUNCTION__, __LINE__); \
- ASSERT(NOASSERT_UNIMPLEMENTED); \
- } \
- ANGLE_EMPTY_STATEMENT
+// Define NOASSERT_UNIMPLEMENTED to non zero to skip the assert fail in the unimplemented checks
+// This will allow us to test with some automated test suites (eg dEQP) without crashing
+#ifndef NOASSERT_UNIMPLEMENTED
+#define NOASSERT_UNIMPLEMENTED 0
+#endif
+
+#if !defined(NDEBUG)
+#define UNIMPLEMENTED() { \
+ FIXME("\t! Unimplemented: %s(%d)\n", __FUNCTION__, __LINE__); \
+ assert(NOASSERT_UNIMPLEMENTED); \
+ } ANGLE_EMPTY_STATEMENT
+#else
+ #define UNIMPLEMENTED() FIXME("\t! Unimplemented: %s(%d)\n", __FUNCTION__, __LINE__)
+#endif
// A macro for code which is not expected to be reached under valid assumptions
-#define UNREACHABLE() \
- (ERR("\t! Unreachable reached: %s(%d)\n", __FUNCTION__, __LINE__), ASSERT(false))
+#if !defined(NDEBUG)
+#define UNREACHABLE() { \
+ ERR("\t! Unreachable reached: %s(%d)\n", __FUNCTION__, __LINE__); \
+ assert(false); \
+ } ANGLE_EMPTY_STATEMENT
+#else
+ #define UNREACHABLE() ERR("\t! Unreachable reached: %s(%d)\n", __FUNCTION__, __LINE__)
+#endif
#endif // COMMON_DEBUG_H_
diff --git a/gfx/angle/src/common/mathutil.cpp b/gfx/angle/src/common/mathutil.cpp
index 5db997c66..acbcbdf0c 100755
--- a/gfx/angle/src/common/mathutil.cpp
+++ b/gfx/angle/src/common/mathutil.cpp
@@ -14,9 +14,6 @@
namespace gl
{
-namespace
-{
-
struct RGB9E5Data
{
unsigned int R : 9;
@@ -26,20 +23,17 @@ struct RGB9E5Data
};
// B is the exponent bias (15)
-constexpr int g_sharedexp_bias = 15;
+static const int g_sharedexp_bias = 15;
// N is the number of mantissa bits per component (9)
-constexpr int g_sharedexp_mantissabits = 9;
+static const int g_sharedexp_mantissabits = 9;
// Emax is the maximum allowed biased exponent value (31)
-constexpr int g_sharedexp_maxexponent = 31;
-
-constexpr float g_sharedexp_max =
- ((static_cast<float>(1 << g_sharedexp_mantissabits) - 1) /
- static_cast<float>(1 << g_sharedexp_mantissabits)) *
- static_cast<float>(1 << (g_sharedexp_maxexponent - g_sharedexp_bias));
+static const int g_sharedexp_maxexponent = 31;
-} // anonymous namespace
+static const float g_sharedexp_max = ((pow(2.0f, g_sharedexp_mantissabits) - 1) /
+ pow(2.0f, g_sharedexp_mantissabits)) *
+ pow(2.0f, g_sharedexp_maxexponent - g_sharedexp_bias);
unsigned int convertRGBFloatsTo999E5(float red, float green, float blue)
{
diff --git a/gfx/angle/src/common/mathutil.h b/gfx/angle/src/common/mathutil.h
index 630b6c088..a82f2ecef 100755
--- a/gfx/angle/src/common/mathutil.h
+++ b/gfx/angle/src/common/mathutil.h
@@ -44,15 +44,6 @@ struct Vector4
float w;
};
-struct Vector2
-{
- Vector2() {}
- Vector2(float x, float y) : x(x), y(y) {}
-
- float x;
- float y;
-};
-
inline bool isPow2(int x)
{
return (x & (x - 1)) == 0 && (x != 0);
@@ -765,40 +756,6 @@ constexpr unsigned int iSquareRoot()
return priv::iSquareRoot<N, 1>::value;
}
-// Sum, difference and multiplication operations for signed ints that wrap on 32-bit overflow.
-//
-// Unsigned types are defined to do arithmetic modulo 2^n in C++. For signed types, overflow
-// behavior is undefined.
-
-template <typename T>
-inline T WrappingSum(T lhs, T rhs)
-{
- uint32_t lhsUnsigned = static_cast<uint32_t>(lhs);
- uint32_t rhsUnsigned = static_cast<uint32_t>(rhs);
- return static_cast<T>(lhsUnsigned + rhsUnsigned);
-}
-
-template <typename T>
-inline T WrappingDiff(T lhs, T rhs)
-{
- uint32_t lhsUnsigned = static_cast<uint32_t>(lhs);
- uint32_t rhsUnsigned = static_cast<uint32_t>(rhs);
- return static_cast<T>(lhsUnsigned - rhsUnsigned);
-}
-
-inline int32_t WrappingMul(int32_t lhs, int32_t rhs)
-{
- int64_t lhsWide = static_cast<int64_t>(lhs);
- int64_t rhsWide = static_cast<int64_t>(rhs);
- // The multiplication is guaranteed not to overflow.
- int64_t resultWide = lhsWide * rhsWide;
- // Implement the desired wrapping behavior by masking out the high-order 32 bits.
- resultWide = resultWide & 0xffffffffll;
- // Casting to a narrower signed type is fine since the casted value is representable in the
- // narrower type.
- return static_cast<int32_t>(resultWide);
-}
-
} // namespace gl
namespace rx
diff --git a/gfx/angle/src/common/third_party/numerics/base/logging.h b/gfx/angle/src/common/third_party/numerics/base/logging.h
index 6cf05b4e6..d4e3e2402 100755
--- a/gfx/angle/src/common/third_party/numerics/base/logging.h
+++ b/gfx/angle/src/common/third_party/numerics/base/logging.h
@@ -16,7 +16,7 @@
// Unfortunately ANGLE relies on ASSERT being an empty statement, which these libs don't respect.
#ifndef NOTREACHED
-#define NOTREACHED() UNREACHABLE()
+#define NOTREACHED() 0
#endif
-#endif // BASE_LOGGING_H_
+#endif // BASE_LOGGING_H_ \ No newline at end of file
diff --git a/gfx/angle/src/common/third_party/numerics/base/numerics/safe_conversions_impl.h b/gfx/angle/src/common/third_party/numerics/base/numerics/safe_conversions_impl.h
index 1591b9c8c..798465f53 100755
--- a/gfx/angle/src/common/third_party/numerics/base/numerics/safe_conversions_impl.h
+++ b/gfx/angle/src/common/third_party/numerics/base/numerics/safe_conversions_impl.h
@@ -92,7 +92,7 @@ struct StaticDstRangeRelationToSrcRange<Dst,
static const NumericRangeRepresentation value = NUMERIC_RANGE_NOT_CONTAINED;
};
-enum RangeConstraint : unsigned char
+enum RangeConstraint
{
RANGE_VALID = 0x0, // Value can be represented by the destination type.
RANGE_UNDERFLOW = 0x1, // Value would overflow.
diff --git a/gfx/angle/src/common/utilities.cpp b/gfx/angle/src/common/utilities.cpp
index 89e383405..d9e8b660e 100755
--- a/gfx/angle/src/common/utilities.cpp
+++ b/gfx/angle/src/common/utilities.cpp
@@ -247,19 +247,7 @@ int VariableRowCount(GLenum type)
case GL_SAMPLER_2D_SHADOW:
case GL_SAMPLER_CUBE_SHADOW:
case GL_SAMPLER_2D_ARRAY_SHADOW:
- case GL_IMAGE_2D:
- case GL_INT_IMAGE_2D:
- case GL_UNSIGNED_INT_IMAGE_2D:
- case GL_IMAGE_2D_ARRAY:
- case GL_INT_IMAGE_2D_ARRAY:
- case GL_UNSIGNED_INT_IMAGE_2D_ARRAY:
- case GL_IMAGE_3D:
- case GL_INT_IMAGE_3D:
- case GL_UNSIGNED_INT_IMAGE_3D:
- case GL_IMAGE_CUBE:
- case GL_INT_IMAGE_CUBE:
- case GL_UNSIGNED_INT_IMAGE_CUBE:
- return 1;
+ return 1;
case GL_FLOAT_MAT2:
case GL_FLOAT_MAT3x2:
case GL_FLOAT_MAT4x2:
@@ -656,29 +644,6 @@ std::string ParseUniformName(const std::string &name, size_t *outSubscript)
return name.substr(0, open);
}
-template <>
-GLuint ConvertToGLuint(GLfloat param)
-{
- return uiround<GLuint>(param);
-}
-
-template <>
-GLint ConvertToGLint(GLfloat param)
-{
- return iround<GLint>(param);
-}
-
-template <>
-GLint ConvertFromGLfloat(GLfloat param)
-{
- return iround<GLint>(param);
-}
-template <>
-GLuint ConvertFromGLfloat(GLfloat param)
-{
- return uiround<GLuint>(param);
-}
-
unsigned int ParseAndStripArrayIndex(std::string *name)
{
unsigned int subscript = GL_INVALID_INDEX;
diff --git a/gfx/angle/src/common/utilities.h b/gfx/angle/src/common/utilities.h
index 16d6560a7..dc09011a2 100755
--- a/gfx/angle/src/common/utilities.h
+++ b/gfx/angle/src/common/utilities.h
@@ -68,76 +68,6 @@ bool IsTriangleMode(GLenum drawMode);
template <typename outT> outT iround(GLfloat value) { return static_cast<outT>(value > 0.0f ? floor(value + 0.5f) : ceil(value - 0.5f)); }
template <typename outT> outT uiround(GLfloat value) { return static_cast<outT>(value + 0.5f); }
-// Helper for converting arbitrary GL types to other GL types used in queries and state setting
-template <typename ParamType>
-GLuint ConvertToGLuint(ParamType param)
-{
- return static_cast<GLuint>(param);
-}
-template <>
-GLuint ConvertToGLuint(GLfloat param);
-
-template <typename ParamType>
-GLint ConvertToGLint(ParamType param)
-{
- return static_cast<GLint>(param);
-}
-template <>
-GLint ConvertToGLint(GLfloat param);
-
-// Same conversion as uint
-template <typename ParamType>
-GLenum ConvertToGLenum(ParamType param)
-{
- return static_cast<GLenum>(ConvertToGLuint(param));
-}
-
-template <typename ParamType>
-GLfloat ConvertToGLfloat(ParamType param)
-{
- return static_cast<GLfloat>(param);
-}
-
-template <typename ParamType>
-ParamType ConvertFromGLfloat(GLfloat param)
-{
- return static_cast<ParamType>(param);
-}
-template <>
-GLint ConvertFromGLfloat(GLfloat param);
-template <>
-GLuint ConvertFromGLfloat(GLfloat param);
-
-template <typename ParamType>
-ParamType ConvertFromGLenum(GLenum param)
-{
- return static_cast<ParamType>(param);
-}
-
-template <typename ParamType>
-ParamType ConvertFromGLuint(GLuint param)
-{
- return static_cast<ParamType>(param);
-}
-
-template <typename ParamType>
-ParamType ConvertFromGLint(GLint param)
-{
- return static_cast<ParamType>(param);
-}
-
-template <typename ParamType>
-ParamType ConvertFromGLboolean(GLboolean param)
-{
- return static_cast<ParamType>(param ? GL_TRUE : GL_FALSE);
-}
-
-template <typename ParamType>
-ParamType ConvertFromGLint64(GLint64 param)
-{
- return clampCast<ParamType>(param);
-}
-
unsigned int ParseAndStripArrayIndex(std::string *name);
} // namespace gl
diff --git a/gfx/angle/src/compiler.gypi b/gfx/angle/src/compiler.gypi
index 279d5af9c..5f28881a9 100755
--- a/gfx/angle/src/compiler.gypi
+++ b/gfx/angle/src/compiler.gypi
@@ -6,7 +6,7 @@
'variables':
{
# These file lists are shared with the GN build.
- 'angle_translator_sources':
+ 'angle_translator_lib_sources':
[
'../include/EGL/egl.h',
'../include/EGL/eglext.h',
@@ -22,13 +22,9 @@
'../include/GLSLANG/ShaderVars.h',
'../include/KHR/khrplatform.h',
'../include/angle_gl.h',
- 'compiler/translator/AddAndTrueToLoopCondition.cpp',
- 'compiler/translator/AddAndTrueToLoopCondition.h',
'compiler/translator/BaseTypes.h',
'compiler/translator/BuiltInFunctionEmulator.cpp',
'compiler/translator/BuiltInFunctionEmulator.h',
- 'compiler/translator/BreakVariableAliasingInInnerLoops.cpp',
- 'compiler/translator/BreakVariableAliasingInInnerLoops.h',
'compiler/translator/Cache.cpp',
'compiler/translator/Cache.h',
'compiler/translator/CallDAG.cpp',
@@ -37,7 +33,6 @@
'compiler/translator/Common.h',
'compiler/translator/Compiler.cpp',
'compiler/translator/Compiler.h',
- 'compiler/translator/ConstantUnion.cpp',
'compiler/translator/ConstantUnion.h',
'compiler/translator/DeferGlobalInitializers.cpp',
'compiler/translator/DeferGlobalInitializers.h',
@@ -86,36 +81,27 @@
'compiler/translator/Pragma.h',
'compiler/translator/PruneEmptyDeclarations.cpp',
'compiler/translator/PruneEmptyDeclarations.h',
- 'compiler/translator/QualifierTypes.h',
- 'compiler/translator/QualifierTypes.cpp',
'compiler/translator/RecordConstantPrecision.cpp',
'compiler/translator/RecordConstantPrecision.h',
'compiler/translator/RegenerateStructNames.cpp',
'compiler/translator/RegenerateStructNames.h',
- 'compiler/translator/RemoveInvariantDeclaration.cpp',
- 'compiler/translator/RemoveInvariantDeclaration.h',
'compiler/translator/RemovePow.cpp',
'compiler/translator/RemovePow.h',
'compiler/translator/RewriteDoWhile.cpp',
'compiler/translator/RewriteDoWhile.h',
'compiler/translator/RewriteTexelFetchOffset.cpp',
'compiler/translator/RewriteTexelFetchOffset.h',
- 'compiler/translator/RewriteUnaryMinusOperatorInt.cpp',
- 'compiler/translator/RewriteUnaryMinusOperatorInt.h',
+ 'compiler/translator/RenameFunction.h',
'compiler/translator/ScalarizeVecAndMatConstructorArgs.cpp',
'compiler/translator/ScalarizeVecAndMatConstructorArgs.h',
'compiler/translator/SearchSymbol.cpp',
'compiler/translator/SearchSymbol.h',
- 'compiler/translator/ShaderLang.cpp',
- 'compiler/translator/ShaderVars.cpp',
'compiler/translator/SymbolTable.cpp',
'compiler/translator/SymbolTable.h',
'compiler/translator/Types.cpp',
'compiler/translator/Types.h',
'compiler/translator/UnfoldShortCircuitAST.cpp',
'compiler/translator/UnfoldShortCircuitAST.h',
- 'compiler/translator/UseInterfaceBlockFields.cpp',
- 'compiler/translator/UseInterfaceBlockFields.h',
'compiler/translator/ValidateGlobalInitializer.cpp',
'compiler/translator/ValidateGlobalInitializer.h',
'compiler/translator/ValidateLimitations.cpp',
@@ -132,6 +118,13 @@
'compiler/translator/VariablePacker.h',
'compiler/translator/blocklayout.cpp',
'compiler/translator/blocklayout.h',
+ 'compiler/translator/depgraph/DependencyGraph.cpp',
+ 'compiler/translator/depgraph/DependencyGraph.h',
+ 'compiler/translator/depgraph/DependencyGraphBuilder.cpp',
+ 'compiler/translator/depgraph/DependencyGraphBuilder.h',
+ 'compiler/translator/depgraph/DependencyGraphOutput.cpp',
+ 'compiler/translator/depgraph/DependencyGraphOutput.h',
+ 'compiler/translator/depgraph/DependencyGraphTraverse.cpp',
'compiler/translator/glslang.h',
'compiler/translator/glslang.l',
'compiler/translator/glslang.y',
@@ -140,19 +133,23 @@
'compiler/translator/glslang_tab.h',
'compiler/translator/intermOut.cpp',
'compiler/translator/length_limits.h',
+ 'compiler/translator/timing/RestrictFragmentShaderTiming.cpp',
+ 'compiler/translator/timing/RestrictFragmentShaderTiming.h',
+ 'compiler/translator/timing/RestrictVertexShaderTiming.cpp',
+ 'compiler/translator/timing/RestrictVertexShaderTiming.h',
'compiler/translator/util.cpp',
'compiler/translator/util.h',
'third_party/compiler/ArrayBoundsClamper.cpp',
'third_party/compiler/ArrayBoundsClamper.h',
],
- 'angle_translator_essl_sources':
+ 'angle_translator_lib_essl_sources':
[
'compiler/translator/OutputESSL.cpp',
'compiler/translator/OutputESSL.h',
'compiler/translator/TranslatorESSL.cpp',
'compiler/translator/TranslatorESSL.h',
],
- 'angle_translator_glsl_sources':
+ 'angle_translator_lib_glsl_sources':
[
'compiler/translator/BuiltInFunctionEmulatorGLSL.cpp',
'compiler/translator/BuiltInFunctionEmulatorGLSL.h',
@@ -167,7 +164,7 @@
'compiler/translator/VersionGLSL.cpp',
'compiler/translator/VersionGLSL.h',
],
- 'angle_translator_hlsl_sources':
+ 'angle_translator_lib_hlsl_sources':
[
'compiler/translator/AddDefaultReturnStatements.cpp',
'compiler/translator/AddDefaultReturnStatements.h',
@@ -240,6 +237,7 @@
'compiler/preprocessor/Tokenizer.h',
'compiler/preprocessor/Tokenizer.l',
'compiler/preprocessor/numeric_lex.h',
+ 'compiler/preprocessor/pp_utils.h',
],
},
# Everything below this is duplicated in the GN build. If you change
@@ -249,23 +247,28 @@
{
'target_name': 'preprocessor',
'type': 'static_library',
- 'dependencies': [ 'angle_common' ],
- 'includes': [ '../gyp/common_defines.gypi', ],
+ 'includes': [ '../build/common_defines.gypi', ],
'sources': [ '<@(angle_preprocessor_sources)', ],
},
{
- 'target_name': 'translator',
+ 'target_name': 'translator_lib',
'type': 'static_library',
'dependencies': [ 'preprocessor', 'angle_common' ],
- 'includes': [ '../gyp/common_defines.gypi', ],
+ 'includes': [ '../build/common_defines.gypi', ],
'include_dirs':
[
'.',
'../include',
],
+ 'defines':
+ [
+ # define the static translator to indicate exported
+ # classes are (in fact) locally defined
+ 'ANGLE_TRANSLATOR_STATIC',
+ ],
'sources':
[
- '<@(angle_translator_sources)',
+ '<@(angle_translator_lib_sources)',
],
'msvs_settings':
{
@@ -291,7 +294,7 @@
},
'sources':
[
- '<@(angle_translator_essl_sources)',
+ '<@(angle_translator_lib_essl_sources)',
],
}],
['angle_enable_glsl==1',
@@ -309,7 +312,7 @@
},
'sources':
[
- '<@(angle_translator_glsl_sources)',
+ '<@(angle_translator_lib_glsl_sources)',
],
}],
['angle_enable_hlsl==1',
@@ -327,10 +330,59 @@
},
'sources':
[
- '<@(angle_translator_hlsl_sources)',
+ '<@(angle_translator_lib_hlsl_sources)',
],
}],
],
},
+
+ {
+ 'target_name': 'translator',
+ 'type': '<(component)',
+ 'dependencies': [ 'translator_lib', 'angle_common' ],
+ 'includes': [ '../build/common_defines.gypi', ],
+ 'include_dirs':
+ [
+ '.',
+ '../include',
+ ],
+ 'defines':
+ [
+ 'ANGLE_TRANSLATOR_IMPLEMENTATION',
+ ],
+ 'sources':
+ [
+ 'compiler/translator/ShaderLang.cpp',
+ 'compiler/translator/ShaderVars.cpp'
+ ],
+ },
+
+ {
+ 'target_name': 'translator_static',
+ 'type': 'static_library',
+ 'dependencies': [ 'translator_lib' ],
+ 'includes': [ '../build/common_defines.gypi', ],
+ 'include_dirs':
+ [
+ '.',
+ '../include',
+ ],
+ 'defines':
+ [
+ 'ANGLE_TRANSLATOR_STATIC',
+ ],
+ 'direct_dependent_settings':
+ {
+ 'defines':
+ [
+ 'ANGLE_TRANSLATOR_STATIC',
+ ],
+ },
+ 'sources':
+ [
+ 'compiler/translator/ShaderLang.cpp',
+ 'compiler/translator/ShaderVars.cpp'
+ ],
+ },
],
}
diff --git a/gfx/angle/src/compiler/fuzz/translator_fuzzer.cpp b/gfx/angle/src/compiler/fuzz/translator_fuzzer.cpp
deleted file mode 100644
index 3ea117ba0..000000000
--- a/gfx/angle/src/compiler/fuzz/translator_fuzzer.cpp
+++ /dev/null
@@ -1,161 +0,0 @@
-//
-// Copyright (c) 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-
-// translator_fuzzer.cpp: A libfuzzer fuzzer for the shader translator.
-
-#include <stddef.h>
-#include <stdint.h>
-#include <unordered_map>
-#include <iostream>
-
-#include "compiler/translator/Compiler.h"
-#include "angle_gl.h"
-
-using namespace sh;
-
-struct TranslatorCacheKey
-{
- bool operator==(const TranslatorCacheKey &other) const
- {
- return type == other.type && spec == other.spec && output == other.output;
- }
-
- uint32_t type = 0;
- uint32_t spec = 0;
- uint32_t output = 0;
-};
-
-namespace std
-{
-
-template <>
-struct hash<TranslatorCacheKey>
-{
- std::size_t operator()(const TranslatorCacheKey &k) const
- {
- return (hash<uint32_t>()(k.type) << 1) ^ (hash<uint32_t>()(k.spec) >> 1) ^
- hash<uint32_t>()(k.output);
- }
-};
-} // namespace std
-
-static std::unordered_map<TranslatorCacheKey, TCompiler *> translators;
-
-extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
-{
- // Reserve some size for future compile options
- const size_t kHeaderSize = 128;
-
- if (size <= kHeaderSize)
- {
- return 0;
- }
-
- // Make sure the rest of data will be a valid C string so that we don't have to copy it.
- if (data[size - 1] != 0)
- {
- return 0;
- }
-
- uint32_t type = *reinterpret_cast<const uint32_t *>(data);
- uint32_t spec = *reinterpret_cast<const uint32_t *>(data + 4);
- uint32_t output = *reinterpret_cast<const uint32_t *>(data + 8);
- uint64_t options = *reinterpret_cast<const uint64_t *>(data + 12);
-
- if (type != GL_FRAGMENT_SHADER && type != GL_VERTEX_SHADER)
- {
- return 0;
- }
-
- if (spec != SH_GLES2_SPEC && type != SH_WEBGL_SPEC && spec != SH_GLES3_SPEC &&
- spec != SH_WEBGL2_SPEC)
- {
- return 0;
- }
-
- std::vector<uint32_t> validOutputs;
- validOutputs.push_back(SH_ESSL_OUTPUT);
- validOutputs.push_back(SH_GLSL_COMPATIBILITY_OUTPUT);
- validOutputs.push_back(SH_GLSL_130_OUTPUT);
- validOutputs.push_back(SH_GLSL_140_OUTPUT);
- validOutputs.push_back(SH_GLSL_150_CORE_OUTPUT);
- validOutputs.push_back(SH_GLSL_330_CORE_OUTPUT);
- validOutputs.push_back(SH_GLSL_400_CORE_OUTPUT);
- validOutputs.push_back(SH_GLSL_410_CORE_OUTPUT);
- validOutputs.push_back(SH_GLSL_420_CORE_OUTPUT);
- validOutputs.push_back(SH_GLSL_430_CORE_OUTPUT);
- validOutputs.push_back(SH_GLSL_440_CORE_OUTPUT);
- validOutputs.push_back(SH_GLSL_450_CORE_OUTPUT);
- validOutputs.push_back(SH_HLSL_3_0_OUTPUT);
- validOutputs.push_back(SH_HLSL_4_1_OUTPUT);
- validOutputs.push_back(SH_HLSL_4_0_FL9_3_OUTPUT);
- bool found = false;
- for (auto valid : validOutputs)
- {
- found = found || (valid == output);
- }
- if (!found)
- {
- return 0;
- }
-
- size -= kHeaderSize;
- data += kHeaderSize;
-
- if (!ShInitialize())
- {
- return 0;
- }
-
- TranslatorCacheKey key;
- key.type = type;
- key.spec = spec;
- key.output = output;
-
- if (translators.find(key) == translators.end())
- {
- TCompiler *translator = ConstructCompiler(type, static_cast<ShShaderSpec>(spec),
- static_cast<ShShaderOutput>(output));
-
- if (!translator)
- {
- return 0;
- }
-
- ShBuiltInResources resources;
- ShInitBuiltInResources(&resources);
-
- // Enable all the extensions to have more coverage
- resources.OES_standard_derivatives = 1;
- resources.OES_EGL_image_external = 1;
- resources.OES_EGL_image_external_essl3 = 1;
- resources.NV_EGL_stream_consumer_external = 1;
- resources.ARB_texture_rectangle = 1;
- resources.EXT_blend_func_extended = 1;
- resources.EXT_draw_buffers = 1;
- resources.EXT_frag_depth = 1;
- resources.EXT_shader_texture_lod = 1;
- resources.WEBGL_debug_shader_precision = 1;
- resources.EXT_shader_framebuffer_fetch = 1;
- resources.NV_shader_framebuffer_fetch = 1;
- resources.ARM_shader_framebuffer_fetch = 1;
-
- if (!translator->Init(resources))
- {
- DeleteCompiler(translator);
- return 0;
- }
-
- translators[key] = translator;
- }
-
- TCompiler *translator = translators[key];
-
- const char *shaderStrings[] = {reinterpret_cast<const char *>(data)};
- translator->compile(shaderStrings, 1, options);
-
- return 0;
-}
diff --git a/gfx/angle/src/compiler/preprocessor/64bit-tokenizer-safety.patch b/gfx/angle/src/compiler/preprocessor/64bit-tokenizer-safety.patch
index 912520c74..4c2f79441 100755
--- a/gfx/angle/src/compiler/preprocessor/64bit-tokenizer-safety.patch
+++ b/gfx/angle/src/compiler/preprocessor/64bit-tokenizer-safety.patch
@@ -1,79 +1,31 @@
-diff --git a/src/compiler/preprocessor/Tokenizer.cpp b/src/compiler/preprocessor/Tokenizer.cpp
-index 0d7ad58..5ef0e5e 100644
--- a/src/compiler/preprocessor/Tokenizer.cpp
+++ b/src/compiler/preprocessor/Tokenizer.cpp
-@@ -1703,7 +1703,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
- else
- {
- int num_to_read =
-- YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
-+ static_cast<int>(YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1);
-
- while ( num_to_read <= 0 )
- { /* Not enough room in the buffer - grow it. */
-@@ -1737,8 +1737,8 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
-
- yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
-
-- num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
-- number_to_move - 1;
-+ num_to_read = static_cast<int>(YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
-+ number_to_move - 1);
-
- }
-
-@@ -1746,8 +1746,10 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
- num_to_read = YY_READ_BUF_SIZE;
-
- /* Read in more data. */
-+ yy_size_t ret = 0;
- YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
-- yyg->yy_n_chars, num_to_read );
-+ ret, num_to_read );
-+ yyg->yy_n_chars = static_cast<int>(ret);
-
- YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
- }
-@@ -1773,13 +1775,13 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
-
- if ((int) (yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
- /* Extend the array by 50%, plus the number we really need. */
-- int new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1);
-+ yy_size_t new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1);
- YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) pprealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ,yyscanner );
- if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
- YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
- }
-
-- yyg->yy_n_chars += number_to_move;
-+ yyg->yy_n_chars += static_cast<int>(number_to_move);
- YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR;
- YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
-
-@@ -2171,7 +2173,7 @@ void pppop_buffer_state (yyscan_t yyscanner)
+@@ -56,6 +56,7 @@ typedef int16_t flex_int16_t;
+ typedef uint16_t flex_uint16_t;
+ typedef int32_t flex_int32_t;
+ typedef uint32_t flex_uint32_t;
++typedef uint64_t flex_uint64_t;
+ #else
+ typedef signed char flex_int8_t;
+ typedef short int flex_int16_t;
+@@ -179,6 +180,11 @@ typedef void* yyscan_t;
+ typedef struct yy_buffer_state *YY_BUFFER_STATE;
+ #endif
+
++#ifndef YY_TYPEDEF_YY_SIZE_T
++#define YY_TYPEDEF_YY_SIZE_T
++typedef size_t yy_size_t;
++#endif
++
+ #define EOB_ACT_CONTINUE_SCAN 0
+ #define EOB_ACT_END_OF_FILE 1
+ #define EOB_ACT_LAST_MATCH 2
+@@ -353,7 +354,7 @@ static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
*/
- static void ppensure_buffer_stack (yyscan_t yyscanner)
- {
-- int num_to_alloc;
-+ yy_size_t num_to_alloc;
- struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-
- if (!yyg->yy_buffer_stack) {
-@@ -2238,7 +2240,7 @@ YY_BUFFER_STATE pp_scan_buffer (char * base, yy_size_t size , yyscan_t yyscann
- if ( ! b )
- YY_FATAL_ERROR( "out of dynamic memory in pp_scan_buffer()" );
-
-- b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
-+ b->yy_buf_size = static_cast<int>(size - 2); /* "- 2" to take care of EOB's */
- b->yy_buf_pos = b->yy_ch_buf = base;
- b->yy_is_our_buffer = 0;
- b->yy_input_file = NULL;
-@@ -2293,7 +2295,7 @@ YY_BUFFER_STATE pp_scan_bytes (yyconst char * yybytes, int _yybytes_len , yysc
- if ( ! buf )
- YY_FATAL_ERROR( "out of dynamic memory in pp_scan_bytes()" );
-
-- for ( i = 0; i < _yybytes_len; ++i )
-+ for ( i = 0; i < static_cast<yy_size_t>(_yybytes_len); ++i )
- buf[i] = yybytes[i];
-
- buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
+ #define YY_DO_BEFORE_ACTION \
+ yyg->yytext_ptr = yy_bp; \
+- yyleng = (size_t) (yy_cp - yy_bp); \
++ yyleng = (yy_size_t) (yy_cp - yy_bp); \
+ yyg->yy_hold_char = *yy_cp; \
+ *yy_cp = '\0'; \
+ yyg->yy_c_buf_p = yy_cp;
diff --git a/gfx/angle/src/compiler/preprocessor/DiagnosticsBase.cpp b/gfx/angle/src/compiler/preprocessor/DiagnosticsBase.cpp
index fcb24e4e8..9f62a9e0e 100755
--- a/gfx/angle/src/compiler/preprocessor/DiagnosticsBase.cpp
+++ b/gfx/angle/src/compiler/preprocessor/DiagnosticsBase.cpp
@@ -4,9 +4,9 @@
// found in the LICENSE file.
//
-#include "compiler/preprocessor/DiagnosticsBase.h"
+#include "DiagnosticsBase.h"
-#include "common/debug.h"
+#include <cassert>
namespace pp
{
@@ -31,7 +31,7 @@ Diagnostics::Severity Diagnostics::severity(ID id)
if ((id > PP_WARNING_BEGIN) && (id < PP_WARNING_END))
return PP_WARNING;
- UNREACHABLE();
+ assert(false);
return PP_ERROR;
}
@@ -74,8 +74,6 @@ std::string Diagnostics::message(ID id)
return "predefined macro undefined";
case PP_MACRO_UNTERMINATED_INVOCATION:
return "unterminated macro invocation";
- case PP_MACRO_UNDEFINED_WHILE_INVOKED:
- return "macro undefined while being invoked";
case PP_MACRO_TOO_FEW_ARGS:
return "Not enough arguments for macro";
case PP_MACRO_TOO_MANY_ARGS:
@@ -133,8 +131,8 @@ std::string Diagnostics::message(ID id)
return "macro name with a double underscore is reserved - unintented behavior is possible";
// Warnings end.
default:
- UNREACHABLE();
- return "";
+ assert(false);
+ return "";
}
}
diff --git a/gfx/angle/src/compiler/preprocessor/DiagnosticsBase.h b/gfx/angle/src/compiler/preprocessor/DiagnosticsBase.h
index 6c3fe9ee9..a0899203f 100755
--- a/gfx/angle/src/compiler/preprocessor/DiagnosticsBase.h
+++ b/gfx/angle/src/compiler/preprocessor/DiagnosticsBase.h
@@ -44,7 +44,6 @@ class Diagnostics
PP_MACRO_PREDEFINED_REDEFINED,
PP_MACRO_PREDEFINED_UNDEFINED,
PP_MACRO_UNTERMINATED_INVOCATION,
- PP_MACRO_UNDEFINED_WHILE_INVOKED,
PP_MACRO_TOO_FEW_ARGS,
PP_MACRO_TOO_MANY_ARGS,
PP_MACRO_DUPLICATE_PARAMETER_NAMES,
diff --git a/gfx/angle/src/compiler/preprocessor/DirectiveHandlerBase.cpp b/gfx/angle/src/compiler/preprocessor/DirectiveHandlerBase.cpp
index 049dae907..ef35c6ed5 100755
--- a/gfx/angle/src/compiler/preprocessor/DirectiveHandlerBase.cpp
+++ b/gfx/angle/src/compiler/preprocessor/DirectiveHandlerBase.cpp
@@ -4,7 +4,7 @@
// found in the LICENSE file.
//
-#include "compiler/preprocessor/DirectiveHandlerBase.h"
+#include "DirectiveHandlerBase.h"
namespace pp
{
diff --git a/gfx/angle/src/compiler/preprocessor/DirectiveParser.cpp b/gfx/angle/src/compiler/preprocessor/DirectiveParser.cpp
index 643f73bd9..aceb3b2b2 100755
--- a/gfx/angle/src/compiler/preprocessor/DirectiveParser.cpp
+++ b/gfx/angle/src/compiler/preprocessor/DirectiveParser.cpp
@@ -4,19 +4,19 @@
// found in the LICENSE file.
//
-#include "compiler/preprocessor/DirectiveParser.h"
+#include "DirectiveParser.h"
#include <algorithm>
+#include <cassert>
#include <cstdlib>
#include <sstream>
-#include "common/debug.h"
-#include "compiler/preprocessor/DiagnosticsBase.h"
-#include "compiler/preprocessor/DirectiveHandlerBase.h"
-#include "compiler/preprocessor/ExpressionParser.h"
-#include "compiler/preprocessor/MacroExpander.h"
-#include "compiler/preprocessor/Token.h"
-#include "compiler/preprocessor/Tokenizer.h"
+#include "DiagnosticsBase.h"
+#include "DirectiveHandlerBase.h"
+#include "ExpressionParser.h"
+#include "MacroExpander.h"
+#include "Token.h"
+#include "Tokenizer.h"
namespace {
enum DirectiveType
@@ -248,7 +248,7 @@ void DirectiveParser::lex(Token *token)
void DirectiveParser::parseDirective(Token *token)
{
- ASSERT(token->type == Token::PP_HASH);
+ assert(token->type == Token::PP_HASH);
mTokenizer->lex(token);
if (isEOD(token))
@@ -314,8 +314,8 @@ void DirectiveParser::parseDirective(Token *token)
parseLine(token);
break;
default:
- UNREACHABLE();
- break;
+ assert(false);
+ break;
}
skipUntilEOD(mTokenizer, token);
@@ -328,7 +328,7 @@ void DirectiveParser::parseDirective(Token *token)
void DirectiveParser::parseDefine(Token *token)
{
- ASSERT(getDirective(token) == DIRECTIVE_DEFINE);
+ assert(getDirective(token) == DIRECTIVE_DEFINE);
mTokenizer->lex(token);
if (token->type != Token::IDENTIFIER)
@@ -428,7 +428,7 @@ void DirectiveParser::parseDefine(Token *token)
void DirectiveParser::parseUndef(Token *token)
{
- ASSERT(getDirective(token) == DIRECTIVE_UNDEF);
+ assert(getDirective(token) == DIRECTIVE_UNDEF);
mTokenizer->lex(token);
if (token->type != Token::IDENTIFIER)
@@ -445,13 +445,6 @@ void DirectiveParser::parseUndef(Token *token)
{
mDiagnostics->report(Diagnostics::PP_MACRO_PREDEFINED_UNDEFINED,
token->location, token->text);
- return;
- }
- else if (iter->second.expansionCount > 0)
- {
- mDiagnostics->report(Diagnostics::PP_MACRO_UNDEFINED_WHILE_INVOKED, token->location,
- token->text);
- return;
}
else
{
@@ -470,25 +463,25 @@ void DirectiveParser::parseUndef(Token *token)
void DirectiveParser::parseIf(Token *token)
{
- ASSERT(getDirective(token) == DIRECTIVE_IF);
+ assert(getDirective(token) == DIRECTIVE_IF);
parseConditionalIf(token);
}
void DirectiveParser::parseIfdef(Token *token)
{
- ASSERT(getDirective(token) == DIRECTIVE_IFDEF);
+ assert(getDirective(token) == DIRECTIVE_IFDEF);
parseConditionalIf(token);
}
void DirectiveParser::parseIfndef(Token *token)
{
- ASSERT(getDirective(token) == DIRECTIVE_IFNDEF);
+ assert(getDirective(token) == DIRECTIVE_IFNDEF);
parseConditionalIf(token);
}
void DirectiveParser::parseElse(Token *token)
{
- ASSERT(getDirective(token) == DIRECTIVE_ELSE);
+ assert(getDirective(token) == DIRECTIVE_ELSE);
if (mConditionalStack.empty())
{
@@ -529,7 +522,7 @@ void DirectiveParser::parseElse(Token *token)
void DirectiveParser::parseElif(Token *token)
{
- ASSERT(getDirective(token) == DIRECTIVE_ELIF);
+ assert(getDirective(token) == DIRECTIVE_ELIF);
if (mConditionalStack.empty())
{
@@ -569,7 +562,7 @@ void DirectiveParser::parseElif(Token *token)
void DirectiveParser::parseEndif(Token *token)
{
- ASSERT(getDirective(token) == DIRECTIVE_ENDIF);
+ assert(getDirective(token) == DIRECTIVE_ENDIF);
if (mConditionalStack.empty())
{
@@ -593,7 +586,7 @@ void DirectiveParser::parseEndif(Token *token)
void DirectiveParser::parseError(Token *token)
{
- ASSERT(getDirective(token) == DIRECTIVE_ERROR);
+ assert(getDirective(token) == DIRECTIVE_ERROR);
std::ostringstream stream;
mTokenizer->lex(token);
@@ -608,7 +601,7 @@ void DirectiveParser::parseError(Token *token)
// Parses pragma of form: #pragma name[(value)].
void DirectiveParser::parsePragma(Token *token)
{
- ASSERT(getDirective(token) == DIRECTIVE_PRAGMA);
+ assert(getDirective(token) == DIRECTIVE_PRAGMA);
enum State
{
@@ -669,7 +662,7 @@ void DirectiveParser::parsePragma(Token *token)
void DirectiveParser::parseExtension(Token *token)
{
- ASSERT(getDirective(token) == DIRECTIVE_EXTENSION);
+ assert(getDirective(token) == DIRECTIVE_EXTENSION);
enum State
{
@@ -750,7 +743,7 @@ void DirectiveParser::parseExtension(Token *token)
void DirectiveParser::parseVersion(Token *token)
{
- ASSERT(getDirective(token) == DIRECTIVE_VERSION);
+ assert(getDirective(token) == DIRECTIVE_VERSION);
if (mPastFirstStatement)
{
@@ -837,7 +830,7 @@ void DirectiveParser::parseVersion(Token *token)
void DirectiveParser::parseLine(Token *token)
{
- ASSERT(getDirective(token) == DIRECTIVE_LINE);
+ assert(getDirective(token) == DIRECTIVE_LINE);
bool valid = true;
bool parsedFileNumber = false;
@@ -938,8 +931,8 @@ void DirectiveParser::parseConditionalIf(Token *token)
expression = parseExpressionIfdef(token) == 0 ? 1 : 0;
break;
default:
- UNREACHABLE();
- break;
+ assert(false);
+ break;
}
block.skipGroup = expression == 0;
block.foundValidGroup = expression != 0;
@@ -949,7 +942,8 @@ void DirectiveParser::parseConditionalIf(Token *token)
int DirectiveParser::parseExpressionIf(Token *token)
{
- ASSERT((getDirective(token) == DIRECTIVE_IF) || (getDirective(token) == DIRECTIVE_ELIF));
+ assert((getDirective(token) == DIRECTIVE_IF) ||
+ (getDirective(token) == DIRECTIVE_ELIF));
DefinedParser definedParser(mTokenizer, mMacroSet, mDiagnostics);
MacroExpander macroExpander(&definedParser, mMacroSet, mDiagnostics);
@@ -976,7 +970,8 @@ int DirectiveParser::parseExpressionIf(Token *token)
int DirectiveParser::parseExpressionIfdef(Token *token)
{
- ASSERT((getDirective(token) == DIRECTIVE_IFDEF) || (getDirective(token) == DIRECTIVE_IFNDEF));
+ assert((getDirective(token) == DIRECTIVE_IFDEF) ||
+ (getDirective(token) == DIRECTIVE_IFNDEF));
mTokenizer->lex(token);
if (token->type != Token::IDENTIFIER)
diff --git a/gfx/angle/src/compiler/preprocessor/DirectiveParser.h b/gfx/angle/src/compiler/preprocessor/DirectiveParser.h
index f0e889c8a..2888e289c 100755
--- a/gfx/angle/src/compiler/preprocessor/DirectiveParser.h
+++ b/gfx/angle/src/compiler/preprocessor/DirectiveParser.h
@@ -7,9 +7,10 @@
#ifndef COMPILER_PREPROCESSOR_DIRECTIVEPARSER_H_
#define COMPILER_PREPROCESSOR_DIRECTIVEPARSER_H_
-#include "compiler/preprocessor/Lexer.h"
-#include "compiler/preprocessor/Macro.h"
-#include "compiler/preprocessor/SourceLocation.h"
+#include "Lexer.h"
+#include "Macro.h"
+#include "pp_utils.h"
+#include "SourceLocation.h"
namespace pp
{
@@ -29,6 +30,7 @@ class DirectiveParser : public Lexer
void lex(Token *token) override;
private:
+ PP_DISALLOW_COPY_AND_ASSIGN(DirectiveParser);
void parseDirective(Token *token);
void parseDefine(Token *token);
diff --git a/gfx/angle/src/compiler/preprocessor/ExpressionParser.cpp b/gfx/angle/src/compiler/preprocessor/ExpressionParser.cpp
index ee20a6ff6..b765c644c 100755
--- a/gfx/angle/src/compiler/preprocessor/ExpressionParser.cpp
+++ b/gfx/angle/src/compiler/preprocessor/ExpressionParser.cpp
@@ -99,15 +99,17 @@
#include <cassert>
#include <sstream>
-#include <stdint.h>
#include "DiagnosticsBase.h"
#include "Lexer.h"
#include "Token.h"
-#include "common/mathutil.h"
-typedef int32_t YYSTYPE;
-typedef uint32_t UNSIGNED_TYPE;
+#if defined(_MSC_VER)
+typedef __int64 YYSTYPE;
+#else
+#include <stdint.h>
+typedef intmax_t YYSTYPE;
+#endif // _MSC_VER
#define YYENABLE_NLS 0
#define YYLTYPE_IS_TRIVIAL 1
@@ -496,12 +498,9 @@ static const yytype_uint8 yytranslate[] =
#if YYDEBUG
/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
-static const yytype_uint16 yyrline[] =
-{
- 0, 108, 108, 115, 116, 127, 127, 148, 148, 169,
- 172, 175, 178, 181, 184, 187, 190, 193, 196, 221,
- 246, 249, 252, 278, 305, 308, 311, 314, 326, 329
-};
+static const yytype_uint16 yyrline[] = {0, 110, 110, 117, 118, 129, 129, 150, 150, 171,
+ 174, 177, 180, 183, 186, 189, 192, 195, 198, 218,
+ 238, 241, 244, 264, 284, 287, 290, 293, 296, 299};
#endif
#if YYDEBUG || YYERROR_VERBOSE || 0
@@ -1493,7 +1492,7 @@ yyreduce:
case 18:
{
- if ((yyvsp[0]) < 0 || (yyvsp[0]) > 31)
+ if ((yyvsp[0]) < 0)
{
if (!context->isIgnoringErrors())
{
@@ -1501,17 +1500,11 @@ yyreduce:
stream << (yyvsp[-2]) << " >> " << (yyvsp[0]);
std::string text = stream.str();
context->diagnostics->report(pp::Diagnostics::PP_UNDEFINED_SHIFT,
- context->token->location,
- text.c_str());
+ context->token->location, text.c_str());
*(context->valid) = false;
}
(yyval) = static_cast<YYSTYPE>(0);
}
- else if ((yyvsp[-2]) < 0)
- {
- // Logical shift right.
- (yyval) = static_cast<YYSTYPE>(static_cast<UNSIGNED_TYPE>((yyvsp[-2])) >> (yyvsp[0]));
- }
else
{
(yyval) = (yyvsp[-2]) >> (yyvsp[0]);
@@ -1523,7 +1516,7 @@ yyreduce:
case 19:
{
- if ((yyvsp[0]) < 0 || (yyvsp[0]) > 31)
+ if ((yyvsp[0]) < 0)
{
if (!context->isIgnoringErrors())
{
@@ -1531,17 +1524,11 @@ yyreduce:
stream << (yyvsp[-2]) << " << " << (yyvsp[0]);
std::string text = stream.str();
context->diagnostics->report(pp::Diagnostics::PP_UNDEFINED_SHIFT,
- context->token->location,
- text.c_str());
+ context->token->location, text.c_str());
*(context->valid) = false;
}
(yyval) = static_cast<YYSTYPE>(0);
}
- else if ((yyvsp[-2]) < 0)
- {
- // Logical shift left.
- (yyval) = static_cast<YYSTYPE>(static_cast<UNSIGNED_TYPE>((yyvsp[-2])) << (yyvsp[0]));
- }
else
{
(yyval) = (yyvsp[-2]) << (yyvsp[0]);
@@ -1553,7 +1540,7 @@ yyreduce:
case 20:
{
- (yyval) = gl::WrappingDiff<YYSTYPE>((yyvsp[-2]), (yyvsp[0]));
+ (yyval) = (yyvsp[-2]) - (yyvsp[0]);
}
break;
@@ -1561,7 +1548,7 @@ yyreduce:
case 21:
{
- (yyval) = gl::WrappingSum<YYSTYPE>((yyvsp[-2]), (yyvsp[0]));
+ (yyval) = (yyvsp[-2]) + (yyvsp[0]);
}
break;
@@ -1583,12 +1570,6 @@ yyreduce:
}
(yyval) = static_cast<YYSTYPE>(0);
}
- else if (((yyvsp[-2]) == std::numeric_limits<YYSTYPE>::min()) && ((yyvsp[0]) == -1))
- {
- // Check for the special case where the minimum representable number is
- // divided by -1. If left alone this has undefined results.
- (yyval) = 0;
- }
else
{
(yyval) = (yyvsp[-2]) % (yyvsp[0]);
@@ -1614,13 +1595,6 @@ yyreduce:
}
(yyval) = static_cast<YYSTYPE>(0);
}
- else if (((yyvsp[-2]) == std::numeric_limits<YYSTYPE>::min()) && ((yyvsp[0]) == -1))
- {
- // Check for the special case where the minimum representable number is
- // divided by -1. If left alone this leads to integer overflow in C++, which
- // has undefined results.
- (yyval) = std::numeric_limits<YYSTYPE>::max();
- }
else
{
(yyval) = (yyvsp[-2]) / (yyvsp[0]);
@@ -1632,7 +1606,7 @@ yyreduce:
case 24:
{
- (yyval) = gl::WrappingMul((yyvsp[-2]), (yyvsp[0]));
+ (yyval) = (yyvsp[-2]) * (yyvsp[0]);
}
break;
@@ -1656,16 +1630,7 @@ yyreduce:
case 27:
{
- // Check for negation of minimum representable integer to prevent undefined signed int
- // overflow.
- if ((yyvsp[0]) == std::numeric_limits<YYSTYPE>::min())
- {
- (yyval) = std::numeric_limits<YYSTYPE>::min();
- }
- else
- {
- (yyval) = -(yyvsp[0]);
- }
+ (yyval) = - (yyvsp[0]);
}
break;
diff --git a/gfx/angle/src/compiler/preprocessor/ExpressionParser.h b/gfx/angle/src/compiler/preprocessor/ExpressionParser.h
index 0f2901b87..841c67b61 100755
--- a/gfx/angle/src/compiler/preprocessor/ExpressionParser.h
+++ b/gfx/angle/src/compiler/preprocessor/ExpressionParser.h
@@ -7,8 +7,8 @@
#ifndef COMPILER_PREPROCESSOR_EXPRESSIONPARSER_H_
#define COMPILER_PREPROCESSOR_EXPRESSIONPARSER_H_
-#include "common/angleutils.h"
-#include "compiler/preprocessor/DiagnosticsBase.h"
+#include "DiagnosticsBase.h"
+#include "pp_utils.h"
namespace pp
{
@@ -16,7 +16,7 @@ namespace pp
class Lexer;
struct Token;
-class ExpressionParser : angle::NonCopyable
+class ExpressionParser
{
public:
struct ErrorSettings
@@ -34,6 +34,8 @@ class ExpressionParser : angle::NonCopyable
bool *valid);
private:
+ PP_DISALLOW_COPY_AND_ASSIGN(ExpressionParser);
+
Lexer *mLexer;
Diagnostics *mDiagnostics;
};
diff --git a/gfx/angle/src/compiler/preprocessor/ExpressionParser.y b/gfx/angle/src/compiler/preprocessor/ExpressionParser.y
index 4dbc9e828..dc0080eac 100755
--- a/gfx/angle/src/compiler/preprocessor/ExpressionParser.y
+++ b/gfx/angle/src/compiler/preprocessor/ExpressionParser.y
@@ -41,15 +41,17 @@ WHICH GENERATES THE GLSL ES preprocessor expression parser.
#include <cassert>
#include <sstream>
-#include <stdint.h>
#include "DiagnosticsBase.h"
#include "Lexer.h"
#include "Token.h"
-#include "common/mathutil.h"
-typedef int32_t YYSTYPE;
-typedef uint32_t UNSIGNED_TYPE;
+#if defined(_MSC_VER)
+typedef __int64 YYSTYPE;
+#else
+#include <stdint.h>
+typedef intmax_t YYSTYPE;
+#endif // _MSC_VER
#define YYENABLE_NLS 0
#define YYLTYPE_IS_TRIVIAL 1
@@ -194,7 +196,7 @@ expression
$$ = $1 < $3;
}
| expression TOK_OP_RIGHT expression {
- if ($3 < 0 || $3 > 31)
+ if ($3 < 0)
{
if (!context->isIgnoringErrors())
{
@@ -208,18 +210,13 @@ expression
}
$$ = static_cast<YYSTYPE>(0);
}
- else if ($1 < 0)
- {
- // Logical shift right.
- $$ = static_cast<YYSTYPE>(static_cast<UNSIGNED_TYPE>($1) >> $3);
- }
else
{
$$ = $1 >> $3;
}
}
| expression TOK_OP_LEFT expression {
- if ($3 < 0 || $3 > 31)
+ if ($3 < 0)
{
if (!context->isIgnoringErrors())
{
@@ -233,21 +230,16 @@ expression
}
$$ = static_cast<YYSTYPE>(0);
}
- else if ($1 < 0)
- {
- // Logical shift left.
- $$ = static_cast<YYSTYPE>(static_cast<UNSIGNED_TYPE>($1) << $3);
- }
else
{
$$ = $1 << $3;
}
}
| expression '-' expression {
- $$ = gl::WrappingDiff<YYSTYPE>($1, $3);
+ $$ = $1 - $3;
}
| expression '+' expression {
- $$ = gl::WrappingSum<YYSTYPE>($1, $3);
+ $$ = $1 + $3;
}
| expression '%' expression {
if ($3 == 0)
@@ -264,12 +256,6 @@ expression
}
$$ = static_cast<YYSTYPE>(0);
}
- else if (($1 == std::numeric_limits<YYSTYPE>::min()) && ($3 == -1))
- {
- // Check for the special case where the minimum representable number is
- // divided by -1. If left alone this has undefined results.
- $$ = 0;
- }
else
{
$$ = $1 % $3;
@@ -290,20 +276,13 @@ expression
}
$$ = static_cast<YYSTYPE>(0);
}
- else if (($1 == std::numeric_limits<YYSTYPE>::min()) && ($3 == -1))
- {
- // Check for the special case where the minimum representable number is
- // divided by -1. If left alone this leads to integer overflow in C++, which
- // has undefined results.
- $$ = std::numeric_limits<YYSTYPE>::max();
- }
else
{
$$ = $1 / $3;
}
}
| expression '*' expression {
- $$ = gl::WrappingMul($1, $3);
+ $$ = $1 * $3;
}
| '!' expression %prec TOK_UNARY {
$$ = ! $2;
@@ -312,16 +291,7 @@ expression
$$ = ~ $2;
}
| '-' expression %prec TOK_UNARY {
- // Check for negation of minimum representable integer to prevent undefined signed int
- // overflow.
- if ($2 == std::numeric_limits<YYSTYPE>::min())
- {
- $$ = std::numeric_limits<YYSTYPE>::min();
- }
- else
- {
- $$ = -$2;
- }
+ $$ = - $2;
}
| '+' expression %prec TOK_UNARY {
$$ = + $2;
diff --git a/gfx/angle/src/compiler/preprocessor/Input.cpp b/gfx/angle/src/compiler/preprocessor/Input.cpp
index 8bce56ff2..5541d46f7 100755
--- a/gfx/angle/src/compiler/preprocessor/Input.cpp
+++ b/gfx/angle/src/compiler/preprocessor/Input.cpp
@@ -4,13 +4,12 @@
// found in the LICENSE file.
//
-#include "compiler/preprocessor/Input.h"
+#include "Input.h"
#include <algorithm>
+#include <cassert>
#include <cstring>
-#include "common/debug.h"
-
namespace pp
{
@@ -33,7 +32,7 @@ Input::Input(size_t count, const char *const string[], const int length[]) :
const char *Input::skipChar()
{
// This function should only be called when there is a character to skip.
- ASSERT(mReadLoc.cIndex < mLength[mReadLoc.sIndex]);
+ assert(mReadLoc.cIndex < mLength[mReadLoc.sIndex]);
++mReadLoc.cIndex;
if (mReadLoc.cIndex == mLength[mReadLoc.sIndex])
{
diff --git a/gfx/angle/src/compiler/preprocessor/Input.h b/gfx/angle/src/compiler/preprocessor/Input.h
index ecbb04962..a1de7ddd8 100755
--- a/gfx/angle/src/compiler/preprocessor/Input.h
+++ b/gfx/angle/src/compiler/preprocessor/Input.h
@@ -7,7 +7,7 @@
#ifndef COMPILER_PREPROCESSOR_INPUT_H_
#define COMPILER_PREPROCESSOR_INPUT_H_
-#include <cstddef>
+#include <stddef.h>
#include <vector>
namespace pp
diff --git a/gfx/angle/src/compiler/preprocessor/Lexer.cpp b/gfx/angle/src/compiler/preprocessor/Lexer.cpp
index 89cb3cf44..7c663ee76 100755
--- a/gfx/angle/src/compiler/preprocessor/Lexer.cpp
+++ b/gfx/angle/src/compiler/preprocessor/Lexer.cpp
@@ -4,7 +4,7 @@
// found in the LICENSE file.
//
-#include "compiler/preprocessor/Lexer.h"
+#include "Lexer.h"
namespace pp
{
diff --git a/gfx/angle/src/compiler/preprocessor/Lexer.h b/gfx/angle/src/compiler/preprocessor/Lexer.h
index 775bc0a20..990dc5e21 100755
--- a/gfx/angle/src/compiler/preprocessor/Lexer.h
+++ b/gfx/angle/src/compiler/preprocessor/Lexer.h
@@ -7,14 +7,12 @@
#ifndef COMPILER_PREPROCESSOR_LEXER_H_
#define COMPILER_PREPROCESSOR_LEXER_H_
-#include "common/angleutils.h"
-
namespace pp
{
struct Token;
-class Lexer : angle::NonCopyable
+class Lexer
{
public:
virtual ~Lexer();
diff --git a/gfx/angle/src/compiler/preprocessor/Macro.cpp b/gfx/angle/src/compiler/preprocessor/Macro.cpp
index f5c94399d..4c4d5fd2e 100755
--- a/gfx/angle/src/compiler/preprocessor/Macro.cpp
+++ b/gfx/angle/src/compiler/preprocessor/Macro.cpp
@@ -4,10 +4,11 @@
// found in the LICENSE file.
//
-#include "compiler/preprocessor/Macro.h"
+#include "Macro.h"
-#include "common/angleutils.h"
-#include "compiler/preprocessor/Token.h"
+#include <sstream>
+
+#include "Token.h"
namespace pp
{
@@ -22,9 +23,12 @@ bool Macro::equals(const Macro &other) const
void PredefineMacro(MacroSet *macroSet, const char *name, int value)
{
+ std::ostringstream stream;
+ stream << value;
+
Token token;
token.type = Token::CONST_INT;
- token.text = ToString(value);
+ token.text = stream.str();
Macro macro;
macro.predefined = true;
diff --git a/gfx/angle/src/compiler/preprocessor/Macro.h b/gfx/angle/src/compiler/preprocessor/Macro.h
index 557df163c..31ee22c26 100755
--- a/gfx/angle/src/compiler/preprocessor/Macro.h
+++ b/gfx/angle/src/compiler/preprocessor/Macro.h
@@ -26,12 +26,16 @@ struct Macro
typedef std::vector<std::string> Parameters;
typedef std::vector<Token> Replacements;
- Macro() : predefined(false), disabled(false), expansionCount(0), type(kTypeObj) {}
+ Macro()
+ : predefined(false),
+ disabled(false),
+ type(kTypeObj)
+ {
+ }
bool equals(const Macro &other) const;
bool predefined;
mutable bool disabled;
- mutable int expansionCount;
Type type;
std::string name;
diff --git a/gfx/angle/src/compiler/preprocessor/MacroExpander.cpp b/gfx/angle/src/compiler/preprocessor/MacroExpander.cpp
index 2f854f5a6..3c0423e72 100755
--- a/gfx/angle/src/compiler/preprocessor/MacroExpander.cpp
+++ b/gfx/angle/src/compiler/preprocessor/MacroExpander.cpp
@@ -4,22 +4,17 @@
// found in the LICENSE file.
//
-#include "compiler/preprocessor/MacroExpander.h"
+#include "MacroExpander.h"
#include <algorithm>
+#include <sstream>
-#include "common/debug.h"
-#include "compiler/preprocessor/DiagnosticsBase.h"
-#include "compiler/preprocessor/Token.h"
+#include "DiagnosticsBase.h"
+#include "Token.h"
namespace pp
{
-namespace
-{
-
-const size_t kMaxContextTokens = 10000;
-
class TokenLexer : public Lexer
{
public:
@@ -45,52 +40,22 @@ class TokenLexer : public Lexer
}
private:
+ PP_DISALLOW_COPY_AND_ASSIGN(TokenLexer);
+
TokenVector mTokens;
TokenVector::const_iterator mIter;
};
-} // anonymous namespace
-
-class MacroExpander::ScopedMacroReenabler final : angle::NonCopyable
-{
- public:
- ScopedMacroReenabler(MacroExpander *expander);
- ~ScopedMacroReenabler();
-
- private:
- MacroExpander *mExpander;
-};
-
-MacroExpander::ScopedMacroReenabler::ScopedMacroReenabler(MacroExpander *expander)
- : mExpander(expander)
-{
- mExpander->mDeferReenablingMacros = true;
-}
-
-MacroExpander::ScopedMacroReenabler::~ScopedMacroReenabler()
-{
- mExpander->mDeferReenablingMacros = false;
- for (auto *macro : mExpander->mMacrosToReenable)
- {
- macro->disabled = false;
- }
- mExpander->mMacrosToReenable.clear();
-}
-
MacroExpander::MacroExpander(Lexer *lexer, MacroSet *macroSet, Diagnostics *diagnostics)
- : mLexer(lexer),
- mMacroSet(macroSet),
- mDiagnostics(diagnostics),
- mTotalTokensInContexts(0),
- mDeferReenablingMacros(false)
+ : mLexer(lexer), mMacroSet(macroSet), mDiagnostics(diagnostics)
{
}
MacroExpander::~MacroExpander()
{
- for (MacroContext *context : mContextStack)
+ for (std::size_t i = 0; i < mContextStack.size(); ++i)
{
- delete context;
+ delete mContextStack[i];
}
}
@@ -117,15 +82,10 @@ void MacroExpander::lex(Token *token)
token->setExpansionDisabled(true);
break;
}
-
- // Bump the expansion count before peeking if the next token is a '('
- // otherwise there could be a #undef of the macro before the next token.
- macro.expansionCount++;
if ((macro.type == Macro::kTypeFunc) && !isNextTokenLeftParen())
{
// If the token immediately after the macro name is not a '(',
// this macro should not be expanded.
- macro.expansionCount--;
break;
}
@@ -154,7 +114,6 @@ void MacroExpander::getToken(Token *token)
}
else
{
- ASSERT(mTotalTokensInContexts == 0);
mLexer->lex(token);
}
}
@@ -165,11 +124,11 @@ void MacroExpander::ungetToken(const Token &token)
{
MacroContext *context = mContextStack.back();
context->unget();
- ASSERT(context->replacements[context->index] == token);
+ assert(context->replacements[context->index] == token);
}
else
{
- ASSERT(!mReserveToken.get());
+ assert(!mReserveToken.get());
mReserveToken.reset(new Token(token));
}
}
@@ -187,10 +146,10 @@ bool MacroExpander::isNextTokenLeftParen()
bool MacroExpander::pushMacro(const Macro &macro, const Token &identifier)
{
- ASSERT(!macro.disabled);
- ASSERT(!identifier.expansionDisabled());
- ASSERT(identifier.type == Token::IDENTIFIER);
- ASSERT(identifier.text == macro.name);
+ assert(!macro.disabled);
+ assert(!identifier.expansionDisabled());
+ assert(identifier.type == Token::IDENTIFIER);
+ assert(identifier.text == macro.name);
std::vector<Token> replacements;
if (!expandMacro(macro, identifier, &replacements))
@@ -203,30 +162,19 @@ bool MacroExpander::pushMacro(const Macro &macro, const Token &identifier)
context->macro = &macro;
context->replacements.swap(replacements);
mContextStack.push_back(context);
- mTotalTokensInContexts += context->replacements.size();
return true;
}
void MacroExpander::popMacro()
{
- ASSERT(!mContextStack.empty());
+ assert(!mContextStack.empty());
MacroContext *context = mContextStack.back();
mContextStack.pop_back();
- ASSERT(context->empty());
- ASSERT(context->macro->disabled);
- ASSERT(context->macro->expansionCount > 0);
- if (mDeferReenablingMacros)
- {
- mMacrosToReenable.push_back(context->macro);
- }
- else
- {
- context->macro->disabled = false;
- }
- context->macro->expansionCount--;
- mTotalTokensInContexts -= context->replacements.size();
+ assert(context->empty());
+ assert(context->macro->disabled);
+ context->macro->disabled = false;
delete context;
}
@@ -251,21 +199,25 @@ bool MacroExpander::expandMacro(const Macro &macro,
const char kLine[] = "__LINE__";
const char kFile[] = "__FILE__";
- ASSERT(replacements->size() == 1);
+ assert(replacements->size() == 1);
Token& repl = replacements->front();
if (macro.name == kLine)
{
- repl.text = ToString(identifier.location.line);
+ std::ostringstream stream;
+ stream << identifier.location.line;
+ repl.text = stream.str();
}
else if (macro.name == kFile)
{
- repl.text = ToString(identifier.location.file);
+ std::ostringstream stream;
+ stream << identifier.location.file;
+ repl.text = stream.str();
}
}
}
else
{
- ASSERT(macro.type == Macro::kTypeFunc);
+ assert(macro.type == Macro::kTypeFunc);
std::vector<MacroArg> args;
args.reserve(macro.parameters.size());
if (!collectMacroArgs(macro, identifier, &args, &replacementLocation))
@@ -296,17 +248,10 @@ bool MacroExpander::collectMacroArgs(const Macro &macro,
{
Token token;
getToken(&token);
- ASSERT(token.type == '(');
+ assert(token.type == '(');
args->push_back(MacroArg());
-
- // Defer reenabling macros until args collection is finished to avoid the possibility of
- // infinite recursion. Otherwise infinite recursion might happen when expanding the args after
- // macros have been popped from the context stack when parsing the args.
- ScopedMacroReenabler deferReenablingMacros(this);
-
- int openParens = 1;
- while (openParens != 0)
+ for (int openParens = 1; openParens != 0; )
{
getToken(&token);
@@ -372,9 +317,9 @@ bool MacroExpander::collectMacroArgs(const Macro &macro,
// Pre-expand each argument before substitution.
// This step expands each argument individually before they are
// inserted into the macro body.
- size_t numTokens = 0;
- for (auto &arg : *args)
+ for (std::size_t i = 0; i < args->size(); ++i)
{
+ MacroArg &arg = args->at(i);
TokenLexer lexer(&arg);
MacroExpander expander(&lexer, mMacroSet, mDiagnostics);
@@ -384,12 +329,6 @@ bool MacroExpander::collectMacroArgs(const Macro &macro,
{
arg.push_back(token);
expander.lex(&token);
- numTokens++;
- if (numTokens + mTotalTokensInContexts > kMaxContextTokens)
- {
- mDiagnostics->report(Diagnostics::PP_OUT_OF_MEMORY, token.location, token.text);
- return false;
- }
}
}
return true;
@@ -401,14 +340,6 @@ void MacroExpander::replaceMacroParams(const Macro &macro,
{
for (std::size_t i = 0; i < macro.replacements.size(); ++i)
{
- if (!replacements->empty() &&
- replacements->size() + mTotalTokensInContexts > kMaxContextTokens)
- {
- const Token &token = replacements->back();
- mDiagnostics->report(Diagnostics::PP_OUT_OF_MEMORY, token.location, token.text);
- return;
- }
-
const Token &repl = macro.replacements[i];
if (repl.type != Token::IDENTIFIER)
{
@@ -441,25 +372,5 @@ void MacroExpander::replaceMacroParams(const Macro &macro,
}
}
-MacroExpander::MacroContext::MacroContext() : macro(0), index(0)
-{
-}
-
-bool MacroExpander::MacroContext::empty() const
-{
- return index == replacements.size();
-}
-
-const Token &MacroExpander::MacroContext::get()
-{
- return replacements[index++];
-}
-
-void MacroExpander::MacroContext::unget()
-{
- ASSERT(index > 0);
- --index;
-}
-
} // namespace pp
diff --git a/gfx/angle/src/compiler/preprocessor/MacroExpander.h b/gfx/angle/src/compiler/preprocessor/MacroExpander.h
index 3a8450f5e..dbf980308 100755
--- a/gfx/angle/src/compiler/preprocessor/MacroExpander.h
+++ b/gfx/angle/src/compiler/preprocessor/MacroExpander.h
@@ -7,11 +7,13 @@
#ifndef COMPILER_PREPROCESSOR_MACROEXPANDER_H_
#define COMPILER_PREPROCESSOR_MACROEXPANDER_H_
+#include <cassert>
#include <memory>
#include <vector>
-#include "compiler/preprocessor/Lexer.h"
-#include "compiler/preprocessor/Macro.h"
+#include "Lexer.h"
+#include "Macro.h"
+#include "pp_utils.h"
namespace pp
{
@@ -28,6 +30,8 @@ class MacroExpander : public Lexer
void lex(Token *token) override;
private:
+ PP_DISALLOW_COPY_AND_ASSIGN(MacroExpander);
+
void getToken(Token *token);
void ungetToken(const Token &token);
bool isNextTokenLeftParen();
@@ -50,14 +54,28 @@ class MacroExpander : public Lexer
struct MacroContext
{
- MacroContext();
- bool empty() const;
- const Token &get();
- void unget();
-
const Macro *macro;
std::size_t index;
std::vector<Token> replacements;
+
+ MacroContext()
+ : macro(0),
+ index(0)
+ {
+ }
+ bool empty() const
+ {
+ return index == replacements.size();
+ }
+ const Token &get()
+ {
+ return replacements[index++];
+ }
+ void unget()
+ {
+ assert(index > 0);
+ --index;
+ }
};
Lexer *mLexer;
@@ -66,12 +84,6 @@ class MacroExpander : public Lexer
std::unique_ptr<Token> mReserveToken;
std::vector<MacroContext *> mContextStack;
- size_t mTotalTokensInContexts;
-
- bool mDeferReenablingMacros;
- std::vector<const Macro *> mMacrosToReenable;
-
- class ScopedMacroReenabler;
};
} // namespace pp
diff --git a/gfx/angle/src/compiler/preprocessor/Preprocessor.cpp b/gfx/angle/src/compiler/preprocessor/Preprocessor.cpp
index 1709d6673..2fa87fe74 100755
--- a/gfx/angle/src/compiler/preprocessor/Preprocessor.cpp
+++ b/gfx/angle/src/compiler/preprocessor/Preprocessor.cpp
@@ -4,15 +4,16 @@
// found in the LICENSE file.
//
-#include "compiler/preprocessor/Preprocessor.h"
+#include "Preprocessor.h"
-#include "common/debug.h"
-#include "compiler/preprocessor/DiagnosticsBase.h"
-#include "compiler/preprocessor/DirectiveParser.h"
-#include "compiler/preprocessor/Macro.h"
-#include "compiler/preprocessor/MacroExpander.h"
-#include "compiler/preprocessor/Token.h"
-#include "compiler/preprocessor/Tokenizer.h"
+#include <cassert>
+
+#include "DiagnosticsBase.h"
+#include "DirectiveParser.h"
+#include "Macro.h"
+#include "MacroExpander.h"
+#include "Token.h"
+#include "Tokenizer.h"
namespace pp
{
@@ -77,8 +78,8 @@ void Preprocessor::lex(Token *token)
// Convert preprocessing tokens to compiler tokens or report
// diagnostics.
case Token::PP_HASH:
- UNREACHABLE();
- break;
+ assert(false);
+ break;
case Token::PP_NUMBER:
mImpl->diagnostics->report(Diagnostics::PP_INVALID_NUMBER,
token->location, token->text);
diff --git a/gfx/angle/src/compiler/preprocessor/Preprocessor.h b/gfx/angle/src/compiler/preprocessor/Preprocessor.h
index cd699786f..fe25daa12 100755
--- a/gfx/angle/src/compiler/preprocessor/Preprocessor.h
+++ b/gfx/angle/src/compiler/preprocessor/Preprocessor.h
@@ -7,9 +7,9 @@
#ifndef COMPILER_PREPROCESSOR_PREPROCESSOR_H_
#define COMPILER_PREPROCESSOR_PREPROCESSOR_H_
-#include <cstddef>
+#include <stddef.h>
-#include "common/angleutils.h"
+#include "pp_utils.h"
namespace pp
{
@@ -19,7 +19,7 @@ class DirectiveHandler;
struct PreprocessorImpl;
struct Token;
-class Preprocessor : angle::NonCopyable
+class Preprocessor
{
public:
Preprocessor(Diagnostics *diagnostics, DirectiveHandler *directiveHandler);
@@ -44,6 +44,8 @@ class Preprocessor : angle::NonCopyable
void setMaxTokenSize(size_t maxTokenSize);
private:
+ PP_DISALLOW_COPY_AND_ASSIGN(Preprocessor);
+
PreprocessorImpl *mImpl;
};
diff --git a/gfx/angle/src/compiler/preprocessor/Token.cpp b/gfx/angle/src/compiler/preprocessor/Token.cpp
index 41610a402..d10265474 100755
--- a/gfx/angle/src/compiler/preprocessor/Token.cpp
+++ b/gfx/angle/src/compiler/preprocessor/Token.cpp
@@ -4,10 +4,11 @@
// found in the LICENSE file.
//
-#include "compiler/preprocessor/Token.h"
+#include "Token.h"
-#include "common/debug.h"
-#include "compiler/preprocessor/numeric_lex.h"
+#include <cassert>
+
+#include "numeric_lex.h"
namespace pp
{
@@ -54,19 +55,19 @@ void Token::setExpansionDisabled(bool disable)
bool Token::iValue(int *value) const
{
- ASSERT(type == CONST_INT);
+ assert(type == CONST_INT);
return numeric_lex_int(text, value);
}
bool Token::uValue(unsigned int *value) const
{
- ASSERT(type == CONST_INT);
+ assert(type == CONST_INT);
return numeric_lex_int(text, value);
}
bool Token::fValue(float *value) const
{
- ASSERT(type == CONST_FLOAT);
+ assert(type == CONST_FLOAT);
return numeric_lex_float(text, value);
}
diff --git a/gfx/angle/src/compiler/preprocessor/Token.h b/gfx/angle/src/compiler/preprocessor/Token.h
index 716503b32..347c47e30 100755
--- a/gfx/angle/src/compiler/preprocessor/Token.h
+++ b/gfx/angle/src/compiler/preprocessor/Token.h
@@ -10,7 +10,7 @@
#include <ostream>
#include <string>
-#include "compiler/preprocessor/SourceLocation.h"
+#include "SourceLocation.h"
namespace pp
{
@@ -113,7 +113,7 @@ inline bool operator!=(const Token &lhs, const Token &rhs)
return !lhs.equals(rhs);
}
-std::ostream &operator<<(std::ostream &out, const Token &token);
+extern std::ostream &operator<<(std::ostream &out, const Token &token);
} // namepsace pp
diff --git a/gfx/angle/src/compiler/preprocessor/Tokenizer.cpp b/gfx/angle/src/compiler/preprocessor/Tokenizer.cpp
index 40e910e22..eb6156f47 100755
--- a/gfx/angle/src/compiler/preprocessor/Tokenizer.cpp
+++ b/gfx/angle/src/compiler/preprocessor/Tokenizer.cpp
@@ -9,96 +9,20 @@
+#line 13 "./Tokenizer.cpp"
+
#define YY_INT_ALIGNED short int
/* A lexical scanner generated by flex */
-
-
-
-
-
-
-
-
-
-
#define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2
-#define YY_FLEX_MINOR_VERSION 6
-#define YY_FLEX_SUBMINOR_VERSION 1
+#define YY_FLEX_MINOR_VERSION 5
+#define YY_FLEX_SUBMINOR_VERSION 39
#if YY_FLEX_SUBMINOR_VERSION > 0
#define FLEX_BETA
#endif
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
/* First, we deal with platform-specific or compiler-specific issues. */
/* begin standard C headers. */
@@ -132,6 +56,7 @@ typedef int16_t flex_int16_t;
typedef uint16_t flex_uint16_t;
typedef int32_t flex_int32_t;
typedef uint32_t flex_uint32_t;
+typedef uint64_t flex_uint64_t;
#else
typedef signed char flex_int8_t;
typedef short int flex_int16_t;
@@ -173,27 +98,30 @@ typedef unsigned int flex_uint32_t;
#endif /* ! FLEXINT_H */
+#ifdef __cplusplus
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
-/* TODO: this is always defined, so inline it */
-#define yyconst const
-
-#if defined(__GNUC__) && __GNUC__ >= 3
-#define yynoreturn __attribute__((__noreturn__))
-#else
-#define yynoreturn
-#endif
+#else /* ! __cplusplus */
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
-
+#define YY_USE_CONST
+#endif /* defined (__STDC__) */
+#endif /* ! __cplusplus */
+#ifdef YY_USE_CONST
+#define yyconst const
+#else
+#define yyconst
+#endif
/* Returned upon end-of-file. */
#define YY_NULL 0
-
-
/* Promotes a possibly negative, possibly signed char to an unsigned
* integer for use as an array index. If the signed char is negative,
* we want to instead treat it as an 8-bit unsigned char, hence the
@@ -201,34 +129,12 @@ typedef unsigned int flex_uint32_t;
*/
#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
-
-
-
-
/* An opaque pointer. */
#ifndef YY_TYPEDEF_YY_SCANNER_T
#define YY_TYPEDEF_YY_SCANNER_T
typedef void* yyscan_t;
#endif
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
/* For convenience, these vars (plus the bison vars far below)
are macros in the reentrant scanner. */
#define yyin yyg->yyin_r
@@ -240,29 +146,12 @@ typedef void* yyscan_t;
#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column)
#define yy_flex_debug yyg->yy_flex_debug_r
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
/* Enter a start condition. This macro really ought to take a parameter,
* but we do it the disgusting crufty way forced on us by the ()-less
* definition of BEGIN.
*/
#define BEGIN yyg->yy_start = 1 + 2 *
-
-
/* Translate the current start state into a value that can be later handed
* to BEGIN to return to the state. The YYSTATE alias is for lex
* compatibility.
@@ -270,41 +159,23 @@ typedef void* yyscan_t;
#define YY_START ((yyg->yy_start - 1) / 2)
#define YYSTATE YY_START
-
-
/* Action number for EOF rule of a given start state. */
#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
-
-
/* Special action meaning "start processing a new file". */
#define YY_NEW_FILE pprestart(yyin ,yyscanner )
-
-
#define YY_END_OF_BUFFER_CHAR 0
-
/* Size of default input buffer. */
#ifndef YY_BUF_SIZE
-#ifdef __ia64__
-/* On IA-64, the buffer size is 16k, not 8k.
- * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
- * Ditto for the __ia64__ case accordingly.
- */
-#define YY_BUF_SIZE 32768
-#else
#define YY_BUF_SIZE 16384
-#endif /* __ia64__ */
#endif
-
/* The state buf must be large enough to hold one state per character in the main buffer.
*/
#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
-
-
#ifndef YY_TYPEDEF_YY_BUFFER_STATE
#define YY_TYPEDEF_YY_BUFFER_STATE
typedef struct yy_buffer_state *YY_BUFFER_STATE;
@@ -315,22 +186,18 @@ typedef struct yy_buffer_state *YY_BUFFER_STATE;
typedef size_t yy_size_t;
#endif
-
-
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
+#endif
#define EOB_ACT_CONTINUE_SCAN 0
#define EOB_ACT_END_OF_FILE 1
#define EOB_ACT_LAST_MATCH 2
-
-
-
#define YY_LESS_LINENO(n)
#define YY_LINENO_REWIND_TO(ptr)
-
-
-
/* Return all but the first "n" matched characters back to the input stream. */
#define yyless(n) \
do \
@@ -345,31 +212,26 @@ typedef size_t yy_size_t;
} \
while ( 0 )
-
-
#define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner )
-
#ifndef YY_STRUCT_YY_BUFFER_STATE
#define YY_STRUCT_YY_BUFFER_STATE
struct yy_buffer_state
{
FILE *yy_input_file;
-
-
char *yy_ch_buf; /* input buffer */
char *yy_buf_pos; /* current position in input buffer */
/* Size of input buffer in bytes, not including room for EOB
* characters.
*/
- int yy_buf_size;
+ yy_size_t yy_buf_size;
/* Number of characters read into yy_ch_buf, not including EOB
* characters.
*/
- int yy_n_chars;
+ yy_size_t yy_n_chars;
/* Whether we "own" the buffer - i.e., we know we created it,
* and can realloc() it to grow it, and should free() it to
@@ -393,7 +255,6 @@ struct yy_buffer_state
int yy_bs_lineno; /**< The line count. */
int yy_bs_column; /**< The column count. */
-
/* Whether to try to fill the input buffer when we reach the
* end of it.
*/
@@ -418,10 +279,6 @@ struct yy_buffer_state
};
#endif /* !YY_STRUCT_YY_BUFFER_STATE */
-
-
-
-
/* We provide macros for accessing buffer states in case in the
* future we want to put the buffer states in a more general
* "scanner state".
@@ -432,18 +289,11 @@ struct yy_buffer_state
? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \
: NULL)
-
-
/* Same as previous macro, but useful when we know that the buffer stack is not
* NULL or when we need an lvalue. For internal use only.
*/
#define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top]
-
-
-
-
-
void pprestart (FILE *input_file ,yyscan_t yyscanner );
void pp_switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
YY_BUFFER_STATE pp_create_buffer (FILE *file,int size ,yyscan_t yyscanner );
@@ -452,30 +302,22 @@ void pp_flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
void pppush_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
void pppop_buffer_state (yyscan_t yyscanner );
-
static void ppensure_buffer_stack (yyscan_t yyscanner );
static void pp_load_buffer_state (yyscan_t yyscanner );
static void pp_init_buffer (YY_BUFFER_STATE b,FILE *file ,yyscan_t yyscanner );
-
-
#define YY_FLUSH_BUFFER pp_flush_buffer(YY_CURRENT_BUFFER ,yyscanner)
-
YY_BUFFER_STATE pp_scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner );
YY_BUFFER_STATE pp_scan_string (yyconst char *yy_str ,yyscan_t yyscanner );
-YY_BUFFER_STATE pp_scan_bytes (yyconst char *bytes,int len ,yyscan_t yyscanner );
-
+YY_BUFFER_STATE pp_scan_bytes (yyconst char *bytes,yy_size_t len ,yyscan_t yyscanner );
void *ppalloc (yy_size_t ,yyscan_t yyscanner );
void *pprealloc (void *,yy_size_t ,yyscan_t yyscanner );
void ppfree (void * ,yyscan_t yyscanner );
-
#define yy_new_buffer pp_create_buffer
-
-
#define yy_set_interactive(is_interactive) \
{ \
if ( ! YY_CURRENT_BUFFER ){ \
@@ -486,8 +328,6 @@ void ppfree (void * ,yyscan_t yyscanner );
YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
}
-
-
#define yy_set_bol(at_bol) \
{ \
if ( ! YY_CURRENT_BUFFER ){\
@@ -498,50 +338,34 @@ void ppfree (void * ,yyscan_t yyscanner );
YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
}
-
-
#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
-
/* Begin user sect3 */
-#define ppwrap(yyscanner) (/*CONSTCOND*/1)
+#define ppwrap(yyscanner) 1
#define YY_SKIP_YYWRAP
typedef unsigned char YY_CHAR;
-
-
-
typedef int yy_state_type;
#define yytext_ptr yytext_r
-
-
-
-
-
static yy_state_type yy_get_previous_state (yyscan_t yyscanner );
static yy_state_type yy_try_NUL_trans (yy_state_type current_state ,yyscan_t yyscanner);
static int yy_get_next_buffer (yyscan_t yyscanner );
-static void yynoreturn yy_fatal_error (yyconst char* msg ,yyscan_t yyscanner );
-
-
-
+static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
/* Done after the current pattern has been matched and before the
* corresponding action - sets up yytext.
*/
#define YY_DO_BEFORE_ACTION \
yyg->yytext_ptr = yy_bp; \
- yyleng = (int) (yy_cp - yy_bp); \
+ yyleng = (yy_size_t) (yy_cp - yy_bp); \
yyg->yy_hold_char = *yy_cp; \
*yy_cp = '\0'; \
yyg->yy_c_buf_p = yy_cp;
-
-
#define YY_NUM_RULES 38
#define YY_END_OF_BUFFER 39
/* This struct is not used in this scanner,
@@ -566,7 +390,7 @@ static yyconst flex_int16_t yy_accept[98] =
} ;
-static yyconst YY_CHAR yy_ec[256] =
+static yyconst flex_int32_t yy_ec[256] =
{ 0,
1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
2, 2, 4, 1, 1, 1, 1, 1, 1, 1,
@@ -598,14 +422,14 @@ static yyconst YY_CHAR yy_ec[256] =
1, 1, 1, 1, 1
} ;
-static yyconst YY_CHAR yy_meta[30] =
+static yyconst flex_int32_t yy_meta[30] =
{ 0,
1, 1, 2, 2, 1, 1, 1, 1, 1, 3,
1, 1, 4, 1, 5, 5, 5, 1, 1, 1,
5, 5, 5, 5, 5, 5, 1, 1, 1
} ;
-static yyconst flex_uint16_t yy_base[103] =
+static yyconst flex_int16_t yy_base[103] =
{ 0,
0, 0, 27, 29, 137, 194, 133, 194, 117, 100,
194, 98, 26, 194, 94, 24, 28, 33, 32, 39,
@@ -637,7 +461,7 @@ static yyconst flex_int16_t yy_def[103] =
97, 97
} ;
-static yyconst flex_uint16_t yy_nxt[224] =
+static yyconst flex_int16_t yy_nxt[224] =
{ 0,
6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 21, 22, 23, 24,
@@ -720,10 +544,10 @@ IF YOU MODIFY THIS FILE YOU ALSO NEED TO RUN generate_parser.sh.
#pragma warning(disable: 4005)
#endif
-#include "compiler/preprocessor/Tokenizer.h"
+#include "Tokenizer.h"
-#include "compiler/preprocessor/DiagnosticsBase.h"
-#include "compiler/preprocessor/Token.h"
+#include "DiagnosticsBase.h"
+#include "Token.h"
#if defined(__GNUC__)
// Triggered by the auto-generated yy_fatal_error function.
@@ -772,23 +596,11 @@ typedef pp::SourceLocation YYLTYPE;
#define YY_INPUT(buf, result, maxSize) \
result = yyextra->input.read(buf, maxSize, &yylineno);
-
-
-
-
#define INITIAL 0
#define COMMENT 1
-
-
-
-
-
#define YY_EXTRA_TYPE pp::Tokenizer::Context*
-
-
-
/* Holds the entire state of the reentrant scanner. */
struct yyguts_t
{
@@ -802,8 +614,8 @@ struct yyguts_t
size_t yy_buffer_stack_max; /**< capacity of stack. */
YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */
char yy_hold_char;
- int yy_n_chars;
- int yyleng_r;
+ yy_size_t yy_n_chars;
+ yy_size_t yyleng_r;
char *yy_c_buf_p;
int yy_init;
int yy_start;
@@ -817,132 +629,69 @@ struct yyguts_t
int yylineno_r;
int yy_flex_debug_r;
-
-
-
char *yytext_r;
int yy_more_flag;
int yy_more_len;
-
-
YYSTYPE * yylval_r;
-
-
YYLTYPE * yylloc_r;
-
}; /* end struct yyguts_t */
-
-
-
static int yy_init_globals (yyscan_t yyscanner );
-
-
-
-
/* This must go here because YYSTYPE and YYLTYPE are included
* from bison output in section 1.*/
# define yylval yyg->yylval_r
-
-
# define yylloc yyg->yylloc_r
-
-
int pplex_init (yyscan_t* scanner);
int pplex_init_extra (YY_EXTRA_TYPE user_defined,yyscan_t* scanner);
-
-
/* Accessor methods to globals.
These are made visible to non-reentrant scanners for convenience. */
-
int pplex_destroy (yyscan_t yyscanner );
-
-
int ppget_debug (yyscan_t yyscanner );
-
-
void ppset_debug (int debug_flag ,yyscan_t yyscanner );
-
-
YY_EXTRA_TYPE ppget_extra (yyscan_t yyscanner );
-
-
void ppset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner );
-
-
FILE *ppget_in (yyscan_t yyscanner );
-
-
-void ppset_in (FILE * _in_str ,yyscan_t yyscanner );
-
-
+void ppset_in (FILE * in_str ,yyscan_t yyscanner );
FILE *ppget_out (yyscan_t yyscanner );
+void ppset_out (FILE * out_str ,yyscan_t yyscanner );
-
-void ppset_out (FILE * _out_str ,yyscan_t yyscanner );
-
-
-
- int ppget_leng (yyscan_t yyscanner );
-
-
+yy_size_t ppget_leng (yyscan_t yyscanner );
char *ppget_text (yyscan_t yyscanner );
-
-
int ppget_lineno (yyscan_t yyscanner );
-
-
-void ppset_lineno (int _line_number ,yyscan_t yyscanner );
-
-
-
+void ppset_lineno (int line_number ,yyscan_t yyscanner );
int ppget_column (yyscan_t yyscanner );
-
-
-
-
-void ppset_column (int _column_no ,yyscan_t yyscanner );
-
-
-
+void ppset_column (int column_no ,yyscan_t yyscanner );
YYSTYPE * ppget_lval (yyscan_t yyscanner );
-
void ppset_lval (YYSTYPE * yylval_param ,yyscan_t yyscanner );
-
-
YYLTYPE *ppget_lloc (yyscan_t yyscanner );
-
-
void ppset_lloc (YYLTYPE * yylloc_param ,yyscan_t yyscanner );
-
-
/* Macros after this point can all be overridden by user definitions in
* section 1.
*/
@@ -955,12 +704,6 @@ extern int ppwrap (yyscan_t yyscanner );
#endif
#endif
-
-#ifndef YY_NO_UNPUT
-
-#endif
-
-
#ifndef yytext_ptr
static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner);
#endif
@@ -979,34 +722,19 @@ static int input (yyscan_t yyscanner );
#endif
-
-
-
-
-
-
-
/* Amount of stuff to slurp up with each read. */
#ifndef YY_READ_BUF_SIZE
-#ifdef __ia64__
-/* On IA-64, the buffer size is 16k, not 8k */
-#define YY_READ_BUF_SIZE 16384
-#else
#define YY_READ_BUF_SIZE 8192
-#endif /* __ia64__ */
#endif
-
/* Copy whatever the last rule matched to the standard output. */
#ifndef ECHO
/* This used to be an fputs(), but since the string might contain NUL's,
* we now use fwrite().
*/
-#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0)
+#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0)
#endif
-
-
/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
* is returned in "result".
*/
@@ -1028,7 +756,7 @@ static int input (yyscan_t yyscanner );
else \
{ \
errno=0; \
- while ( (result = (int) fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
+ while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
{ \
if( errno != EINTR) \
{ \
@@ -1043,8 +771,6 @@ static int input (yyscan_t yyscanner );
#endif
-
-
/* No semi-colon after return; correct usage is to write "yyterminate();" -
* we don't want an extra ';' after the "return" because that will cause
* some compilers to complain about unreachable statements.
@@ -1053,48 +779,24 @@ static int input (yyscan_t yyscanner );
#define yyterminate() return YY_NULL
#endif
-
/* Number of entries by which start-condition stack grows. */
#ifndef YY_START_STACK_INCR
#define YY_START_STACK_INCR 25
#endif
-
/* Report a fatal error. */
#ifndef YY_FATAL_ERROR
#define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner)
#endif
-
-
-
-
/* end tables serialization structures and prototypes */
-
-
/* Default declaration of generated scanner - a define so the user can
* easily add parameters.
*/
#ifndef YY_DECL
#define YY_DECL_IS_OURS 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
extern int pplex \
(YYSTYPE * yylval_param,YYLTYPE * yylloc_param ,yyscan_t yyscanner);
@@ -1102,7 +804,6 @@ extern int pplex \
(YYSTYPE * yylval_param, YYLTYPE * yylloc_param , yyscan_t yyscanner)
#endif /* !YY_DECL */
-
/* Code executed at the beginning of each rule, after yytext and yyleng
* have been set up.
*/
@@ -1110,39 +811,27 @@ extern int pplex \
#define YY_USER_ACTION
#endif
-
-
/* Code executed at the end of each rule. */
#ifndef YY_BREAK
-#define YY_BREAK /*LINTED*/break;
+#define YY_BREAK break;
#endif
-
-
#define YY_RULE_SETUP \
YY_USER_ACTION
-
-
/** The main scanner function which does all the work.
*/
YY_DECL
{
- yy_state_type yy_current_state;
- char *yy_cp, *yy_bp;
- int yy_act;
+ register yy_state_type yy_current_state;
+ register char *yy_cp, *yy_bp;
+ register int yy_act;
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-
-
-
yylval = yylval_param;
-
-
yylloc = yylloc_param;
-
if ( !yyg->yy_init )
{
yyg->yy_init = 1;
@@ -1151,8 +840,6 @@ YY_DECL
YY_USER_INIT;
#endif
-
-
if ( ! yyg->yy_start )
yyg->yy_start = 1; /* first start state */
@@ -1173,10 +860,9 @@ YY_DECL
{
-
/* Line comment */
- while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */
+ while ( 1 ) /* loops until end-of-file is reached */
{
yy_cp = yyg->yy_c_buf_p;
@@ -1192,7 +878,7 @@ YY_DECL
yy_match:
do
{
- YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
+ register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
if ( yy_accept[yy_current_state] )
{
yyg->yy_last_accepting_state = yy_current_state;
@@ -1204,7 +890,7 @@ yy_match:
if ( yy_current_state >= 98 )
yy_c = yy_meta[(unsigned int) yy_c];
}
- yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
++yy_cp;
}
while ( yy_current_state != 97 );
@@ -1216,11 +902,8 @@ yy_find_action:
YY_DO_BEFORE_ACTION;
-
-
do_action: /* This label is used only to access EOF actions. */
-
switch ( yy_act )
{ /* beginning of action switch */
case 0: /* must back up */
@@ -1643,11 +1326,6 @@ ECHO;
} /* end of user's declarations */
} /* end of pplex */
-
-
-
-
-
/* yy_get_next_buffer - try to read in a new buffer
*
* Returns a code representing an action:
@@ -1658,9 +1336,9 @@ ECHO;
static int yy_get_next_buffer (yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
- char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
- char *source = yyg->yytext_ptr;
- yy_size_t number_to_move, i;
+ register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+ register char *source = yyg->yytext_ptr;
+ register int number_to_move, i;
int ret_val;
if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] )
@@ -1689,7 +1367,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
/* Try to read more data. */
/* First move last chars to start of buffer. */
- number_to_move = (yy_size_t) (yyg->yy_c_buf_p - yyg->yytext_ptr) - 1;
+ number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr) - 1;
for ( i = 0; i < number_to_move; ++i )
*(dest++) = *(source++);
@@ -1702,8 +1380,8 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
else
{
- int num_to_read =
- static_cast<int>(YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1);
+ yy_size_t num_to_read =
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
while ( num_to_read <= 0 )
{ /* Not enough room in the buffer - grow it. */
@@ -1716,7 +1394,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
if ( b->yy_is_our_buffer )
{
- int new_size = b->yy_buf_size * 2;
+ yy_size_t new_size = b->yy_buf_size * 2;
if ( new_size <= 0 )
b->yy_buf_size += b->yy_buf_size / 8;
@@ -1729,7 +1407,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
}
else
/* Can't grow it, we don't own it. */
- b->yy_ch_buf = NULL;
+ b->yy_ch_buf = 0;
if ( ! b->yy_ch_buf )
YY_FATAL_ERROR(
@@ -1737,8 +1415,8 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
- num_to_read = static_cast<int>(YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
- number_to_move - 1);
+ num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
+ number_to_move - 1;
}
@@ -1746,10 +1424,8 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
num_to_read = YY_READ_BUF_SIZE;
/* Read in more data. */
- yy_size_t ret = 0;
YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
- ret, num_to_read );
- yyg->yy_n_chars = static_cast<int>(ret);
+ yyg->yy_n_chars, num_to_read );
YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
}
@@ -1773,7 +1449,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
else
ret_val = EOB_ACT_CONTINUE_SCAN;
- if ((int) (yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+ if ((yy_size_t) (yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
/* Extend the array by 50%, plus the number we really need. */
yy_size_t new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1);
YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) pprealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ,yyscanner );
@@ -1781,7 +1457,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
}
- yyg->yy_n_chars += static_cast<int>(number_to_move);
+ yyg->yy_n_chars += number_to_move;
YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR;
YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
@@ -1790,21 +1466,19 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
return ret_val;
}
-
/* yy_get_previous_state - get the state just before the EOB char was reached */
-
static yy_state_type yy_get_previous_state (yyscan_t yyscanner)
{
- yy_state_type yy_current_state;
- char *yy_cp;
+ register yy_state_type yy_current_state;
+ register char *yy_cp;
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
yy_current_state = yyg->yy_start;
for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp )
{
- YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+ register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
if ( yy_accept[yy_current_state] )
{
yyg->yy_last_accepting_state = yy_current_state;
@@ -1816,13 +1490,12 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
if ( yy_current_state >= 98 )
yy_c = yy_meta[(unsigned int) yy_c];
}
- yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
}
return yy_current_state;
}
-
/* yy_try_NUL_trans - try to make a transition on the NUL character
*
* synopsis
@@ -1830,11 +1503,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
*/
static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state , yyscan_t yyscanner)
{
- int yy_is_jam;
+ register int yy_is_jam;
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */
- char *yy_cp = yyg->yy_c_buf_p;
+ register char *yy_cp = yyg->yy_c_buf_p;
- YY_CHAR yy_c = 1;
+ register YY_CHAR yy_c = 1;
if ( yy_accept[yy_current_state] )
{
yyg->yy_last_accepting_state = yy_current_state;
@@ -1846,18 +1519,13 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
if ( yy_current_state >= 98 )
yy_c = yy_meta[(unsigned int) yy_c];
}
- yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
yy_is_jam = (yy_current_state == 97);
(void)yyg;
return yy_is_jam ? 0 : yy_current_state;
}
-
-#ifndef YY_NO_UNPUT
-
-#endif
-
#ifndef YY_NO_INPUT
#ifdef __cplusplus
static int yyinput (yyscan_t yyscanner)
@@ -1883,7 +1551,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
else
{ /* need more input */
- int offset = yyg->yy_c_buf_p - yyg->yytext_ptr;
+ yy_size_t offset = yyg->yy_c_buf_p - yyg->yytext_ptr;
++yyg->yy_c_buf_p;
switch ( yy_get_next_buffer( yyscanner ) )
@@ -1907,7 +1575,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
case EOB_ACT_END_OF_FILE:
{
if ( ppwrap(yyscanner ) )
- return 0;
+ return EOF;
if ( ! yyg->yy_did_buffer_switch_on_eof )
YY_NEW_FILE;
@@ -1929,7 +1597,6 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
*yyg->yy_c_buf_p = '\0'; /* preserve yytext */
yyg->yy_hold_char = *++yyg->yy_c_buf_p;
-
return c;
}
#endif /* ifndef YY_NO_INPUT */
@@ -1953,7 +1620,6 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
pp_load_buffer_state(yyscanner );
}
-
/** Switch to a different input buffer.
* @param new_buffer The new input buffer.
* @param yyscanner The scanner object.
@@ -1990,7 +1656,6 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
yyg->yy_did_buffer_switch_on_eof = 1;
}
-
static void pp_load_buffer_state (yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
@@ -2014,7 +1679,7 @@ static void pp_load_buffer_state (yyscan_t yyscanner)
if ( ! b )
YY_FATAL_ERROR( "out of dynamic memory in pp_create_buffer()" );
- b->yy_buf_size = (yy_size_t)size;
+ b->yy_buf_size = size;
/* yy_ch_buf has to be 2 characters longer than the size given because
* we need to put in 2 end-of-buffer characters.
@@ -2030,7 +1695,6 @@ static void pp_load_buffer_state (yyscan_t yyscanner)
return b;
}
-
/** Destroy the buffer.
* @param b a buffer created with pp_create_buffer()
* @param yyscanner The scanner object.
@@ -2051,7 +1715,6 @@ static void pp_load_buffer_state (yyscan_t yyscanner)
ppfree((void *) b ,yyscanner );
}
-
/* Initializes or reinitializes a buffer.
* This function is sometimes called more than once on the same buffer,
* such as during a pprestart() or at EOF.
@@ -2076,11 +1739,8 @@ static void pp_load_buffer_state (yyscan_t yyscanner)
b->yy_bs_column = 0;
}
-
-
b->yy_is_interactive = 0;
-
errno = oerrno;
}
@@ -2145,7 +1805,6 @@ void pppush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner)
yyg->yy_did_buffer_switch_on_eof = 1;
}
-
/** Removes and deletes the top of the stack, if present.
* The next element becomes the new top.
* @param yyscanner The scanner object.
@@ -2167,7 +1826,6 @@ void pppop_buffer_state (yyscan_t yyscanner)
}
}
-
/* Allocates the stack if it does not exist.
* Guarantees space for at least one push.
*/
@@ -2182,14 +1840,13 @@ static void ppensure_buffer_stack (yyscan_t yyscanner)
* scanner will even need a stack. We use 2 instead of 1 to avoid an
* immediate realloc on the next call.
*/
- num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */
+ num_to_alloc = 1;
yyg->yy_buffer_stack = (struct yy_buffer_state**)ppalloc
(num_to_alloc * sizeof(struct yy_buffer_state*)
, yyscanner);
if ( ! yyg->yy_buffer_stack )
YY_FATAL_ERROR( "out of dynamic memory in ppensure_buffer_stack()" );
-
memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*));
yyg->yy_buffer_stack_max = num_to_alloc;
@@ -2200,7 +1857,7 @@ static void ppensure_buffer_stack (yyscan_t yyscanner)
if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){
/* Increase the buffer to prepare for a possible push. */
- yy_size_t grow_size = 8 /* arbitrary grow size */;
+ int grow_size = 8 /* arbitrary grow size */;
num_to_alloc = yyg->yy_buffer_stack_max + grow_size;
yyg->yy_buffer_stack = (struct yy_buffer_state**)pprealloc
@@ -2216,10 +1873,6 @@ static void ppensure_buffer_stack (yyscan_t yyscanner)
}
}
-
-
-
-
/** Setup the input buffer state to scan directly from a user-specified character buffer.
* @param base the character buffer
* @param size the size in bytes of the character buffer
@@ -2234,16 +1887,16 @@ YY_BUFFER_STATE pp_scan_buffer (char * base, yy_size_t size , yyscan_t yyscann
base[size-2] != YY_END_OF_BUFFER_CHAR ||
base[size-1] != YY_END_OF_BUFFER_CHAR )
/* They forgot to leave room for the EOB's. */
- return NULL;
+ return 0;
b = (YY_BUFFER_STATE) ppalloc(sizeof( struct yy_buffer_state ) ,yyscanner );
if ( ! b )
YY_FATAL_ERROR( "out of dynamic memory in pp_scan_buffer()" );
- b->yy_buf_size = static_cast<int>(size - 2); /* "- 2" to take care of EOB's */
+ b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
b->yy_buf_pos = b->yy_ch_buf = base;
b->yy_is_our_buffer = 0;
- b->yy_input_file = NULL;
+ b->yy_input_file = 0;
b->yy_n_chars = b->yy_buf_size;
b->yy_is_interactive = 0;
b->yy_at_bol = 1;
@@ -2255,9 +1908,6 @@ YY_BUFFER_STATE pp_scan_buffer (char * base, yy_size_t size , yyscan_t yyscann
return b;
}
-
-
-
/** Setup the input buffer state to scan a string. The next call to pplex() will
* scan from a @e copy of @a str.
* @param yystr a NUL-terminated string to scan
@@ -2269,12 +1919,9 @@ YY_BUFFER_STATE pp_scan_buffer (char * base, yy_size_t size , yyscan_t yyscann
YY_BUFFER_STATE pp_scan_string (yyconst char * yystr , yyscan_t yyscanner)
{
- return pp_scan_bytes(yystr,(int) strlen(yystr) ,yyscanner);
+ return pp_scan_bytes(yystr,strlen(yystr) ,yyscanner);
}
-
-
-
/** Setup the input buffer state to scan the given bytes. The next call to pplex() will
* scan from a @e copy of @a bytes.
* @param yybytes the byte buffer to scan
@@ -2282,7 +1929,7 @@ YY_BUFFER_STATE pp_scan_string (yyconst char * yystr , yyscan_t yyscanner)
* @param yyscanner The scanner object.
* @return the newly allocated buffer state object.
*/
-YY_BUFFER_STATE pp_scan_bytes (yyconst char * yybytes, int _yybytes_len , yyscan_t yyscanner)
+YY_BUFFER_STATE pp_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len , yyscan_t yyscanner)
{
YY_BUFFER_STATE b;
char *buf;
@@ -2290,12 +1937,12 @@ YY_BUFFER_STATE pp_scan_bytes (yyconst char * yybytes, int _yybytes_len , yysc
yy_size_t i;
/* Get memory for full buffer, including space for trailing EOB's. */
- n = (yy_size_t) _yybytes_len + 2;
+ n = _yybytes_len + 2;
buf = (char *) ppalloc(n ,yyscanner );
if ( ! buf )
YY_FATAL_ERROR( "out of dynamic memory in pp_scan_bytes()" );
- for ( i = 0; i < static_cast<yy_size_t>(_yybytes_len); ++i )
+ for ( i = 0; i < _yybytes_len; ++i )
buf[i] = yybytes[i];
buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
@@ -2312,25 +1959,13 @@ YY_BUFFER_STATE pp_scan_bytes (yyconst char * yybytes, int _yybytes_len , yysc
return b;
}
-
-
-
-
-
-
-
-
-
-
#ifndef YY_EXIT_FAILURE
#define YY_EXIT_FAILURE 2
#endif
-static void yynoreturn yy_fatal_error (yyconst char* msg , yyscan_t yyscanner)
+static void yy_fatal_error (yyconst char* msg , yyscan_t yyscanner)
{
- struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
- (void)yyg;
- (void) fprintf( stderr, "%s\n", msg );
+ (void) fprintf( stderr, "%s\n", msg );
exit( YY_EXIT_FAILURE );
}
@@ -2351,11 +1986,8 @@ static void yynoreturn yy_fatal_error (yyconst char* msg , yyscan_t yyscanner)
} \
while ( 0 )
-
-
/* Accessor methods (get/set functions) to struct members. */
-
/** Get the user-defined data for this scanner.
* @param yyscanner The scanner object.
*/
@@ -2365,8 +1997,6 @@ YY_EXTRA_TYPE ppget_extra (yyscan_t yyscanner)
return yyextra;
}
-
-
/** Get the current line number.
* @param yyscanner The scanner object.
*/
@@ -2374,16 +2004,12 @@ int ppget_lineno (yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-
if (! YY_CURRENT_BUFFER)
return 0;
return yylineno;
}
-
-
-
/** Get the current column number.
* @param yyscanner The scanner object.
*/
@@ -2391,16 +2017,12 @@ int ppget_column (yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-
if (! YY_CURRENT_BUFFER)
return 0;
return yycolumn;
}
-
-
-
/** Get the input stream.
* @param yyscanner The scanner object.
*/
@@ -2410,8 +2032,6 @@ FILE *ppget_in (yyscan_t yyscanner)
return yyin;
}
-
-
/** Get the output stream.
* @param yyscanner The scanner object.
*/
@@ -2421,18 +2041,15 @@ FILE *ppget_out (yyscan_t yyscanner)
return yyout;
}
-
-
/** Get the length of the current token.
* @param yyscanner The scanner object.
*/
-int ppget_leng (yyscan_t yyscanner)
+yy_size_t ppget_leng (yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
return yyleng;
}
-
/** Get the current token.
* @param yyscanner The scanner object.
*/
@@ -2443,8 +2060,6 @@ char *ppget_text (yyscan_t yyscanner)
return yytext;
}
-
-
/** Set the user-defined data. This data is never touched by the scanner.
* @param user_defined The data to be associated with this scanner.
* @param yyscanner The scanner object.
@@ -2455,123 +2070,92 @@ void ppset_extra (YY_EXTRA_TYPE user_defined , yyscan_t yyscanner)
yyextra = user_defined ;
}
-
-
/** Set the current line number.
- * @param _line_number line number
+ * @param line_number
* @param yyscanner The scanner object.
*/
-void ppset_lineno (int _line_number , yyscan_t yyscanner)
+void ppset_lineno (int line_number , yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-
/* lineno is only valid if an input buffer exists. */
if (! YY_CURRENT_BUFFER )
YY_FATAL_ERROR( "ppset_lineno called with no buffer" );
- yylineno = _line_number;
+ yylineno = line_number;
}
-
-
-
/** Set the current column.
- * @param _column_no column number
+ * @param line_number
* @param yyscanner The scanner object.
*/
-void ppset_column (int _column_no , yyscan_t yyscanner)
+void ppset_column (int column_no , yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-
/* column is only valid if an input buffer exists. */
if (! YY_CURRENT_BUFFER )
YY_FATAL_ERROR( "ppset_column called with no buffer" );
- yycolumn = _column_no;
+ yycolumn = column_no;
}
-
-
-
-
/** Set the input stream. This does not discard the current
* input buffer.
- * @param _in_str A readable stream.
+ * @param in_str A readable stream.
* @param yyscanner The scanner object.
* @see pp_switch_to_buffer
*/
-void ppset_in (FILE * _in_str , yyscan_t yyscanner)
+void ppset_in (FILE * in_str , yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
- yyin = _in_str ;
+ yyin = in_str ;
}
-
-
-void ppset_out (FILE * _out_str , yyscan_t yyscanner)
+void ppset_out (FILE * out_str , yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
- yyout = _out_str ;
+ yyout = out_str ;
}
-
-
-
int ppget_debug (yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
return yy_flex_debug;
}
-
-
-void ppset_debug (int _bdebug , yyscan_t yyscanner)
+void ppset_debug (int bdebug , yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
- yy_flex_debug = _bdebug ;
+ yy_flex_debug = bdebug ;
}
-
/* Accessor methods for yylval and yylloc */
-
YYSTYPE * ppget_lval (yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
return yylval;
}
-
-
void ppset_lval (YYSTYPE * yylval_param , yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
yylval = yylval_param;
}
-
-
-
YYLTYPE *ppget_lloc (yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
return yylloc;
}
-
-
void ppset_lloc (YYLTYPE * yylloc_param , yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
yylloc = yylloc_param;
}
-
-
-
-
/* User-visible API */
/* pplex_init is special because it creates the scanner itself, so it is
@@ -2600,7 +2184,6 @@ int pplex_init(yyscan_t* ptr_yy_globals)
return yy_init_globals ( *ptr_yy_globals );
}
-
/* pplex_init_extra has the same functionality as pplex_init, but follows the
* convention of taking the scanner as the last argument. Note however, that
* this is a *pointer* to a scanner, as it will be allocated by this call (and
@@ -2637,7 +2220,6 @@ int pplex_init_extra(YY_EXTRA_TYPE yy_user_defined,yyscan_t* ptr_yy_globals )
return yy_init_globals ( *ptr_yy_globals );
}
-
static int yy_init_globals (yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
@@ -2645,31 +2227,24 @@ static int yy_init_globals (yyscan_t yyscanner)
* This function is called from pplex_destroy(), so don't allocate here.
*/
-
- yyg->yy_buffer_stack = NULL;
+ yyg->yy_buffer_stack = 0;
yyg->yy_buffer_stack_top = 0;
yyg->yy_buffer_stack_max = 0;
- yyg->yy_c_buf_p = NULL;
+ yyg->yy_c_buf_p = (char *) 0;
yyg->yy_init = 0;
yyg->yy_start = 0;
-
yyg->yy_start_stack_ptr = 0;
yyg->yy_start_stack_depth = 0;
yyg->yy_start_stack = NULL;
-
-
-
-
-
/* Defined in main.c */
#ifdef YY_STDINIT
yyin = stdin;
yyout = stdout;
#else
- yyin = NULL;
- yyout = NULL;
+ yyin = (FILE *) 0;
+ yyout = (FILE *) 0;
#endif
/* For future reference: Set errno on error, since we are called by
@@ -2678,7 +2253,6 @@ static int yy_init_globals (yyscan_t yyscanner)
return 0;
}
-
/* pplex_destroy is for both reentrant and non-reentrant scanners. */
int pplex_destroy (yyscan_t yyscanner)
{
@@ -2695,14 +2269,10 @@ int pplex_destroy (yyscan_t yyscanner)
ppfree(yyg->yy_buffer_stack ,yyscanner);
yyg->yy_buffer_stack = NULL;
-
/* Destroy the start condition stack. */
ppfree(yyg->yy_start_stack ,yyscanner );
yyg->yy_start_stack = NULL;
-
-
-
/* Reset the globals. This is important in a non-reentrant scanner so the next time
* pplex() is called, initialization will occur. */
yy_init_globals( yyscanner);
@@ -2713,32 +2283,23 @@ int pplex_destroy (yyscan_t yyscanner)
return 0;
}
-
-
/*
* Internal utility routines.
*/
-
-
#ifndef yytext_ptr
static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yyscanner)
{
- struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
- (void)yyg;
-
- int i;
+ register int i;
for ( i = 0; i < n; ++i )
s1[i] = s2[i];
}
#endif
-
-
#ifdef YY_NEED_STRLEN
static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner)
{
- int n;
+ register int n;
for ( n = 0; s[n]; ++n )
;
@@ -2746,22 +2307,13 @@ static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner)
}
#endif
-
-
void *ppalloc (yy_size_t size , yyscan_t yyscanner)
{
- struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
- (void)yyg;
- return malloc(size);
+ return (void *) malloc( size );
}
-
-
void *pprealloc (void * ptr, yy_size_t size , yyscan_t yyscanner)
{
- struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
- (void)yyg;
-
/* The cast to (char *) in the following accommodates both
* implementations that use char* generic pointers, and those
* that use void* generic pointers. It works with the latter
@@ -2769,32 +2321,21 @@ void *pprealloc (void * ptr, yy_size_t size , yyscan_t yyscanner)
* any pointer type to void*, and deal with argument conversions
* as though doing an assignment.
*/
- return realloc(ptr, size);
+ return (void *) realloc( (char *) ptr, size );
}
-
-
void ppfree (void * ptr , yyscan_t yyscanner)
{
- struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
- (void)yyg;
free( (char *) ptr ); /* see pprealloc() for (char *) cast */
}
-
#define YYTABLES_NAME "yytables"
-
-
-
-
-
-
-
-
namespace pp {
-Tokenizer::Tokenizer(Diagnostics *diagnostics) : mHandle(nullptr), mMaxTokenSize(256)
+Tokenizer::Tokenizer(Diagnostics *diagnostics)
+ : mHandle(0),
+ mMaxTokenSize(256)
{
mContext.diagnostics = diagnostics;
}
@@ -2851,7 +2392,7 @@ void Tokenizer::lex(Token *token)
bool Tokenizer::initScanner()
{
- if ((mHandle == nullptr) && pplex_init_extra(&mContext, &mHandle))
+ if ((mHandle == NULL) && pplex_init_extra(&mContext,&mHandle))
return false;
pprestart(0,mHandle);
@@ -2860,13 +2401,12 @@ bool Tokenizer::initScanner()
void Tokenizer::destroyScanner()
{
- if (mHandle == nullptr)
+ if (mHandle == NULL)
return;
pplex_destroy(mHandle);
- mHandle = nullptr;
+ mHandle = NULL;
}
} // namespace pp
-
diff --git a/gfx/angle/src/compiler/preprocessor/Tokenizer.h b/gfx/angle/src/compiler/preprocessor/Tokenizer.h
index 6dfb19c66..49e64fa20 100755
--- a/gfx/angle/src/compiler/preprocessor/Tokenizer.h
+++ b/gfx/angle/src/compiler/preprocessor/Tokenizer.h
@@ -7,9 +7,9 @@
#ifndef COMPILER_PREPROCESSOR_TOKENIZER_H_
#define COMPILER_PREPROCESSOR_TOKENIZER_H_
-#include "common/angleutils.h"
-#include "compiler/preprocessor/Input.h"
-#include "compiler/preprocessor/Lexer.h"
+#include "Input.h"
+#include "Lexer.h"
+#include "pp_utils.h"
namespace pp
{
@@ -45,6 +45,7 @@ class Tokenizer : public Lexer
void lex(Token *token) override;
private:
+ PP_DISALLOW_COPY_AND_ASSIGN(Tokenizer);
bool initScanner();
void destroyScanner();
diff --git a/gfx/angle/src/compiler/preprocessor/Tokenizer.l b/gfx/angle/src/compiler/preprocessor/Tokenizer.l
index 62eb4caa6..d316da88b 100755
--- a/gfx/angle/src/compiler/preprocessor/Tokenizer.l
+++ b/gfx/angle/src/compiler/preprocessor/Tokenizer.l
@@ -27,10 +27,10 @@ IF YOU MODIFY THIS FILE YOU ALSO NEED TO RUN generate_parser.sh.
#pragma warning(disable: 4005)
#endif
-#include "compiler/preprocessor/Tokenizer.h"
+#include "Tokenizer.h"
-#include "compiler/preprocessor/DiagnosticsBase.h"
-#include "compiler/preprocessor/Token.h"
+#include "DiagnosticsBase.h"
+#include "Token.h"
#if defined(__GNUC__)
// Triggered by the auto-generated yy_fatal_error function.
@@ -280,7 +280,9 @@ FRACTIONAL_CONSTANT ({DIGIT}*"."{DIGIT}+)|({DIGIT}+".")
namespace pp {
-Tokenizer::Tokenizer(Diagnostics *diagnostics) : mHandle(nullptr), mMaxTokenSize(256)
+Tokenizer::Tokenizer(Diagnostics *diagnostics)
+ : mHandle(0),
+ mMaxTokenSize(256)
{
mContext.diagnostics = diagnostics;
}
@@ -337,7 +339,7 @@ void Tokenizer::lex(Token *token)
bool Tokenizer::initScanner()
{
- if ((mHandle == nullptr) && yylex_init_extra(&mContext, &mHandle))
+ if ((mHandle == NULL) && yylex_init_extra(&mContext, &mHandle))
return false;
yyrestart(0, mHandle);
@@ -346,11 +348,11 @@ bool Tokenizer::initScanner()
void Tokenizer::destroyScanner()
{
- if (mHandle == nullptr)
+ if (mHandle == NULL)
return;
yylex_destroy(mHandle);
- mHandle = nullptr;
+ mHandle = NULL;
}
} // namespace pp
diff --git a/gfx/angle/src/compiler/preprocessor/numeric_lex.h b/gfx/angle/src/compiler/preprocessor/numeric_lex.h
index 7cf976988..b32e42253 100755
--- a/gfx/angle/src/compiler/preprocessor/numeric_lex.h
+++ b/gfx/angle/src/compiler/preprocessor/numeric_lex.h
@@ -9,7 +9,6 @@
#ifndef COMPILER_PREPROCESSOR_NUMERICLEX_H_
#define COMPILER_PREPROCESSOR_NUMERICLEX_H_
-#include <cmath>
#include <sstream>
namespace pp {
@@ -64,7 +63,7 @@ bool numeric_lex_float(const std::string &str, FloatType *value)
stream.imbue(std::locale::classic());
stream >> (*value);
- return !stream.fail() && std::isfinite(*value);
+ return !stream.fail();
#endif
}
diff --git a/gfx/angle/src/compiler/preprocessor/pp_utils.h b/gfx/angle/src/compiler/preprocessor/pp_utils.h
new file mode 100644
index 000000000..9fba9385c
--- /dev/null
+++ b/gfx/angle/src/compiler/preprocessor/pp_utils.h
@@ -0,0 +1,18 @@
+//
+// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+
+// pp_utils.h: Common preprocessor utilities
+
+#ifndef COMPILER_PREPROCESSOR_PPUTILS_H_
+#define COMPILER_PREPROCESSOR_PPUTILS_H_
+
+// A macro to disallow the copy constructor and operator= functions
+// This must be used in the private: declarations for a class.
+#define PP_DISALLOW_COPY_AND_ASSIGN(TypeName) \
+ TypeName(const TypeName &); \
+ void operator=(const TypeName &)
+
+#endif // COMPILER_PREPROCESSOR_PPUTILS_H_
diff --git a/gfx/angle/src/compiler/translator/64bit-lexer-safety.patch b/gfx/angle/src/compiler/translator/64bit-lexer-safety.patch
index e7e403771..db3b2fab5 100755
--- a/gfx/angle/src/compiler/translator/64bit-lexer-safety.patch
+++ b/gfx/angle/src/compiler/translator/64bit-lexer-safety.patch
@@ -1,13 +1,6 @@
-diff --git a/src/compiler/translator/glslang_lex.cpp b/src/compiler/translator/glslang_lex.cpp
-index 1ba63df..2a206ab 100644
---- a/src/compiler/translator/glslang_lex.cpp
-+++ b/src/compiler/translator/glslang_lex.cpp
-@@ -1,4 +1,3 @@
--#line 17 "./glslang.l"
- //
- // Copyright (c) 2012-2013 The ANGLE Project Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
-@@ -149,6 +148,7 @@ typedef int16_t flex_int16_t;
+--- a/src/compiler/glslang_lex.cpp
++++ b/src/compiler/glslang_lex.cpp
+@@ -68,6 +68,7 @@ typedef int16_t flex_int16_t;
typedef uint16_t flex_uint16_t;
typedef int32_t flex_int32_t;
typedef uint32_t flex_uint32_t;
@@ -15,10 +8,10 @@ index 1ba63df..2a206ab 100644
#else
typedef signed char flex_int8_t;
typedef short int flex_int16_t;
-@@ -335,6 +335,11 @@ typedef size_t yy_size_t;
-
-
-
+@@ -191,6 +192,11 @@ typedef void* yyscan_t;
+ typedef struct yy_buffer_state *YY_BUFFER_STATE;
+ #endif
+
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
@@ -27,96 +20,21 @@ index 1ba63df..2a206ab 100644
#define EOB_ACT_CONTINUE_SCAN 0
#define EOB_ACT_END_OF_FILE 1
#define EOB_ACT_LAST_MATCH 2
-@@ -351,8 +356,8 @@ typedef size_t yy_size_t;
+@@ -204,7 +210,7 @@ typedef struct yy_buffer_state *YY_BUFFER_STATE;
*/
#define YY_LESS_LINENO(n) \
do { \
- int yyl;\
-- for ( yyl = n; yyl < yyleng; ++yyl )\
+ yy_size_t yyl;\
-+ for ( yyl = n; yyl < static_cast<yy_site_t>(yyleng); ++yyl )\
+ for ( yyl = n; yyl < yyleng; ++yyl )\
if ( yytext[yyl] == '\n' )\
--yylineno;\
- }while(0)
-@@ -1692,7 +1697,7 @@ yy_find_action:
- if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] )
- {
- yy_size_t yyl;
-- for ( yyl = 0; yyl < yyleng; ++yyl )
-+ for ( yyl = 0; yyl < static_cast<yy_size_t>(yyleng); ++yyl )
- if ( yytext[yyl] == '\n' )
-
- do{ yylineno++;
-@@ -2655,7 +2660,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
- else
- {
- int num_to_read =
-- YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
-+ YY_CURRENT_BUFFER_LVALUE->yy_buf_size - static_cast<int>(number_to_move) - 1;
-
- while ( num_to_read <= 0 )
- { /* Not enough room in the buffer - grow it. */
-@@ -2690,7 +2695,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
- yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
-
- num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
-- number_to_move - 1;
-+ static_cast<int>(number_to_move) - 1;
-
- }
-
-@@ -2698,8 +2703,10 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
- num_to_read = YY_READ_BUF_SIZE;
-
- /* Read in more data. */
-+ size_t result = 0;
- YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
-- yyg->yy_n_chars, num_to_read );
-+ result, num_to_read );
-+ yyg->yy_n_chars = static_cast<int>(result);
-
- YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
- }
-@@ -2725,13 +2732,13 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
-
- if ((int) (yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
- /* Extend the array by 50%, plus the number we really need. */
-- int new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1);
-+ int new_size = yyg->yy_n_chars + static_cast<int>(number_to_move) + (yyg->yy_n_chars >> 1);
- YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ,yyscanner );
- if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
- YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
- }
-
-- yyg->yy_n_chars += number_to_move;
-+ yyg->yy_n_chars += static_cast<int>(number_to_move);
- YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR;
- YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
-
-@@ -3158,7 +3165,7 @@ static void yyensure_buffer_stack (yyscan_t yyscanner)
- /* Increase the buffer to prepare for a possible push. */
- yy_size_t grow_size = 8 /* arbitrary grow size */;
-
-- num_to_alloc = yyg->yy_buffer_stack_max + grow_size;
-+ num_to_alloc = static_cast<int>(yyg->yy_buffer_stack_max + grow_size);
- yyg->yy_buffer_stack = (struct yy_buffer_state**)yyrealloc
- (yyg->yy_buffer_stack,
- num_to_alloc * sizeof(struct yy_buffer_state*)
-@@ -3196,7 +3203,7 @@ YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size , yyscan_t yyscann
- if ( ! b )
- YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
-
-- b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
-+ b->yy_buf_size = static_cast<int>(size) - 2; /* "- 2" to take care of EOB's */
- b->yy_buf_pos = b->yy_ch_buf = base;
- b->yy_is_our_buffer = 0;
- b->yy_input_file = NULL;
-@@ -3251,7 +3258,7 @@ YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, int _yybytes_len , yysc
- if ( ! buf )
- YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
-
-- for ( i = 0; i < _yybytes_len; ++i )
-+ for ( i = 0; i < static_cast<yy_size_t>(_yybytes_len); ++i )
- buf[i] = yybytes[i];
-
- buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
+@@ -378,7 +379,7 @@ static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
+ */
+ #define YY_DO_BEFORE_ACTION \
+ yyg->yytext_ptr = yy_bp; \
+- yyleng = (size_t) (yy_cp - yy_bp); \
++ yyleng = (yy_size_t) (yy_cp - yy_bp); \
+ yyg->yy_hold_char = *yy_cp; \
+ *yy_cp = '\0'; \
+ yyg->yy_c_buf_p = yy_cp;
diff --git a/gfx/angle/src/compiler/translator/ASTMetadataHLSL.cpp b/gfx/angle/src/compiler/translator/ASTMetadataHLSL.cpp
index ba991b709..31bfae996 100755
--- a/gfx/angle/src/compiler/translator/ASTMetadataHLSL.cpp
+++ b/gfx/angle/src/compiler/translator/ASTMetadataHLSL.cpp
@@ -11,9 +11,6 @@
#include "compiler/translator/CallDAG.h"
#include "compiler/translator/SymbolTable.h"
-namespace sh
-{
-
namespace
{
@@ -34,7 +31,7 @@ class PullGradient : public TIntermTraverser
ASSERT(index < metadataList->size());
}
- void traverse(TIntermFunctionDefinition *node)
+ void traverse(TIntermAggregate *node)
{
node->traverse(this);
ASSERT(mParents.empty());
@@ -75,9 +72,9 @@ class PullGradient : public TIntermTraverser
return true;
}
- bool visitIfElse(Visit visit, TIntermIfElse *ifElse) override
+ bool visitSelection(Visit visit, TIntermSelection *selection) override
{
- visitControlFlow(visit, ifElse);
+ visitControlFlow(visit, selection);
return true;
}
@@ -106,8 +103,9 @@ class PullGradient : public TIntermTraverser
{
if (node->isUserDefined())
{
- size_t calleeIndex = mDag.findIndex(node->getFunctionSymbolInfo());
+ size_t calleeIndex = mDag.findIndex(node);
ASSERT(calleeIndex != CallDAG::InvalidIndex && calleeIndex < mIndex);
+ UNUSED_ASSERTION_VARIABLE(mIndex);
if ((*mMetadataList)[calleeIndex].mUsesGradient) {
onGradient();
@@ -115,8 +113,7 @@ class PullGradient : public TIntermTraverser
}
else
{
- TString name =
- TFunction::unmangleName(node->getFunctionSymbolInfo()->getName());
+ TString name = TFunction::unmangleName(node->getName());
if (name == "texture2D" ||
name == "texture2DProj" ||
@@ -160,7 +157,7 @@ class PullComputeDiscontinuousAndGradientLoops : public TIntermTraverser
{
}
- void traverse(TIntermFunctionDefinition *node)
+ void traverse(TIntermAggregate *node)
{
node->traverse(this);
ASSERT(mLoopsAndSwitches.empty());
@@ -199,7 +196,7 @@ class PullComputeDiscontinuousAndGradientLoops : public TIntermTraverser
return true;
}
- bool visitIfElse(Visit visit, TIntermIfElse *node) override
+ bool visitSelection(Visit visit, TIntermSelection *node) override
{
if (visit == PreVisit)
{
@@ -278,8 +275,9 @@ class PullComputeDiscontinuousAndGradientLoops : public TIntermTraverser
{
if (node->isUserDefined())
{
- size_t calleeIndex = mDag.findIndex(node->getFunctionSymbolInfo());
+ size_t calleeIndex = mDag.findIndex(node);
ASSERT(calleeIndex != CallDAG::InvalidIndex && calleeIndex < mIndex);
+ UNUSED_ASSERTION_VARIABLE(mIndex);
if ((*mMetadataList)[calleeIndex].mHasGradientLoopInCallGraph)
{
@@ -312,7 +310,7 @@ class PullComputeDiscontinuousAndGradientLoops : public TIntermTraverser
const CallDAG &mDag;
std::vector<TIntermNode*> mLoopsAndSwitches;
- std::vector<TIntermIfElse *> mIfs;
+ std::vector<TIntermSelection*> mIfs;
};
// Tags all the functions called in a discontinuous loop
@@ -329,7 +327,7 @@ class PushDiscontinuousLoops : public TIntermTraverser
{
}
- void traverse(TIntermFunctionDefinition *node)
+ void traverse(TIntermAggregate *node)
{
node->traverse(this);
ASSERT(mNestedDiscont == (mMetadata->mCalledInDiscontinuousLoop ? 1 : 0));
@@ -358,8 +356,9 @@ class PushDiscontinuousLoops : public TIntermTraverser
case EOpFunctionCall:
if (visit == PreVisit && node->isUserDefined() && mNestedDiscont > 0)
{
- size_t calleeIndex = mDag.findIndex(node->getFunctionSymbolInfo());
+ size_t calleeIndex = mDag.findIndex(node);
ASSERT(calleeIndex != CallDAG::InvalidIndex && calleeIndex < mIndex);
+ UNUSED_ASSERTION_VARIABLE(mIndex);
(*mMetadataList)[calleeIndex].mCalledInDiscontinuousLoop = true;
}
@@ -386,7 +385,7 @@ bool ASTMetadataHLSL::hasGradientInCallGraph(TIntermLoop *node)
return mControlFlowsContainingGradient.count(node) > 0;
}
-bool ASTMetadataHLSL::hasGradientLoop(TIntermIfElse *node)
+bool ASTMetadataHLSL::hasGradientLoop(TIntermSelection *node)
{
return mIfsContainingGradientLoop.count(node) > 0;
}
@@ -450,5 +449,3 @@ MetadataList CreateASTMetadataHLSL(TIntermNode *root, const CallDAG &callDag)
return metadataList;
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/ASTMetadataHLSL.h b/gfx/angle/src/compiler/translator/ASTMetadataHLSL.h
index f8ed5af4a..39e671e3e 100755
--- a/gfx/angle/src/compiler/translator/ASTMetadataHLSL.h
+++ b/gfx/angle/src/compiler/translator/ASTMetadataHLSL.h
@@ -12,12 +12,9 @@
#include <set>
#include <vector>
-namespace sh
-{
-
class CallDAG;
class TIntermNode;
-class TIntermIfElse;
+class TIntermSelection;
class TIntermLoop;
struct ASTMetadataHLSL
@@ -33,7 +30,7 @@ struct ASTMetadataHLSL
// Here "something uses a gradient" means here that it either contains a
// gradient operation, or a call to a function that uses a gradient.
bool hasGradientInCallGraph(TIntermLoop *node);
- bool hasGradientLoop(TIntermIfElse *node);
+ bool hasGradientLoop(TIntermSelection *node);
// Does the function use a gradient.
bool mUsesGradient;
@@ -47,7 +44,7 @@ struct ASTMetadataHLSL
bool mCalledInDiscontinuousLoop;
bool mHasGradientLoopInCallGraph;
std::set<TIntermLoop*> mDiscontinuousLoops;
- std::set<TIntermIfElse *> mIfsContainingGradientLoop;
+ std::set<TIntermSelection *> mIfsContainingGradientLoop;
// Will we need to generate a Lod0 version of the function.
bool mNeedsLod0;
@@ -58,6 +55,4 @@ typedef std::vector<ASTMetadataHLSL> MetadataList;
// Return the AST analysis result, in the order defined by the call DAG
MetadataList CreateASTMetadataHLSL(TIntermNode *root, const CallDAG &callDag);
-} // namespace sh
-
#endif // COMPILER_TRANSLATOR_ASTMETADATAHLSL_H_
diff --git a/gfx/angle/src/compiler/translator/AddAndTrueToLoopCondition.cpp b/gfx/angle/src/compiler/translator/AddAndTrueToLoopCondition.cpp
deleted file mode 100644
index 0177fea96..000000000
--- a/gfx/angle/src/compiler/translator/AddAndTrueToLoopCondition.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-//
-// Copyright (c) 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-
-#include "compiler/translator/AddAndTrueToLoopCondition.h"
-
-#include "compiler/translator/IntermNode.h"
-
-namespace sh
-{
-
-namespace
-{
-
-// An AST traverser that rewrites for and while loops by replacing "condition" with
-// "condition && true" to work around condition bug on Intel Mac.
-class AddAndTrueToLoopConditionTraverser : public TIntermTraverser
-{
- public:
- AddAndTrueToLoopConditionTraverser() : TIntermTraverser(true, false, false) {}
-
- bool visitLoop(Visit, TIntermLoop *loop) override
- {
- // do-while loop doesn't have this bug.
- if (loop->getType() != ELoopFor && loop->getType() != ELoopWhile)
- {
- return true;
- }
-
- // For loop may not have a condition.
- if (loop->getCondition() == nullptr)
- {
- return true;
- }
-
- // Constant true.
- TConstantUnion *trueConstant = new TConstantUnion();
- trueConstant->setBConst(true);
- TIntermTyped *trueValue = new TIntermConstantUnion(trueConstant, TType(EbtBool));
-
- // CONDITION && true.
- TIntermBinary *andOp = new TIntermBinary(EOpLogicalAnd, loop->getCondition(), trueValue);
- loop->setCondition(andOp);
-
- return true;
- }
-};
-
-} // anonymous namespace
-
-void AddAndTrueToLoopCondition(TIntermNode *root)
-{
- AddAndTrueToLoopConditionTraverser traverser;
- root->traverse(&traverser);
-}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/AddAndTrueToLoopCondition.h b/gfx/angle/src/compiler/translator/AddAndTrueToLoopCondition.h
deleted file mode 100644
index 34debe0ed..000000000
--- a/gfx/angle/src/compiler/translator/AddAndTrueToLoopCondition.h
+++ /dev/null
@@ -1,20 +0,0 @@
-//
-// Copyright (c) 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-
-// Rewrite condition in for and while loops to work around driver bug on Intel Mac.
-
-#ifndef COMPILER_TRANSLATOR_ADDANDTRUETOLOOPCONDITION_H_
-#define COMPILER_TRANSLATOR_ADDANDTRUETOLOOPCONDITION_H_
-
-class TIntermNode;
-namespace sh
-{
-
-void AddAndTrueToLoopCondition(TIntermNode *root);
-
-} // namespace sh
-
-#endif // COMPILER_TRANSLATOR_ADDANDTRUETOLOOPCONDITION_H_
diff --git a/gfx/angle/src/compiler/translator/AddDefaultReturnStatements.cpp b/gfx/angle/src/compiler/translator/AddDefaultReturnStatements.cpp
index 5767aea2b..97111d1a1 100755
--- a/gfx/angle/src/compiler/translator/AddDefaultReturnStatements.cpp
+++ b/gfx/angle/src/compiler/translator/AddDefaultReturnStatements.cpp
@@ -31,16 +31,21 @@ class AddDefaultReturnStatementsTraverser : private TIntermTraverser
private:
AddDefaultReturnStatementsTraverser() : TIntermTraverser(true, false, false) {}
- static bool IsFunctionWithoutReturnStatement(TIntermFunctionDefinition *node, TType *returnType)
+ static bool IsFunctionWithoutReturnStatement(TIntermAggregate *node, TType *returnType)
{
*returnType = node->getType();
- if (node->getType().getBasicType() == EbtVoid)
+ if (node->getOp() != EOpFunction || node->getType().getBasicType() == EbtVoid)
{
return false;
}
- TIntermBlock *bodyNode = node->getBody();
- TIntermBranch *returnNode = bodyNode->getSequence()->back()->getAsBranchNode();
+ TIntermAggregate *lastNode = node->getSequence()->back()->getAsAggregate();
+ if (lastNode == nullptr)
+ {
+ return true;
+ }
+
+ TIntermBranch *returnNode = lastNode->getSequence()->front()->getAsBranchNode();
if (returnNode != nullptr && returnNode->getFlowOp() == EOpReturn)
{
return false;
@@ -49,16 +54,51 @@ class AddDefaultReturnStatementsTraverser : private TIntermTraverser
return true;
}
- bool visitFunctionDefinition(Visit, TIntermFunctionDefinition *node) override
+ static TIntermTyped *GenerateTypeConstructor(const TType &returnType)
+ {
+ // Base case, constructing a single element
+ if (!returnType.isArray())
+ {
+ size_t objectSize = returnType.getObjectSize();
+ TConstantUnion *constantUnion = new TConstantUnion[objectSize];
+ for (size_t constantIdx = 0; constantIdx < objectSize; constantIdx++)
+ {
+ constantUnion[constantIdx].setFConst(0.0f);
+ }
+
+ TIntermConstantUnion *intermConstantUnion =
+ new TIntermConstantUnion(constantUnion, returnType);
+ return intermConstantUnion;
+ }
+
+ // Recursive case, construct an array of single elements
+ TIntermAggregate *constructorAggrigate =
+ new TIntermAggregate(TypeToConstructorOperator(returnType));
+ constructorAggrigate->setType(returnType);
+
+ size_t arraySize = returnType.getArraySize();
+ for (size_t arrayIdx = 0; arrayIdx < arraySize; arrayIdx++)
+ {
+ TType arrayElementType(returnType);
+ arrayElementType.clearArrayness();
+
+ constructorAggrigate->getSequence()->push_back(
+ GenerateTypeConstructor(arrayElementType));
+ }
+
+ return constructorAggrigate;
+ }
+
+ bool visitAggregate(Visit, TIntermAggregate *node) override
{
TType returnType;
if (IsFunctionWithoutReturnStatement(node, &returnType))
{
TIntermBranch *branch =
- new TIntermBranch(EOpReturn, TIntermTyped::CreateZero(returnType));
+ new TIntermBranch(EOpReturn, GenerateTypeConstructor(returnType));
- TIntermBlock *bodyNode = node->getBody();
- bodyNode->getSequence()->push_back(branch);
+ TIntermAggregate *lastNode = node->getSequence()->back()->getAsAggregate();
+ lastNode->getSequence()->push_back(branch);
return false;
}
diff --git a/gfx/angle/src/compiler/translator/ArrayReturnValueToOutParameter.cpp b/gfx/angle/src/compiler/translator/ArrayReturnValueToOutParameter.cpp
index 766f700ee..af5bb9ce3 100755
--- a/gfx/angle/src/compiler/translator/ArrayReturnValueToOutParameter.cpp
+++ b/gfx/angle/src/compiler/translator/ArrayReturnValueToOutParameter.cpp
@@ -10,9 +10,6 @@
#include "compiler/translator/IntermNode.h"
-namespace sh
-{
-
namespace
{
@@ -44,7 +41,8 @@ TIntermAggregate *CreateReplacementCall(TIntermAggregate *originalCall, TIntermT
TIntermAggregate *replacementCall = new TIntermAggregate(EOpFunctionCall);
replacementCall->setType(TType(EbtVoid));
replacementCall->setUserDefined();
- *replacementCall->getFunctionSymbolInfo() = *originalCall->getFunctionSymbolInfo();
+ replacementCall->setNameObj(originalCall->getNameObj());
+ replacementCall->setFunctionId(originalCall->getFunctionId());
replacementCall->setLine(originalCall->getLine());
TIntermSequence *replacementParameters = replacementCall->getSequence();
TIntermSequence *originalParameters = originalCall->getSequence();
@@ -63,7 +61,6 @@ class ArrayReturnValueToOutParameterTraverser : private TIntermTraverser
private:
ArrayReturnValueToOutParameterTraverser();
- bool visitFunctionDefinition(Visit visit, TIntermFunctionDefinition *node) override;
bool visitAggregate(Visit visit, TIntermAggregate *node) override;
bool visitBranch(Visit visit, TIntermBranch *node) override;
bool visitBinary(Visit visit, TIntermBinary *node) override;
@@ -85,47 +82,35 @@ ArrayReturnValueToOutParameterTraverser::ArrayReturnValueToOutParameterTraverser
{
}
-bool ArrayReturnValueToOutParameterTraverser::visitFunctionDefinition(
- Visit visit,
- TIntermFunctionDefinition *node)
+bool ArrayReturnValueToOutParameterTraverser::visitAggregate(Visit visit, TIntermAggregate *node)
{
- if (node->isArray() && visit == PreVisit)
+ if (visit == PreVisit)
{
- // Replace the parameters child node of the function definition with another node
- // that has the out parameter added.
- // Also set the function to return void.
-
- TIntermAggregate *params = node->getFunctionParameters();
- ASSERT(params != nullptr && params->getOp() == EOpParameters);
+ if (node->isArray())
+ {
+ if (node->getOp() == EOpFunction)
+ {
+ // Replace the parameters child node of the function definition with another node
+ // that has the out parameter added.
+ // Also set the function to return void.
- TIntermAggregate *replacementParams = new TIntermAggregate;
- replacementParams->setOp(EOpParameters);
- CopyAggregateChildren(params, replacementParams);
- replacementParams->getSequence()->push_back(CreateReturnValueOutSymbol(node->getType()));
- replacementParams->setLine(params->getLine());
+ TIntermAggregate *params = node->getSequence()->front()->getAsAggregate();
+ ASSERT(params != nullptr && params->getOp() == EOpParameters);
- queueReplacementWithParent(node, params, replacementParams, OriginalNode::IS_DROPPED);
+ TIntermAggregate *replacementParams = new TIntermAggregate;
+ replacementParams->setOp(EOpParameters);
+ CopyAggregateChildren(params, replacementParams);
+ replacementParams->getSequence()->push_back(CreateReturnValueOutSymbol(node->getType()));
+ replacementParams->setLine(params->getLine());
- node->setType(TType(EbtVoid));
+ queueReplacementWithParent(node, params, replacementParams,
+ OriginalNode::IS_DROPPED);
- mInFunctionWithArrayReturnValue = true;
- }
- if (visit == PostVisit)
- {
- // This isn't conditional on node->isArray() since the type has already been changed on
- // PreVisit.
- mInFunctionWithArrayReturnValue = false;
- }
- return true;
-}
+ node->setType(TType(EbtVoid));
-bool ArrayReturnValueToOutParameterTraverser::visitAggregate(Visit visit, TIntermAggregate *node)
-{
- if (visit == PreVisit)
- {
- if (node->isArray())
- {
- if (node->getOp() == EOpPrototype)
+ mInFunctionWithArrayReturnValue = true;
+ }
+ else if (node->getOp() == EOpPrototype)
{
// Replace the whole prototype node with another node that has the out parameter added.
TIntermAggregate *replacement = new TIntermAggregate;
@@ -133,7 +118,8 @@ bool ArrayReturnValueToOutParameterTraverser::visitAggregate(Visit visit, TInter
CopyAggregateChildren(node, replacement);
replacement->getSequence()->push_back(CreateReturnValueOutSymbol(node->getType()));
replacement->setUserDefined();
- *replacement->getFunctionSymbolInfo() = *node->getFunctionSymbolInfo();
+ replacement->setNameObj(node->getNameObj());
+ replacement->setFunctionId(node->getFunctionId());
replacement->setLine(node->getLine());
replacement->setType(TType(EbtVoid));
@@ -150,21 +136,27 @@ bool ArrayReturnValueToOutParameterTraverser::visitAggregate(Visit visit, TInter
// Cases 2 to 4 are already converted to simpler cases by SeparateExpressionsReturningArrays, so we
// only need to worry about the case where a function call returning an array forms an expression by
// itself.
- TIntermBlock *parentBlock = getParentNode()->getAsBlock();
- if (parentBlock)
+ TIntermAggregate *parentAgg = getParentNode()->getAsAggregate();
+ if (parentAgg != nullptr && parentAgg->getOp() == EOpSequence)
{
nextTemporaryIndex();
TIntermSequence replacements;
replacements.push_back(createTempDeclaration(node->getType()));
TIntermSymbol *returnSymbol = createTempSymbol(node->getType());
replacements.push_back(CreateReplacementCall(node, returnSymbol));
- mMultiReplacements.push_back(
- NodeReplaceWithMultipleEntry(parentBlock, node, replacements));
+ mMultiReplacements.push_back(NodeReplaceWithMultipleEntry(parentAgg, node, replacements));
}
return false;
}
}
}
+ else if (visit == PostVisit)
+ {
+ if (node->getOp() == EOpFunction)
+ {
+ mInFunctionWithArrayReturnValue = false;
+ }
+ }
return true;
}
@@ -175,11 +167,12 @@ bool ArrayReturnValueToOutParameterTraverser::visitBranch(Visit visit, TIntermBr
// Instead of returning a value, assign to the out parameter and then return.
TIntermSequence replacements;
+ TIntermBinary *replacementAssignment = new TIntermBinary(EOpAssign);
TIntermTyped *expression = node->getExpression();
ASSERT(expression != nullptr);
- TIntermSymbol *returnValueSymbol = CreateReturnValueSymbol(expression->getType());
- TIntermBinary *replacementAssignment =
- new TIntermBinary(EOpAssign, returnValueSymbol, expression);
+ replacementAssignment->setLeft(CreateReturnValueSymbol(expression->getType()));
+ replacementAssignment->setRight(node->getExpression());
+ replacementAssignment->setType(expression->getType());
replacementAssignment->setLine(expression->getLine());
replacements.push_back(replacementAssignment);
@@ -187,8 +180,7 @@ bool ArrayReturnValueToOutParameterTraverser::visitBranch(Visit visit, TIntermBr
replacementBranch->setLine(node->getLine());
replacements.push_back(replacementBranch);
- mMultiReplacements.push_back(
- NodeReplaceWithMultipleEntry(getParentNode()->getAsBlock(), node, replacements));
+ mMultiReplacements.push_back(NodeReplaceWithMultipleEntry(getParentNode()->getAsAggregate(), node, replacements));
}
return false;
}
@@ -213,5 +205,3 @@ void ArrayReturnValueToOutParameter(TIntermNode *root, unsigned int *temporaryIn
{
ArrayReturnValueToOutParameterTraverser::apply(root, temporaryIndex);
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/ArrayReturnValueToOutParameter.h b/gfx/angle/src/compiler/translator/ArrayReturnValueToOutParameter.h
index e030f6ffe..983e203e6 100755
--- a/gfx/angle/src/compiler/translator/ArrayReturnValueToOutParameter.h
+++ b/gfx/angle/src/compiler/translator/ArrayReturnValueToOutParameter.h
@@ -9,11 +9,8 @@
#ifndef COMPILER_TRANSLATOR_ARRAYRETURNVALUETOOUTPARAMETER_H_
#define COMPILER_TRANSLATOR_ARRAYRETURNVALUETOOUTPARAMETER_H_
-namespace sh
-{
class TIntermNode;
void ArrayReturnValueToOutParameter(TIntermNode *root, unsigned int *temporaryIndex);
-} // namespace sh
#endif // COMPILER_TRANSLATOR_ARRAYRETURNVALUETOOUTPARAMETER_H_
diff --git a/gfx/angle/src/compiler/translator/BaseTypes.h b/gfx/angle/src/compiler/translator/BaseTypes.h
index e050c88da..72ecb50f4 100755
--- a/gfx/angle/src/compiler/translator/BaseTypes.h
+++ b/gfx/angle/src/compiler/translator/BaseTypes.h
@@ -13,9 +13,6 @@
#include "common/debug.h"
#include "GLSLANG/ShaderLang.h"
-namespace sh
-{
-
//
// Precision qualifiers
//
@@ -35,10 +32,10 @@ inline const char* getPrecisionString(TPrecision p)
{
switch(p)
{
- case EbpHigh: return "highp";
- case EbpMedium: return "mediump";
- case EbpLow: return "lowp";
- default: return "mediump"; // Safest fallback
+ case EbpHigh: return "highp"; break;
+ case EbpMedium: return "mediump"; break;
+ case EbpLow: return "lowp"; break;
+ default: return "mediump"; break; // Safest fallback
}
}
@@ -79,98 +76,19 @@ enum TBasicType
EbtSampler2DShadow,
EbtSamplerCubeShadow,
EbtSampler2DArrayShadow,
- EbtGuardSamplerEnd, // non type: see implementation of IsSampler()
- EbtGSampler2D, // non type: represents sampler2D, isampler2D, and usampler2D
- EbtGSampler3D, // non type: represents sampler3D, isampler3D, and usampler3D
- EbtGSamplerCube, // non type: represents samplerCube, isamplerCube, and usamplerCube
- EbtGSampler2DArray, // non type: represents sampler2DArray, isampler2DArray, and
- // usampler2DArray
-
- // images
- EbtGuardImageBegin,
- EbtImage2D,
- EbtIImage2D,
- EbtUImage2D,
- EbtImage3D,
- EbtIImage3D,
- EbtUImage3D,
- EbtImage2DArray,
- EbtIImage2DArray,
- EbtUImage2DArray,
- EbtImageCube,
- EbtIImageCube,
- EbtUImageCube,
- EbtGuardImageEnd,
-
- EbtGuardGImageBegin,
- EbtGImage2D, // non type: represents image2D, uimage2D, iimage2D
- EbtGImage3D, // non type: represents image3D, uimage3D, iimage3D
- EbtGImage2DArray, // non type: represents image2DArray, uimage2DArray, iimage2DArray
- EbtGImageCube, // non type: represents imageCube, uimageCube, iimageCube
- EbtGuardGImageEnd,
-
+ EbtGuardSamplerEnd, // non type: see implementation of IsSampler()
+ EbtGSampler2D, // non type: represents sampler2D, isampler2D, and usampler2D
+ EbtGSampler3D, // non type: represents sampler3D, isampler3D, and usampler3D
+ EbtGSamplerCube, // non type: represents samplerCube, isamplerCube, and usamplerCube
+ EbtGSampler2DArray, // non type: represents sampler2DArray, isampler2DArray, and usampler2DArray
EbtStruct,
EbtInterfaceBlock,
- EbtAddress, // should be deprecated??
+ EbtAddress, // should be deprecated??
// end of list
EbtLast
};
-inline TBasicType convertGImageToFloatImage(TBasicType type)
-{
- switch (type)
- {
- case EbtGImage2D:
- return EbtImage2D;
- case EbtGImage3D:
- return EbtImage3D;
- case EbtGImage2DArray:
- return EbtImage2DArray;
- case EbtGImageCube:
- return EbtImageCube;
- default:
- UNREACHABLE();
- }
- return EbtLast;
-}
-
-inline TBasicType convertGImageToIntImage(TBasicType type)
-{
- switch (type)
- {
- case EbtGImage2D:
- return EbtIImage2D;
- case EbtGImage3D:
- return EbtIImage3D;
- case EbtGImage2DArray:
- return EbtIImage2DArray;
- case EbtGImageCube:
- return EbtIImageCube;
- default:
- UNREACHABLE();
- }
- return EbtLast;
-}
-
-inline TBasicType convertGImageToUnsignedImage(TBasicType type)
-{
- switch (type)
- {
- case EbtGImage2D:
- return EbtUImage2D;
- case EbtGImage3D:
- return EbtUImage3D;
- case EbtGImage2DArray:
- return EbtUImage2DArray;
- case EbtGImageCube:
- return EbtUImageCube;
- default:
- UNREACHABLE();
- }
- return EbtLast;
-}
-
const char* getBasicString(TBasicType t);
inline bool IsSampler(TBasicType type)
@@ -178,22 +96,6 @@ inline bool IsSampler(TBasicType type)
return type > EbtGuardSamplerBegin && type < EbtGuardSamplerEnd;
}
-inline bool IsImage(TBasicType type)
-{
- return type > EbtGuardImageBegin && type < EbtGuardImageEnd;
-}
-
-inline bool IsGImage(TBasicType type)
-{
- return type > EbtGuardGImageBegin && type < EbtGuardGImageEnd;
-}
-
-inline bool IsOpaqueType(TBasicType type)
-{
- // TODO (mradev): add atomic types as opaque.
- return IsSampler(type) || IsImage(type);
-}
-
inline bool IsIntegerSampler(TBasicType type)
{
switch (type)
@@ -224,56 +126,6 @@ inline bool IsIntegerSampler(TBasicType type)
return false;
}
-inline bool IsFloatImage(TBasicType type)
-{
- switch (type)
- {
- case EbtImage2D:
- case EbtImage3D:
- case EbtImage2DArray:
- case EbtImageCube:
- return true;
- default:
- break;
- }
-
- return false;
-}
-
-inline bool IsIntegerImage(TBasicType type)
-{
-
- switch (type)
- {
- case EbtIImage2D:
- case EbtIImage3D:
- case EbtIImage2DArray:
- case EbtIImageCube:
- return true;
- default:
- break;
- }
-
- return false;
-}
-
-inline bool IsUnsignedImage(TBasicType type)
-{
-
- switch (type)
- {
- case EbtUImage2D:
- case EbtUImage3D:
- case EbtUImage2DArray:
- case EbtUImageCube:
- return true;
- default:
- break;
- }
-
- return false;
-}
-
inline bool IsSampler2D(TBasicType type)
{
switch (type)
@@ -431,7 +283,7 @@ inline bool IsInteger(TBasicType type)
inline bool SupportsPrecision(TBasicType type)
{
- return type == EbtFloat || type == EbtInt || type == EbtUInt || IsOpaqueType(type);
+ return type == EbtFloat || type == EbtInt || type == EbtUInt || IsSampler(type);
}
//
@@ -489,11 +341,10 @@ enum TQualifier
EvqLastFragData,
// GLSL ES 3.0 vertex output and fragment input
- EvqSmooth, // Incomplete qualifier, smooth is the default
- EvqFlat, // Incomplete qualifier
- EvqCentroid, // Incomplete qualifier
- EvqSmoothOut,
- EvqFlatOut,
+ EvqSmooth, // Incomplete qualifier, smooth is the default
+ EvqFlat, // Incomplete qualifier
+ EvqSmoothOut = EvqSmooth,
+ EvqFlatOut = EvqFlat,
EvqCentroidOut, // Implies smooth
EvqSmoothIn,
EvqFlatIn,
@@ -508,40 +359,10 @@ enum TQualifier
EvqGlobalInvocationID,
EvqLocalInvocationIndex,
- // GLSL ES 3.1 memory qualifiers
- EvqReadOnly,
- EvqWriteOnly,
- EvqCoherent,
- EvqRestrict,
- EvqVolatile,
-
// end of list
EvqLast
};
-inline bool IsQualifierUnspecified(TQualifier qualifier)
-{
- return (qualifier == EvqTemporary || qualifier == EvqGlobal);
-}
-
-enum TLayoutImageInternalFormat
-{
- EiifUnspecified,
- EiifRGBA32F,
- EiifRGBA16F,
- EiifR32F,
- EiifRGBA32UI,
- EiifRGBA16UI,
- EiifRGBA8UI,
- EiifR32UI,
- EiifRGBA32I,
- EiifRGBA16I,
- EiifRGBA8I,
- EiifR32I,
- EiifRGBA8,
- EiifRGBA8_SNORM
-};
-
enum TLayoutMatrixPacking
{
EmpUnspecified,
@@ -560,44 +381,36 @@ enum TLayoutBlockStorage
struct TLayoutQualifier
{
int location;
- unsigned int locationsSpecified;
TLayoutMatrixPacking matrixPacking;
TLayoutBlockStorage blockStorage;
// Compute shader layout qualifiers.
sh::WorkGroupSize localSize;
- // Image format layout qualifier
- TLayoutImageInternalFormat imageInternalFormat;
-
static TLayoutQualifier create()
{
TLayoutQualifier layoutQualifier;
layoutQualifier.location = -1;
- layoutQualifier.locationsSpecified = 0;
layoutQualifier.matrixPacking = EmpUnspecified;
layoutQualifier.blockStorage = EbsUnspecified;
layoutQualifier.localSize.fill(-1);
- layoutQualifier.imageInternalFormat = EiifUnspecified;
return layoutQualifier;
}
bool isEmpty() const
{
return location == -1 && matrixPacking == EmpUnspecified &&
- blockStorage == EbsUnspecified && !localSize.isAnyValueSet() &&
- imageInternalFormat == EiifUnspecified;
+ blockStorage == EbsUnspecified && !localSize.isAnyValueSet();
}
bool isCombinationValid() const
{
bool workSizeSpecified = localSize.isAnyValueSet();
bool otherLayoutQualifiersSpecified =
- (location != -1 || matrixPacking != EmpUnspecified || blockStorage != EbsUnspecified ||
- imageInternalFormat != EiifUnspecified);
+ (location != -1 || matrixPacking != EmpUnspecified || blockStorage != EbsUnspecified);
// we can have either the work group size specified, or the other layout qualifiers
return !(workSizeSpecified && otherLayoutQualifiersSpecified);
@@ -609,37 +422,6 @@ struct TLayoutQualifier
}
};
-struct TMemoryQualifier
-{
- // GLSL ES 3.10 Revision 4, 4.9 Memory Access Qualifiers
- // An image can be qualified as both readonly and writeonly. It still can be can be used with
- // imageSize().
- bool readonly;
- bool writeonly;
- bool coherent;
-
- // restrict and volatile are reserved keywords in C/C++
- bool restrictQualifier;
- bool volatileQualifier;
- static TMemoryQualifier create()
- {
- TMemoryQualifier memoryQualifier;
-
- memoryQualifier.readonly = false;
- memoryQualifier.writeonly = false;
- memoryQualifier.coherent = false;
- memoryQualifier.restrictQualifier = false;
- memoryQualifier.volatileQualifier = false;
-
- return memoryQualifier;
- }
-
- bool isEmpty()
- {
- return !readonly && !writeonly && !coherent && !restrictQualifier && !volatileQualifier;
- }
-};
-
inline const char *getWorkGroupSizeString(size_t dimension)
{
switch (dimension)
@@ -700,9 +482,6 @@ inline const char* getQualifierString(TQualifier q)
case EvqSmoothIn: return "smooth in";
case EvqFlatIn: return "flat in";
case EvqCentroidIn: return "smooth centroid in";
- case EvqCentroid: return "centroid";
- case EvqFlat: return "flat";
- case EvqSmooth: return "smooth";
case EvqComputeIn: return "in";
case EvqNumWorkGroups: return "NumWorkGroups";
case EvqWorkGroupSize: return "WorkGroupSize";
@@ -710,8 +489,6 @@ inline const char* getQualifierString(TQualifier q)
case EvqLocalInvocationID: return "LocalInvocationID";
case EvqGlobalInvocationID: return "GlobalInvocationID";
case EvqLocalInvocationIndex: return "LocalInvocationIndex";
- case EvqReadOnly: return "readonly";
- case EvqWriteOnly: return "writeonly";
default: UNREACHABLE(); return "unknown qualifier";
}
// clang-format on
@@ -740,42 +517,18 @@ inline const char* getBlockStorageString(TLayoutBlockStorage bsq)
}
}
-inline const char *getImageInternalFormatString(TLayoutImageInternalFormat iifq)
+inline const char* getInterpolationString(TQualifier q)
{
- switch (iifq)
+ switch(q)
{
- case EiifRGBA32F:
- return "rgba32f";
- case EiifRGBA16F:
- return "rgba16f";
- case EiifR32F:
- return "r32f";
- case EiifRGBA32UI:
- return "rgba32ui";
- case EiifRGBA16UI:
- return "rgba16ui";
- case EiifRGBA8UI:
- return "rgba8ui";
- case EiifR32UI:
- return "r32ui";
- case EiifRGBA32I:
- return "rgba32i";
- case EiifRGBA16I:
- return "rgba16i";
- case EiifRGBA8I:
- return "rgba8i";
- case EiifR32I:
- return "r32i";
- case EiifRGBA8:
- return "rgba8";
- case EiifRGBA8_SNORM:
- return "rgba8_snorm";
- default:
- UNREACHABLE();
- return "unknown internal image format";
+ case EvqSmoothOut: return "smooth"; break;
+ case EvqCentroidOut: return "smooth centroid"; break;
+ case EvqFlatOut: return "flat"; break;
+ case EvqSmoothIn: return "smooth"; break;
+ case EvqCentroidIn: return "smooth centroid"; break;
+ case EvqFlatIn: return "flat"; break;
+ default: UNREACHABLE(); return "unknown interpolation";
}
}
-} // namespace sh
-
#endif // COMPILER_TRANSLATOR_BASETYPES_H_
diff --git a/gfx/angle/src/compiler/translator/BreakVariableAliasingInInnerLoops.cpp b/gfx/angle/src/compiler/translator/BreakVariableAliasingInInnerLoops.cpp
deleted file mode 100644
index 018e72cd1..000000000
--- a/gfx/angle/src/compiler/translator/BreakVariableAliasingInInnerLoops.cpp
+++ /dev/null
@@ -1,106 +0,0 @@
-//
-// Copyright (c) 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-
-// BreakVariableAliasingInInnerLoops.h: To optimize simple assignments, the HLSL compiler frontend
-// may record a variable as aliasing another. Sometimes the alias information gets garbled
-// so we work around this issue by breaking the aliasing chain in inner loops.
-
-#include "BreakVariableAliasingInInnerLoops.h"
-
-#include "compiler/translator/IntermNode.h"
-
-// A HLSL compiler developer gave us more details on the root cause and the workaround needed:
-// The root problem is that if the HLSL compiler is applying aliasing information even on
-// incomplete simulations (in this case, a single pass). The bug is triggered by an assignment
-// that comes from a series of assignments, possibly with swizzled or ternary operators with
-// known conditionals, where the source is before the loop.
-// So, a workaround is to add a +0 term to variables the first time they are assigned to in
-// an inner loop (if they are declared in an outside scope, otherwise there is no need).
-// This will break the aliasing chain.
-
-// For simplicity here we add a +0 to any assignment that is in at least two nested loops. Because
-// the bug only shows up with swizzles, and ternary assignment, whole array or whole structure
-// assignment don't need a workaround.
-
-namespace sh
-{
-
-namespace
-{
-
-class AliasingBreaker : public TIntermTraverser
-{
- public:
- AliasingBreaker() : TIntermTraverser(true, false, true) {}
-
- protected:
- bool visitBinary(Visit visit, TIntermBinary *binary)
- {
- if (visit != PreVisit)
- {
- return false;
- }
-
- if (mLoopLevel < 2 || !binary->isAssignment())
- {
- return true;
- }
-
- TIntermTyped *B = binary->getRight();
- TType type = B->getType();
-
- if (!type.isScalar() && !type.isVector() && !type.isMatrix())
- {
- return true;
- }
-
- if (type.isArray() || IsSampler(type.getBasicType()))
- {
- return true;
- }
-
- // We have a scalar / vector / matrix assignment with loop depth 2.
- // Transform it from
- // A = B
- // to
- // A = (B + typeof<B>(0));
-
- TIntermBinary *bPlusZero = new TIntermBinary(EOpAdd, B, TIntermTyped::CreateZero(type));
- bPlusZero->setLine(B->getLine());
-
- binary->replaceChildNode(B, bPlusZero);
-
- return true;
- }
-
- bool visitLoop(Visit visit, TIntermLoop *loop)
- {
- if (visit == PreVisit)
- {
- mLoopLevel++;
- }
- else
- {
- ASSERT(mLoopLevel > 0);
- mLoopLevel--;
- }
-
- return true;
- }
-
- private:
- int mLoopLevel = 0;
-};
-
-} // anonymous namespace
-
-void BreakVariableAliasingInInnerLoops(TIntermNode *root)
-{
- AliasingBreaker breaker;
- root->traverse(&breaker);
-}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/BreakVariableAliasingInInnerLoops.h b/gfx/angle/src/compiler/translator/BreakVariableAliasingInInnerLoops.h
deleted file mode 100644
index b1d906f91..000000000
--- a/gfx/angle/src/compiler/translator/BreakVariableAliasingInInnerLoops.h
+++ /dev/null
@@ -1,23 +0,0 @@
-//
-// Copyright (c) 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-
-// BreakVariableAliasingInInnerLoops.h: To optimize simple assignments, the HLSL compiler frontend
-// may record a variable as aliasing another. Sometimes the alias information gets garbled
-// so we work around this issue by breaking the aliasing chain in inner loops.
-
-#ifndef COMPILER_TRANSLATOR_BREAKVARIABLEALIASINGININNERLOOPS_H_
-#define COMPILER_TRANSLATOR_BREAKVARIABLEALIASINGININNERLOOPS_H_
-
-class TIntermNode;
-
-namespace sh
-{
-
-void BreakVariableAliasingInInnerLoops(TIntermNode *root);
-
-} // namespace sh
-
-#endif // COMPILER_TRANSLATOR_BREAKVARIABLEALIASINGININNERLOOPS_H_
diff --git a/gfx/angle/src/compiler/translator/BuiltInFunctionEmulator.cpp b/gfx/angle/src/compiler/translator/BuiltInFunctionEmulator.cpp
index 152251fde..483fb4467 100755
--- a/gfx/angle/src/compiler/translator/BuiltInFunctionEmulator.cpp
+++ b/gfx/angle/src/compiler/translator/BuiltInFunctionEmulator.cpp
@@ -9,9 +9,6 @@
#include "compiler/translator/SymbolTable.h"
#include "compiler/translator/Cache.h"
-namespace sh
-{
-
class BuiltInFunctionEmulator::BuiltInFunctionEmulationMarker : public TIntermTraverser
{
public:
@@ -245,5 +242,3 @@ BuiltInFunctionEmulator::FunctionId BuiltInFunctionEmulator::FunctionId::getCopy
{
return FunctionId(mOp, new TType(*mParam1), new TType(*mParam2), new TType(*mParam3));
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/BuiltInFunctionEmulator.h b/gfx/angle/src/compiler/translator/BuiltInFunctionEmulator.h
index db5c202d2..6976edfd5 100755
--- a/gfx/angle/src/compiler/translator/BuiltInFunctionEmulator.h
+++ b/gfx/angle/src/compiler/translator/BuiltInFunctionEmulator.h
@@ -10,9 +10,6 @@
#include "compiler/translator/InfoSink.h"
#include "compiler/translator/IntermNode.h"
-namespace sh
-{
-
//
// This class decides which built-in functions need to be replaced with the
// emulated ones.
@@ -85,6 +82,4 @@ class BuiltInFunctionEmulator
std::vector<FunctionId> mFunctions;
};
-} // namespace sh
-
#endif // COMPILER_TRANSLATOR_BUILTINFUNCTIONEMULATOR_H_
diff --git a/gfx/angle/src/compiler/translator/BuiltInFunctionEmulatorGLSL.cpp b/gfx/angle/src/compiler/translator/BuiltInFunctionEmulatorGLSL.cpp
index 74397fb7f..075a55361 100755
--- a/gfx/angle/src/compiler/translator/BuiltInFunctionEmulatorGLSL.cpp
+++ b/gfx/angle/src/compiler/translator/BuiltInFunctionEmulatorGLSL.cpp
@@ -11,68 +11,32 @@
#include "compiler/translator/SymbolTable.h"
#include "compiler/translator/VersionGLSL.h"
-namespace sh
+void InitBuiltInFunctionEmulatorForGLSLWorkarounds(BuiltInFunctionEmulator *emu, sh::GLenum shaderType)
{
-
-void InitBuiltInAbsFunctionEmulatorForGLSLWorkarounds(BuiltInFunctionEmulator *emu,
- sh::GLenum shaderType)
-{
- if (shaderType == GL_VERTEX_SHADER)
- {
- const TType *int1 = TCache::getType(EbtInt);
- emu->addEmulatedFunction(EOpAbs, int1, "int webgl_abs_emu(int x) { return x * sign(x); }");
- }
-}
-
-void InitBuiltInIsnanFunctionEmulatorForGLSLWorkarounds(BuiltInFunctionEmulator *emu,
- int targetGLSLVersion)
-{
- // isnan() is supported since GLSL 1.3.
- if (targetGLSLVersion < GLSL_VERSION_130)
- return;
+ // we use macros here instead of function definitions to work around more GLSL
+ // compiler bugs, in particular on NVIDIA hardware on Mac OSX. Macros are
+ // problematic because if the argument has side-effects they will be repeatedly
+ // evaluated. This is unlikely to show up in real shaders, but is something to
+ // consider.
const TType *float1 = TCache::getType(EbtFloat);
const TType *float2 = TCache::getType(EbtFloat, 2);
const TType *float3 = TCache::getType(EbtFloat, 3);
const TType *float4 = TCache::getType(EbtFloat, 4);
- // !(x > 0.0 || x < 0.0 || x == 0.0) will be optimized and always equal to false.
- emu->addEmulatedFunction(
- EOpIsNan, float1,
- "bool webgl_isnan_emu(float x) { return (x > 0.0 || x < 0.0) ? false : x != 0.0; }");
- emu->addEmulatedFunction(
- EOpIsNan, float2,
- "bvec2 webgl_isnan_emu(vec2 x)\n"
- "{\n"
- " bvec2 isnan;\n"
- " for (int i = 0; i < 2; i++)\n"
- " {\n"
- " isnan[i] = (x[i] > 0.0 || x[i] < 0.0) ? false : x[i] != 0.0;\n"
- " }\n"
- " return isnan;\n"
- "}\n");
- emu->addEmulatedFunction(
- EOpIsNan, float3,
- "bvec3 webgl_isnan_emu(vec3 x)\n"
- "{\n"
- " bvec3 isnan;\n"
- " for (int i = 0; i < 3; i++)\n"
- " {\n"
- " isnan[i] = (x[i] > 0.0 || x[i] < 0.0) ? false : x[i] != 0.0;\n"
- " }\n"
- " return isnan;\n"
- "}\n");
- emu->addEmulatedFunction(
- EOpIsNan, float4,
- "bvec4 webgl_isnan_emu(vec4 x)\n"
- "{\n"
- " bvec4 isnan;\n"
- " for (int i = 0; i < 4; i++)\n"
- " {\n"
- " isnan[i] = (x[i] > 0.0 || x[i] < 0.0) ? false : x[i] != 0.0;\n"
- " }\n"
- " return isnan;\n"
- "}\n");
+ if (shaderType == GL_FRAGMENT_SHADER)
+ {
+ emu->addEmulatedFunction(EOpCos, float1, "webgl_emu_precision float webgl_cos_emu(webgl_emu_precision float a) { return cos(a); }");
+ emu->addEmulatedFunction(EOpCos, float2, "webgl_emu_precision vec2 webgl_cos_emu(webgl_emu_precision vec2 a) { return cos(a); }");
+ emu->addEmulatedFunction(EOpCos, float3, "webgl_emu_precision vec3 webgl_cos_emu(webgl_emu_precision vec3 a) { return cos(a); }");
+ emu->addEmulatedFunction(EOpCos, float4, "webgl_emu_precision vec4 webgl_cos_emu(webgl_emu_precision vec4 a) { return cos(a); }");
+ }
+ emu->addEmulatedFunction(EOpDistance, float1, float1, "#define webgl_distance_emu(x, y) ((x) >= (y) ? (x) - (y) : (y) - (x))");
+ emu->addEmulatedFunction(EOpDot, float1, float1, "#define webgl_dot_emu(x, y) ((x) * (y))");
+ emu->addEmulatedFunction(EOpLength, float1, "#define webgl_length_emu(x) ((x) >= 0.0 ? (x) : -(x))");
+ emu->addEmulatedFunction(EOpNormalize, float1, "#define webgl_normalize_emu(x) ((x) == 0.0 ? 0.0 : ((x) > 0.0 ? 1.0 : -1.0))");
+ emu->addEmulatedFunction(EOpReflect, float1, float1, "#define webgl_reflect_emu(I, N) ((I) - 2.0 * (N) * (I) * (N))");
+ emu->addEmulatedFunction(EOpFaceForward, float1, float1, float1, "#define webgl_faceforward_emu(N, I, Nref) (((Nref) * (I) < 0.0) ? (N) : -(N))");
}
// Emulate built-in functions missing from GLSL 1.30 and higher
@@ -217,9 +181,7 @@ void InitBuiltInFunctionEmulatorForGLSLMissingFunctions(BuiltInFunctionEmulator
" float scale;\n"
" if(exponent < 0)\n"
" {\n"
- " // The negative unary operator is buggy on OSX.\n"
- " // Work around this by using abs instead.\n"
- " scale = 1.0 / (1 << abs(exponent));\n"
+ " scale = 1.0 / (1 << -exponent);\n"
" }\n"
" else\n"
" {\n"
@@ -251,5 +213,3 @@ void InitBuiltInFunctionEmulatorForGLSLMissingFunctions(BuiltInFunctionEmulator
// clang-format on
}
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/BuiltInFunctionEmulatorGLSL.h b/gfx/angle/src/compiler/translator/BuiltInFunctionEmulatorGLSL.h
index 09fc85b0d..56242598a 100755
--- a/gfx/angle/src/compiler/translator/BuiltInFunctionEmulatorGLSL.h
+++ b/gfx/angle/src/compiler/translator/BuiltInFunctionEmulatorGLSL.h
@@ -9,27 +9,17 @@
#include "GLSLANG/ShaderLang.h"
-namespace sh
-{
class BuiltInFunctionEmulator;
//
-// This works around bug in Intel Mac drivers.
+// This is only a workaround for OpenGL driver bugs, and isn't needed in general.
//
-void InitBuiltInAbsFunctionEmulatorForGLSLWorkarounds(BuiltInFunctionEmulator *emu,
- sh::GLenum shaderType);
-
-//
-// This works around isnan() bug in Intel Mac drivers
-//
-void InitBuiltInIsnanFunctionEmulatorForGLSLWorkarounds(BuiltInFunctionEmulator *emu,
- int targetGLSLVersion);
+void InitBuiltInFunctionEmulatorForGLSLWorkarounds(BuiltInFunctionEmulator *emu, sh::GLenum shaderType);
//
// This function is emulating built-in functions missing from GLSL 1.30 and higher.
//
void InitBuiltInFunctionEmulatorForGLSLMissingFunctions(BuiltInFunctionEmulator *emu, sh::GLenum shaderType,
int targetGLSLVersion);
-} // namespace sh
#endif // COMPILER_TRANSLATOR_BUILTINFUNCTIONEMULATORGLSL_H_
diff --git a/gfx/angle/src/compiler/translator/BuiltInFunctionEmulatorHLSL.cpp b/gfx/angle/src/compiler/translator/BuiltInFunctionEmulatorHLSL.cpp
index c51062e1e..50e15cbc2 100755
--- a/gfx/angle/src/compiler/translator/BuiltInFunctionEmulatorHLSL.cpp
+++ b/gfx/angle/src/compiler/translator/BuiltInFunctionEmulatorHLSL.cpp
@@ -8,62 +8,6 @@
#include "compiler/translator/BuiltInFunctionEmulator.h"
#include "compiler/translator/BuiltInFunctionEmulatorHLSL.h"
#include "compiler/translator/SymbolTable.h"
-#include "compiler/translator/VersionGLSL.h"
-
-namespace sh
-{
-
-void InitBuiltInIsnanFunctionEmulatorForHLSLWorkarounds(BuiltInFunctionEmulator *emu,
- int targetGLSLVersion)
-{
- if (targetGLSLVersion < GLSL_VERSION_130)
- return;
-
- TType *float1 = new TType(EbtFloat);
- TType *float2 = new TType(EbtFloat, 2);
- TType *float3 = new TType(EbtFloat, 3);
- TType *float4 = new TType(EbtFloat, 4);
-
- emu->addEmulatedFunction(EOpIsNan, float1,
- "bool webgl_isnan_emu(float x)\n"
- "{\n"
- " return (x > 0.0 || x < 0.0) ? false : x != 0.0;\n"
- "}\n"
- "\n");
-
- emu->addEmulatedFunction(EOpIsNan, float2,
- "bool2 webgl_isnan_emu(float2 x)\n"
- "{\n"
- " bool2 isnan;\n"
- " for (int i = 0; i < 2; i++)\n"
- " {\n"
- " isnan[i] = (x[i] > 0.0 || x[i] < 0.0) ? false : x[i] != 0.0;\n"
- " }\n"
- " return isnan;\n"
- "}\n");
-
- emu->addEmulatedFunction(EOpIsNan, float3,
- "bool3 webgl_isnan_emu(float3 x)\n"
- "{\n"
- " bool3 isnan;\n"
- " for (int i = 0; i < 3; i++)\n"
- " {\n"
- " isnan[i] = (x[i] > 0.0 || x[i] < 0.0) ? false : x[i] != 0.0;\n"
- " }\n"
- " return isnan;\n"
- "}\n");
-
- emu->addEmulatedFunction(EOpIsNan, float4,
- "bool4 webgl_isnan_emu(float4 x)\n"
- "{\n"
- " bool4 isnan;\n"
- " for (int i = 0; i < 4; i++)\n"
- " {\n"
- " isnan[i] = (x[i] > 0.0 || x[i] < 0.0) ? false : x[i] != 0.0;\n"
- " }\n"
- " return isnan;\n"
- "}\n");
-}
void InitBuiltInFunctionEmulatorForHLSL(BuiltInFunctionEmulator *emu)
{
@@ -495,5 +439,3 @@ void InitBuiltInFunctionEmulatorForHLSL(BuiltInFunctionEmulator *emu)
"}\n");
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/BuiltInFunctionEmulatorHLSL.h b/gfx/angle/src/compiler/translator/BuiltInFunctionEmulatorHLSL.h
index 48da73f58..4c45a93dc 100755
--- a/gfx/angle/src/compiler/translator/BuiltInFunctionEmulatorHLSL.h
+++ b/gfx/angle/src/compiler/translator/BuiltInFunctionEmulatorHLSL.h
@@ -9,19 +9,8 @@
#include "GLSLANG/ShaderLang.h"
-namespace sh
-{
-
class BuiltInFunctionEmulator;
void InitBuiltInFunctionEmulatorForHLSL(BuiltInFunctionEmulator *emu);
-//
-// This works around isnan() bug on some Intel drivers.
-//
-void InitBuiltInIsnanFunctionEmulatorForHLSLWorkarounds(BuiltInFunctionEmulator *emu,
- int targetGLSLVersion);
-
-} // namespace sh
-
#endif // COMPILER_TRANSLATOR_BUILTINFUNCTIONEMULATORHLSL_H_
diff --git a/gfx/angle/src/compiler/translator/Cache.cpp b/gfx/angle/src/compiler/translator/Cache.cpp
index 094e3ff57..57a43700c 100755
--- a/gfx/angle/src/compiler/translator/Cache.cpp
+++ b/gfx/angle/src/compiler/translator/Cache.cpp
@@ -12,9 +12,6 @@
#include "common/debug.h"
#include "compiler/translator/Cache.h"
-namespace sh
-{
-
namespace
{
@@ -47,6 +44,7 @@ TCache::TypeKey::TypeKey(TBasicType basicType,
"TypeKey::value is too small");
const size_t MaxEnumValue = std::numeric_limits<EnumComponentType>::max();
+ UNUSED_ASSERTION_VARIABLE(MaxEnumValue);
// TODO: change to static_assert() once we deprecate MSVC 2013 support
ASSERT(MaxEnumValue >= EbtLast &&
@@ -100,5 +98,3 @@ const TType *TCache::getType(TBasicType basicType,
return type;
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/Cache.h b/gfx/angle/src/compiler/translator/Cache.h
index 9a5607f24..1d2abb77e 100755
--- a/gfx/angle/src/compiler/translator/Cache.h
+++ b/gfx/angle/src/compiler/translator/Cache.h
@@ -16,9 +16,6 @@
#include "compiler/translator/Types.h"
#include "compiler/translator/PoolAlloc.h"
-namespace sh
-{
-
class TCache
{
public:
@@ -90,6 +87,4 @@ class TCache
static TCache *sCache;
};
-} // namespace sh
-
#endif // COMPILER_TRANSLATOR_CACHE_H_
diff --git a/gfx/angle/src/compiler/translator/CallDAG.cpp b/gfx/angle/src/compiler/translator/CallDAG.cpp
index 00aa833b8..10f0eb937 100755
--- a/gfx/angle/src/compiler/translator/CallDAG.cpp
+++ b/gfx/angle/src/compiler/translator/CallDAG.cpp
@@ -11,9 +11,6 @@
#include "compiler/translator/CallDAG.h"
#include "compiler/translator/InfoSink.h"
-namespace sh
-{
-
// The CallDAGCreator does all the processing required to create the CallDAG
// structure so that the latter contains only the necessary variables.
class CallDAG::CallDAGCreator : public TIntermTraverser
@@ -47,7 +44,6 @@ class CallDAG::CallDAGCreator : public TIntermTraverser
skipped++;
}
}
-
ASSERT(mFunctions.size() == mCurrentIndex + skipped);
return INITDAG_SUCCESS;
}
@@ -79,8 +75,7 @@ class CallDAG::CallDAGCreator : public TIntermTraverser
record.callees.push_back(static_cast<int>(callee->index));
}
- (*idToIndex)[data.node->getFunctionSymbolInfo()->getId()] =
- static_cast<int>(data.index);
+ (*idToIndex)[data.node->getFunctionId()] = static_cast<int>(data.index);
}
}
@@ -97,39 +92,13 @@ class CallDAG::CallDAGCreator : public TIntermTraverser
}
std::set<CreatorFunctionData*> callees;
- TIntermFunctionDefinition *node;
+ TIntermAggregate *node;
TString name;
size_t index;
bool indexAssigned;
bool visiting;
};
- bool visitFunctionDefinition(Visit visit, TIntermFunctionDefinition *node) override
- {
- // Create the record if need be and remember the node.
- if (visit == PreVisit)
- {
- auto it = mFunctions.find(node->getFunctionSymbolInfo()->getName());
-
- if (it == mFunctions.end())
- {
- mCurrentFunction = &mFunctions[node->getFunctionSymbolInfo()->getName()];
- }
- else
- {
- mCurrentFunction = &it->second;
- }
-
- mCurrentFunction->node = node;
- mCurrentFunction->name = node->getFunctionSymbolInfo()->getName();
- }
- else if (visit == PostVisit)
- {
- mCurrentFunction = nullptr;
- }
- return true;
- }
-
// Aggregates the AST node for each function as well as the name of the functions called by it
bool visitAggregate(Visit visit, TIntermAggregate *node) override
{
@@ -139,10 +108,36 @@ class CallDAG::CallDAGCreator : public TIntermTraverser
if (visit == PreVisit)
{
// Function declaration, create an empty record.
- auto &record = mFunctions[node->getFunctionSymbolInfo()->getName()];
- record.name = node->getFunctionSymbolInfo()->getName();
+ auto& record = mFunctions[node->getName()];
+ record.name = node->getName();
}
break;
+ case EOpFunction:
+ {
+ // Function definition, create the record if need be and remember the node.
+ if (visit == PreVisit)
+ {
+ auto it = mFunctions.find(node->getName());
+
+ if (it == mFunctions.end())
+ {
+ mCurrentFunction = &mFunctions[node->getName()];
+ }
+ else
+ {
+ mCurrentFunction = &it->second;
+ }
+
+ mCurrentFunction->node = node;
+ mCurrentFunction->name = node->getName();
+
+ }
+ else if (visit == PostVisit)
+ {
+ mCurrentFunction = nullptr;
+ }
+ break;
+ }
case EOpFunctionCall:
{
// Function call, add the callees
@@ -151,7 +146,7 @@ class CallDAG::CallDAGCreator : public TIntermTraverser
// Do not handle calls to builtin functions
if (node->isUserDefined())
{
- auto it = mFunctions.find(node->getFunctionSymbolInfo()->getName());
+ auto it = mFunctions.find(node->getName());
ASSERT(it != mFunctions.end());
// We might be in a top-level function call to set a global variable
@@ -170,102 +165,52 @@ class CallDAG::CallDAGCreator : public TIntermTraverser
}
// Recursively assigns indices to a sub DAG
- InitResult assignIndicesInternal(CreatorFunctionData *root)
+ InitResult assignIndicesInternal(CreatorFunctionData *function)
{
- // Iterative implementation of the index assignment algorithm. A recursive version
- // would be prettier but since the CallDAG creation runs before the limiting of the
- // call depth, we might get stack overflows (computation of the call depth uses the
- // CallDAG).
+ ASSERT(function);
- ASSERT(root);
+ if (!function->node)
+ {
+ *mCreationInfo << "Undefined function '" << function->name
+ << ")' used in the following call chain:";
+ return INITDAG_UNDEFINED;
+ }
- if (root->indexAssigned)
+ if (function->indexAssigned)
{
return INITDAG_SUCCESS;
}
- // If we didn't have to detect recursion, functionsToProcess could be a simple queue
- // in which we add the function being processed's callees. However in order to detect
- // recursion we need to know which functions we are currently visiting. For that reason
- // functionsToProcess will look like a concatenation of segments of the form
- // [F visiting = true, subset of F callees with visiting = false] and the following
- // segment (if any) will be start with a callee of F.
- // This way we can remember when we started visiting a function, to put visiting back
- // to false.
- TVector<CreatorFunctionData *> functionsToProcess;
- functionsToProcess.push_back(root);
-
- InitResult result = INITDAG_SUCCESS;
-
- while (!functionsToProcess.empty())
+ if (function->visiting)
{
- CreatorFunctionData *function = functionsToProcess.back();
-
- if (function->visiting)
- {
- function->visiting = false;
- function->index = mCurrentIndex++;
- function->indexAssigned = true;
-
- functionsToProcess.pop_back();
- continue;
- }
-
- if (!function->node)
- {
- *mCreationInfo << "Undefined function '" << function->name
- << ")' used in the following call chain:";
- result = INITDAG_UNDEFINED;
- break;
- }
-
- if (function->indexAssigned)
- {
- functionsToProcess.pop_back();
- continue;
- }
-
- function->visiting = true;
-
- for (auto callee : function->callees)
+ if (mCreationInfo)
{
- functionsToProcess.push_back(callee);
-
- // Check if the callee is already being visited after pushing it so that it appears
- // in the chain printed in the info log.
- if (callee->visiting)
- {
- *mCreationInfo << "Recursive function call in the following call chain:";
- result = INITDAG_RECURSION;
- break;
- }
- }
-
- if (result != INITDAG_SUCCESS)
- {
- break;
+ *mCreationInfo << "Recursive function call in the following call chain:" << function->name;
}
+ return INITDAG_RECURSION;
}
+ function->visiting = true;
- // The call chain is made of the function we were visiting when the error was detected.
- if (result != INITDAG_SUCCESS)
+ for (auto &callee : function->callees)
{
- bool first = true;
- for (auto function : functionsToProcess)
+ InitResult result = assignIndicesInternal(callee);
+ if (result != INITDAG_SUCCESS)
{
- if (function->visiting)
+ // We know that there is an issue with the call chain in the AST,
+ // print the link of the chain we were processing.
+ if (mCreationInfo)
{
- if (!first)
- {
- *mCreationInfo << " -> ";
- }
- *mCreationInfo << function->name << ")";
- first = false;
+ *mCreationInfo << " <- " << function->name << ")";
}
+ return result;
}
}
- return result;
+ function->index = mCurrentIndex++;
+ function->indexAssigned = true;
+
+ function->visiting = false;
+ return INITDAG_SUCCESS;
}
TInfoSinkBase *mCreationInfo;
@@ -287,9 +232,13 @@ CallDAG::~CallDAG()
const size_t CallDAG::InvalidIndex = std::numeric_limits<size_t>::max();
-size_t CallDAG::findIndex(const TFunctionSymbolInfo *functionInfo) const
+size_t CallDAG::findIndex(const TIntermAggregate *function) const
{
- auto it = mFunctionIdToIndex.find(functionInfo->getId());
+ TOperator op = function->getOp();
+ ASSERT(op == EOpPrototype || op == EOpFunction || op == EOpFunctionCall);
+ UNUSED_ASSERTION_VARIABLE(op);
+
+ auto it = mFunctionIdToIndex.find(function->getFunctionId());
if (it == mFunctionIdToIndex.end())
{
@@ -309,7 +258,7 @@ const CallDAG::Record &CallDAG::getRecordFromIndex(size_t index) const
const CallDAG::Record &CallDAG::getRecord(const TIntermAggregate *function) const
{
- size_t index = findIndex(function->getFunctionSymbolInfo());
+ size_t index = findIndex(function);
ASSERT(index != InvalidIndex && index < mRecords.size());
return mRecords[index];
}
@@ -327,8 +276,6 @@ void CallDAG::clear()
CallDAG::InitResult CallDAG::init(TIntermNode *root, TInfoSinkBase *info)
{
- ASSERT(info);
-
CallDAGCreator creator(info);
// Creates the mapping of functions to callees
@@ -344,5 +291,3 @@ CallDAG::InitResult CallDAG::init(TIntermNode *root, TInfoSinkBase *info)
creator.fillDataStructures(&mRecords, &mFunctionIdToIndex);
return INITDAG_SUCCESS;
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/CallDAG.h b/gfx/angle/src/compiler/translator/CallDAG.h
index 90c056878..06c377db0 100755
--- a/gfx/angle/src/compiler/translator/CallDAG.h
+++ b/gfx/angle/src/compiler/translator/CallDAG.h
@@ -16,8 +16,6 @@
#include "compiler/translator/IntermNode.h"
#include "compiler/translator/VariableInfo.h"
-namespace sh
-{
// The translator needs to analyze the the graph of the function calls
// to run checks and analyses; since in GLSL recursion is not allowed
@@ -43,7 +41,7 @@ class CallDAG : angle::NonCopyable
struct Record
{
std::string name;
- TIntermFunctionDefinition *node;
+ TIntermAggregate *node;
std::vector<int> callees;
};
@@ -59,7 +57,7 @@ class CallDAG : angle::NonCopyable
InitResult init(TIntermNode *root, TInfoSinkBase *info);
// Returns InvalidIndex if the function wasn't found
- size_t findIndex(const TFunctionSymbolInfo *functionInfo) const;
+ size_t findIndex(const TIntermAggregate *function) const;
const Record &getRecordFromIndex(size_t index) const;
const Record &getRecord(const TIntermAggregate *function) const;
@@ -74,6 +72,4 @@ class CallDAG : angle::NonCopyable
class CallDAGCreator;
};
-} // namespace sh
-
#endif // COMPILER_TRANSLATOR_CALLDAG_H_
diff --git a/gfx/angle/src/compiler/translator/CodeGen.cpp b/gfx/angle/src/compiler/translator/CodeGen.cpp
index 22f2afc98..f099bccf1 100755
--- a/gfx/angle/src/compiler/translator/CodeGen.cpp
+++ b/gfx/angle/src/compiler/translator/CodeGen.cpp
@@ -6,79 +6,71 @@
#ifdef ANGLE_ENABLE_ESSL
#include "compiler/translator/TranslatorESSL.h"
-#endif // ANGLE_ENABLE_ESSL
+#endif
#ifdef ANGLE_ENABLE_GLSL
#include "compiler/translator/TranslatorGLSL.h"
-#endif // ANGLE_ENABLE_GLSL
+#endif
#ifdef ANGLE_ENABLE_HLSL
#include "compiler/translator/TranslatorHLSL.h"
-#endif // ANGLE_ENABLE_HLSL
-
-namespace sh
-{
+#endif // ANGLE_ENABLE_HLSL
//
// This function must be provided to create the actual
// compile object used by higher level code. It returns
// a subclass of TCompiler.
//
-TCompiler *ConstructCompiler(sh::GLenum type, ShShaderSpec spec, ShShaderOutput output)
+TCompiler* ConstructCompiler(
+ sh::GLenum type, ShShaderSpec spec, ShShaderOutput output)
{
- switch (output)
- {
- case SH_ESSL_OUTPUT:
+ switch (output) {
+ case SH_ESSL_OUTPUT:
#ifdef ANGLE_ENABLE_ESSL
- return new TranslatorESSL(type, spec);
+ return new TranslatorESSL(type, spec);
#else
- // This compiler is not supported in this configuration. Return NULL per the
- // sh::ConstructCompiler API.
- return nullptr;
-#endif // ANGLE_ENABLE_ESSL
-
- case SH_GLSL_130_OUTPUT:
- case SH_GLSL_140_OUTPUT:
- case SH_GLSL_150_CORE_OUTPUT:
- case SH_GLSL_330_CORE_OUTPUT:
- case SH_GLSL_400_CORE_OUTPUT:
- case SH_GLSL_410_CORE_OUTPUT:
- case SH_GLSL_420_CORE_OUTPUT:
- case SH_GLSL_430_CORE_OUTPUT:
- case SH_GLSL_440_CORE_OUTPUT:
- case SH_GLSL_450_CORE_OUTPUT:
- case SH_GLSL_COMPATIBILITY_OUTPUT:
+ // This compiler is not supported in this
+ // configuration. Return NULL per the ShConstructCompiler API.
+ return nullptr;
+#endif // ANGLE_ENABLE_ESSL
+ case SH_GLSL_130_OUTPUT:
+ case SH_GLSL_140_OUTPUT:
+ case SH_GLSL_150_CORE_OUTPUT:
+ case SH_GLSL_330_CORE_OUTPUT:
+ case SH_GLSL_400_CORE_OUTPUT:
+ case SH_GLSL_410_CORE_OUTPUT:
+ case SH_GLSL_420_CORE_OUTPUT:
+ case SH_GLSL_430_CORE_OUTPUT:
+ case SH_GLSL_440_CORE_OUTPUT:
+ case SH_GLSL_450_CORE_OUTPUT:
+ case SH_GLSL_COMPATIBILITY_OUTPUT:
#ifdef ANGLE_ENABLE_GLSL
- return new TranslatorGLSL(type, spec, output);
+ return new TranslatorGLSL(type, spec, output);
#else
- // This compiler is not supported in this configuration. Return NULL per the
- // sh::ConstructCompiler API.
- return nullptr;
-#endif // ANGLE_ENABLE_GLSL
-
- case SH_HLSL_3_0_OUTPUT:
- case SH_HLSL_4_1_OUTPUT:
- case SH_HLSL_4_0_FL9_3_OUTPUT:
+ // This compiler is not supported in this
+ // configuration. Return NULL per the ShConstructCompiler API.
+ return nullptr;
+#endif // ANGLE_ENABLE_GLSL
+ case SH_HLSL_3_0_OUTPUT:
+ case SH_HLSL_4_1_OUTPUT:
+ case SH_HLSL_4_0_FL9_3_OUTPUT:
#ifdef ANGLE_ENABLE_HLSL
- return new TranslatorHLSL(type, spec, output);
+ return new TranslatorHLSL(type, spec, output);
#else
- // This compiler is not supported in this configuration. Return NULL per the
- // sh::ConstructCompiler API.
- return nullptr;
-#endif // ANGLE_ENABLE_HLSL
-
- default:
- // Unknown format. Return NULL per the sh::ConstructCompiler API.
- return nullptr;
+ // This compiler is not supported in this
+ // configuration. Return NULL per the ShConstructCompiler API.
+ return nullptr;
+#endif // ANGLE_ENABLE_HLSL
+ default:
+ // Unknown format. Return NULL per the ShConstructCompiler API.
+ return nullptr;
}
}
//
// Delete the compiler made by ConstructCompiler
//
-void DeleteCompiler(TCompiler *compiler)
+void DeleteCompiler(TCompiler* compiler)
{
- SafeDelete(compiler);
+ delete compiler;
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/Common.h b/gfx/angle/src/compiler/translator/Common.h
index 853317891..60223232a 100755
--- a/gfx/angle/src/compiler/translator/Common.h
+++ b/gfx/angle/src/compiler/translator/Common.h
@@ -18,9 +18,6 @@
#include "common/debug.h"
#include "compiler/translator/PoolAlloc.h"
-namespace sh
-{
-
struct TSourceLoc {
int first_file;
int first_line;
@@ -95,6 +92,4 @@ inline TString str(T i)
return buffer;
}
-} // namespace sh
-
#endif // COMPILER_TRANSLATOR_COMMON_H_
diff --git a/gfx/angle/src/compiler/translator/Compiler.cpp b/gfx/angle/src/compiler/translator/Compiler.cpp
index e085ed588..0257dd3a7 100755
--- a/gfx/angle/src/compiler/translator/Compiler.cpp
+++ b/gfx/angle/src/compiler/translator/Compiler.cpp
@@ -4,18 +4,11 @@
// found in the LICENSE file.
//
-#include "compiler/translator/Compiler.h"
-
-#include <sstream>
-
-#include "angle_gl.h"
-#include "common/utilities.h"
-#include "compiler/translator/AddAndTrueToLoopCondition.h"
#include "compiler/translator/Cache.h"
+#include "compiler/translator/Compiler.h"
#include "compiler/translator/CallDAG.h"
#include "compiler/translator/DeferGlobalInitializers.h"
#include "compiler/translator/EmulateGLFragColorBroadcast.h"
-#include "compiler/translator/EmulatePrecision.h"
#include "compiler/translator/ForLoopUnroll.h"
#include "compiler/translator/Initialize.h"
#include "compiler/translator/InitializeParseContext.h"
@@ -23,100 +16,41 @@
#include "compiler/translator/ParseContext.h"
#include "compiler/translator/PruneEmptyDeclarations.h"
#include "compiler/translator/RegenerateStructNames.h"
-#include "compiler/translator/RemoveInvariantDeclaration.h"
#include "compiler/translator/RemovePow.h"
+#include "compiler/translator/RenameFunction.h"
#include "compiler/translator/RewriteDoWhile.h"
#include "compiler/translator/ScalarizeVecAndMatConstructorArgs.h"
#include "compiler/translator/UnfoldShortCircuitAST.h"
-#include "compiler/translator/UseInterfaceBlockFields.h"
#include "compiler/translator/ValidateLimitations.h"
#include "compiler/translator/ValidateMaxParameters.h"
#include "compiler/translator/ValidateOutputs.h"
#include "compiler/translator/VariablePacker.h"
+#include "compiler/translator/depgraph/DependencyGraph.h"
+#include "compiler/translator/depgraph/DependencyGraphOutput.h"
+#include "compiler/translator/timing/RestrictFragmentShaderTiming.h"
+#include "compiler/translator/timing/RestrictVertexShaderTiming.h"
#include "third_party/compiler/ArrayBoundsClamper.h"
-
-namespace sh
-{
-
-namespace
-{
-
-#if defined(ANGLE_ENABLE_FUZZER_CORPUS_OUTPUT)
-void DumpFuzzerCase(char const *const *shaderStrings,
- size_t numStrings,
- uint32_t type,
- uint32_t spec,
- uint32_t output,
- uint64_t options)
-{
- static int fileIndex = 0;
-
- std::ostringstream o;
- o << "corpus/" << fileIndex++ << ".sample";
- std::string s = o.str();
-
- // Must match the input format of the fuzzer
- FILE *f = fopen(s.c_str(), "w");
- fwrite(&type, sizeof(type), 1, f);
- fwrite(&spec, sizeof(spec), 1, f);
- fwrite(&output, sizeof(output), 1, f);
- fwrite(&options, sizeof(options), 1, f);
-
- char zero[128 - 20] = {0};
- fwrite(&zero, 128 - 20, 1, f);
-
- for (size_t i = 0; i < numStrings; i++)
- {
- fwrite(shaderStrings[i], sizeof(char), strlen(shaderStrings[i]), f);
- }
- fwrite(&zero, 1, 1, f);
-
- fclose(f);
-}
-#endif // defined(ANGLE_ENABLE_FUZZER_CORPUS_OUTPUT)
-} // anonymous namespace
+#include "angle_gl.h"
+#include "common/utilities.h"
bool IsWebGLBasedSpec(ShShaderSpec spec)
{
- return (spec == SH_WEBGL_SPEC || spec == SH_WEBGL2_SPEC || spec == SH_WEBGL3_SPEC);
+ return (spec == SH_WEBGL_SPEC || spec == SH_CSS_SHADERS_SPEC || spec == SH_WEBGL2_SPEC ||
+ spec == SH_WEBGL3_SPEC);
}
bool IsGLSL130OrNewer(ShShaderOutput output)
{
- return (output == SH_GLSL_130_OUTPUT || output == SH_GLSL_140_OUTPUT ||
- output == SH_GLSL_150_CORE_OUTPUT || output == SH_GLSL_330_CORE_OUTPUT ||
- output == SH_GLSL_400_CORE_OUTPUT || output == SH_GLSL_410_CORE_OUTPUT ||
- output == SH_GLSL_420_CORE_OUTPUT || output == SH_GLSL_430_CORE_OUTPUT ||
- output == SH_GLSL_440_CORE_OUTPUT || output == SH_GLSL_450_CORE_OUTPUT);
-}
-
-bool IsGLSL420OrNewer(ShShaderOutput output)
-{
- return (output == SH_GLSL_420_CORE_OUTPUT || output == SH_GLSL_430_CORE_OUTPUT ||
- output == SH_GLSL_440_CORE_OUTPUT || output == SH_GLSL_450_CORE_OUTPUT);
-}
-
-bool IsGLSL410OrOlder(ShShaderOutput output)
-{
- return (output == SH_GLSL_130_OUTPUT || output == SH_GLSL_140_OUTPUT ||
- output == SH_GLSL_150_CORE_OUTPUT || output == SH_GLSL_330_CORE_OUTPUT ||
- output == SH_GLSL_400_CORE_OUTPUT || output == SH_GLSL_410_CORE_OUTPUT);
-}
-
-bool RemoveInvariant(sh::GLenum shaderType,
- int shaderVersion,
- ShShaderOutput outputType,
- ShCompileOptions compileOptions)
-{
- if ((compileOptions & SH_DONT_REMOVE_INVARIANT_FOR_FRAGMENT_INPUT) == 0 &&
- shaderType == GL_FRAGMENT_SHADER && IsGLSL420OrNewer(outputType))
- return true;
-
- if ((compileOptions & SH_REMOVE_INVARIANT_AND_CENTROID_FOR_ESSL3) != 0 &&
- shaderVersion >= 300 && shaderType == GL_VERTEX_SHADER && IsGLSL410OrOlder(outputType))
- return true;
-
- return false;
+ return (output == SH_GLSL_130_OUTPUT ||
+ output == SH_GLSL_140_OUTPUT ||
+ output == SH_GLSL_150_CORE_OUTPUT ||
+ output == SH_GLSL_330_CORE_OUTPUT ||
+ output == SH_GLSL_400_CORE_OUTPUT ||
+ output == SH_GLSL_410_CORE_OUTPUT ||
+ output == SH_GLSL_420_CORE_OUTPUT ||
+ output == SH_GLSL_430_CORE_OUTPUT ||
+ output == SH_GLSL_440_CORE_OUTPUT ||
+ output == SH_GLSL_450_CORE_OUTPUT);
}
size_t GetGlobalMaxTokenSize(ShShaderSpec spec)
@@ -125,10 +59,11 @@ size_t GetGlobalMaxTokenSize(ShShaderSpec spec)
// size undefined. ES3 defines a max size of 1024 characters.
switch (spec)
{
- case SH_WEBGL_SPEC:
- return 256;
- default:
- return 1024;
+ case SH_WEBGL_SPEC:
+ case SH_CSS_SHADERS_SPEC:
+ return 256;
+ default:
+ return 1024;
}
}
@@ -174,18 +109,19 @@ int MapSpecToShaderVersion(ShShaderSpec spec)
{
switch (spec)
{
- case SH_GLES2_SPEC:
- case SH_WEBGL_SPEC:
- return 100;
- case SH_GLES3_SPEC:
- case SH_WEBGL2_SPEC:
- return 300;
- case SH_GLES3_1_SPEC:
- case SH_WEBGL3_SPEC:
- return 310;
- default:
- UNREACHABLE();
- return 0;
+ case SH_GLES2_SPEC:
+ case SH_WEBGL_SPEC:
+ case SH_CSS_SHADERS_SPEC:
+ return 100;
+ case SH_GLES3_SPEC:
+ case SH_WEBGL2_SPEC:
+ return 300;
+ case SH_GLES3_1_SPEC:
+ case SH_WEBGL3_SPEC:
+ return 310;
+ default:
+ UNREACHABLE();
+ return 0;
}
}
@@ -226,7 +162,7 @@ TCompiler::~TCompiler()
{
}
-bool TCompiler::shouldRunLoopAndIndexingValidation(ShCompileOptions compileOptions) const
+bool TCompiler::shouldRunLoopAndIndexingValidation(int compileOptions) const
{
// If compiling an ESSL 1.00 shader for WebGL, or if its been requested through the API,
// validate loop and indexing as well (to verify that the shader only uses minimal functionality
@@ -261,16 +197,15 @@ bool TCompiler::Init(const ShBuiltInResources& resources)
return true;
}
-TIntermBlock *TCompiler::compileTreeForTesting(const char *const shaderStrings[],
- size_t numStrings,
- ShCompileOptions compileOptions)
+TIntermNode *TCompiler::compileTreeForTesting(const char* const shaderStrings[],
+ size_t numStrings, int compileOptions)
{
return compileTreeImpl(shaderStrings, numStrings, compileOptions);
}
-TIntermBlock *TCompiler::compileTreeImpl(const char *const shaderStrings[],
- size_t numStrings,
- const ShCompileOptions compileOptions)
+TIntermNode *TCompiler::compileTreeImpl(const char *const shaderStrings[],
+ size_t numStrings,
+ const int compileOptions)
{
clearResults();
@@ -288,7 +223,8 @@ TIntermBlock *TCompiler::compileTreeImpl(const char *const shaderStrings[],
++firstSource;
}
- TParseContext parseContext(symbolTable, extensionBehavior, shaderType, shaderSpec,
+ TIntermediate intermediate(infoSink);
+ TParseContext parseContext(symbolTable, extensionBehavior, intermediate, shaderType, shaderSpec,
compileOptions, true, infoSink, getResources());
parseContext.setFragmentPrecisionHighOnESSL1(fragmentPrecisionHigh);
@@ -311,7 +247,7 @@ TIntermBlock *TCompiler::compileTreeImpl(const char *const shaderStrings[],
success = false;
}
- TIntermBlock *root = nullptr;
+ TIntermNode *root = nullptr;
if (success)
{
@@ -322,6 +258,7 @@ TIntermBlock *TCompiler::compileTreeImpl(const char *const shaderStrings[],
mComputeShaderLocalSize = parseContext.getComputeShaderLocalSize();
root = parseContext.getTreeRoot();
+ root = intermediate.postProcess(root);
// Highp might have been auto-enabled based on shader version
fragmentPrecisionHigh = parseContext.getFragmentPrecisionHigh();
@@ -358,17 +295,11 @@ TIntermBlock *TCompiler::compileTreeImpl(const char *const shaderStrings[],
if (success && shouldRunLoopAndIndexingValidation(compileOptions))
success = validateLimitations(root);
- // Fail compilation if precision emulation not supported.
- if (success && getResources().WEBGL_debug_shader_precision &&
- getPragma().debugShaderPrecision)
- {
- if (!EmulatePrecision::SupportedInLanguage(outputType))
- {
- infoSink.info.prefix(EPrefixError);
- infoSink.info << "Precision emulation not supported for this output type.";
- success = false;
- }
- }
+ if (success && (compileOptions & SH_TIMING_RESTRICTIONS))
+ success = enforceTimingRestrictions(root, (compileOptions & SH_DEPENDENCY_GRAPH) != 0);
+
+ if (success && shaderSpec == SH_CSS_SHADERS_SPEC)
+ rewriteCSSShader(root);
// Unroll for-loop markup needs to happen after validateLimitations pass.
if (success && (compileOptions & SH_UNROLL_FOR_LOOP_WITH_INTEGER_INDEX))
@@ -410,16 +341,10 @@ TIntermBlock *TCompiler::compileTreeImpl(const char *const shaderStrings[],
(outputType == SH_GLSL_COMPATIBILITY_OUTPUT)))
initializeGLPosition(root);
- if (success && RemoveInvariant(shaderType, shaderVersion, outputType, compileOptions))
- sh::RemoveInvariantDeclaration(root);
-
// This pass might emit short circuits so keep it before the short circuit unfolding
if (success && (compileOptions & SH_REWRITE_DO_WHILE_LOOPS))
RewriteDoWhile(root, getTemporaryIndex());
- if (success && (compileOptions & SH_ADD_AND_TRUE_TO_LOOP_CONDITION))
- sh::AddAndTrueToLoopCondition(root);
-
if (success && (compileOptions & SH_UNFOLD_SHORT_CIRCUIT))
{
UnfoldShortCircuitAST unfoldShortCircuit;
@@ -435,10 +360,6 @@ TIntermBlock *TCompiler::compileTreeImpl(const char *const shaderStrings[],
if (success && shouldCollectVariables(compileOptions))
{
collectVariables(root);
- if (compileOptions & SH_USE_UNUSED_STANDARD_SHARED_BLOCKS)
- {
- useAllMembersInUnusedStandardAndSharedBlocks(root);
- }
if (compileOptions & SH_ENFORCE_PACKING_RESTRICTIONS)
{
success = enforcePackingRestrictions();
@@ -456,8 +377,9 @@ TIntermBlock *TCompiler::compileTreeImpl(const char *const shaderStrings[],
if (success && (compileOptions & SH_SCALARIZE_VEC_AND_MAT_CONSTRUCTOR_ARGS))
{
- ScalarizeVecAndMatConstructorArgs(root, shaderType, fragmentPrecisionHigh,
- &mTemporaryIndex);
+ ScalarizeVecAndMatConstructorArgs scalarizer(
+ shaderType, fragmentPrecisionHigh);
+ root->traverse(&scalarizer);
}
if (success && (compileOptions & SH_REGENERATE_STRUCT_NAMES))
@@ -486,18 +408,12 @@ TIntermBlock *TCompiler::compileTreeImpl(const char *const shaderStrings[],
return NULL;
}
-bool TCompiler::compile(const char *const shaderStrings[],
- size_t numStrings,
- ShCompileOptions compileOptionsIn)
+bool TCompiler::compile(const char *const shaderStrings[], size_t numStrings, int compileOptionsIn)
{
-#if defined(ANGLE_ENABLE_FUZZER_CORPUS_OUTPUT)
- DumpFuzzerCase(shaderStrings, numStrings, shaderType, shaderSpec, outputType, compileOptionsIn);
-#endif // defined(ANGLE_ENABLE_FUZZER_CORPUS_OUTPUT)
-
if (numStrings == 0)
return true;
- ShCompileOptions compileOptions = compileOptionsIn;
+ int compileOptions = compileOptionsIn;
// Apply key workarounds.
if (shouldFlattenPragmaStdglInvariantAll())
@@ -506,19 +422,8 @@ bool TCompiler::compile(const char *const shaderStrings[],
compileOptions |= SH_FLATTEN_PRAGMA_STDGL_INVARIANT_ALL;
}
- ShCompileOptions unrollFlags =
- SH_UNROLL_FOR_LOOP_WITH_INTEGER_INDEX | SH_UNROLL_FOR_LOOP_WITH_SAMPLER_ARRAY_INDEX;
- if ((compileOptions & SH_ADD_AND_TRUE_TO_LOOP_CONDITION) != 0 &&
- (compileOptions & unrollFlags) != 0)
- {
- infoSink.info.prefix(EPrefixError);
- infoSink.info
- << "Unsupported compile flag combination: unroll & ADD_TRUE_TO_LOOP_CONDITION";
- return false;
- }
-
TScopedPoolAllocator scopedAlloc(&allocator);
- TIntermBlock *root = compileTreeImpl(shaderStrings, numStrings, compileOptions);
+ TIntermNode *root = compileTreeImpl(shaderStrings, numStrings, compileOptions);
if (root)
{
@@ -547,26 +452,32 @@ bool TCompiler::InitBuiltInSymbolTable(const ShBuiltInResources &resources)
symbolTable.push(); // ESSL3_1_BUILTINS
TPublicType integer;
- integer.initializeBasicType(EbtInt);
+ integer.type = EbtInt;
+ integer.primarySize = 1;
+ integer.secondarySize = 1;
+ integer.array = false;
TPublicType floatingPoint;
- floatingPoint.initializeBasicType(EbtFloat);
+ floatingPoint.type = EbtFloat;
+ floatingPoint.primarySize = 1;
+ floatingPoint.secondarySize = 1;
+ floatingPoint.array = false;
- switch (shaderType)
+ switch(shaderType)
{
- case GL_FRAGMENT_SHADER:
- symbolTable.setDefaultPrecision(integer, EbpMedium);
- break;
- case GL_VERTEX_SHADER:
- symbolTable.setDefaultPrecision(integer, EbpHigh);
- symbolTable.setDefaultPrecision(floatingPoint, EbpHigh);
- break;
- case GL_COMPUTE_SHADER:
- symbolTable.setDefaultPrecision(integer, EbpHigh);
- symbolTable.setDefaultPrecision(floatingPoint, EbpHigh);
- break;
- default:
- assert(false && "Language not supported");
+ case GL_FRAGMENT_SHADER:
+ symbolTable.setDefaultPrecision(integer, EbpMedium);
+ break;
+ case GL_VERTEX_SHADER:
+ symbolTable.setDefaultPrecision(integer, EbpHigh);
+ symbolTable.setDefaultPrecision(floatingPoint, EbpHigh);
+ break;
+ case GL_COMPUTE_SHADER:
+ symbolTable.setDefaultPrecision(integer, EbpHigh);
+ symbolTable.setDefaultPrecision(floatingPoint, EbpHigh);
+ break;
+ default:
+ assert(false && "Language not supported");
}
// Set defaults for sampler types that have default precision, even those that are
// only available if an extension exists.
@@ -589,7 +500,10 @@ void TCompiler::initSamplerDefaultPrecision(TBasicType samplerType)
{
ASSERT(samplerType > EbtGuardSamplerBegin && samplerType < EbtGuardSamplerEnd);
TPublicType sampler;
- sampler.initializeBasicType(samplerType);
+ sampler.primarySize = 1;
+ sampler.secondarySize = 1;
+ sampler.array = false;
+ sampler.type = samplerType;
symbolTable.setDefaultPrecision(sampler, EbpLow);
}
@@ -599,60 +513,60 @@ void TCompiler::setResourceString()
// clang-format off
strstream << ":MaxVertexAttribs:" << compileResources.MaxVertexAttribs
- << ":MaxVertexUniformVectors:" << compileResources.MaxVertexUniformVectors
- << ":MaxVaryingVectors:" << compileResources.MaxVaryingVectors
- << ":MaxVertexTextureImageUnits:" << compileResources.MaxVertexTextureImageUnits
- << ":MaxCombinedTextureImageUnits:" << compileResources.MaxCombinedTextureImageUnits
- << ":MaxTextureImageUnits:" << compileResources.MaxTextureImageUnits
- << ":MaxFragmentUniformVectors:" << compileResources.MaxFragmentUniformVectors
- << ":MaxDrawBuffers:" << compileResources.MaxDrawBuffers
- << ":OES_standard_derivatives:" << compileResources.OES_standard_derivatives
- << ":OES_EGL_image_external:" << compileResources.OES_EGL_image_external
- << ":OES_EGL_image_external_essl3:" << compileResources.OES_EGL_image_external_essl3
- << ":NV_EGL_stream_consumer_external:" << compileResources.NV_EGL_stream_consumer_external
- << ":ARB_texture_rectangle:" << compileResources.ARB_texture_rectangle
- << ":EXT_draw_buffers:" << compileResources.EXT_draw_buffers
- << ":FragmentPrecisionHigh:" << compileResources.FragmentPrecisionHigh
- << ":MaxExpressionComplexity:" << compileResources.MaxExpressionComplexity
- << ":MaxCallStackDepth:" << compileResources.MaxCallStackDepth
- << ":MaxFunctionParameters:" << compileResources.MaxFunctionParameters
- << ":EXT_blend_func_extended:" << compileResources.EXT_blend_func_extended
- << ":EXT_frag_depth:" << compileResources.EXT_frag_depth
- << ":EXT_shader_texture_lod:" << compileResources.EXT_shader_texture_lod
- << ":EXT_shader_framebuffer_fetch:" << compileResources.EXT_shader_framebuffer_fetch
- << ":NV_shader_framebuffer_fetch:" << compileResources.NV_shader_framebuffer_fetch
- << ":ARM_shader_framebuffer_fetch:" << compileResources.ARM_shader_framebuffer_fetch
- << ":MaxVertexOutputVectors:" << compileResources.MaxVertexOutputVectors
- << ":MaxFragmentInputVectors:" << compileResources.MaxFragmentInputVectors
- << ":MinProgramTexelOffset:" << compileResources.MinProgramTexelOffset
- << ":MaxProgramTexelOffset:" << compileResources.MaxProgramTexelOffset
- << ":MaxDualSourceDrawBuffers:" << compileResources.MaxDualSourceDrawBuffers
- << ":NV_draw_buffers:" << compileResources.NV_draw_buffers
- << ":WEBGL_debug_shader_precision:" << compileResources.WEBGL_debug_shader_precision
- << ":MaxImageUnits:" << compileResources.MaxImageUnits
- << ":MaxVertexImageUniforms:" << compileResources.MaxVertexImageUniforms
- << ":MaxFragmentImageUniforms:" << compileResources.MaxFragmentImageUniforms
- << ":MaxComputeImageUniforms:" << compileResources.MaxComputeImageUniforms
- << ":MaxCombinedImageUniforms:" << compileResources.MaxCombinedImageUniforms
- << ":MaxCombinedShaderOutputResources:" << compileResources.MaxCombinedShaderOutputResources
- << ":MaxComputeWorkGroupCountX:" << compileResources.MaxComputeWorkGroupCount[0]
- << ":MaxComputeWorkGroupCountY:" << compileResources.MaxComputeWorkGroupCount[1]
- << ":MaxComputeWorkGroupCountZ:" << compileResources.MaxComputeWorkGroupCount[2]
- << ":MaxComputeWorkGroupSizeX:" << compileResources.MaxComputeWorkGroupSize[0]
- << ":MaxComputeWorkGroupSizeY:" << compileResources.MaxComputeWorkGroupSize[1]
- << ":MaxComputeWorkGroupSizeZ:" << compileResources.MaxComputeWorkGroupSize[2]
- << ":MaxComputeUniformComponents:" << compileResources.MaxComputeUniformComponents
- << ":MaxComputeTextureImageUnits:" << compileResources.MaxComputeTextureImageUnits
- << ":MaxComputeAtomicCounters:" << compileResources.MaxComputeAtomicCounters
- << ":MaxComputeAtomicCounterBuffers:" << compileResources.MaxComputeAtomicCounterBuffers
- << ":MaxVertexAtomicCounters:" << compileResources.MaxVertexAtomicCounters
- << ":MaxFragmentAtomicCounters:" << compileResources.MaxFragmentAtomicCounters
- << ":MaxCombinedAtomicCounters:" << compileResources.MaxCombinedAtomicCounters
- << ":MaxAtomicCounterBindings:" << compileResources.MaxAtomicCounterBindings
- << ":MaxVertexAtomicCounterBuffers:" << compileResources.MaxVertexAtomicCounterBuffers
- << ":MaxFragmentAtomicCounterBuffers:" << compileResources.MaxFragmentAtomicCounterBuffers
- << ":MaxCombinedAtomicCounterBuffers:" << compileResources.MaxCombinedAtomicCounterBuffers
- << ":MaxAtomicCounterBufferSize:" << compileResources.MaxAtomicCounterBufferSize;
+ << ":MaxVertexUniformVectors:" << compileResources.MaxVertexUniformVectors
+ << ":MaxVaryingVectors:" << compileResources.MaxVaryingVectors
+ << ":MaxVertexTextureImageUnits:" << compileResources.MaxVertexTextureImageUnits
+ << ":MaxCombinedTextureImageUnits:" << compileResources.MaxCombinedTextureImageUnits
+ << ":MaxTextureImageUnits:" << compileResources.MaxTextureImageUnits
+ << ":MaxFragmentUniformVectors:" << compileResources.MaxFragmentUniformVectors
+ << ":MaxDrawBuffers:" << compileResources.MaxDrawBuffers
+ << ":OES_standard_derivatives:" << compileResources.OES_standard_derivatives
+ << ":OES_EGL_image_external:" << compileResources.OES_EGL_image_external
+ << ":OES_EGL_image_external_essl3:" << compileResources.OES_EGL_image_external_essl3
+ << ":NV_EGL_stream_consumer_external:" << compileResources.NV_EGL_stream_consumer_external
+ << ":ARB_texture_rectangle:" << compileResources.ARB_texture_rectangle
+ << ":EXT_draw_buffers:" << compileResources.EXT_draw_buffers
+ << ":FragmentPrecisionHigh:" << compileResources.FragmentPrecisionHigh
+ << ":MaxExpressionComplexity:" << compileResources.MaxExpressionComplexity
+ << ":MaxCallStackDepth:" << compileResources.MaxCallStackDepth
+ << ":MaxFunctionParameters:" << compileResources.MaxFunctionParameters
+ << ":EXT_blend_func_extended:" << compileResources.EXT_blend_func_extended
+ << ":EXT_frag_depth:" << compileResources.EXT_frag_depth
+ << ":EXT_shader_texture_lod:" << compileResources.EXT_shader_texture_lod
+ << ":EXT_shader_framebuffer_fetch:" << compileResources.EXT_shader_framebuffer_fetch
+ << ":NV_shader_framebuffer_fetch:" << compileResources.NV_shader_framebuffer_fetch
+ << ":ARM_shader_framebuffer_fetch:" << compileResources.ARM_shader_framebuffer_fetch
+ << ":MaxVertexOutputVectors:" << compileResources.MaxVertexOutputVectors
+ << ":MaxFragmentInputVectors:" << compileResources.MaxFragmentInputVectors
+ << ":MinProgramTexelOffset:" << compileResources.MinProgramTexelOffset
+ << ":MaxProgramTexelOffset:" << compileResources.MaxProgramTexelOffset
+ << ":MaxDualSourceDrawBuffers:" << compileResources.MaxDualSourceDrawBuffers
+ << ":NV_draw_buffers:" << compileResources.NV_draw_buffers
+ << ":WEBGL_debug_shader_precision:" << compileResources.WEBGL_debug_shader_precision
+ << ":MaxImageUnits:" << compileResources.MaxImageUnits
+ << ":MaxVertexImageUniforms:" << compileResources.MaxVertexImageUniforms
+ << ":MaxFragmentImageUniforms:" << compileResources.MaxFragmentImageUniforms
+ << ":MaxComputeImageUniforms:" << compileResources.MaxComputeImageUniforms
+ << ":MaxCombinedImageUniforms:" << compileResources.MaxCombinedImageUniforms
+ << ":MaxCombinedShaderOutputResources:" << compileResources.MaxCombinedShaderOutputResources
+ << ":MaxComputeWorkGroupCountX:" << compileResources.MaxComputeWorkGroupCount[0]
+ << ":MaxComputeWorkGroupCountY:" << compileResources.MaxComputeWorkGroupCount[1]
+ << ":MaxComputeWorkGroupCountZ:" << compileResources.MaxComputeWorkGroupCount[2]
+ << ":MaxComputeWorkGroupSizeX:" << compileResources.MaxComputeWorkGroupSize[0]
+ << ":MaxComputeWorkGroupSizeY:" << compileResources.MaxComputeWorkGroupSize[1]
+ << ":MaxComputeWorkGroupSizeZ:" << compileResources.MaxComputeWorkGroupSize[2]
+ << ":MaxComputeUniformComponents:" << compileResources.MaxComputeUniformComponents
+ << ":MaxComputeTextureImageUnits:" << compileResources.MaxComputeTextureImageUnits
+ << ":MaxComputeAtomicCounters:" << compileResources.MaxComputeAtomicCounters
+ << ":MaxComputeAtomicCounterBuffers:" << compileResources.MaxComputeAtomicCounterBuffers
+ << ":MaxVertexAtomicCounters:" << compileResources.MaxVertexAtomicCounters
+ << ":MaxFragmentAtomicCounters:" << compileResources.MaxFragmentAtomicCounters
+ << ":MaxCombinedAtomicCounters:" << compileResources.MaxCombinedAtomicCounters
+ << ":MaxAtomicCounterBindings:" << compileResources.MaxAtomicCounterBindings
+ << ":MaxVertexAtomicCounterBuffers:" << compileResources.MaxVertexAtomicCounterBuffers
+ << ":MaxFragmentAtomicCounterBuffers:" << compileResources.MaxFragmentAtomicCounterBuffers
+ << ":MaxCombinedAtomicCounterBuffers:" << compileResources.MaxCombinedAtomicCounterBuffers
+ << ":MaxAtomicCounterBufferSize:" << compileResources.MaxAtomicCounterBufferSize;
// clang-format on
builtInResourcesString = strstream.str();
@@ -687,16 +601,16 @@ bool TCompiler::initCallDag(TIntermNode *root)
switch (mCallDag.init(root, &infoSink.info))
{
- case CallDAG::INITDAG_SUCCESS:
- return true;
- case CallDAG::INITDAG_RECURSION:
- infoSink.info.prefix(EPrefixError);
- infoSink.info << "Function recursion detected";
- return false;
- case CallDAG::INITDAG_UNDEFINED:
- infoSink.info.prefix(EPrefixError);
- infoSink.info << "Unimplemented function detected";
- return false;
+ case CallDAG::INITDAG_SUCCESS:
+ return true;
+ case CallDAG::INITDAG_RECURSION:
+ infoSink.info.prefix(EPrefixError);
+ infoSink.info << "Function recursion detected";
+ return false;
+ case CallDAG::INITDAG_UNDEFINED:
+ infoSink.info.prefix(EPrefixError);
+ infoSink.info << "Unimplemented function detected";
+ return false;
}
UNREACHABLE();
@@ -790,38 +704,30 @@ class TCompiler::UnusedPredicate
{
public:
UnusedPredicate(const CallDAG *callDag, const std::vector<FunctionMetadata> *metadatas)
- : mCallDag(callDag), mMetadatas(metadatas)
+ : mCallDag(callDag),
+ mMetadatas(metadatas)
{
}
bool operator ()(TIntermNode *node)
{
const TIntermAggregate *asAggregate = node->getAsAggregate();
- const TIntermFunctionDefinition *asFunction = node->getAsFunctionDefinition();
-
- const TFunctionSymbolInfo *functionInfo = nullptr;
- if (asFunction)
+ if (asAggregate == nullptr)
{
- functionInfo = asFunction->getFunctionSymbolInfo();
- }
- else if (asAggregate)
- {
- if (asAggregate->getOp() == EOpPrototype)
- {
- functionInfo = asAggregate->getFunctionSymbolInfo();
- }
+ return false;
}
- if (functionInfo == nullptr)
+
+ if (!(asAggregate->getOp() == EOpFunction || asAggregate->getOp() == EOpPrototype))
{
return false;
}
- size_t callDagIndex = mCallDag->findIndex(functionInfo);
+ size_t callDagIndex = mCallDag->findIndex(asAggregate);
if (callDagIndex == CallDAG::InvalidIndex)
{
// This happens only for unimplemented prototypes which are thus unused
- ASSERT(asAggregate && asAggregate->getOp() == EOpPrototype);
+ ASSERT(asAggregate->getOp() == EOpPrototype);
return true;
}
@@ -834,10 +740,13 @@ class TCompiler::UnusedPredicate
const std::vector<FunctionMetadata> *mMetadatas;
};
-bool TCompiler::pruneUnusedFunctions(TIntermBlock *root)
+bool TCompiler::pruneUnusedFunctions(TIntermNode *root)
{
+ TIntermAggregate *rootNode = root->getAsAggregate();
+ ASSERT(rootNode != nullptr);
+
UnusedPredicate isUnused(&mCallDag, &functionMetadata);
- TIntermSequence *sequence = root->getSequence();
+ TIntermSequence *sequence = rootNode->getSequence();
if (!sequence->empty())
{
@@ -854,6 +763,12 @@ bool TCompiler::validateOutputs(TIntermNode* root)
return (validateOutputs.validateAndCountErrors(infoSink.info) == 0);
}
+void TCompiler::rewriteCSSShader(TIntermNode* root)
+{
+ RenameFunction renamer("main(", "css_main(");
+ root->traverse(&renamer);
+}
+
bool TCompiler::validateLimitations(TIntermNode* root)
{
ValidateLimitations validate(shaderType, &infoSink.info);
@@ -861,9 +776,39 @@ bool TCompiler::validateLimitations(TIntermNode* root)
return validate.numErrors() == 0;
}
+bool TCompiler::enforceTimingRestrictions(TIntermNode* root, bool outputGraph)
+{
+ if (shaderSpec != SH_WEBGL_SPEC)
+ {
+ infoSink.info << "Timing restrictions must be enforced under the WebGL spec.";
+ return false;
+ }
+
+ if (shaderType == GL_FRAGMENT_SHADER)
+ {
+ TDependencyGraph graph(root);
+
+ // Output any errors first.
+ bool success = enforceFragmentShaderTimingRestrictions(graph);
+
+ // Then, output the dependency graph.
+ if (outputGraph)
+ {
+ TDependencyGraphOutput output(infoSink.info);
+ output.outputAllSpanningTrees(graph);
+ }
+
+ return success;
+ }
+ else
+ {
+ return enforceVertexShaderTimingRestrictions(root);
+ }
+}
+
bool TCompiler::limitExpressionComplexity(TIntermNode* root)
{
- TMaxDepthTraverser traverser(maxExpressionComplexity + 1);
+ TMaxDepthTraverser traverser(maxExpressionComplexity+1);
root->traverse(&traverser);
if (traverser.getMaxDepth() > maxExpressionComplexity)
@@ -881,13 +826,26 @@ bool TCompiler::limitExpressionComplexity(TIntermNode* root)
return true;
}
+bool TCompiler::enforceFragmentShaderTimingRestrictions(const TDependencyGraph& graph)
+{
+ RestrictFragmentShaderTiming restrictor(infoSink.info);
+ restrictor.enforceRestrictions(graph);
+ return restrictor.numErrors() == 0;
+}
+
+bool TCompiler::enforceVertexShaderTimingRestrictions(TIntermNode* root)
+{
+ RestrictVertexShaderTiming restrictor(infoSink.info);
+ restrictor.enforceRestrictions(root);
+ return restrictor.numErrors() == 0;
+}
+
void TCompiler::collectVariables(TIntermNode* root)
{
if (!variablesCollected)
{
sh::CollectVariables collect(&attributes, &outputVariables, &uniforms, &varyings,
- &interfaceBlocks, hashFunction, symbolTable,
- extensionBehavior);
+ &interfaceBlocks, hashFunction, symbolTable, extensionBehavior);
root->traverse(&collect);
// This is for enforcePackingRestriction().
@@ -896,16 +854,6 @@ void TCompiler::collectVariables(TIntermNode* root)
}
}
-bool TCompiler::shouldCollectVariables(ShCompileOptions compileOptions)
-{
- return (compileOptions & SH_VARIABLES) != 0;
-}
-
-bool TCompiler::wereVariablesCollected() const
-{
- return variablesCollected;
-}
-
bool TCompiler::enforcePackingRestrictions()
{
VariablePacker packer;
@@ -918,23 +866,7 @@ void TCompiler::initializeGLPosition(TIntermNode* root)
sh::ShaderVariable var(GL_FLOAT_VEC4, 0);
var.name = "gl_Position";
list.push_back(var);
- InitializeVariables(root, list, symbolTable);
-}
-
-void TCompiler::useAllMembersInUnusedStandardAndSharedBlocks(TIntermNode *root)
-{
- sh::InterfaceBlockList list;
-
- for (auto block : interfaceBlocks)
- {
- if (!block.staticUse &&
- (block.layout == sh::BLOCKLAYOUT_STANDARD || block.layout == sh::BLOCKLAYOUT_SHARED))
- {
- list.push_back(block);
- }
- }
-
- sh::UseInterfaceBlockFields(root, list, symbolTable);
+ InitializeVariables(root, list);
}
void TCompiler::initializeOutputVariables(TIntermNode *root)
@@ -955,7 +887,7 @@ void TCompiler::initializeOutputVariables(TIntermNode *root)
list.push_back(var);
}
}
- InitializeVariables(root, list, symbolTable);
+ InitializeVariables(root, list);
}
const TExtensionBehavior& TCompiler::getExtensionBehavior() const
@@ -988,7 +920,7 @@ const BuiltInFunctionEmulator& TCompiler::getBuiltInFunctionEmulator() const
return builtInFunctionEmulator;
}
-void TCompiler::writePragma(ShCompileOptions compileOptions)
+void TCompiler::writePragma(int compileOptions)
{
if (!(compileOptions & SH_FLATTEN_PRAGMA_STDGL_INVARIANT_ALL))
{
@@ -1011,5 +943,3 @@ bool TCompiler::isVaryingDefined(const char *varyingName)
return false;
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/Compiler.h b/gfx/angle/src/compiler/translator/Compiler.h
index 42b4f8f06..6b682374b 100755
--- a/gfx/angle/src/compiler/translator/Compiler.h
+++ b/gfx/angle/src/compiler/translator/Compiler.h
@@ -24,16 +24,15 @@
#include "compiler/translator/VariableInfo.h"
#include "third_party/compiler/ArrayBoundsClamper.h"
-namespace sh
-{
-
class TCompiler;
+class TDependencyGraph;
#ifdef ANGLE_ENABLE_HLSL
class TranslatorHLSL;
#endif // ANGLE_ENABLE_HLSL
//
-// Helper function to identify specs that are based on the WebGL spec.
+// Helper function to identify specs that are based on the WebGL spec,
+// like the CSS Shaders spec.
//
bool IsWebGLBasedSpec(ShShaderSpec spec);
@@ -41,16 +40,6 @@ bool IsWebGLBasedSpec(ShShaderSpec spec);
// Helper function to check if the shader type is GLSL.
//
bool IsGLSL130OrNewer(ShShaderOutput output);
-bool IsGLSL420OrNewer(ShShaderOutput output);
-bool IsGLSL410OrOlder(ShShaderOutput output);
-
-//
-// Helper function to check if the invariant qualifier can be removed.
-//
-bool RemoveInvariant(sh::GLenum shaderType,
- int shaderVersion,
- ShShaderOutput outputType,
- ShCompileOptions compileOptions);
//
// The base class used to back handles returned to the driver.
@@ -85,14 +74,12 @@ class TCompiler : public TShHandleBase
// compileTreeForTesting should be used only when tests require access to
// the AST. Users of this function need to manually manage the global pool
- // allocator. Returns nullptr whenever there are compilation errors.
- TIntermBlock *compileTreeForTesting(const char *const shaderStrings[],
- size_t numStrings,
- ShCompileOptions compileOptions);
+ // allocator. Returns NULL whenever there are compilation errors.
+ TIntermNode *compileTreeForTesting(const char* const shaderStrings[],
+ size_t numStrings, int compileOptions);
- bool compile(const char *const shaderStrings[],
- size_t numStrings,
- ShCompileOptions compileOptions);
+ bool compile(const char* const shaderStrings[],
+ size_t numStrings, int compileOptions);
// Get results of the last compilation.
int getShaderVersion() const { return shaderVersion; }
@@ -117,7 +104,7 @@ class TCompiler : public TShHandleBase
ShShaderOutput getOutputType() const { return outputType; }
const std::string &getBuiltInResourcesString() const { return builtInResourcesString; }
- bool shouldRunLoopAndIndexingValidation(ShCompileOptions compileOptions) const;
+ bool shouldRunLoopAndIndexingValidation(int compileOptions) const;
// Get the resources set by InitBuiltInSymbolTable
const ShBuiltInResources& getResources() const;
@@ -132,21 +119,20 @@ class TCompiler : public TShHandleBase
bool checkCallDepth();
// Returns true if a program has no conflicting or missing fragment outputs
bool validateOutputs(TIntermNode* root);
+ // Rewrites a shader's intermediate tree according to the CSS Shaders spec.
+ void rewriteCSSShader(TIntermNode* root);
// Returns true if the given shader does not exceed the minimum
// functionality mandated in GLSL 1.0 spec Appendix A.
bool validateLimitations(TIntermNode* root);
+ // Collect info for all attribs, uniforms, varyings.
+ void collectVariables(TIntermNode* root);
// Add emulated functions to the built-in function emulator.
- virtual void initBuiltInFunctionEmulator(BuiltInFunctionEmulator *emu,
- ShCompileOptions compileOptions){};
+ virtual void initBuiltInFunctionEmulator(BuiltInFunctionEmulator *emu, int compileOptions) {};
// Translate to object code.
- virtual void translate(TIntermNode *root, ShCompileOptions compileOptions) = 0;
+ virtual void translate(TIntermNode *root, int compileOptions) = 0;
// Returns true if, after applying the packing rules in the GLSL 1.017 spec
// Appendix A, section 7, the shader does not use too many uniforms.
bool enforcePackingRestrictions();
- // Insert statements to reference all members in unused uniform blocks with standard and shared
- // layout. This is to work around a Mac driver that treats unused standard/shared
- // uniform blocks as inactive.
- void useAllMembersInUnusedStandardAndSharedBlocks(TIntermNode *root);
// Insert statements to initialize output variables in the beginning of main().
// This is to avoid undefined behaviors.
void initializeOutputVariables(TIntermNode *root);
@@ -155,13 +141,20 @@ class TCompiler : public TShHandleBase
// while spec says it is allowed.
// This function should only be applied to vertex shaders.
void initializeGLPosition(TIntermNode* root);
+ // Returns true if the shader passes the restrictions that aim to prevent timing attacks.
+ bool enforceTimingRestrictions(TIntermNode* root, bool outputGraph);
+ // Returns true if the shader does not use samplers.
+ bool enforceVertexShaderTimingRestrictions(TIntermNode* root);
+ // Returns true if the shader does not use sampler dependent values to affect control
+ // flow or in operations whose time can depend on the input values.
+ bool enforceFragmentShaderTimingRestrictions(const TDependencyGraph& graph);
// Return true if the maximum expression complexity is below the limit.
bool limitExpressionComplexity(TIntermNode* root);
// Get built-in extensions with default behavior.
const TExtensionBehavior& getExtensionBehavior() const;
const char *getSourcePath() const;
const TPragma& getPragma() const { return mPragma; }
- void writePragma(ShCompileOptions compileOptions);
+ void writePragma(int compileOptions);
unsigned int *getTemporaryIndex() { return &mTemporaryIndex; }
// Relies on collectVariables having been called.
bool isVaryingDefined(const char *varyingName);
@@ -170,16 +163,20 @@ class TCompiler : public TShHandleBase
ShArrayIndexClampingStrategy getArrayIndexClampingStrategy() const;
const BuiltInFunctionEmulator& getBuiltInFunctionEmulator() const;
+ virtual bool shouldCollectVariables(int compileOptions)
+ {
+ return (compileOptions & SH_VARIABLES) != 0;
+ }
+
virtual bool shouldFlattenPragmaStdglInvariantAll() = 0;
- virtual bool shouldCollectVariables(ShCompileOptions compileOptions);
- bool wereVariablesCollected() const;
std::vector<sh::Attribute> attributes;
std::vector<sh::OutputVariable> outputVariables;
std::vector<sh::Uniform> uniforms;
std::vector<sh::ShaderVariable> expandedUniforms;
std::vector<sh::Varying> varyings;
std::vector<sh::InterfaceBlock> interfaceBlocks;
+ bool variablesCollected;
private:
// Creates the function call DAG for further analysis, returning false if there is a recursion
@@ -190,18 +187,13 @@ class TCompiler : public TShHandleBase
void initSamplerDefaultPrecision(TBasicType samplerType);
- // Collect info for all attribs, uniforms, varyings.
- void collectVariables(TIntermNode *root);
-
- bool variablesCollected;
-
// Removes unused function declarations and prototypes from the AST
class UnusedPredicate;
- bool pruneUnusedFunctions(TIntermBlock *root);
+ bool pruneUnusedFunctions(TIntermNode *root);
- TIntermBlock *compileTreeImpl(const char *const shaderStrings[],
- size_t numStrings,
- const ShCompileOptions compileOptions);
+ TIntermNode *compileTreeImpl(const char *const shaderStrings[],
+ size_t numStrings,
+ const int compileOptions);
sh::GLenum shaderType;
ShShaderSpec shaderSpec;
@@ -269,6 +261,4 @@ TCompiler* ConstructCompiler(
sh::GLenum type, ShShaderSpec spec, ShShaderOutput output);
void DeleteCompiler(TCompiler*);
-} // namespace sh
-
#endif // COMPILER_TRANSLATOR_COMPILER_H_
diff --git a/gfx/angle/src/compiler/translator/ConstantUnion.cpp b/gfx/angle/src/compiler/translator/ConstantUnion.cpp
deleted file mode 100644
index 66f444b0b..000000000
--- a/gfx/angle/src/compiler/translator/ConstantUnion.cpp
+++ /dev/null
@@ -1,642 +0,0 @@
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// ConstantUnion: Constant folding helper class.
-
-#include "compiler/translator/ConstantUnion.h"
-
-#include "base/numerics/safe_math.h"
-#include "common/mathutil.h"
-#include "compiler/translator/Diagnostics.h"
-
-namespace sh
-{
-
-namespace
-{
-
-template <typename T>
-T CheckedSum(base::CheckedNumeric<T> lhs,
- base::CheckedNumeric<T> rhs,
- TDiagnostics *diag,
- const TSourceLoc &line)
-{
- ASSERT(lhs.IsValid() && rhs.IsValid());
- auto result = lhs + rhs;
- if (!result.IsValid())
- {
- diag->error(line, "Addition out of range", "*", "");
- return 0;
- }
- return result.ValueOrDefault(0);
-}
-
-template <typename T>
-T CheckedDiff(base::CheckedNumeric<T> lhs,
- base::CheckedNumeric<T> rhs,
- TDiagnostics *diag,
- const TSourceLoc &line)
-{
- ASSERT(lhs.IsValid() && rhs.IsValid());
- auto result = lhs - rhs;
- if (!result.IsValid())
- {
- diag->error(line, "Difference out of range", "*", "");
- return 0;
- }
- return result.ValueOrDefault(0);
-}
-
-template <typename T>
-T CheckedMul(base::CheckedNumeric<T> lhs,
- base::CheckedNumeric<T> rhs,
- TDiagnostics *diag,
- const TSourceLoc &line)
-{
- ASSERT(lhs.IsValid() && rhs.IsValid());
- auto result = lhs * rhs;
- if (!result.IsValid())
- {
- diag->error(line, "Multiplication out of range", "*", "");
- return 0;
- }
- return result.ValueOrDefault(0);
-}
-
-} // anonymous namespace
-
-TConstantUnion::TConstantUnion()
-{
- iConst = 0;
- type = EbtVoid;
-}
-
-bool TConstantUnion::cast(TBasicType newType, const TConstantUnion &constant)
-{
- switch (newType)
- {
- case EbtFloat:
- switch (constant.type)
- {
- case EbtInt:
- setFConst(static_cast<float>(constant.getIConst()));
- break;
- case EbtUInt:
- setFConst(static_cast<float>(constant.getUConst()));
- break;
- case EbtBool:
- setFConst(static_cast<float>(constant.getBConst()));
- break;
- case EbtFloat:
- setFConst(static_cast<float>(constant.getFConst()));
- break;
- default:
- return false;
- }
- break;
- case EbtInt:
- switch (constant.type)
- {
- case EbtInt:
- setIConst(static_cast<int>(constant.getIConst()));
- break;
- case EbtUInt:
- setIConst(static_cast<int>(constant.getUConst()));
- break;
- case EbtBool:
- setIConst(static_cast<int>(constant.getBConst()));
- break;
- case EbtFloat:
- setIConst(static_cast<int>(constant.getFConst()));
- break;
- default:
- return false;
- }
- break;
- case EbtUInt:
- switch (constant.type)
- {
- case EbtInt:
- setUConst(static_cast<unsigned int>(constant.getIConst()));
- break;
- case EbtUInt:
- setUConst(static_cast<unsigned int>(constant.getUConst()));
- break;
- case EbtBool:
- setUConst(static_cast<unsigned int>(constant.getBConst()));
- break;
- case EbtFloat:
- setUConst(static_cast<unsigned int>(constant.getFConst()));
- break;
- default:
- return false;
- }
- break;
- case EbtBool:
- switch (constant.type)
- {
- case EbtInt:
- setBConst(constant.getIConst() != 0);
- break;
- case EbtUInt:
- setBConst(constant.getUConst() != 0);
- break;
- case EbtBool:
- setBConst(constant.getBConst());
- break;
- case EbtFloat:
- setBConst(constant.getFConst() != 0.0f);
- break;
- default:
- return false;
- }
- break;
- case EbtStruct: // Struct fields don't get cast
- switch (constant.type)
- {
- case EbtInt:
- setIConst(constant.getIConst());
- break;
- case EbtUInt:
- setUConst(constant.getUConst());
- break;
- case EbtBool:
- setBConst(constant.getBConst());
- break;
- case EbtFloat:
- setFConst(constant.getFConst());
- break;
- default:
- return false;
- }
- break;
- default:
- return false;
- }
-
- return true;
-}
-
-bool TConstantUnion::operator==(const int i) const
-{
- return i == iConst;
-}
-
-bool TConstantUnion::operator==(const unsigned int u) const
-{
- return u == uConst;
-}
-
-bool TConstantUnion::operator==(const float f) const
-{
- return f == fConst;
-}
-
-bool TConstantUnion::operator==(const bool b) const
-{
- return b == bConst;
-}
-
-bool TConstantUnion::operator==(const TConstantUnion &constant) const
-{
- if (constant.type != type)
- return false;
-
- switch (type)
- {
- case EbtInt:
- return constant.iConst == iConst;
- case EbtUInt:
- return constant.uConst == uConst;
- case EbtFloat:
- return constant.fConst == fConst;
- case EbtBool:
- return constant.bConst == bConst;
- default:
- return false;
- }
-}
-
-bool TConstantUnion::operator!=(const int i) const
-{
- return !operator==(i);
-}
-
-bool TConstantUnion::operator!=(const unsigned int u) const
-{
- return !operator==(u);
-}
-
-bool TConstantUnion::operator!=(const float f) const
-{
- return !operator==(f);
-}
-
-bool TConstantUnion::operator!=(const bool b) const
-{
- return !operator==(b);
-}
-
-bool TConstantUnion::operator!=(const TConstantUnion &constant) const
-{
- return !operator==(constant);
-}
-
-bool TConstantUnion::operator>(const TConstantUnion &constant) const
-{
- ASSERT(type == constant.type);
- switch (type)
- {
- case EbtInt:
- return iConst > constant.iConst;
- case EbtUInt:
- return uConst > constant.uConst;
- case EbtFloat:
- return fConst > constant.fConst;
- default:
- return false; // Invalid operation, handled at semantic analysis
- }
-}
-
-bool TConstantUnion::operator<(const TConstantUnion &constant) const
-{
- ASSERT(type == constant.type);
- switch (type)
- {
- case EbtInt:
- return iConst < constant.iConst;
- case EbtUInt:
- return uConst < constant.uConst;
- case EbtFloat:
- return fConst < constant.fConst;
- default:
- return false; // Invalid operation, handled at semantic analysis
- }
-}
-
-// static
-TConstantUnion TConstantUnion::add(const TConstantUnion &lhs,
- const TConstantUnion &rhs,
- TDiagnostics *diag,
- const TSourceLoc &line)
-{
- TConstantUnion returnValue;
- ASSERT(lhs.type == rhs.type);
- switch (lhs.type)
- {
- case EbtInt:
- returnValue.setIConst(gl::WrappingSum<int>(lhs.iConst, rhs.iConst));
- break;
- case EbtUInt:
- returnValue.setUConst(gl::WrappingSum<unsigned int>(lhs.uConst, rhs.uConst));
- break;
- case EbtFloat:
- returnValue.setFConst(CheckedSum<float>(lhs.fConst, rhs.fConst, diag, line));
- break;
- default:
- UNREACHABLE();
- }
-
- return returnValue;
-}
-
-// static
-TConstantUnion TConstantUnion::sub(const TConstantUnion &lhs,
- const TConstantUnion &rhs,
- TDiagnostics *diag,
- const TSourceLoc &line)
-{
- TConstantUnion returnValue;
- ASSERT(lhs.type == rhs.type);
- switch (lhs.type)
- {
- case EbtInt:
- returnValue.setIConst(gl::WrappingDiff<int>(lhs.iConst, rhs.iConst));
- break;
- case EbtUInt:
- returnValue.setUConst(gl::WrappingDiff<unsigned int>(lhs.uConst, rhs.uConst));
- break;
- case EbtFloat:
- returnValue.setFConst(CheckedDiff<float>(lhs.fConst, rhs.fConst, diag, line));
- break;
- default:
- UNREACHABLE();
- }
-
- return returnValue;
-}
-
-// static
-TConstantUnion TConstantUnion::mul(const TConstantUnion &lhs,
- const TConstantUnion &rhs,
- TDiagnostics *diag,
- const TSourceLoc &line)
-{
- TConstantUnion returnValue;
- ASSERT(lhs.type == rhs.type);
- switch (lhs.type)
- {
- case EbtInt:
- returnValue.setIConst(gl::WrappingMul(lhs.iConst, rhs.iConst));
- break;
- case EbtUInt:
- // Unsigned integer math in C++ is defined to be done in modulo 2^n, so we rely on that
- // to implement wrapping multiplication.
- returnValue.setUConst(lhs.uConst * rhs.uConst);
- break;
- case EbtFloat:
- returnValue.setFConst(CheckedMul<float>(lhs.fConst, rhs.fConst, diag, line));
- break;
- default:
- UNREACHABLE();
- }
-
- return returnValue;
-}
-
-TConstantUnion TConstantUnion::operator%(const TConstantUnion &constant) const
-{
- TConstantUnion returnValue;
- ASSERT(type == constant.type);
- switch (type)
- {
- case EbtInt:
- returnValue.setIConst(iConst % constant.iConst);
- break;
- case EbtUInt:
- returnValue.setUConst(uConst % constant.uConst);
- break;
- default:
- UNREACHABLE();
- }
-
- return returnValue;
-}
-
-// static
-TConstantUnion TConstantUnion::rshift(const TConstantUnion &lhs,
- const TConstantUnion &rhs,
- TDiagnostics *diag,
- const TSourceLoc &line)
-{
- TConstantUnion returnValue;
- ASSERT(lhs.type == EbtInt || lhs.type == EbtUInt);
- ASSERT(rhs.type == EbtInt || rhs.type == EbtUInt);
- if ((rhs.type == EbtInt && (rhs.iConst < 0 || rhs.iConst > 31)) ||
- (rhs.type == EbtUInt && rhs.uConst > 31u))
- {
- diag->error(line, "Undefined shift (operand out of range)", ">>", "");
- switch (lhs.type)
- {
- case EbtInt:
- returnValue.setIConst(0);
- break;
- case EbtUInt:
- returnValue.setUConst(0u);
- break;
- default:
- UNREACHABLE();
- }
- return returnValue;
- }
-
- switch (lhs.type)
- {
- case EbtInt:
- {
- unsigned int shiftOffset = 0;
- switch (rhs.type)
- {
- case EbtInt:
- shiftOffset = static_cast<unsigned int>(rhs.iConst);
- break;
- case EbtUInt:
- shiftOffset = rhs.uConst;
- break;
- default:
- UNREACHABLE();
- }
- if (shiftOffset > 0)
- {
- // ESSL 3.00.6 section 5.9: "If E1 is a signed integer, the right-shift will extend
- // the sign bit." In C++ shifting negative integers is undefined, so we implement
- // extending the sign bit manually.
- int lhsSafe = lhs.iConst;
- if (lhsSafe == std::numeric_limits<int>::min())
- {
- // The min integer needs special treatment because only bit it has set is the
- // sign bit, which we clear later to implement safe right shift of negative
- // numbers.
- lhsSafe = -0x40000000;
- --shiftOffset;
- }
- if (shiftOffset > 0)
- {
- bool extendSignBit = false;
- if (lhsSafe < 0)
- {
- extendSignBit = true;
- // Clear the sign bit so that bitshift right is defined in C++.
- lhsSafe &= 0x7fffffff;
- ASSERT(lhsSafe > 0);
- }
- returnValue.setIConst(lhsSafe >> shiftOffset);
-
- // Manually fill in the extended sign bit if necessary.
- if (extendSignBit)
- {
- int extendedSignBit = static_cast<int>(0xffffffffu << (31 - shiftOffset));
- returnValue.setIConst(returnValue.getIConst() | extendedSignBit);
- }
- }
- else
- {
- returnValue.setIConst(lhsSafe);
- }
- }
- else
- {
- returnValue.setIConst(lhs.iConst);
- }
- break;
- }
- case EbtUInt:
- switch (rhs.type)
- {
- case EbtInt:
- returnValue.setUConst(lhs.uConst >> rhs.iConst);
- break;
- case EbtUInt:
- returnValue.setUConst(lhs.uConst >> rhs.uConst);
- break;
- default:
- UNREACHABLE();
- }
- break;
-
- default:
- UNREACHABLE();
- }
- return returnValue;
-}
-
-// static
-TConstantUnion TConstantUnion::lshift(const TConstantUnion &lhs,
- const TConstantUnion &rhs,
- TDiagnostics *diag,
- const TSourceLoc &line)
-{
- TConstantUnion returnValue;
- ASSERT(lhs.type == EbtInt || lhs.type == EbtUInt);
- ASSERT(rhs.type == EbtInt || rhs.type == EbtUInt);
- if ((rhs.type == EbtInt && (rhs.iConst < 0 || rhs.iConst > 31)) ||
- (rhs.type == EbtUInt && rhs.uConst > 31u))
- {
- diag->error(line, "Undefined shift (operand out of range)", "<<", "");
- switch (lhs.type)
- {
- case EbtInt:
- returnValue.setIConst(0);
- break;
- case EbtUInt:
- returnValue.setUConst(0u);
- break;
- default:
- UNREACHABLE();
- }
- return returnValue;
- }
-
- switch (lhs.type)
- {
- case EbtInt:
- switch (rhs.type)
- {
- // Cast to unsigned integer before shifting, since ESSL 3.00.6 section 5.9 says that
- // lhs is "interpreted as a bit pattern". This also avoids the possibility of signed
- // integer overflow or undefined shift of a negative integer.
- case EbtInt:
- returnValue.setIConst(
- static_cast<int>(static_cast<uint32_t>(lhs.iConst) << rhs.iConst));
- break;
- case EbtUInt:
- returnValue.setIConst(
- static_cast<int>(static_cast<uint32_t>(lhs.iConst) << rhs.uConst));
- break;
- default:
- UNREACHABLE();
- }
- break;
-
- case EbtUInt:
- switch (rhs.type)
- {
- case EbtInt:
- returnValue.setUConst(lhs.uConst << rhs.iConst);
- break;
- case EbtUInt:
- returnValue.setUConst(lhs.uConst << rhs.uConst);
- break;
- default:
- UNREACHABLE();
- }
- break;
-
- default:
- UNREACHABLE();
- }
- return returnValue;
-}
-
-TConstantUnion TConstantUnion::operator&(const TConstantUnion &constant) const
-{
- TConstantUnion returnValue;
- ASSERT(constant.type == EbtInt || constant.type == EbtUInt);
- switch (type)
- {
- case EbtInt:
- returnValue.setIConst(iConst & constant.iConst);
- break;
- case EbtUInt:
- returnValue.setUConst(uConst & constant.uConst);
- break;
- default:
- UNREACHABLE();
- }
-
- return returnValue;
-}
-
-TConstantUnion TConstantUnion::operator|(const TConstantUnion &constant) const
-{
- TConstantUnion returnValue;
- ASSERT(type == constant.type);
- switch (type)
- {
- case EbtInt:
- returnValue.setIConst(iConst | constant.iConst);
- break;
- case EbtUInt:
- returnValue.setUConst(uConst | constant.uConst);
- break;
- default:
- UNREACHABLE();
- }
-
- return returnValue;
-}
-
-TConstantUnion TConstantUnion::operator^(const TConstantUnion &constant) const
-{
- TConstantUnion returnValue;
- ASSERT(type == constant.type);
- switch (type)
- {
- case EbtInt:
- returnValue.setIConst(iConst ^ constant.iConst);
- break;
- case EbtUInt:
- returnValue.setUConst(uConst ^ constant.uConst);
- break;
- default:
- UNREACHABLE();
- }
-
- return returnValue;
-}
-
-TConstantUnion TConstantUnion::operator&&(const TConstantUnion &constant) const
-{
- TConstantUnion returnValue;
- ASSERT(type == constant.type);
- switch (type)
- {
- case EbtBool:
- returnValue.setBConst(bConst && constant.bConst);
- break;
- default:
- UNREACHABLE();
- }
-
- return returnValue;
-}
-
-TConstantUnion TConstantUnion::operator||(const TConstantUnion &constant) const
-{
- TConstantUnion returnValue;
- ASSERT(type == constant.type);
- switch (type)
- {
- case EbtBool:
- returnValue.setBConst(bConst || constant.bConst);
- break;
- default:
- UNREACHABLE();
- }
-
- return returnValue;
-}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/ConstantUnion.h b/gfx/angle/src/compiler/translator/ConstantUnion.h
index f6222ce5a..a86d27f3f 100755
--- a/gfx/angle/src/compiler/translator/ConstantUnion.h
+++ b/gfx/angle/src/compiler/translator/ConstantUnion.h
@@ -9,21 +9,77 @@
#include <assert.h>
-#include "compiler/translator/Common.h"
#include "compiler/translator/BaseTypes.h"
-namespace sh
-{
-
-class TDiagnostics;
-
-class TConstantUnion
-{
- public:
+class TConstantUnion {
+public:
POOL_ALLOCATOR_NEW_DELETE();
- TConstantUnion();
+ TConstantUnion()
+ {
+ iConst = 0;
+ type = EbtVoid;
+ }
+
+ bool cast(TBasicType newType, const TConstantUnion &constant)
+ {
+ switch (newType)
+ {
+ case EbtFloat:
+ switch (constant.type)
+ {
+ case EbtInt: setFConst(static_cast<float>(constant.getIConst())); break;
+ case EbtUInt: setFConst(static_cast<float>(constant.getUConst())); break;
+ case EbtBool: setFConst(static_cast<float>(constant.getBConst())); break;
+ case EbtFloat: setFConst(static_cast<float>(constant.getFConst())); break;
+ default: return false;
+ }
+ break;
+ case EbtInt:
+ switch (constant.type)
+ {
+ case EbtInt: setIConst(static_cast<int>(constant.getIConst())); break;
+ case EbtUInt: setIConst(static_cast<int>(constant.getUConst())); break;
+ case EbtBool: setIConst(static_cast<int>(constant.getBConst())); break;
+ case EbtFloat: setIConst(static_cast<int>(constant.getFConst())); break;
+ default: return false;
+ }
+ break;
+ case EbtUInt:
+ switch (constant.type)
+ {
+ case EbtInt: setUConst(static_cast<unsigned int>(constant.getIConst())); break;
+ case EbtUInt: setUConst(static_cast<unsigned int>(constant.getUConst())); break;
+ case EbtBool: setUConst(static_cast<unsigned int>(constant.getBConst())); break;
+ case EbtFloat: setUConst(static_cast<unsigned int>(constant.getFConst())); break;
+ default: return false;
+ }
+ break;
+ case EbtBool:
+ switch (constant.type)
+ {
+ case EbtInt: setBConst(constant.getIConst() != 0); break;
+ case EbtUInt: setBConst(constant.getUConst() != 0); break;
+ case EbtBool: setBConst(constant.getBConst()); break;
+ case EbtFloat: setBConst(constant.getFConst() != 0.0f); break;
+ default: return false;
+ }
+ break;
+ case EbtStruct: // Struct fields don't get cast
+ switch (constant.type)
+ {
+ case EbtInt: setIConst(constant.getIConst()); break;
+ case EbtUInt: setUConst(constant.getUConst()); break;
+ case EbtBool: setBConst(constant.getBConst()); break;
+ case EbtFloat: setFConst(constant.getFConst()); break;
+ default: return false;
+ }
+ break;
+ default:
+ return false;
+ }
- bool cast(TBasicType newType, const TConstantUnion &constant);
+ return true;
+ }
void setIConst(int i) {iConst = i; type = EbtInt; }
void setUConst(unsigned int u) { uConst = u; type = EbtUInt; }
@@ -35,57 +91,258 @@ class TConstantUnion
float getFConst() const { return fConst; }
bool getBConst() const { return bConst; }
- bool operator==(const int i) const;
- bool operator==(const unsigned int u) const;
- bool operator==(const float f) const;
- bool operator==(const bool b) const;
- bool operator==(const TConstantUnion &constant) const;
- bool operator!=(const int i) const;
- bool operator!=(const unsigned int u) const;
- bool operator!=(const float f) const;
- bool operator!=(const bool b) const;
- bool operator!=(const TConstantUnion &constant) const;
- bool operator>(const TConstantUnion &constant) const;
- bool operator<(const TConstantUnion &constant) const;
- static TConstantUnion add(const TConstantUnion &lhs,
- const TConstantUnion &rhs,
- TDiagnostics *diag,
- const TSourceLoc &line);
- static TConstantUnion sub(const TConstantUnion &lhs,
- const TConstantUnion &rhs,
- TDiagnostics *diag,
- const TSourceLoc &line);
- static TConstantUnion mul(const TConstantUnion &lhs,
- const TConstantUnion &rhs,
- TDiagnostics *diag,
- const TSourceLoc &line);
- TConstantUnion operator%(const TConstantUnion &constant) const;
- static TConstantUnion rshift(const TConstantUnion &lhs,
- const TConstantUnion &rhs,
- TDiagnostics *diag,
- const TSourceLoc &line);
- static TConstantUnion lshift(const TConstantUnion &lhs,
- const TConstantUnion &rhs,
- TDiagnostics *diag,
- const TSourceLoc &line);
- TConstantUnion operator&(const TConstantUnion &constant) const;
- TConstantUnion operator|(const TConstantUnion &constant) const;
- TConstantUnion operator^(const TConstantUnion &constant) const;
- TConstantUnion operator&&(const TConstantUnion &constant) const;
- TConstantUnion operator||(const TConstantUnion &constant) const;
+ bool operator==(const int i) const
+ {
+ return i == iConst;
+ }
+
+ bool operator==(const unsigned int u) const
+ {
+ return u == uConst;
+ }
+
+ bool operator==(const float f) const
+ {
+ return f == fConst;
+ }
+
+ bool operator==(const bool b) const
+ {
+ return b == bConst;
+ }
+
+ bool operator==(const TConstantUnion& constant) const
+ {
+ if (constant.type != type)
+ return false;
+
+ switch (type) {
+ case EbtInt:
+ return constant.iConst == iConst;
+ case EbtUInt:
+ return constant.uConst == uConst;
+ case EbtFloat:
+ return constant.fConst == fConst;
+ case EbtBool:
+ return constant.bConst == bConst;
+ default:
+ return false;
+ }
+ }
+
+ bool operator!=(const int i) const
+ {
+ return !operator==(i);
+ }
+
+ bool operator!=(const unsigned int u) const
+ {
+ return !operator==(u);
+ }
+
+ bool operator!=(const float f) const
+ {
+ return !operator==(f);
+ }
+
+ bool operator!=(const bool b) const
+ {
+ return !operator==(b);
+ }
+
+ bool operator!=(const TConstantUnion& constant) const
+ {
+ return !operator==(constant);
+ }
+
+ bool operator>(const TConstantUnion& constant) const
+ {
+ assert(type == constant.type);
+ switch (type) {
+ case EbtInt:
+ return iConst > constant.iConst;
+ case EbtUInt:
+ return uConst > constant.uConst;
+ case EbtFloat:
+ return fConst > constant.fConst;
+ default:
+ return false; // Invalid operation, handled at semantic analysis
+ }
+ }
+
+ bool operator<(const TConstantUnion& constant) const
+ {
+ assert(type == constant.type);
+ switch (type) {
+ case EbtInt:
+ return iConst < constant.iConst;
+ case EbtUInt:
+ return uConst < constant.uConst;
+ case EbtFloat:
+ return fConst < constant.fConst;
+ default:
+ return false; // Invalid operation, handled at semantic analysis
+ }
+ }
+
+ TConstantUnion operator+(const TConstantUnion& constant) const
+ {
+ TConstantUnion returnValue;
+ assert(type == constant.type);
+ switch (type) {
+ case EbtInt: returnValue.setIConst(iConst + constant.iConst); break;
+ case EbtUInt: returnValue.setUConst(uConst + constant.uConst); break;
+ case EbtFloat: returnValue.setFConst(fConst + constant.fConst); break;
+ default: assert(false && "Default missing");
+ }
+
+ return returnValue;
+ }
+
+ TConstantUnion operator-(const TConstantUnion& constant) const
+ {
+ TConstantUnion returnValue;
+ assert(type == constant.type);
+ switch (type) {
+ case EbtInt: returnValue.setIConst(iConst - constant.iConst); break;
+ case EbtUInt: returnValue.setUConst(uConst - constant.uConst); break;
+ case EbtFloat: returnValue.setFConst(fConst - constant.fConst); break;
+ default: assert(false && "Default missing");
+ }
+
+ return returnValue;
+ }
+
+ TConstantUnion operator*(const TConstantUnion& constant) const
+ {
+ TConstantUnion returnValue;
+ assert(type == constant.type);
+ switch (type) {
+ case EbtInt: returnValue.setIConst(iConst * constant.iConst); break;
+ case EbtUInt: returnValue.setUConst(uConst * constant.uConst); break;
+ case EbtFloat: returnValue.setFConst(fConst * constant.fConst); break;
+ default: assert(false && "Default missing");
+ }
+
+ return returnValue;
+ }
+
+ TConstantUnion operator%(const TConstantUnion& constant) const
+ {
+ TConstantUnion returnValue;
+ assert(type == constant.type);
+ switch (type) {
+ case EbtInt: returnValue.setIConst(iConst % constant.iConst); break;
+ case EbtUInt: returnValue.setUConst(uConst % constant.uConst); break;
+ default: assert(false && "Default missing");
+ }
+
+ return returnValue;
+ }
+
+ TConstantUnion operator>>(const TConstantUnion& constant) const
+ {
+ TConstantUnion returnValue;
+ assert(type == constant.type);
+ switch (type) {
+ case EbtInt: returnValue.setIConst(iConst >> constant.iConst); break;
+ case EbtUInt: returnValue.setUConst(uConst >> constant.uConst); break;
+ default: assert(false && "Default missing");
+ }
+
+ return returnValue;
+ }
+
+ TConstantUnion operator<<(const TConstantUnion& constant) const
+ {
+ TConstantUnion returnValue;
+ // The signedness of the second parameter might be different, but we
+ // don't care, since the result is undefined if the second parameter is
+ // negative, and aliasing should not be a problem with unions.
+ assert(constant.type == EbtInt || constant.type == EbtUInt);
+ switch (type) {
+ case EbtInt: returnValue.setIConst(iConst << constant.iConst); break;
+ case EbtUInt: returnValue.setUConst(uConst << constant.uConst); break;
+ default: assert(false && "Default missing");
+ }
+
+ return returnValue;
+ }
+
+ TConstantUnion operator&(const TConstantUnion& constant) const
+ {
+ TConstantUnion returnValue;
+ assert(constant.type == EbtInt || constant.type == EbtUInt);
+ switch (type) {
+ case EbtInt: returnValue.setIConst(iConst & constant.iConst); break;
+ case EbtUInt: returnValue.setUConst(uConst & constant.uConst); break;
+ default: assert(false && "Default missing");
+ }
+
+ return returnValue;
+ }
+
+ TConstantUnion operator|(const TConstantUnion& constant) const
+ {
+ TConstantUnion returnValue;
+ assert(type == constant.type);
+ switch (type) {
+ case EbtInt: returnValue.setIConst(iConst | constant.iConst); break;
+ case EbtUInt: returnValue.setUConst(uConst | constant.uConst); break;
+ default: assert(false && "Default missing");
+ }
+
+ return returnValue;
+ }
+
+ TConstantUnion operator^(const TConstantUnion& constant) const
+ {
+ TConstantUnion returnValue;
+ assert(type == constant.type);
+ switch (type) {
+ case EbtInt: returnValue.setIConst(iConst ^ constant.iConst); break;
+ case EbtUInt: returnValue.setUConst(uConst ^ constant.uConst); break;
+ default: assert(false && "Default missing");
+ }
+
+ return returnValue;
+ }
+
+ TConstantUnion operator&&(const TConstantUnion& constant) const
+ {
+ TConstantUnion returnValue;
+ assert(type == constant.type);
+ switch (type) {
+ case EbtBool: returnValue.setBConst(bConst && constant.bConst); break;
+ default: assert(false && "Default missing");
+ }
+
+ return returnValue;
+ }
+
+ TConstantUnion operator||(const TConstantUnion& constant) const
+ {
+ TConstantUnion returnValue;
+ assert(type == constant.type);
+ switch (type) {
+ case EbtBool: returnValue.setBConst(bConst || constant.bConst); break;
+ default: assert(false && "Default missing");
+ }
+
+ return returnValue;
+ }
TBasicType getType() const { return type; }
- private:
- union {
- int iConst; // used for ivec, scalar ints
- unsigned int uConst; // used for uvec, scalar uints
- bool bConst; // used for bvec, scalar bools
- float fConst; // used for vec, mat, scalar floats
- };
+private:
+
+ union {
+ int iConst; // used for ivec, scalar ints
+ unsigned int uConst; // used for uvec, scalar uints
+ bool bConst; // used for bvec, scalar bools
+ float fConst; // used for vec, mat, scalar floats
+ } ;
TBasicType type;
};
-} // namespace sh
-
#endif // COMPILER_TRANSLATOR_CONSTANTUNION_H_
diff --git a/gfx/angle/src/compiler/translator/DeferGlobalInitializers.cpp b/gfx/angle/src/compiler/translator/DeferGlobalInitializers.cpp
index 1c58562fc..76addf293 100755
--- a/gfx/angle/src/compiler/translator/DeferGlobalInitializers.cpp
+++ b/gfx/angle/src/compiler/translator/DeferGlobalInitializers.cpp
@@ -15,43 +15,42 @@
#include "compiler/translator/IntermNode.h"
#include "compiler/translator/SymbolTable.h"
-namespace sh
-{
-
namespace
{
-void SetInternalFunctionName(TFunctionSymbolInfo *functionInfo, const char *name)
+void SetInternalFunctionName(TIntermAggregate *functionNode, const char *name)
{
TString nameStr(name);
nameStr = TFunction::mangleName(nameStr);
TName nameObj(nameStr);
nameObj.setInternal(true);
- functionInfo->setNameObj(nameObj);
+ functionNode->setNameObj(nameObj);
}
TIntermAggregate *CreateFunctionPrototypeNode(const char *name, const int functionId)
{
TIntermAggregate *functionNode = new TIntermAggregate(EOpPrototype);
- SetInternalFunctionName(functionNode->getFunctionSymbolInfo(), name);
+ SetInternalFunctionName(functionNode, name);
TType returnType(EbtVoid);
functionNode->setType(returnType);
- functionNode->getFunctionSymbolInfo()->setId(functionId);
+ functionNode->setFunctionId(functionId);
return functionNode;
}
-TIntermFunctionDefinition *CreateFunctionDefinitionNode(const char *name,
- TIntermBlock *functionBody,
- const int functionId)
+TIntermAggregate *CreateFunctionDefinitionNode(const char *name,
+ TIntermAggregate *functionBody,
+ const int functionId)
{
- TType returnType(EbtVoid);
+ TIntermAggregate *functionNode = new TIntermAggregate(EOpFunction);
TIntermAggregate *paramsNode = new TIntermAggregate(EOpParameters);
- TIntermFunctionDefinition *functionNode =
- new TIntermFunctionDefinition(returnType, paramsNode, functionBody);
+ functionNode->getSequence()->push_back(paramsNode);
+ functionNode->getSequence()->push_back(functionBody);
- SetInternalFunctionName(functionNode->getFunctionSymbolInfo(), name);
- functionNode->getFunctionSymbolInfo()->setId(functionId);
+ SetInternalFunctionName(functionNode, name);
+ TType returnType(EbtVoid);
+ functionNode->setType(returnType);
+ functionNode->setFunctionId(functionId);
return functionNode;
}
@@ -60,10 +59,10 @@ TIntermAggregate *CreateFunctionCallNode(const char *name, const int functionId)
TIntermAggregate *functionNode = new TIntermAggregate(EOpFunctionCall);
functionNode->setUserDefined();
- SetInternalFunctionName(functionNode->getFunctionSymbolInfo(), name);
+ SetInternalFunctionName(functionNode, name);
TType returnType(EbtVoid);
functionNode->setType(returnType);
- functionNode->getFunctionSymbolInfo()->setId(functionId);
+ functionNode->setFunctionId(functionId);
return functionNode;
}
@@ -74,7 +73,7 @@ class DeferGlobalInitializersTraverser : public TIntermTraverser
bool visitBinary(Visit visit, TIntermBinary *node) override;
- void insertInitFunction(TIntermBlock *root);
+ void insertInitFunction(TIntermNode *root);
private:
TIntermSequence mDeferredInitializers;
@@ -102,8 +101,10 @@ bool DeferGlobalInitializersTraverser::visitBinary(Visit visit, TIntermBinary *n
// Deferral is done also in any cases where the variable has not been constant folded,
// since otherwise there's a chance that HLSL output will generate extra statements
// from the initializer expression.
- TIntermBinary *deferredInit =
- new TIntermBinary(EOpAssign, symbolNode->deepCopy(), node->getRight());
+ TIntermBinary *deferredInit = new TIntermBinary(EOpAssign);
+ deferredInit->setLeft(symbolNode->deepCopy());
+ deferredInit->setRight(node->getRight());
+ deferredInit->setType(node->getType());
mDeferredInitializers.push_back(deferredInit);
// Change const global to a regular global if its initialization is deferred.
@@ -114,7 +115,7 @@ bool DeferGlobalInitializersTraverser::visitBinary(Visit visit, TIntermBinary *n
if (symbolNode->getQualifier() == EvqConst)
{
// All of the siblings in the same declaration need to have consistent qualifiers.
- auto *siblings = getParentNode()->getAsDeclarationNode()->getSequence();
+ auto *siblings = getParentNode()->getAsAggregate()->getSequence();
for (TIntermNode *siblingNode : *siblings)
{
TIntermBinary *siblingBinary = siblingNode->getAsBinaryNode();
@@ -135,51 +136,56 @@ bool DeferGlobalInitializersTraverser::visitBinary(Visit visit, TIntermBinary *n
return false;
}
-void DeferGlobalInitializersTraverser::insertInitFunction(TIntermBlock *root)
+void DeferGlobalInitializersTraverser::insertInitFunction(TIntermNode *root)
{
if (mDeferredInitializers.empty())
{
return;
}
const int initFunctionId = TSymbolTable::nextUniqueId();
+ TIntermAggregate *rootAgg = root->getAsAggregate();
+ ASSERT(rootAgg != nullptr && rootAgg->getOp() == EOpSequence);
const char *functionName = "initializeDeferredGlobals";
// Add function prototype to the beginning of the shader
TIntermAggregate *functionPrototypeNode =
CreateFunctionPrototypeNode(functionName, initFunctionId);
- root->getSequence()->insert(root->getSequence()->begin(), functionPrototypeNode);
+ rootAgg->getSequence()->insert(rootAgg->getSequence()->begin(), functionPrototypeNode);
// Add function definition to the end of the shader
- TIntermBlock *functionBodyNode = new TIntermBlock();
+ TIntermAggregate *functionBodyNode = new TIntermAggregate(EOpSequence);
TIntermSequence *functionBody = functionBodyNode->getSequence();
for (const auto &deferredInit : mDeferredInitializers)
{
functionBody->push_back(deferredInit);
}
- TIntermFunctionDefinition *functionDefinition =
+ TIntermAggregate *functionDefinition =
CreateFunctionDefinitionNode(functionName, functionBodyNode, initFunctionId);
- root->getSequence()->push_back(functionDefinition);
+ rootAgg->getSequence()->push_back(functionDefinition);
// Insert call into main function
- for (TIntermNode *node : *root->getSequence())
+ for (TIntermNode *node : *rootAgg->getSequence())
{
- TIntermFunctionDefinition *nodeFunction = node->getAsFunctionDefinition();
- if (nodeFunction != nullptr && nodeFunction->getFunctionSymbolInfo()->isMain())
+ TIntermAggregate *nodeAgg = node->getAsAggregate();
+ if (nodeAgg != nullptr && nodeAgg->getOp() == EOpFunction &&
+ TFunction::unmangleName(nodeAgg->getName()) == "main")
{
TIntermAggregate *functionCallNode =
CreateFunctionCallNode(functionName, initFunctionId);
- TIntermBlock *mainBody = nodeFunction->getBody();
- ASSERT(mainBody != nullptr);
- mainBody->getSequence()->insert(mainBody->getSequence()->begin(), functionCallNode);
+ TIntermNode *mainBody = nodeAgg->getSequence()->back();
+ TIntermAggregate *mainBodyAgg = mainBody->getAsAggregate();
+ ASSERT(mainBodyAgg != nullptr && mainBodyAgg->getOp() == EOpSequence);
+ mainBodyAgg->getSequence()->insert(mainBodyAgg->getSequence()->begin(),
+ functionCallNode);
}
}
}
} // namespace
-void DeferGlobalInitializers(TIntermBlock *root)
+void DeferGlobalInitializers(TIntermNode *root)
{
DeferGlobalInitializersTraverser traverser;
root->traverse(&traverser);
@@ -190,5 +196,3 @@ void DeferGlobalInitializers(TIntermBlock *root)
// Add the function with initialization and the call to that.
traverser.insertInitFunction(root);
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/DeferGlobalInitializers.h b/gfx/angle/src/compiler/translator/DeferGlobalInitializers.h
index 261ec9001..14f25539c 100755
--- a/gfx/angle/src/compiler/translator/DeferGlobalInitializers.h
+++ b/gfx/angle/src/compiler/translator/DeferGlobalInitializers.h
@@ -13,11 +13,8 @@
#ifndef COMPILER_TRANSLATOR_DEFERGLOBALINITIALIZERS_H_
#define COMPILER_TRANSLATOR_DEFERGLOBALINITIALIZERS_H_
-class TIntermBlock;
+class TIntermNode;
-namespace sh
-{
-void DeferGlobalInitializers(TIntermBlock *root);
-} // namespace sh
+void DeferGlobalInitializers(TIntermNode *root);
#endif // COMPILER_TRANSLATOR_DEFERGLOBALINITIALIZERS_H_
diff --git a/gfx/angle/src/compiler/translator/Diagnostics.cpp b/gfx/angle/src/compiler/translator/Diagnostics.cpp
index 3b4168617..6ba4679c4 100755
--- a/gfx/angle/src/compiler/translator/Diagnostics.cpp
+++ b/gfx/angle/src/compiler/translator/Diagnostics.cpp
@@ -11,9 +11,6 @@
#include "compiler/translator/Common.h"
#include "compiler/translator/InfoSink.h"
-namespace sh
-{
-
TDiagnostics::TDiagnostics(TInfoSink& infoSink) :
mInfoSink(infoSink),
mNumErrors(0),
@@ -82,5 +79,3 @@ void TDiagnostics::print(ID id,
{
writeInfo(severity(id), loc, message(id), text, "");
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/Diagnostics.h b/gfx/angle/src/compiler/translator/Diagnostics.h
index 25a8a3a57..bb521da1a 100755
--- a/gfx/angle/src/compiler/translator/Diagnostics.h
+++ b/gfx/angle/src/compiler/translator/Diagnostics.h
@@ -10,9 +10,6 @@
#include "common/angleutils.h"
#include "compiler/preprocessor/DiagnosticsBase.h"
-namespace sh
-{
-
class TInfoSink;
struct TSourceLoc;
@@ -48,6 +45,4 @@ class TDiagnostics : public pp::Diagnostics, angle::NonCopyable
int mNumWarnings;
};
-} // namespace sh
-
#endif // COMPILER_TRANSLATOR_DIAGNOSTICS_H_
diff --git a/gfx/angle/src/compiler/translator/DirectiveHandler.cpp b/gfx/angle/src/compiler/translator/DirectiveHandler.cpp
index 073994d3c..f8081ecd6 100755
--- a/gfx/angle/src/compiler/translator/DirectiveHandler.cpp
+++ b/gfx/angle/src/compiler/translator/DirectiveHandler.cpp
@@ -12,9 +12,6 @@
#include "common/debug.h"
#include "compiler/translator/Diagnostics.h"
-namespace sh
-{
-
static TBehavior getBehavior(const std::string& str)
{
const char kRequire[] = "require";
@@ -198,5 +195,3 @@ void TDirectiveHandler::handleVersion(const pp::SourceLocation& loc,
"version number", str, "not supported");
}
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/DirectiveHandler.h b/gfx/angle/src/compiler/translator/DirectiveHandler.h
index a50b08219..00eb49114 100755
--- a/gfx/angle/src/compiler/translator/DirectiveHandler.h
+++ b/gfx/angle/src/compiler/translator/DirectiveHandler.h
@@ -13,8 +13,6 @@
#include "compiler/preprocessor/DirectiveHandlerBase.h"
#include "GLSLANG/ShaderLang.h"
-namespace sh
-{
class TDiagnostics;
class TDirectiveHandler : public pp::DirectiveHandler, angle::NonCopyable
@@ -52,6 +50,4 @@ class TDirectiveHandler : public pp::DirectiveHandler, angle::NonCopyable
bool mDebugShaderPrecisionSupported;
};
-} // namespace sh
-
#endif // COMPILER_TRANSLATOR_DIRECTIVEHANDLER_H_
diff --git a/gfx/angle/src/compiler/translator/EmulateGLFragColorBroadcast.cpp b/gfx/angle/src/compiler/translator/EmulateGLFragColorBroadcast.cpp
index a4eeb9b7e..a664d9e2f 100755
--- a/gfx/angle/src/compiler/translator/EmulateGLFragColorBroadcast.cpp
+++ b/gfx/angle/src/compiler/translator/EmulateGLFragColorBroadcast.cpp
@@ -14,60 +14,59 @@
#include "compiler/translator/EmulateGLFragColorBroadcast.h"
#include "compiler/translator/IntermNode.h"
-namespace sh
+namespace
{
-namespace
+TIntermConstantUnion *constructIndexNode(int index)
+{
+ TConstantUnion *u = new TConstantUnion[1];
+ u[0].setIConst(index);
+
+ TType type(EbtInt, EbpUndefined, EvqConst, 1);
+ TIntermConstantUnion *node = new TIntermConstantUnion(u, type);
+ return node;
+}
+
+TIntermBinary *constructGLFragDataNode(int index)
{
+ TIntermBinary *indexDirect = new TIntermBinary(EOpIndexDirect);
+ TIntermSymbol *symbol = new TIntermSymbol(0, "gl_FragData", TType(EbtFloat, 4));
+ indexDirect->setLeft(symbol);
+ TIntermConstantUnion *indexNode = constructIndexNode(index);
+ indexDirect->setRight(indexNode);
+ return indexDirect;
+}
+
+TIntermBinary *constructGLFragDataAssignNode(int index)
+{
+ TIntermBinary *assign = new TIntermBinary(EOpAssign);
+ assign->setLeft(constructGLFragDataNode(index));
+ assign->setRight(constructGLFragDataNode(0));
+ assign->setType(TType(EbtFloat, 4));
+ return assign;
+}
class GLFragColorBroadcastTraverser : public TIntermTraverser
{
public:
- GLFragColorBroadcastTraverser(int maxDrawBuffers)
- : TIntermTraverser(true, false, false),
- mMainSequence(nullptr),
- mGLFragColorUsed(false),
- mMaxDrawBuffers(maxDrawBuffers)
+ GLFragColorBroadcastTraverser()
+ : TIntermTraverser(true, false, false), mMainSequence(nullptr), mGLFragColorUsed(false)
{
}
- void broadcastGLFragColor();
+ void broadcastGLFragColor(int maxDrawBuffers);
bool isGLFragColorUsed() const { return mGLFragColorUsed; }
protected:
void visitSymbol(TIntermSymbol *node) override;
- bool visitFunctionDefinition(Visit visit, TIntermFunctionDefinition *node) override;
-
- TIntermBinary *constructGLFragDataNode(int index) const;
- TIntermBinary *constructGLFragDataAssignNode(int index) const;
+ bool visitAggregate(Visit visit, TIntermAggregate *node) override;
private:
TIntermSequence *mMainSequence;
bool mGLFragColorUsed;
- int mMaxDrawBuffers;
};
-TIntermBinary *GLFragColorBroadcastTraverser::constructGLFragDataNode(int index) const
-{
- TType gl_FragDataType = TType(EbtFloat, EbpMedium, EvqFragData, 4);
- gl_FragDataType.setArraySize(mMaxDrawBuffers);
-
- TIntermSymbol *symbol = new TIntermSymbol(0, "gl_FragData", gl_FragDataType);
- TIntermTyped *indexNode = TIntermTyped::CreateIndexNode(index);
-
- TIntermBinary *binary = new TIntermBinary(EOpIndexDirect, symbol, indexNode);
- return binary;
-}
-
-TIntermBinary *GLFragColorBroadcastTraverser::constructGLFragDataAssignNode(int index) const
-{
- TIntermTyped *fragDataIndex = constructGLFragDataNode(index);
- TIntermTyped *fragDataZero = constructGLFragDataNode(0);
-
- return new TIntermBinary(EOpAssign, fragDataIndex, fragDataZero);
-}
-
void GLFragColorBroadcastTraverser::visitSymbol(TIntermSymbol *node)
{
if (node->getSymbol() == "gl_FragColor")
@@ -77,22 +76,34 @@ void GLFragColorBroadcastTraverser::visitSymbol(TIntermSymbol *node)
}
}
-bool GLFragColorBroadcastTraverser::visitFunctionDefinition(Visit visit,
- TIntermFunctionDefinition *node)
+bool GLFragColorBroadcastTraverser::visitAggregate(Visit visit, TIntermAggregate *node)
{
- ASSERT(visit == PreVisit);
- if (node->getFunctionSymbolInfo()->isMain())
+ switch (node->getOp())
{
- TIntermBlock *body = node->getBody();
- ASSERT(body);
- mMainSequence = body->getSequence();
+ case EOpFunction:
+ // Function definition.
+ ASSERT(visit == PreVisit);
+ if (node->getName() == "main(")
+ {
+ TIntermSequence *sequence = node->getSequence();
+ ASSERT((sequence->size() == 1) || (sequence->size() == 2));
+ if (sequence->size() == 2)
+ {
+ TIntermAggregate *body = (*sequence)[1]->getAsAggregate();
+ ASSERT(body);
+ mMainSequence = body->getSequence();
+ }
+ }
+ break;
+ default:
+ break;
}
return true;
}
-void GLFragColorBroadcastTraverser::broadcastGLFragColor()
+void GLFragColorBroadcastTraverser::broadcastGLFragColor(int maxDrawBuffers)
{
- ASSERT(mMaxDrawBuffers > 1);
+ ASSERT(maxDrawBuffers > 1);
if (!mGLFragColorUsed)
{
return;
@@ -102,7 +113,7 @@ void GLFragColorBroadcastTraverser::broadcastGLFragColor()
// gl_FragData[1] = gl_FragData[0];
// ...
// gl_FragData[maxDrawBuffers - 1] = gl_FragData[0];
- for (int colorIndex = 1; colorIndex < mMaxDrawBuffers; ++colorIndex)
+ for (int colorIndex = 1; colorIndex < maxDrawBuffers; ++colorIndex)
{
mMainSequence->insert(mMainSequence->end(), constructGLFragDataAssignNode(colorIndex));
}
@@ -115,12 +126,12 @@ void EmulateGLFragColorBroadcast(TIntermNode *root,
std::vector<sh::OutputVariable> *outputVariables)
{
ASSERT(maxDrawBuffers > 1);
- GLFragColorBroadcastTraverser traverser(maxDrawBuffers);
+ GLFragColorBroadcastTraverser traverser;
root->traverse(&traverser);
if (traverser.isGLFragColorUsed())
{
traverser.updateTree();
- traverser.broadcastGLFragColor();
+ traverser.broadcastGLFragColor(maxDrawBuffers);
for (auto &var : *outputVariables)
{
if (var.name == "gl_FragColor")
@@ -133,5 +144,3 @@ void EmulateGLFragColorBroadcast(TIntermNode *root,
}
}
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/EmulateGLFragColorBroadcast.h b/gfx/angle/src/compiler/translator/EmulateGLFragColorBroadcast.h
index 09e8dae6d..627c4c67f 100755
--- a/gfx/angle/src/compiler/translator/EmulateGLFragColorBroadcast.h
+++ b/gfx/angle/src/compiler/translator/EmulateGLFragColorBroadcast.h
@@ -15,6 +15,8 @@
namespace sh
{
struct OutputVariable;
+}
+
class TIntermNode;
// Replace all gl_FragColor with gl_FragData[0], and in the end of main() function,
@@ -22,7 +24,6 @@ class TIntermNode;
// If gl_FragColor is in outputVariables, it is replaced by gl_FragData.
void EmulateGLFragColorBroadcast(TIntermNode *root,
int maxDrawBuffers,
- std::vector<OutputVariable> *outputVariables);
-}
+ std::vector<sh::OutputVariable> *outputVariables);
#endif // COMPILER_TRANSLATOR_EMULATEGLFRAGCOLORBROADCAST_H_
diff --git a/gfx/angle/src/compiler/translator/EmulatePrecision.cpp b/gfx/angle/src/compiler/translator/EmulatePrecision.cpp
index c3c49021c..5f1454b57 100755
--- a/gfx/angle/src/compiler/translator/EmulatePrecision.cpp
+++ b/gfx/angle/src/compiler/translator/EmulatePrecision.cpp
@@ -8,9 +8,6 @@
#include <memory>
-namespace sh
-{
-
namespace
{
@@ -94,7 +91,6 @@ class RoundingHelperWriterHLSL : public RoundingHelperWriter
RoundingHelperWriter *RoundingHelperWriter::createHelperWriter(const ShShaderOutput outputLanguage)
{
- ASSERT(EmulatePrecision::SupportedInLanguage(outputLanguage));
switch (outputLanguage)
{
case SH_HLSL_4_1_OUTPUT:
@@ -102,6 +98,9 @@ RoundingHelperWriter *RoundingHelperWriter::createHelperWriter(const ShShaderOut
case SH_ESSL_OUTPUT:
return new RoundingHelperWriterESSL(outputLanguage);
default:
+ // Other languages not yet supported
+ ASSERT(outputLanguage == SH_GLSL_COMPATIBILITY_OUTPUT ||
+ IsGLSL130OrNewer(outputLanguage));
return new RoundingHelperWriterGLSL(outputLanguage);
}
}
@@ -433,7 +432,7 @@ TIntermAggregate *createInternalFunctionCallNode(TString name, TIntermNode *chil
callNode->setOp(EOpFunctionCall);
TName nameObj(TFunction::mangleName(name));
nameObj.setInternal(true);
- callNode->getFunctionSymbolInfo()->setNameObj(nameObj);
+ callNode->setNameObj(nameObj);
callNode->getSequence()->push_back(child);
return callNode;
}
@@ -470,16 +469,15 @@ bool parentUsesResult(TIntermNode* parent, TIntermNode* node)
return false;
}
- TIntermBlock *blockParent = parent->getAsBlock();
- // If the parent is a block, the result is not assigned anywhere,
+ TIntermAggregate *aggParent = parent->getAsAggregate();
+ // If the parent's op is EOpSequence, the result is not assigned anywhere,
// so rounding it is not needed. In particular, this can avoid a lot of
// unnecessary rounding of unused return values of assignment.
- if (blockParent)
+ if (aggParent && aggParent->getOp() == EOpSequence)
{
return false;
}
- TIntermBinary *binaryParent = parent->getAsBinaryNode();
- if (binaryParent && binaryParent->getOp() == EOpComma && (binaryParent->getRight() != node))
+ if (aggParent && aggParent->getOp() == EOpComma && (aggParent->getSequence()->back() != node))
{
return false;
}
@@ -513,7 +511,7 @@ bool EmulatePrecision::visitBinary(Visit visit, TIntermBinary *node)
if (op == EOpInitialize && visit == InVisit)
mDeclaringVariables = false;
- if ((op == EOpIndexDirectStruct) && visit == InVisit)
+ if ((op == EOpIndexDirectStruct || op == EOpVectorSwizzle) && visit == InVisit)
visitChildren = false;
if (visit != PreVisit)
@@ -601,30 +599,14 @@ bool EmulatePrecision::visitBinary(Visit visit, TIntermBinary *node)
return visitChildren;
}
-bool EmulatePrecision::visitDeclaration(Visit visit, TIntermDeclaration *node)
-{
- // Variable or interface block declaration.
- if (visit == PreVisit)
- {
- mDeclaringVariables = true;
- }
- else if (visit == InVisit)
- {
- mDeclaringVariables = true;
- }
- else
- {
- mDeclaringVariables = false;
- }
- return true;
-}
-
bool EmulatePrecision::visitAggregate(Visit visit, TIntermAggregate *node)
{
bool visitChildren = true;
switch (node->getOp())
{
+ case EOpSequence:
case EOpConstructStruct:
+ case EOpFunction:
break;
case EOpPrototype:
visitChildren = false;
@@ -635,6 +617,21 @@ bool EmulatePrecision::visitAggregate(Visit visit, TIntermAggregate *node)
case EOpInvariantDeclaration:
visitChildren = false;
break;
+ case EOpDeclaration:
+ // Variable declaration.
+ if (visit == PreVisit)
+ {
+ mDeclaringVariables = true;
+ }
+ else if (visit == InVisit)
+ {
+ mDeclaringVariables = true;
+ }
+ else
+ {
+ mDeclaringVariables = false;
+ }
+ break;
case EOpFunctionCall:
{
// Function call.
@@ -708,19 +705,3 @@ void EmulatePrecision::writeEmulationHelpers(TInfoSinkBase &sink,
roundingHelperWriter->writeCompoundAssignmentHelper(sink, it->lType, it->rType, "*", "mul");
}
-// static
-bool EmulatePrecision::SupportedInLanguage(const ShShaderOutput outputLanguage)
-{
- switch (outputLanguage)
- {
- case SH_HLSL_4_1_OUTPUT:
- case SH_ESSL_OUTPUT:
- return true;
- default:
- // Other languages not yet supported
- return (outputLanguage == SH_GLSL_COMPATIBILITY_OUTPUT ||
- sh::IsGLSL130OrNewer(outputLanguage));
- }
-}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/EmulatePrecision.h b/gfx/angle/src/compiler/translator/EmulatePrecision.h
index deb49cd2c..c2b9857bb 100755
--- a/gfx/angle/src/compiler/translator/EmulatePrecision.h
+++ b/gfx/angle/src/compiler/translator/EmulatePrecision.h
@@ -18,9 +18,6 @@
// need to write a huge number of variations of the emulated compound assignment
// to every translated shader with emulation enabled.
-namespace sh
-{
-
class EmulatePrecision : public TLValueTrackingTraverser
{
public:
@@ -30,14 +27,11 @@ class EmulatePrecision : public TLValueTrackingTraverser
bool visitBinary(Visit visit, TIntermBinary *node) override;
bool visitUnary(Visit visit, TIntermUnary *node) override;
bool visitAggregate(Visit visit, TIntermAggregate *node) override;
- bool visitDeclaration(Visit visit, TIntermDeclaration *node) override;
void writeEmulationHelpers(TInfoSinkBase &sink,
const int shaderVersion,
const ShShaderOutput outputLanguage);
- static bool SupportedInLanguage(const ShShaderOutput outputLanguage);
-
private:
struct TypePair
{
@@ -67,6 +61,4 @@ class EmulatePrecision : public TLValueTrackingTraverser
bool mDeclaringVariables;
};
-} // namespace sh
-
#endif // COMPILER_TRANSLATOR_EMULATE_PRECISION_H_
diff --git a/gfx/angle/src/compiler/translator/ExpandIntegerPowExpressions.cpp b/gfx/angle/src/compiler/translator/ExpandIntegerPowExpressions.cpp
index c5ff7b36b..b78c2059e 100755
--- a/gfx/angle/src/compiler/translator/ExpandIntegerPowExpressions.cpp
+++ b/gfx/angle/src/compiler/translator/ExpandIntegerPowExpressions.cpp
@@ -116,7 +116,7 @@ bool Traverser::visitAggregate(Visit visit, TIntermAggregate *node)
TIntermTyped *lhs = sequence->at(0)->getAsTyped();
ASSERT(lhs);
- TIntermDeclaration *init = createTempInitDeclaration(lhs);
+ TIntermAggregate *init = createTempInitDeclaration(lhs);
TIntermTyped *current = createTempSymbol(lhs->getType());
insertStatementInParentBlock(init);
@@ -124,7 +124,10 @@ bool Traverser::visitAggregate(Visit visit, TIntermAggregate *node)
// Create a chain of n-1 multiples.
for (int i = 1; i < n; ++i)
{
- TIntermBinary *mul = new TIntermBinary(EOpMul, current, createTempSymbol(lhs->getType()));
+ TIntermBinary *mul = new TIntermBinary(EOpMul);
+ mul->setLeft(current);
+ mul->setRight(createTempSymbol(lhs->getType()));
+ mul->setType(node->getType());
mul->setLine(node->getLine());
current = mul;
}
@@ -135,7 +138,9 @@ bool Traverser::visitAggregate(Visit visit, TIntermAggregate *node)
TConstantUnion *oneVal = new TConstantUnion();
oneVal->setFConst(1.0f);
TIntermConstantUnion *oneNode = new TIntermConstantUnion(oneVal, node->getType());
- TIntermBinary *div = new TIntermBinary(EOpDiv, oneNode, current);
+ TIntermBinary *div = new TIntermBinary(EOpDiv);
+ div->setLeft(oneNode);
+ div->setRight(current);
current = div;
}
diff --git a/gfx/angle/src/compiler/translator/ExtensionGLSL.cpp b/gfx/angle/src/compiler/translator/ExtensionGLSL.cpp
index 5b5dc580e..d7f45f7ee 100755
--- a/gfx/angle/src/compiler/translator/ExtensionGLSL.cpp
+++ b/gfx/angle/src/compiler/translator/ExtensionGLSL.cpp
@@ -10,9 +10,6 @@
#include "compiler/translator/VersionGLSL.h"
-namespace sh
-{
-
TExtensionGLSL::TExtensionGLSL(ShShaderOutput output)
: TIntermTraverser(true, false, false), mTargetVersion(ShaderOutputTypeToGLSLVersion(output))
{
@@ -101,5 +98,3 @@ void TExtensionGLSL::checkOperator(TIntermOperator *node)
break;
}
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/ExtensionGLSL.h b/gfx/angle/src/compiler/translator/ExtensionGLSL.h
index 3c2dbe074..6bb84d612 100755
--- a/gfx/angle/src/compiler/translator/ExtensionGLSL.h
+++ b/gfx/angle/src/compiler/translator/ExtensionGLSL.h
@@ -14,9 +14,6 @@
#include "compiler/translator/IntermNode.h"
-namespace sh
-{
-
// Traverses the intermediate tree to determine which GLSL extensions are required
// to support the shader.
class TExtensionGLSL : public TIntermTraverser
@@ -39,6 +36,4 @@ class TExtensionGLSL : public TIntermTraverser
std::set<std::string> mRequiredExtensions;
};
-} // namespace sh
-
#endif // COMPILER_TRANSLATOR_EXTENSIONGLSL_H_
diff --git a/gfx/angle/src/compiler/translator/ForLoopUnroll.cpp b/gfx/angle/src/compiler/translator/ForLoopUnroll.cpp
index 58cce845f..4cc1c26a1 100755
--- a/gfx/angle/src/compiler/translator/ForLoopUnroll.cpp
+++ b/gfx/angle/src/compiler/translator/ForLoopUnroll.cpp
@@ -9,9 +9,6 @@
#include "compiler/translator/ValidateLimitations.h"
#include "angle_gl.h"
-namespace sh
-{
-
bool ForLoopUnrollMarker::visitBinary(Visit, TIntermBinary *node)
{
if (mUnrollCondition != kSamplerArrayIndex)
@@ -54,7 +51,7 @@ bool ForLoopUnrollMarker::visitLoop(Visit, TIntermLoop *node)
// Check if loop index type is integer.
// This is called after ValidateLimitations pass, so the loop has the limited form specified
// in ESSL 1.00 appendix A.
- TIntermSequence *declSeq = node->getInit()->getAsDeclarationNode()->getSequence();
+ TIntermSequence *declSeq = node->getInit()->getAsAggregate()->getSequence();
TIntermSymbol *symbol = (*declSeq)[0]->getAsBinaryNode()->getLeft()->getAsSymbolNode();
if (symbol->getBasicType() == EbtInt)
node->setUnrollFlag(true);
@@ -98,5 +95,3 @@ void ForLoopUnrollMarker::visitSymbol(TIntermSymbol* symbol)
}
}
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/ForLoopUnroll.h b/gfx/angle/src/compiler/translator/ForLoopUnroll.h
index cda89b29f..9c49ecad3 100755
--- a/gfx/angle/src/compiler/translator/ForLoopUnroll.h
+++ b/gfx/angle/src/compiler/translator/ForLoopUnroll.h
@@ -9,9 +9,6 @@
#include "compiler/translator/LoopInfo.h"
-namespace sh
-{
-
// This class detects for-loops that needs to be unrolled.
// Currently we support two unroll conditions:
// 1) kForLoopWithIntegerIndex: unroll if the index type is integer.
@@ -53,6 +50,4 @@ class ForLoopUnrollMarker : public TIntermTraverser
bool mHasRunLoopValidation;
};
-} // namespace sh
-
#endif // COMPILER_TRANSLATOR_FORLOOPUNROLL_H_
diff --git a/gfx/angle/src/compiler/translator/InfoSink.cpp b/gfx/angle/src/compiler/translator/InfoSink.cpp
index e71fe51d3..cd59658ff 100755
--- a/gfx/angle/src/compiler/translator/InfoSink.cpp
+++ b/gfx/angle/src/compiler/translator/InfoSink.cpp
@@ -6,9 +6,6 @@
#include "compiler/translator/InfoSink.h"
-namespace sh
-{
-
void TInfoSinkBase::prefix(TPrefixType p) {
switch(p) {
case EPrefixNone:
@@ -55,5 +52,3 @@ void TInfoSinkBase::message(TPrefixType p, const TSourceLoc& loc, const char* m)
sink.append(m);
sink.append("\n");
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/InfoSink.h b/gfx/angle/src/compiler/translator/InfoSink.h
index b18e5861b..f47fafa8e 100755
--- a/gfx/angle/src/compiler/translator/InfoSink.h
+++ b/gfx/angle/src/compiler/translator/InfoSink.h
@@ -11,9 +11,6 @@
#include <stdlib.h>
#include "compiler/translator/Common.h"
-namespace sh
-{
-
// Returns the fractional part of the given floating-point number.
inline float fractionalPart(float f) {
float intPart = 0.0f;
@@ -116,6 +113,4 @@ public:
TInfoSinkBase obj;
};
-} // namespace sh
-
#endif // COMPILER_TRANSLATOR_INFOSINK_H_
diff --git a/gfx/angle/src/compiler/translator/Initialize.cpp b/gfx/angle/src/compiler/translator/Initialize.cpp
index a0b35f636..0bf6ac45b 100755
--- a/gfx/angle/src/compiler/translator/Initialize.cpp
+++ b/gfx/angle/src/compiler/translator/Initialize.cpp
@@ -16,12 +16,8 @@
#include "compiler/translator/IntermNode.h"
#include "angle_gl.h"
-namespace sh
-{
-
void InsertBuiltInFunctions(sh::GLenum type, ShShaderSpec spec, const ShBuiltInResources &resources, TSymbolTable &symbolTable)
{
- const TType *voidType = TCache::getType(EbtVoid);
const TType *float1 = TCache::getType(EbtFloat);
const TType *float2 = TCache::getType(EbtFloat, 2);
const TType *float3 = TCache::getType(EbtFloat, 3);
@@ -473,26 +469,6 @@ void InsertBuiltInFunctions(sh::GLenum type, ShShaderSpec spec, const ShBuiltInR
symbolTable.insertBuiltIn(ESSL3_BUILTINS, gvec4, "textureProjGradOffset", gsampler3D, float4, float3, float3, int3);
symbolTable.insertBuiltIn(ESSL3_BUILTINS, float1, "textureProjGradOffset", sampler2DShadow, float4, float2, float2, int2);
- const TType *gimage2D = TCache::getType(EbtGImage2D);
- const TType *gimage3D = TCache::getType(EbtGImage3D);
- const TType *gimage2DArray = TCache::getType(EbtGImage2DArray);
- const TType *gimageCube = TCache::getType(EbtGImageCube);
-
- symbolTable.insertBuiltIn(ESSL3_1_BUILTINS, voidType, "imageStore", gimage2D, int2, gvec4);
- symbolTable.insertBuiltIn(ESSL3_1_BUILTINS, voidType, "imageStore", gimage3D, int3, gvec4);
- symbolTable.insertBuiltIn(ESSL3_1_BUILTINS, voidType, "imageStore", gimage2DArray, int3, gvec4);
- symbolTable.insertBuiltIn(ESSL3_1_BUILTINS, voidType, "imageStore", gimageCube, int3, gvec4);
-
- symbolTable.insertBuiltIn(ESSL3_1_BUILTINS, gvec4, "imageLoad", gimage2D, int2);
- symbolTable.insertBuiltIn(ESSL3_1_BUILTINS, gvec4, "imageLoad", gimage3D, int3);
- symbolTable.insertBuiltIn(ESSL3_1_BUILTINS, gvec4, "imageLoad", gimage2DArray, int3);
- symbolTable.insertBuiltIn(ESSL3_1_BUILTINS, gvec4, "imageLoad", gimageCube, int3);
-
- symbolTable.insertBuiltIn(ESSL3_1_BUILTINS, int2, "imageSize", gimage2D);
- symbolTable.insertBuiltIn(ESSL3_1_BUILTINS, int3, "imageSize", gimage3D);
- symbolTable.insertBuiltIn(ESSL3_1_BUILTINS, int3, "imageSize", gimage2DArray);
- symbolTable.insertBuiltIn(ESSL3_1_BUILTINS, int3, "imageSize", gimageCube);
-
//
// Depth range in window coordinates
//
@@ -535,13 +511,16 @@ void InsertBuiltInFunctions(sh::GLenum type, ShShaderSpec spec, const ShBuiltInR
symbolTable.insertConstInt(ESSL1_BUILTINS, "gl_MaxVaryingVectors", resources.MaxVaryingVectors,
EbpMedium);
- symbolTable.insertConstInt(COMMON_BUILTINS, "gl_MaxDrawBuffers", resources.MaxDrawBuffers,
- EbpMedium);
- if (resources.EXT_blend_func_extended)
+ if (spec != SH_CSS_SHADERS_SPEC)
{
- symbolTable.insertConstIntExt(COMMON_BUILTINS, "GL_EXT_blend_func_extended",
- "gl_MaxDualSourceDrawBuffersEXT",
- resources.MaxDualSourceDrawBuffers);
+ symbolTable.insertConstInt(COMMON_BUILTINS, "gl_MaxDrawBuffers", resources.MaxDrawBuffers,
+ EbpMedium);
+ if (resources.EXT_blend_func_extended)
+ {
+ symbolTable.insertConstIntExt(COMMON_BUILTINS, "GL_EXT_blend_func_extended",
+ "gl_MaxDualSourceDrawBuffersEXT",
+ resources.MaxDualSourceDrawBuffers);
+ }
}
symbolTable.insertConstInt(ESSL3_BUILTINS, "gl_MaxVertexOutputVectors",
@@ -611,73 +590,85 @@ void IdentifyBuiltIns(sh::GLenum type, ShShaderSpec spec,
switch (type)
{
case GL_FRAGMENT_SHADER:
- {
- symbolTable.insert(COMMON_BUILTINS, new TVariable(NewPoolTString("gl_FragCoord"),
- TType(EbtFloat, EbpMedium, EvqFragCoord, 4)));
- symbolTable.insert(COMMON_BUILTINS, new TVariable(NewPoolTString("gl_FrontFacing"),
- TType(EbtBool, EbpUndefined, EvqFrontFacing, 1)));
- symbolTable.insert(COMMON_BUILTINS, new TVariable(NewPoolTString("gl_PointCoord"),
- TType(EbtFloat, EbpMedium, EvqPointCoord, 2)));
-
- symbolTable.insert(ESSL1_BUILTINS, new TVariable(NewPoolTString("gl_FragColor"),
- TType(EbtFloat, EbpMedium, EvqFragColor, 4)));
- TType fragData(EbtFloat, EbpMedium, EvqFragData, 4, 1, true);
- fragData.setArraySize(resources.MaxDrawBuffers);
- symbolTable.insert(ESSL1_BUILTINS, new TVariable(NewPoolTString("gl_FragData"), fragData));
-
- if (resources.EXT_blend_func_extended)
- {
- symbolTable.insert(
- ESSL1_BUILTINS, "GL_EXT_blend_func_extended",
- new TVariable(NewPoolTString("gl_SecondaryFragColorEXT"),
- TType(EbtFloat, EbpMedium, EvqSecondaryFragColorEXT, 4)));
- TType secondaryFragData(EbtFloat, EbpMedium, EvqSecondaryFragDataEXT, 4, 1, true);
- secondaryFragData.setArraySize(resources.MaxDualSourceDrawBuffers);
- symbolTable.insert(
- ESSL1_BUILTINS, "GL_EXT_blend_func_extended",
- new TVariable(NewPoolTString("gl_SecondaryFragDataEXT"), secondaryFragData));
- }
-
- if (resources.EXT_frag_depth)
- {
- symbolTable.insert(
- ESSL1_BUILTINS, "GL_EXT_frag_depth",
- new TVariable(
- NewPoolTString("gl_FragDepthEXT"),
- TType(EbtFloat, resources.FragmentPrecisionHigh ? EbpHigh : EbpMedium,
- EvqFragDepthEXT, 1)));
- }
-
- symbolTable.insert(ESSL3_BUILTINS,
- new TVariable(NewPoolTString("gl_FragDepth"),
- TType(EbtFloat, EbpHigh, EvqFragDepth, 1)));
-
- if (resources.EXT_shader_framebuffer_fetch || resources.NV_shader_framebuffer_fetch)
- {
- TType lastFragData(EbtFloat, EbpMedium, EvqLastFragData, 4, 1, true);
- lastFragData.setArraySize(resources.MaxDrawBuffers);
-
- if (resources.EXT_shader_framebuffer_fetch)
- {
- symbolTable.insert(ESSL1_BUILTINS, "GL_EXT_shader_framebuffer_fetch",
- new TVariable(NewPoolTString("gl_LastFragData"), lastFragData));
- }
- else if (resources.NV_shader_framebuffer_fetch)
- {
- symbolTable.insert(ESSL1_BUILTINS, "GL_NV_shader_framebuffer_fetch",
- new TVariable(NewPoolTString("gl_LastFragColor"),
- TType(EbtFloat, EbpMedium, EvqLastFragColor, 4)));
- symbolTable.insert(ESSL1_BUILTINS, "GL_NV_shader_framebuffer_fetch",
- new TVariable(NewPoolTString("gl_LastFragData"), lastFragData));
- }
- }
- else if (resources.ARM_shader_framebuffer_fetch)
- {
- symbolTable.insert(ESSL1_BUILTINS, "GL_ARM_shader_framebuffer_fetch",
- new TVariable(NewPoolTString("gl_LastFragColorARM"),
- TType(EbtFloat, EbpMedium, EvqLastFragColor, 4)));
- }
- }
+ symbolTable.insert(COMMON_BUILTINS, new TVariable(NewPoolTString("gl_FragCoord"),
+ TType(EbtFloat, EbpMedium, EvqFragCoord, 4)));
+ symbolTable.insert(COMMON_BUILTINS, new TVariable(NewPoolTString("gl_FrontFacing"),
+ TType(EbtBool, EbpUndefined, EvqFrontFacing, 1)));
+ symbolTable.insert(COMMON_BUILTINS, new TVariable(NewPoolTString("gl_PointCoord"),
+ TType(EbtFloat, EbpMedium, EvqPointCoord, 2)));
+
+ //
+ // In CSS Shaders, gl_FragColor, gl_FragData, and gl_MaxDrawBuffers are not available.
+ // Instead, css_MixColor and css_ColorMatrix are available.
+ //
+ if (spec != SH_CSS_SHADERS_SPEC)
+ {
+ symbolTable.insert(ESSL1_BUILTINS, new TVariable(NewPoolTString("gl_FragColor"),
+ TType(EbtFloat, EbpMedium, EvqFragColor, 4)));
+ TType fragData(EbtFloat, EbpMedium, EvqFragData, 4, 1, true);
+ fragData.setArraySize(resources.MaxDrawBuffers);
+ symbolTable.insert(ESSL1_BUILTINS, new TVariable(NewPoolTString("gl_FragData"), fragData));
+
+ if (resources.EXT_blend_func_extended)
+ {
+ symbolTable.insert(
+ ESSL1_BUILTINS, "GL_EXT_blend_func_extended",
+ new TVariable(NewPoolTString("gl_SecondaryFragColorEXT"),
+ TType(EbtFloat, EbpMedium, EvqSecondaryFragColorEXT, 4)));
+ TType secondaryFragData(EbtFloat, EbpMedium, EvqSecondaryFragDataEXT, 4, 1, true);
+ secondaryFragData.setArraySize(resources.MaxDualSourceDrawBuffers);
+ symbolTable.insert(
+ ESSL1_BUILTINS, "GL_EXT_blend_func_extended",
+ new TVariable(NewPoolTString("gl_SecondaryFragDataEXT"), secondaryFragData));
+ }
+
+ if (resources.EXT_frag_depth)
+ {
+ symbolTable.insert(
+ ESSL1_BUILTINS, "GL_EXT_frag_depth",
+ new TVariable(
+ NewPoolTString("gl_FragDepthEXT"),
+ TType(EbtFloat, resources.FragmentPrecisionHigh ? EbpHigh : EbpMedium,
+ EvqFragDepthEXT, 1)));
+ }
+
+ symbolTable.insert(ESSL3_BUILTINS,
+ new TVariable(NewPoolTString("gl_FragDepth"),
+ TType(EbtFloat, EbpHigh, EvqFragDepth, 1)));
+
+ if (resources.EXT_shader_framebuffer_fetch || resources.NV_shader_framebuffer_fetch)
+ {
+ TType lastFragData(EbtFloat, EbpMedium, EvqLastFragData, 4, 1, true);
+ lastFragData.setArraySize(resources.MaxDrawBuffers);
+
+ if (resources.EXT_shader_framebuffer_fetch)
+ {
+ symbolTable.insert(ESSL1_BUILTINS, "GL_EXT_shader_framebuffer_fetch",
+ new TVariable(NewPoolTString("gl_LastFragData"), lastFragData));
+ }
+ else if (resources.NV_shader_framebuffer_fetch)
+ {
+ symbolTable.insert(ESSL1_BUILTINS, "GL_NV_shader_framebuffer_fetch",
+ new TVariable(NewPoolTString("gl_LastFragColor"),
+ TType(EbtFloat, EbpMedium, EvqLastFragColor, 4)));
+ symbolTable.insert(ESSL1_BUILTINS, "GL_NV_shader_framebuffer_fetch",
+ new TVariable(NewPoolTString("gl_LastFragData"), lastFragData));
+ }
+ }
+ else if (resources.ARM_shader_framebuffer_fetch)
+ {
+ symbolTable.insert(ESSL1_BUILTINS, "GL_ARM_shader_framebuffer_fetch",
+ new TVariable(NewPoolTString("gl_LastFragColorARM"),
+ TType(EbtFloat, EbpMedium, EvqLastFragColor, 4)));
+ }
+ }
+ else
+ {
+ symbolTable.insert(ESSL1_BUILTINS, new TVariable(NewPoolTString("css_MixColor"),
+ TType(EbtFloat, EbpMedium, EvqGlobal, 4)));
+ symbolTable.insert(ESSL1_BUILTINS, new TVariable(NewPoolTString("css_ColorMatrix"),
+ TType(EbtFloat, EbpMedium, EvqGlobal, 4, 4)));
+ }
break;
@@ -758,5 +749,3 @@ void ResetExtensionBehavior(TExtensionBehavior &extBehavior)
ext_iter->second = EBhUndefined;
}
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/Initialize.h b/gfx/angle/src/compiler/translator/Initialize.h
index 0f1b60ba3..c43ce3417 100755
--- a/gfx/angle/src/compiler/translator/Initialize.h
+++ b/gfx/angle/src/compiler/translator/Initialize.h
@@ -11,9 +11,6 @@
#include "compiler/translator/Compiler.h"
#include "compiler/translator/SymbolTable.h"
-namespace sh
-{
-
void InsertBuiltInFunctions(sh::GLenum type, ShShaderSpec spec, const ShBuiltInResources &resources, TSymbolTable &table);
void IdentifyBuiltIns(sh::GLenum type, ShShaderSpec spec,
@@ -29,6 +26,4 @@ void InitExtensionBehavior(const ShBuiltInResources& resources,
// extensions will remain unsupported.
void ResetExtensionBehavior(TExtensionBehavior &extensionBehavior);
-} // namespace sh
-
#endif // COMPILER_TRANSLATOR_INITIALIZE_H_
diff --git a/gfx/angle/src/compiler/translator/InitializeDll.cpp b/gfx/angle/src/compiler/translator/InitializeDll.cpp
index 89901935c..713965389 100755
--- a/gfx/angle/src/compiler/translator/InitializeDll.cpp
+++ b/gfx/angle/src/compiler/translator/InitializeDll.cpp
@@ -13,9 +13,6 @@
#include <assert.h>
-namespace sh
-{
-
bool InitProcess()
{
if (!InitializePoolIndex()) {
@@ -39,5 +36,3 @@ void DetachProcess()
FreePoolIndex();
TCache::destroy();
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/InitializeDll.h b/gfx/angle/src/compiler/translator/InitializeDll.h
index b2c787a8c..4c400760f 100755
--- a/gfx/angle/src/compiler/translator/InitializeDll.h
+++ b/gfx/angle/src/compiler/translator/InitializeDll.h
@@ -6,11 +6,8 @@
#ifndef COMPILER_TRANSLATOR_INITIALIZEDLL_H_
#define COMPILER_TRANSLATOR_INITIALIZEDLL_H_
-namespace sh
-{
bool InitProcess();
void DetachProcess();
-} // namespace sh
#endif // COMPILER_TRANSLATOR_INITIALIZEDLL_H_
diff --git a/gfx/angle/src/compiler/translator/InitializeParseContext.cpp b/gfx/angle/src/compiler/translator/InitializeParseContext.cpp
index 67a248b60..c35cedb34 100755
--- a/gfx/angle/src/compiler/translator/InitializeParseContext.cpp
+++ b/gfx/angle/src/compiler/translator/InitializeParseContext.cpp
@@ -10,9 +10,6 @@
#include <assert.h>
-namespace sh
-{
-
TLSIndex GlobalParseContextIndex = TLS_INVALID_INDEX;
bool InitializeParseContextIndex()
@@ -43,4 +40,3 @@ TParseContext* GetGlobalParseContext()
return static_cast<TParseContext*>(GetTLSValue(GlobalParseContextIndex));
}
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/InitializeParseContext.h b/gfx/angle/src/compiler/translator/InitializeParseContext.h
index 9c315be3f..70dac702e 100755
--- a/gfx/angle/src/compiler/translator/InitializeParseContext.h
+++ b/gfx/angle/src/compiler/translator/InitializeParseContext.h
@@ -7,15 +7,11 @@
#ifndef COMPILER_TRANSLATOR_INITIALIZEPARSECONTEXT_H_
#define COMPILER_TRANSLATOR_INITIALIZEPARSECONTEXT_H_
-namespace sh
-{
-
bool InitializeParseContextIndex();
void FreeParseContextIndex();
class TParseContext;
extern void SetGlobalParseContext(TParseContext* context);
extern TParseContext* GetGlobalParseContext();
-} // namespace sh
#endif // COMPILER_TRANSLATOR_INITIALIZEPARSECONTEXT_H_
diff --git a/gfx/angle/src/compiler/translator/InitializeVariables.cpp b/gfx/angle/src/compiler/translator/InitializeVariables.cpp
index dafea1bd6..21f00936e 100755
--- a/gfx/angle/src/compiler/translator/InitializeVariables.cpp
+++ b/gfx/angle/src/compiler/translator/InitializeVariables.cpp
@@ -9,122 +9,191 @@
#include "angle_gl.h"
#include "common/debug.h"
#include "compiler/translator/IntermNode.h"
-#include "compiler/translator/SymbolTable.h"
#include "compiler/translator/util.h"
-namespace sh
+namespace
{
-namespace
+TIntermConstantUnion *constructConstUnionNode(const TType &type)
+{
+ TType myType = type;
+ myType.clearArrayness();
+ myType.setQualifier(EvqConst);
+ size_t size = myType.getObjectSize();
+ TConstantUnion *u = new TConstantUnion[size];
+ for (size_t ii = 0; ii < size; ++ii)
+ {
+ switch (type.getBasicType())
+ {
+ case EbtFloat:
+ u[ii].setFConst(0.0f);
+ break;
+ case EbtInt:
+ u[ii].setIConst(0);
+ break;
+ case EbtUInt:
+ u[ii].setUConst(0u);
+ break;
+ default:
+ UNREACHABLE();
+ return nullptr;
+ }
+ }
+
+ TIntermConstantUnion *node = new TIntermConstantUnion(u, myType);
+ return node;
+}
+
+TIntermConstantUnion *constructIndexNode(int index)
{
+ TConstantUnion *u = new TConstantUnion[1];
+ u[0].setIConst(index);
+
+ TType type(EbtInt, EbpUndefined, EvqConst, 1);
+ TIntermConstantUnion *node = new TIntermConstantUnion(u, type);
+ return node;
+}
class VariableInitializer : public TIntermTraverser
{
public:
- VariableInitializer(const InitVariableList &vars, const TSymbolTable &symbolTable)
- : TIntermTraverser(true, false, false),
- mVariables(vars),
- mSymbolTable(symbolTable),
- mCodeInserted(false)
+ VariableInitializer(const InitVariableList &vars)
+ : TIntermTraverser(true, false, false), mVariables(vars), mCodeInserted(false)
{
- ASSERT(mSymbolTable.atGlobalLevel());
}
protected:
bool visitBinary(Visit, TIntermBinary *node) override { return false; }
bool visitUnary(Visit, TIntermUnary *node) override { return false; }
- bool visitIfElse(Visit, TIntermIfElse *node) override { return false; }
+ bool visitSelection(Visit, TIntermSelection *node) override { return false; }
bool visitLoop(Visit, TIntermLoop *node) override { return false; }
bool visitBranch(Visit, TIntermBranch *node) override { return false; }
- bool visitAggregate(Visit, TIntermAggregate *node) override { return false; }
- bool visitFunctionDefinition(Visit visit, TIntermFunctionDefinition *node) override;
+ bool visitAggregate(Visit visit, TIntermAggregate *node) override;
private:
void insertInitCode(TIntermSequence *sequence);
const InitVariableList &mVariables;
- const TSymbolTable &mSymbolTable;
bool mCodeInserted;
};
// VariableInitializer implementation.
-bool VariableInitializer::visitFunctionDefinition(Visit visit, TIntermFunctionDefinition *node)
+bool VariableInitializer::visitAggregate(Visit visit, TIntermAggregate *node)
{
- // Function definition.
- ASSERT(visit == PreVisit);
- if (node->getFunctionSymbolInfo()->isMain())
+ bool visitChildren = !mCodeInserted;
+ switch (node->getOp())
{
- TIntermBlock *body = node->getBody();
- insertInitCode(body->getSequence());
- mCodeInserted = true;
+ case EOpSequence:
+ break;
+ case EOpFunction:
+ {
+ // Function definition.
+ ASSERT(visit == PreVisit);
+ if (node->getName() == "main(")
+ {
+ TIntermSequence *sequence = node->getSequence();
+ ASSERT((sequence->size() == 1) || (sequence->size() == 2));
+ TIntermAggregate *body = NULL;
+ if (sequence->size() == 1)
+ {
+ body = new TIntermAggregate(EOpSequence);
+ sequence->push_back(body);
+ }
+ else
+ {
+ body = (*sequence)[1]->getAsAggregate();
+ }
+ ASSERT(body);
+ insertInitCode(body->getSequence());
+ mCodeInserted = true;
+ }
+ break;
+ }
+ default:
+ visitChildren = false;
+ break;
}
- return false;
+ return visitChildren;
}
void VariableInitializer::insertInitCode(TIntermSequence *sequence)
{
- for (const auto &var : mVariables)
+ for (size_t ii = 0; ii < mVariables.size(); ++ii)
{
+ const sh::ShaderVariable &var = mVariables[ii];
TString name = TString(var.name.c_str());
-
if (var.isArray())
{
- // Assign the array elements one by one to keep the AST compatible with ESSL 1.00 which
- // doesn't have array assignment.
+ TType type = sh::ConvertShaderVariableTypeToTType(var.type);
size_t pos = name.find_last_of('[');
if (pos != TString::npos)
- {
name = name.substr(0, pos);
- }
- TType elementType = sh::GetShaderVariableBasicType(var);
- TType arrayType = elementType;
- arrayType.setArraySize(var.elementCount());
-
- for (unsigned int i = 0; i < var.arraySize; ++i)
+ for (int index = static_cast<int>(var.arraySize) - 1; index >= 0; --index)
{
- TIntermSymbol *arraySymbol = new TIntermSymbol(0, name, arrayType);
- TIntermBinary *element = new TIntermBinary(EOpIndexDirect, arraySymbol,
- TIntermTyped::CreateIndexNode(i));
+ TIntermBinary *assign = new TIntermBinary(EOpAssign);
+ sequence->insert(sequence->begin(), assign);
+
+ TIntermBinary *indexDirect = new TIntermBinary(EOpIndexDirect);
+ TIntermSymbol *symbol = new TIntermSymbol(0, name, type);
+ indexDirect->setLeft(symbol);
+ TIntermConstantUnion *indexNode = constructIndexNode(index);
+ indexDirect->setRight(indexNode);
- TIntermTyped *zero = TIntermTyped::CreateZero(elementType);
- TIntermBinary *assignment = new TIntermBinary(EOpAssign, element, zero);
+ assign->setLeft(indexDirect);
- sequence->insert(sequence->begin(), assignment);
+ TIntermConstantUnion *zeroConst = constructConstUnionNode(type);
+ assign->setRight(zeroConst);
}
}
else if (var.isStruct())
{
- TVariable *structInfo = reinterpret_cast<TVariable *>(mSymbolTable.findGlobal(name));
- ASSERT(structInfo);
-
- TIntermSymbol *symbol = new TIntermSymbol(0, name, structInfo->getType());
- TIntermTyped *zero = TIntermTyped::CreateZero(structInfo->getType());
-
- TIntermBinary *assign = new TIntermBinary(EOpAssign, symbol, zero);
- sequence->insert(sequence->begin(), assign);
+ TFieldList *fields = new TFieldList;
+ TSourceLoc loc;
+ for (auto field : var.fields)
+ {
+ fields->push_back(new TField(nullptr, new TString(field.name.c_str()), loc));
+ }
+ TStructure *structure = new TStructure(new TString(var.structName.c_str()), fields);
+ TType type;
+ type.setStruct(structure);
+ for (int fieldIndex = 0; fieldIndex < static_cast<int>(var.fields.size()); ++fieldIndex)
+ {
+ TIntermBinary *assign = new TIntermBinary(EOpAssign);
+ sequence->insert(sequence->begin(), assign);
+
+ TIntermBinary *indexDirectStruct = new TIntermBinary(EOpIndexDirectStruct);
+ TIntermSymbol *symbol = new TIntermSymbol(0, name, type);
+ indexDirectStruct->setLeft(symbol);
+ TIntermConstantUnion *indexNode = constructIndexNode(fieldIndex);
+ indexDirectStruct->setRight(indexNode);
+ assign->setLeft(indexDirectStruct);
+
+ const sh::ShaderVariable &field = var.fields[fieldIndex];
+ TType fieldType = sh::ConvertShaderVariableTypeToTType(field.type);
+ TIntermConstantUnion *zeroConst = constructConstUnionNode(fieldType);
+ assign->setRight(zeroConst);
+ }
}
else
{
- TType type = sh::GetShaderVariableBasicType(var);
- TIntermSymbol *symbol = new TIntermSymbol(0, name, type);
- TIntermTyped *zero = TIntermTyped::CreateZero(type);
-
- TIntermBinary *assign = new TIntermBinary(EOpAssign, symbol, zero);
+ TType type = sh::ConvertShaderVariableTypeToTType(var.type);
+ TIntermBinary *assign = new TIntermBinary(EOpAssign);
sequence->insert(sequence->begin(), assign);
+ TIntermSymbol *symbol = new TIntermSymbol(0, name, type);
+ assign->setLeft(symbol);
+ TIntermConstantUnion *zeroConst = constructConstUnionNode(type);
+ assign->setRight(zeroConst);
}
+
}
}
} // namespace anonymous
-void InitializeVariables(TIntermNode *root,
- const InitVariableList &vars,
- const TSymbolTable &symbolTable)
+void InitializeVariables(TIntermNode *root, const InitVariableList &vars)
{
- VariableInitializer initializer(vars, symbolTable);
+ VariableInitializer initializer(vars);
root->traverse(&initializer);
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/InitializeVariables.h b/gfx/angle/src/compiler/translator/InitializeVariables.h
index 9a34245a5..f826032d3 100755
--- a/gfx/angle/src/compiler/translator/InitializeVariables.h
+++ b/gfx/angle/src/compiler/translator/InitializeVariables.h
@@ -9,23 +9,10 @@
#include <GLSLANG/ShaderLang.h>
-namespace sh
-{
class TIntermNode;
-class TSymbolTable;
typedef std::vector<sh::ShaderVariable> InitVariableList;
-// Currently this function is only capable of initializing variables of basic types,
-// array of basic types, or struct of basic types.
-// For now it is used for the following two scenarios:
-// 1. initializing gl_Position;
-// 2. initializing ESSL 3.00 shaders' output variables (which might be structs).
-// Specifically, it's not feasible to make it work for local variables because if their
-// types are structs, we can't look into TSymbolTable to find the TType data.
-void InitializeVariables(TIntermNode *root,
- const InitVariableList &vars,
- const TSymbolTable &symbolTable);
-} // namespace sh
+void InitializeVariables(TIntermNode *root, const InitVariableList &vars);
#endif // COMPILER_TRANSLATOR_INITIALIZEVARIABLES_H_
diff --git a/gfx/angle/src/compiler/translator/IntermNode.cpp b/gfx/angle/src/compiler/translator/IntermNode.cpp
index b91b43ecf..dcf47879a 100755
--- a/gfx/angle/src/compiler/translator/IntermNode.cpp
+++ b/gfx/angle/src/compiler/translator/IntermNode.cpp
@@ -21,10 +21,6 @@
#include "compiler/translator/HashNames.h"
#include "compiler/translator/IntermNode.h"
#include "compiler/translator/SymbolTable.h"
-#include "compiler/translator/util.h"
-
-namespace sh
-{
namespace
{
@@ -47,14 +43,13 @@ TConstantUnion *Vectorize(const TConstantUnion &constant, size_t size)
return constUnion;
}
-void UndefinedConstantFoldingError(const TSourceLoc &loc,
- TOperator op,
- TBasicType basicType,
- TDiagnostics *diagnostics,
- TConstantUnion *result)
+void UndefinedConstantFoldingError(const TSourceLoc &loc, TOperator op, TBasicType basicType,
+ TInfoSink &infoSink, TConstantUnion *result)
{
- diagnostics->warning(loc, "operation result is undefined for the values passed in",
- GetOperatorString(op), "");
+ std::stringstream constantFoldingErrorStream;
+ constantFoldingErrorStream << "'" << GetOperatorString(op)
+ << "' operation result is undefined for the values passed in";
+ infoSink.info.message(EPrefixWarning, loc, constantFoldingErrorStream.str().c_str());
switch (basicType)
{
@@ -96,7 +91,7 @@ float VectorDotProduct(const TConstantUnion *paramArray1,
return result;
}
-TIntermTyped *CreateFoldedNode(const TConstantUnion *constArray,
+TIntermTyped *CreateFoldedNode(TConstantUnion *constArray,
const TIntermTyped *originalNode,
TQualifier qualifier)
{
@@ -173,7 +168,7 @@ bool TIntermLoop::replaceChildNode(
REPLACE_IF_IS(mInit, TIntermNode, original, replacement);
REPLACE_IF_IS(mCond, TIntermTyped, original, replacement);
REPLACE_IF_IS(mExpr, TIntermTyped, original, replacement);
- REPLACE_IF_IS(mBody, TIntermBlock, original, replacement);
+ REPLACE_IF_IS(mBody, TIntermAggregate, original, replacement);
return false;
}
@@ -184,13 +179,6 @@ bool TIntermBranch::replaceChildNode(
return false;
}
-bool TIntermSwizzle::replaceChildNode(TIntermNode *original, TIntermNode *replacement)
-{
- ASSERT(original->getAsTyped()->getType() == replacement->getAsTyped()->getType());
- REPLACE_IF_IS(mOperand, TIntermTyped, original, replacement);
- return false;
-}
-
bool TIntermBinary::replaceChildNode(
TIntermNode *original, TIntermNode *replacement)
{
@@ -202,67 +190,42 @@ bool TIntermBinary::replaceChildNode(
bool TIntermUnary::replaceChildNode(
TIntermNode *original, TIntermNode *replacement)
{
- ASSERT(original->getAsTyped()->getType() == replacement->getAsTyped()->getType());
REPLACE_IF_IS(mOperand, TIntermTyped, original, replacement);
return false;
}
-bool TIntermFunctionDefinition::replaceChildNode(TIntermNode *original, TIntermNode *replacement)
-{
- REPLACE_IF_IS(mParameters, TIntermAggregate, original, replacement);
- REPLACE_IF_IS(mBody, TIntermBlock, original, replacement);
- return false;
-}
-
bool TIntermAggregate::replaceChildNode(
TIntermNode *original, TIntermNode *replacement)
{
- return replaceChildNodeInternal(original, replacement);
-}
-
-bool TIntermBlock::replaceChildNode(TIntermNode *original, TIntermNode *replacement)
-{
- return replaceChildNodeInternal(original, replacement);
-}
-
-bool TIntermDeclaration::replaceChildNode(TIntermNode *original, TIntermNode *replacement)
-{
- return replaceChildNodeInternal(original, replacement);
-}
-
-bool TIntermAggregateBase::replaceChildNodeInternal(TIntermNode *original, TIntermNode *replacement)
-{
- for (size_t ii = 0; ii < getSequence()->size(); ++ii)
+ for (size_t ii = 0; ii < mSequence.size(); ++ii)
{
- REPLACE_IF_IS((*getSequence())[ii], TIntermNode, original, replacement);
+ REPLACE_IF_IS(mSequence[ii], TIntermNode, original, replacement);
}
return false;
}
-bool TIntermAggregateBase::replaceChildNodeWithMultiple(TIntermNode *original,
- const TIntermSequence &replacements)
+bool TIntermAggregate::replaceChildNodeWithMultiple(TIntermNode *original, TIntermSequence replacements)
{
- for (auto it = getSequence()->begin(); it < getSequence()->end(); ++it)
+ for (auto it = mSequence.begin(); it < mSequence.end(); ++it)
{
if (*it == original)
{
- it = getSequence()->erase(it);
- getSequence()->insert(it, replacements.begin(), replacements.end());
+ it = mSequence.erase(it);
+ mSequence.insert(it, replacements.begin(), replacements.end());
return true;
}
}
return false;
}
-bool TIntermAggregateBase::insertChildNodes(TIntermSequence::size_type position,
- const TIntermSequence &insertions)
+bool TIntermAggregate::insertChildNodes(TIntermSequence::size_type position, TIntermSequence insertions)
{
- if (position > getSequence()->size())
+ if (position > mSequence.size())
{
return false;
}
- auto it = getSequence()->begin() + position;
- getSequence()->insert(it, insertions.begin(), insertions.end());
+ auto it = mSequence.begin() + position;
+ mSequence.insert(it, insertions.begin(), insertions.end());
return true;
}
@@ -320,47 +283,18 @@ void TIntermAggregate::setBuiltInFunctionPrecision()
}
// ESSL 3.0 spec section 8: textureSize always gets highp precision.
// All other functions that take a sampler are assumed to be texture functions.
- if (mFunctionInfo.getName().find("textureSize") == 0)
+ if (mName.getString().find("textureSize") == 0)
mType.setPrecision(EbpHigh);
else
mType.setPrecision(precision);
}
-void TIntermBlock::appendStatement(TIntermNode *statement)
-{
- // Declaration nodes with no children can appear if all the declarators just added constants to
- // the symbol table instead of generating code. They're no-ops so they aren't added to blocks.
- if (statement != nullptr && (statement->getAsDeclarationNode() == nullptr ||
- !statement->getAsDeclarationNode()->getSequence()->empty()))
- {
- mStatements.push_back(statement);
- }
-}
-
-void TIntermDeclaration::appendDeclarator(TIntermTyped *declarator)
-{
- ASSERT(declarator != nullptr);
- ASSERT(declarator->getAsSymbolNode() != nullptr ||
- (declarator->getAsBinaryNode() != nullptr &&
- declarator->getAsBinaryNode()->getOp() == EOpInitialize));
- ASSERT(mDeclarators.empty() ||
- declarator->getType().sameElementType(mDeclarators.back()->getAsTyped()->getType()));
- mDeclarators.push_back(declarator);
-}
-
-bool TIntermTernary::replaceChildNode(TIntermNode *original, TIntermNode *replacement)
-{
- REPLACE_IF_IS(mCondition, TIntermTyped, original, replacement);
- REPLACE_IF_IS(mTrueExpression, TIntermTyped, original, replacement);
- REPLACE_IF_IS(mFalseExpression, TIntermTyped, original, replacement);
- return false;
-}
-
-bool TIntermIfElse::replaceChildNode(TIntermNode *original, TIntermNode *replacement)
+bool TIntermSelection::replaceChildNode(
+ TIntermNode *original, TIntermNode *replacement)
{
REPLACE_IF_IS(mCondition, TIntermTyped, original, replacement);
- REPLACE_IF_IS(mTrueBlock, TIntermBlock, original, replacement);
- REPLACE_IF_IS(mFalseBlock, TIntermBlock, original, replacement);
+ REPLACE_IF_IS(mTrueBlock, TIntermNode, original, replacement);
+ REPLACE_IF_IS(mFalseBlock, TIntermNode, original, replacement);
return false;
}
@@ -368,7 +302,7 @@ bool TIntermSwitch::replaceChildNode(
TIntermNode *original, TIntermNode *replacement)
{
REPLACE_IF_IS(mInit, TIntermTyped, original, replacement);
- REPLACE_IF_IS(mStatementList, TIntermBlock, original, replacement);
+ REPLACE_IF_IS(mStatementList, TIntermAggregate, original, replacement);
return false;
}
@@ -402,100 +336,18 @@ bool TIntermTyped::isConstructorWithOnlyConstantUnionParameters()
return true;
}
-// static
-TIntermTyped *TIntermTyped::CreateIndexNode(int index)
-{
- TConstantUnion *u = new TConstantUnion[1];
- u[0].setIConst(index);
-
- TType type(EbtInt, EbpUndefined, EvqConst, 1);
- TIntermConstantUnion *node = new TIntermConstantUnion(u, type);
- return node;
-}
-
-// static
-TIntermTyped *TIntermTyped::CreateZero(const TType &type)
-{
- TType constType(type);
- constType.setQualifier(EvqConst);
-
- if (!type.isArray() && type.getBasicType() != EbtStruct)
- {
- ASSERT(type.isScalar() || type.isVector() || type.isMatrix());
-
- size_t size = constType.getObjectSize();
- TConstantUnion *u = new TConstantUnion[size];
- for (size_t i = 0; i < size; ++i)
- {
- switch (type.getBasicType())
- {
- case EbtFloat:
- u[i].setFConst(0.0f);
- break;
- case EbtInt:
- u[i].setIConst(0);
- break;
- case EbtUInt:
- u[i].setUConst(0u);
- break;
- case EbtBool:
- u[i].setBConst(false);
- break;
- default:
- UNREACHABLE();
- return nullptr;
- }
- }
-
- TIntermConstantUnion *node = new TIntermConstantUnion(u, constType);
- return node;
- }
-
- TIntermAggregate *constructor = new TIntermAggregate(sh::TypeToConstructorOperator(type));
- constructor->setType(constType);
-
- if (type.isArray())
- {
- TType elementType(type);
- elementType.clearArrayness();
-
- size_t arraySize = type.getArraySize();
- for (size_t i = 0; i < arraySize; ++i)
- {
- constructor->getSequence()->push_back(CreateZero(elementType));
- }
- }
- else
- {
- ASSERT(type.getBasicType() == EbtStruct);
-
- TStructure *structure = type.getStruct();
- for (const auto &field : structure->fields())
- {
- constructor->getSequence()->push_back(CreateZero(*field->type()));
- }
- }
-
- return constructor;
-}
-
TIntermConstantUnion::TIntermConstantUnion(const TIntermConstantUnion &node) : TIntermTyped(node)
{
mUnionArrayPointer = node.mUnionArrayPointer;
}
-void TFunctionSymbolInfo::setFromFunction(const TFunction &function)
-{
- setName(function.getMangledName());
- setId(function.getUniqueId());
-}
-
TIntermAggregate::TIntermAggregate(const TIntermAggregate &node)
: TIntermOperator(node),
+ mName(node.mName),
mUserDefined(node.mUserDefined),
+ mFunctionId(node.mFunctionId),
mUseEmulatedFunction(node.mUseEmulatedFunction),
- mGotPrecisionFromChildren(node.mGotPrecisionFromChildren),
- mFunctionInfo(node.mFunctionInfo)
+ mGotPrecisionFromChildren(node.mGotPrecisionFromChildren)
{
for (TIntermNode *child : node.mSequence)
{
@@ -506,13 +358,6 @@ TIntermAggregate::TIntermAggregate(const TIntermAggregate &node)
}
}
-TIntermSwizzle::TIntermSwizzle(const TIntermSwizzle &node) : TIntermTyped(node)
-{
- TIntermTyped *operandCopy = node.mOperand->deepCopy();
- ASSERT(operandCopy != nullptr);
- mOperand = operandCopy;
-}
-
TIntermBinary::TIntermBinary(const TIntermBinary &node)
: TIntermOperator(node), mAddIndexClamp(node.mAddIndexClamp)
{
@@ -531,15 +376,20 @@ TIntermUnary::TIntermUnary(const TIntermUnary &node)
mOperand = operandCopy;
}
-TIntermTernary::TIntermTernary(const TIntermTernary &node) : TIntermTyped(node)
+TIntermSelection::TIntermSelection(const TIntermSelection &node) : TIntermTyped(node)
{
+ // Only supported for ternary nodes, not if statements.
+ TIntermTyped *trueTyped = node.mTrueBlock->getAsTyped();
+ TIntermTyped *falseTyped = node.mFalseBlock->getAsTyped();
+ ASSERT(trueTyped != nullptr);
+ ASSERT(falseTyped != nullptr);
TIntermTyped *conditionCopy = node.mCondition->deepCopy();
- TIntermTyped *trueCopy = node.mTrueExpression->deepCopy();
- TIntermTyped *falseCopy = node.mFalseExpression->deepCopy();
+ TIntermTyped *trueCopy = trueTyped->deepCopy();
+ TIntermTyped *falseCopy = falseTyped->deepCopy();
ASSERT(conditionCopy != nullptr && trueCopy != nullptr && falseCopy != nullptr);
- mCondition = conditionCopy;
- mTrueExpression = trueCopy;
- mFalseExpression = falseCopy;
+ mCondition = conditionCopy;
+ mTrueBlock = trueCopy;
+ mFalseBlock = falseCopy;
}
bool TIntermOperator::isAssignment() const
@@ -694,187 +544,77 @@ TOperator TIntermBinary::GetMulAssignOpBasedOnOperands(const TType &left, const
// Make sure the type of a unary operator is appropriate for its
// combination of operation and operand type.
//
-void TIntermUnary::promote()
+void TIntermUnary::promote(const TType *funcReturnType)
{
- TQualifier resultQualifier = EvqTemporary;
- if (mOperand->getQualifier() == EvqConst)
- resultQualifier = EvqConst;
-
- unsigned char operandPrimarySize =
- static_cast<unsigned char>(mOperand->getType().getNominalSize());
switch (mOp)
{
- case EOpFloatBitsToInt:
- setType(TType(EbtInt, EbpHigh, resultQualifier, operandPrimarySize));
- break;
- case EOpFloatBitsToUint:
- setType(TType(EbtUInt, EbpHigh, resultQualifier, operandPrimarySize));
- break;
- case EOpIntBitsToFloat:
- case EOpUintBitsToFloat:
- setType(TType(EbtFloat, EbpHigh, resultQualifier, operandPrimarySize));
- break;
- case EOpPackSnorm2x16:
- case EOpPackUnorm2x16:
- case EOpPackHalf2x16:
- setType(TType(EbtUInt, EbpHigh, resultQualifier));
- break;
- case EOpUnpackSnorm2x16:
- case EOpUnpackUnorm2x16:
- setType(TType(EbtFloat, EbpHigh, resultQualifier, 2));
- break;
- case EOpUnpackHalf2x16:
- setType(TType(EbtFloat, EbpMedium, resultQualifier, 2));
- break;
- case EOpAny:
- case EOpAll:
- setType(TType(EbtBool, EbpUndefined, resultQualifier));
- break;
- case EOpLength:
- case EOpDeterminant:
- setType(TType(EbtFloat, mOperand->getType().getPrecision(), resultQualifier));
- break;
- case EOpTranspose:
- setType(TType(EbtFloat, mOperand->getType().getPrecision(), resultQualifier,
- static_cast<unsigned char>(mOperand->getType().getRows()),
- static_cast<unsigned char>(mOperand->getType().getCols())));
- break;
- case EOpIsInf:
- case EOpIsNan:
- setType(TType(EbtBool, EbpUndefined, resultQualifier, operandPrimarySize));
- break;
- default:
- setType(mOperand->getType());
- mType.setQualifier(resultQualifier);
- break;
- }
-}
-
-TIntermSwizzle::TIntermSwizzle(TIntermTyped *operand, const TVector<int> &swizzleOffsets)
- : TIntermTyped(TType(EbtFloat, EbpUndefined)),
- mOperand(operand),
- mSwizzleOffsets(swizzleOffsets)
-{
- ASSERT(mSwizzleOffsets.size() <= 4);
- promote();
-}
-
-TIntermUnary::TIntermUnary(TOperator op, TIntermTyped *operand)
- : TIntermOperator(op), mOperand(operand), mUseEmulatedFunction(false)
-{
- promote();
-}
-
-TIntermBinary::TIntermBinary(TOperator op, TIntermTyped *left, TIntermTyped *right)
- : TIntermOperator(op), mLeft(left), mRight(right), mAddIndexClamp(false)
-{
- promote();
-}
-
-TIntermTernary::TIntermTernary(TIntermTyped *cond,
- TIntermTyped *trueExpression,
- TIntermTyped *falseExpression)
- : TIntermTyped(trueExpression->getType()),
- mCondition(cond),
- mTrueExpression(trueExpression),
- mFalseExpression(falseExpression)
-{
- getTypePointer()->setQualifier(
- TIntermTernary::DetermineQualifier(cond, trueExpression, falseExpression));
-}
-
-// static
-TQualifier TIntermTernary::DetermineQualifier(TIntermTyped *cond,
- TIntermTyped *trueExpression,
- TIntermTyped *falseExpression)
-{
- if (cond->getQualifier() == EvqConst && trueExpression->getQualifier() == EvqConst &&
- falseExpression->getQualifier() == EvqConst)
- {
- return EvqConst;
+ case EOpFloatBitsToInt:
+ case EOpFloatBitsToUint:
+ case EOpIntBitsToFloat:
+ case EOpUintBitsToFloat:
+ case EOpPackSnorm2x16:
+ case EOpPackUnorm2x16:
+ case EOpPackHalf2x16:
+ case EOpUnpackSnorm2x16:
+ case EOpUnpackUnorm2x16:
+ mType.setPrecision(EbpHigh);
+ break;
+ case EOpUnpackHalf2x16:
+ mType.setPrecision(EbpMedium);
+ break;
+ default:
+ setType(mOperand->getType());
}
- return EvqTemporary;
-}
-void TIntermSwizzle::promote()
-{
- TQualifier resultQualifier = EvqTemporary;
- if (mOperand->getQualifier() == EvqConst)
- resultQualifier = EvqConst;
-
- auto numFields = mSwizzleOffsets.size();
- setType(TType(mOperand->getBasicType(), mOperand->getPrecision(), resultQualifier,
- static_cast<unsigned char>(numFields)));
-}
-
-bool TIntermSwizzle::hasDuplicateOffsets() const
-{
- int offsetCount[4] = {0u, 0u, 0u, 0u};
- for (const auto offset : mSwizzleOffsets)
+ if (funcReturnType != nullptr)
{
- offsetCount[offset]++;
- if (offsetCount[offset] > 1)
+ if (funcReturnType->getBasicType() == EbtBool)
{
- return true;
+ // Bool types should not have precision.
+ setType(*funcReturnType);
}
- }
- return false;
-}
-
-void TIntermSwizzle::writeOffsetsAsXYZW(TInfoSinkBase *out) const
-{
- for (const int offset : mSwizzleOffsets)
- {
- switch (offset)
+ else
{
- case 0:
- *out << "x";
- break;
- case 1:
- *out << "y";
- break;
- case 2:
- *out << "z";
- break;
- case 3:
- *out << "w";
- break;
- default:
- UNREACHABLE();
+ // Precision of the node has been set based on the operand.
+ setTypePreservePrecision(*funcReturnType);
}
}
+
+ if (mOperand->getQualifier() == EvqConst)
+ mType.setQualifier(EvqConst);
+ else
+ mType.setQualifier(EvqTemporary);
}
-TQualifier TIntermBinary::GetCommaQualifier(int shaderVersion,
- const TIntermTyped *left,
- const TIntermTyped *right)
+TIntermBinary::TIntermBinary(TOperator op, TIntermTyped *left, TIntermTyped *right)
+ : TIntermOperator(op), mLeft(left), mRight(right), mAddIndexClamp(false)
{
- // ESSL3.00 section 12.43: The result of a sequence operator is not a constant-expression.
- if (shaderVersion >= 300 || left->getQualifier() != EvqConst ||
- right->getQualifier() != EvqConst)
- {
- return EvqTemporary;
- }
- return EvqConst;
+ promote();
}
-// Establishes the type of the result of the binary operation.
+//
+// Establishes the type of the resultant operation, as well as
+// makes the operator the correct one for the operands.
+//
+// For lots of operations it should already be established that the operand
+// combination is valid, but returns false if operator can't work on operands.
+//
void TIntermBinary::promote()
{
+ ASSERT(mLeft->isArray() == mRight->isArray());
+
ASSERT(!isMultiplication() ||
mOp == GetMulOpBasedOnOperands(mLeft->getType(), mRight->getType()));
- // Comma is handled as a special case.
- if (mOp == EOpComma)
- {
- setType(mRight->getType());
- return;
- }
-
// Base assumption: just make the type the same as the left
// operand. Then only deviations from this need be coded.
setType(mLeft->getType());
+ // The result gets promoted to the highest precision.
+ TPrecision higherPrecision = GetHigherPrecision(
+ mLeft->getPrecision(), mRight->getPrecision());
+ getTypePointer()->setPrecision(higherPrecision);
+
TQualifier resultQualifier = EvqConst;
// Binary operations results in temporary variables unless both
// operands are const.
@@ -884,55 +624,6 @@ void TIntermBinary::promote()
getTypePointer()->setQualifier(EvqTemporary);
}
- // Handle indexing ops.
- switch (mOp)
- {
- case EOpIndexDirect:
- case EOpIndexIndirect:
- if (mLeft->isArray())
- {
- mType.clearArrayness();
- }
- else if (mLeft->isMatrix())
- {
- setType(TType(mLeft->getBasicType(), mLeft->getPrecision(), resultQualifier,
- static_cast<unsigned char>(mLeft->getRows())));
- }
- else if (mLeft->isVector())
- {
- setType(TType(mLeft->getBasicType(), mLeft->getPrecision(), resultQualifier));
- }
- else
- {
- UNREACHABLE();
- }
- return;
- case EOpIndexDirectStruct:
- {
- const TFieldList &fields = mLeft->getType().getStruct()->fields();
- const int i = mRight->getAsConstantUnion()->getIConst(0);
- setType(*fields[i]->type());
- getTypePointer()->setQualifier(resultQualifier);
- return;
- }
- case EOpIndexDirectInterfaceBlock:
- {
- const TFieldList &fields = mLeft->getType().getInterfaceBlock()->fields();
- const int i = mRight->getAsConstantUnion()->getIConst(0);
- setType(*fields[i]->type());
- getTypePointer()->setQualifier(resultQualifier);
- return;
- }
- default:
- break;
- }
-
- ASSERT(mLeft->isArray() == mRight->isArray());
-
- // The result gets promoted to the highest precision.
- TPrecision higherPrecision = GetHigherPrecision(mLeft->getPrecision(), mRight->getPrecision());
- getTypePointer()->setPrecision(higherPrecision);
-
const int nominalSize =
std::max(mLeft->getNominalSize(), mRight->getNominalSize());
@@ -952,8 +643,8 @@ void TIntermBinary::promote()
case EOpGreaterThan:
case EOpLessThanEqual:
case EOpGreaterThanEqual:
- setType(TType(EbtBool, EbpUndefined, resultQualifier));
- break;
+ setType(TType(EbtBool, EbpUndefined));
+ break;
//
// And and Or operate on conditionals
@@ -962,7 +653,7 @@ void TIntermBinary::promote()
case EOpLogicalXor:
case EOpLogicalOr:
ASSERT(mLeft->getBasicType() == EbtBool && mRight->getBasicType() == EbtBool);
- setType(TType(EbtBool, EbpUndefined, resultQualifier));
+ setType(TType(EbtBool, EbpUndefined));
break;
default:
@@ -1058,7 +749,8 @@ void TIntermBinary::promote()
case EOpIndexIndirect:
case EOpIndexDirectInterfaceBlock:
case EOpIndexDirectStruct:
- // These ops should be already fully handled.
+ // TODO (oetuaho): These ops could be handled here as well (should be done closer to the
+ // top of the function).
UNREACHABLE();
break;
default:
@@ -1067,105 +759,26 @@ void TIntermBinary::promote()
}
}
-const TConstantUnion *TIntermConstantUnion::foldIndexing(int index)
-{
- if (isArray())
- {
- ASSERT(index < static_cast<int>(getType().getArraySize()));
- TType arrayElementType = getType();
- arrayElementType.clearArrayness();
- size_t arrayElementSize = arrayElementType.getObjectSize();
- return &mUnionArrayPointer[arrayElementSize * index];
- }
- else if (isMatrix())
- {
- ASSERT(index < getType().getCols());
- int size = getType().getRows();
- return &mUnionArrayPointer[size * index];
- }
- else if (isVector())
- {
- ASSERT(index < getType().getNominalSize());
- return &mUnionArrayPointer[index];
- }
- else
- {
- UNREACHABLE();
- return nullptr;
- }
-}
-
-TIntermTyped *TIntermSwizzle::fold()
+TIntermTyped *TIntermBinary::fold(TDiagnostics *diagnostics)
{
- TIntermConstantUnion *operandConstant = mOperand->getAsConstantUnion();
- if (operandConstant == nullptr)
+ TIntermConstantUnion *leftConstant = mLeft->getAsConstantUnion();
+ TIntermConstantUnion *rightConstant = mRight->getAsConstantUnion();
+ if (leftConstant == nullptr || rightConstant == nullptr)
{
return nullptr;
}
+ TConstantUnion *constArray = leftConstant->foldBinary(mOp, rightConstant, diagnostics);
- TConstantUnion *constArray = new TConstantUnion[mSwizzleOffsets.size()];
- for (size_t i = 0; i < mSwizzleOffsets.size(); ++i)
- {
- constArray[i] = *operandConstant->foldIndexing(mSwizzleOffsets.at(i));
- }
- return CreateFoldedNode(constArray, this, mType.getQualifier());
-}
-
-TIntermTyped *TIntermBinary::fold(TDiagnostics *diagnostics)
-{
- TIntermConstantUnion *leftConstant = mLeft->getAsConstantUnion();
- TIntermConstantUnion *rightConstant = mRight->getAsConstantUnion();
- switch (mOp)
+ // Nodes may be constant folded without being qualified as constant.
+ TQualifier resultQualifier = EvqConst;
+ if (mLeft->getQualifier() != EvqConst || mRight->getQualifier() != EvqConst)
{
- case EOpIndexDirect:
- {
- if (leftConstant == nullptr || rightConstant == nullptr)
- {
- return nullptr;
- }
- int index = rightConstant->getIConst(0);
-
- const TConstantUnion *constArray = leftConstant->foldIndexing(index);
- return CreateFoldedNode(constArray, this, mType.getQualifier());
- }
- case EOpIndexDirectStruct:
- {
- if (leftConstant == nullptr || rightConstant == nullptr)
- {
- return nullptr;
- }
- const TFieldList &fields = mLeft->getType().getStruct()->fields();
- size_t index = static_cast<size_t>(rightConstant->getIConst(0));
-
- size_t previousFieldsSize = 0;
- for (size_t i = 0; i < index; ++i)
- {
- previousFieldsSize += fields[i]->type()->getObjectSize();
- }
-
- const TConstantUnion *constArray = leftConstant->getUnionArrayPointer();
- return CreateFoldedNode(constArray + previousFieldsSize, this, mType.getQualifier());
- }
- case EOpIndexIndirect:
- case EOpIndexDirectInterfaceBlock:
- // Can never be constant folded.
- return nullptr;
- default:
- {
- if (leftConstant == nullptr || rightConstant == nullptr)
- {
- return nullptr;
- }
- TConstantUnion *constArray =
- leftConstant->foldBinary(mOp, rightConstant, diagnostics, mLeft->getLine());
-
- // Nodes may be constant folded without being qualified as constant.
- return CreateFoldedNode(constArray, this, mType.getQualifier());
- }
+ resultQualifier = EvqTemporary;
}
+ return CreateFoldedNode(constArray, this, resultQualifier);
}
-TIntermTyped *TIntermUnary::fold(TDiagnostics *diagnostics)
+TIntermTyped *TIntermUnary::fold(TInfoSink &infoSink)
{
TIntermConstantUnion *operandConstant = mOperand->getAsConstantUnion();
if (operandConstant == nullptr)
@@ -1188,18 +801,19 @@ TIntermTyped *TIntermUnary::fold(TDiagnostics *diagnostics)
case EOpUnpackUnorm2x16:
case EOpPackHalf2x16:
case EOpUnpackHalf2x16:
- constArray = operandConstant->foldUnaryNonComponentWise(mOp);
- break;
+ constArray = operandConstant->foldUnaryWithDifferentReturnType(mOp, infoSink);
+ break;
default:
- constArray = operandConstant->foldUnaryComponentWise(mOp, diagnostics);
- break;
+ constArray = operandConstant->foldUnaryWithSameReturnType(mOp, infoSink);
+ break;
}
// Nodes may be constant folded without being qualified as constant.
- return CreateFoldedNode(constArray, this, mType.getQualifier());
+ TQualifier resultQualifier = mOperand->getQualifier() == EvqConst ? EvqConst : EvqTemporary;
+ return CreateFoldedNode(constArray, this, resultQualifier);
}
-TIntermTyped *TIntermAggregate::fold(TDiagnostics *diagnostics)
+TIntermTyped *TIntermAggregate::fold(TInfoSink &infoSink)
{
// Make sure that all params are constant before actual constant folding.
for (auto *param : *getSequence())
@@ -1211,9 +825,9 @@ TIntermTyped *TIntermAggregate::fold(TDiagnostics *diagnostics)
}
TConstantUnion *constArray = nullptr;
if (isConstructor())
- constArray = TIntermConstantUnion::FoldAggregateConstructor(this);
+ constArray = TIntermConstantUnion::FoldAggregateConstructor(this, infoSink);
else
- constArray = TIntermConstantUnion::FoldAggregateBuiltIn(this, diagnostics);
+ constArray = TIntermConstantUnion::FoldAggregateBuiltIn(this, infoSink);
// Nodes may be constant folded without being qualified as constant.
TQualifier resultQualifier = areChildrenConstQualified() ? EvqConst : EvqTemporary;
@@ -1228,13 +842,15 @@ TIntermTyped *TIntermAggregate::fold(TDiagnostics *diagnostics)
//
TConstantUnion *TIntermConstantUnion::foldBinary(TOperator op,
TIntermConstantUnion *rightNode,
- TDiagnostics *diagnostics,
- const TSourceLoc &line)
+ TDiagnostics *diagnostics)
{
const TConstantUnion *leftArray = getUnionArrayPointer();
const TConstantUnion *rightArray = rightNode->getUnionArrayPointer();
- ASSERT(leftArray && rightArray);
+ if (!leftArray)
+ return nullptr;
+ if (!rightArray)
+ return nullptr;
size_t objectSize = getType().getObjectSize();
@@ -1257,12 +873,12 @@ TConstantUnion *TIntermConstantUnion::foldBinary(TOperator op,
case EOpAdd:
resultArray = new TConstantUnion[objectSize];
for (size_t i = 0; i < objectSize; i++)
- resultArray[i] = TConstantUnion::add(leftArray[i], rightArray[i], diagnostics, line);
+ resultArray[i] = leftArray[i] + rightArray[i];
break;
case EOpSub:
resultArray = new TConstantUnion[objectSize];
for (size_t i = 0; i < objectSize; i++)
- resultArray[i] = TConstantUnion::sub(leftArray[i], rightArray[i], diagnostics, line);
+ resultArray[i] = leftArray[i] - rightArray[i];
break;
case EOpMul:
@@ -1270,12 +886,11 @@ TConstantUnion *TIntermConstantUnion::foldBinary(TOperator op,
case EOpMatrixTimesScalar:
resultArray = new TConstantUnion[objectSize];
for (size_t i = 0; i < objectSize; i++)
- resultArray[i] = TConstantUnion::mul(leftArray[i], rightArray[i], diagnostics, line);
+ resultArray[i] = leftArray[i] * rightArray[i];
break;
case EOpMatrixTimesMatrix:
{
- // TODO(jmadll): This code should check for overflows.
ASSERT(getType().getBasicType() == EbtFloat && rightNode->getBasicType() == EbtFloat);
const int leftCols = getCols();
@@ -1334,42 +949,14 @@ TConstantUnion *TIntermConstantUnion::foldBinary(TOperator op,
}
else
{
- int lhs = leftArray[i].getIConst();
- int divisor = rightArray[i].getIConst();
if (op == EOpDiv)
{
- // Check for the special case where the minimum representable number is
- // divided by -1. If left alone this leads to integer overflow in C++.
- // ESSL 3.00.6 section 4.1.3 Integers:
- // "However, for the case where the minimum representable value is
- // divided by -1, it is allowed to return either the minimum
- // representable value or the maximum representable value."
- if (lhs == -0x7fffffff - 1 && divisor == -1)
- {
- resultArray[i].setIConst(0x7fffffff);
- }
- else
- {
- resultArray[i].setIConst(lhs / divisor);
- }
+ resultArray[i].setIConst(leftArray[i].getIConst() / rightArray[i].getIConst());
}
else
{
ASSERT(op == EOpIMod);
- if (lhs < 0 || divisor < 0)
- {
- // ESSL 3.00.6 section 5.9: Results of modulus are undefined when
- // either one of the operands is negative.
- diagnostics->warning(getLine(),
- "Negative modulus operator operand "
- "encountered during constant folding",
- "%", "");
- resultArray[i].setIConst(0);
- }
- else
- {
- resultArray[i].setIConst(lhs % divisor);
- }
+ resultArray[i].setIConst(leftArray[i].getIConst() % rightArray[i].getIConst());
}
}
break;
@@ -1405,7 +992,6 @@ TConstantUnion *TIntermConstantUnion::foldBinary(TOperator op,
case EOpMatrixTimesVector:
{
- // TODO(jmadll): This code should check for overflows.
ASSERT(rightNode->getBasicType() == EbtFloat);
const int matrixCols = getCols();
@@ -1428,7 +1014,6 @@ TConstantUnion *TIntermConstantUnion::foldBinary(TOperator op,
case EOpVectorTimesMatrix:
{
- // TODO(jmadll): This code should check for overflows.
ASSERT(getType().getBasicType() == EbtFloat);
const int matrixCols = rightNode->getType().getCols();
@@ -1498,12 +1083,12 @@ TConstantUnion *TIntermConstantUnion::foldBinary(TOperator op,
case EOpBitShiftLeft:
resultArray = new TConstantUnion[objectSize];
for (size_t i = 0; i < objectSize; i++)
- resultArray[i] = TConstantUnion::lshift(leftArray[i], rightArray[i], diagnostics, line);
+ resultArray[i] = leftArray[i] << rightArray[i];
break;
case EOpBitShiftRight:
resultArray = new TConstantUnion[objectSize];
for (size_t i = 0; i < objectSize; i++)
- resultArray[i] = TConstantUnion::rshift(leftArray[i], rightArray[i], diagnostics, line);
+ resultArray[i] = leftArray[i] >> rightArray[i];
break;
case EOpLessThan:
@@ -1561,22 +1146,29 @@ TConstantUnion *TIntermConstantUnion::foldBinary(TOperator op,
return resultArray;
}
-// The fold functions do operations on a constant at GLSL compile time, without generating run-time
-// code. Returns the constant value to keep using. Nullptr should not be returned.
-TConstantUnion *TIntermConstantUnion::foldUnaryNonComponentWise(TOperator op)
+//
+// The fold functions see if an operation on a constant can be done in place,
+// without generating run-time code.
+//
+// Returns the constant value to keep using or nullptr.
+//
+TConstantUnion *TIntermConstantUnion::foldUnaryWithDifferentReturnType(TOperator op, TInfoSink &infoSink)
{
- // Do operations where the return type may have a different number of components compared to the
- // operand type.
+ //
+ // Do operations where the return type has a different number of components compared to the operand type.
+ //
const TConstantUnion *operandArray = getUnionArrayPointer();
- ASSERT(operandArray);
+ if (!operandArray)
+ return nullptr;
size_t objectSize = getType().getObjectSize();
TConstantUnion *resultArray = nullptr;
switch (op)
{
- case EOpAny:
- ASSERT(getType().getBasicType() == EbtBool);
+ case EOpAny:
+ if (getType().getBasicType() == EbtBool)
+ {
resultArray = new TConstantUnion();
resultArray->setBConst(false);
for (size_t i = 0; i < objectSize; i++)
@@ -1588,9 +1180,16 @@ TConstantUnion *TIntermConstantUnion::foldUnaryNonComponentWise(TOperator op)
}
}
break;
+ }
+ else
+ {
+ infoSink.info.message(EPrefixInternalError, getLine(), "Unary operation not folded into constant");
+ return nullptr;
+ }
- case EOpAll:
- ASSERT(getType().getBasicType() == EbtBool);
+ case EOpAll:
+ if (getType().getBasicType() == EbtBool)
+ {
resultArray = new TConstantUnion();
resultArray->setBConst(true);
for (size_t i = 0; i < objectSize; i++)
@@ -1602,55 +1201,89 @@ TConstantUnion *TIntermConstantUnion::foldUnaryNonComponentWise(TOperator op)
}
}
break;
+ }
+ else
+ {
+ infoSink.info.message(EPrefixInternalError, getLine(), "Unary operation not folded into constant");
+ return nullptr;
+ }
- case EOpLength:
- ASSERT(getType().getBasicType() == EbtFloat);
+ case EOpLength:
+ if (getType().getBasicType() == EbtFloat)
+ {
resultArray = new TConstantUnion();
resultArray->setFConst(VectorLength(operandArray, objectSize));
break;
+ }
+ else
+ {
+ infoSink.info.message(EPrefixInternalError, getLine(), "Unary operation not folded into constant");
+ return nullptr;
+ }
- case EOpTranspose:
+ case EOpTranspose:
+ if (getType().getBasicType() == EbtFloat)
{
- ASSERT(getType().getBasicType() == EbtFloat);
resultArray = new TConstantUnion[objectSize];
angle::Matrix<float> result =
GetMatrix(operandArray, getType().getRows(), getType().getCols()).transpose();
SetUnionArrayFromMatrix(result, resultArray);
break;
}
+ else
+ {
+ infoSink.info.message(EPrefixInternalError, getLine(), "Unary operation not folded into constant");
+ return nullptr;
+ }
- case EOpDeterminant:
+ case EOpDeterminant:
+ if (getType().getBasicType() == EbtFloat)
{
- ASSERT(getType().getBasicType() == EbtFloat);
unsigned int size = getType().getNominalSize();
ASSERT(size >= 2 && size <= 4);
resultArray = new TConstantUnion();
resultArray->setFConst(GetMatrix(operandArray, size).determinant());
break;
}
+ else
+ {
+ infoSink.info.message(EPrefixInternalError, getLine(), "Unary operation not folded into constant");
+ return nullptr;
+ }
- case EOpInverse:
+ case EOpInverse:
+ if (getType().getBasicType() == EbtFloat)
{
- ASSERT(getType().getBasicType() == EbtFloat);
unsigned int size = getType().getNominalSize();
ASSERT(size >= 2 && size <= 4);
- resultArray = new TConstantUnion[objectSize];
+ resultArray = new TConstantUnion[objectSize];
angle::Matrix<float> result = GetMatrix(operandArray, size).inverse();
SetUnionArrayFromMatrix(result, resultArray);
break;
}
+ else
+ {
+ infoSink.info.message(EPrefixInternalError, getLine(), "Unary operation not folded into constant");
+ return nullptr;
+ }
- case EOpPackSnorm2x16:
- ASSERT(getType().getBasicType() == EbtFloat);
+ case EOpPackSnorm2x16:
+ if (getType().getBasicType() == EbtFloat)
+ {
ASSERT(getType().getNominalSize() == 2);
resultArray = new TConstantUnion();
- resultArray->setUConst(
- gl::packSnorm2x16(operandArray[0].getFConst(), operandArray[1].getFConst()));
+ resultArray->setUConst(gl::packSnorm2x16(operandArray[0].getFConst(), operandArray[1].getFConst()));
break;
+ }
+ else
+ {
+ infoSink.info.message(EPrefixInternalError, getLine(), "Unary operation not folded into constant");
+ return nullptr;
+ }
- case EOpUnpackSnorm2x16:
+ case EOpUnpackSnorm2x16:
+ if (getType().getBasicType() == EbtUInt)
{
- ASSERT(getType().getBasicType() == EbtUInt);
resultArray = new TConstantUnion[2];
float f1, f2;
gl::unpackSnorm2x16(operandArray[0].getUConst(), &f1, &f2);
@@ -1658,18 +1291,29 @@ TConstantUnion *TIntermConstantUnion::foldUnaryNonComponentWise(TOperator op)
resultArray[1].setFConst(f2);
break;
}
+ else
+ {
+ infoSink.info.message(EPrefixInternalError, getLine(), "Unary operation not folded into constant");
+ return nullptr;
+ }
- case EOpPackUnorm2x16:
- ASSERT(getType().getBasicType() == EbtFloat);
+ case EOpPackUnorm2x16:
+ if (getType().getBasicType() == EbtFloat)
+ {
ASSERT(getType().getNominalSize() == 2);
resultArray = new TConstantUnion();
- resultArray->setUConst(
- gl::packUnorm2x16(operandArray[0].getFConst(), operandArray[1].getFConst()));
+ resultArray->setUConst(gl::packUnorm2x16(operandArray[0].getFConst(), operandArray[1].getFConst()));
break;
+ }
+ else
+ {
+ infoSink.info.message(EPrefixInternalError, getLine(), "Unary operation not folded into constant");
+ return nullptr;
+ }
- case EOpUnpackUnorm2x16:
+ case EOpUnpackUnorm2x16:
+ if (getType().getBasicType() == EbtUInt)
{
- ASSERT(getType().getBasicType() == EbtUInt);
resultArray = new TConstantUnion[2];
float f1, f2;
gl::unpackUnorm2x16(operandArray[0].getUConst(), &f1, &f2);
@@ -1677,18 +1321,29 @@ TConstantUnion *TIntermConstantUnion::foldUnaryNonComponentWise(TOperator op)
resultArray[1].setFConst(f2);
break;
}
+ else
+ {
+ infoSink.info.message(EPrefixInternalError, getLine(), "Unary operation not folded into constant");
+ return nullptr;
+ }
- case EOpPackHalf2x16:
- ASSERT(getType().getBasicType() == EbtFloat);
+ case EOpPackHalf2x16:
+ if (getType().getBasicType() == EbtFloat)
+ {
ASSERT(getType().getNominalSize() == 2);
resultArray = new TConstantUnion();
- resultArray->setUConst(
- gl::packHalf2x16(operandArray[0].getFConst(), operandArray[1].getFConst()));
+ resultArray->setUConst(gl::packHalf2x16(operandArray[0].getFConst(), operandArray[1].getFConst()));
break;
+ }
+ else
+ {
+ infoSink.info.message(EPrefixInternalError, getLine(), "Unary operation not folded into constant");
+ return nullptr;
+ }
- case EOpUnpackHalf2x16:
+ case EOpUnpackHalf2x16:
+ if (getType().getBasicType() == EbtUInt)
{
- ASSERT(getType().getBasicType() == EbtUInt);
resultArray = new TConstantUnion[2];
float f1, f2;
gl::unpackHalf2x16(operandArray[0].getUConst(), &f1, &f2);
@@ -1696,24 +1351,29 @@ TConstantUnion *TIntermConstantUnion::foldUnaryNonComponentWise(TOperator op)
resultArray[1].setFConst(f2);
break;
}
+ else
+ {
+ infoSink.info.message(EPrefixInternalError, getLine(), "Unary operation not folded into constant");
+ return nullptr;
+ }
+ break;
- default:
- UNREACHABLE();
- break;
+ default:
+ break;
}
return resultArray;
}
-TConstantUnion *TIntermConstantUnion::foldUnaryComponentWise(TOperator op,
- TDiagnostics *diagnostics)
+TConstantUnion *TIntermConstantUnion::foldUnaryWithSameReturnType(TOperator op, TInfoSink &infoSink)
{
- // Do unary operations where each component of the result is computed based on the corresponding
- // component of the operand. Also folds normalize, though the divisor in that case takes all
- // components into account.
+ //
+ // Do unary operations where the return type is the same as operand type.
+ //
const TConstantUnion *operandArray = getUnionArrayPointer();
- ASSERT(operandArray);
+ if (!operandArray)
+ return nullptr;
size_t objectSize = getType().getObjectSize();
@@ -1722,232 +1382,243 @@ TConstantUnion *TIntermConstantUnion::foldUnaryComponentWise(TOperator op,
{
switch(op)
{
- case EOpNegative:
- switch (getType().getBasicType())
- {
- case EbtFloat:
- resultArray[i].setFConst(-operandArray[i].getFConst());
- break;
- case EbtInt:
- if (operandArray[i] == std::numeric_limits<int>::min())
- {
- // The minimum representable integer doesn't have a positive
- // counterpart, rather the negation overflows and in ESSL is supposed to
- // wrap back to the minimum representable integer. Make sure that we
- // don't actually let the negation overflow, which has undefined
- // behavior in C++.
- resultArray[i].setIConst(std::numeric_limits<int>::min());
- }
- else
- {
- resultArray[i].setIConst(-operandArray[i].getIConst());
- }
- break;
- case EbtUInt:
- if (operandArray[i] == 0x80000000u)
- {
- resultArray[i].setUConst(0x80000000u);
- }
- else
- {
- resultArray[i].setUConst(static_cast<unsigned int>(
- -static_cast<int>(operandArray[i].getUConst())));
- }
- break;
- default:
- UNREACHABLE();
- return nullptr;
- }
+ case EOpNegative:
+ switch (getType().getBasicType())
+ {
+ case EbtFloat:
+ resultArray[i].setFConst(-operandArray[i].getFConst());
+ break;
+ case EbtInt:
+ resultArray[i].setIConst(-operandArray[i].getIConst());
break;
+ case EbtUInt:
+ resultArray[i].setUConst(static_cast<unsigned int>(
+ -static_cast<int>(operandArray[i].getUConst())));
+ break;
+ default:
+ infoSink.info.message(
+ EPrefixInternalError, getLine(),
+ "Unary operation not folded into constant");
+ return nullptr;
+ }
+ break;
- case EOpPositive:
- switch (getType().getBasicType())
- {
- case EbtFloat:
- resultArray[i].setFConst(operandArray[i].getFConst());
- break;
- case EbtInt:
- resultArray[i].setIConst(operandArray[i].getIConst());
- break;
- case EbtUInt:
- resultArray[i].setUConst(static_cast<unsigned int>(
- static_cast<int>(operandArray[i].getUConst())));
- break;
- default:
- UNREACHABLE();
- return nullptr;
- }
+ case EOpPositive:
+ switch (getType().getBasicType())
+ {
+ case EbtFloat:
+ resultArray[i].setFConst(operandArray[i].getFConst());
break;
+ case EbtInt:
+ resultArray[i].setIConst(operandArray[i].getIConst());
+ break;
+ case EbtUInt:
+ resultArray[i].setUConst(static_cast<unsigned int>(
+ static_cast<int>(operandArray[i].getUConst())));
+ break;
+ default:
+ infoSink.info.message(
+ EPrefixInternalError, getLine(),
+ "Unary operation not folded into constant");
+ return nullptr;
+ }
+ break;
- case EOpLogicalNot:
- switch (getType().getBasicType())
- {
- case EbtBool:
- resultArray[i].setBConst(!operandArray[i].getBConst());
- break;
- default:
- UNREACHABLE();
- return nullptr;
- }
+ case EOpLogicalNot:
+ // this code is written for possible future use,
+ // will not get executed currently
+ switch (getType().getBasicType())
+ {
+ case EbtBool:
+ resultArray[i].setBConst(!operandArray[i].getBConst());
break;
+ default:
+ infoSink.info.message(
+ EPrefixInternalError, getLine(),
+ "Unary operation not folded into constant");
+ return nullptr;
+ }
+ break;
- case EOpBitwiseNot:
- switch (getType().getBasicType())
- {
- case EbtInt:
- resultArray[i].setIConst(~operandArray[i].getIConst());
- break;
- case EbtUInt:
- resultArray[i].setUConst(~operandArray[i].getUConst());
- break;
- default:
- UNREACHABLE();
- return nullptr;
- }
+ case EOpBitwiseNot:
+ switch (getType().getBasicType())
+ {
+ case EbtInt:
+ resultArray[i].setIConst(~operandArray[i].getIConst());
+ break;
+ case EbtUInt:
+ resultArray[i].setUConst(~operandArray[i].getUConst());
break;
+ default:
+ infoSink.info.message(
+ EPrefixInternalError, getLine(),
+ "Unary operation not folded into constant");
+ return nullptr;
+ }
+ break;
- case EOpRadians:
- ASSERT(getType().getBasicType() == EbtFloat);
+ case EOpRadians:
+ if (getType().getBasicType() == EbtFloat)
+ {
resultArray[i].setFConst(kDegreesToRadiansMultiplier * operandArray[i].getFConst());
break;
+ }
+ infoSink.info.message(
+ EPrefixInternalError, getLine(),
+ "Unary operation not folded into constant");
+ return nullptr;
- case EOpDegrees:
- ASSERT(getType().getBasicType() == EbtFloat);
+ case EOpDegrees:
+ if (getType().getBasicType() == EbtFloat)
+ {
resultArray[i].setFConst(kRadiansToDegreesMultiplier * operandArray[i].getFConst());
break;
+ }
+ infoSink.info.message(
+ EPrefixInternalError, getLine(),
+ "Unary operation not folded into constant");
+ return nullptr;
- case EOpSin:
- foldFloatTypeUnary(operandArray[i], &sinf, &resultArray[i]);
- break;
+ case EOpSin:
+ if (!foldFloatTypeUnary(operandArray[i], &sinf, infoSink, &resultArray[i]))
+ return nullptr;
+ break;
- case EOpCos:
- foldFloatTypeUnary(operandArray[i], &cosf, &resultArray[i]);
- break;
+ case EOpCos:
+ if (!foldFloatTypeUnary(operandArray[i], &cosf, infoSink, &resultArray[i]))
+ return nullptr;
+ break;
- case EOpTan:
- foldFloatTypeUnary(operandArray[i], &tanf, &resultArray[i]);
- break;
+ case EOpTan:
+ if (!foldFloatTypeUnary(operandArray[i], &tanf, infoSink, &resultArray[i]))
+ return nullptr;
+ break;
- case EOpAsin:
- // For asin(x), results are undefined if |x| > 1, we are choosing to set result to
- // 0.
- if (fabsf(operandArray[i].getFConst()) > 1.0f)
- UndefinedConstantFoldingError(getLine(), op, getType().getBasicType(),
- diagnostics, &resultArray[i]);
- else
- foldFloatTypeUnary(operandArray[i], &asinf, &resultArray[i]);
- break;
+ case EOpAsin:
+ // For asin(x), results are undefined if |x| > 1, we are choosing to set result to 0.
+ if (getType().getBasicType() == EbtFloat && fabsf(operandArray[i].getFConst()) > 1.0f)
+ UndefinedConstantFoldingError(getLine(), op, getType().getBasicType(), infoSink, &resultArray[i]);
+ else if (!foldFloatTypeUnary(operandArray[i], &asinf, infoSink, &resultArray[i]))
+ return nullptr;
+ break;
- case EOpAcos:
- // For acos(x), results are undefined if |x| > 1, we are choosing to set result to
- // 0.
- if (fabsf(operandArray[i].getFConst()) > 1.0f)
- UndefinedConstantFoldingError(getLine(), op, getType().getBasicType(),
- diagnostics, &resultArray[i]);
- else
- foldFloatTypeUnary(operandArray[i], &acosf, &resultArray[i]);
- break;
+ case EOpAcos:
+ // For acos(x), results are undefined if |x| > 1, we are choosing to set result to 0.
+ if (getType().getBasicType() == EbtFloat && fabsf(operandArray[i].getFConst()) > 1.0f)
+ UndefinedConstantFoldingError(getLine(), op, getType().getBasicType(), infoSink, &resultArray[i]);
+ else if (!foldFloatTypeUnary(operandArray[i], &acosf, infoSink, &resultArray[i]))
+ return nullptr;
+ break;
- case EOpAtan:
- foldFloatTypeUnary(operandArray[i], &atanf, &resultArray[i]);
- break;
+ case EOpAtan:
+ if (!foldFloatTypeUnary(operandArray[i], &atanf, infoSink, &resultArray[i]))
+ return nullptr;
+ break;
- case EOpSinh:
- foldFloatTypeUnary(operandArray[i], &sinhf, &resultArray[i]);
- break;
+ case EOpSinh:
+ if (!foldFloatTypeUnary(operandArray[i], &sinhf, infoSink, &resultArray[i]))
+ return nullptr;
+ break;
- case EOpCosh:
- foldFloatTypeUnary(operandArray[i], &coshf, &resultArray[i]);
- break;
+ case EOpCosh:
+ if (!foldFloatTypeUnary(operandArray[i], &coshf, infoSink, &resultArray[i]))
+ return nullptr;
+ break;
- case EOpTanh:
- foldFloatTypeUnary(operandArray[i], &tanhf, &resultArray[i]);
- break;
+ case EOpTanh:
+ if (!foldFloatTypeUnary(operandArray[i], &tanhf, infoSink, &resultArray[i]))
+ return nullptr;
+ break;
- case EOpAsinh:
- foldFloatTypeUnary(operandArray[i], &asinhf, &resultArray[i]);
- break;
+ case EOpAsinh:
+ if (!foldFloatTypeUnary(operandArray[i], &asinhf, infoSink, &resultArray[i]))
+ return nullptr;
+ break;
- case EOpAcosh:
- // For acosh(x), results are undefined if x < 1, we are choosing to set result to 0.
- if (operandArray[i].getFConst() < 1.0f)
- UndefinedConstantFoldingError(getLine(), op, getType().getBasicType(),
- diagnostics, &resultArray[i]);
- else
- foldFloatTypeUnary(operandArray[i], &acoshf, &resultArray[i]);
- break;
+ case EOpAcosh:
+ // For acosh(x), results are undefined if x < 1, we are choosing to set result to 0.
+ if (getType().getBasicType() == EbtFloat && operandArray[i].getFConst() < 1.0f)
+ UndefinedConstantFoldingError(getLine(), op, getType().getBasicType(), infoSink, &resultArray[i]);
+ else if (!foldFloatTypeUnary(operandArray[i], &acoshf, infoSink, &resultArray[i]))
+ return nullptr;
+ break;
- case EOpAtanh:
- // For atanh(x), results are undefined if |x| >= 1, we are choosing to set result to
- // 0.
- if (fabsf(operandArray[i].getFConst()) >= 1.0f)
- UndefinedConstantFoldingError(getLine(), op, getType().getBasicType(),
- diagnostics, &resultArray[i]);
- else
- foldFloatTypeUnary(operandArray[i], &atanhf, &resultArray[i]);
+ case EOpAtanh:
+ // For atanh(x), results are undefined if |x| >= 1, we are choosing to set result to 0.
+ if (getType().getBasicType() == EbtFloat && fabsf(operandArray[i].getFConst()) >= 1.0f)
+ UndefinedConstantFoldingError(getLine(), op, getType().getBasicType(), infoSink, &resultArray[i]);
+ else if (!foldFloatTypeUnary(operandArray[i], &atanhf, infoSink, &resultArray[i]))
+ return nullptr;
+ break;
+
+ case EOpAbs:
+ switch (getType().getBasicType())
+ {
+ case EbtFloat:
+ resultArray[i].setFConst(fabsf(operandArray[i].getFConst()));
+ break;
+ case EbtInt:
+ resultArray[i].setIConst(abs(operandArray[i].getIConst()));
break;
+ default:
+ infoSink.info.message(
+ EPrefixInternalError, getLine(),
+ "Unary operation not folded into constant");
+ return nullptr;
+ }
+ break;
- case EOpAbs:
- switch (getType().getBasicType())
+ case EOpSign:
+ switch (getType().getBasicType())
+ {
+ case EbtFloat:
{
- case EbtFloat:
- resultArray[i].setFConst(fabsf(operandArray[i].getFConst()));
- break;
- case EbtInt:
- resultArray[i].setIConst(abs(operandArray[i].getIConst()));
- break;
- default:
- UNREACHABLE();
- return nullptr;
+ float fConst = operandArray[i].getFConst();
+ float fResult = 0.0f;
+ if (fConst > 0.0f)
+ fResult = 1.0f;
+ else if (fConst < 0.0f)
+ fResult = -1.0f;
+ resultArray[i].setFConst(fResult);
}
break;
-
- case EOpSign:
- switch (getType().getBasicType())
+ case EbtInt:
{
- case EbtFloat:
- {
- float fConst = operandArray[i].getFConst();
- float fResult = 0.0f;
- if (fConst > 0.0f)
- fResult = 1.0f;
- else if (fConst < 0.0f)
- fResult = -1.0f;
- resultArray[i].setFConst(fResult);
- break;
- }
- case EbtInt:
- {
- int iConst = operandArray[i].getIConst();
- int iResult = 0;
- if (iConst > 0)
- iResult = 1;
- else if (iConst < 0)
- iResult = -1;
- resultArray[i].setIConst(iResult);
- break;
- }
- default:
- UNREACHABLE();
- return nullptr;
+ int iConst = operandArray[i].getIConst();
+ int iResult = 0;
+ if (iConst > 0)
+ iResult = 1;
+ else if (iConst < 0)
+ iResult = -1;
+ resultArray[i].setIConst(iResult);
}
break;
+ default:
+ infoSink.info.message(
+ EPrefixInternalError, getLine(),
+ "Unary operation not folded into constant");
+ return nullptr;
+ }
+ break;
- case EOpFloor:
- foldFloatTypeUnary(operandArray[i], &floorf, &resultArray[i]);
- break;
+ case EOpFloor:
+ if (!foldFloatTypeUnary(operandArray[i], &floorf, infoSink, &resultArray[i]))
+ return nullptr;
+ break;
- case EOpTrunc:
- foldFloatTypeUnary(operandArray[i], &truncf, &resultArray[i]);
- break;
+ case EOpTrunc:
+ if (!foldFloatTypeUnary(operandArray[i], &truncf, infoSink, &resultArray[i]))
+ return nullptr;
+ break;
- case EOpRound:
- foldFloatTypeUnary(operandArray[i], &roundf, &resultArray[i]);
- break;
+ case EOpRound:
+ if (!foldFloatTypeUnary(operandArray[i], &roundf, infoSink, &resultArray[i]))
+ return nullptr;
+ break;
- case EOpRoundEven:
+ case EOpRoundEven:
+ if (getType().getBasicType() == EbtFloat)
{
- ASSERT(getType().getBasicType() == EbtFloat);
float x = operandArray[i].getFConst();
float result;
float fractPart = modff(x, &result);
@@ -1958,151 +1629,197 @@ TConstantUnion *TIntermConstantUnion::foldUnaryComponentWise(TOperator op,
resultArray[i].setFConst(result);
break;
}
+ infoSink.info.message(
+ EPrefixInternalError, getLine(),
+ "Unary operation not folded into constant");
+ return nullptr;
- case EOpCeil:
- foldFloatTypeUnary(operandArray[i], &ceilf, &resultArray[i]);
- break;
+ case EOpCeil:
+ if (!foldFloatTypeUnary(operandArray[i], &ceilf, infoSink, &resultArray[i]))
+ return nullptr;
+ break;
- case EOpFract:
+ case EOpFract:
+ if (getType().getBasicType() == EbtFloat)
{
- ASSERT(getType().getBasicType() == EbtFloat);
float x = operandArray[i].getFConst();
resultArray[i].setFConst(x - floorf(x));
break;
}
+ infoSink.info.message(
+ EPrefixInternalError, getLine(),
+ "Unary operation not folded into constant");
+ return nullptr;
- case EOpIsNan:
- ASSERT(getType().getBasicType() == EbtFloat);
+ case EOpIsNan:
+ if (getType().getBasicType() == EbtFloat)
+ {
resultArray[i].setBConst(gl::isNaN(operandArray[0].getFConst()));
break;
+ }
+ infoSink.info.message(EPrefixInternalError, getLine(), "Unary operation not folded into constant");
+ return nullptr;
- case EOpIsInf:
- ASSERT(getType().getBasicType() == EbtFloat);
+ case EOpIsInf:
+ if (getType().getBasicType() == EbtFloat)
+ {
resultArray[i].setBConst(gl::isInf(operandArray[0].getFConst()));
break;
+ }
+ infoSink.info.message(EPrefixInternalError, getLine(), "Unary operation not folded into constant");
+ return nullptr;
- case EOpFloatBitsToInt:
- ASSERT(getType().getBasicType() == EbtFloat);
+ case EOpFloatBitsToInt:
+ if (getType().getBasicType() == EbtFloat)
+ {
resultArray[i].setIConst(gl::bitCast<int32_t>(operandArray[0].getFConst()));
break;
+ }
+ infoSink.info.message(EPrefixInternalError, getLine(), "Unary operation not folded into constant");
+ return nullptr;
- case EOpFloatBitsToUint:
- ASSERT(getType().getBasicType() == EbtFloat);
+ case EOpFloatBitsToUint:
+ if (getType().getBasicType() == EbtFloat)
+ {
resultArray[i].setUConst(gl::bitCast<uint32_t>(operandArray[0].getFConst()));
break;
+ }
+ infoSink.info.message(EPrefixInternalError, getLine(), "Unary operation not folded into constant");
+ return nullptr;
- case EOpIntBitsToFloat:
- ASSERT(getType().getBasicType() == EbtInt);
+ case EOpIntBitsToFloat:
+ if (getType().getBasicType() == EbtInt)
+ {
resultArray[i].setFConst(gl::bitCast<float>(operandArray[0].getIConst()));
break;
+ }
+ infoSink.info.message(EPrefixInternalError, getLine(), "Unary operation not folded into constant");
+ return nullptr;
- case EOpUintBitsToFloat:
- ASSERT(getType().getBasicType() == EbtUInt);
+ case EOpUintBitsToFloat:
+ if (getType().getBasicType() == EbtUInt)
+ {
resultArray[i].setFConst(gl::bitCast<float>(operandArray[0].getUConst()));
break;
+ }
+ infoSink.info.message(EPrefixInternalError, getLine(), "Unary operation not folded into constant");
+ return nullptr;
- case EOpExp:
- foldFloatTypeUnary(operandArray[i], &expf, &resultArray[i]);
- break;
+ case EOpExp:
+ if (!foldFloatTypeUnary(operandArray[i], &expf, infoSink, &resultArray[i]))
+ return nullptr;
+ break;
- case EOpLog:
- // For log(x), results are undefined if x <= 0, we are choosing to set result to 0.
- if (operandArray[i].getFConst() <= 0.0f)
- UndefinedConstantFoldingError(getLine(), op, getType().getBasicType(),
- diagnostics, &resultArray[i]);
- else
- foldFloatTypeUnary(operandArray[i], &logf, &resultArray[i]);
- break;
+ case EOpLog:
+ // For log(x), results are undefined if x <= 0, we are choosing to set result to 0.
+ if (getType().getBasicType() == EbtFloat && operandArray[i].getFConst() <= 0.0f)
+ UndefinedConstantFoldingError(getLine(), op, getType().getBasicType(), infoSink, &resultArray[i]);
+ else if (!foldFloatTypeUnary(operandArray[i], &logf, infoSink, &resultArray[i]))
+ return nullptr;
+ break;
- case EOpExp2:
- foldFloatTypeUnary(operandArray[i], &exp2f, &resultArray[i]);
- break;
+ case EOpExp2:
+ if (!foldFloatTypeUnary(operandArray[i], &exp2f, infoSink, &resultArray[i]))
+ return nullptr;
+ break;
- case EOpLog2:
- // For log2(x), results are undefined if x <= 0, we are choosing to set result to 0.
- // And log2f is not available on some plarforms like old android, so just using
- // log(x)/log(2) here.
- if (operandArray[i].getFConst() <= 0.0f)
- UndefinedConstantFoldingError(getLine(), op, getType().getBasicType(),
- diagnostics, &resultArray[i]);
- else
- {
- foldFloatTypeUnary(operandArray[i], &logf, &resultArray[i]);
- resultArray[i].setFConst(resultArray[i].getFConst() / logf(2.0f));
- }
- break;
+ case EOpLog2:
+ // For log2(x), results are undefined if x <= 0, we are choosing to set result to 0.
+ // And log2f is not available on some plarforms like old android, so just using log(x)/log(2) here.
+ if (getType().getBasicType() == EbtFloat && operandArray[i].getFConst() <= 0.0f)
+ UndefinedConstantFoldingError(getLine(), op, getType().getBasicType(), infoSink, &resultArray[i]);
+ else if (!foldFloatTypeUnary(operandArray[i], &logf, infoSink, &resultArray[i]))
+ return nullptr;
+ else
+ resultArray[i].setFConst(resultArray[i].getFConst() / logf(2.0f));
+ break;
- case EOpSqrt:
- // For sqrt(x), results are undefined if x < 0, we are choosing to set result to 0.
- if (operandArray[i].getFConst() < 0.0f)
- UndefinedConstantFoldingError(getLine(), op, getType().getBasicType(),
- diagnostics, &resultArray[i]);
- else
- foldFloatTypeUnary(operandArray[i], &sqrtf, &resultArray[i]);
- break;
+ case EOpSqrt:
+ // For sqrt(x), results are undefined if x < 0, we are choosing to set result to 0.
+ if (getType().getBasicType() == EbtFloat && operandArray[i].getFConst() < 0.0f)
+ UndefinedConstantFoldingError(getLine(), op, getType().getBasicType(), infoSink, &resultArray[i]);
+ else if (!foldFloatTypeUnary(operandArray[i], &sqrtf, infoSink, &resultArray[i]))
+ return nullptr;
+ break;
- case EOpInverseSqrt:
- // There is no stdlib built-in function equavalent for GLES built-in inversesqrt(),
- // so getting the square root first using builtin function sqrt() and then taking
- // its inverse.
- // Also, for inversesqrt(x), results are undefined if x <= 0, we are choosing to set
- // result to 0.
- if (operandArray[i].getFConst() <= 0.0f)
- UndefinedConstantFoldingError(getLine(), op, getType().getBasicType(),
- diagnostics, &resultArray[i]);
- else
- {
- foldFloatTypeUnary(operandArray[i], &sqrtf, &resultArray[i]);
- resultArray[i].setFConst(1.0f / resultArray[i].getFConst());
- }
- break;
+ case EOpInverseSqrt:
+ // There is no stdlib built-in function equavalent for GLES built-in inversesqrt(),
+ // so getting the square root first using builtin function sqrt() and then taking its inverse.
+ // Also, for inversesqrt(x), results are undefined if x <= 0, we are choosing to set result to 0.
+ if (getType().getBasicType() == EbtFloat && operandArray[i].getFConst() <= 0.0f)
+ UndefinedConstantFoldingError(getLine(), op, getType().getBasicType(), infoSink, &resultArray[i]);
+ else if (!foldFloatTypeUnary(operandArray[i], &sqrtf, infoSink, &resultArray[i]))
+ return nullptr;
+ else
+ resultArray[i].setFConst(1.0f / resultArray[i].getFConst());
+ break;
- case EOpVectorLogicalNot:
- ASSERT(getType().getBasicType() == EbtBool);
+ case EOpVectorLogicalNot:
+ if (getType().getBasicType() == EbtBool)
+ {
resultArray[i].setBConst(!operandArray[i].getBConst());
break;
+ }
+ infoSink.info.message(
+ EPrefixInternalError, getLine(),
+ "Unary operation not folded into constant");
+ return nullptr;
- case EOpNormalize:
+ case EOpNormalize:
+ if (getType().getBasicType() == EbtFloat)
{
- ASSERT(getType().getBasicType() == EbtFloat);
- float x = operandArray[i].getFConst();
+ float x = operandArray[i].getFConst();
float length = VectorLength(operandArray, objectSize);
if (length)
resultArray[i].setFConst(x / length);
else
- UndefinedConstantFoldingError(getLine(), op, getType().getBasicType(),
- diagnostics, &resultArray[i]);
+ UndefinedConstantFoldingError(getLine(), op, getType().getBasicType(), infoSink,
+ &resultArray[i]);
break;
}
+ infoSink.info.message(EPrefixInternalError, getLine(), "Unary operation not folded into constant");
+ return nullptr;
- case EOpDFdx:
- case EOpDFdy:
- case EOpFwidth:
- ASSERT(getType().getBasicType() == EbtFloat);
+ case EOpDFdx:
+ case EOpDFdy:
+ case EOpFwidth:
+ if (getType().getBasicType() == EbtFloat)
+ {
// Derivatives of constant arguments should be 0.
resultArray[i].setFConst(0.0f);
break;
+ }
+ infoSink.info.message(EPrefixInternalError, getLine(), "Unary operation not folded into constant");
+ return nullptr;
- default:
- return nullptr;
+ default:
+ return nullptr;
}
}
return resultArray;
}
-void TIntermConstantUnion::foldFloatTypeUnary(const TConstantUnion &parameter,
- FloatTypeUnaryFunc builtinFunc,
- TConstantUnion *result) const
+bool TIntermConstantUnion::foldFloatTypeUnary(const TConstantUnion &parameter, FloatTypeUnaryFunc builtinFunc,
+ TInfoSink &infoSink, TConstantUnion *result) const
{
ASSERT(builtinFunc);
- ASSERT(getType().getBasicType() == EbtFloat);
- result->setFConst(builtinFunc(parameter.getFConst()));
+ if (getType().getBasicType() == EbtFloat)
+ {
+ result->setFConst(builtinFunc(parameter.getFConst()));
+ return true;
+ }
+
+ infoSink.info.message(
+ EPrefixInternalError, getLine(),
+ "Unary operation not folded into constant");
+ return false;
}
// static
-TConstantUnion *TIntermConstantUnion::FoldAggregateConstructor(TIntermAggregate *aggregate)
+TConstantUnion *TIntermConstantUnion::FoldAggregateConstructor(TIntermAggregate *aggregate,
+ TInfoSink &infoSink)
{
ASSERT(aggregate->getSequence()->size() > 0u);
size_t resultSize = aggregate->getType().getObjectSize();
@@ -2201,8 +1918,7 @@ TConstantUnion *TIntermConstantUnion::FoldAggregateConstructor(TIntermAggregate
}
// static
-TConstantUnion *TIntermConstantUnion::FoldAggregateBuiltIn(TIntermAggregate *aggregate,
- TDiagnostics *diagnostics)
+TConstantUnion *TIntermConstantUnion::FoldAggregateBuiltIn(TIntermAggregate *aggregate, TInfoSink &infoSink)
{
TOperator op = aggregate->getOp();
TIntermSequence *sequence = aggregate->getSequence();
@@ -2243,298 +1959,284 @@ TConstantUnion *TIntermConstantUnion::FoldAggregateBuiltIn(TIntermAggregate *agg
//
switch (op)
{
- case EOpAtan:
+ case EOpAtan:
{
- ASSERT(basicType == EbtFloat);
- resultArray = new TConstantUnion[maxObjectSize];
- for (size_t i = 0; i < maxObjectSize; i++)
+ if (basicType == EbtFloat)
{
- float y = unionArrays[0][i].getFConst();
- float x = unionArrays[1][i].getFConst();
- // Results are undefined if x and y are both 0.
- if (x == 0.0f && y == 0.0f)
- UndefinedConstantFoldingError(loc, op, basicType, diagnostics,
- &resultArray[i]);
- else
- resultArray[i].setFConst(atan2f(y, x));
+ resultArray = new TConstantUnion[maxObjectSize];
+ for (size_t i = 0; i < maxObjectSize; i++)
+ {
+ float y = unionArrays[0][i].getFConst();
+ float x = unionArrays[1][i].getFConst();
+ // Results are undefined if x and y are both 0.
+ if (x == 0.0f && y == 0.0f)
+ UndefinedConstantFoldingError(loc, op, basicType, infoSink, &resultArray[i]);
+ else
+ resultArray[i].setFConst(atan2f(y, x));
+ }
}
- break;
+ else
+ UNREACHABLE();
}
+ break;
- case EOpPow:
+ case EOpPow:
{
- ASSERT(basicType == EbtFloat);
- resultArray = new TConstantUnion[maxObjectSize];
- for (size_t i = 0; i < maxObjectSize; i++)
+ if (basicType == EbtFloat)
{
- float x = unionArrays[0][i].getFConst();
- float y = unionArrays[1][i].getFConst();
- // Results are undefined if x < 0.
- // Results are undefined if x = 0 and y <= 0.
- if (x < 0.0f)
- UndefinedConstantFoldingError(loc, op, basicType, diagnostics,
- &resultArray[i]);
- else if (x == 0.0f && y <= 0.0f)
- UndefinedConstantFoldingError(loc, op, basicType, diagnostics,
- &resultArray[i]);
- else
- resultArray[i].setFConst(powf(x, y));
+ resultArray = new TConstantUnion[maxObjectSize];
+ for (size_t i = 0; i < maxObjectSize; i++)
+ {
+ float x = unionArrays[0][i].getFConst();
+ float y = unionArrays[1][i].getFConst();
+ // Results are undefined if x < 0.
+ // Results are undefined if x = 0 and y <= 0.
+ if (x < 0.0f)
+ UndefinedConstantFoldingError(loc, op, basicType, infoSink, &resultArray[i]);
+ else if (x == 0.0f && y <= 0.0f)
+ UndefinedConstantFoldingError(loc, op, basicType, infoSink, &resultArray[i]);
+ else
+ resultArray[i].setFConst(powf(x, y));
+ }
}
- break;
+ else
+ UNREACHABLE();
}
+ break;
- case EOpMod:
+ case EOpMod:
{
- ASSERT(basicType == EbtFloat);
- resultArray = new TConstantUnion[maxObjectSize];
- for (size_t i = 0; i < maxObjectSize; i++)
+ if (basicType == EbtFloat)
{
- float x = unionArrays[0][i].getFConst();
- float y = unionArrays[1][i].getFConst();
- resultArray[i].setFConst(x - y * floorf(x / y));
+ resultArray = new TConstantUnion[maxObjectSize];
+ for (size_t i = 0; i < maxObjectSize; i++)
+ {
+ float x = unionArrays[0][i].getFConst();
+ float y = unionArrays[1][i].getFConst();
+ resultArray[i].setFConst(x - y * floorf(x / y));
+ }
}
- break;
+ else
+ UNREACHABLE();
}
+ break;
- case EOpMin:
+ case EOpMin:
{
resultArray = new TConstantUnion[maxObjectSize];
for (size_t i = 0; i < maxObjectSize; i++)
{
switch (basicType)
{
- case EbtFloat:
- resultArray[i].setFConst(std::min(unionArrays[0][i].getFConst(),
- unionArrays[1][i].getFConst()));
- break;
- case EbtInt:
- resultArray[i].setIConst(std::min(unionArrays[0][i].getIConst(),
- unionArrays[1][i].getIConst()));
- break;
- case EbtUInt:
- resultArray[i].setUConst(std::min(unionArrays[0][i].getUConst(),
- unionArrays[1][i].getUConst()));
- break;
- default:
- UNREACHABLE();
- break;
+ case EbtFloat:
+ resultArray[i].setFConst(std::min(unionArrays[0][i].getFConst(), unionArrays[1][i].getFConst()));
+ break;
+ case EbtInt:
+ resultArray[i].setIConst(std::min(unionArrays[0][i].getIConst(), unionArrays[1][i].getIConst()));
+ break;
+ case EbtUInt:
+ resultArray[i].setUConst(std::min(unionArrays[0][i].getUConst(), unionArrays[1][i].getUConst()));
+ break;
+ default:
+ UNREACHABLE();
+ break;
}
}
- break;
}
+ break;
- case EOpMax:
+ case EOpMax:
{
resultArray = new TConstantUnion[maxObjectSize];
for (size_t i = 0; i < maxObjectSize; i++)
{
switch (basicType)
{
- case EbtFloat:
- resultArray[i].setFConst(std::max(unionArrays[0][i].getFConst(),
- unionArrays[1][i].getFConst()));
- break;
- case EbtInt:
- resultArray[i].setIConst(std::max(unionArrays[0][i].getIConst(),
- unionArrays[1][i].getIConst()));
- break;
- case EbtUInt:
- resultArray[i].setUConst(std::max(unionArrays[0][i].getUConst(),
- unionArrays[1][i].getUConst()));
- break;
- default:
- UNREACHABLE();
- break;
+ case EbtFloat:
+ resultArray[i].setFConst(std::max(unionArrays[0][i].getFConst(), unionArrays[1][i].getFConst()));
+ break;
+ case EbtInt:
+ resultArray[i].setIConst(std::max(unionArrays[0][i].getIConst(), unionArrays[1][i].getIConst()));
+ break;
+ case EbtUInt:
+ resultArray[i].setUConst(std::max(unionArrays[0][i].getUConst(), unionArrays[1][i].getUConst()));
+ break;
+ default:
+ UNREACHABLE();
+ break;
}
}
- break;
}
+ break;
- case EOpStep:
+ case EOpStep:
{
- ASSERT(basicType == EbtFloat);
- resultArray = new TConstantUnion[maxObjectSize];
- for (size_t i = 0; i < maxObjectSize; i++)
- resultArray[i].setFConst(
- unionArrays[1][i].getFConst() < unionArrays[0][i].getFConst() ? 0.0f
- : 1.0f);
- break;
+ if (basicType == EbtFloat)
+ {
+ resultArray = new TConstantUnion[maxObjectSize];
+ for (size_t i = 0; i < maxObjectSize; i++)
+ resultArray[i].setFConst(unionArrays[1][i].getFConst() < unionArrays[0][i].getFConst() ? 0.0f : 1.0f);
+ }
+ else
+ UNREACHABLE();
}
+ break;
- case EOpLessThan:
+ case EOpLessThan:
{
resultArray = new TConstantUnion[maxObjectSize];
for (size_t i = 0; i < maxObjectSize; i++)
{
switch (basicType)
{
- case EbtFloat:
- resultArray[i].setBConst(unionArrays[0][i].getFConst() <
- unionArrays[1][i].getFConst());
- break;
- case EbtInt:
- resultArray[i].setBConst(unionArrays[0][i].getIConst() <
- unionArrays[1][i].getIConst());
- break;
- case EbtUInt:
- resultArray[i].setBConst(unionArrays[0][i].getUConst() <
- unionArrays[1][i].getUConst());
- break;
- default:
- UNREACHABLE();
- break;
+ case EbtFloat:
+ resultArray[i].setBConst(unionArrays[0][i].getFConst() < unionArrays[1][i].getFConst());
+ break;
+ case EbtInt:
+ resultArray[i].setBConst(unionArrays[0][i].getIConst() < unionArrays[1][i].getIConst());
+ break;
+ case EbtUInt:
+ resultArray[i].setBConst(unionArrays[0][i].getUConst() < unionArrays[1][i].getUConst());
+ break;
+ default:
+ UNREACHABLE();
+ break;
}
}
- break;
}
+ break;
- case EOpLessThanEqual:
+ case EOpLessThanEqual:
{
resultArray = new TConstantUnion[maxObjectSize];
for (size_t i = 0; i < maxObjectSize; i++)
{
switch (basicType)
{
- case EbtFloat:
- resultArray[i].setBConst(unionArrays[0][i].getFConst() <=
- unionArrays[1][i].getFConst());
- break;
- case EbtInt:
- resultArray[i].setBConst(unionArrays[0][i].getIConst() <=
- unionArrays[1][i].getIConst());
- break;
- case EbtUInt:
- resultArray[i].setBConst(unionArrays[0][i].getUConst() <=
- unionArrays[1][i].getUConst());
- break;
- default:
- UNREACHABLE();
- break;
+ case EbtFloat:
+ resultArray[i].setBConst(unionArrays[0][i].getFConst() <= unionArrays[1][i].getFConst());
+ break;
+ case EbtInt:
+ resultArray[i].setBConst(unionArrays[0][i].getIConst() <= unionArrays[1][i].getIConst());
+ break;
+ case EbtUInt:
+ resultArray[i].setBConst(unionArrays[0][i].getUConst() <= unionArrays[1][i].getUConst());
+ break;
+ default:
+ UNREACHABLE();
+ break;
}
}
- break;
}
+ break;
- case EOpGreaterThan:
+ case EOpGreaterThan:
{
resultArray = new TConstantUnion[maxObjectSize];
for (size_t i = 0; i < maxObjectSize; i++)
{
switch (basicType)
{
- case EbtFloat:
- resultArray[i].setBConst(unionArrays[0][i].getFConst() >
- unionArrays[1][i].getFConst());
- break;
- case EbtInt:
- resultArray[i].setBConst(unionArrays[0][i].getIConst() >
- unionArrays[1][i].getIConst());
- break;
- case EbtUInt:
- resultArray[i].setBConst(unionArrays[0][i].getUConst() >
- unionArrays[1][i].getUConst());
- break;
- default:
- UNREACHABLE();
- break;
+ case EbtFloat:
+ resultArray[i].setBConst(unionArrays[0][i].getFConst() > unionArrays[1][i].getFConst());
+ break;
+ case EbtInt:
+ resultArray[i].setBConst(unionArrays[0][i].getIConst() > unionArrays[1][i].getIConst());
+ break;
+ case EbtUInt:
+ resultArray[i].setBConst(unionArrays[0][i].getUConst() > unionArrays[1][i].getUConst());
+ break;
+ default:
+ UNREACHABLE();
+ break;
}
}
- break;
}
- case EOpGreaterThanEqual:
+ break;
+
+ case EOpGreaterThanEqual:
{
resultArray = new TConstantUnion[maxObjectSize];
for (size_t i = 0; i < maxObjectSize; i++)
{
switch (basicType)
{
- case EbtFloat:
- resultArray[i].setBConst(unionArrays[0][i].getFConst() >=
- unionArrays[1][i].getFConst());
- break;
- case EbtInt:
- resultArray[i].setBConst(unionArrays[0][i].getIConst() >=
- unionArrays[1][i].getIConst());
- break;
- case EbtUInt:
- resultArray[i].setBConst(unionArrays[0][i].getUConst() >=
- unionArrays[1][i].getUConst());
- break;
- default:
- UNREACHABLE();
- break;
+ case EbtFloat:
+ resultArray[i].setBConst(unionArrays[0][i].getFConst() >= unionArrays[1][i].getFConst());
+ break;
+ case EbtInt:
+ resultArray[i].setBConst(unionArrays[0][i].getIConst() >= unionArrays[1][i].getIConst());
+ break;
+ case EbtUInt:
+ resultArray[i].setBConst(unionArrays[0][i].getUConst() >= unionArrays[1][i].getUConst());
+ break;
+ default:
+ UNREACHABLE();
+ break;
}
}
}
break;
- case EOpVectorEqual:
+ case EOpVectorEqual:
{
resultArray = new TConstantUnion[maxObjectSize];
for (size_t i = 0; i < maxObjectSize; i++)
{
switch (basicType)
{
- case EbtFloat:
- resultArray[i].setBConst(unionArrays[0][i].getFConst() ==
- unionArrays[1][i].getFConst());
- break;
- case EbtInt:
- resultArray[i].setBConst(unionArrays[0][i].getIConst() ==
- unionArrays[1][i].getIConst());
- break;
- case EbtUInt:
- resultArray[i].setBConst(unionArrays[0][i].getUConst() ==
- unionArrays[1][i].getUConst());
- break;
- case EbtBool:
- resultArray[i].setBConst(unionArrays[0][i].getBConst() ==
- unionArrays[1][i].getBConst());
- break;
- default:
- UNREACHABLE();
- break;
+ case EbtFloat:
+ resultArray[i].setBConst(unionArrays[0][i].getFConst() == unionArrays[1][i].getFConst());
+ break;
+ case EbtInt:
+ resultArray[i].setBConst(unionArrays[0][i].getIConst() == unionArrays[1][i].getIConst());
+ break;
+ case EbtUInt:
+ resultArray[i].setBConst(unionArrays[0][i].getUConst() == unionArrays[1][i].getUConst());
+ break;
+ case EbtBool:
+ resultArray[i].setBConst(unionArrays[0][i].getBConst() == unionArrays[1][i].getBConst());
+ break;
+ default:
+ UNREACHABLE();
+ break;
}
}
- break;
}
+ break;
- case EOpVectorNotEqual:
+ case EOpVectorNotEqual:
{
resultArray = new TConstantUnion[maxObjectSize];
for (size_t i = 0; i < maxObjectSize; i++)
{
switch (basicType)
{
- case EbtFloat:
- resultArray[i].setBConst(unionArrays[0][i].getFConst() !=
- unionArrays[1][i].getFConst());
- break;
- case EbtInt:
- resultArray[i].setBConst(unionArrays[0][i].getIConst() !=
- unionArrays[1][i].getIConst());
- break;
- case EbtUInt:
- resultArray[i].setBConst(unionArrays[0][i].getUConst() !=
- unionArrays[1][i].getUConst());
- break;
- case EbtBool:
- resultArray[i].setBConst(unionArrays[0][i].getBConst() !=
- unionArrays[1][i].getBConst());
- break;
- default:
- UNREACHABLE();
- break;
+ case EbtFloat:
+ resultArray[i].setBConst(unionArrays[0][i].getFConst() != unionArrays[1][i].getFConst());
+ break;
+ case EbtInt:
+ resultArray[i].setBConst(unionArrays[0][i].getIConst() != unionArrays[1][i].getIConst());
+ break;
+ case EbtUInt:
+ resultArray[i].setBConst(unionArrays[0][i].getUConst() != unionArrays[1][i].getUConst());
+ break;
+ case EbtBool:
+ resultArray[i].setBConst(unionArrays[0][i].getBConst() != unionArrays[1][i].getBConst());
+ break;
+ default:
+ UNREACHABLE();
+ break;
}
}
- break;
}
+ break;
- case EOpDistance:
+ case EOpDistance:
+ if (basicType == EbtFloat)
{
- ASSERT(basicType == EbtFloat);
TConstantUnion *distanceArray = new TConstantUnion[maxObjectSize];
- resultArray = new TConstantUnion();
+ resultArray = new TConstantUnion();
for (size_t i = 0; i < maxObjectSize; i++)
{
float x = unionArrays[0][i].getFConst();
@@ -2542,40 +2244,47 @@ TConstantUnion *TIntermConstantUnion::FoldAggregateBuiltIn(TIntermAggregate *agg
distanceArray[i].setFConst(x - y);
}
resultArray->setFConst(VectorLength(distanceArray, maxObjectSize));
- break;
}
+ else
+ UNREACHABLE();
+ break;
+
+ case EOpDot:
- case EOpDot:
- ASSERT(basicType == EbtFloat);
+ if (basicType == EbtFloat)
+ {
resultArray = new TConstantUnion();
- resultArray->setFConst(
- VectorDotProduct(unionArrays[0], unionArrays[1], maxObjectSize));
- break;
+ resultArray->setFConst(VectorDotProduct(unionArrays[0], unionArrays[1], maxObjectSize));
+ }
+ else
+ UNREACHABLE();
+ break;
- case EOpCross:
+ case EOpCross:
+ if (basicType == EbtFloat && maxObjectSize == 3)
{
- ASSERT(basicType == EbtFloat && maxObjectSize == 3);
resultArray = new TConstantUnion[maxObjectSize];
- float x0 = unionArrays[0][0].getFConst();
- float x1 = unionArrays[0][1].getFConst();
- float x2 = unionArrays[0][2].getFConst();
- float y0 = unionArrays[1][0].getFConst();
- float y1 = unionArrays[1][1].getFConst();
- float y2 = unionArrays[1][2].getFConst();
+ float x0 = unionArrays[0][0].getFConst();
+ float x1 = unionArrays[0][1].getFConst();
+ float x2 = unionArrays[0][2].getFConst();
+ float y0 = unionArrays[1][0].getFConst();
+ float y1 = unionArrays[1][1].getFConst();
+ float y2 = unionArrays[1][2].getFConst();
resultArray[0].setFConst(x1 * y2 - y1 * x2);
resultArray[1].setFConst(x2 * y0 - y2 * x0);
resultArray[2].setFConst(x0 * y1 - y0 * x1);
- break;
}
+ else
+ UNREACHABLE();
+ break;
- case EOpReflect:
+ case EOpReflect:
+ if (basicType == EbtFloat)
{
- ASSERT(basicType == EbtFloat);
// genType reflect (genType I, genType N) :
- // For the incident vector I and surface orientation N, returns the reflection
- // direction:
+ // For the incident vector I and surface orientation N, returns the reflection direction:
// I - 2 * dot(N, I) * N.
- resultArray = new TConstantUnion[maxObjectSize];
+ resultArray = new TConstantUnion[maxObjectSize];
float dotProduct = VectorDotProduct(unionArrays[1], unionArrays[0], maxObjectSize);
for (size_t i = 0; i < maxObjectSize; i++)
{
@@ -2583,40 +2292,45 @@ TConstantUnion *TIntermConstantUnion::FoldAggregateBuiltIn(TIntermAggregate *agg
2.0f * dotProduct * unionArrays[1][i].getFConst();
resultArray[i].setFConst(result);
}
- break;
}
+ else
+ UNREACHABLE();
+ break;
- case EOpMul:
+ case EOpMul:
+ if (basicType == EbtFloat && (*sequence)[0]->getAsTyped()->isMatrix() &&
+ (*sequence)[1]->getAsTyped()->isMatrix())
{
- ASSERT(basicType == EbtFloat && (*sequence)[0]->getAsTyped()->isMatrix() &&
- (*sequence)[1]->getAsTyped()->isMatrix());
// Perform component-wise matrix multiplication.
resultArray = new TConstantUnion[maxObjectSize];
- int size = (*sequence)[0]->getAsTyped()->getNominalSize();
+ int size = (*sequence)[0]->getAsTyped()->getNominalSize();
angle::Matrix<float> result =
GetMatrix(unionArrays[0], size).compMult(GetMatrix(unionArrays[1], size));
SetUnionArrayFromMatrix(result, resultArray);
- break;
}
+ else
+ UNREACHABLE();
+ break;
- case EOpOuterProduct:
+ case EOpOuterProduct:
+ if (basicType == EbtFloat)
{
- ASSERT(basicType == EbtFloat);
size_t numRows = (*sequence)[0]->getAsTyped()->getType().getObjectSize();
size_t numCols = (*sequence)[1]->getAsTyped()->getType().getObjectSize();
- resultArray = new TConstantUnion[numRows * numCols];
+ resultArray = new TConstantUnion[numRows * numCols];
angle::Matrix<float> result =
GetMatrix(unionArrays[0], static_cast<int>(numRows), 1)
.outerProduct(GetMatrix(unionArrays[1], 1, static_cast<int>(numCols)));
SetUnionArrayFromMatrix(result, resultArray);
- break;
}
-
- default:
+ else
UNREACHABLE();
- // TODO: Add constant folding support for other built-in operations that take 2
- // parameters and not handled above.
- return nullptr;
+ break;
+
+ default:
+ UNREACHABLE();
+ // TODO: Add constant folding support for other built-in operations that take 2 parameters and not handled above.
+ return nullptr;
}
}
else if (paramsCount == 3)
@@ -2626,123 +2340,124 @@ TConstantUnion *TIntermConstantUnion::FoldAggregateBuiltIn(TIntermAggregate *agg
//
switch (op)
{
- case EOpClamp:
+ case EOpClamp:
{
resultArray = new TConstantUnion[maxObjectSize];
for (size_t i = 0; i < maxObjectSize; i++)
{
switch (basicType)
{
- case EbtFloat:
+ case EbtFloat:
{
- float x = unionArrays[0][i].getFConst();
+ float x = unionArrays[0][i].getFConst();
float min = unionArrays[1][i].getFConst();
float max = unionArrays[2][i].getFConst();
// Results are undefined if min > max.
if (min > max)
- UndefinedConstantFoldingError(loc, op, basicType, diagnostics,
- &resultArray[i]);
+ UndefinedConstantFoldingError(loc, op, basicType, infoSink, &resultArray[i]);
else
resultArray[i].setFConst(gl::clamp(x, min, max));
- break;
}
-
- case EbtInt:
+ break;
+ case EbtInt:
{
- int x = unionArrays[0][i].getIConst();
+ int x = unionArrays[0][i].getIConst();
int min = unionArrays[1][i].getIConst();
int max = unionArrays[2][i].getIConst();
// Results are undefined if min > max.
if (min > max)
- UndefinedConstantFoldingError(loc, op, basicType, diagnostics,
- &resultArray[i]);
+ UndefinedConstantFoldingError(loc, op, basicType, infoSink, &resultArray[i]);
else
resultArray[i].setIConst(gl::clamp(x, min, max));
- break;
}
- case EbtUInt:
+ break;
+ case EbtUInt:
{
- unsigned int x = unionArrays[0][i].getUConst();
+ unsigned int x = unionArrays[0][i].getUConst();
unsigned int min = unionArrays[1][i].getUConst();
unsigned int max = unionArrays[2][i].getUConst();
// Results are undefined if min > max.
if (min > max)
- UndefinedConstantFoldingError(loc, op, basicType, diagnostics,
- &resultArray[i]);
+ UndefinedConstantFoldingError(loc, op, basicType, infoSink, &resultArray[i]);
else
resultArray[i].setUConst(gl::clamp(x, min, max));
- break;
}
- default:
- UNREACHABLE();
- break;
+ break;
+ default:
+ UNREACHABLE();
+ break;
}
}
- break;
}
+ break;
- case EOpMix:
+ case EOpMix:
{
- ASSERT(basicType == EbtFloat);
- resultArray = new TConstantUnion[maxObjectSize];
- for (size_t i = 0; i < maxObjectSize; i++)
+ if (basicType == EbtFloat)
{
- float x = unionArrays[0][i].getFConst();
- float y = unionArrays[1][i].getFConst();
- TBasicType type = (*sequence)[2]->getAsTyped()->getType().getBasicType();
- if (type == EbtFloat)
+ resultArray = new TConstantUnion[maxObjectSize];
+ for (size_t i = 0; i < maxObjectSize; i++)
{
- // Returns the linear blend of x and y, i.e., x * (1 - a) + y * a.
- float a = unionArrays[2][i].getFConst();
- resultArray[i].setFConst(x * (1.0f - a) + y * a);
- }
- else // 3rd parameter is EbtBool
- {
- ASSERT(type == EbtBool);
- // Selects which vector each returned component comes from.
- // For a component of a that is false, the corresponding component of x is
- // returned.
- // For a component of a that is true, the corresponding component of y is
- // returned.
- bool a = unionArrays[2][i].getBConst();
- resultArray[i].setFConst(a ? y : x);
+ float x = unionArrays[0][i].getFConst();
+ float y = unionArrays[1][i].getFConst();
+ TBasicType type = (*sequence)[2]->getAsTyped()->getType().getBasicType();
+ if (type == EbtFloat)
+ {
+ // Returns the linear blend of x and y, i.e., x * (1 - a) + y * a.
+ float a = unionArrays[2][i].getFConst();
+ resultArray[i].setFConst(x * (1.0f - a) + y * a);
+ }
+ else // 3rd parameter is EbtBool
+ {
+ ASSERT(type == EbtBool);
+ // Selects which vector each returned component comes from.
+ // For a component of a that is false, the corresponding component of x is returned.
+ // For a component of a that is true, the corresponding component of y is returned.
+ bool a = unionArrays[2][i].getBConst();
+ resultArray[i].setFConst(a ? y : x);
+ }
}
}
- break;
+ else
+ UNREACHABLE();
}
+ break;
- case EOpSmoothStep:
+ case EOpSmoothStep:
{
- ASSERT(basicType == EbtFloat);
- resultArray = new TConstantUnion[maxObjectSize];
- for (size_t i = 0; i < maxObjectSize; i++)
+ if (basicType == EbtFloat)
{
- float edge0 = unionArrays[0][i].getFConst();
- float edge1 = unionArrays[1][i].getFConst();
- float x = unionArrays[2][i].getFConst();
- // Results are undefined if edge0 >= edge1.
- if (edge0 >= edge1)
+ resultArray = new TConstantUnion[maxObjectSize];
+ for (size_t i = 0; i < maxObjectSize; i++)
{
- UndefinedConstantFoldingError(loc, op, basicType, diagnostics,
- &resultArray[i]);
- }
- else
- {
- // Returns 0.0 if x <= edge0 and 1.0 if x >= edge1 and performs smooth
- // Hermite interpolation between 0 and 1 when edge0 < x < edge1.
- float t = gl::clamp((x - edge0) / (edge1 - edge0), 0.0f, 1.0f);
- resultArray[i].setFConst(t * t * (3.0f - 2.0f * t));
+ float edge0 = unionArrays[0][i].getFConst();
+ float edge1 = unionArrays[1][i].getFConst();
+ float x = unionArrays[2][i].getFConst();
+ // Results are undefined if edge0 >= edge1.
+ if (edge0 >= edge1)
+ {
+ UndefinedConstantFoldingError(loc, op, basicType, infoSink, &resultArray[i]);
+ }
+ else
+ {
+ // Returns 0.0 if x <= edge0 and 1.0 if x >= edge1 and performs smooth
+ // Hermite interpolation between 0 and 1 when edge0 < x < edge1.
+ float t = gl::clamp((x - edge0) / (edge1 - edge0), 0.0f, 1.0f);
+ resultArray[i].setFConst(t * t * (3.0f - 2.0f * t));
+ }
}
}
- break;
+ else
+ UNREACHABLE();
}
+ break;
- case EOpFaceForward:
+ case EOpFaceForward:
+ if (basicType == EbtFloat)
{
- ASSERT(basicType == EbtFloat);
// genType faceforward(genType N, genType I, genType Nref) :
// If dot(Nref, I) < 0 return N, otherwise return -N.
- resultArray = new TConstantUnion[maxObjectSize];
+ resultArray = new TConstantUnion[maxObjectSize];
float dotProduct = VectorDotProduct(unionArrays[2], unionArrays[1], maxObjectSize);
for (size_t i = 0; i < maxObjectSize; i++)
{
@@ -2751,42 +2466,43 @@ TConstantUnion *TIntermConstantUnion::FoldAggregateBuiltIn(TIntermAggregate *agg
else
resultArray[i].setFConst(-unionArrays[0][i].getFConst());
}
- break;
}
+ else
+ UNREACHABLE();
+ break;
- case EOpRefract:
+ case EOpRefract:
+ if (basicType == EbtFloat)
{
- ASSERT(basicType == EbtFloat);
// genType refract(genType I, genType N, float eta) :
- // For the incident vector I and surface normal N, and the ratio of indices of
- // refraction eta,
+ // For the incident vector I and surface normal N, and the ratio of indices of refraction eta,
// return the refraction vector. The result is computed by
// k = 1.0 - eta * eta * (1.0 - dot(N, I) * dot(N, I))
// if (k < 0.0)
// return genType(0.0)
// else
// return eta * I - (eta * dot(N, I) + sqrt(k)) * N
- resultArray = new TConstantUnion[maxObjectSize];
+ resultArray = new TConstantUnion[maxObjectSize];
float dotProduct = VectorDotProduct(unionArrays[1], unionArrays[0], maxObjectSize);
for (size_t i = 0; i < maxObjectSize; i++)
{
float eta = unionArrays[2][i].getFConst();
- float k = 1.0f - eta * eta * (1.0f - dotProduct * dotProduct);
+ float k = 1.0f - eta * eta * (1.0f - dotProduct * dotProduct);
if (k < 0.0f)
resultArray[i].setFConst(0.0f);
else
resultArray[i].setFConst(eta * unionArrays[0][i].getFConst() -
- (eta * dotProduct + sqrtf(k)) *
- unionArrays[1][i].getFConst());
+ (eta * dotProduct + sqrtf(k)) * unionArrays[1][i].getFConst());
}
- break;
}
-
- default:
+ else
UNREACHABLE();
- // TODO: Add constant folding support for other built-in operations that take 3
- // parameters and not handled above.
- return nullptr;
+ break;
+
+ default:
+ UNREACHABLE();
+ // TODO: Add constant folding support for other built-in operations that take 3 parameters and not handled above.
+ return nullptr;
}
}
return resultArray;
@@ -2815,12 +2531,14 @@ void TIntermTraverser::updateTree()
bool inserted = insertion.parent->insertChildNodes(insertion.position + 1,
insertion.insertionsAfter);
ASSERT(inserted);
+ UNUSED_ASSERTION_VARIABLE(inserted);
}
if (!insertion.insertionsBefore.empty())
{
bool inserted =
insertion.parent->insertChildNodes(insertion.position, insertion.insertionsBefore);
ASSERT(inserted);
+ UNUSED_ASSERTION_VARIABLE(inserted);
}
}
for (size_t ii = 0; ii < mReplacements.size(); ++ii)
@@ -2830,6 +2548,7 @@ void TIntermTraverser::updateTree()
bool replaced = replacement.parent->replaceChildNode(
replacement.original, replacement.replacement);
ASSERT(replaced);
+ UNUSED_ASSERTION_VARIABLE(replaced);
if (!replacement.originalBecomesChildOfReplacement)
{
@@ -2852,6 +2571,7 @@ void TIntermTraverser::updateTree()
bool replaced = replacement.parent->replaceChildNodeWithMultiple(
replacement.original, replacement.replacements);
ASSERT(replaced);
+ UNUSED_ASSERTION_VARIABLE(replaced);
}
clearReplacementQueue();
@@ -2879,5 +2599,3 @@ void TIntermTraverser::queueReplacementWithParent(TIntermNode *parent,
bool originalBecomesChild = (originalStatus == OriginalNode::BECOMES_CHILD);
mReplacements.push_back(NodeUpdateEntry(parent, original, replacement, originalBecomesChild));
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/IntermNode.h b/gfx/angle/src/compiler/translator/IntermNode.h
index 94811bd1c..7068685ee 100755
--- a/gfx/angle/src/compiler/translator/IntermNode.h
+++ b/gfx/angle/src/compiler/translator/IntermNode.h
@@ -27,22 +27,14 @@
#include "compiler/translator/Operator.h"
#include "compiler/translator/Types.h"
-namespace sh
-{
-
class TDiagnostics;
class TIntermTraverser;
class TIntermAggregate;
-class TIntermBlock;
-class TIntermDeclaration;
-class TIntermFunctionDefinition;
-class TIntermSwizzle;
class TIntermBinary;
class TIntermUnary;
class TIntermConstantUnion;
-class TIntermTernary;
-class TIntermIfElse;
+class TIntermSelection;
class TIntermSwitch;
class TIntermCase;
class TIntermTyped;
@@ -54,7 +46,6 @@ class TIntermRaw;
class TIntermBranch;
class TSymbolTable;
-class TFunction;
// Encapsulate an identifier string and track whether it is coming from the original shader code
// (not internal) or from ANGLE (internal). Usually internal names shouldn't be decorated or hashed.
@@ -99,15 +90,10 @@ class TIntermNode : angle::NonCopyable
virtual void traverse(TIntermTraverser *) = 0;
virtual TIntermTyped *getAsTyped() { return 0; }
virtual TIntermConstantUnion *getAsConstantUnion() { return 0; }
- virtual TIntermFunctionDefinition *getAsFunctionDefinition() { return nullptr; }
virtual TIntermAggregate *getAsAggregate() { return 0; }
- virtual TIntermBlock *getAsBlock() { return nullptr; }
- virtual TIntermDeclaration *getAsDeclarationNode() { return nullptr; }
- virtual TIntermSwizzle *getAsSwizzleNode() { return nullptr; }
virtual TIntermBinary *getAsBinaryNode() { return 0; }
virtual TIntermUnary *getAsUnaryNode() { return 0; }
- virtual TIntermTernary *getAsTernaryNode() { return nullptr; }
- virtual TIntermIfElse *getAsIfElseNode() { return nullptr; }
+ virtual TIntermSelection *getAsSelectionNode() { return 0; }
virtual TIntermSwitch *getAsSwitchNode() { return 0; }
virtual TIntermCase *getAsCaseNode() { return 0; }
virtual TIntermSymbol *getAsSymbolNode() { return 0; }
@@ -155,7 +141,6 @@ class TIntermTyped : public TIntermNode
TBasicType getBasicType() const { return mType.getBasicType(); }
TQualifier getQualifier() const { return mType.getQualifier(); }
TPrecision getPrecision() const { return mType.getPrecision(); }
- TMemoryQualifier getMemoryQualifier() const { return mType.getMemoryQualifier(); }
int getCols() const { return mType.getCols(); }
int getRows() const { return mType.getRows(); }
int getNominalSize() const { return mType.getNominalSize(); }
@@ -174,9 +159,6 @@ class TIntermTyped : public TIntermNode
bool isConstructorWithOnlyConstantUnionParameters();
- static TIntermTyped *CreateIndexNode(int index);
- static TIntermTyped *CreateZero(const TType &type);
-
protected:
TType mType;
@@ -200,7 +182,7 @@ class TIntermLoop : public TIntermNode
TIntermNode *init,
TIntermTyped *cond,
TIntermTyped *expr,
- TIntermBlock *body)
+ TIntermAggregate *body)
: mType(type), mInit(init), mCond(cond), mExpr(expr), mBody(body), mUnrollFlag(false)
{
}
@@ -213,11 +195,11 @@ class TIntermLoop : public TIntermNode
TIntermNode *getInit() { return mInit; }
TIntermTyped *getCondition() { return mCond; }
TIntermTyped *getExpression() { return mExpr; }
- TIntermBlock *getBody() { return mBody; }
+ TIntermAggregate *getBody() { return mBody; }
void setCondition(TIntermTyped *condition) { mCond = condition; }
void setExpression(TIntermTyped *expression) { mExpr = expression; }
- void setBody(TIntermBlock *body) { mBody = body; }
+ void setBody(TIntermAggregate *body) { mBody = body; }
void setUnrollFlag(bool flag) { mUnrollFlag = flag; }
bool getUnrollFlag() const { return mUnrollFlag; }
@@ -227,7 +209,7 @@ class TIntermLoop : public TIntermNode
TIntermNode *mInit; // for-loop initialization
TIntermTyped *mCond; // loop exit condition
TIntermTyped *mExpr; // for-loop expression
- TIntermBlock *mBody; // loop body
+ TIntermAggregate *mBody; // loop body
bool mUnrollFlag; // Whether the loop should be unrolled or not.
};
@@ -334,7 +316,6 @@ class TIntermConstantUnion : public TIntermTyped
TIntermConstantUnion(const TConstantUnion *unionPointer, const TType &type)
: TIntermTyped(type), mUnionArrayPointer(unionPointer)
{
- ASSERT(unionPointer);
}
TIntermTyped *deepCopy() const override { return new TIntermConstantUnion(*this); }
@@ -362,7 +343,6 @@ class TIntermConstantUnion : public TIntermTyped
void replaceConstantUnion(const TConstantUnion *safeConstantUnion)
{
- ASSERT(safeConstantUnion);
// Previous union pointer freed on pool deallocation.
mUnionArrayPointer = safeConstantUnion;
}
@@ -373,15 +353,13 @@ class TIntermConstantUnion : public TIntermTyped
TConstantUnion *foldBinary(TOperator op,
TIntermConstantUnion *rightNode,
- TDiagnostics *diagnostics,
- const TSourceLoc &line);
- const TConstantUnion *foldIndexing(int index);
- TConstantUnion *foldUnaryNonComponentWise(TOperator op);
- TConstantUnion *foldUnaryComponentWise(TOperator op, TDiagnostics *diagnostics);
+ TDiagnostics *diagnostics);
+ TConstantUnion *foldUnaryWithDifferentReturnType(TOperator op, TInfoSink &infoSink);
+ TConstantUnion *foldUnaryWithSameReturnType(TOperator op, TInfoSink &infoSink);
- static TConstantUnion *FoldAggregateConstructor(TIntermAggregate *aggregate);
- static TConstantUnion *FoldAggregateBuiltIn(TIntermAggregate *aggregate,
- TDiagnostics *diagnostics);
+ static TConstantUnion *FoldAggregateConstructor(TIntermAggregate *aggregate,
+ TInfoSink &infoSink);
+ static TConstantUnion *FoldAggregateBuiltIn(TIntermAggregate *aggregate, TInfoSink &infoSink);
protected:
// Same data may be shared between multiple constant unions, so it can't be modified.
@@ -389,9 +367,7 @@ class TIntermConstantUnion : public TIntermTyped
private:
typedef float(*FloatTypeUnaryFunc) (float);
- void foldFloatTypeUnary(const TConstantUnion &parameter,
- FloatTypeUnaryFunc builtinFunc,
- TConstantUnion *result) const;
+ bool foldFloatTypeUnary(const TConstantUnion &parameter, FloatTypeUnaryFunc builtinFunc, TInfoSink &infoSink, TConstantUnion *result) const;
TIntermConstantUnion(const TIntermConstantUnion &node); // Note: not deleted, just private!
};
@@ -403,6 +379,7 @@ class TIntermOperator : public TIntermTyped
{
public:
TOperator getOp() const { return mOp; }
+ void setOp(TOperator op) { mOp = op; }
bool isAssignment() const;
bool isMultiplication() const;
@@ -423,54 +400,24 @@ class TIntermOperator : public TIntermTyped
TOperator mOp;
};
-// Node for vector swizzles.
-class TIntermSwizzle : public TIntermTyped
-{
- public:
- // This constructor determines the type of the node based on the operand.
- TIntermSwizzle(TIntermTyped *operand, const TVector<int> &swizzleOffsets);
-
- TIntermTyped *deepCopy() const override { return new TIntermSwizzle(*this); }
-
- TIntermSwizzle *getAsSwizzleNode() override { return this; };
- void traverse(TIntermTraverser *it) override;
- bool replaceChildNode(TIntermNode *original, TIntermNode *replacement) override;
-
- bool hasSideEffects() const override { return mOperand->hasSideEffects(); }
-
- TIntermTyped *getOperand() { return mOperand; }
- void writeOffsetsAsXYZW(TInfoSinkBase *out) const;
-
- bool hasDuplicateOffsets() const;
-
- TIntermTyped *fold();
-
- protected:
- TIntermTyped *mOperand;
- TVector<int> mSwizzleOffsets;
-
- private:
- void promote();
-
- TIntermSwizzle(const TIntermSwizzle &node); // Note: not deleted, just private!
-};
-
//
// Nodes for all the basic binary math operators.
//
class TIntermBinary : public TIntermOperator
{
public:
+ TIntermBinary(TOperator op)
+ : TIntermOperator(op),
+ mAddIndexClamp(false) {}
+
// This constructor determines the type of the binary node based on the operands and op.
+ // This is only supported for math/logical ops, not indexing.
TIntermBinary(TOperator op, TIntermTyped *left, TIntermTyped *right);
TIntermTyped *deepCopy() const override { return new TIntermBinary(*this); }
static TOperator GetMulOpBasedOnOperands(const TType &left, const TType &right);
static TOperator GetMulAssignOpBasedOnOperands(const TType &left, const TType &right);
- static TQualifier GetCommaQualifier(int shaderVersion,
- const TIntermTyped *left,
- const TIntermTyped *right);
TIntermBinary *getAsBinaryNode() override { return this; };
void traverse(TIntermTraverser *it) override;
@@ -481,6 +428,8 @@ class TIntermBinary : public TIntermOperator
return isAssignment() || mLeft->hasSideEffects() || mRight->hasSideEffects();
}
+ void setLeft(TIntermTyped *node) { mLeft = node; }
+ void setRight(TIntermTyped *node) { mRight = node; }
TIntermTyped *getLeft() const { return mLeft; }
TIntermTyped *getRight() const { return mRight; }
TIntermTyped *fold(TDiagnostics *diagnostics);
@@ -507,7 +456,14 @@ class TIntermBinary : public TIntermOperator
class TIntermUnary : public TIntermOperator
{
public:
- TIntermUnary(TOperator op, TIntermTyped *operand);
+ TIntermUnary(TOperator op, const TType &type)
+ : TIntermOperator(op, type),
+ mOperand(NULL),
+ mUseEmulatedFunction(false) {}
+ TIntermUnary(TOperator op)
+ : TIntermOperator(op),
+ mOperand(NULL),
+ mUseEmulatedFunction(false) {}
TIntermTyped *deepCopy() const override { return new TIntermUnary(*this); }
@@ -517,8 +473,10 @@ class TIntermUnary : public TIntermOperator
bool hasSideEffects() const override { return isAssignment() || mOperand->hasSideEffects(); }
+ void setOperand(TIntermTyped *operand) { mOperand = operand; }
TIntermTyped *getOperand() { return mOperand; }
- TIntermTyped *fold(TDiagnostics *diagnostics);
+ void promote(const TType *funcReturnType);
+ TIntermTyped *fold(TInfoSink &infoSink);
void setUseEmulatedFunction() { mUseEmulatedFunction = true; }
bool getUseEmulatedFunction() { return mUseEmulatedFunction; }
@@ -531,107 +489,22 @@ class TIntermUnary : public TIntermOperator
bool mUseEmulatedFunction;
private:
- void promote();
-
TIntermUnary(const TIntermUnary &node); // note: not deleted, just private!
};
-class TFunctionSymbolInfo
-{
- public:
- POOL_ALLOCATOR_NEW_DELETE();
- TFunctionSymbolInfo() : mId(0) {}
-
- TFunctionSymbolInfo(const TFunctionSymbolInfo &) = default;
- TFunctionSymbolInfo &operator=(const TFunctionSymbolInfo &) = default;
-
- void setFromFunction(const TFunction &function);
-
- void setNameObj(const TName &name) { mName = name; }
- const TName &getNameObj() const { return mName; }
-
- const TString &getName() const { return mName.getString(); }
- void setName(const TString &name) { mName.setString(name); }
- bool isMain() const { return mName.getString() == "main("; }
-
- void setId(int functionId) { mId = functionId; }
- int getId() const { return mId; }
- private:
- TName mName;
- int mId;
-};
-
-// Node for function definitions.
-class TIntermFunctionDefinition : public TIntermTyped
-{
- public:
- // TODO(oetuaho@nvidia.com): See if TFunctionSymbolInfo could be added to constructor
- // parameters.
- TIntermFunctionDefinition(const TType &type, TIntermAggregate *parameters, TIntermBlock *body)
- : TIntermTyped(type), mParameters(parameters), mBody(body)
- {
- ASSERT(parameters != nullptr);
- ASSERT(body != nullptr);
- }
-
- TIntermFunctionDefinition *getAsFunctionDefinition() override { return this; }
- void traverse(TIntermTraverser *it) override;
- bool replaceChildNode(TIntermNode *original, TIntermNode *replacement) override;
-
- TIntermTyped *deepCopy() const override
- {
- UNREACHABLE();
- return nullptr;
- }
- bool hasSideEffects() const override
- {
- UNREACHABLE();
- return true;
- }
-
- TIntermAggregate *getFunctionParameters() const { return mParameters; }
- TIntermBlock *getBody() const { return mBody; }
-
- TFunctionSymbolInfo *getFunctionSymbolInfo() { return &mFunctionInfo; }
- const TFunctionSymbolInfo *getFunctionSymbolInfo() const { return &mFunctionInfo; }
-
- private:
- TIntermAggregate *mParameters;
- TIntermBlock *mBody;
-
- TFunctionSymbolInfo mFunctionInfo;
-};
-
typedef TVector<TIntermNode *> TIntermSequence;
typedef TVector<int> TQualifierList;
-// Interface for node classes that have an arbitrarily sized set of children.
-class TIntermAggregateBase
-{
- public:
- virtual ~TIntermAggregateBase() {}
-
- virtual TIntermSequence *getSequence() = 0;
- virtual const TIntermSequence *getSequence() const = 0;
-
- bool replaceChildNodeWithMultiple(TIntermNode *original, const TIntermSequence &replacements);
- bool insertChildNodes(TIntermSequence::size_type position, const TIntermSequence &insertions);
-
- protected:
- TIntermAggregateBase() {}
-
- bool replaceChildNodeInternal(TIntermNode *original, TIntermNode *replacement);
-};
-
//
// Nodes that operate on an arbitrary sized set of children.
//
-class TIntermAggregate : public TIntermOperator, public TIntermAggregateBase
+class TIntermAggregate : public TIntermOperator
{
public:
TIntermAggregate()
: TIntermOperator(EOpNull),
mUserDefined(false),
+ mFunctionId(0),
mUseEmulatedFunction(false),
mGotPrecisionFromChildren(false)
{
@@ -639,6 +512,7 @@ class TIntermAggregate : public TIntermOperator, public TIntermAggregateBase
TIntermAggregate(TOperator op)
: TIntermOperator(op),
mUserDefined(false),
+ mFunctionId(0),
mUseEmulatedFunction(false),
mGotPrecisionFromChildren(false)
{
@@ -648,22 +522,29 @@ class TIntermAggregate : public TIntermOperator, public TIntermAggregateBase
// Note: only supported for nodes that can be a part of an expression.
TIntermTyped *deepCopy() const override { return new TIntermAggregate(*this); }
- void setOp(TOperator op) { mOp = op; }
-
TIntermAggregate *getAsAggregate() override { return this; }
void traverse(TIntermTraverser *it) override;
bool replaceChildNode(TIntermNode *original, TIntermNode *replacement) override;
-
+ bool replaceChildNodeWithMultiple(TIntermNode *original, TIntermSequence replacements);
+ bool insertChildNodes(TIntermSequence::size_type position, TIntermSequence insertions);
// Conservatively assume function calls and other aggregate operators have side-effects
bool hasSideEffects() const override { return true; }
- TIntermTyped *fold(TDiagnostics *diagnostics);
+ TIntermTyped *fold(TInfoSink &infoSink);
- TIntermSequence *getSequence() override { return &mSequence; }
- const TIntermSequence *getSequence() const override { return &mSequence; }
+ TIntermSequence *getSequence() { return &mSequence; }
+
+ void setNameObj(const TName &name) { mName = name; }
+ const TName &getNameObj() const { return mName; }
+
+ void setName(const TString &name) { mName.setString(name); }
+ const TString &getName() const { return mName.getString(); }
void setUserDefined() { mUserDefined = true; }
bool isUserDefined() const { return mUserDefined; }
+ void setFunctionId(int functionId) { mFunctionId = functionId; }
+ int getFunctionId() const { return mFunctionId; }
+
void setUseEmulatedFunction() { mUseEmulatedFunction = true; }
bool getUseEmulatedFunction() { return mUseEmulatedFunction; }
@@ -674,12 +555,11 @@ class TIntermAggregate : public TIntermOperator, public TIntermAggregateBase
// Returns true if changing parameter precision may affect the return value.
bool gotPrecisionFromChildren() const { return mGotPrecisionFromChildren; }
- TFunctionSymbolInfo *getFunctionSymbolInfo() { return &mFunctionInfo; }
- const TFunctionSymbolInfo *getFunctionSymbolInfo() const { return &mFunctionInfo; }
-
protected:
TIntermSequence mSequence;
+ TName mName;
bool mUserDefined; // used for user defined function names
+ int mFunctionId;
// If set to true, replace the built-in function call with an emulated one
// to work around driver bugs.
@@ -687,110 +567,50 @@ class TIntermAggregate : public TIntermOperator, public TIntermAggregateBase
bool mGotPrecisionFromChildren;
- TFunctionSymbolInfo mFunctionInfo;
-
private:
TIntermAggregate(const TIntermAggregate &node); // note: not deleted, just private!
};
-// A list of statements. Either the root node which contains declarations and function definitions,
-// or a block that can be marked with curly braces {}.
-class TIntermBlock : public TIntermNode, public TIntermAggregateBase
-{
- public:
- TIntermBlock() : TIntermNode() {}
- ~TIntermBlock() {}
-
- TIntermBlock *getAsBlock() override { return this; }
- void traverse(TIntermTraverser *it) override;
- bool replaceChildNode(TIntermNode *original, TIntermNode *replacement) override;
-
- // Only intended for initially building the block.
- void appendStatement(TIntermNode *statement);
-
- TIntermSequence *getSequence() override { return &mStatements; }
- const TIntermSequence *getSequence() const override { return &mStatements; }
-
- protected:
- TIntermSequence mStatements;
-};
-
-// Struct, interface block or variable declaration. Can contain multiple variable declarators.
-class TIntermDeclaration : public TIntermNode, public TIntermAggregateBase
+//
+// For if tests.
+//
+class TIntermSelection : public TIntermTyped
{
public:
- TIntermDeclaration() : TIntermNode() {}
- ~TIntermDeclaration() {}
-
- TIntermDeclaration *getAsDeclarationNode() override { return this; }
- void traverse(TIntermTraverser *it) override;
- bool replaceChildNode(TIntermNode *original, TIntermNode *replacement) override;
-
- // Only intended for initially building the declaration.
- // The declarator node should be either TIntermSymbol or TIntermBinary with op set to
- // EOpInitialize.
- void appendDeclarator(TIntermTyped *declarator);
-
- TIntermSequence *getSequence() override { return &mDeclarators; }
- const TIntermSequence *getSequence() const override { return &mDeclarators; }
- protected:
- TIntermSequence mDeclarators;
-};
+ TIntermSelection(TIntermTyped *cond, TIntermNode *trueB, TIntermNode *falseB)
+ : TIntermTyped(TType(EbtVoid, EbpUndefined)),
+ mCondition(cond),
+ mTrueBlock(trueB),
+ mFalseBlock(falseB) {}
+ TIntermSelection(TIntermTyped *cond, TIntermNode *trueB, TIntermNode *falseB,
+ const TType &type)
+ : TIntermTyped(type),
+ mCondition(cond),
+ mTrueBlock(trueB),
+ mFalseBlock(falseB) {}
-// For ternary operators like a ? b : c.
-class TIntermTernary : public TIntermTyped
-{
- public:
- TIntermTernary(TIntermTyped *cond, TIntermTyped *trueExpression, TIntermTyped *falseExpression);
+ // Note: only supported for ternary operator nodes.
+ TIntermTyped *deepCopy() const override { return new TIntermSelection(*this); }
void traverse(TIntermTraverser *it) override;
bool replaceChildNode(TIntermNode *original, TIntermNode *replacement) override;
- TIntermTyped *getCondition() const { return mCondition; }
- TIntermTyped *getTrueExpression() const { return mTrueExpression; }
- TIntermTyped *getFalseExpression() const { return mFalseExpression; }
- TIntermTernary *getAsTernaryNode() override { return this; }
-
- TIntermTyped *deepCopy() const override { return new TIntermTernary(*this); }
-
- bool hasSideEffects() const override
- {
- return mCondition->hasSideEffects() || mTrueExpression->hasSideEffects() ||
- mFalseExpression->hasSideEffects();
- }
-
- static TQualifier DetermineQualifier(TIntermTyped *cond,
- TIntermTyped *trueExpression,
- TIntermTyped *falseExpression);
-
- private:
- TIntermTernary(const TIntermTernary &node); // Note: not deleted, just private!
-
- TIntermTyped *mCondition;
- TIntermTyped *mTrueExpression;
- TIntermTyped *mFalseExpression;
-};
-
-class TIntermIfElse : public TIntermNode
-{
- public:
- TIntermIfElse(TIntermTyped *cond, TIntermBlock *trueB, TIntermBlock *falseB)
- : TIntermNode(), mCondition(cond), mTrueBlock(trueB), mFalseBlock(falseB)
- {
- }
-
- void traverse(TIntermTraverser *it) override;
- bool replaceChildNode(TIntermNode *original, TIntermNode *replacement) override;
+ // Conservatively assume selections have side-effects
+ bool hasSideEffects() const override { return true; }
- TIntermTyped *getCondition() const { return mCondition; }
- TIntermBlock *getTrueBlock() const { return mTrueBlock; }
- TIntermBlock *getFalseBlock() const { return mFalseBlock; }
- TIntermIfElse *getAsIfElseNode() override { return this; }
+ bool usesTernaryOperator() const { return getBasicType() != EbtVoid; }
+ TIntermNode *getCondition() const { return mCondition; }
+ TIntermNode *getTrueBlock() const { return mTrueBlock; }
+ TIntermNode *getFalseBlock() const { return mFalseBlock; }
+ TIntermSelection *getAsSelectionNode() override { return this; }
protected:
TIntermTyped *mCondition;
- TIntermBlock *mTrueBlock;
- TIntermBlock *mFalseBlock;
+ TIntermNode *mTrueBlock;
+ TIntermNode *mFalseBlock;
+
+ private:
+ TIntermSelection(const TIntermSelection &node); // Note: not deleted, just private!
};
//
@@ -799,8 +619,10 @@ class TIntermIfElse : public TIntermNode
class TIntermSwitch : public TIntermNode
{
public:
- TIntermSwitch(TIntermTyped *init, TIntermBlock *statementList)
- : TIntermNode(), mInit(init), mStatementList(statementList)
+ TIntermSwitch(TIntermTyped *init, TIntermAggregate *statementList)
+ : TIntermNode(),
+ mInit(init),
+ mStatementList(statementList)
{
}
@@ -811,12 +633,12 @@ class TIntermSwitch : public TIntermNode
TIntermSwitch *getAsSwitchNode() override { return this; }
TIntermTyped *getInit() { return mInit; }
- TIntermBlock *getStatementList() { return mStatementList; }
- void setStatementList(TIntermBlock *statementList) { mStatementList = statementList; }
+ TIntermAggregate *getStatementList() { return mStatementList; }
+ void setStatementList(TIntermAggregate *statementList) { mStatementList = statementList; }
protected:
TIntermTyped *mInit;
- TIntermBlock *mStatementList;
+ TIntermAggregate *mStatementList;
};
//
@@ -872,20 +694,12 @@ class TIntermTraverser : angle::NonCopyable
virtual void visitSymbol(TIntermSymbol *node) {}
virtual void visitRaw(TIntermRaw *node) {}
virtual void visitConstantUnion(TIntermConstantUnion *node) {}
- virtual bool visitSwizzle(Visit visit, TIntermSwizzle *node) { return true; }
virtual bool visitBinary(Visit visit, TIntermBinary *node) { return true; }
virtual bool visitUnary(Visit visit, TIntermUnary *node) { return true; }
- virtual bool visitTernary(Visit visit, TIntermTernary *node) { return true; }
- virtual bool visitIfElse(Visit visit, TIntermIfElse *node) { return true; }
+ virtual bool visitSelection(Visit visit, TIntermSelection *node) { return true; }
virtual bool visitSwitch(Visit visit, TIntermSwitch *node) { return true; }
virtual bool visitCase(Visit visit, TIntermCase *node) { return true; }
- virtual bool visitFunctionDefinition(Visit visit, TIntermFunctionDefinition *node)
- {
- return true;
- }
virtual bool visitAggregate(Visit visit, TIntermAggregate *node) { return true; }
- virtual bool visitBlock(Visit visit, TIntermBlock *node) { return true; }
- virtual bool visitDeclaration(Visit visit, TIntermDeclaration *node) { return true; }
virtual bool visitLoop(Visit visit, TIntermLoop *node) { return true; }
virtual bool visitBranch(Visit visit, TIntermBranch *node) { return true; }
@@ -895,17 +709,12 @@ class TIntermTraverser : angle::NonCopyable
virtual void traverseSymbol(TIntermSymbol *node);
virtual void traverseRaw(TIntermRaw *node);
virtual void traverseConstantUnion(TIntermConstantUnion *node);
- virtual void traverseSwizzle(TIntermSwizzle *node);
virtual void traverseBinary(TIntermBinary *node);
virtual void traverseUnary(TIntermUnary *node);
- virtual void traverseTernary(TIntermTernary *node);
- virtual void traverseIfElse(TIntermIfElse *node);
+ virtual void traverseSelection(TIntermSelection *node);
virtual void traverseSwitch(TIntermSwitch *node);
virtual void traverseCase(TIntermCase *node);
- virtual void traverseFunctionDefinition(TIntermFunctionDefinition *node);
virtual void traverseAggregate(TIntermAggregate *node);
- virtual void traverseBlock(TIntermBlock *node);
- virtual void traverseDeclaration(TIntermDeclaration *node);
virtual void traverseLoop(TIntermLoop *node);
virtual void traverseBranch(TIntermBranch *node);
@@ -952,7 +761,7 @@ class TIntermTraverser : angle::NonCopyable
return nullptr;
}
- void pushParentBlock(TIntermBlock *node);
+ void pushParentBlock(TIntermAggregate *node);
void incrementParentBlockPos();
void popParentBlock();
@@ -964,14 +773,14 @@ class TIntermTraverser : angle::NonCopyable
// To replace a single node with multiple nodes on the parent aggregate node
struct NodeReplaceWithMultipleEntry
{
- NodeReplaceWithMultipleEntry(TIntermAggregateBase *_parent,
- TIntermNode *_original,
- TIntermSequence _replacements)
- : parent(_parent), original(_original), replacements(_replacements)
+ NodeReplaceWithMultipleEntry(TIntermAggregate *_parent, TIntermNode *_original, TIntermSequence _replacements)
+ : parent(_parent),
+ original(_original),
+ replacements(_replacements)
{
}
- TIntermAggregateBase *parent;
+ TIntermAggregate *parent;
TIntermNode *original;
TIntermSequence replacements;
};
@@ -979,7 +788,7 @@ class TIntermTraverser : angle::NonCopyable
// To insert multiple nodes on the parent aggregate node
struct NodeInsertMultipleEntry
{
- NodeInsertMultipleEntry(TIntermBlock *_parent,
+ NodeInsertMultipleEntry(TIntermAggregate *_parent,
TIntermSequence::size_type _position,
TIntermSequence _insertionsBefore,
TIntermSequence _insertionsAfter)
@@ -990,7 +799,7 @@ class TIntermTraverser : angle::NonCopyable
{
}
- TIntermBlock *parent;
+ TIntermAggregate *parent;
TIntermSequence::size_type position;
TIntermSequence insertionsBefore;
TIntermSequence insertionsAfter;
@@ -1016,11 +825,11 @@ class TIntermTraverser : angle::NonCopyable
// Helper to create a temporary symbol node.
TIntermSymbol *createTempSymbol(const TType &type);
// Create a node that declares but doesn't initialize a temporary symbol.
- TIntermDeclaration *createTempDeclaration(const TType &type);
+ TIntermAggregate *createTempDeclaration(const TType &type);
// Create a node that initializes the current temporary symbol with initializer having the given qualifier.
- TIntermDeclaration *createTempInitDeclaration(TIntermTyped *initializer, TQualifier qualifier);
+ TIntermAggregate *createTempInitDeclaration(TIntermTyped *initializer, TQualifier qualifier);
// Create a node that initializes the current temporary symbol with initializer.
- TIntermDeclaration *createTempInitDeclaration(TIntermTyped *initializer);
+ TIntermAggregate *createTempInitDeclaration(TIntermTyped *initializer);
// Create a node that assigns rightNode to the current temporary symbol.
TIntermBinary *createTempAssignment(TIntermTyped *rightNode);
// Increment temporary symbol index.
@@ -1082,12 +891,13 @@ class TIntermTraverser : angle::NonCopyable
struct ParentBlock
{
- ParentBlock(TIntermBlock *nodeIn, TIntermSequence::size_type posIn)
- : node(nodeIn), pos(posIn)
+ ParentBlock(TIntermAggregate *nodeIn, TIntermSequence::size_type posIn)
+ : node(nodeIn),
+ pos(posIn)
{
}
- TIntermBlock *node;
+ TIntermAggregate *node;
TIntermSequence::size_type pos;
};
@@ -1120,7 +930,6 @@ class TLValueTrackingTraverser : public TIntermTraverser
void traverseBinary(TIntermBinary *node) final;
void traverseUnary(TIntermUnary *node) final;
- void traverseFunctionDefinition(TIntermFunctionDefinition *node) final;
void traverseAggregate(TIntermAggregate *node) final;
protected:
@@ -1189,10 +998,8 @@ class TMaxDepthTraverser : public TIntermTraverser
bool visitBinary(Visit, TIntermBinary *) override { return depthCheck(); }
bool visitUnary(Visit, TIntermUnary *) override { return depthCheck(); }
- bool visitTernary(Visit, TIntermTernary *) override { return depthCheck(); }
- bool visitIfElse(Visit, TIntermIfElse *) override { return depthCheck(); }
+ bool visitSelection(Visit, TIntermSelection *) override { return depthCheck(); }
bool visitAggregate(Visit, TIntermAggregate *) override { return depthCheck(); }
- bool visitBlock(Visit, TIntermBlock *) override { return depthCheck(); }
bool visitLoop(Visit, TIntermLoop *) override { return depthCheck(); }
bool visitBranch(Visit, TIntermBranch *) override { return depthCheck(); }
@@ -1202,6 +1009,4 @@ class TMaxDepthTraverser : public TIntermTraverser
int mDepthLimit;
};
-} // namespace sh
-
#endif // COMPILER_TRANSLATOR_INTERMNODE_H_
diff --git a/gfx/angle/src/compiler/translator/IntermNodePatternMatcher.cpp b/gfx/angle/src/compiler/translator/IntermNodePatternMatcher.cpp
index dd2054f68..b614d8365 100755
--- a/gfx/angle/src/compiler/translator/IntermNodePatternMatcher.cpp
+++ b/gfx/angle/src/compiler/translator/IntermNodePatternMatcher.cpp
@@ -12,9 +12,17 @@
#include "compiler/translator/IntermNode.h"
-namespace sh
+namespace
{
+bool IsNodeBlock(TIntermNode *node)
+{
+ ASSERT(node != nullptr);
+ return (node->getAsAggregate() && node->getAsAggregate()->getOp() == EOpSequence);
+}
+
+} // anonymous namespace
+
IntermNodePatternMatcher::IntermNodePatternMatcher(const unsigned int mask) : mMask(mask)
{
}
@@ -31,7 +39,7 @@ bool IntermNodePatternMatcher::matchInternal(TIntermBinary *node, TIntermNode *p
if ((mMask & kExpressionReturningArray) != 0)
{
if (node->isArray() && node->getOp() == EOpAssign && parentNode != nullptr &&
- !parentNode->getAsBlock())
+ !IsNodeBlock(parentNode))
{
return true;
}
@@ -88,7 +96,7 @@ bool IntermNodePatternMatcher::match(TIntermAggregate *node, TIntermNode *parent
if (node->getType().isArray() && !parentIsAssignment &&
(node->isConstructor() || node->getOp() == EOpFunctionCall) &&
- !parentNode->getAsBlock())
+ !IsNodeBlock(parentNode))
{
return true;
}
@@ -97,13 +105,14 @@ bool IntermNodePatternMatcher::match(TIntermAggregate *node, TIntermNode *parent
return false;
}
-bool IntermNodePatternMatcher::match(TIntermTernary *node)
+bool IntermNodePatternMatcher::match(TIntermSelection *node)
{
if ((mMask & kUnfoldedShortCircuitExpression) != 0)
{
- return true;
+ if (node->usesTernaryOperator())
+ {
+ return true;
+ }
}
return false;
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/IntermNodePatternMatcher.h b/gfx/angle/src/compiler/translator/IntermNodePatternMatcher.h
index 10f9657ed..be6fc61f7 100755
--- a/gfx/angle/src/compiler/translator/IntermNodePatternMatcher.h
+++ b/gfx/angle/src/compiler/translator/IntermNodePatternMatcher.h
@@ -11,13 +11,10 @@
#ifndef COMPILER_TRANSLATOR_INTERMNODEPATTERNMATCHER_H_
#define COMPILER_TRANSLATOR_INTERMNODEPATTERNMATCHER_H_
-namespace sh
-{
-
class TIntermAggregate;
class TIntermBinary;
class TIntermNode;
-class TIntermTernary;
+class TIntermSelection;
class IntermNodePatternMatcher
{
@@ -45,7 +42,7 @@ class IntermNodePatternMatcher
bool match(TIntermBinary *node, TIntermNode *parentNode, bool isLValueRequiredHere);
bool match(TIntermAggregate *node, TIntermNode *parentNode);
- bool match(TIntermTernary *node);
+ bool match(TIntermSelection *node);
private:
const unsigned int mMask;
@@ -53,6 +50,4 @@ class IntermNodePatternMatcher
bool matchInternal(TIntermBinary *node, TIntermNode *parentNode);
};
-} // namespace sh
-
#endif
diff --git a/gfx/angle/src/compiler/translator/IntermTraverse.cpp b/gfx/angle/src/compiler/translator/IntermTraverse.cpp
index 7f91595d4..2f66ba7cd 100755
--- a/gfx/angle/src/compiler/translator/IntermTraverse.cpp
+++ b/gfx/angle/src/compiler/translator/IntermTraverse.cpp
@@ -8,9 +8,6 @@
#include "compiler/translator/InfoSink.h"
#include "compiler/translator/SymbolTable.h"
-namespace sh
-{
-
void TIntermSymbol::traverse(TIntermTraverser *it)
{
it->traverseSymbol(this);
@@ -26,11 +23,6 @@ void TIntermConstantUnion::traverse(TIntermTraverser *it)
it->traverseConstantUnion(this);
}
-void TIntermSwizzle::traverse(TIntermTraverser *it)
-{
- it->traverseSwizzle(this);
-}
-
void TIntermBinary::traverse(TIntermTraverser *it)
{
it->traverseBinary(this);
@@ -41,14 +33,9 @@ void TIntermUnary::traverse(TIntermTraverser *it)
it->traverseUnary(this);
}
-void TIntermTernary::traverse(TIntermTraverser *it)
+void TIntermSelection::traverse(TIntermTraverser *it)
{
- it->traverseTernary(this);
-}
-
-void TIntermIfElse::traverse(TIntermTraverser *it)
-{
- it->traverseIfElse(this);
+ it->traverseSelection(this);
}
void TIntermSwitch::traverse(TIntermTraverser *it)
@@ -61,21 +48,6 @@ void TIntermCase::traverse(TIntermTraverser *it)
it->traverseCase(this);
}
-void TIntermFunctionDefinition::traverse(TIntermTraverser *it)
-{
- it->traverseFunctionDefinition(this);
-}
-
-void TIntermBlock::traverse(TIntermTraverser *it)
-{
- it->traverseBlock(this);
-}
-
-void TIntermDeclaration::traverse(TIntermTraverser *it)
-{
- it->traverseDeclaration(this);
-}
-
void TIntermAggregate::traverse(TIntermTraverser *it)
{
it->traverseAggregate(this);
@@ -106,7 +78,7 @@ TIntermTraverser::~TIntermTraverser()
{
}
-void TIntermTraverser::pushParentBlock(TIntermBlock *node)
+void TIntermTraverser::pushParentBlock(TIntermAggregate *node)
{
mParentBlockStack.push_back(ParentBlock(node, 0));
}
@@ -154,11 +126,7 @@ TIntermSymbol *TIntermTraverser::createTempSymbol(const TType &type, TQualifier
TIntermSymbol *node = new TIntermSymbol(0, symbolName, type);
node->setInternal(true);
-
- ASSERT(qualifier == EvqTemporary || qualifier == EvqConst || qualifier == EvqGlobal);
node->getTypePointer()->setQualifier(qualifier);
- // TODO(oetuaho): Might be useful to sanitize layout qualifier etc. on the type of the created
- // symbol. This might need to be done in other places as well.
return node;
}
@@ -167,25 +135,27 @@ TIntermSymbol *TIntermTraverser::createTempSymbol(const TType &type)
return createTempSymbol(type, EvqTemporary);
}
-TIntermDeclaration *TIntermTraverser::createTempDeclaration(const TType &type)
+TIntermAggregate *TIntermTraverser::createTempDeclaration(const TType &type)
{
- TIntermDeclaration *tempDeclaration = new TIntermDeclaration();
- tempDeclaration->appendDeclarator(createTempSymbol(type));
+ TIntermAggregate *tempDeclaration = new TIntermAggregate(EOpDeclaration);
+ tempDeclaration->getSequence()->push_back(createTempSymbol(type));
return tempDeclaration;
}
-TIntermDeclaration *TIntermTraverser::createTempInitDeclaration(TIntermTyped *initializer,
- TQualifier qualifier)
+TIntermAggregate *TIntermTraverser::createTempInitDeclaration(TIntermTyped *initializer, TQualifier qualifier)
{
ASSERT(initializer != nullptr);
TIntermSymbol *tempSymbol = createTempSymbol(initializer->getType(), qualifier);
- TIntermDeclaration *tempDeclaration = new TIntermDeclaration();
- TIntermBinary *tempInit = new TIntermBinary(EOpInitialize, tempSymbol, initializer);
- tempDeclaration->appendDeclarator(tempInit);
+ TIntermAggregate *tempDeclaration = new TIntermAggregate(EOpDeclaration);
+ TIntermBinary *tempInit = new TIntermBinary(EOpInitialize);
+ tempInit->setLeft(tempSymbol);
+ tempInit->setRight(initializer);
+ tempInit->setType(tempSymbol->getType());
+ tempDeclaration->getSequence()->push_back(tempInit);
return tempDeclaration;
}
-TIntermDeclaration *TIntermTraverser::createTempInitDeclaration(TIntermTyped *initializer)
+TIntermAggregate *TIntermTraverser::createTempInitDeclaration(TIntermTyped *initializer)
{
return createTempInitDeclaration(initializer, EvqTemporary);
}
@@ -194,7 +164,10 @@ TIntermBinary *TIntermTraverser::createTempAssignment(TIntermTyped *rightNode)
{
ASSERT(rightNode != nullptr);
TIntermSymbol *tempSymbol = createTempSymbol(rightNode->getType());
- TIntermBinary *assignment = new TIntermBinary(EOpAssign, tempSymbol, rightNode);
+ TIntermBinary *assignment = new TIntermBinary(EOpAssign);
+ assignment->setLeft(tempSymbol);
+ assignment->setRight(rightNode);
+ assignment->setType(tempSymbol->getType());
return assignment;
}
@@ -217,14 +190,13 @@ void TLValueTrackingTraverser::addToFunctionMap(const TName &name, TIntermSequen
bool TLValueTrackingTraverser::isInFunctionMap(const TIntermAggregate *callNode) const
{
ASSERT(callNode->getOp() == EOpFunctionCall);
- return (mFunctionMap.find(callNode->getFunctionSymbolInfo()->getNameObj()) !=
- mFunctionMap.end());
+ return (mFunctionMap.find(callNode->getNameObj()) != mFunctionMap.end());
}
TIntermSequence *TLValueTrackingTraverser::getFunctionParameters(const TIntermAggregate *callNode)
{
ASSERT(isInFunctionMap(callNode));
- return mFunctionMap[callNode->getFunctionSymbolInfo()->getNameObj()];
+ return mFunctionMap[callNode->getNameObj()];
}
void TLValueTrackingTraverser::setInFunctionCallOutParameter(bool inOutParameter)
@@ -261,26 +233,6 @@ void TIntermTraverser::traverseConstantUnion(TIntermConstantUnion *node)
visitConstantUnion(node);
}
-void TIntermTraverser::traverseSwizzle(TIntermSwizzle *node)
-{
- bool visit = true;
-
- if (preVisit)
- visit = visitSwizzle(PreVisit, node);
-
- if (visit)
- {
- incrementDepth(node);
-
- node->getOperand()->traverse(this);
-
- decrementDepth();
- }
-
- if (visit && postVisit)
- visitSwizzle(PostVisit, node);
-}
-
//
// Traverse a binary node.
//
@@ -442,99 +394,9 @@ void TLValueTrackingTraverser::traverseUnary(TIntermUnary *node)
visitUnary(PostVisit, node);
}
-// Traverse a function definition node.
-void TIntermTraverser::traverseFunctionDefinition(TIntermFunctionDefinition *node)
-{
- bool visit = true;
-
- if (preVisit)
- visit = visitFunctionDefinition(PreVisit, node);
-
- if (visit)
- {
- incrementDepth(node);
- mInGlobalScope = false;
-
- node->getFunctionParameters()->traverse(this);
- if (inVisit)
- visit = visitFunctionDefinition(InVisit, node);
- node->getBody()->traverse(this);
-
- mInGlobalScope = true;
- decrementDepth();
- }
-
- if (visit && postVisit)
- visitFunctionDefinition(PostVisit, node);
-}
-
-// Traverse a block node.
-void TIntermTraverser::traverseBlock(TIntermBlock *node)
-{
- bool visit = true;
-
- TIntermSequence *sequence = node->getSequence();
-
- if (preVisit)
- visit = visitBlock(PreVisit, node);
-
- if (visit)
- {
- incrementDepth(node);
- pushParentBlock(node);
-
- for (auto *child : *sequence)
- {
- child->traverse(this);
- if (visit && inVisit)
- {
- if (child != sequence->back())
- visit = visitBlock(InVisit, node);
- }
-
- incrementParentBlockPos();
- }
-
- popParentBlock();
- decrementDepth();
- }
-
- if (visit && postVisit)
- visitBlock(PostVisit, node);
-}
-
-// Traverse a declaration node.
-void TIntermTraverser::traverseDeclaration(TIntermDeclaration *node)
-{
- bool visit = true;
-
- TIntermSequence *sequence = node->getSequence();
-
- if (preVisit)
- visit = visitDeclaration(PreVisit, node);
-
- if (visit)
- {
- incrementDepth(node);
-
- for (auto *child : *sequence)
- {
- child->traverse(this);
- if (visit && inVisit)
- {
- if (child != sequence->back())
- visit = visitDeclaration(InVisit, node);
- }
- }
-
- decrementDepth();
- }
-
- if (visit && postVisit)
- visitDeclaration(PostVisit, node);
-}
-
+//
// Traverse an aggregate node. Same comments in binary node apply here.
+//
void TIntermTraverser::traverseAggregate(TIntermAggregate *node)
{
bool visit = true;
@@ -548,6 +410,11 @@ void TIntermTraverser::traverseAggregate(TIntermAggregate *node)
{
incrementDepth(node);
+ if (node->getOp() == EOpSequence)
+ pushParentBlock(node);
+ else if (node->getOp() == EOpFunction)
+ mInGlobalScope = false;
+
for (auto *child : *sequence)
{
child->traverse(this);
@@ -556,8 +423,16 @@ void TIntermTraverser::traverseAggregate(TIntermAggregate *node)
if (child != sequence->back())
visit = visitAggregate(InVisit, node);
}
+
+ if (node->getOp() == EOpSequence)
+ incrementParentBlockPos();
}
+ if (node->getOp() == EOpSequence)
+ popParentBlock();
+ else if (node->getOp() == EOpFunction)
+ mInGlobalScope = true;
+
decrementDepth();
}
@@ -565,24 +440,26 @@ void TIntermTraverser::traverseAggregate(TIntermAggregate *node)
visitAggregate(PostVisit, node);
}
-void TLValueTrackingTraverser::traverseFunctionDefinition(TIntermFunctionDefinition *node)
-{
- TIntermAggregate *params = node->getFunctionParameters();
- ASSERT(params != nullptr);
- ASSERT(params->getOp() == EOpParameters);
- addToFunctionMap(node->getFunctionSymbolInfo()->getNameObj(), params->getSequence());
-
- TIntermTraverser::traverseFunctionDefinition(node);
-}
-
void TLValueTrackingTraverser::traverseAggregate(TIntermAggregate *node)
{
bool visit = true;
TIntermSequence *sequence = node->getSequence();
- if (node->getOp() == EOpPrototype)
+ switch (node->getOp())
{
- addToFunctionMap(node->getFunctionSymbolInfo()->getNameObj(), sequence);
+ case EOpFunction:
+ {
+ TIntermAggregate *params = sequence->front()->getAsAggregate();
+ ASSERT(params != nullptr);
+ ASSERT(params->getOp() == EOpParameters);
+ addToFunctionMap(node->getNameObj(), params->getSequence());
+ break;
+ }
+ case EOpPrototype:
+ addToFunctionMap(node->getNameObj(), sequence);
+ break;
+ default:
+ break;
}
if (preVisit)
@@ -628,6 +505,11 @@ void TLValueTrackingTraverser::traverseAggregate(TIntermAggregate *node)
}
else
{
+ if (node->getOp() == EOpSequence)
+ pushParentBlock(node);
+ else if (node->getOp() == EOpFunction)
+ mInGlobalScope = false;
+
// Find the built-in function corresponding to this op so that we can determine the
// in/out qualifiers of its parameters.
TFunction *builtInFunc = nullptr;
@@ -669,10 +551,18 @@ void TLValueTrackingTraverser::traverseAggregate(TIntermAggregate *node)
visit = visitAggregate(InVisit, node);
}
+ if (node->getOp() == EOpSequence)
+ incrementParentBlockPos();
+
++paramIndex;
}
setInFunctionCallOutParameter(false);
+
+ if (node->getOp() == EOpSequence)
+ popParentBlock();
+ else if (node->getOp() == EOpFunction)
+ mInGlobalScope = true;
}
decrementDepth();
@@ -683,37 +573,14 @@ void TLValueTrackingTraverser::traverseAggregate(TIntermAggregate *node)
}
//
-// Traverse a ternary node. Same comments in binary node apply here.
+// Traverse a selection node. Same comments in binary node apply here.
//
-void TIntermTraverser::traverseTernary(TIntermTernary *node)
-{
- bool visit = true;
-
- if (preVisit)
- visit = visitTernary(PreVisit, node);
-
- if (visit)
- {
- incrementDepth(node);
- node->getCondition()->traverse(this);
- if (node->getTrueExpression())
- node->getTrueExpression()->traverse(this);
- if (node->getFalseExpression())
- node->getFalseExpression()->traverse(this);
- decrementDepth();
- }
-
- if (visit && postVisit)
- visitTernary(PostVisit, node);
-}
-
-// Traverse an if-else node. Same comments in binary node apply here.
-void TIntermTraverser::traverseIfElse(TIntermIfElse *node)
+void TIntermTraverser::traverseSelection(TIntermSelection *node)
{
bool visit = true;
if (preVisit)
- visit = visitIfElse(PreVisit, node);
+ visit = visitSelection(PreVisit, node);
if (visit)
{
@@ -727,7 +594,7 @@ void TIntermTraverser::traverseIfElse(TIntermIfElse *node)
}
if (visit && postVisit)
- visitIfElse(PostVisit, node);
+ visitSelection(PostVisit, node);
}
//
@@ -766,11 +633,7 @@ void TIntermTraverser::traverseCase(TIntermCase *node)
visit = visitCase(PreVisit, node);
if (visit && node->getCondition())
- {
- incrementDepth(node);
node->getCondition()->traverse(this);
- decrementDepth();
- }
if (visit && postVisit)
visitCase(PostVisit, node);
@@ -834,5 +697,3 @@ void TIntermTraverser::traverseRaw(TIntermRaw *node)
{
visitRaw(node);
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/Intermediate.cpp b/gfx/angle/src/compiler/translator/Intermediate.cpp
index 9e3e455ae..b6fefa45e 100755
--- a/gfx/angle/src/compiler/translator/Intermediate.cpp
+++ b/gfx/angle/src/compiler/translator/Intermediate.cpp
@@ -15,9 +15,6 @@
#include "compiler/translator/Intermediate.h"
#include "compiler/translator/SymbolTable.h"
-namespace sh
-{
-
////////////////////////////////////////////////////////////////////////////
//
// First set of functions are to help build the intermediate representation.
@@ -47,30 +44,52 @@ TIntermSymbol *TIntermediate::addSymbol(
// Returns the added node.
// The caller should set the type of the returned node.
//
-TIntermTyped *TIntermediate::addIndex(TOperator op,
- TIntermTyped *base,
- TIntermTyped *index,
- const TSourceLoc &line,
- TDiagnostics *diagnostics)
+TIntermTyped *TIntermediate::addIndex(
+ TOperator op, TIntermTyped *base, TIntermTyped *index, const TSourceLoc &line)
{
- TIntermBinary *node = new TIntermBinary(op, base, index);
+ TIntermBinary *node = new TIntermBinary(op);
node->setLine(line);
+ node->setLeft(base);
+ node->setRight(index);
- TIntermTyped *folded = node->fold(diagnostics);
- if (folded)
- {
- return folded;
- }
+ // caller should set the type
return node;
}
+//
+// Add one node as the parent of another that it operates on.
+//
+// Returns the added node.
+//
+TIntermTyped *TIntermediate::addUnaryMath(
+ TOperator op, TIntermTyped *child, const TSourceLoc &line, const TType *funcReturnType)
+{
+ //
+ // Make a new node for the operator.
+ //
+ TIntermUnary *node = new TIntermUnary(op);
+ node->setLine(line);
+ node->setOperand(child);
+ node->promote(funcReturnType);
+
+ TIntermTyped *foldedNode = node->fold(mInfoSink);
+ if (foldedNode)
+ return foldedNode;
+
+ return node;
+}
+
+//
// This is the safe way to change the operator on an aggregate, as it
// does lots of error checking and fixing. Especially for establishing
-// a function call's operation on it's set of parameters.
+// a function call's operation on it's set of parameters. Sequences
+// of instructions are also aggregates, but they just direnctly set
+// their operator to EOpSequence.
//
// Returns an aggregate node, which could be the one passed in if
// it was already an aggregate but no operator was set.
+//
TIntermAggregate *TIntermediate::setAggregateOperator(
TIntermNode *node, TOperator op, const TSourceLoc &line)
{
@@ -141,10 +160,11 @@ TIntermAggregate *TIntermediate::growAggregate(
//
// Returns an aggregate, unless NULL was passed in for the existing node.
//
-TIntermAggregate *TIntermediate::MakeAggregate(TIntermNode *node, const TSourceLoc &line)
+TIntermAggregate *TIntermediate::makeAggregate(
+ TIntermNode *node, const TSourceLoc &line)
{
- if (node == nullptr)
- return nullptr;
+ if (node == NULL)
+ return NULL;
TIntermAggregate *aggNode = new TIntermAggregate;
aggNode->getSequence()->push_back(node);
@@ -155,57 +175,70 @@ TIntermAggregate *TIntermediate::MakeAggregate(TIntermNode *node, const TSourceL
}
// If the input node is nullptr, return nullptr.
-// If the input node is a block node, return it.
-// If the input node is not a block node, put it inside a block node and return that.
-TIntermBlock *TIntermediate::EnsureBlock(TIntermNode *node)
+// If the input node is a sequence (block) node, return it.
+// If the input node is not a sequence node, put it inside a sequence node and return that.
+TIntermAggregate *TIntermediate::ensureSequence(TIntermNode *node)
{
if (node == nullptr)
return nullptr;
- TIntermBlock *blockNode = node->getAsBlock();
- if (blockNode != nullptr)
- return blockNode;
-
- blockNode = new TIntermBlock();
- blockNode->setLine(node->getLine());
- blockNode->getSequence()->push_back(node);
- return blockNode;
+ TIntermAggregate *aggNode = node->getAsAggregate();
+ if (aggNode != nullptr && aggNode->getOp() == EOpSequence)
+ return aggNode;
+
+ aggNode = makeAggregate(node, node->getLine());
+ aggNode->setOp(EOpSequence);
+ return aggNode;
}
+//
// For "if" test nodes. There are three children; a condition,
// a true path, and a false path. The two paths are in the
// nodePair.
//
-// Returns the node created.
-TIntermNode *TIntermediate::addIfElse(TIntermTyped *cond,
- TIntermNodePair nodePair,
- const TSourceLoc &line)
+// Returns the selection node created.
+//
+TIntermNode *TIntermediate::addSelection(
+ TIntermTyped *cond, TIntermNodePair nodePair, const TSourceLoc &line)
{
- // For compile time constant conditions, prune the code now.
+ //
+ // For compile time constant selections, prune the code and
+ // test now.
+ //
if (cond->getAsConstantUnion())
{
if (cond->getAsConstantUnion()->getBConst(0) == true)
{
- return EnsureBlock(nodePair.node1);
+ return nodePair.node1 ? setAggregateOperator(
+ nodePair.node1, EOpSequence, nodePair.node1->getLine()) : NULL;
}
else
{
- return EnsureBlock(nodePair.node2);
+ return nodePair.node2 ? setAggregateOperator(
+ nodePair.node2, EOpSequence, nodePair.node2->getLine()) : NULL;
}
}
- TIntermIfElse *node =
- new TIntermIfElse(cond, EnsureBlock(nodePair.node1), EnsureBlock(nodePair.node2));
+ TIntermSelection *node = new TIntermSelection(
+ cond, ensureSequence(nodePair.node1), ensureSequence(nodePair.node2));
node->setLine(line);
return node;
}
-TIntermTyped *TIntermediate::AddComma(TIntermTyped *left,
+TIntermTyped *TIntermediate::addComma(TIntermTyped *left,
TIntermTyped *right,
const TSourceLoc &line,
int shaderVersion)
{
+ TQualifier resultQualifier = EvqConst;
+ // ESSL3.00 section 12.43: The result of a sequence operator is not a constant-expression.
+ if (shaderVersion >= 300 || left->getQualifier() != EvqConst ||
+ right->getQualifier() != EvqConst)
+ {
+ resultQualifier = EvqTemporary;
+ }
+
TIntermTyped *commaNode = nullptr;
if (!left->hasSideEffects())
{
@@ -213,53 +246,58 @@ TIntermTyped *TIntermediate::AddComma(TIntermTyped *left,
}
else
{
- commaNode = new TIntermBinary(EOpComma, left, right);
- commaNode->setLine(line);
+ commaNode = growAggregate(left, right, line);
+ commaNode->getAsAggregate()->setOp(EOpComma);
+ commaNode->setType(right->getType());
}
- TQualifier resultQualifier = TIntermBinary::GetCommaQualifier(shaderVersion, left, right);
commaNode->getTypePointer()->setQualifier(resultQualifier);
return commaNode;
}
+//
// For "?:" test nodes. There are three children; a condition,
// a true path, and a false path. The two paths are specified
// as separate parameters.
//
-// Returns the ternary node created, or one of trueExpression and falseExpression if the expression
-// could be folded.
-TIntermTyped *TIntermediate::AddTernarySelection(TIntermTyped *cond,
- TIntermTyped *trueExpression,
- TIntermTyped *falseExpression,
- const TSourceLoc &line)
+// Returns the selection node created, or one of trueBlock and falseBlock if the expression could be folded.
+//
+TIntermTyped *TIntermediate::addSelection(TIntermTyped *cond, TIntermTyped *trueBlock, TIntermTyped *falseBlock,
+ const TSourceLoc &line)
{
+ TQualifier resultQualifier = EvqTemporary;
+ if (cond->getQualifier() == EvqConst && trueBlock->getQualifier() == EvqConst &&
+ falseBlock->getQualifier() == EvqConst)
+ {
+ resultQualifier = EvqConst;
+ }
// Note that the node resulting from here can be a constant union without being qualified as
// constant.
if (cond->getAsConstantUnion())
{
- TQualifier resultQualifier =
- TIntermTernary::DetermineQualifier(cond, trueExpression, falseExpression);
if (cond->getAsConstantUnion()->getBConst(0))
{
- trueExpression->getTypePointer()->setQualifier(resultQualifier);
- return trueExpression;
+ trueBlock->getTypePointer()->setQualifier(resultQualifier);
+ return trueBlock;
}
else
{
- falseExpression->getTypePointer()->setQualifier(resultQualifier);
- return falseExpression;
+ falseBlock->getTypePointer()->setQualifier(resultQualifier);
+ return falseBlock;
}
}
- // Make a ternary node.
- TIntermTernary *node = new TIntermTernary(cond, trueExpression, falseExpression);
+ //
+ // Make a selection node.
+ //
+ TIntermSelection *node = new TIntermSelection(cond, trueBlock, falseBlock, trueBlock->getType());
+ node->getTypePointer()->setQualifier(resultQualifier);
node->setLine(line);
return node;
}
-TIntermSwitch *TIntermediate::addSwitch(TIntermTyped *init,
- TIntermBlock *statementList,
- const TSourceLoc &line)
+TIntermSwitch *TIntermediate::addSwitch(
+ TIntermTyped *init, TIntermAggregate *statementList, const TSourceLoc &line)
{
TIntermSwitch *node = new TIntermSwitch(init, statementList);
node->setLine(line);
@@ -292,22 +330,24 @@ TIntermConstantUnion *TIntermediate::addConstantUnion(const TConstantUnion *cons
return node;
}
-TIntermTyped *TIntermediate::AddSwizzle(TIntermTyped *baseExpression,
- const TVectorFields &fields,
- const TSourceLoc &dotLocation)
+TIntermTyped *TIntermediate::addSwizzle(
+ TVectorFields &fields, const TSourceLoc &line)
{
- TVector<int> fieldsVector;
- for (int i = 0; i < fields.num; ++i)
- {
- fieldsVector.push_back(fields.offsets[i]);
- }
- TIntermSwizzle *node = new TIntermSwizzle(baseExpression, fieldsVector);
- node->setLine(dotLocation);
- TIntermTyped *folded = node->fold();
- if (folded)
+ TIntermAggregate *node = new TIntermAggregate(EOpSequence);
+
+ node->setLine(line);
+ TIntermConstantUnion *constIntNode;
+ TIntermSequence *sequenceVector = node->getSequence();
+ TConstantUnion *unionArray;
+
+ for (int i = 0; i < fields.num; i++)
{
- return folded;
+ unionArray = new TConstantUnion[1];
+ unionArray->setIConst(fields.offsets[i]);
+ constIntNode = addConstantUnion(
+ unionArray, TType(EbtInt, EbpUndefined, EvqConst), line);
+ sequenceVector->push_back(constIntNode);
}
return node;
@@ -320,7 +360,7 @@ TIntermNode *TIntermediate::addLoop(
TLoopType type, TIntermNode *init, TIntermTyped *cond, TIntermTyped *expr,
TIntermNode *body, const TSourceLoc &line)
{
- TIntermNode *node = new TIntermLoop(type, init, cond, expr, EnsureBlock(body));
+ TIntermNode *node = new TIntermLoop(type, init, cond, expr, ensureSequence(body));
node->setLine(line);
return node;
@@ -344,8 +384,34 @@ TIntermBranch* TIntermediate::addBranch(
return node;
}
-TIntermTyped *TIntermediate::foldAggregateBuiltIn(TIntermAggregate *aggregate,
- TDiagnostics *diagnostics)
+//
+// This is to be executed once the final root is put on top by the parsing
+// process.
+//
+TIntermAggregate *TIntermediate::postProcess(TIntermNode *root)
+{
+ if (root == nullptr)
+ return nullptr;
+
+ //
+ // Finish off the top level sequence, if any
+ //
+ TIntermAggregate *aggRoot = root->getAsAggregate();
+ if (aggRoot != nullptr && aggRoot->getOp() == EOpNull)
+ {
+ aggRoot->setOp(EOpSequence);
+ }
+ else if (aggRoot == nullptr || aggRoot->getOp() != EOpSequence)
+ {
+ aggRoot = new TIntermAggregate(EOpSequence);
+ aggRoot->setLine(root->getLine());
+ aggRoot->getSequence()->push_back(root);
+ }
+
+ return aggRoot;
+}
+
+TIntermTyped *TIntermediate::foldAggregateBuiltIn(TIntermAggregate *aggregate)
{
switch (aggregate->getOp())
{
@@ -372,16 +438,14 @@ TIntermTyped *TIntermediate::foldAggregateBuiltIn(TIntermAggregate *aggregate,
case EOpFaceForward:
case EOpReflect:
case EOpRefract:
- return aggregate->fold(diagnostics);
+ return aggregate->fold(mInfoSink);
default:
// TODO: Add support for folding array constructors
if (aggregate->isConstructor() && !aggregate->isArray())
{
- return aggregate->fold(diagnostics);
+ return aggregate->fold(mInfoSink);
}
// Constant folding not supported for the built-in.
return nullptr;
}
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/Intermediate.h b/gfx/angle/src/compiler/translator/Intermediate.h
index d712bf953..339daa3e8 100755
--- a/gfx/angle/src/compiler/translator/Intermediate.h
+++ b/gfx/angle/src/compiler/translator/Intermediate.h
@@ -9,9 +9,6 @@
#include "compiler/translator/IntermNode.h"
-namespace sh
-{
-
struct TVectorFields
{
int offsets[4];
@@ -19,42 +16,38 @@ struct TVectorFields
};
//
-// Set of helper functions to help build the tree.
+// Set of helper functions to help parse and build the tree.
//
+class TInfoSink;
class TIntermediate
{
public:
POOL_ALLOCATOR_NEW_DELETE();
- TIntermediate() {}
+ TIntermediate(TInfoSink &i)
+ : mInfoSink(i) { }
TIntermSymbol *addSymbol(
int id, const TString &, const TType &, const TSourceLoc &);
- TIntermTyped *addIndex(TOperator op,
- TIntermTyped *base,
- TIntermTyped *index,
- const TSourceLoc &line,
- TDiagnostics *diagnostics);
+ TIntermTyped *addIndex(
+ TOperator op, TIntermTyped *base, TIntermTyped *index, const TSourceLoc &);
TIntermTyped *addUnaryMath(
TOperator op, TIntermTyped *child, const TSourceLoc &line, const TType *funcReturnType);
TIntermAggregate *growAggregate(
TIntermNode *left, TIntermNode *right, const TSourceLoc &);
- static TIntermAggregate *MakeAggregate(TIntermNode *node, const TSourceLoc &line);
- static TIntermBlock *EnsureBlock(TIntermNode *node);
+ TIntermAggregate *makeAggregate(TIntermNode *node, const TSourceLoc &);
+ TIntermAggregate *ensureSequence(TIntermNode *node);
TIntermAggregate *setAggregateOperator(TIntermNode *, TOperator, const TSourceLoc &);
- TIntermNode *addIfElse(TIntermTyped *cond, TIntermNodePair code, const TSourceLoc &line);
- static TIntermTyped *AddTernarySelection(TIntermTyped *cond,
- TIntermTyped *trueExpression,
- TIntermTyped *falseExpression,
- const TSourceLoc &line);
- TIntermSwitch *addSwitch(TIntermTyped *init,
- TIntermBlock *statementList,
- const TSourceLoc &line);
+ TIntermNode *addSelection(TIntermTyped *cond, TIntermNodePair code, const TSourceLoc &);
+ TIntermTyped *addSelection(TIntermTyped *cond, TIntermTyped *trueBlock, TIntermTyped *falseBlock,
+ const TSourceLoc &line);
+ TIntermSwitch *addSwitch(
+ TIntermTyped *init, TIntermAggregate *statementList, const TSourceLoc &line);
TIntermCase *addCase(
TIntermTyped *condition, const TSourceLoc &line);
- static TIntermTyped *AddComma(TIntermTyped *left,
- TIntermTyped *right,
- const TSourceLoc &line,
- int shaderVersion);
+ TIntermTyped *addComma(TIntermTyped *left,
+ TIntermTyped *right,
+ const TSourceLoc &line,
+ int shaderVersion);
TIntermConstantUnion *addConstantUnion(const TConstantUnion *constantUnion,
const TType &type,
const TSourceLoc &line);
@@ -62,18 +55,17 @@ class TIntermediate
TIntermNode *, const TSourceLoc &);
TIntermBranch *addBranch(TOperator, const TSourceLoc &);
TIntermBranch *addBranch(TOperator, TIntermTyped *, const TSourceLoc &);
- static TIntermTyped *AddSwizzle(TIntermTyped *baseExpression,
- const TVectorFields &fields,
- const TSourceLoc &dotLocation);
+ TIntermTyped *addSwizzle(TVectorFields &, const TSourceLoc &);
+ TIntermAggregate *postProcess(TIntermNode *root);
static void outputTree(TIntermNode *, TInfoSinkBase &);
- TIntermTyped *foldAggregateBuiltIn(TIntermAggregate *aggregate, TDiagnostics *diagnostics);
+ TIntermTyped *foldAggregateBuiltIn(TIntermAggregate *aggregate);
private:
void operator=(TIntermediate &); // prevent assignments
-};
-} // namespace sh
+ TInfoSink & mInfoSink;
+};
#endif // COMPILER_TRANSLATOR_INTERMEDIATE_H_
diff --git a/gfx/angle/src/compiler/translator/LoopInfo.cpp b/gfx/angle/src/compiler/translator/LoopInfo.cpp
index 48fa24472..d931a18a2 100755
--- a/gfx/angle/src/compiler/translator/LoopInfo.cpp
+++ b/gfx/angle/src/compiler/translator/LoopInfo.cpp
@@ -6,9 +6,6 @@
#include "compiler/translator/LoopInfo.h"
-namespace sh
-{
-
namespace
{
@@ -96,7 +93,8 @@ void TLoopIndexInfo::fillInfo(TIntermLoop *node)
// Here we assume all the operations are valid, because the loop node is
// already validated in ValidateLimitations.
- TIntermSequence *declSeq = node->getInit()->getAsDeclarationNode()->getSequence();
+ TIntermSequence *declSeq =
+ node->getInit()->getAsAggregate()->getSequence();
TIntermBinary *declInit = (*declSeq)[0]->getAsBinaryNode();
TIntermSymbol *symbol = declInit->getLeft()->getAsSymbolNode();
@@ -211,4 +209,3 @@ void TLoopStack::pop()
pop_back();
}
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/LoopInfo.h b/gfx/angle/src/compiler/translator/LoopInfo.h
index 393aa64f6..ec73fd0fa 100755
--- a/gfx/angle/src/compiler/translator/LoopInfo.h
+++ b/gfx/angle/src/compiler/translator/LoopInfo.h
@@ -9,9 +9,6 @@
#include "compiler/translator/IntermNode.h"
-namespace sh
-{
-
class TLoopIndexInfo
{
public:
@@ -79,7 +76,5 @@ class TLoopStack : public TVector<TLoopInfo>
void pop();
};
-} // namespace sh
-
#endif // COMPILER_TRANSLATOR_LOOPINFO_H_
diff --git a/gfx/angle/src/compiler/translator/Operator.cpp b/gfx/angle/src/compiler/translator/Operator.cpp
index 57878b930..2a6f1e4fc 100755
--- a/gfx/angle/src/compiler/translator/Operator.cpp
+++ b/gfx/angle/src/compiler/translator/Operator.cpp
@@ -62,6 +62,8 @@ const char *GetOperatorString(TOperator op)
case EOpIndexDirectStruct:
case EOpIndexDirectInterfaceBlock: return ".";
+ case EOpVectorSwizzle: return ".";
+
case EOpRadians: return "radians";
case EOpDegrees: return "degrees";
case EOpSin: return "sin";
diff --git a/gfx/angle/src/compiler/translator/Operator.h b/gfx/angle/src/compiler/translator/Operator.h
index f7706f8ed..b3acc5f08 100755
--- a/gfx/angle/src/compiler/translator/Operator.h
+++ b/gfx/angle/src/compiler/translator/Operator.h
@@ -13,9 +13,12 @@
enum TOperator
{
EOpNull, // if in a node, should only mean a node is still being built
+ EOpSequence, // denotes a list of statements, or parameters, etc.
EOpFunctionCall,
+ EOpFunction, // For function definition
EOpParameters, // an aggregate listing the parameters to a function
+ EOpDeclaration,
EOpInvariantDeclaration, // Specialized declarations for attributing invariance
EOpPrototype,
@@ -74,6 +77,8 @@ enum TOperator
EOpIndexDirectStruct,
EOpIndexDirectInterfaceBlock,
+ EOpVectorSwizzle,
+
//
// Built-in functions potentially mapped to operators
//
diff --git a/gfx/angle/src/compiler/translator/OutputESSL.cpp b/gfx/angle/src/compiler/translator/OutputESSL.cpp
index e55d6c544..77e0a8fb3 100755
--- a/gfx/angle/src/compiler/translator/OutputESSL.cpp
+++ b/gfx/angle/src/compiler/translator/OutputESSL.cpp
@@ -6,27 +6,20 @@
#include "compiler/translator/OutputESSL.h"
-namespace sh
-{
-
TOutputESSL::TOutputESSL(TInfoSinkBase &objSink,
ShArrayIndexClampingStrategy clampingStrategy,
ShHashFunction64 hashFunction,
NameMap &nameMap,
TSymbolTable &symbolTable,
- sh::GLenum shaderType,
int shaderVersion,
- bool forceHighp,
- ShCompileOptions compileOptions)
+ bool forceHighp)
: TOutputGLSLBase(objSink,
clampingStrategy,
hashFunction,
nameMap,
symbolTable,
- shaderType,
shaderVersion,
- SH_ESSL_OUTPUT,
- compileOptions),
+ SH_ESSL_OUTPUT),
mForceHighp(forceHighp)
{
}
@@ -43,5 +36,3 @@ bool TOutputESSL::writeVariablePrecision(TPrecision precision)
out << getPrecisionString(precision);
return true;
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/OutputESSL.h b/gfx/angle/src/compiler/translator/OutputESSL.h
index 5b2cb9492..c5a963499 100755
--- a/gfx/angle/src/compiler/translator/OutputESSL.h
+++ b/gfx/angle/src/compiler/translator/OutputESSL.h
@@ -9,29 +9,22 @@
#include "compiler/translator/OutputGLSLBase.h"
-namespace sh
-{
-
class TOutputESSL : public TOutputGLSLBase
{
- public:
- TOutputESSL(TInfoSinkBase &objSink,
+public:
+ TOutputESSL(TInfoSinkBase& objSink,
ShArrayIndexClampingStrategy clampingStrategy,
ShHashFunction64 hashFunction,
- NameMap &nameMap,
- TSymbolTable &symbolTable,
- sh::GLenum shaderType,
+ NameMap& nameMap,
+ TSymbolTable& symbolTable,
int shaderVersion,
- bool forceHighp,
- ShCompileOptions compileOptions);
+ bool forceHighp);
- protected:
- bool writeVariablePrecision(TPrecision precision) override;
+protected:
+ bool writeVariablePrecision(TPrecision precision) override;
- private:
+private:
bool mForceHighp;
};
-} // namespace sh
-
#endif // COMPILER_TRANSLATOR_OUTPUTESSL_H_
diff --git a/gfx/angle/src/compiler/translator/OutputGLSL.cpp b/gfx/angle/src/compiler/translator/OutputGLSL.cpp
index fc2b18471..431425020 100755
--- a/gfx/angle/src/compiler/translator/OutputGLSL.cpp
+++ b/gfx/angle/src/compiler/translator/OutputGLSL.cpp
@@ -6,27 +6,20 @@
#include "compiler/translator/OutputGLSL.h"
-namespace sh
-{
-
-TOutputGLSL::TOutputGLSL(TInfoSinkBase &objSink,
+TOutputGLSL::TOutputGLSL(TInfoSinkBase& objSink,
ShArrayIndexClampingStrategy clampingStrategy,
ShHashFunction64 hashFunction,
- NameMap &nameMap,
- TSymbolTable &symbolTable,
- sh::GLenum shaderType,
+ NameMap& nameMap,
+ TSymbolTable& symbolTable,
int shaderVersion,
- ShShaderOutput output,
- ShCompileOptions compileOptions)
+ ShShaderOutput output)
: TOutputGLSLBase(objSink,
clampingStrategy,
hashFunction,
nameMap,
symbolTable,
- shaderType,
shaderVersion,
- output,
- compileOptions)
+ output)
{
}
@@ -44,11 +37,11 @@ void TOutputGLSL::visitSymbol(TIntermSymbol *node)
{
out << "gl_FragDepth";
}
- else if (symbol == "gl_FragColor" && sh::IsGLSL130OrNewer(getShaderOutput()))
+ else if (symbol == "gl_FragColor" && IsGLSL130OrNewer(getShaderOutput()))
{
out << "webgl_FragColor";
}
- else if (symbol == "gl_FragData" && sh::IsGLSL130OrNewer(getShaderOutput()))
+ else if (symbol == "gl_FragData" && IsGLSL130OrNewer(getShaderOutput()))
{
out << "webgl_FragData";
}
@@ -94,8 +87,8 @@ TString TOutputGLSL::translateTextureFunction(TString &name)
"textureCubeGradEXT", "textureGrad",
NULL, NULL
};
- const char **mapping =
- (sh::IsGLSL130OrNewer(getShaderOutput())) ? legacyToCoreRename : simpleRename;
+ const char **mapping = (IsGLSL130OrNewer(getShaderOutput())) ?
+ legacyToCoreRename : simpleRename;
for (int i = 0; mapping[i] != NULL; i += 2)
{
@@ -107,5 +100,3 @@ TString TOutputGLSL::translateTextureFunction(TString &name)
return name;
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/OutputGLSL.h b/gfx/angle/src/compiler/translator/OutputGLSL.h
index d910c0004..9b1aca4ea 100755
--- a/gfx/angle/src/compiler/translator/OutputGLSL.h
+++ b/gfx/angle/src/compiler/translator/OutputGLSL.h
@@ -9,21 +9,16 @@
#include "compiler/translator/OutputGLSLBase.h"
-namespace sh
-{
-
class TOutputGLSL : public TOutputGLSLBase
{
public:
- TOutputGLSL(TInfoSinkBase &objSink,
+ TOutputGLSL(TInfoSinkBase& objSink,
ShArrayIndexClampingStrategy clampingStrategy,
ShHashFunction64 hashFunction,
- NameMap &nameMap,
- TSymbolTable &symbolTable,
- sh::GLenum shaderType,
+ NameMap& nameMap,
+ TSymbolTable& symbolTable,
int shaderVersion,
- ShShaderOutput output,
- ShCompileOptions compileOptions);
+ ShShaderOutput output);
protected:
bool writeVariablePrecision(TPrecision) override;
@@ -31,6 +26,4 @@ class TOutputGLSL : public TOutputGLSLBase
TString translateTextureFunction(TString &name) override;
};
-} // namespace sh
-
#endif // COMPILER_TRANSLATOR_OUTPUTGLSL_H_
diff --git a/gfx/angle/src/compiler/translator/OutputGLSLBase.cpp b/gfx/angle/src/compiler/translator/OutputGLSLBase.cpp
index 2c32b2ea5..296eef7d1 100755
--- a/gfx/angle/src/compiler/translator/OutputGLSLBase.cpp
+++ b/gfx/angle/src/compiler/translator/OutputGLSLBase.cpp
@@ -10,9 +10,6 @@
#include <cfloat>
-namespace sh
-{
-
namespace
{
TString arrayBrackets(const TType &type)
@@ -25,17 +22,16 @@ TString arrayBrackets(const TType &type)
bool isSingleStatement(TIntermNode *node)
{
- if (node->getAsFunctionDefinition())
- {
- return false;
- }
- else if (node->getAsBlock())
+ if (const TIntermAggregate *aggregate = node->getAsAggregate())
{
- return false;
+ return (aggregate->getOp() != EOpFunction) &&
+ (aggregate->getOp() != EOpSequence);
}
- else if (node->getAsIfElseNode())
+ else if (const TIntermSelection *selection = node->getAsSelectionNode())
{
- return false;
+ // Ternary operators are usually part of an assignment operator.
+ // This handles those rare cases in which they are all by themselves.
+ return selection->usesTernaryOperator();
}
else if (node->getAsLoopNode())
{
@@ -52,32 +48,6 @@ bool isSingleStatement(TIntermNode *node)
return true;
}
-// If SH_SCALARIZE_VEC_AND_MAT_CONSTRUCTOR_ARGS is enabled, layout qualifiers are spilled whenever
-// variables with specified layout qualifiers are copied. Additional checks are needed against the
-// type and storage qualifier of the variable to verify that layout qualifiers have to be outputted.
-// TODO (mradev): Fix layout qualifier spilling in ScalarizeVecAndMatConstructorArgs and remove
-// NeedsToWriteLayoutQualifier.
-bool NeedsToWriteLayoutQualifier(const TType &type)
-{
- if (type.getBasicType() == EbtInterfaceBlock)
- {
- return false;
- }
-
- const TLayoutQualifier &layoutQualifier = type.getLayoutQualifier();
-
- if ((type.getQualifier() == EvqFragmentOut || type.getQualifier() == EvqVertexIn) &&
- layoutQualifier.location >= 0)
- {
- return true;
- }
- if (IsImage(type.getBasicType()) && layoutQualifier.imageInternalFormat != EiifUnspecified)
- {
- return true;
- }
- return false;
-}
-
} // namespace
TOutputGLSLBase::TOutputGLSLBase(TInfoSinkBase &objSink,
@@ -85,10 +55,8 @@ TOutputGLSLBase::TOutputGLSLBase(TInfoSinkBase &objSink,
ShHashFunction64 hashFunction,
NameMap &nameMap,
TSymbolTable &symbolTable,
- sh::GLenum shaderType,
int shaderVersion,
- ShShaderOutput output,
- ShCompileOptions compileOptions)
+ ShShaderOutput output)
: TIntermTraverser(true, true, true),
mObjSink(objSink),
mDeclaringVariables(false),
@@ -96,20 +64,9 @@ TOutputGLSLBase::TOutputGLSLBase(TInfoSinkBase &objSink,
mHashFunction(hashFunction),
mNameMap(nameMap),
mSymbolTable(symbolTable),
- mShaderType(shaderType),
mShaderVersion(shaderVersion),
- mOutput(output),
- mCompileOptions(compileOptions)
-{
-}
-
-void TOutputGLSLBase::writeInvariantQualifier(const TType &type)
+ mOutput(output)
{
- if (!sh::RemoveInvariant(mShaderType, mShaderVersion, mOutput, mCompileOptions))
- {
- TInfoSinkBase &out = objSink();
- out << "invariant ";
- }
}
void TOutputGLSLBase::writeTriplet(
@@ -134,121 +91,55 @@ void TOutputGLSLBase::writeBuiltInFunctionTriplet(
void TOutputGLSLBase::writeLayoutQualifier(const TType &type)
{
- if (!NeedsToWriteLayoutQualifier(type))
- {
- return;
- }
-
- TInfoSinkBase &out = objSink();
- const TLayoutQualifier &layoutQualifier = type.getLayoutQualifier();
- out << "layout(";
-
if (type.getQualifier() == EvqFragmentOut || type.getQualifier() == EvqVertexIn)
{
+ const TLayoutQualifier &layoutQualifier = type.getLayoutQualifier();
if (layoutQualifier.location >= 0)
{
- out << "location = " << layoutQualifier.location;
+ TInfoSinkBase &out = objSink();
+ out << "layout(location = " << layoutQualifier.location << ") ";
}
}
-
- if (IsImage(type.getBasicType()) && layoutQualifier.imageInternalFormat != EiifUnspecified)
- {
- ASSERT(type.getQualifier() == EvqTemporary || type.getQualifier() == EvqUniform);
- out << getImageInternalFormatString(layoutQualifier.imageInternalFormat);
- }
-
- out << ") ";
-}
-
-const char *TOutputGLSLBase::mapQualifierToString(TQualifier qualifier)
-{
- if (sh::IsGLSL410OrOlder(mOutput) && mShaderVersion >= 300 &&
- (mCompileOptions & SH_REMOVE_INVARIANT_AND_CENTROID_FOR_ESSL3) != 0)
- {
- switch (qualifier)
- {
- // The return string is consistent with sh::getQualifierString() from
- // BaseTypes.h minus the "centroid" keyword.
- case EvqCentroid:
- return "";
- case EvqCentroidIn:
- return "smooth in";
- case EvqCentroidOut:
- return "smooth out";
- default:
- break;
- }
- }
- if (sh::IsGLSL130OrNewer(mOutput))
- {
- switch (qualifier)
- {
- case EvqAttribute:
- return "in";
- case EvqVaryingIn:
- return "in";
- case EvqVaryingOut:
- return "out";
- default:
- break;
- }
- }
- return sh::getQualifierString(qualifier);
}
void TOutputGLSLBase::writeVariableType(const TType &type)
{
- TQualifier qualifier = type.getQualifier();
TInfoSinkBase &out = objSink();
if (type.isInvariant())
{
- writeInvariantQualifier(type);
+ out << "invariant ";
}
if (type.getBasicType() == EbtInterfaceBlock)
{
TInterfaceBlock *interfaceBlock = type.getInterfaceBlock();
declareInterfaceBlockLayout(interfaceBlock);
}
+ TQualifier qualifier = type.getQualifier();
if (qualifier != EvqTemporary && qualifier != EvqGlobal)
{
- const char *qualifierString = mapQualifierToString(qualifier);
- if (qualifierString && qualifierString[0] != '\0')
+ if (IsGLSL130OrNewer(mOutput))
{
- out << qualifierString << " ";
+ switch (qualifier)
+ {
+ case EvqAttribute:
+ out << "in ";
+ break;
+ case EvqVaryingIn:
+ out << "in ";
+ break;
+ case EvqVaryingOut:
+ out << "out ";
+ break;
+ default:
+ out << type.getQualifierString() << " ";
+ break;
+ }
+ }
+ else
+ {
+ out << type.getQualifierString() << " ";
}
}
-
- const TMemoryQualifier &memoryQualifier = type.getMemoryQualifier();
- if (memoryQualifier.readonly)
- {
- ASSERT(IsImage(type.getBasicType()));
- out << "readonly ";
- }
-
- if (memoryQualifier.writeonly)
- {
- ASSERT(IsImage(type.getBasicType()));
- out << "writeonly ";
- }
-
- if (memoryQualifier.coherent)
- {
- ASSERT(IsImage(type.getBasicType()));
- out << "coherent ";
- }
-
- if (memoryQualifier.restrictQualifier)
- {
- ASSERT(IsImage(type.getBasicType()));
- out << "restrict ";
- }
-
- if (memoryQualifier.volatileQualifier)
- {
- ASSERT(IsImage(type.getBasicType()));
- out << "volatile ";
- }
-
// Declare the struct if we have not done so already.
if (type.getBasicType() == EbtStruct && !structDeclared(type.getStruct()))
{
@@ -286,8 +177,9 @@ void TOutputGLSLBase::writeFunctionParameters(const TIntermSequence &args)
const TType &type = arg->getType();
writeVariableType(type);
- if (!arg->getName().getString().empty())
- out << " " << hashName(arg->getName());
+ const TString &name = arg->getSymbol();
+ if (!name.empty())
+ out << " " << hashName(name);
if (type.isArray())
out << arrayBrackets(type);
@@ -305,7 +197,7 @@ const TConstantUnion *TOutputGLSLBase::writeConstantUnion(
if (type.getBasicType() == EbtStruct)
{
const TStructure *structure = type.getStruct();
- out << hashName(TName(structure->name())) << "(";
+ out << hashName(structure->name()) << "(";
const TFieldList &fields = structure->fields();
for (size_t i = 0; i < fields.size(); ++i)
@@ -379,7 +271,7 @@ void TOutputGLSLBase::visitSymbol(TIntermSymbol *node)
if (mLoopUnrollStack.needsToReplaceSymbolWithValue(node))
out << mLoopUnrollStack.getLoopIndexValue(node);
else
- out << hashVariableName(node->getName());
+ out << hashVariableName(node->getSymbol());
if (mDeclaringVariables && node->getType().isArray())
out << arrayBrackets(node->getType());
@@ -390,222 +282,241 @@ void TOutputGLSLBase::visitConstantUnion(TIntermConstantUnion *node)
writeConstantUnion(node->getType(), node->getUnionArrayPointer());
}
-bool TOutputGLSLBase::visitSwizzle(Visit visit, TIntermSwizzle *node)
-{
- TInfoSinkBase &out = objSink();
- if (visit == PostVisit)
- {
- out << ".";
- node->writeOffsetsAsXYZW(&out);
- }
- return true;
-}
-
bool TOutputGLSLBase::visitBinary(Visit visit, TIntermBinary *node)
{
bool visitChildren = true;
TInfoSinkBase &out = objSink();
switch (node->getOp())
{
- case EOpComma:
- writeTriplet(visit, "(", ", ", ")");
- break;
- case EOpInitialize:
+ case EOpInitialize:
+ if (visit == InVisit)
+ {
+ out << " = ";
+ // RHS of initialize is not being declared.
+ mDeclaringVariables = false;
+ }
+ break;
+ case EOpAssign:
+ writeTriplet(visit, "(", " = ", ")");
+ break;
+ case EOpAddAssign:
+ writeTriplet(visit, "(", " += ", ")");
+ break;
+ case EOpSubAssign:
+ writeTriplet(visit, "(", " -= ", ")");
+ break;
+ case EOpDivAssign:
+ writeTriplet(visit, "(", " /= ", ")");
+ break;
+ case EOpIModAssign:
+ writeTriplet(visit, "(", " %= ", ")");
+ break;
+ // Notice the fall-through.
+ case EOpMulAssign:
+ case EOpVectorTimesMatrixAssign:
+ case EOpVectorTimesScalarAssign:
+ case EOpMatrixTimesScalarAssign:
+ case EOpMatrixTimesMatrixAssign:
+ writeTriplet(visit, "(", " *= ", ")");
+ break;
+ case EOpBitShiftLeftAssign:
+ writeTriplet(visit, "(", " <<= ", ")");
+ break;
+ case EOpBitShiftRightAssign:
+ writeTriplet(visit, "(", " >>= ", ")");
+ break;
+ case EOpBitwiseAndAssign:
+ writeTriplet(visit, "(", " &= ", ")");
+ break;
+ case EOpBitwiseXorAssign:
+ writeTriplet(visit, "(", " ^= ", ")");
+ break;
+ case EOpBitwiseOrAssign:
+ writeTriplet(visit, "(", " |= ", ")");
+ break;
+
+ case EOpIndexDirect:
+ writeTriplet(visit, NULL, "[", "]");
+ break;
+ case EOpIndexIndirect:
+ if (node->getAddIndexClamp())
+ {
if (visit == InVisit)
{
- out << " = ";
- // RHS of initialize is not being declared.
- mDeclaringVariables = false;
+ if (mClampingStrategy == SH_CLAMP_WITH_CLAMP_INTRINSIC)
+ out << "[int(clamp(float(";
+ else
+ out << "[webgl_int_clamp(";
}
- break;
- case EOpAssign:
- writeTriplet(visit, "(", " = ", ")");
- break;
- case EOpAddAssign:
- writeTriplet(visit, "(", " += ", ")");
- break;
- case EOpSubAssign:
- writeTriplet(visit, "(", " -= ", ")");
- break;
- case EOpDivAssign:
- writeTriplet(visit, "(", " /= ", ")");
- break;
- case EOpIModAssign:
- writeTriplet(visit, "(", " %= ", ")");
- break;
- // Notice the fall-through.
- case EOpMulAssign:
- case EOpVectorTimesMatrixAssign:
- case EOpVectorTimesScalarAssign:
- case EOpMatrixTimesScalarAssign:
- case EOpMatrixTimesMatrixAssign:
- writeTriplet(visit, "(", " *= ", ")");
- break;
- case EOpBitShiftLeftAssign:
- writeTriplet(visit, "(", " <<= ", ")");
- break;
- case EOpBitShiftRightAssign:
- writeTriplet(visit, "(", " >>= ", ")");
- break;
- case EOpBitwiseAndAssign:
- writeTriplet(visit, "(", " &= ", ")");
- break;
- case EOpBitwiseXorAssign:
- writeTriplet(visit, "(", " ^= ", ")");
- break;
- case EOpBitwiseOrAssign:
- writeTriplet(visit, "(", " |= ", ")");
- break;
-
- case EOpIndexDirect:
- writeTriplet(visit, NULL, "[", "]");
- break;
- case EOpIndexIndirect:
- if (node->getAddIndexClamp())
+ else if (visit == PostVisit)
{
- if (visit == InVisit)
+ int maxSize;
+ TIntermTyped *left = node->getLeft();
+ TType leftType = left->getType();
+
+ if (left->isArray())
{
- if (mClampingStrategy == SH_CLAMP_WITH_CLAMP_INTRINSIC)
- out << "[int(clamp(float(";
- else
- out << "[webgl_int_clamp(";
+ // The shader will fail validation if the array length is not > 0.
+ maxSize = static_cast<int>(leftType.getArraySize()) - 1;
}
- else if (visit == PostVisit)
+ else
{
- int maxSize;
- TIntermTyped *left = node->getLeft();
- TType leftType = left->getType();
-
- if (left->isArray())
- {
- // The shader will fail validation if the array length is not > 0.
- maxSize = static_cast<int>(leftType.getArraySize()) - 1;
- }
- else
- {
- maxSize = leftType.getNominalSize() - 1;
- }
-
- if (mClampingStrategy == SH_CLAMP_WITH_CLAMP_INTRINSIC)
- out << "), 0.0, float(" << maxSize << ")))]";
- else
- out << ", 0, " << maxSize << ")]";
+ maxSize = leftType.getNominalSize() - 1;
}
+
+ if (mClampingStrategy == SH_CLAMP_WITH_CLAMP_INTRINSIC)
+ out << "), 0.0, float(" << maxSize << ")))]";
+ else
+ out << ", 0, " << maxSize << ")]";
}
- else
- {
- writeTriplet(visit, NULL, "[", "]");
- }
- break;
- case EOpIndexDirectStruct:
- if (visit == InVisit)
- {
- // Here we are writing out "foo.bar", where "foo" is struct
- // and "bar" is field. In AST, it is represented as a binary
- // node, where left child represents "foo" and right child "bar".
- // The node itself represents ".". The struct field "bar" is
- // actually stored as an index into TStructure::fields.
- out << ".";
- const TStructure *structure = node->getLeft()->getType().getStruct();
- const TIntermConstantUnion *index = node->getRight()->getAsConstantUnion();
- const TField *field = structure->fields()[index->getIConst(0)];
-
- TString fieldName = field->name();
- if (!mSymbolTable.findBuiltIn(structure->name(), mShaderVersion))
- fieldName = hashName(TName(fieldName));
-
- out << fieldName;
- visitChildren = false;
- }
- break;
- case EOpIndexDirectInterfaceBlock:
- if (visit == InVisit)
+ }
+ else
+ {
+ writeTriplet(visit, NULL, "[", "]");
+ }
+ break;
+ case EOpIndexDirectStruct:
+ if (visit == InVisit)
+ {
+ // Here we are writing out "foo.bar", where "foo" is struct
+ // and "bar" is field. In AST, it is represented as a binary
+ // node, where left child represents "foo" and right child "bar".
+ // The node itself represents ".". The struct field "bar" is
+ // actually stored as an index into TStructure::fields.
+ out << ".";
+ const TStructure *structure = node->getLeft()->getType().getStruct();
+ const TIntermConstantUnion *index = node->getRight()->getAsConstantUnion();
+ const TField *field = structure->fields()[index->getIConst(0)];
+
+ TString fieldName = field->name();
+ if (!mSymbolTable.findBuiltIn(structure->name(), mShaderVersion))
+ fieldName = hashName(fieldName);
+
+ out << fieldName;
+ visitChildren = false;
+ }
+ break;
+ case EOpIndexDirectInterfaceBlock:
+ if (visit == InVisit)
+ {
+ out << ".";
+ const TInterfaceBlock *interfaceBlock = node->getLeft()->getType().getInterfaceBlock();
+ const TIntermConstantUnion *index = node->getRight()->getAsConstantUnion();
+ const TField *field = interfaceBlock->fields()[index->getIConst(0)];
+
+ TString fieldName = field->name();
+ ASSERT(!mSymbolTable.findBuiltIn(interfaceBlock->name(), mShaderVersion));
+ fieldName = hashName(fieldName);
+
+ out << fieldName;
+ visitChildren = false;
+ }
+ break;
+ case EOpVectorSwizzle:
+ if (visit == InVisit)
+ {
+ out << ".";
+ TIntermAggregate *rightChild = node->getRight()->getAsAggregate();
+ TIntermSequence *sequence = rightChild->getSequence();
+ for (TIntermSequence::iterator sit = sequence->begin(); sit != sequence->end(); ++sit)
{
- out << ".";
- const TInterfaceBlock *interfaceBlock =
- node->getLeft()->getType().getInterfaceBlock();
- const TIntermConstantUnion *index = node->getRight()->getAsConstantUnion();
- const TField *field = interfaceBlock->fields()[index->getIConst(0)];
-
- TString fieldName = field->name();
- ASSERT(!mSymbolTable.findBuiltIn(interfaceBlock->name(), mShaderVersion));
- fieldName = hashName(TName(fieldName));
-
- out << fieldName;
- visitChildren = false;
+ TIntermConstantUnion *element = (*sit)->getAsConstantUnion();
+ ASSERT(element->getBasicType() == EbtInt);
+ ASSERT(element->getNominalSize() == 1);
+ const TConstantUnion& data = element->getUnionArrayPointer()[0];
+ ASSERT(data.getType() == EbtInt);
+ switch (data.getIConst())
+ {
+ case 0:
+ out << "x";
+ break;
+ case 1:
+ out << "y";
+ break;
+ case 2:
+ out << "z";
+ break;
+ case 3:
+ out << "w";
+ break;
+ default:
+ UNREACHABLE();
+ }
}
- break;
+ visitChildren = false;
+ }
+ break;
- case EOpAdd:
- writeTriplet(visit, "(", " + ", ")");
- break;
- case EOpSub:
- writeTriplet(visit, "(", " - ", ")");
- break;
- case EOpMul:
- writeTriplet(visit, "(", " * ", ")");
- break;
- case EOpDiv:
- writeTriplet(visit, "(", " / ", ")");
- break;
- case EOpIMod:
- writeTriplet(visit, "(", " % ", ")");
- break;
- case EOpBitShiftLeft:
- writeTriplet(visit, "(", " << ", ")");
- break;
- case EOpBitShiftRight:
- writeTriplet(visit, "(", " >> ", ")");
- break;
- case EOpBitwiseAnd:
- writeTriplet(visit, "(", " & ", ")");
- break;
- case EOpBitwiseXor:
- writeTriplet(visit, "(", " ^ ", ")");
- break;
- case EOpBitwiseOr:
- writeTriplet(visit, "(", " | ", ")");
- break;
+ case EOpAdd:
+ writeTriplet(visit, "(", " + ", ")");
+ break;
+ case EOpSub:
+ writeTriplet(visit, "(", " - ", ")");
+ break;
+ case EOpMul:
+ writeTriplet(visit, "(", " * ", ")");
+ break;
+ case EOpDiv:
+ writeTriplet(visit, "(", " / ", ")");
+ break;
+ case EOpIMod:
+ writeTriplet(visit, "(", " % ", ")");
+ break;
+ case EOpBitShiftLeft:
+ writeTriplet(visit, "(", " << ", ")");
+ break;
+ case EOpBitShiftRight:
+ writeTriplet(visit, "(", " >> ", ")");
+ break;
+ case EOpBitwiseAnd:
+ writeTriplet(visit, "(", " & ", ")");
+ break;
+ case EOpBitwiseXor:
+ writeTriplet(visit, "(", " ^ ", ")");
+ break;
+ case EOpBitwiseOr:
+ writeTriplet(visit, "(", " | ", ")");
+ break;
- case EOpEqual:
- writeTriplet(visit, "(", " == ", ")");
- break;
- case EOpNotEqual:
- writeTriplet(visit, "(", " != ", ")");
- break;
- case EOpLessThan:
- writeTriplet(visit, "(", " < ", ")");
- break;
- case EOpGreaterThan:
- writeTriplet(visit, "(", " > ", ")");
- break;
- case EOpLessThanEqual:
- writeTriplet(visit, "(", " <= ", ")");
- break;
- case EOpGreaterThanEqual:
- writeTriplet(visit, "(", " >= ", ")");
- break;
+ case EOpEqual:
+ writeTriplet(visit, "(", " == ", ")");
+ break;
+ case EOpNotEqual:
+ writeTriplet(visit, "(", " != ", ")");
+ break;
+ case EOpLessThan:
+ writeTriplet(visit, "(", " < ", ")");
+ break;
+ case EOpGreaterThan:
+ writeTriplet(visit, "(", " > ", ")");
+ break;
+ case EOpLessThanEqual:
+ writeTriplet(visit, "(", " <= ", ")");
+ break;
+ case EOpGreaterThanEqual:
+ writeTriplet(visit, "(", " >= ", ")");
+ break;
- // Notice the fall-through.
- case EOpVectorTimesScalar:
- case EOpVectorTimesMatrix:
- case EOpMatrixTimesVector:
- case EOpMatrixTimesScalar:
- case EOpMatrixTimesMatrix:
- writeTriplet(visit, "(", " * ", ")");
- break;
+ // Notice the fall-through.
+ case EOpVectorTimesScalar:
+ case EOpVectorTimesMatrix:
+ case EOpMatrixTimesVector:
+ case EOpMatrixTimesScalar:
+ case EOpMatrixTimesMatrix:
+ writeTriplet(visit, "(", " * ", ")");
+ break;
- case EOpLogicalOr:
- writeTriplet(visit, "(", " || ", ")");
- break;
- case EOpLogicalXor:
- writeTriplet(visit, "(", " ^^ ", ")");
- break;
- case EOpLogicalAnd:
- writeTriplet(visit, "(", " && ", ")");
- break;
- default:
- UNREACHABLE();
+ case EOpLogicalOr:
+ writeTriplet(visit, "(", " || ", ")");
+ break;
+ case EOpLogicalXor:
+ writeTriplet(visit, "(", " ^^ ", ")");
+ break;
+ case EOpLogicalAnd:
+ writeTriplet(visit, "(", " && ", ")");
+ break;
+ default:
+ UNREACHABLE();
}
return visitChildren;
@@ -800,40 +711,40 @@ bool TOutputGLSLBase::visitUnary(Visit visit, TIntermUnary *node)
return true;
}
-bool TOutputGLSLBase::visitTernary(Visit visit, TIntermTernary *node)
+bool TOutputGLSLBase::visitSelection(Visit visit, TIntermSelection *node)
{
TInfoSinkBase &out = objSink();
- // Notice two brackets at the beginning and end. The outer ones
- // encapsulate the whole ternary expression. This preserves the
- // order of precedence when ternary expressions are used in a
- // compound expression, i.e., c = 2 * (a < b ? 1 : 2).
- out << "((";
- node->getCondition()->traverse(this);
- out << ") ? (";
- node->getTrueExpression()->traverse(this);
- out << ") : (";
- node->getFalseExpression()->traverse(this);
- out << "))";
- return false;
-}
-bool TOutputGLSLBase::visitIfElse(Visit visit, TIntermIfElse *node)
-{
- TInfoSinkBase &out = objSink();
-
- out << "if (";
- node->getCondition()->traverse(this);
- out << ")\n";
+ if (node->usesTernaryOperator())
+ {
+ // Notice two brackets at the beginning and end. The outer ones
+ // encapsulate the whole ternary expression. This preserves the
+ // order of precedence when ternary expressions are used in a
+ // compound expression, i.e., c = 2 * (a < b ? 1 : 2).
+ out << "((";
+ node->getCondition()->traverse(this);
+ out << ") ? (";
+ node->getTrueBlock()->traverse(this);
+ out << ") : (";
+ node->getFalseBlock()->traverse(this);
+ out << "))";
+ }
+ else
+ {
+ out << "if (";
+ node->getCondition()->traverse(this);
+ out << ")\n";
- incrementDepth(node);
- visitCodeBlock(node->getTrueBlock());
+ incrementDepth(node);
+ visitCodeBlock(node->getTrueBlock());
- if (node->getFalseBlock())
- {
- out << "else\n";
- visitCodeBlock(node->getFalseBlock());
+ if (node->getFalseBlock())
+ {
+ out << "else\n";
+ visitCodeBlock(node->getFalseBlock());
+ }
+ decrementDepth();
}
- decrementDepth();
return false;
}
@@ -867,65 +778,6 @@ bool TOutputGLSLBase::visitCase(Visit visit, TIntermCase *node)
}
}
-bool TOutputGLSLBase::visitBlock(Visit visit, TIntermBlock *node)
-{
- TInfoSinkBase &out = objSink();
- // Scope the blocks except when at the global scope.
- if (mDepth > 0)
- {
- out << "{\n";
- }
-
- incrementDepth(node);
- for (TIntermSequence::const_iterator iter = node->getSequence()->begin();
- iter != node->getSequence()->end(); ++iter)
- {
- TIntermNode *curNode = *iter;
- ASSERT(curNode != nullptr);
- curNode->traverse(this);
-
- if (isSingleStatement(curNode))
- out << ";\n";
- }
- decrementDepth();
-
- // Scope the blocks except when at the global scope.
- if (mDepth > 0)
- {
- out << "}\n";
- }
- return false;
-}
-
-bool TOutputGLSLBase::visitFunctionDefinition(Visit visit, TIntermFunctionDefinition *node)
-{
- TInfoSinkBase &out = objSink();
-
- ASSERT(visit == PreVisit);
- {
- const TType &type = node->getType();
- writeVariableType(type);
- if (type.isArray())
- out << arrayBrackets(type);
- }
-
- out << " " << hashFunctionNameIfNeeded(node->getFunctionSymbolInfo()->getNameObj());
-
- incrementDepth(node);
-
- // Traverse function parameters.
- TIntermAggregate *params = node->getFunctionParameters()->getAsAggregate();
- ASSERT(params->getOp() == EOpParameters);
- params->traverse(this);
-
- // Traverse function body.
- visitCodeBlock(node->getBody());
- decrementDepth();
-
- // Fully processed; no need to visit children.
- return false;
-}
-
bool TOutputGLSLBase::visitAggregate(Visit visit, TIntermAggregate *node)
{
bool visitChildren = true;
@@ -933,6 +785,33 @@ bool TOutputGLSLBase::visitAggregate(Visit visit, TIntermAggregate *node)
bool useEmulatedFunction = (visit == PreVisit && node->getUseEmulatedFunction());
switch (node->getOp())
{
+ case EOpSequence:
+ // Scope the sequences except when at the global scope.
+ if (mDepth > 0)
+ {
+ out << "{\n";
+ }
+
+ incrementDepth(node);
+ for (TIntermSequence::const_iterator iter = node->getSequence()->begin();
+ iter != node->getSequence()->end(); ++iter)
+ {
+ TIntermNode *curNode = *iter;
+ ASSERT(curNode != NULL);
+ curNode->traverse(this);
+
+ if (isSingleStatement(curNode))
+ out << ";\n";
+ }
+ decrementDepth();
+
+ // Scope the sequences except when at the global scope.
+ if (mDepth > 0)
+ {
+ out << "}\n";
+ }
+ visitChildren = false;
+ break;
case EOpPrototype:
// Function declaration.
ASSERT(visit == PreVisit);
@@ -943,7 +822,7 @@ bool TOutputGLSLBase::visitAggregate(Visit visit, TIntermAggregate *node)
out << arrayBrackets(type);
}
- out << " " << hashFunctionNameIfNeeded(node->getFunctionSymbolInfo()->getNameObj());
+ out << " " << hashFunctionNameIfNeeded(node->getNameObj());
out << "(";
writeFunctionParameters(*(node->getSequence()));
@@ -951,10 +830,46 @@ bool TOutputGLSLBase::visitAggregate(Visit visit, TIntermAggregate *node)
visitChildren = false;
break;
+ case EOpFunction: {
+ // Function definition.
+ ASSERT(visit == PreVisit);
+ {
+ const TType &type = node->getType();
+ writeVariableType(type);
+ if (type.isArray())
+ out << arrayBrackets(type);
+ }
+
+ out << " " << hashFunctionNameIfNeeded(node->getNameObj());
+
+ incrementDepth(node);
+ // Function definition node contains one or two children nodes
+ // representing function parameters and function body. The latter
+ // is not present in case of empty function bodies.
+ const TIntermSequence &sequence = *(node->getSequence());
+ ASSERT((sequence.size() == 1) || (sequence.size() == 2));
+ TIntermSequence::const_iterator seqIter = sequence.begin();
+
+ // Traverse function parameters.
+ TIntermAggregate *params = (*seqIter)->getAsAggregate();
+ ASSERT(params != NULL);
+ ASSERT(params->getOp() == EOpParameters);
+ params->traverse(this);
+
+ // Traverse function body.
+ TIntermAggregate *body = ++seqIter != sequence.end() ?
+ (*seqIter)->getAsAggregate() : NULL;
+ visitCodeBlock(body);
+ decrementDepth();
+
+ // Fully processed; no need to visit children.
+ visitChildren = false;
+ break;
+ }
case EOpFunctionCall:
// Function call.
if (visit == PreVisit)
- out << hashFunctionNameIfNeeded(node->getFunctionSymbolInfo()->getNameObj()) << "(";
+ out << hashFunctionNameIfNeeded(node->getNameObj()) << "(";
else if (visit == InVisit)
out << ", ";
else
@@ -968,6 +883,27 @@ bool TOutputGLSLBase::visitAggregate(Visit visit, TIntermAggregate *node)
out << ")";
visitChildren = false;
break;
+ case EOpDeclaration:
+ // Variable declaration.
+ if (visit == PreVisit)
+ {
+ const TIntermSequence &sequence = *(node->getSequence());
+ const TIntermTyped *variable = sequence.front()->getAsTyped();
+ writeLayoutQualifier(variable->getType());
+ writeVariableType(variable->getType());
+ out << " ";
+ mDeclaringVariables = true;
+ }
+ else if (visit == InVisit)
+ {
+ out << ", ";
+ mDeclaringVariables = true;
+ }
+ else
+ {
+ mDeclaringVariables = false;
+ }
+ break;
case EOpInvariantDeclaration:
// Invariant declaration.
ASSERT(visit == PreVisit);
@@ -976,7 +912,7 @@ bool TOutputGLSLBase::visitAggregate(Visit visit, TIntermAggregate *node)
ASSERT(sequence && sequence->size() == 1);
const TIntermSymbol *symbol = sequence->front()->getAsSymbolNode();
ASSERT(symbol);
- out << "invariant " << hashVariableName(symbol->getName());
+ out << "invariant " << hashVariableName(symbol->getSymbol());
}
visitChildren = false;
break;
@@ -1031,6 +967,9 @@ bool TOutputGLSLBase::visitAggregate(Visit visit, TIntermAggregate *node)
case EOpVectorNotEqual:
writeBuiltInFunctionTriplet(visit, "notEqual(", useEmulatedFunction);
break;
+ case EOpComma:
+ writeTriplet(visit, "(", ", ", ")");
+ break;
case EOpMod:
writeBuiltInFunctionTriplet(visit, "mod(", useEmulatedFunction);
@@ -1090,32 +1029,6 @@ bool TOutputGLSLBase::visitAggregate(Visit visit, TIntermAggregate *node)
return visitChildren;
}
-bool TOutputGLSLBase::visitDeclaration(Visit visit, TIntermDeclaration *node)
-{
- TInfoSinkBase &out = objSink();
-
- // Variable declaration.
- if (visit == PreVisit)
- {
- const TIntermSequence &sequence = *(node->getSequence());
- const TIntermTyped *variable = sequence.front()->getAsTyped();
- writeLayoutQualifier(variable->getType());
- writeVariableType(variable->getType());
- out << " ";
- mDeclaringVariables = true;
- }
- else if (visit == InVisit)
- {
- out << ", ";
- mDeclaringVariables = true;
- }
- else
- {
- mDeclaringVariables = false;
- }
- return true;
-}
-
bool TOutputGLSLBase::visitLoop(Visit visit, TIntermLoop *node)
{
TInfoSinkBase &out = objSink();
@@ -1149,10 +1062,11 @@ bool TOutputGLSLBase::visitLoop(Visit visit, TIntermLoop *node)
else
{
// Need to put a one-iteration loop here to handle break.
- TIntermSequence *declSeq = node->getInit()->getAsDeclarationNode()->getSequence();
+ TIntermSequence *declSeq =
+ node->getInit()->getAsAggregate()->getSequence();
TIntermSymbol *indexSymbol =
(*declSeq)[0]->getAsBinaryNode()->getLeft()->getAsSymbolNode();
- TString name = hashVariableName(indexSymbol->getName());
+ TString name = hashVariableName(indexSymbol->getSymbol());
out << "for (int " << name << " = 0; "
<< name << " < 1; "
<< "++" << name << ")\n";
@@ -1220,7 +1134,7 @@ bool TOutputGLSLBase::visitBranch(Visit visit, TIntermBranch *node)
return true;
}
-void TOutputGLSLBase::visitCodeBlock(TIntermBlock *node)
+void TOutputGLSLBase::visitCodeBlock(TIntermNode *node)
{
TInfoSinkBase &out = objSink();
if (node != NULL)
@@ -1240,43 +1154,27 @@ void TOutputGLSLBase::visitCodeBlock(TIntermBlock *node)
TString TOutputGLSLBase::getTypeName(const TType &type)
{
if (type.getBasicType() == EbtStruct)
- return hashName(TName(type.getStruct()->name()));
+ return hashName(type.getStruct()->name());
else
return type.getBuiltInTypeNameString();
}
-TString TOutputGLSLBase::hashName(const TName &name)
+TString TOutputGLSLBase::hashName(const TString &name)
{
- if (name.getString().empty())
- {
- ASSERT(!name.isInternal());
- return name.getString();
- }
- if (name.isInternal())
- {
- // TODO(oetuaho): Would be nicer to prefix non-internal names with "_" instead, like is
- // done in the HLSL output, but that requires fairly complex changes elsewhere in the code
- // as well.
- // We need to use a prefix that is reserved in WebGL in order to guarantee that the internal
- // names don't conflict with user-defined names from WebGL.
- return "webgl_angle_" + name.getString();
- }
- if (mHashFunction == nullptr)
- {
- return name.getString();
- }
- NameMap::const_iterator it = mNameMap.find(name.getString().c_str());
+ if (mHashFunction == NULL || name.empty())
+ return name;
+ NameMap::const_iterator it = mNameMap.find(name.c_str());
if (it != mNameMap.end())
return it->second.c_str();
- TString hashedName = TIntermTraverser::hash(name.getString(), mHashFunction);
- mNameMap[name.getString().c_str()] = hashedName.c_str();
+ TString hashedName = TIntermTraverser::hash(name, mHashFunction);
+ mNameMap[name.c_str()] = hashedName.c_str();
return hashedName;
}
-TString TOutputGLSLBase::hashVariableName(const TName &name)
+TString TOutputGLSLBase::hashVariableName(const TString &name)
{
- if (mSymbolTable.findBuiltIn(name.getString(), mShaderVersion) != NULL)
- return name.getString();
+ if (mSymbolTable.findBuiltIn(name, mShaderVersion) != NULL)
+ return name;
return hashName(name);
}
@@ -1287,16 +1185,9 @@ TString TOutputGLSLBase::hashFunctionNameIfNeeded(const TName &mangledName)
if (mSymbolTable.findBuiltIn(mangledStr, mShaderVersion) != nullptr || name == "main")
return translateTextureFunction(name);
if (mangledName.isInternal())
- {
- // Internal function names are outputted as-is - they may refer to functions manually added
- // to the output shader source that are not included in the AST at all.
return name;
- }
else
- {
- TName nameObj(name);
- return hashName(nameObj);
- }
+ return hashName(name);
}
bool TOutputGLSLBase::structDeclared(const TStructure *structure) const
@@ -1314,14 +1205,14 @@ void TOutputGLSLBase::declareStruct(const TStructure *structure)
{
TInfoSinkBase &out = objSink();
- out << "struct " << hashName(TName(structure->name())) << "{\n";
+ out << "struct " << hashName(structure->name()) << "{\n";
const TFieldList &fields = structure->fields();
for (size_t i = 0; i < fields.size(); ++i)
{
const TField *field = fields[i];
if (writeVariablePrecision(field->type()->getPrecision()))
out << " ";
- out << getTypeName(*field->type()) << " " << hashName(TName(field->name()));
+ out << getTypeName(*field->type()) << " " << hashName(field->name());
if (field->type()->isArray())
out << arrayBrackets(*field->type());
out << ";\n";
@@ -1382,19 +1273,17 @@ void TOutputGLSLBase::declareInterfaceBlock(const TInterfaceBlock *interfaceBloc
{
TInfoSinkBase &out = objSink();
- out << hashName(TName(interfaceBlock->name())) << "{\n";
+ out << hashName(interfaceBlock->name()) << "{\n";
const TFieldList &fields = interfaceBlock->fields();
for (size_t i = 0; i < fields.size(); ++i)
{
const TField *field = fields[i];
if (writeVariablePrecision(field->type()->getPrecision()))
out << " ";
- out << getTypeName(*field->type()) << " " << hashName(TName(field->name()));
+ out << getTypeName(*field->type()) << " " << hashName(field->name());
if (field->type()->isArray())
out << arrayBrackets(*field->type());
out << ";\n";
}
out << "}";
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/OutputGLSLBase.h b/gfx/angle/src/compiler/translator/OutputGLSLBase.h
index ede4c4925..29b710487 100755
--- a/gfx/angle/src/compiler/translator/OutputGLSLBase.h
+++ b/gfx/angle/src/compiler/translator/OutputGLSLBase.h
@@ -13,9 +13,6 @@
#include "compiler/translator/LoopInfo.h"
#include "compiler/translator/ParseContext.h"
-namespace sh
-{
-
class TOutputGLSLBase : public TIntermTraverser
{
public:
@@ -23,11 +20,9 @@ class TOutputGLSLBase : public TIntermTraverser
ShArrayIndexClampingStrategy clampingStrategy,
ShHashFunction64 hashFunction,
NameMap &nameMap,
- TSymbolTable &symbolTable,
- sh::GLenum shaderType,
+ TSymbolTable& symbolTable,
int shaderVersion,
- ShShaderOutput output,
- ShCompileOptions compileOptions);
+ ShShaderOutput output);
ShShaderOutput getShaderOutput() const
{
@@ -38,7 +33,6 @@ class TOutputGLSLBase : public TIntermTraverser
TInfoSinkBase &objSink() { return mObjSink; }
void writeTriplet(Visit visit, const char *preStr, const char *inStr, const char *postStr);
void writeLayoutQualifier(const TType &type);
- void writeInvariantQualifier(const TType &type);
void writeVariableType(const TType &type);
virtual bool writeVariablePrecision(TPrecision precision) = 0;
void writeFunctionParameters(const TIntermSequence &args);
@@ -48,27 +42,22 @@ class TOutputGLSLBase : public TIntermTraverser
void visitSymbol(TIntermSymbol *node) override;
void visitConstantUnion(TIntermConstantUnion *node) override;
- bool visitSwizzle(Visit visit, TIntermSwizzle *node) override;
bool visitBinary(Visit visit, TIntermBinary *node) override;
bool visitUnary(Visit visit, TIntermUnary *node) override;
- bool visitTernary(Visit visit, TIntermTernary *node) override;
- bool visitIfElse(Visit visit, TIntermIfElse *node) override;
+ bool visitSelection(Visit visit, TIntermSelection *node) override;
bool visitSwitch(Visit visit, TIntermSwitch *node) override;
bool visitCase(Visit visit, TIntermCase *node) override;
- bool visitFunctionDefinition(Visit visit, TIntermFunctionDefinition *node) override;
bool visitAggregate(Visit visit, TIntermAggregate *node) override;
- bool visitBlock(Visit visit, TIntermBlock *node) override;
- bool visitDeclaration(Visit visit, TIntermDeclaration *node) override;
bool visitLoop(Visit visit, TIntermLoop *node) override;
bool visitBranch(Visit visit, TIntermBranch *node) override;
- void visitCodeBlock(TIntermBlock *node);
+ void visitCodeBlock(TIntermNode *node);
// Return the original name if hash function pointer is NULL;
// otherwise return the hashed name.
- TString hashName(const TName &name);
+ TString hashName(const TString &name);
// Same as hashName(), but without hashing built-in variables.
- TString hashVariableName(const TName &name);
+ TString hashVariableName(const TString &name);
// Same as hashName(), but without hashing built-in functions and with unmangling.
TString hashFunctionNameIfNeeded(const TName &mangledName);
// Used to translate function names for differences between ESSL and GLSL
@@ -83,8 +72,6 @@ class TOutputGLSLBase : public TIntermTraverser
void writeBuiltInFunctionTriplet(Visit visit, const char *preStr, bool useEmulatedFunction);
- const char *mapQualifierToString(TQualifier qialifier);
-
TInfoSinkBase &mObjSink;
bool mDeclaringVariables;
@@ -103,15 +90,9 @@ class TOutputGLSLBase : public TIntermTraverser
TSymbolTable &mSymbolTable;
- sh::GLenum mShaderType;
-
const int mShaderVersion;
ShShaderOutput mOutput;
-
- ShCompileOptions mCompileOptions;
};
-} // namespace sh
-
#endif // COMPILER_TRANSLATOR_OUTPUTGLSLBASE_H_
diff --git a/gfx/angle/src/compiler/translator/OutputHLSL.cpp b/gfx/angle/src/compiler/translator/OutputHLSL.cpp
index 5ef2e89f9..639178281 100755
--- a/gfx/angle/src/compiler/translator/OutputHLSL.cpp
+++ b/gfx/angle/src/compiler/translator/OutputHLSL.cpp
@@ -28,11 +28,13 @@
#include "compiler/translator/blocklayout.h"
#include "compiler/translator/util.h"
-namespace sh
+namespace
{
-namespace
+bool IsSequence(TIntermNode *node)
{
+ return node->getAsAggregate() != nullptr && node->getAsAggregate()->getOp() == EOpSequence;
+}
void WriteSingleConstant(TInfoSinkBase &out, const TConstantUnion *const constUnion)
{
@@ -75,14 +77,14 @@ const TConstantUnion *WriteConstantUnionArray(TInfoSinkBase &out,
} // namespace
-OutputHLSL::OutputHLSL(sh::GLenum shaderType,
- int shaderVersion,
- const TExtensionBehavior &extensionBehavior,
- const char *sourcePath,
- ShShaderOutput outputType,
- int numRenderTargets,
- const std::vector<Uniform> &uniforms,
- ShCompileOptions compileOptions)
+namespace sh
+{
+
+OutputHLSL::OutputHLSL(sh::GLenum shaderType, int shaderVersion,
+ const TExtensionBehavior &extensionBehavior,
+ const char *sourcePath, ShShaderOutput outputType,
+ int numRenderTargets, const std::vector<Uniform> &uniforms,
+ int compileOptions)
: TIntermTraverser(true, true, true),
mShaderType(shaderType),
mShaderVersion(shaderVersion),
@@ -156,17 +158,12 @@ void OutputHLSL::output(TIntermNode *treeRoot, TInfoSinkBase &objSink)
BuiltInFunctionEmulator builtInFunctionEmulator;
InitBuiltInFunctionEmulatorForHLSL(&builtInFunctionEmulator);
- if ((mCompileOptions & SH_EMULATE_ISNAN_FLOAT_FUNCTION) != 0)
- {
- InitBuiltInIsnanFunctionEmulatorForHLSLWorkarounds(&builtInFunctionEmulator,
- mShaderVersion);
- }
-
builtInFunctionEmulator.MarkBuiltInFunctionsForEmulation(treeRoot);
// Now that we are done changing the AST, do the analyses need for HLSL generation
CallDAG::InitResult success = mCallDag.init(treeRoot, &objSink);
ASSERT(success == CallDAG::INITDAG_SUCCESS);
+ UNUSED_ASSERTION_VARIABLE(success);
mASTMetadataList = CreateASTMetadataHLSL(treeRoot, mCallDag);
// Output the body and footer first to determine what has to go in the header
@@ -842,17 +839,6 @@ bool OutputHLSL::ancestorEvaluatesToSamplerInStruct(Visit visit)
return false;
}
-bool OutputHLSL::visitSwizzle(Visit visit, TIntermSwizzle *node)
-{
- TInfoSinkBase &out = getInfoSink();
- if (visit == PostVisit)
- {
- out << ".";
- node->writeOffsetsAsXYZW(&out);
- }
- return true;
-}
-
bool OutputHLSL::visitBinary(Visit visit, TIntermBinary *node)
{
TInfoSinkBase &out = getInfoSink();
@@ -866,139 +852,133 @@ bool OutputHLSL::visitBinary(Visit visit, TIntermBinary *node)
switch (node->getOp())
{
- case EOpComma:
- outputTriplet(out, visit, "(", ", ", ")");
- break;
- case EOpAssign:
- if (node->getLeft()->isArray())
- {
- TIntermAggregate *rightAgg = node->getRight()->getAsAggregate();
- if (rightAgg != nullptr && rightAgg->isConstructor())
- {
- const TString &functionName = addArrayConstructIntoFunction(node->getType());
- out << functionName << "(";
- node->getLeft()->traverse(this);
- TIntermSequence *seq = rightAgg->getSequence();
- for (auto &arrayElement : *seq)
- {
- out << ", ";
- arrayElement->traverse(this);
- }
- out << ")";
- return false;
- }
- // ArrayReturnValueToOutParameter should have eliminated expressions where a
- // function call is assigned.
- ASSERT(rightAgg == nullptr || rightAgg->getOp() != EOpFunctionCall);
-
- const TString &functionName = addArrayAssignmentFunction(node->getType());
- outputTriplet(out, visit, (functionName + "(").c_str(), ", ", ")");
- }
- else
+ case EOpAssign:
+ if (node->getLeft()->isArray())
+ {
+ TIntermAggregate *rightAgg = node->getRight()->getAsAggregate();
+ if (rightAgg != nullptr && rightAgg->isConstructor())
{
- outputTriplet(out, visit, "(", " = ", ")");
- }
- break;
- case EOpInitialize:
- if (visit == PreVisit)
- {
- TIntermSymbol *symbolNode = node->getLeft()->getAsSymbolNode();
- ASSERT(symbolNode);
- TIntermTyped *expression = node->getRight();
-
- // Global initializers must be constant at this point.
- ASSERT(symbolNode->getQualifier() != EvqGlobal ||
- canWriteAsHLSLLiteral(expression));
-
- // GLSL allows to write things like "float x = x;" where a new variable x is defined
- // and the value of an existing variable x is assigned. HLSL uses C semantics (the
- // new variable is created before the assignment is evaluated), so we need to
- // convert
- // this to "float t = x, x = t;".
- if (writeSameSymbolInitializer(out, symbolNode, expression))
- {
- // Skip initializing the rest of the expression
- return false;
- }
- else if (writeConstantInitialization(out, symbolNode, expression))
+ const TString &functionName = addArrayConstructIntoFunction(node->getType());
+ out << functionName << "(";
+ node->getLeft()->traverse(this);
+ TIntermSequence *seq = rightAgg->getSequence();
+ for (auto &arrayElement : *seq)
{
- return false;
+ out << ", ";
+ arrayElement->traverse(this);
}
+ out << ")";
+ return false;
}
- else if (visit == InVisit)
- {
- out << " = ";
- }
- break;
- case EOpAddAssign:
- outputTriplet(out, visit, "(", " += ", ")");
- break;
- case EOpSubAssign:
- outputTriplet(out, visit, "(", " -= ", ")");
- break;
- case EOpMulAssign:
- outputTriplet(out, visit, "(", " *= ", ")");
- break;
- case EOpVectorTimesScalarAssign:
- outputTriplet(out, visit, "(", " *= ", ")");
- break;
- case EOpMatrixTimesScalarAssign:
- outputTriplet(out, visit, "(", " *= ", ")");
- break;
- case EOpVectorTimesMatrixAssign:
- if (visit == PreVisit)
- {
- out << "(";
- }
- else if (visit == InVisit)
- {
- out << " = mul(";
- node->getLeft()->traverse(this);
- out << ", transpose(";
- }
- else
- {
- out << ")))";
- }
- break;
- case EOpMatrixTimesMatrixAssign:
- if (visit == PreVisit)
- {
- out << "(";
- }
- else if (visit == InVisit)
+ // ArrayReturnValueToOutParameter should have eliminated expressions where a function call is assigned.
+ ASSERT(rightAgg == nullptr || rightAgg->getOp() != EOpFunctionCall);
+
+ const TString &functionName = addArrayAssignmentFunction(node->getType());
+ outputTriplet(out, visit, (functionName + "(").c_str(), ", ", ")");
+ }
+ else
+ {
+ outputTriplet(out, visit, "(", " = ", ")");
+ }
+ break;
+ case EOpInitialize:
+ if (visit == PreVisit)
+ {
+ TIntermSymbol *symbolNode = node->getLeft()->getAsSymbolNode();
+ ASSERT(symbolNode);
+ TIntermTyped *expression = node->getRight();
+
+ // Global initializers must be constant at this point.
+ ASSERT(symbolNode->getQualifier() != EvqGlobal || canWriteAsHLSLLiteral(expression));
+
+ // GLSL allows to write things like "float x = x;" where a new variable x is defined
+ // and the value of an existing variable x is assigned. HLSL uses C semantics (the
+ // new variable is created before the assignment is evaluated), so we need to convert
+ // this to "float t = x, x = t;".
+ if (writeSameSymbolInitializer(out, symbolNode, expression))
{
- out << " = transpose(mul(transpose(";
- node->getLeft()->traverse(this);
- out << "), transpose(";
+ // Skip initializing the rest of the expression
+ return false;
}
- else
+ else if (writeConstantInitialization(out, symbolNode, expression))
{
- out << "))))";
+ return false;
}
- break;
- case EOpDivAssign:
- outputTriplet(out, visit, "(", " /= ", ")");
- break;
- case EOpIModAssign:
- outputTriplet(out, visit, "(", " %= ", ")");
- break;
- case EOpBitShiftLeftAssign:
- outputTriplet(out, visit, "(", " <<= ", ")");
- break;
- case EOpBitShiftRightAssign:
- outputTriplet(out, visit, "(", " >>= ", ")");
- break;
- case EOpBitwiseAndAssign:
- outputTriplet(out, visit, "(", " &= ", ")");
- break;
- case EOpBitwiseXorAssign:
- outputTriplet(out, visit, "(", " ^= ", ")");
- break;
- case EOpBitwiseOrAssign:
- outputTriplet(out, visit, "(", " |= ", ")");
- break;
- case EOpIndexDirect:
+ }
+ else if (visit == InVisit)
+ {
+ out << " = ";
+ }
+ break;
+ case EOpAddAssign:
+ outputTriplet(out, visit, "(", " += ", ")");
+ break;
+ case EOpSubAssign:
+ outputTriplet(out, visit, "(", " -= ", ")");
+ break;
+ case EOpMulAssign:
+ outputTriplet(out, visit, "(", " *= ", ")");
+ break;
+ case EOpVectorTimesScalarAssign:
+ outputTriplet(out, visit, "(", " *= ", ")");
+ break;
+ case EOpMatrixTimesScalarAssign:
+ outputTriplet(out, visit, "(", " *= ", ")");
+ break;
+ case EOpVectorTimesMatrixAssign:
+ if (visit == PreVisit)
+ {
+ out << "(";
+ }
+ else if (visit == InVisit)
+ {
+ out << " = mul(";
+ node->getLeft()->traverse(this);
+ out << ", transpose(";
+ }
+ else
+ {
+ out << ")))";
+ }
+ break;
+ case EOpMatrixTimesMatrixAssign:
+ if (visit == PreVisit)
+ {
+ out << "(";
+ }
+ else if (visit == InVisit)
+ {
+ out << " = transpose(mul(transpose(";
+ node->getLeft()->traverse(this);
+ out << "), transpose(";
+ }
+ else
+ {
+ out << "))))";
+ }
+ break;
+ case EOpDivAssign:
+ outputTriplet(out, visit, "(", " /= ", ")");
+ break;
+ case EOpIModAssign:
+ outputTriplet(out, visit, "(", " %= ", ")");
+ break;
+ case EOpBitShiftLeftAssign:
+ outputTriplet(out, visit, "(", " <<= ", ")");
+ break;
+ case EOpBitShiftRightAssign:
+ outputTriplet(out, visit, "(", " >>= ", ")");
+ break;
+ case EOpBitwiseAndAssign:
+ outputTriplet(out, visit, "(", " &= ", ")");
+ break;
+ case EOpBitwiseXorAssign:
+ outputTriplet(out, visit, "(", " ^= ", ")");
+ break;
+ case EOpBitwiseOrAssign:
+ outputTriplet(out, visit, "(", " |= ", ")");
+ break;
+ case EOpIndexDirect:
{
const TType& leftType = node->getLeft()->getType();
if (leftType.isInterfaceBlock())
@@ -1077,6 +1057,42 @@ bool OutputHLSL::visitBinary(Visit visit, TIntermBinary *node)
return false;
}
break;
+ case EOpVectorSwizzle:
+ if (visit == InVisit)
+ {
+ out << ".";
+
+ TIntermAggregate *swizzle = node->getRight()->getAsAggregate();
+
+ if (swizzle)
+ {
+ TIntermSequence *sequence = swizzle->getSequence();
+
+ for (TIntermSequence::iterator sit = sequence->begin(); sit != sequence->end(); sit++)
+ {
+ TIntermConstantUnion *element = (*sit)->getAsConstantUnion();
+
+ if (element)
+ {
+ int i = element->getIConst(0);
+
+ switch (i)
+ {
+ case 0: out << "x"; break;
+ case 1: out << "y"; break;
+ case 2: out << "z"; break;
+ case 3: out << "w"; break;
+ default: UNREACHABLE();
+ }
+ }
+ else UNREACHABLE();
+ }
+ }
+ else UNREACHABLE();
+
+ return false; // Fully processed
+ }
+ break;
case EOpAdd:
outputTriplet(out, visit, "(", " + ", ")");
break;
@@ -1280,12 +1296,9 @@ bool OutputHLSL::visitUnary(Visit visit, TIntermUnary *node)
outputTriplet(out, visit, "frac(", "", ")");
break;
case EOpIsNan:
- if (node->getUseEmulatedFunction())
- writeEmulatedFunctionTriplet(out, visit, "isnan(");
- else
- outputTriplet(out, visit, "isnan(", "", ")");
- mRequiresIEEEStrictCompiling = true;
- break;
+ outputTriplet(out, visit, "isnan(", "", ")");
+ mRequiresIEEEStrictCompiling = true;
+ break;
case EOpIsInf:
outputTriplet(out, visit, "isinf(", "", ")");
break;
@@ -1418,232 +1431,236 @@ TString OutputHLSL::samplerNamePrefixFromStruct(TIntermTyped *node)
}
}
-bool OutputHLSL::visitBlock(Visit visit, TIntermBlock *node)
-{
- TInfoSinkBase &out = getInfoSink();
-
- if (mInsideFunction)
- {
- outputLineDirective(out, node->getLine().first_line);
- out << "{\n";
- }
-
- for (TIntermSequence::iterator sit = node->getSequence()->begin();
- sit != node->getSequence()->end(); sit++)
- {
- outputLineDirective(out, (*sit)->getLine().first_line);
-
- (*sit)->traverse(this);
-
- // Don't output ; after case labels, they're terminated by :
- // This is needed especially since outputting a ; after a case statement would turn empty
- // case statements into non-empty case statements, disallowing fall-through from them.
- // Also no need to output ; after if statements or sequences. This is done just for
- // code clarity.
- if ((*sit)->getAsCaseNode() == nullptr && (*sit)->getAsIfElseNode() == nullptr &&
- (*sit)->getAsBlock() == nullptr)
- out << ";\n";
- }
-
- if (mInsideFunction)
- {
- outputLineDirective(out, node->getLine().last_line);
- out << "}\n";
- }
-
- return false;
-}
-
-bool OutputHLSL::visitFunctionDefinition(Visit visit, TIntermFunctionDefinition *node)
+bool OutputHLSL::visitAggregate(Visit visit, TIntermAggregate *node)
{
TInfoSinkBase &out = getInfoSink();
- ASSERT(mCurrentFunctionMetadata == nullptr);
-
- size_t index = mCallDag.findIndex(node->getFunctionSymbolInfo());
- ASSERT(index != CallDAG::InvalidIndex);
- mCurrentFunctionMetadata = &mASTMetadataList[index];
-
- out << TypeString(node->getType()) << " ";
-
- TIntermSequence *parameters = node->getFunctionParameters()->getSequence();
-
- if (node->getFunctionSymbolInfo()->isMain())
- {
- out << "gl_main(";
- }
- else
- {
- out << DecorateFunctionIfNeeded(node->getFunctionSymbolInfo()->getNameObj())
- << DisambiguateFunctionName(parameters) << (mOutputLod0Function ? "Lod0(" : "(");
- }
-
- for (unsigned int i = 0; i < parameters->size(); i++)
+ switch (node->getOp())
{
- TIntermSymbol *symbol = (*parameters)[i]->getAsSymbolNode();
-
- if (symbol)
+ case EOpSequence:
{
- ensureStructDefined(symbol->getType());
-
- out << argumentString(symbol);
-
- if (i < parameters->size() - 1)
+ if (mInsideFunction)
{
- out << ", ";
+ outputLineDirective(out, node->getLine().first_line);
+ out << "{\n";
}
- }
- else
- UNREACHABLE();
- }
-
- out << ")\n";
-
- mInsideFunction = true;
- // The function body node will output braces.
- node->getBody()->traverse(this);
- mInsideFunction = false;
-
- mCurrentFunctionMetadata = nullptr;
-
- bool needsLod0 = mASTMetadataList[index].mNeedsLod0;
- if (needsLod0 && !mOutputLod0Function && mShaderType == GL_FRAGMENT_SHADER)
- {
- ASSERT(!node->getFunctionSymbolInfo()->isMain());
- mOutputLod0Function = true;
- node->traverse(this);
- mOutputLod0Function = false;
- }
- return false;
-}
+ for (TIntermSequence::iterator sit = node->getSequence()->begin(); sit != node->getSequence()->end(); sit++)
+ {
+ outputLineDirective(out, (*sit)->getLine().first_line);
+
+ (*sit)->traverse(this);
+
+ // Don't output ; after case labels, they're terminated by :
+ // This is needed especially since outputting a ; after a case statement would turn empty
+ // case statements into non-empty case statements, disallowing fall-through from them.
+ // Also no need to output ; after selection (if) statements or sequences. This is done just
+ // for code clarity.
+ TIntermSelection *asSelection = (*sit)->getAsSelectionNode();
+ ASSERT(asSelection == nullptr || !asSelection->usesTernaryOperator());
+ if ((*sit)->getAsCaseNode() == nullptr && asSelection == nullptr && !IsSequence(*sit))
+ out << ";\n";
+ }
-bool OutputHLSL::visitDeclaration(Visit visit, TIntermDeclaration *node)
-{
- TInfoSinkBase &out = getInfoSink();
- if (visit == PreVisit)
- {
- TIntermSequence *sequence = node->getSequence();
- TIntermTyped *variable = (*sequence)[0]->getAsTyped();
- ASSERT(sequence->size() == 1);
+ if (mInsideFunction)
+ {
+ outputLineDirective(out, node->getLine().last_line);
+ out << "}\n";
+ }
- if (variable &&
- (variable->getQualifier() == EvqTemporary || variable->getQualifier() == EvqGlobal ||
- variable->getQualifier() == EvqConst))
+ return false;
+ }
+ case EOpDeclaration:
+ if (visit == PreVisit)
{
- ensureStructDefined(variable->getType());
+ TIntermSequence *sequence = node->getSequence();
+ TIntermTyped *variable = (*sequence)[0]->getAsTyped();
+ ASSERT(sequence->size() == 1);
- if (!variable->getAsSymbolNode() ||
- variable->getAsSymbolNode()->getSymbol() != "") // Variable declaration
+ if (variable &&
+ (variable->getQualifier() == EvqTemporary ||
+ variable->getQualifier() == EvqGlobal || variable->getQualifier() == EvqConst))
{
- if (!mInsideFunction)
+ ensureStructDefined(variable->getType());
+
+ if (!variable->getAsSymbolNode() || variable->getAsSymbolNode()->getSymbol() != "") // Variable declaration
{
- out << "static ";
- }
+ if (!mInsideFunction)
+ {
+ out << "static ";
+ }
- out << TypeString(variable->getType()) + " ";
+ out << TypeString(variable->getType()) + " ";
- TIntermSymbol *symbol = variable->getAsSymbolNode();
+ TIntermSymbol *symbol = variable->getAsSymbolNode();
- if (symbol)
- {
- symbol->traverse(this);
- out << ArrayString(symbol->getType());
- out << " = " + initializer(symbol->getType());
+ if (symbol)
+ {
+ symbol->traverse(this);
+ out << ArrayString(symbol->getType());
+ out << " = " + initializer(symbol->getType());
+ }
+ else
+ {
+ variable->traverse(this);
+ }
}
- else
+ else if (variable->getAsSymbolNode() && variable->getAsSymbolNode()->getSymbol() == "") // Type (struct) declaration
{
- variable->traverse(this);
+ // Already added to constructor map
}
+ else UNREACHABLE();
}
- else if (variable->getAsSymbolNode() &&
- variable->getAsSymbolNode()->getSymbol() == "") // Type (struct) declaration
+ else if (variable && IsVaryingOut(variable->getQualifier()))
{
- // Already added to constructor map
+ for (TIntermSequence::iterator sit = sequence->begin(); sit != sequence->end(); sit++)
+ {
+ TIntermSymbol *symbol = (*sit)->getAsSymbolNode();
+
+ if (symbol)
+ {
+ // Vertex (output) varyings which are declared but not written to should still be declared to allow successful linking
+ mReferencedVaryings[symbol->getSymbol()] = symbol;
+ }
+ else
+ {
+ (*sit)->traverse(this);
+ }
+ }
}
- else
- UNREACHABLE();
+
+ return false;
}
- else if (variable && IsVaryingOut(variable->getQualifier()))
+ else if (visit == InVisit)
+ {
+ out << ", ";
+ }
+ break;
+ case EOpInvariantDeclaration:
+ // Do not do any translation
+ return false;
+ case EOpPrototype:
+ if (visit == PreVisit)
{
- for (TIntermSequence::iterator sit = sequence->begin(); sit != sequence->end(); sit++)
+ size_t index = mCallDag.findIndex(node);
+ // Skip the prototype if it is not implemented (and thus not used)
+ if (index == CallDAG::InvalidIndex)
{
- TIntermSymbol *symbol = (*sit)->getAsSymbolNode();
+ return false;
+ }
+
+ TIntermSequence *arguments = node->getSequence();
+
+ TString name = DecorateFunctionIfNeeded(node->getNameObj());
+ out << TypeString(node->getType()) << " " << name << DisambiguateFunctionName(arguments)
+ << (mOutputLod0Function ? "Lod0(" : "(");
+
+ for (unsigned int i = 0; i < arguments->size(); i++)
+ {
+ TIntermSymbol *symbol = (*arguments)[i]->getAsSymbolNode();
if (symbol)
{
- // Vertex (output) varyings which are declared but not written to should
- // still be declared to allow successful linking
- mReferencedVaryings[symbol->getSymbol()] = symbol;
- }
- else
- {
- (*sit)->traverse(this);
+ out << argumentString(symbol);
+
+ if (i < arguments->size() - 1)
+ {
+ out << ", ";
+ }
}
+ else UNREACHABLE();
}
- }
- }
- return false;
-}
-bool OutputHLSL::visitAggregate(Visit visit, TIntermAggregate *node)
-{
- TInfoSinkBase &out = getInfoSink();
+ out << ");\n";
- switch (node->getOp())
- {
- case EOpInvariantDeclaration:
- // Do not do any translation
- return false;
- case EOpPrototype:
- if (visit == PreVisit)
+ // Also prototype the Lod0 variant if needed
+ bool needsLod0 = mASTMetadataList[index].mNeedsLod0;
+ if (needsLod0 && !mOutputLod0Function && mShaderType == GL_FRAGMENT_SHADER)
{
- size_t index = mCallDag.findIndex(node->getFunctionSymbolInfo());
- // Skip the prototype if it is not implemented (and thus not used)
- if (index == CallDAG::InvalidIndex)
- {
- return false;
- }
+ mOutputLod0Function = true;
+ node->traverse(this);
+ mOutputLod0Function = false;
+ }
+
+ return false;
+ }
+ break;
+ case EOpComma:
+ outputTriplet(out, visit, "(", ", ", ")");
+ break;
+ case EOpFunction:
+ {
+ ASSERT(mCurrentFunctionMetadata == nullptr);
+ TString name = TFunction::unmangleName(node->getNameObj().getString());
+
+ size_t index = mCallDag.findIndex(node);
+ ASSERT(index != CallDAG::InvalidIndex);
+ mCurrentFunctionMetadata = &mASTMetadataList[index];
- TIntermSequence *arguments = node->getSequence();
+ out << TypeString(node->getType()) << " ";
- TString name =
- DecorateFunctionIfNeeded(node->getFunctionSymbolInfo()->getNameObj());
- out << TypeString(node->getType()) << " " << name
+ TIntermSequence *sequence = node->getSequence();
+ TIntermSequence *arguments = (*sequence)[0]->getAsAggregate()->getSequence();
+
+ if (name == "main")
+ {
+ out << "gl_main(";
+ }
+ else
+ {
+ out << DecorateFunctionIfNeeded(node->getNameObj())
<< DisambiguateFunctionName(arguments) << (mOutputLod0Function ? "Lod0(" : "(");
+ }
- for (unsigned int i = 0; i < arguments->size(); i++)
+ for (unsigned int i = 0; i < arguments->size(); i++)
+ {
+ TIntermSymbol *symbol = (*arguments)[i]->getAsSymbolNode();
+
+ if (symbol)
{
- TIntermSymbol *symbol = (*arguments)[i]->getAsSymbolNode();
+ ensureStructDefined(symbol->getType());
- if (symbol)
- {
- out << argumentString(symbol);
+ out << argumentString(symbol);
- if (i < arguments->size() - 1)
- {
- out << ", ";
- }
+ if (i < arguments->size() - 1)
+ {
+ out << ", ";
}
- else
- UNREACHABLE();
}
+ else UNREACHABLE();
+ }
- out << ");\n";
+ out << ")\n";
- // Also prototype the Lod0 variant if needed
- bool needsLod0 = mASTMetadataList[index].mNeedsLod0;
- if (needsLod0 && !mOutputLod0Function && mShaderType == GL_FRAGMENT_SHADER)
- {
- mOutputLod0Function = true;
- node->traverse(this);
- mOutputLod0Function = false;
- }
+ if (sequence->size() > 1)
+ {
+ mInsideFunction = true;
+ TIntermNode *body = (*sequence)[1];
+ // The function body node will output braces.
+ ASSERT(IsSequence(body));
+ body->traverse(this);
+ mInsideFunction = false;
+ }
+ else
+ {
+ out << "{}\n";
+ }
- return false;
+ mCurrentFunctionMetadata = nullptr;
+
+ bool needsLod0 = mASTMetadataList[index].mNeedsLod0;
+ if (needsLod0 && !mOutputLod0Function && mShaderType == GL_FRAGMENT_SHADER)
+ {
+ ASSERT(name != "main");
+ mOutputLod0Function = true;
+ node->traverse(this);
+ mOutputLod0Function = false;
}
- break;
- case EOpFunctionCall:
+
+ return false;
+ }
+ break;
+ case EOpFunctionCall:
{
TIntermSequence *arguments = node->getSequence();
@@ -1654,23 +1671,23 @@ bool OutputHLSL::visitAggregate(Visit visit, TIntermAggregate *node)
{
UNIMPLEMENTED();
}
- size_t index = mCallDag.findIndex(node->getFunctionSymbolInfo());
+ size_t index = mCallDag.findIndex(node);
ASSERT(index != CallDAG::InvalidIndex);
lod0 &= mASTMetadataList[index].mNeedsLod0;
- out << DecorateFunctionIfNeeded(node->getFunctionSymbolInfo()->getNameObj());
+ out << DecorateFunctionIfNeeded(node->getNameObj());
out << DisambiguateFunctionName(node->getSequence());
out << (lod0 ? "Lod0(" : "(");
}
- else if (node->getFunctionSymbolInfo()->getNameObj().isInternal())
+ else if (node->getNameObj().isInternal())
{
// This path is used for internal functions that don't have their definitions in the
// AST, such as precision emulation functions.
- out << DecorateFunctionIfNeeded(node->getFunctionSymbolInfo()->getNameObj()) << "(";
+ out << DecorateFunctionIfNeeded(node->getNameObj()) << "(";
}
else
{
- TString name = TFunction::unmangleName(node->getFunctionSymbolInfo()->getName());
+ TString name = TFunction::unmangleName(node->getNameObj().getString());
TBasicType samplerType = (*arguments)[0]->getAsTyped()->getType().getBasicType();
int coords = (*arguments)[1]->getAsTyped()->getNominalSize();
TString textureFunctionName = mTextureFunctionHLSL->useTextureFunction(
@@ -1724,6 +1741,7 @@ bool OutputHLSL::visitAggregate(Visit visit, TIntermAggregate *node)
return false;
}
+ break;
case EOpParameters:
outputTriplet(out, visit, "(", ", ", ")\n{\n");
break;
@@ -1802,7 +1820,7 @@ bool OutputHLSL::visitAggregate(Visit visit, TIntermAggregate *node)
case EOpConstructMat4:
outputConstructor(out, visit, node->getType(), "mat4", node->getSequence());
break;
- case EOpConstructStruct:
+ case EOpConstructStruct:
{
if (node->getType().isArray())
{
@@ -1831,31 +1849,31 @@ bool OutputHLSL::visitAggregate(Visit visit, TIntermAggregate *node)
case EOpVectorNotEqual:
outputTriplet(out, visit, "(", " != ", ")");
break;
- case EOpMod:
- ASSERT(node->getUseEmulatedFunction());
- writeEmulatedFunctionTriplet(out, visit, "mod(");
- break;
- case EOpModf:
- outputTriplet(out, visit, "modf(", ", ", ")");
- break;
- case EOpPow:
- outputTriplet(out, visit, "pow(", ", ", ")");
- break;
- case EOpAtan:
- ASSERT(node->getSequence()->size() == 2); // atan(x) is a unary operator
- ASSERT(node->getUseEmulatedFunction());
- writeEmulatedFunctionTriplet(out, visit, "atan(");
- break;
- case EOpMin:
- outputTriplet(out, visit, "min(", ", ", ")");
- break;
- case EOpMax:
- outputTriplet(out, visit, "max(", ", ", ")");
- break;
- case EOpClamp:
- outputTriplet(out, visit, "clamp(", ", ", ")");
- break;
- case EOpMix:
+ case EOpMod:
+ ASSERT(node->getUseEmulatedFunction());
+ writeEmulatedFunctionTriplet(out, visit, "mod(");
+ break;
+ case EOpModf:
+ outputTriplet(out, visit, "modf(", ", ", ")");
+ break;
+ case EOpPow:
+ outputTriplet(out, visit, "pow(", ", ", ")");
+ break;
+ case EOpAtan:
+ ASSERT(node->getSequence()->size() == 2); // atan(x) is a unary operator
+ ASSERT(node->getUseEmulatedFunction());
+ writeEmulatedFunctionTriplet(out, visit, "atan(");
+ break;
+ case EOpMin:
+ outputTriplet(out, visit, "min(", ", ", ")");
+ break;
+ case EOpMax:
+ outputTriplet(out, visit, "max(", ", ", ")");
+ break;
+ case EOpClamp:
+ outputTriplet(out, visit, "clamp(", ", ", ")");
+ break;
+ case EOpMix:
{
TIntermTyped *lastParamNode = (*(node->getSequence()))[2]->getAsTyped();
if (lastParamNode->getType().getBasicType() == EbtBool)
@@ -1869,8 +1887,8 @@ bool OutputHLSL::visitAggregate(Visit visit, TIntermAggregate *node)
{
outputTriplet(out, visit, "lerp(", ", ", ")");
}
- break;
}
+ break;
case EOpStep:
outputTriplet(out, visit, "step(", ", ", ")");
break;
@@ -1886,31 +1904,30 @@ bool OutputHLSL::visitAggregate(Visit visit, TIntermAggregate *node)
case EOpCross:
outputTriplet(out, visit, "cross(", ", ", ")");
break;
- case EOpFaceForward:
- ASSERT(node->getUseEmulatedFunction());
- writeEmulatedFunctionTriplet(out, visit, "faceforward(");
- break;
- case EOpReflect:
- outputTriplet(out, visit, "reflect(", ", ", ")");
- break;
- case EOpRefract:
- outputTriplet(out, visit, "refract(", ", ", ")");
- break;
- case EOpOuterProduct:
- ASSERT(node->getUseEmulatedFunction());
- writeEmulatedFunctionTriplet(out, visit, "outerProduct(");
- break;
- case EOpMul:
- outputTriplet(out, visit, "(", " * ", ")");
- break;
- default:
- UNREACHABLE();
+ case EOpFaceForward:
+ ASSERT(node->getUseEmulatedFunction());
+ writeEmulatedFunctionTriplet(out, visit, "faceforward(");
+ break;
+ case EOpReflect:
+ outputTriplet(out, visit, "reflect(", ", ", ")");
+ break;
+ case EOpRefract:
+ outputTriplet(out, visit, "refract(", ", ", ")");
+ break;
+ case EOpOuterProduct:
+ ASSERT(node->getUseEmulatedFunction());
+ writeEmulatedFunctionTriplet(out, visit, "outerProduct(");
+ break;
+ case EOpMul:
+ outputTriplet(out, visit, "(", " * ", ")");
+ break;
+ default: UNREACHABLE();
}
return true;
}
-void OutputHLSL::writeIfElse(TInfoSinkBase &out, TIntermIfElse *node)
+void OutputHLSL::writeSelection(TInfoSinkBase &out, TIntermSelection *node)
{
out << "if (";
@@ -1925,6 +1942,8 @@ void OutputHLSL::writeIfElse(TInfoSinkBase &out, TIntermIfElse *node)
if (node->getTrueBlock())
{
// The trueBlock child node will output braces.
+ ASSERT(IsSequence(node->getTrueBlock()));
+
node->getTrueBlock()->traverse(this);
// Detect true discard
@@ -1945,7 +1964,9 @@ void OutputHLSL::writeIfElse(TInfoSinkBase &out, TIntermIfElse *node)
outputLineDirective(out, node->getFalseBlock()->getLine().first_line);
- // The falseBlock child node will output braces.
+ // Either this is "else if" or the falseBlock child node will output braces.
+ ASSERT(IsSequence(node->getFalseBlock()) || node->getFalseBlock()->getAsSelectionNode() != nullptr);
+
node->getFalseBlock()->traverse(this);
outputLineDirective(out, node->getFalseBlock()->getLine().first_line);
@@ -1961,18 +1982,11 @@ void OutputHLSL::writeIfElse(TInfoSinkBase &out, TIntermIfElse *node)
}
}
-bool OutputHLSL::visitTernary(Visit, TIntermTernary *)
-{
- // Ternary ops should have been already converted to something else in the AST. HLSL ternary
- // operator doesn't short-circuit, so it's not the same as the GLSL ternary operator.
- UNREACHABLE();
- return false;
-}
-
-bool OutputHLSL::visitIfElse(Visit visit, TIntermIfElse *node)
+bool OutputHLSL::visitSelection(Visit visit, TIntermSelection *node)
{
TInfoSinkBase &out = getInfoSink();
+ ASSERT(!node->usesTernaryOperator());
ASSERT(mInsideFunction);
// D3D errors when there is a gradient operation in a loop in an unflattened if.
@@ -1981,7 +1995,7 @@ bool OutputHLSL::visitIfElse(Visit visit, TIntermIfElse *node)
out << "FLATTEN ";
}
- writeIfElse(out, node);
+ writeSelection(out, node);
return false;
}
@@ -2085,6 +2099,7 @@ bool OutputHLSL::visitLoop(Visit visit, TIntermLoop *node)
if (node->getBody())
{
// The loop body node will output braces.
+ ASSERT(IsSequence(node->getBody()));
node->getBody()->traverse(this);
}
else
@@ -2172,6 +2187,39 @@ bool OutputHLSL::visitBranch(Visit visit, TIntermBranch *node)
return true;
}
+bool OutputHLSL::isSingleStatement(TIntermNode *node)
+{
+ TIntermAggregate *aggregate = node->getAsAggregate();
+
+ if (aggregate)
+ {
+ if (aggregate->getOp() == EOpSequence)
+ {
+ return false;
+ }
+ else if (aggregate->getOp() == EOpDeclaration)
+ {
+ // Declaring multiple comma-separated variables must be considered multiple statements
+ // because each individual declaration has side effects which are visible in the next.
+ return false;
+ }
+ else
+ {
+ for (TIntermSequence::iterator sit = aggregate->getSequence()->begin(); sit != aggregate->getSequence()->end(); sit++)
+ {
+ if (!isSingleStatement(*sit))
+ {
+ return false;
+ }
+ }
+
+ return true;
+ }
+ }
+
+ return true;
+}
+
// Handle loops with more than 254 iterations (unsupported by D3D9) by splitting them
// (The D3D documentation says 255 iterations, but the compiler complains at anything more than 254).
bool OutputHLSL::handleExcessiveLoop(TInfoSinkBase &out, TIntermLoop *node)
@@ -2189,7 +2237,7 @@ bool OutputHLSL::handleExcessiveLoop(TInfoSinkBase &out, TIntermLoop *node)
// Parse index name and intial value
if (node->getInit())
{
- TIntermDeclaration *init = node->getInit()->getAsDeclarationNode();
+ TIntermAggregate *init = node->getInit()->getAsAggregate();
if (init)
{
@@ -2854,4 +2902,6 @@ void OutputHLSL::ensureStructDefined(const TType &type)
}
}
-} // namespace sh
+
+
+}
diff --git a/gfx/angle/src/compiler/translator/OutputHLSL.h b/gfx/angle/src/compiler/translator/OutputHLSL.h
index 833f4736b..e5204e419 100755
--- a/gfx/angle/src/compiler/translator/OutputHLSL.h
+++ b/gfx/angle/src/compiler/translator/OutputHLSL.h
@@ -30,14 +30,11 @@ typedef std::map<TString, TIntermSymbol*> ReferencedSymbols;
class OutputHLSL : public TIntermTraverser
{
public:
- OutputHLSL(sh::GLenum shaderType,
- int shaderVersion,
- const TExtensionBehavior &extensionBehavior,
- const char *sourcePath,
- ShShaderOutput outputType,
- int numRenderTargets,
- const std::vector<Uniform> &uniforms,
- ShCompileOptions compileOptions);
+ OutputHLSL(sh::GLenum shaderType, int shaderVersion,
+ const TExtensionBehavior &extensionBehavior,
+ const char *sourcePath, ShShaderOutput outputType,
+ int numRenderTargets, const std::vector<Uniform> &uniforms,
+ int compileOptions);
~OutputHLSL();
@@ -59,20 +56,16 @@ class OutputHLSL : public TIntermTraverser
void visitSymbol(TIntermSymbol*);
void visitRaw(TIntermRaw*);
void visitConstantUnion(TIntermConstantUnion*);
- bool visitSwizzle(Visit visit, TIntermSwizzle *node) override;
bool visitBinary(Visit visit, TIntermBinary*);
bool visitUnary(Visit visit, TIntermUnary*);
- bool visitTernary(Visit visit, TIntermTernary *);
- bool visitIfElse(Visit visit, TIntermIfElse *);
+ bool visitSelection(Visit visit, TIntermSelection*);
bool visitSwitch(Visit visit, TIntermSwitch *);
bool visitCase(Visit visit, TIntermCase *);
- bool visitFunctionDefinition(Visit visit, TIntermFunctionDefinition *node) override;
bool visitAggregate(Visit visit, TIntermAggregate*);
- bool visitBlock(Visit visit, TIntermBlock *node);
- bool visitDeclaration(Visit visit, TIntermDeclaration *node);
bool visitLoop(Visit visit, TIntermLoop*);
bool visitBranch(Visit visit, TIntermBranch*);
+ bool isSingleStatement(TIntermNode *node);
bool handleExcessiveLoop(TInfoSinkBase &out, TIntermLoop *node);
// Emit one of three strings depending on traverse phase. Called with literal strings so using const char* instead of TString.
@@ -108,7 +101,7 @@ class OutputHLSL : public TIntermTraverser
TIntermTyped *expression);
void writeDeferredGlobalInitializers(TInfoSinkBase &out);
- void writeIfElse(TInfoSinkBase &out, TIntermIfElse *node);
+ void writeSelection(TInfoSinkBase &out, TIntermSelection *node);
// Returns the function name
TString addStructEqualityFunction(const TStructure &structure);
@@ -124,7 +117,7 @@ class OutputHLSL : public TIntermTraverser
const TExtensionBehavior &mExtensionBehavior;
const char *mSourcePath;
const ShShaderOutput mOutputType;
- ShCompileOptions mCompileOptions;
+ int mCompileOptions;
bool mInsideFunction;
diff --git a/gfx/angle/src/compiler/translator/ParseContext.cpp b/gfx/angle/src/compiler/translator/ParseContext.cpp
index 4ad597c4f..5e15eea24 100755
--- a/gfx/angle/src/compiler/translator/ParseContext.cpp
+++ b/gfx/angle/src/compiler/translator/ParseContext.cpp
@@ -16,102 +16,12 @@
#include "compiler/translator/ValidateGlobalInitializer.h"
#include "compiler/translator/util.h"
-namespace sh
-{
-
///////////////////////////////////////////////////////////////////////
//
// Sub- vector and matrix fields
//
////////////////////////////////////////////////////////////////////////
-namespace
-{
-
-const int kWebGLMaxStructNesting = 4;
-
-bool ContainsSampler(const TType &type)
-{
- if (IsSampler(type.getBasicType()))
- return true;
-
- if (type.getBasicType() == EbtStruct || type.isInterfaceBlock())
- {
- const TFieldList &fields = type.getStruct()->fields();
- for (unsigned int i = 0; i < fields.size(); ++i)
- {
- if (ContainsSampler(*fields[i]->type()))
- return true;
- }
- }
-
- return false;
-}
-
-bool ContainsImage(const TType &type)
-{
- if (IsImage(type.getBasicType()))
- return true;
-
- if (type.getBasicType() == EbtStruct || type.isInterfaceBlock())
- {
- const TFieldList &fields = type.getStruct()->fields();
- for (unsigned int i = 0; i < fields.size(); ++i)
- {
- if (ContainsImage(*fields[i]->type()))
- return true;
- }
- }
-
- return false;
-}
-
-} // namespace
-
-TParseContext::TParseContext(TSymbolTable &symt,
- TExtensionBehavior &ext,
- sh::GLenum type,
- ShShaderSpec spec,
- ShCompileOptions options,
- bool checksPrecErrors,
- TInfoSink &is,
- const ShBuiltInResources &resources)
- : intermediate(),
- symbolTable(symt),
- mDeferredSingleDeclarationErrorCheck(false),
- mShaderType(type),
- mShaderSpec(spec),
- mCompileOptions(options),
- mShaderVersion(100),
- mTreeRoot(nullptr),
- mLoopNestingLevel(0),
- mStructNestingLevel(0),
- mSwitchNestingLevel(0),
- mCurrentFunctionType(nullptr),
- mFunctionReturnsValue(false),
- mChecksPrecisionErrors(checksPrecErrors),
- mFragmentPrecisionHighOnESSL1(false),
- mDefaultMatrixPacking(EmpColumnMajor),
- mDefaultBlockStorage(sh::IsWebGLBasedSpec(spec) ? EbsStd140 : EbsShared),
- mDiagnostics(is),
- mDirectiveHandler(ext,
- mDiagnostics,
- mShaderVersion,
- mShaderType,
- resources.WEBGL_debug_shader_precision == 1),
- mPreprocessor(&mDiagnostics, &mDirectiveHandler),
- mScanner(nullptr),
- mUsesFragData(false),
- mUsesFragColor(false),
- mUsesSecondaryOutputs(false),
- mMinProgramTexelOffset(resources.MinProgramTexelOffset),
- mMaxProgramTexelOffset(resources.MaxProgramTexelOffset),
- mComputeShaderLocalSizeDeclared(false),
- mDeclaringFunction(false)
-{
- mComputeShaderLocalSize.fill(-1);
-}
-
//
// Look at a '.' field selector string and change it into offsets
// for a vector.
@@ -303,12 +213,6 @@ void TParseContext::checkPrecisionSpecified(const TSourceLoc &line,
{
if (!mChecksPrecisionErrors)
return;
-
- if (precision != EbpUndefined && !SupportsPrecision(type))
- {
- error(line, "illegal type for precision qualifier", getBasicString(type));
- }
-
if (precision == EbpUndefined)
{
switch (type)
@@ -327,11 +231,6 @@ void TParseContext::checkPrecisionSpecified(const TSourceLoc &line,
error(line, "No precision specified (sampler)", "");
return;
}
- if (IsImage(type))
- {
- error(line, "No precision specified (image)", "");
- return;
- }
}
}
}
@@ -342,18 +241,6 @@ bool TParseContext::checkCanBeLValue(const TSourceLoc &line, const char *op, TIn
{
TIntermSymbol *symNode = node->getAsSymbolNode();
TIntermBinary *binaryNode = node->getAsBinaryNode();
- TIntermSwizzle *swizzleNode = node->getAsSwizzleNode();
-
- if (swizzleNode)
- {
- bool ok = checkCanBeLValue(line, op, swizzleNode->getOperand());
- if (ok && swizzleNode->hasDuplicateOffsets())
- {
- error(line, " l-value of swizzle cannot have duplicate components", op);
- return false;
- }
- return ok;
- }
if (binaryNode)
{
@@ -364,10 +251,34 @@ bool TParseContext::checkCanBeLValue(const TSourceLoc &line, const char *op, TIn
case EOpIndexDirectStruct:
case EOpIndexDirectInterfaceBlock:
return checkCanBeLValue(line, op, binaryNode->getLeft());
+ case EOpVectorSwizzle:
+ {
+ bool ok = checkCanBeLValue(line, op, binaryNode->getLeft());
+ if (ok)
+ {
+ int offsetCount[4] = {0, 0, 0, 0};
+
+ TIntermAggregate *swizzleOffsets = binaryNode->getRight()->getAsAggregate();
+
+ for (const auto &offset : *swizzleOffsets->getSequence())
+ {
+ int value = offset->getAsTyped()->getAsConstantUnion()->getIConst(0);
+ offsetCount[value]++;
+ if (offsetCount[value] > 1)
+ {
+ error(line, " l-value of swizzle cannot have duplicate components", op);
+ return false;
+ }
+ }
+ }
+
+ return ok;
+ }
default:
break;
}
error(line, " l-value required", op);
+
return false;
}
@@ -441,10 +352,6 @@ bool TParseContext::checkCanBeLValue(const TSourceLoc &line, const char *op, TIn
{
message = "can't modify a sampler";
}
- if (IsImage(node->getBasicType()))
- {
- message = "can't modify an image";
- }
}
if (message == 0 && binaryNode == 0 && symNode == 0)
@@ -528,7 +435,7 @@ bool TParseContext::checkIsNotReserved(const TSourceLoc &line, const TString &id
error(line, reservedErrMsg, "gl_");
return false;
}
- if (sh::IsWebGLBasedSpec(mShaderSpec))
+ if (IsWebGLBasedSpec(mShaderSpec))
{
if (identifier.compare(0, 6, "webgl_") == 0)
{
@@ -540,6 +447,11 @@ bool TParseContext::checkIsNotReserved(const TSourceLoc &line, const TString &id
error(line, reservedErrMsg, "_webgl_");
return false;
}
+ if (mShaderSpec == SH_CSS_SHADERS_SPEC && identifier.compare(0, 4, "css_") == 0)
+ {
+ error(line, reservedErrMsg, "css_");
+ return false;
+ }
}
if (identifier.find("__") != TString::npos)
{
@@ -675,11 +587,6 @@ bool TParseContext::checkConstructorArguments(const TSourceLoc &line,
error(line, "cannot convert a sampler", "constructor");
return false;
}
- if (op != EOpConstructStruct && IsImage(argTyped->getBasicType()))
- {
- error(line, "cannot convert an image", "constructor");
- return false;
- }
if (argTyped->getBasicType() == EbtVoid)
{
error(line, "cannot convert a void", "constructor");
@@ -754,19 +661,19 @@ void TParseContext::checkIsScalarBool(const TSourceLoc &line, const TIntermTyped
// or not.
void TParseContext::checkIsScalarBool(const TSourceLoc &line, const TPublicType &pType)
{
- if (pType.getBasicType() != EbtBool || pType.isAggregate())
+ if (pType.type != EbtBool || pType.isAggregate())
{
error(line, "boolean expression expected", "");
}
}
bool TParseContext::checkIsNotSampler(const TSourceLoc &line,
- const TTypeSpecifierNonArray &pType,
+ const TPublicType &pType,
const char *reason)
{
if (pType.type == EbtStruct)
{
- if (ContainsSampler(*pType.userDef))
+ if (containsSampler(*pType.userDef))
{
error(line, reason, getBasicString(pType.type), "(structure contains a sampler)");
return false;
@@ -783,31 +690,6 @@ bool TParseContext::checkIsNotSampler(const TSourceLoc &line,
return true;
}
-bool TParseContext::checkIsNotImage(const TSourceLoc &line,
- const TTypeSpecifierNonArray &pType,
- const char *reason)
-{
- if (pType.type == EbtStruct)
- {
- if (ContainsImage(*pType.userDef))
- {
- error(line, reason, getBasicString(pType.type), "(structure contains an image)");
-
- return false;
- }
-
- return true;
- }
- else if (IsImage(pType.type))
- {
- error(line, reason, getBasicString(pType.type));
-
- return false;
- }
-
- return true;
-}
-
void TParseContext::checkDeclaratorLocationIsNotSpecified(const TSourceLoc &line,
const TPublicType &pType)
{
@@ -828,34 +710,33 @@ void TParseContext::checkLocationIsNotSpecified(const TSourceLoc &location,
}
}
-void TParseContext::checkOutParameterIsNotOpaqueType(const TSourceLoc &line,
- TQualifier qualifier,
- const TType &type)
-{
- checkOutParameterIsNotSampler(line, qualifier, type);
- checkOutParameterIsNotImage(line, qualifier, type);
-}
-
void TParseContext::checkOutParameterIsNotSampler(const TSourceLoc &line,
TQualifier qualifier,
const TType &type)
{
- ASSERT(qualifier == EvqOut || qualifier == EvqInOut);
- if (IsSampler(type.getBasicType()))
+ if ((qualifier == EvqOut || qualifier == EvqInOut) && type.getBasicType() != EbtStruct &&
+ IsSampler(type.getBasicType()))
{
error(line, "samplers cannot be output parameters", type.getBasicString());
}
}
-void TParseContext::checkOutParameterIsNotImage(const TSourceLoc &line,
- TQualifier qualifier,
- const TType &type)
+bool TParseContext::containsSampler(const TType &type)
{
- ASSERT(qualifier == EvqOut || qualifier == EvqInOut);
- if (IsImage(type.getBasicType()))
+ if (IsSampler(type.getBasicType()))
+ return true;
+
+ if (type.getBasicType() == EbtStruct || type.isInterfaceBlock())
{
- error(line, "images cannot be output parameters", type.getBasicString());
+ const TFieldList &fields = type.getStruct()->fields();
+ for (unsigned int i = 0; i < fields.size(); ++i)
+ {
+ if (containsSampler(*fields[i]->type()))
+ return true;
+ }
}
+
+ return false;
}
// Do size checking for an array type's size.
@@ -942,7 +823,7 @@ bool TParseContext::checkIsValidTypeForArray(const TSourceLoc &line, const TPubl
// In ESSL1.00 shaders, structs cannot be varying (section 4.3.5). This is checked elsewhere.
// In ESSL3.00 shaders, struct inputs/outputs are allowed but not arrays of structs (section
// 4.3.4).
- if (mShaderVersion >= 300 && elementType.getBasicType() == EbtStruct &&
+ if (mShaderVersion >= 300 && elementType.type == EbtStruct &&
sh::IsVarying(elementType.qualifier))
{
error(line, "cannot declare arrays of structs of this qualifier",
@@ -1047,33 +928,27 @@ bool TParseContext::declareVariable(const TSourceLoc &line,
return true;
}
-void TParseContext::checkIsParameterQualifierValid(
- const TSourceLoc &line,
- const TTypeQualifierBuilder &typeQualifierBuilder,
- TType *type)
+void TParseContext::checkIsParameterQualifierValid(const TSourceLoc &line,
+ TQualifier qualifier,
+ TQualifier paramQualifier,
+ TType *type)
{
- TTypeQualifier typeQualifier = typeQualifierBuilder.getParameterTypeQualifier(&mDiagnostics);
-
- if (typeQualifier.qualifier == EvqOut || typeQualifier.qualifier == EvqInOut)
+ if (qualifier != EvqConst && qualifier != EvqTemporary)
{
- checkOutParameterIsNotOpaqueType(line, typeQualifier.qualifier, *type);
- }
-
- if (!IsImage(type->getBasicType()))
- {
- checkIsMemoryQualifierNotSpecified(typeQualifier.memoryQualifier, line);
+ error(line, "qualifier not allowed on function parameter", getQualifierString(qualifier));
+ return;
}
- else
+ if (qualifier == EvqConst && paramQualifier != EvqIn)
{
- type->setMemoryQualifier(typeQualifier.memoryQualifier);
+ error(line, "qualifier not allowed with ", getQualifierString(qualifier),
+ getQualifierString(paramQualifier));
+ return;
}
- type->setQualifier(typeQualifier.qualifier);
-
- if (typeQualifier.precision != EbpUndefined)
- {
- type->setPrecision(typeQualifier.precision);
- }
+ if (qualifier == EvqConst)
+ type->setQualifier(EvqConstReadOnly);
+ else
+ type->setQualifier(paramQualifier);
}
bool TParseContext::checkCanUseExtension(const TSourceLoc &line, const TString &extension)
@@ -1113,7 +988,7 @@ void TParseContext::singleDeclarationErrorCheck(const TPublicType &publicType,
case EvqVertexIn:
case EvqFragmentOut:
case EvqComputeIn:
- if (publicType.getBasicType() == EbtStruct)
+ if (publicType.type == EbtStruct)
{
error(identifierLocation, "cannot be used with a structure",
getQualifierString(publicType.qualifier));
@@ -1125,14 +1000,7 @@ void TParseContext::singleDeclarationErrorCheck(const TPublicType &publicType,
}
if (publicType.qualifier != EvqUniform &&
- !checkIsNotSampler(identifierLocation, publicType.typeSpecifierNonArray,
- "samplers must be uniform"))
- {
- return;
- }
- if (publicType.qualifier != EvqUniform &&
- !checkIsNotImage(identifierLocation, publicType.typeSpecifierNonArray,
- "images must be uniform"))
+ !checkIsNotSampler(identifierLocation, publicType, "samplers must be uniform"))
{
return;
}
@@ -1160,89 +1028,6 @@ void TParseContext::singleDeclarationErrorCheck(const TPublicType &publicType,
{
checkLocationIsNotSpecified(identifierLocation, publicType.layoutQualifier);
}
-
- if (IsImage(publicType.getBasicType()))
- {
-
- switch (layoutQualifier.imageInternalFormat)
- {
- case EiifRGBA32F:
- case EiifRGBA16F:
- case EiifR32F:
- case EiifRGBA8:
- case EiifRGBA8_SNORM:
- if (!IsFloatImage(publicType.getBasicType()))
- {
- error(identifierLocation,
- "internal image format requires a floating image type",
- getBasicString(publicType.getBasicType()));
- return;
- }
- break;
- case EiifRGBA32I:
- case EiifRGBA16I:
- case EiifRGBA8I:
- case EiifR32I:
- if (!IsIntegerImage(publicType.getBasicType()))
- {
- error(identifierLocation,
- "internal image format requires an integer image type",
- getBasicString(publicType.getBasicType()));
- return;
- }
- break;
- case EiifRGBA32UI:
- case EiifRGBA16UI:
- case EiifRGBA8UI:
- case EiifR32UI:
- if (!IsUnsignedImage(publicType.getBasicType()))
- {
- error(identifierLocation,
- "internal image format requires an unsigned image type",
- getBasicString(publicType.getBasicType()));
- return;
- }
- break;
- case EiifUnspecified:
- error(identifierLocation, "layout qualifier", "No image internal format specified");
- return;
- default:
- error(identifierLocation, "layout qualifier", "unrecognized token");
- return;
- }
-
- // GLSL ES 3.10 Revision 4, 4.9 Memory Access Qualifiers
- switch (layoutQualifier.imageInternalFormat)
- {
- case EiifR32F:
- case EiifR32I:
- case EiifR32UI:
- break;
- default:
- if (!publicType.memoryQualifier.readonly && !publicType.memoryQualifier.writeonly)
- {
- error(identifierLocation, "layout qualifier",
- "Except for images with the r32f, r32i and r32ui format qualifiers, "
- "image variables must be qualified readonly and/or writeonly");
- return;
- }
- break;
- }
- }
- else
- {
-
- if (!checkInternalFormatIsNotSpecified(identifierLocation,
- layoutQualifier.imageInternalFormat))
- {
- return;
- }
-
- if (!checkIsMemoryQualifierNotSpecified(publicType.memoryQualifier, identifierLocation))
- {
- return;
- }
- }
}
void TParseContext::checkLayoutQualifierSupported(const TSourceLoc &location,
@@ -1273,18 +1058,6 @@ bool TParseContext::checkWorkGroupSizeIsNotSpecified(const TSourceLoc &location,
return true;
}
-bool TParseContext::checkInternalFormatIsNotSpecified(const TSourceLoc &location,
- TLayoutImageInternalFormat internalFormat)
-{
- if (internalFormat != EiifUnspecified)
- {
- error(location, "invalid layout qualifier:", getImageInternalFormatString(internalFormat),
- "only valid when used with images");
- return false;
- }
- return true;
-}
-
void TParseContext::functionCallLValueErrorCheck(const TFunction *fnCandidate,
TIntermAggregate *fnCall)
{
@@ -1304,27 +1077,12 @@ void TParseContext::functionCallLValueErrorCheck(const TFunction *fnCandidate,
}
}
-void TParseContext::checkInvariantVariableQualifier(bool invariant,
- const TQualifier qualifier,
- const TSourceLoc &invariantLocation)
+void TParseContext::checkInvariantIsOutVariableES3(const TQualifier qualifier,
+ const TSourceLoc &invariantLocation)
{
- if (!invariant)
- return;
-
- if (mShaderVersion < 300)
- {
- // input variables in the fragment shader can be also qualified as invariant
- if (!sh::CanBeInvariantESSL1(qualifier))
- {
- error(invariantLocation, "Cannot be qualified as invariant.", "invariant");
- }
- }
- else
+ if (!sh::IsVaryingOut(qualifier) && qualifier != EvqFragmentOut)
{
- if (!sh::CanBeInvariantESSL3OrGreater(qualifier))
- {
- error(invariantLocation, "Cannot be qualified as invariant.", "invariant");
- }
+ error(invariantLocation, "Only out variables can be invariant.", "invariant");
}
}
@@ -1522,26 +1280,15 @@ bool TParseContext::executeInitializer(const TSourceLoc &line,
const TString &identifier,
const TPublicType &pType,
TIntermTyped *initializer,
- TIntermBinary **initNode)
+ TIntermNode **intermNode)
{
- ASSERT(initNode != nullptr);
- ASSERT(*initNode == nullptr);
+ ASSERT(intermNode != nullptr);
TType type = TType(pType);
TVariable *variable = nullptr;
if (type.isUnsizedArray())
{
- // We have not checked yet whether the initializer actually is an array or not.
- if (initializer->isArray())
- {
- type.setArraySize(initializer->getArraySize());
- }
- else
- {
- // Having a non-array initializer for an unsized array will result in an error later,
- // so we don't generate an error message here.
- type.setArraySize(1u);
- }
+ type.setArraySize(initializer->getArraySize());
}
if (!declareVariable(line, identifier, type, &variable))
{
@@ -1607,7 +1354,7 @@ bool TParseContext::executeInitializer(const TSourceLoc &line,
if (initializer->getAsConstantUnion())
{
variable->shareConstPointer(initializer->getAsConstantUnion()->getUnionArrayPointer());
- *initNode = nullptr;
+ *intermNode = nullptr;
return false;
}
else if (initializer->getAsSymbolNode())
@@ -1620,7 +1367,7 @@ bool TParseContext::executeInitializer(const TSourceLoc &line,
if (constArray)
{
variable->shareConstPointer(constArray);
- *initNode = nullptr;
+ *intermNode = nullptr;
return false;
}
}
@@ -1628,8 +1375,8 @@ bool TParseContext::executeInitializer(const TSourceLoc &line,
TIntermSymbol *intermSymbol = intermediate.addSymbol(
variable->getUniqueId(), variable->getName(), variable->getType(), line);
- *initNode = createAssign(EOpInitialize, intermSymbol, initializer, line);
- if (*initNode == nullptr)
+ *intermNode = createAssign(EOpInitialize, intermSymbol, initializer, line);
+ if (*intermNode == nullptr)
{
assignError(line, "=", intermSymbol->getCompleteString(), initializer->getCompleteString());
return true;
@@ -1638,80 +1385,51 @@ bool TParseContext::executeInitializer(const TSourceLoc &line,
return false;
}
-void TParseContext::addFullySpecifiedType(TPublicType *typeSpecifier)
-{
- checkPrecisionSpecified(typeSpecifier->getLine(), typeSpecifier->precision,
- typeSpecifier->getBasicType());
-
- if (mShaderVersion < 300 && typeSpecifier->array)
- {
- error(typeSpecifier->getLine(), "not supported", "first-class array");
- typeSpecifier->clearArrayness();
- }
-}
-
-TPublicType TParseContext::addFullySpecifiedType(const TTypeQualifierBuilder &typeQualifierBuilder,
+TPublicType TParseContext::addFullySpecifiedType(TQualifier qualifier,
+ bool invariant,
+ TLayoutQualifier layoutQualifier,
const TPublicType &typeSpecifier)
{
- TTypeQualifier typeQualifier = typeQualifierBuilder.getVariableTypeQualifier(&mDiagnostics);
-
TPublicType returnType = typeSpecifier;
- returnType.qualifier = typeQualifier.qualifier;
- returnType.invariant = typeQualifier.invariant;
- returnType.layoutQualifier = typeQualifier.layoutQualifier;
- returnType.memoryQualifier = typeQualifier.memoryQualifier;
- returnType.precision = typeSpecifier.precision;
-
- if (typeQualifier.precision != EbpUndefined)
- {
- returnType.precision = typeQualifier.precision;
- }
+ returnType.qualifier = qualifier;
+ returnType.invariant = invariant;
+ returnType.layoutQualifier = layoutQualifier;
- checkPrecisionSpecified(typeSpecifier.getLine(), returnType.precision,
- typeSpecifier.getBasicType());
-
- checkInvariantVariableQualifier(returnType.invariant, returnType.qualifier,
- typeSpecifier.getLine());
-
- checkWorkGroupSizeIsNotSpecified(typeSpecifier.getLine(), returnType.layoutQualifier);
+ checkWorkGroupSizeIsNotSpecified(typeSpecifier.line, layoutQualifier);
if (mShaderVersion < 300)
{
if (typeSpecifier.array)
{
- error(typeSpecifier.getLine(), "not supported", "first-class array");
+ error(typeSpecifier.line, "not supported", "first-class array");
returnType.clearArrayness();
}
- if (returnType.qualifier == EvqAttribute &&
- (typeSpecifier.getBasicType() == EbtBool || typeSpecifier.getBasicType() == EbtInt))
+ if (qualifier == EvqAttribute &&
+ (typeSpecifier.type == EbtBool || typeSpecifier.type == EbtInt))
{
- error(typeSpecifier.getLine(), "cannot be bool or int",
- getQualifierString(returnType.qualifier));
+ error(typeSpecifier.line, "cannot be bool or int", getQualifierString(qualifier));
}
- if ((returnType.qualifier == EvqVaryingIn || returnType.qualifier == EvqVaryingOut) &&
- (typeSpecifier.getBasicType() == EbtBool || typeSpecifier.getBasicType() == EbtInt))
+ if ((qualifier == EvqVaryingIn || qualifier == EvqVaryingOut) &&
+ (typeSpecifier.type == EbtBool || typeSpecifier.type == EbtInt))
{
- error(typeSpecifier.getLine(), "cannot be bool or int",
- getQualifierString(returnType.qualifier));
+ error(typeSpecifier.line, "cannot be bool or int", getQualifierString(qualifier));
}
}
else
{
- if (!returnType.layoutQualifier.isEmpty())
+ if (!layoutQualifier.isEmpty())
{
- checkIsAtGlobalLevel(typeSpecifier.getLine(), "layout");
+ checkIsAtGlobalLevel(typeSpecifier.line, "layout");
}
- if (sh::IsVarying(returnType.qualifier) || returnType.qualifier == EvqVertexIn ||
- returnType.qualifier == EvqFragmentOut)
+ if (sh::IsVarying(qualifier) || qualifier == EvqVertexIn || qualifier == EvqFragmentOut)
{
- checkInputOutputTypeIsValidES3(returnType.qualifier, typeSpecifier,
- typeSpecifier.getLine());
+ checkInputOutputTypeIsValidES3(qualifier, typeSpecifier, typeSpecifier.line);
}
- if (returnType.qualifier == EvqComputeIn)
+ if (qualifier == EvqComputeIn)
{
- error(typeSpecifier.getLine(), "'in' can be only used to specify the local group size",
+ error(typeSpecifier.line, "'in' can be only used to specify the local group size",
"in");
}
}
@@ -1724,7 +1442,7 @@ void TParseContext::checkInputOutputTypeIsValidES3(const TQualifier qualifier,
const TSourceLoc &qualifierLocation)
{
// An input/output variable can never be bool or a sampler. Samplers are checked elsewhere.
- if (type.getBasicType() == EbtBool)
+ if (type.type == EbtBool)
{
error(qualifierLocation, "cannot be bool", getQualifierString(qualifier));
}
@@ -1742,7 +1460,7 @@ void TParseContext::checkInputOutputTypeIsValidES3(const TQualifier qualifier,
return;
case EvqFragmentOut:
// ESSL 3.00 section 4.3.6
- if (type.typeSpecifierNonArray.isMatrix())
+ if (type.isMatrix())
{
error(qualifierLocation, "cannot be matrix", getQualifierString(qualifier));
}
@@ -1755,15 +1473,15 @@ void TParseContext::checkInputOutputTypeIsValidES3(const TQualifier qualifier,
// Vertex shader outputs / fragment shader inputs have a different, slightly more lenient set of
// restrictions.
bool typeContainsIntegers =
- (type.getBasicType() == EbtInt || type.getBasicType() == EbtUInt ||
- type.isStructureContainingType(EbtInt) || type.isStructureContainingType(EbtUInt));
+ (type.type == EbtInt || type.type == EbtUInt || type.isStructureContainingType(EbtInt) ||
+ type.isStructureContainingType(EbtUInt));
if (typeContainsIntegers && qualifier != EvqFlatIn && qualifier != EvqFlatOut)
{
error(qualifierLocation, "must use 'flat' interpolation here",
getQualifierString(qualifier));
}
- if (type.getBasicType() == EbtStruct)
+ if (type.type == EbtStruct)
{
// ESSL 3.00 sections 4.3.4 and 4.3.6.
// These restrictions are only implied by the ESSL 3.00 spec, but
@@ -1791,57 +1509,9 @@ void TParseContext::checkInputOutputTypeIsValidES3(const TQualifier qualifier,
}
}
-void TParseContext::checkLocalVariableConstStorageQualifier(const TQualifierWrapperBase &qualifier)
-{
- if (qualifier.getType() == QtStorage)
- {
- const TStorageQualifierWrapper &storageQualifier =
- static_cast<const TStorageQualifierWrapper &>(qualifier);
- if (!declaringFunction() && storageQualifier.getQualifier() != EvqConst &&
- !symbolTable.atGlobalLevel())
- {
- error(storageQualifier.getLine(),
- "Local variables can only use the const storage qualifier.",
- storageQualifier.getQualifierString().c_str());
- }
- }
-}
-
-bool TParseContext::checkIsMemoryQualifierNotSpecified(const TMemoryQualifier &memoryQualifier,
- const TSourceLoc &location)
-{
- if (memoryQualifier.readonly)
- {
- error(location, "Only allowed with images.", "readonly");
- return false;
- }
- if (memoryQualifier.writeonly)
- {
- error(location, "Only allowed with images.", "writeonly");
- return false;
- }
- if (memoryQualifier.coherent)
- {
- error(location, "Only allowed with images.", "coherent");
- return false;
- }
- if (memoryQualifier.restrictQualifier)
- {
- error(location, "Only allowed with images.", "restrict");
- return false;
- }
- if (memoryQualifier.volatileQualifier)
- {
- error(location, "Only allowed with images.", "volatile");
- return false;
- }
- return true;
-}
-
-TIntermDeclaration *TParseContext::parseSingleDeclaration(
- TPublicType &publicType,
- const TSourceLoc &identifierOrTypeLocation,
- const TString &identifier)
+TIntermAggregate *TParseContext::parseSingleDeclaration(TPublicType &publicType,
+ const TSourceLoc &identifierOrTypeLocation,
+ const TString &identifier)
{
TType type(publicType);
if ((mCompileOptions & SH_FLATTEN_PRAGMA_STDGL_INVARIANT_ALL) &&
@@ -1877,9 +1547,6 @@ TIntermDeclaration *TParseContext::parseSingleDeclaration(
mDeferredSingleDeclarationErrorCheck = emptyDeclaration;
- TIntermDeclaration *declaration = new TIntermDeclaration();
- declaration->setLine(identifierOrTypeLocation);
-
if (emptyDeclaration)
{
if (publicType.isUnsizedArray())
@@ -1900,23 +1567,17 @@ TIntermDeclaration *TParseContext::parseSingleDeclaration(
declareVariable(identifierOrTypeLocation, identifier, type, &variable);
if (variable && symbol)
- {
symbol->setId(variable->getUniqueId());
- }
}
- // We append the symbol even if the declaration is empty, mainly because of struct declarations
- // that may just declare a type.
- declaration->appendDeclarator(symbol);
-
- return declaration;
+ return intermediate.makeAggregate(symbol, identifierOrTypeLocation);
}
-TIntermDeclaration *TParseContext::parseSingleArrayDeclaration(TPublicType &publicType,
- const TSourceLoc &identifierLocation,
- const TString &identifier,
- const TSourceLoc &indexLocation,
- TIntermTyped *indexExpression)
+TIntermAggregate *TParseContext::parseSingleArrayDeclaration(TPublicType &publicType,
+ const TSourceLoc &identifierLocation,
+ const TString &identifier,
+ const TSourceLoc &indexLocation,
+ TIntermTyped *indexExpression)
{
mDeferredSingleDeclarationErrorCheck = false;
@@ -1936,44 +1597,38 @@ TIntermDeclaration *TParseContext::parseSingleArrayDeclaration(TPublicType &publ
TVariable *variable = nullptr;
declareVariable(identifierLocation, identifier, arrayType, &variable);
- TIntermDeclaration *declaration = new TIntermDeclaration();
- declaration->setLine(identifierLocation);
-
TIntermSymbol *symbol = intermediate.addSymbol(0, identifier, arrayType, identifierLocation);
if (variable && symbol)
- {
symbol->setId(variable->getUniqueId());
- declaration->appendDeclarator(symbol);
- }
- return declaration;
+ return intermediate.makeAggregate(symbol, identifierLocation);
}
-TIntermDeclaration *TParseContext::parseSingleInitDeclaration(const TPublicType &publicType,
- const TSourceLoc &identifierLocation,
- const TString &identifier,
- const TSourceLoc &initLocation,
- TIntermTyped *initializer)
+TIntermAggregate *TParseContext::parseSingleInitDeclaration(const TPublicType &publicType,
+ const TSourceLoc &identifierLocation,
+ const TString &identifier,
+ const TSourceLoc &initLocation,
+ TIntermTyped *initializer)
{
mDeferredSingleDeclarationErrorCheck = false;
singleDeclarationErrorCheck(publicType, identifierLocation);
- TIntermDeclaration *declaration = new TIntermDeclaration();
- declaration->setLine(identifierLocation);
-
- TIntermBinary *initNode = nullptr;
- if (!executeInitializer(identifierLocation, identifier, publicType, initializer, &initNode))
+ TIntermNode *intermNode = nullptr;
+ if (!executeInitializer(identifierLocation, identifier, publicType, initializer, &intermNode))
{
- if (initNode)
- {
- declaration->appendDeclarator(initNode);
- }
+ //
+ // Build intermediate representation
+ //
+ return intermNode ? intermediate.makeAggregate(intermNode, initLocation) : nullptr;
+ }
+ else
+ {
+ return nullptr;
}
- return declaration;
}
-TIntermDeclaration *TParseContext::parseSingleArrayInitDeclaration(
+TIntermAggregate *TParseContext::parseSingleArrayInitDeclaration(
TPublicType &publicType,
const TSourceLoc &identifierLocation,
const TString &identifier,
@@ -2001,81 +1656,58 @@ TIntermDeclaration *TParseContext::parseSingleArrayInitDeclaration(
// This ensures useless error messages regarding the variable's non-arrayness won't follow.
arrayType.setArraySize(size);
- TIntermDeclaration *declaration = new TIntermDeclaration();
- declaration->setLine(identifierLocation);
-
// initNode will correspond to the whole of "type b[n] = initializer".
- TIntermBinary *initNode = nullptr;
+ TIntermNode *initNode = nullptr;
if (!executeInitializer(identifierLocation, identifier, arrayType, initializer, &initNode))
{
- if (initNode)
- {
- declaration->appendDeclarator(initNode);
- }
+ return initNode ? intermediate.makeAggregate(initNode, initLocation) : nullptr;
}
-
- return declaration;
-}
-
-TIntermAggregate *TParseContext::parseInvariantDeclaration(
- const TTypeQualifierBuilder &typeQualifierBuilder,
- const TSourceLoc &identifierLoc,
- const TString *identifier,
- const TSymbol *symbol)
-{
- TTypeQualifier typeQualifier = typeQualifierBuilder.getVariableTypeQualifier(&mDiagnostics);
-
- if (!typeQualifier.invariant)
+ else
{
- error(identifierLoc, "Expected invariant", identifier->c_str());
return nullptr;
}
- if (!checkIsAtGlobalLevel(identifierLoc, "invariant varying"))
- {
+}
+
+TIntermAggregate *TParseContext::parseInvariantDeclaration(const TSourceLoc &invariantLoc,
+ const TSourceLoc &identifierLoc,
+ const TString *identifier,
+ const TSymbol *symbol)
+{
+ // invariant declaration
+ if (!checkIsAtGlobalLevel(invariantLoc, "invariant varying"))
return nullptr;
- }
+
if (!symbol)
{
error(identifierLoc, "undeclared identifier declared as invariant", identifier->c_str());
return nullptr;
}
- if (!IsQualifierUnspecified(typeQualifier.qualifier))
- {
- error(identifierLoc, "invariant declaration specifies qualifier",
- getQualifierString(typeQualifier.qualifier));
- }
- if (typeQualifier.precision != EbpUndefined)
- {
- error(identifierLoc, "invariant declaration specifies precision",
- getPrecisionString(typeQualifier.precision));
- }
- if (!typeQualifier.layoutQualifier.isEmpty())
+ else
{
- error(identifierLoc, "invariant declaration specifies layout", "'layout'");
- }
-
- const TVariable *variable = getNamedVariable(identifierLoc, identifier, symbol);
- ASSERT(variable);
- const TType &type = variable->getType();
-
- checkInvariantVariableQualifier(typeQualifier.invariant, type.getQualifier(),
- typeQualifier.line);
- checkIsMemoryQualifierNotSpecified(typeQualifier.memoryQualifier, typeQualifier.line);
-
- symbolTable.addInvariantVarying(std::string(identifier->c_str()));
-
- TIntermSymbol *intermSymbol =
- intermediate.addSymbol(variable->getUniqueId(), *identifier, type, identifierLoc);
+ const TString kGlFrontFacing("gl_FrontFacing");
+ if (*identifier == kGlFrontFacing)
+ {
+ error(identifierLoc, "identifier should not be declared as invariant",
+ identifier->c_str());
+ return nullptr;
+ }
+ symbolTable.addInvariantVarying(std::string(identifier->c_str()));
+ const TVariable *variable = getNamedVariable(identifierLoc, identifier, symbol);
+ ASSERT(variable);
+ const TType &type = variable->getType();
+ TIntermSymbol *intermSymbol =
+ intermediate.addSymbol(variable->getUniqueId(), *identifier, type, identifierLoc);
- TIntermAggregate *aggregate = TIntermediate::MakeAggregate(intermSymbol, identifierLoc);
- aggregate->setOp(EOpInvariantDeclaration);
- return aggregate;
+ TIntermAggregate *aggregate = intermediate.makeAggregate(intermSymbol, identifierLoc);
+ aggregate->setOp(EOpInvariantDeclaration);
+ return aggregate;
+ }
}
-void TParseContext::parseDeclarator(TPublicType &publicType,
- const TSourceLoc &identifierLocation,
- const TString &identifier,
- TIntermDeclaration *declarationOut)
+TIntermAggregate *TParseContext::parseDeclarator(TPublicType &publicType,
+ TIntermAggregate *aggregateDeclaration,
+ const TSourceLoc &identifierLocation,
+ const TString &identifier)
{
// If the declaration starting this declarator list was empty (example: int,), some checks were
// not performed.
@@ -2095,18 +1727,17 @@ void TParseContext::parseDeclarator(TPublicType &publicType,
TIntermSymbol *symbol =
intermediate.addSymbol(0, identifier, TType(publicType), identifierLocation);
if (variable && symbol)
- {
symbol->setId(variable->getUniqueId());
- declarationOut->appendDeclarator(symbol);
- }
+
+ return intermediate.growAggregate(aggregateDeclaration, symbol, identifierLocation);
}
-void TParseContext::parseArrayDeclarator(TPublicType &publicType,
- const TSourceLoc &identifierLocation,
- const TString &identifier,
- const TSourceLoc &arrayLocation,
- TIntermTyped *indexExpression,
- TIntermDeclaration *declarationOut)
+TIntermAggregate *TParseContext::parseArrayDeclarator(TPublicType &publicType,
+ TIntermAggregate *aggregateDeclaration,
+ const TSourceLoc &identifierLocation,
+ const TString &identifier,
+ const TSourceLoc &arrayLocation,
+ TIntermTyped *indexExpression)
{
// If the declaration starting this declarator list was empty (example: int,), some checks were
// not performed.
@@ -2134,16 +1765,18 @@ void TParseContext::parseArrayDeclarator(TPublicType &publicType,
if (variable && symbol)
symbol->setId(variable->getUniqueId());
- declarationOut->appendDeclarator(symbol);
+ return intermediate.growAggregate(aggregateDeclaration, symbol, identifierLocation);
}
+
+ return nullptr;
}
-void TParseContext::parseInitDeclarator(const TPublicType &publicType,
- const TSourceLoc &identifierLocation,
- const TString &identifier,
- const TSourceLoc &initLocation,
- TIntermTyped *initializer,
- TIntermDeclaration *declarationOut)
+TIntermAggregate *TParseContext::parseInitDeclarator(const TPublicType &publicType,
+ TIntermAggregate *aggregateDeclaration,
+ const TSourceLoc &identifierLocation,
+ const TString &identifier,
+ const TSourceLoc &initLocation,
+ TIntermTyped *initializer)
{
// If the declaration starting this declarator list was empty (example: int,), some checks were
// not performed.
@@ -2155,27 +1788,35 @@ void TParseContext::parseInitDeclarator(const TPublicType &publicType,
checkDeclaratorLocationIsNotSpecified(identifierLocation, publicType);
- TIntermBinary *initNode = nullptr;
- if (!executeInitializer(identifierLocation, identifier, publicType, initializer, &initNode))
+ TIntermNode *intermNode = nullptr;
+ if (!executeInitializer(identifierLocation, identifier, publicType, initializer, &intermNode))
{
//
// build the intermediate representation
//
- if (initNode)
+ if (intermNode)
{
- declarationOut->appendDeclarator(initNode);
+ return intermediate.growAggregate(aggregateDeclaration, intermNode, initLocation);
}
+ else
+ {
+ return aggregateDeclaration;
+ }
+ }
+ else
+ {
+ return nullptr;
}
}
-void TParseContext::parseArrayInitDeclarator(const TPublicType &publicType,
- const TSourceLoc &identifierLocation,
- const TString &identifier,
- const TSourceLoc &indexLocation,
- TIntermTyped *indexExpression,
- const TSourceLoc &initLocation,
- TIntermTyped *initializer,
- TIntermDeclaration *declarationOut)
+TIntermAggregate *TParseContext::parseArrayInitDeclarator(const TPublicType &publicType,
+ TIntermAggregate *aggregateDeclaration,
+ const TSourceLoc &identifierLocation,
+ const TString &identifier,
+ const TSourceLoc &indexLocation,
+ TIntermTyped *indexExpression,
+ const TSourceLoc &initLocation,
+ TIntermTyped *initializer)
{
// If the declaration starting this declarator list was empty (example: int,), some checks were
// not performed.
@@ -2203,24 +1844,28 @@ void TParseContext::parseArrayInitDeclarator(const TPublicType &publicType,
arrayType.setArraySize(size);
// initNode will correspond to the whole of "b[n] = initializer".
- TIntermBinary *initNode = nullptr;
+ TIntermNode *initNode = nullptr;
if (!executeInitializer(identifierLocation, identifier, arrayType, initializer, &initNode))
{
if (initNode)
{
- declarationOut->appendDeclarator(initNode);
+ return intermediate.growAggregate(aggregateDeclaration, initNode, initLocation);
+ }
+ else
+ {
+ return aggregateDeclaration;
}
}
+ else
+ {
+ return nullptr;
+ }
}
-void TParseContext::parseGlobalLayoutQualifier(const TTypeQualifierBuilder &typeQualifierBuilder)
+void TParseContext::parseGlobalLayoutQualifier(const TPublicType &typeQualifier)
{
- TTypeQualifier typeQualifier = typeQualifierBuilder.getVariableTypeQualifier(&mDiagnostics);
const TLayoutQualifier layoutQualifier = typeQualifier.layoutQualifier;
- checkInvariantVariableQualifier(typeQualifier.invariant, typeQualifier.qualifier,
- typeQualifier.line);
-
// It should never be the case, but some strange parser errors can send us here.
if (layoutQualifier.isEmpty())
{
@@ -2234,10 +1879,6 @@ void TParseContext::parseGlobalLayoutQualifier(const TTypeQualifierBuilder &type
return;
}
- checkIsMemoryQualifierNotSpecified(typeQualifier.memoryQualifier, typeQualifier.line);
-
- checkInternalFormatIsNotSpecified(typeQualifier.line, layoutQualifier.imageInternalFormat);
-
if (typeQualifier.qualifier == EvqComputeIn)
{
if (mComputeShaderLocalSizeDeclared &&
@@ -2325,31 +1966,30 @@ void TParseContext::parseGlobalLayoutQualifier(const TTypeQualifierBuilder &type
}
}
-TIntermAggregate *TParseContext::addFunctionPrototypeDeclaration(const TFunction &parsedFunction,
+TIntermAggregate *TParseContext::addFunctionPrototypeDeclaration(const TFunction &function,
const TSourceLoc &location)
{
- // Note: function found from the symbol table could be the same as parsedFunction if this is the
- // first declaration. Either way the instance in the symbol table is used to track whether the
- // function is declared multiple times.
- TFunction *function = static_cast<TFunction *>(
- symbolTable.find(parsedFunction.getMangledName(), getShaderVersion()));
- if (function->hasPrototypeDeclaration() && mShaderVersion == 100)
+ // Note: symbolTableFunction could be the same as function if this is the first declaration.
+ // Either way the instance in the symbol table is used to track whether the function is declared
+ // multiple times.
+ TFunction *symbolTableFunction =
+ static_cast<TFunction *>(symbolTable.find(function.getMangledName(), getShaderVersion()));
+ if (symbolTableFunction->hasPrototypeDeclaration() && mShaderVersion == 100)
{
// ESSL 1.00.17 section 4.2.7.
// Doesn't apply to ESSL 3.00.4: see section 4.2.3.
error(location, "duplicate function prototype declarations are not allowed", "function");
}
- function->setHasPrototypeDeclaration();
+ symbolTableFunction->setHasPrototypeDeclaration();
TIntermAggregate *prototype = new TIntermAggregate;
- // TODO(oetuaho@nvidia.com): Instead of converting the function information here, the node could
- // point to the data that already exists in the symbol table.
- prototype->setType(function->getReturnType());
- prototype->getFunctionSymbolInfo()->setFromFunction(*function);
+ prototype->setType(function.getReturnType());
+ prototype->setName(function.getMangledName());
+ prototype->setFunctionId(function.getUniqueId());
- for (size_t i = 0; i < function->getParamCount(); i++)
+ for (size_t i = 0; i < function.getParamCount(); i++)
{
- const TConstParameter &param = function->getParam(i);
+ const TConstParameter &param = function.getParam(i);
if (param.name != 0)
{
TVariable variable(param.name, *param.type);
@@ -2378,83 +2018,71 @@ TIntermAggregate *TParseContext::addFunctionPrototypeDeclaration(const TFunction
return prototype;
}
-TIntermFunctionDefinition *TParseContext::addFunctionDefinition(
- const TFunction &function,
- TIntermAggregate *functionParameters,
- TIntermBlock *functionBody,
- const TSourceLoc &location)
+TIntermAggregate *TParseContext::addFunctionDefinition(const TFunction &function,
+ TIntermAggregate *functionPrototype,
+ TIntermAggregate *functionBody,
+ const TSourceLoc &location)
{
- // Check that non-void functions have at least one return statement.
+ //?? Check that all paths return a value if return type != void ?
+ // May be best done as post process phase on intermediate code
if (mCurrentFunctionType->getBasicType() != EbtVoid && !mFunctionReturnsValue)
{
error(location, "function does not return a value:", "", function.getName().c_str());
}
- if (functionBody == nullptr)
- {
- functionBody = new TIntermBlock();
- functionBody->setLine(location);
- }
- TIntermFunctionDefinition *functionNode =
- new TIntermFunctionDefinition(function.getReturnType(), functionParameters, functionBody);
- functionNode->setLine(location);
-
- functionNode->getFunctionSymbolInfo()->setFromFunction(function);
+ TIntermAggregate *aggregate =
+ intermediate.growAggregate(functionPrototype, functionBody, location);
+ intermediate.setAggregateOperator(aggregate, EOpFunction, location);
+ aggregate->setName(function.getMangledName().c_str());
+ aggregate->setType(function.getReturnType());
+ aggregate->setFunctionId(function.getUniqueId());
symbolTable.pop();
- return functionNode;
+ return aggregate;
}
-void TParseContext::parseFunctionDefinitionHeader(const TSourceLoc &location,
- TFunction **function,
- TIntermAggregate **aggregateOut)
+void TParseContext::parseFunctionPrototype(const TSourceLoc &location,
+ TFunction *function,
+ TIntermAggregate **aggregateOut)
{
- ASSERT(function);
- ASSERT(*function);
const TSymbol *builtIn =
- symbolTable.findBuiltIn((*function)->getMangledName(), getShaderVersion());
+ symbolTable.findBuiltIn(function->getMangledName(), getShaderVersion());
if (builtIn)
{
- error(location, "built-in functions cannot be redefined", (*function)->getName().c_str());
+ error(location, "built-in functions cannot be redefined", function->getName().c_str());
}
- else
- {
- TFunction *prevDec = static_cast<TFunction *>(
- symbolTable.find((*function)->getMangledName(), getShaderVersion()));
-
- // Note: 'prevDec' could be 'function' if this is the first time we've seen function as it
- // would have just been put in the symbol table. Otherwise, we're looking up an earlier
- // occurance.
- if (*function != prevDec)
- {
- // Swap the parameters of the previous declaration to the parameters of the function
- // definition (parameter names may differ).
- prevDec->swapParameters(**function);
-
- // The function definition will share the same symbol as any previous declaration.
- *function = prevDec;
- }
-
- if ((*function)->isDefined())
- {
- error(location, "function already has a body", (*function)->getName().c_str());
- }
- (*function)->setDefined();
+ TFunction *prevDec =
+ static_cast<TFunction *>(symbolTable.find(function->getMangledName(), getShaderVersion()));
+ //
+ // Note: 'prevDec' could be 'function' if this is the first time we've seen function
+ // as it would have just been put in the symbol table. Otherwise, we're looking up
+ // an earlier occurance.
+ //
+ if (prevDec->isDefined())
+ {
+ // Then this function already has a body.
+ error(location, "function already has a body", function->getName().c_str());
}
+ prevDec->setDefined();
+ //
+ // Overload the unique ID of the definition to be the same unique ID as the declaration.
+ // Eventually we will probably want to have only a single definition and just swap the
+ // arguments to be the definition's arguments.
+ //
+ function->setUniqueId(prevDec->getUniqueId());
// Raise error message if main function takes any parameters or return anything other than void
- if ((*function)->getName() == "main")
+ if (function->getName() == "main")
{
- if ((*function)->getParamCount() > 0)
+ if (function->getParamCount() > 0)
{
- error(location, "function cannot take any parameter(s)",
- (*function)->getName().c_str());
+ error(location, "function cannot take any parameter(s)", function->getName().c_str());
}
- if ((*function)->getReturnType().getBasicType() != EbtVoid)
+ if (function->getReturnType().getBasicType() != EbtVoid)
{
- error(location, "", (*function)->getReturnType().getBasicString(),
+ error(location, "", function->getReturnType().getBasicString(),
"main function cannot return a value");
}
}
@@ -2462,7 +2090,7 @@ void TParseContext::parseFunctionDefinitionHeader(const TSourceLoc &location,
//
// Remember the return type for later checking for RETURN statements.
//
- mCurrentFunctionType = &((*function)->getReturnType());
+ mCurrentFunctionType = &(prevDec->getReturnType());
mFunctionReturnsValue = false;
//
@@ -2474,9 +2102,9 @@ void TParseContext::parseFunctionDefinitionHeader(const TSourceLoc &location,
// knows where to find parameters.
//
TIntermAggregate *paramNodes = new TIntermAggregate;
- for (size_t i = 0; i < (*function)->getParamCount(); i++)
+ for (size_t i = 0; i < function->getParamCount(); i++)
{
- const TConstParameter &param = (*function)->getParam(i);
+ const TConstParameter &param = function->getParam(i);
if (param.name != 0)
{
TVariable *variable = new TVariable(param.name, *param.type);
@@ -2534,7 +2162,7 @@ TFunction *TParseContext::parseFunctionDeclarator(const TSourceLoc &location, TF
{
if (prevDec->getReturnType() != function->getReturnType())
{
- error(location, "function must have the same return type in all of its declarations",
+ error(location, "overloaded functions must have the same return type",
function->getReturnType().getBasicString());
}
for (size_t i = 0; i < prevDec->getParamCount(); ++i)
@@ -2542,8 +2170,7 @@ TFunction *TParseContext::parseFunctionDeclarator(const TSourceLoc &location, TF
if (prevDec->getParam(i).type->getQualifier() !=
function->getParam(i).type->getQualifier())
{
- error(location,
- "function must have the same parameter qualifiers in all of its declarations",
+ error(location, "overloaded functions must have the same parameter qualifiers",
function->getParam(i).type->getQualifierString());
}
}
@@ -2563,7 +2190,9 @@ TFunction *TParseContext::parseFunctionDeclarator(const TSourceLoc &location, TF
else
{
// Insert the unmangled name to detect potential future redefinition as a variable.
- symbolTable.getOuterLevel()->insertUnmangled(function);
+ TFunction *newFunction =
+ new TFunction(NewPoolTString(function->getName().c_str()), &function->getReturnType());
+ symbolTable.getOuterLevel()->insertUnmangled(newFunction);
}
// We're at the inner scope level of the function's arguments and body statement.
@@ -2591,10 +2220,8 @@ TFunction *TParseContext::parseFunctionHeader(const TPublicType &type,
{
error(location, "no qualifiers allowed for function return", "layout");
}
- // make sure a sampler or an image is not involved as well...
- checkIsNotSampler(location, type.typeSpecifierNonArray,
- "samplers can't be function return values");
- checkIsNotImage(location, type.typeSpecifierNonArray, "images can't be function return values");
+ // make sure a sampler is not involved as well...
+ checkIsNotSampler(location, type, "samplers can't be function return values");
if (mShaderVersion < 300)
{
// Array return values are forbidden, but there's also no valid syntax for declaring array
@@ -2616,14 +2243,14 @@ TFunction *TParseContext::parseFunctionHeader(const TPublicType &type,
TFunction *TParseContext::addConstructorFunc(const TPublicType &publicTypeIn)
{
TPublicType publicType = publicTypeIn;
- if (publicType.isStructSpecifier())
+ if (publicType.isStructSpecifier)
{
- error(publicType.getLine(), "constructor can't be a structure definition",
- getBasicString(publicType.getBasicType()));
+ error(publicType.line, "constructor can't be a structure definition",
+ getBasicString(publicType.type));
}
TOperator op = EOpNull;
- if (publicType.getUserDef())
+ if (publicType.userDef)
{
op = EOpConstructStruct;
}
@@ -2632,9 +2259,8 @@ TFunction *TParseContext::addConstructorFunc(const TPublicType &publicTypeIn)
op = sh::TypeToConstructorOperator(TType(publicType));
if (op == EOpNull)
{
- error(publicType.getLine(), "cannot construct this type",
- getBasicString(publicType.getBasicType()));
- publicType.setBasicType(EbtFloat);
+ error(publicType.line, "cannot construct this type", getBasicString(publicType.type));
+ publicType.type = EbtFloat;
op = EOpConstructFloat;
}
}
@@ -2657,12 +2283,6 @@ TIntermTyped *TParseContext::addConstructor(TIntermNode *arguments,
TType type = fnCall->getReturnType();
if (type.isUnsizedArray())
{
- if (fnCall->getParamCount() == 0)
- {
- error(line, "implicitly sized array constructor must have at least one argument", "[]");
- type.setArraySize(1u);
- return TIntermTyped::CreateZero(type);
- }
type.setArraySize(static_cast<unsigned int>(fnCall->getParamCount()));
}
bool constType = true;
@@ -2702,7 +2322,7 @@ TIntermTyped *TParseContext::addConstructor(TIntermNode *arguments,
constructor->setType(type);
- TIntermTyped *constConstructor = intermediate.foldAggregateBuiltIn(constructor, &mDiagnostics);
+ TIntermTyped *constConstructor = intermediate.foldAggregateBuiltIn(constructor);
if (constConstructor)
{
return constConstructor;
@@ -2711,36 +2331,118 @@ TIntermTyped *TParseContext::addConstructor(TIntermNode *arguments,
return constructor;
}
+// This function returns vector field(s) being accessed from a constant vector.
+TIntermConstantUnion *TParseContext::foldVectorSwizzle(TVectorFields &fields,
+ TIntermConstantUnion *baseNode,
+ const TSourceLoc &location)
+{
+ const TConstantUnion *unionArray = baseNode->getUnionArrayPointer();
+ ASSERT(unionArray);
+
+ TConstantUnion *constArray = new TConstantUnion[fields.num];
+ const auto &type = baseNode->getType();
+
+ for (int i = 0; i < fields.num; i++)
+ {
+ // Out-of-range indices should already be checked.
+ ASSERT(fields.offsets[i] < type.getNominalSize());
+ constArray[i] = unionArray[fields.offsets[i]];
+ }
+ return intermediate.addConstantUnion(constArray, type, location);
+}
+
+// This function returns the column vector being accessed from a constant matrix.
+TIntermConstantUnion *TParseContext::foldMatrixSubscript(int index,
+ TIntermConstantUnion *baseNode,
+ const TSourceLoc &location)
+{
+ ASSERT(index < baseNode->getType().getCols());
+
+ const TConstantUnion *unionArray = baseNode->getUnionArrayPointer();
+ int size = baseNode->getType().getRows();
+ return intermediate.addConstantUnion(&unionArray[size * index], baseNode->getType(), location);
+}
+
+// This function returns an element of an array accessed from a constant array.
+TIntermConstantUnion *TParseContext::foldArraySubscript(int index,
+ TIntermConstantUnion *baseNode,
+ const TSourceLoc &location)
+{
+ ASSERT(index < static_cast<int>(baseNode->getArraySize()));
+
+ TType arrayElementType = baseNode->getType();
+ arrayElementType.clearArrayness();
+ size_t arrayElementSize = arrayElementType.getObjectSize();
+ const TConstantUnion *unionArray = baseNode->getUnionArrayPointer();
+ return intermediate.addConstantUnion(&unionArray[arrayElementSize * index], baseNode->getType(),
+ location);
+}
+
+//
+// This function returns the value of a particular field inside a constant structure from the symbol
+// table.
+// If there is an embedded/nested struct, it appropriately calls addConstStructNested or
+// addConstStructFromAggr function and returns the parse-tree with the values of the embedded/nested
+// struct.
+//
+TIntermTyped *TParseContext::addConstStruct(const TString &identifier,
+ TIntermTyped *node,
+ const TSourceLoc &line)
+{
+ const TFieldList &fields = node->getType().getStruct()->fields();
+ size_t instanceSize = 0;
+
+ for (size_t index = 0; index < fields.size(); ++index)
+ {
+ if (fields[index]->name() == identifier)
+ {
+ break;
+ }
+ else
+ {
+ instanceSize += fields[index]->type()->getObjectSize();
+ }
+ }
+
+ TIntermTyped *typedNode;
+ TIntermConstantUnion *tempConstantNode = node->getAsConstantUnion();
+ if (tempConstantNode)
+ {
+ const TConstantUnion *constArray = tempConstantNode->getUnionArrayPointer();
+
+ // type will be changed in the calling function
+ typedNode = intermediate.addConstantUnion(constArray + instanceSize,
+ tempConstantNode->getType(), line);
+ }
+ else
+ {
+ error(line, "Cannot offset into the structure", "Error");
+ return nullptr;
+ }
+
+ return typedNode;
+}
+
//
// Interface/uniform blocks
//
-TIntermDeclaration *TParseContext::addInterfaceBlock(
- const TTypeQualifierBuilder &typeQualifierBuilder,
- const TSourceLoc &nameLine,
- const TString &blockName,
- TFieldList *fieldList,
- const TString *instanceName,
- const TSourceLoc &instanceLine,
- TIntermTyped *arrayIndex,
- const TSourceLoc &arrayIndexLine)
+TIntermAggregate *TParseContext::addInterfaceBlock(const TPublicType &typeQualifier,
+ const TSourceLoc &nameLine,
+ const TString &blockName,
+ TFieldList *fieldList,
+ const TString *instanceName,
+ const TSourceLoc &instanceLine,
+ TIntermTyped *arrayIndex,
+ const TSourceLoc &arrayIndexLine)
{
checkIsNotReserved(nameLine, blockName);
- TTypeQualifier typeQualifier = typeQualifierBuilder.getVariableTypeQualifier(&mDiagnostics);
-
if (typeQualifier.qualifier != EvqUniform)
{
error(typeQualifier.line, "invalid qualifier:", getQualifierString(typeQualifier.qualifier),
"interface blocks must be uniform");
}
- if (typeQualifier.invariant)
- {
- error(typeQualifier.line, "invalid qualifier on interface block member", "invariant");
- }
-
- checkIsMemoryQualifierNotSpecified(typeQualifier.memoryQualifier, typeQualifier.line);
-
TLayoutQualifier blockLayoutQualifier = typeQualifier.layoutQualifier;
checkLocationIsNotSpecified(typeQualifier.line, blockLayoutQualifier);
@@ -2756,8 +2458,6 @@ TIntermDeclaration *TParseContext::addInterfaceBlock(
checkWorkGroupSizeIsNotSpecified(nameLine, blockLayoutQualifier);
- checkInternalFormatIsNotSpecified(nameLine, blockLayoutQualifier.imageInternalFormat);
-
TSymbol *blockNameSymbol = new TInterfaceBlockName(&blockName);
if (!symbolTable.declare(blockNameSymbol))
{
@@ -2775,12 +2475,6 @@ TIntermDeclaration *TParseContext::addInterfaceBlock(
"sampler types are not allowed in interface blocks");
}
- if (IsImage(fieldType->getBasicType()))
- {
- error(field->line(), "unsupported type", fieldType->getBasicString(),
- "image types are not allowed in interface blocks");
- }
-
const TQualifier qualifier = fieldType->getQualifier();
switch (qualifier)
{
@@ -2793,11 +2487,6 @@ TIntermDeclaration *TParseContext::addInterfaceBlock(
break;
}
- if (fieldType->isInvariant())
- {
- error(field->line(), "invalid qualifier on interface block member", "invariant");
- }
-
// check layout qualifiers
TLayoutQualifier fieldLayoutQualifier = fieldType->getLayoutQualifier();
checkLocationIsNotSpecified(field->line(), fieldLayoutQualifier);
@@ -2876,14 +2565,13 @@ TIntermDeclaration *TParseContext::addInterfaceBlock(
symbolName = instanceTypeDef->getName();
}
- TIntermSymbol *blockSymbol =
- intermediate.addSymbol(symbolId, symbolName, interfaceBlockType, typeQualifier.line);
- TIntermDeclaration *declaration = new TIntermDeclaration();
- declaration->appendDeclarator(blockSymbol);
- declaration->setLine(nameLine);
+ TIntermAggregate *aggregate = intermediate.makeAggregate(
+ intermediate.addSymbol(symbolId, symbolName, interfaceBlockType, typeQualifier.line),
+ nameLine);
+ aggregate->setOp(EOpDeclaration);
exitStructDeclaration();
- return declaration;
+ return aggregate;
}
void TParseContext::enterStructDeclaration(const TSourceLoc &line, const TString &identifier)
@@ -2904,9 +2592,15 @@ void TParseContext::exitStructDeclaration()
--mStructNestingLevel;
}
+namespace
+{
+const int kWebGLMaxStructNesting = 4;
+
+} // namespace
+
void TParseContext::checkIsBelowStructNestingLimit(const TSourceLoc &line, const TField &field)
{
- if (!sh::IsWebGLBasedSpec(mShaderSpec))
+ if (!IsWebGLBasedSpec(mShaderSpec))
{
return;
}
@@ -2936,6 +2630,8 @@ TIntermTyped *TParseContext::addIndexExpression(TIntermTyped *baseExpression,
const TSourceLoc &location,
TIntermTyped *indexExpression)
{
+ TIntermTyped *indexedExpression = NULL;
+
if (!baseExpression->isArray() && !baseExpression->isMatrix() && !baseExpression->isVector())
{
if (baseExpression->getAsSymbolNode())
@@ -2947,11 +2643,6 @@ TIntermTyped *TParseContext::addIndexExpression(TIntermTyped *baseExpression,
{
error(location, " left of '[' is not of type array, matrix, or vector ", "expression");
}
-
- TConstantUnion *unionArray = new TConstantUnion[1];
- unionArray->setFConst(0.0f);
- return intermediate.addConstantUnion(unionArray, TType(EbtFloat, EbpHigh, EvqConst),
- location);
}
TIntermConstantUnion *indexConstantUnion = indexExpression->getAsConstantUnion();
@@ -2981,78 +2672,151 @@ TIntermTyped *TParseContext::addIndexExpression(TIntermTyped *baseExpression,
if (indexConstantUnion)
{
- // If an out-of-range index is not qualified as constant, the behavior in the spec is
- // undefined. This applies even if ANGLE has been able to constant fold it (ANGLE may
- // constant fold expressions that are not constant expressions). The most compatible way to
- // handle this case is to report a warning instead of an error and force the index to be in
- // the correct range.
+ // If the index is not qualified as constant, the behavior in the spec is undefined. This
+ // applies even if ANGLE has been able to constant fold it (ANGLE may constant fold
+ // expressions that are not constant expressions). The most compatible way to handle this
+ // case is to report a warning instead of an error and force the index to be in the
+ // correct range.
bool outOfRangeIndexIsError = indexExpression->getQualifier() == EvqConst;
int index = indexConstantUnion->getIConst(0);
+ if (!baseExpression->isArray())
+ {
+ // Array checks are done later because a different error message might be generated
+ // based on the index in some cases.
+ if (baseExpression->isVector())
+ {
+ index = checkIndexOutOfRange(outOfRangeIndexIsError, location, index,
+ baseExpression->getType().getNominalSize(),
+ "vector field selection out of range", "[]");
+ }
+ else if (baseExpression->isMatrix())
+ {
+ index = checkIndexOutOfRange(outOfRangeIndexIsError, location, index,
+ baseExpression->getType().getCols(),
+ "matrix field selection out of range", "[]");
+ }
+ }
- int safeIndex = -1;
-
- if (baseExpression->isArray())
+ TIntermConstantUnion *baseConstantUnion = baseExpression->getAsConstantUnion();
+ if (baseConstantUnion)
{
- if (baseExpression->getQualifier() == EvqFragData && index > 0)
+ if (baseExpression->isArray())
{
- if (mShaderSpec == SH_WEBGL2_SPEC)
+ index = checkIndexOutOfRange(outOfRangeIndexIsError, location, index,
+ baseExpression->getArraySize(),
+ "array index out of range", "[]");
+ // Constant folding for array indexing.
+ indexedExpression = foldArraySubscript(index, baseConstantUnion, location);
+ }
+ else if (baseExpression->isVector())
+ {
+ // Constant folding for vector indexing - reusing vector swizzle folding.
+ TVectorFields fields;
+ fields.num = 1;
+ fields.offsets[0] = index;
+ indexedExpression = foldVectorSwizzle(fields, baseConstantUnion, location);
+ }
+ else if (baseExpression->isMatrix())
+ {
+ // Constant folding for matrix indexing.
+ indexedExpression = foldMatrixSubscript(index, baseConstantUnion, location);
+ }
+ }
+ else
+ {
+ int safeIndex = -1;
+
+ if (baseExpression->isArray())
+ {
+ if (baseExpression->getQualifier() == EvqFragData && index > 0)
{
- // Error has been already generated if index is not const.
- if (indexExpression->getQualifier() == EvqConst)
+ if (mShaderSpec == SH_WEBGL2_SPEC)
{
- error(location, "", "[",
- "array index for gl_FragData must be constant zero");
+ // Error has been already generated if index is not const.
+ if (indexExpression->getQualifier() == EvqConst)
+ {
+ error(location, "", "[",
+ "array index for gl_FragData must be constant zero");
+ }
+ safeIndex = 0;
+ }
+ else if (!isExtensionEnabled("GL_EXT_draw_buffers"))
+ {
+ outOfRangeError(outOfRangeIndexIsError, location, "", "[",
+ "array index for gl_FragData must be zero when "
+ "GL_EXT_draw_buffers is disabled");
+ safeIndex = 0;
}
- safeIndex = 0;
}
- else if (!isExtensionEnabled("GL_EXT_draw_buffers"))
+ // Only do generic out-of-range check if similar error hasn't already been reported.
+ if (safeIndex < 0)
{
- outOfRangeError(outOfRangeIndexIsError, location, "", "[",
- "array index for gl_FragData must be zero when "
- "GL_EXT_draw_buffers is disabled");
- safeIndex = 0;
+ safeIndex = checkIndexOutOfRange(outOfRangeIndexIsError, location, index,
+ baseExpression->getArraySize(),
+ "array index out of range", "[]");
}
}
- // Only do generic out-of-range check if similar error hasn't already been reported.
- if (safeIndex < 0)
+
+ // Data of constant unions can't be changed, because it may be shared with other
+ // constant unions or even builtins, like gl_MaxDrawBuffers. Instead use a new
+ // sanitized object.
+ if (safeIndex != -1)
{
- safeIndex = checkIndexOutOfRange(outOfRangeIndexIsError, location, index,
- baseExpression->getArraySize(),
- "array index out of range", "[]");
+ TConstantUnion *safeConstantUnion = new TConstantUnion();
+ safeConstantUnion->setIConst(safeIndex);
+ indexConstantUnion->replaceConstantUnion(safeConstantUnion);
}
- }
- else if (baseExpression->isMatrix())
- {
- safeIndex = checkIndexOutOfRange(outOfRangeIndexIsError, location, index,
- baseExpression->getType().getCols(),
- "matrix field selection out of range", "[]");
- }
- else if (baseExpression->isVector())
- {
- safeIndex = checkIndexOutOfRange(outOfRangeIndexIsError, location, index,
- baseExpression->getType().getNominalSize(),
- "vector field selection out of range", "[]");
- }
- ASSERT(safeIndex >= 0);
- // Data of constant unions can't be changed, because it may be shared with other
- // constant unions or even builtins, like gl_MaxDrawBuffers. Instead use a new
- // sanitized object.
- if (safeIndex != index)
- {
- TConstantUnion *safeConstantUnion = new TConstantUnion();
- safeConstantUnion->setIConst(safeIndex);
- indexConstantUnion->replaceConstantUnion(safeConstantUnion);
+ indexedExpression =
+ intermediate.addIndex(EOpIndexDirect, baseExpression, indexExpression, location);
}
+ }
+ else
+ {
+ indexedExpression =
+ intermediate.addIndex(EOpIndexIndirect, baseExpression, indexExpression, location);
+ }
+
+ if (indexedExpression == 0)
+ {
+ TConstantUnion *unionArray = new TConstantUnion[1];
+ unionArray->setFConst(0.0f);
+ indexedExpression =
+ intermediate.addConstantUnion(unionArray, TType(EbtFloat, EbpHigh, EvqConst), location);
+ }
+ else if (baseExpression->isArray())
+ {
+ TType indexedType = baseExpression->getType();
+ indexedType.clearArrayness();
+ indexedExpression->setType(indexedType);
+ }
+ else if (baseExpression->isMatrix())
+ {
+ indexedExpression->setType(TType(baseExpression->getBasicType(),
+ baseExpression->getPrecision(), EvqTemporary,
+ static_cast<unsigned char>(baseExpression->getRows())));
+ }
+ else if (baseExpression->isVector())
+ {
+ indexedExpression->setType(
+ TType(baseExpression->getBasicType(), baseExpression->getPrecision(), EvqTemporary));
+ }
+ else
+ {
+ indexedExpression->setType(baseExpression->getType());
+ }
- return intermediate.addIndex(EOpIndexDirect, baseExpression, indexExpression, location,
- &mDiagnostics);
+ if (baseExpression->getType().getQualifier() == EvqConst &&
+ indexExpression->getType().getQualifier() == EvqConst)
+ {
+ indexedExpression->getTypePointer()->setQualifier(EvqConst);
}
else
{
- return intermediate.addIndex(EOpIndexIndirect, baseExpression, indexExpression, location,
- &mDiagnostics);
+ indexedExpression->getTypePointer()->setQualifier(EvqTemporary);
}
+
+ return indexedExpression;
}
int TParseContext::checkIndexOutOfRange(bool outOfRangeIndexIsError,
@@ -3085,10 +2849,11 @@ TIntermTyped *TParseContext::addFieldSelectionExpression(TIntermTyped *baseExpre
const TString &fieldString,
const TSourceLoc &fieldLocation)
{
+ TIntermTyped *indexedExpression = NULL;
+
if (baseExpression->isArray())
{
error(fieldLocation, "cannot apply dot operator to an array", ".");
- return baseExpression;
}
if (baseExpression->isVector())
@@ -3101,19 +2866,41 @@ TIntermTyped *TParseContext::addFieldSelectionExpression(TIntermTyped *baseExpre
fields.offsets[0] = 0;
}
- return TIntermediate::AddSwizzle(baseExpression, fields, dotLocation);
+ if (baseExpression->getAsConstantUnion())
+ {
+ // constant folding for vector fields
+ indexedExpression =
+ foldVectorSwizzle(fields, baseExpression->getAsConstantUnion(), fieldLocation);
+ }
+ else
+ {
+ TIntermTyped *index = intermediate.addSwizzle(fields, fieldLocation);
+ indexedExpression =
+ intermediate.addIndex(EOpVectorSwizzle, baseExpression, index, dotLocation);
+ }
+ if (indexedExpression == nullptr)
+ {
+ indexedExpression = baseExpression;
+ }
+ else
+ {
+ // Note that the qualifier set here will be corrected later.
+ indexedExpression->setType(TType(baseExpression->getBasicType(),
+ baseExpression->getPrecision(), EvqTemporary,
+ static_cast<unsigned char>(fields.num)));
+ }
}
else if (baseExpression->getBasicType() == EbtStruct)
{
+ bool fieldFound = false;
const TFieldList &fields = baseExpression->getType().getStruct()->fields();
if (fields.empty())
{
error(dotLocation, "structure has no fields", "Internal Error");
- return baseExpression;
+ indexedExpression = baseExpression;
}
else
{
- bool fieldFound = false;
unsigned int i;
for (i = 0; i < fields.size(); ++i)
{
@@ -3125,29 +2912,47 @@ TIntermTyped *TParseContext::addFieldSelectionExpression(TIntermTyped *baseExpre
}
if (fieldFound)
{
- TIntermTyped *index = TIntermTyped::CreateIndexNode(i);
- index->setLine(fieldLocation);
- return intermediate.addIndex(EOpIndexDirectStruct, baseExpression, index,
- dotLocation, &mDiagnostics);
+ if (baseExpression->getAsConstantUnion())
+ {
+ indexedExpression = addConstStruct(fieldString, baseExpression, dotLocation);
+ if (indexedExpression == 0)
+ {
+ indexedExpression = baseExpression;
+ }
+ else
+ {
+ indexedExpression->setType(*fields[i]->type());
+ }
+ }
+ else
+ {
+ TConstantUnion *unionArray = new TConstantUnion[1];
+ unionArray->setIConst(i);
+ TIntermTyped *index = intermediate.addConstantUnion(
+ unionArray, *fields[i]->type(), fieldLocation);
+ indexedExpression = intermediate.addIndex(EOpIndexDirectStruct, baseExpression,
+ index, dotLocation);
+ indexedExpression->setType(*fields[i]->type());
+ }
}
else
{
error(dotLocation, " no such field in structure", fieldString.c_str());
- return baseExpression;
+ indexedExpression = baseExpression;
}
}
}
else if (baseExpression->isInterfaceBlock())
{
+ bool fieldFound = false;
const TFieldList &fields = baseExpression->getType().getInterfaceBlock()->fields();
if (fields.empty())
{
error(dotLocation, "interface block has no fields", "Internal Error");
- return baseExpression;
+ indexedExpression = baseExpression;
}
else
{
- bool fieldFound = false;
unsigned int i;
for (i = 0; i < fields.size(); ++i)
{
@@ -3159,15 +2964,18 @@ TIntermTyped *TParseContext::addFieldSelectionExpression(TIntermTyped *baseExpre
}
if (fieldFound)
{
- TIntermTyped *index = TIntermTyped::CreateIndexNode(i);
- index->setLine(fieldLocation);
- return intermediate.addIndex(EOpIndexDirectInterfaceBlock, baseExpression, index,
- dotLocation, &mDiagnostics);
+ TConstantUnion *unionArray = new TConstantUnion[1];
+ unionArray->setIConst(i);
+ TIntermTyped *index =
+ intermediate.addConstantUnion(unionArray, *fields[i]->type(), fieldLocation);
+ indexedExpression = intermediate.addIndex(EOpIndexDirectInterfaceBlock,
+ baseExpression, index, dotLocation);
+ indexedExpression->setType(*fields[i]->type());
}
else
{
error(dotLocation, " no such field in interface block", fieldString.c_str());
- return baseExpression;
+ indexedExpression = baseExpression;
}
}
}
@@ -3185,8 +2993,19 @@ TIntermTyped *TParseContext::addFieldSelectionExpression(TIntermTyped *baseExpre
"side",
fieldString.c_str());
}
- return baseExpression;
+ indexedExpression = baseExpression;
+ }
+
+ if (baseExpression->getQualifier() == EvqConst)
+ {
+ indexedExpression->getTypePointer()->setQualifier(EvqConst);
}
+ else
+ {
+ indexedExpression->getTypePointer()->setQualifier(EvqTemporary);
+ }
+
+ return indexedExpression;
}
TLayoutQualifier TParseContext::parseLayoutQualifier(const TString &qualifierType,
@@ -3196,18 +3015,10 @@ TLayoutQualifier TParseContext::parseLayoutQualifier(const TString &qualifierTyp
if (qualifierType == "shared")
{
- if (sh::IsWebGLBasedSpec(mShaderSpec))
- {
- error(qualifierTypeLine, "Only std140 layout is allowed in WebGL", "shared");
- }
qualifier.blockStorage = EbsShared;
}
else if (qualifierType == "packed")
{
- if (sh::IsWebGLBasedSpec(mShaderSpec))
- {
- error(qualifierTypeLine, "Only std140 layout is allowed in WebGL", "packed");
- }
qualifier.blockStorage = EbsPacked;
}
else if (qualifierType == "std140")
@@ -3227,72 +3038,6 @@ TLayoutQualifier TParseContext::parseLayoutQualifier(const TString &qualifierTyp
error(qualifierTypeLine, "invalid layout qualifier", qualifierType.c_str(),
"location requires an argument");
}
- else if (qualifierType == "rgba32f")
- {
- checkLayoutQualifierSupported(qualifierTypeLine, qualifierType, 310);
- qualifier.imageInternalFormat = EiifRGBA32F;
- }
- else if (qualifierType == "rgba16f")
- {
- checkLayoutQualifierSupported(qualifierTypeLine, qualifierType, 310);
- qualifier.imageInternalFormat = EiifRGBA16F;
- }
- else if (qualifierType == "r32f")
- {
- checkLayoutQualifierSupported(qualifierTypeLine, qualifierType, 310);
- qualifier.imageInternalFormat = EiifR32F;
- }
- else if (qualifierType == "rgba8")
- {
- checkLayoutQualifierSupported(qualifierTypeLine, qualifierType, 310);
- qualifier.imageInternalFormat = EiifRGBA8;
- }
- else if (qualifierType == "rgba8_snorm")
- {
- checkLayoutQualifierSupported(qualifierTypeLine, qualifierType, 310);
- qualifier.imageInternalFormat = EiifRGBA8_SNORM;
- }
- else if (qualifierType == "rgba32i")
- {
- checkLayoutQualifierSupported(qualifierTypeLine, qualifierType, 310);
- qualifier.imageInternalFormat = EiifRGBA32I;
- }
- else if (qualifierType == "rgba16i")
- {
- checkLayoutQualifierSupported(qualifierTypeLine, qualifierType, 310);
- qualifier.imageInternalFormat = EiifRGBA16I;
- }
- else if (qualifierType == "rgba8i")
- {
- checkLayoutQualifierSupported(qualifierTypeLine, qualifierType, 310);
- qualifier.imageInternalFormat = EiifRGBA8I;
- }
- else if (qualifierType == "r32i")
- {
- checkLayoutQualifierSupported(qualifierTypeLine, qualifierType, 310);
- qualifier.imageInternalFormat = EiifR32I;
- }
- else if (qualifierType == "rgba32ui")
- {
- checkLayoutQualifierSupported(qualifierTypeLine, qualifierType, 310);
- qualifier.imageInternalFormat = EiifRGBA32UI;
- }
- else if (qualifierType == "rgba16ui")
- {
- checkLayoutQualifierSupported(qualifierTypeLine, qualifierType, 310);
- qualifier.imageInternalFormat = EiifRGBA16UI;
- }
- else if (qualifierType == "rgba8ui")
- {
- checkLayoutQualifierSupported(qualifierTypeLine, qualifierType, 310);
- qualifier.imageInternalFormat = EiifRGBA8UI;
- }
- else if (qualifierType == "r32ui")
- {
- checkLayoutQualifierSupported(qualifierTypeLine, qualifierType, 310);
- qualifier.imageInternalFormat = EiifR32UI;
- }
-
else
{
error(qualifierTypeLine, "invalid layout qualifier", qualifierType.c_str());
@@ -3338,7 +3083,6 @@ TLayoutQualifier TParseContext::parseLayoutQualifier(const TString &qualifierTyp
else
{
qualifier.location = intValue;
- qualifier.locationsSpecified = 1;
}
}
else if (qualifierType == "local_size_x")
@@ -3364,48 +3108,106 @@ TLayoutQualifier TParseContext::parseLayoutQualifier(const TString &qualifierTyp
return qualifier;
}
-TTypeQualifierBuilder *TParseContext::createTypeQualifierBuilder(const TSourceLoc &loc)
-{
- return new TTypeQualifierBuilder(
- new TStorageQualifierWrapper(symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary, loc),
- mShaderVersion);
-}
-
TLayoutQualifier TParseContext::joinLayoutQualifiers(TLayoutQualifier leftQualifier,
TLayoutQualifier rightQualifier,
const TSourceLoc &rightQualifierLocation)
{
- return sh::JoinLayoutQualifiers(leftQualifier, rightQualifier, rightQualifierLocation,
- &mDiagnostics);
+ TLayoutQualifier joinedQualifier = leftQualifier;
+
+ if (rightQualifier.location != -1)
+ {
+ joinedQualifier.location = rightQualifier.location;
+ }
+ if (rightQualifier.matrixPacking != EmpUnspecified)
+ {
+ joinedQualifier.matrixPacking = rightQualifier.matrixPacking;
+ }
+ if (rightQualifier.blockStorage != EbsUnspecified)
+ {
+ joinedQualifier.blockStorage = rightQualifier.blockStorage;
+ }
+
+ for (size_t i = 0u; i < rightQualifier.localSize.size(); ++i)
+ {
+ if (rightQualifier.localSize[i] != -1)
+ {
+ if (joinedQualifier.localSize[i] != -1 &&
+ joinedQualifier.localSize[i] != rightQualifier.localSize[i])
+ {
+ error(rightQualifierLocation,
+ "Cannot have multiple different work group size specifiers",
+ getWorkGroupSizeString(i));
+ }
+ joinedQualifier.localSize[i] = rightQualifier.localSize[i];
+ }
+ }
+
+ return joinedQualifier;
}
-TFieldList *TParseContext::addStructDeclaratorListWithQualifiers(
- const TTypeQualifierBuilder &typeQualifierBuilder,
- TPublicType *typeSpecifier,
- TFieldList *fieldList)
+TPublicType TParseContext::joinInterpolationQualifiers(const TSourceLoc &interpolationLoc,
+ TQualifier interpolationQualifier,
+ const TSourceLoc &storageLoc,
+ TQualifier storageQualifier)
{
- TTypeQualifier typeQualifier = typeQualifierBuilder.getVariableTypeQualifier(&mDiagnostics);
+ TQualifier mergedQualifier = EvqSmoothIn;
- typeSpecifier->qualifier = typeQualifier.qualifier;
- typeSpecifier->layoutQualifier = typeQualifier.layoutQualifier;
- typeSpecifier->memoryQualifier = typeQualifier.memoryQualifier;
- typeSpecifier->invariant = typeQualifier.invariant;
- if (typeQualifier.precision != EbpUndefined)
+ if (storageQualifier == EvqFragmentIn)
{
- typeSpecifier->precision = typeQualifier.precision;
+ if (interpolationQualifier == EvqSmooth)
+ mergedQualifier = EvqSmoothIn;
+ else if (interpolationQualifier == EvqFlat)
+ mergedQualifier = EvqFlatIn;
+ else
+ UNREACHABLE();
+ }
+ else if (storageQualifier == EvqCentroidIn)
+ {
+ if (interpolationQualifier == EvqSmooth)
+ mergedQualifier = EvqCentroidIn;
+ else if (interpolationQualifier == EvqFlat)
+ mergedQualifier = EvqFlatIn;
+ else
+ UNREACHABLE();
+ }
+ else if (storageQualifier == EvqVertexOut)
+ {
+ if (interpolationQualifier == EvqSmooth)
+ mergedQualifier = EvqSmoothOut;
+ else if (interpolationQualifier == EvqFlat)
+ mergedQualifier = EvqFlatOut;
+ else
+ UNREACHABLE();
+ }
+ else if (storageQualifier == EvqCentroidOut)
+ {
+ if (interpolationQualifier == EvqSmooth)
+ mergedQualifier = EvqCentroidOut;
+ else if (interpolationQualifier == EvqFlat)
+ mergedQualifier = EvqFlatOut;
+ else
+ UNREACHABLE();
}
- return addStructDeclaratorList(*typeSpecifier, fieldList);
+ else
+ {
+ error(interpolationLoc,
+ "interpolation qualifier requires a fragment 'in' or vertex 'out' storage qualifier",
+ getInterpolationString(interpolationQualifier));
+
+ mergedQualifier = storageQualifier;
+ }
+
+ TPublicType type;
+ type.setBasic(EbtVoid, mergedQualifier, storageLoc);
+ return type;
}
TFieldList *TParseContext::addStructDeclaratorList(const TPublicType &typeSpecifier,
TFieldList *fieldList)
{
- checkPrecisionSpecified(typeSpecifier.getLine(), typeSpecifier.precision,
- typeSpecifier.getBasicType());
+ checkIsNonVoid(typeSpecifier.line, (*fieldList)[0]->name(), typeSpecifier.type);
- checkIsNonVoid(typeSpecifier.getLine(), (*fieldList)[0]->name(), typeSpecifier.getBasicType());
-
- checkWorkGroupSizeIsNotSpecified(typeSpecifier.getLine(), typeSpecifier.layoutQualifier);
+ checkWorkGroupSizeIsNotSpecified(typeSpecifier.line, typeSpecifier.layoutQualifier);
for (unsigned int i = 0; i < fieldList->size(); ++i)
{
@@ -3413,43 +3215,42 @@ TFieldList *TParseContext::addStructDeclaratorList(const TPublicType &typeSpecif
// Careful not to replace already known aspects of type, like array-ness
//
TType *type = (*fieldList)[i]->type();
- type->setBasicType(typeSpecifier.getBasicType());
- type->setPrimarySize(typeSpecifier.getPrimarySize());
- type->setSecondarySize(typeSpecifier.getSecondarySize());
+ type->setBasicType(typeSpecifier.type);
+ type->setPrimarySize(typeSpecifier.primarySize);
+ type->setSecondarySize(typeSpecifier.secondarySize);
type->setPrecision(typeSpecifier.precision);
type->setQualifier(typeSpecifier.qualifier);
type->setLayoutQualifier(typeSpecifier.layoutQualifier);
- type->setMemoryQualifier(typeSpecifier.memoryQualifier);
- type->setInvariant(typeSpecifier.invariant);
// don't allow arrays of arrays
if (type->isArray())
{
- checkIsValidTypeForArray(typeSpecifier.getLine(), typeSpecifier);
+ checkIsValidTypeForArray(typeSpecifier.line, typeSpecifier);
}
if (typeSpecifier.array)
type->setArraySize(static_cast<unsigned int>(typeSpecifier.arraySize));
- if (typeSpecifier.getUserDef())
+ if (typeSpecifier.userDef)
{
- type->setStruct(typeSpecifier.getUserDef()->getStruct());
+ type->setStruct(typeSpecifier.userDef->getStruct());
}
- checkIsBelowStructNestingLimit(typeSpecifier.getLine(), *(*fieldList)[i]);
+ checkIsBelowStructNestingLimit(typeSpecifier.line, *(*fieldList)[i]);
}
return fieldList;
}
-TTypeSpecifierNonArray TParseContext::addStructure(const TSourceLoc &structLine,
- const TSourceLoc &nameLine,
- const TString *structName,
- TFieldList *fieldList)
+TPublicType TParseContext::addStructure(const TSourceLoc &structLine,
+ const TSourceLoc &nameLine,
+ const TString *structName,
+ TFieldList *fieldList)
{
TStructure *structure = new TStructure(structName, fieldList);
TType *structureType = new TType(structure);
// Store a bool in the struct if we're at global scope, to allow us to
// skip the local struct scoping workaround in HLSL.
+ structure->setUniqueId(TSymbolTable::nextUniqueId());
structure->setAtGlobalScope(symbolTable.atGlobalLevel());
if (!structName->empty())
@@ -3477,31 +3278,19 @@ TTypeSpecifierNonArray TParseContext::addStructure(const TSourceLoc &structLine,
getQualifierString(qualifier));
break;
}
- if (field.type()->isInvariant())
- {
- error(field.line(), "invalid qualifier on struct member", "invariant");
- }
- if (IsImage(field.type()->getBasicType()))
- {
- error(field.line(), "disallowed type in struct", field.type()->getBasicString());
- }
-
- checkIsMemoryQualifierNotSpecified(field.type()->getMemoryQualifier(), field.line());
-
- checkLocationIsNotSpecified(field.line(), field.type()->getLayoutQualifier());
}
- TTypeSpecifierNonArray typeSpecifierNonArray;
- typeSpecifierNonArray.initialize(EbtStruct, structLine);
- typeSpecifierNonArray.userDef = structureType;
- typeSpecifierNonArray.isStructSpecifier = true;
+ TPublicType publicType;
+ publicType.setBasic(EbtStruct, EvqTemporary, structLine);
+ publicType.userDef = structureType;
+ publicType.isStructSpecifier = true;
exitStructDeclaration();
- return typeSpecifierNonArray;
+ return publicType;
}
TIntermSwitch *TParseContext::addSwitch(TIntermTyped *init,
- TIntermBlock *statementList,
+ TIntermAggregate *statementList,
const TSourceLoc &loc)
{
TBasicType switchType = init->getBasicType();
@@ -3613,7 +3402,7 @@ TIntermTyped *TParseContext::createUnaryMath(TOperator op,
case EOpNegative:
case EOpPositive:
if (child->getBasicType() == EbtStruct || child->getBasicType() == EbtBool ||
- child->isArray() || IsOpaqueType(child->getBasicType()))
+ child->isArray() || IsSampler(child->getBasicType()))
{
return nullptr;
}
@@ -3622,14 +3411,7 @@ TIntermTyped *TParseContext::createUnaryMath(TOperator op,
break;
}
- TIntermUnary *node = new TIntermUnary(op, child);
- node->setLine(loc);
-
- TIntermTyped *foldedNode = node->fold(&mDiagnostics);
- if (foldedNode)
- return foldedNode;
-
- return node;
+ return intermediate.addUnaryMath(op, child, loc, funcReturnType);
}
TIntermTyped *TParseContext::addUnaryMath(TOperator op, TIntermTyped *child, const TSourceLoc &loc)
@@ -3778,14 +3560,6 @@ bool TParseContext::binaryOpCommonCheck(TOperator op,
GetOperatorString(op));
return false;
}
-
- if ((op == EOpAssign || op == EOpInitialize) &&
- left->getType().isStructureContainingImages())
- {
- error(loc, "undefined operation for structs containing images",
- GetOperatorString(op));
- return false;
- }
case EOpLessThan:
case EOpGreaterThan:
case EOpLessThanEqual:
@@ -3916,12 +3690,10 @@ TIntermTyped *TParseContext::addBinaryMathInternal(TOperator op,
case EOpLogicalAnd:
ASSERT(!left->isArray() && !right->isArray() && !left->getType().getStruct() &&
!right->getType().getStruct());
- if (left->getBasicType() != EbtBool || !left->isScalar() || !right->isScalar())
+ if (left->getBasicType() != EbtBool || left->isMatrix() || left->isVector())
{
return nullptr;
}
- // Basic types matching should have been already checked.
- ASSERT(right->getBasicType() == EbtBool);
break;
case EOpAdd:
case EOpSub:
@@ -4000,10 +3772,10 @@ TIntermTyped *TParseContext::addBinaryMathBooleanResult(TOperator op,
return node;
}
-TIntermBinary *TParseContext::createAssign(TOperator op,
- TIntermTyped *left,
- TIntermTyped *right,
- const TSourceLoc &loc)
+TIntermTyped *TParseContext::createAssign(TOperator op,
+ TIntermTyped *left,
+ TIntermTyped *right,
+ const TSourceLoc &loc)
{
if (binaryOpCommonCheck(op, left, right, loc))
{
@@ -4053,7 +3825,7 @@ TIntermTyped *TParseContext::addComma(TIntermTyped *left,
",");
}
- return TIntermediate::AddComma(left, right, loc, mShaderVersion);
+ return intermediate.addComma(left, right, loc, mShaderVersion);
}
TIntermBranch *TParseContext::addBranch(TOperator op, const TSourceLoc &loc)
@@ -4105,7 +3877,7 @@ TIntermBranch *TParseContext::addBranch(TOperator op,
void TParseContext::checkTextureOffsetConst(TIntermAggregate *functionCall)
{
ASSERT(!functionCall->isUserDefined());
- const TString &name = functionCall->getFunctionSymbolInfo()->getName();
+ const TString &name = functionCall->getName();
TIntermNode *offset = nullptr;
TIntermSequence *arguments = functionCall->getSequence();
if (name.compare(0, 16, "texelFetchOffset") == 0 ||
@@ -4153,99 +3925,6 @@ void TParseContext::checkTextureOffsetConst(TIntermAggregate *functionCall)
}
}
-// GLSL ES 3.10 Revision 4, 4.9 Memory Access Qualifiers
-void TParseContext::checkImageMemoryAccessForBuiltinFunctions(TIntermAggregate *functionCall)
-{
- ASSERT(!functionCall->isUserDefined());
- const TString &name = functionCall->getFunctionSymbolInfo()->getName();
-
- if (name.compare(0, 5, "image") == 0)
- {
- TIntermSequence *arguments = functionCall->getSequence();
- TIntermNode *imageNode = (*arguments)[0];
- TIntermSymbol *imageSymbol = imageNode->getAsSymbolNode();
-
- const TMemoryQualifier &memoryQualifier = imageSymbol->getMemoryQualifier();
-
- if (name.compare(5, 5, "Store") == 0)
- {
- if (memoryQualifier.readonly)
- {
- error(imageNode->getLine(),
- "'imageStore' cannot be used with images qualified as 'readonly'",
- imageSymbol->getSymbol().c_str());
- }
- }
- else if (name.compare(5, 4, "Load") == 0)
- {
- if (memoryQualifier.writeonly)
- {
- error(imageNode->getLine(),
- "'imageLoad' cannot be used with images qualified as 'writeonly'",
- imageSymbol->getSymbol().c_str());
- }
- }
- }
-}
-
-// GLSL ES 3.10 Revision 4, 13.51 Matching of Memory Qualifiers in Function Parameters
-void TParseContext::checkImageMemoryAccessForUserDefinedFunctions(
- const TFunction *functionDefinition,
- const TIntermAggregate *functionCall)
-{
- ASSERT(functionCall->isUserDefined());
-
- const TIntermSequence &arguments = *functionCall->getSequence();
-
- ASSERT(functionDefinition->getParamCount() == arguments.size());
-
- for (size_t i = 0; i < arguments.size(); ++i)
- {
- const TType &functionArgumentType = arguments[i]->getAsTyped()->getType();
- const TType &functionParameterType = *functionDefinition->getParam(i).type;
- ASSERT(functionArgumentType.getBasicType() == functionParameterType.getBasicType());
-
- if (IsImage(functionArgumentType.getBasicType()))
- {
- const TMemoryQualifier &functionArgumentMemoryQualifier =
- functionArgumentType.getMemoryQualifier();
- const TMemoryQualifier &functionParameterMemoryQualifier =
- functionParameterType.getMemoryQualifier();
- if (functionArgumentMemoryQualifier.readonly &&
- !functionParameterMemoryQualifier.readonly)
- {
- error(functionCall->getLine(),
- "Function call discards the 'readonly' qualifier from image",
- arguments[i]->getAsSymbolNode()->getSymbol().c_str());
- }
-
- if (functionArgumentMemoryQualifier.writeonly &&
- !functionParameterMemoryQualifier.writeonly)
- {
- error(functionCall->getLine(),
- "Function call discards the 'writeonly' qualifier from image",
- arguments[i]->getAsSymbolNode()->getSymbol().c_str());
- }
-
- if (functionArgumentMemoryQualifier.coherent &&
- !functionParameterMemoryQualifier.coherent)
- {
- error(functionCall->getLine(),
- "Function call discards the 'coherent' qualifier from image",
- arguments[i]->getAsSymbolNode()->getSymbol().c_str());
- }
-
- if (functionArgumentMemoryQualifier.volatileQualifier &&
- !functionParameterMemoryQualifier.volatileQualifier)
- {
- error(functionCall->getLine(),
- "Function call discards the 'volatile' qualifier from image",
- arguments[i]->getAsSymbolNode()->getSymbol().c_str());
- }
- }
- }
-}
-
TIntermTyped *TParseContext::addFunctionCallOrMethod(TFunction *fnCall,
TIntermNode *paramNode,
TIntermNode *thisNode,
@@ -4361,8 +4040,7 @@ TIntermTyped *TParseContext::addFunctionCallOrMethod(TFunction *fnCall,
// See if we can constant fold a built-in. Note that this may be possible even
// if it is not const-qualified.
- TIntermTyped *foldedNode =
- intermediate.foldAggregateBuiltIn(aggregate, &mDiagnostics);
+ TIntermTyped *foldedNode = intermediate.foldAggregateBuiltIn(aggregate);
if (foldedNode)
{
callNode = foldedNode;
@@ -4387,20 +4065,15 @@ TIntermTyped *TParseContext::addFunctionCallOrMethod(TFunction *fnCall,
// if builtIn == true, it's definitely a builtIn function with EOpNull
if (!builtIn)
aggregate->setUserDefined();
- aggregate->getFunctionSymbolInfo()->setFromFunction(*fnCandidate);
+ aggregate->setName(fnCandidate->getMangledName());
+ aggregate->setFunctionId(fnCandidate->getUniqueId());
- // This needs to happen after the function info including name is set
+ // This needs to happen after the name is set
if (builtIn)
{
aggregate->setBuiltInFunctionPrecision();
checkTextureOffsetConst(aggregate);
-
- checkImageMemoryAccessForBuiltinFunctions(aggregate);
- }
- else
- {
- checkImageMemoryAccessForUserDefinedFunctions(fnCandidate, aggregate);
}
callNode = aggregate;
@@ -4422,46 +4095,34 @@ TIntermTyped *TParseContext::addFunctionCallOrMethod(TFunction *fnCall,
}
TIntermTyped *TParseContext::addTernarySelection(TIntermTyped *cond,
- TIntermTyped *trueExpression,
- TIntermTyped *falseExpression,
+ TIntermTyped *trueBlock,
+ TIntermTyped *falseBlock,
const TSourceLoc &loc)
{
checkIsScalarBool(loc, cond);
- if (trueExpression->getType() != falseExpression->getType())
+ if (trueBlock->getType() != falseBlock->getType())
{
- binaryOpError(loc, ":", trueExpression->getCompleteString(),
- falseExpression->getCompleteString());
- return falseExpression;
+ binaryOpError(loc, ":", trueBlock->getCompleteString(), falseBlock->getCompleteString());
+ return falseBlock;
}
- if (IsOpaqueType(trueExpression->getBasicType()))
- {
- // ESSL 1.00 section 4.1.7
- // ESSL 3.00 section 4.1.7
- // Opaque/sampler types are not allowed in most types of expressions, including ternary.
- // Note that structs containing opaque types don't need to be checked as structs are
- // forbidden below.
- error(loc, "ternary operator is not allowed for opaque types", ":");
- return falseExpression;
- }
-
// ESSL1 sections 5.2 and 5.7:
// ESSL3 section 5.7:
// Ternary operator is not among the operators allowed for structures/arrays.
- if (trueExpression->isArray() || trueExpression->getBasicType() == EbtStruct)
+ if (trueBlock->isArray() || trueBlock->getBasicType() == EbtStruct)
{
error(loc, "ternary operator is not allowed for structures or arrays", ":");
- return falseExpression;
+ return falseBlock;
}
// WebGL2 section 5.26, the following results in an error:
// "Ternary operator applied to void, arrays, or structs containing arrays"
- if (mShaderSpec == SH_WEBGL2_SPEC && trueExpression->getBasicType() == EbtVoid)
+ if (mShaderSpec == SH_WEBGL2_SPEC && trueBlock->getBasicType() == EbtVoid)
{
error(loc, "ternary operator is not allowed for void", ":");
- return falseExpression;
+ return falseBlock;
}
- return TIntermediate::AddTernarySelection(cond, trueExpression, falseExpression, loc);
+ return intermediate.addSelection(cond, trueBlock, falseBlock, loc);
}
//
@@ -4488,5 +4149,3 @@ int PaParseStrings(size_t count,
return (error == 0) && (context->numErrors() == 0) ? 0 : 1;
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/ParseContext.h b/gfx/angle/src/compiler/translator/ParseContext.h
index cdc80755a..cf153db36 100755
--- a/gfx/angle/src/compiler/translator/ParseContext.h
+++ b/gfx/angle/src/compiler/translator/ParseContext.h
@@ -11,12 +11,8 @@
#include "compiler/translator/DirectiveHandler.h"
#include "compiler/translator/Intermediate.h"
#include "compiler/translator/SymbolTable.h"
-#include "compiler/translator/QualifierTypes.h"
#include "compiler/preprocessor/Preprocessor.h"
-namespace sh
-{
-
struct TMatrixFields
{
bool wholeRow;
@@ -34,12 +30,47 @@ class TParseContext : angle::NonCopyable
public:
TParseContext(TSymbolTable &symt,
TExtensionBehavior &ext,
+ TIntermediate &interm,
sh::GLenum type,
ShShaderSpec spec,
- ShCompileOptions options,
+ int options,
bool checksPrecErrors,
TInfoSink &is,
- const ShBuiltInResources &resources);
+ const ShBuiltInResources &resources)
+ : intermediate(interm),
+ symbolTable(symt),
+ mDeferredSingleDeclarationErrorCheck(false),
+ mShaderType(type),
+ mShaderSpec(spec),
+ mCompileOptions(options),
+ mShaderVersion(100),
+ mTreeRoot(nullptr),
+ mLoopNestingLevel(0),
+ mStructNestingLevel(0),
+ mSwitchNestingLevel(0),
+ mCurrentFunctionType(nullptr),
+ mFunctionReturnsValue(false),
+ mChecksPrecisionErrors(checksPrecErrors),
+ mFragmentPrecisionHighOnESSL1(false),
+ mDefaultMatrixPacking(EmpColumnMajor),
+ mDefaultBlockStorage(EbsShared),
+ mDiagnostics(is),
+ mDirectiveHandler(ext,
+ mDiagnostics,
+ mShaderVersion,
+ mShaderType,
+ resources.WEBGL_debug_shader_precision == 1),
+ mPreprocessor(&mDiagnostics, &mDirectiveHandler),
+ mScanner(nullptr),
+ mUsesFragData(false),
+ mUsesFragColor(false),
+ mUsesSecondaryOutputs(false),
+ mMinProgramTexelOffset(resources.MinProgramTexelOffset),
+ mMaxProgramTexelOffset(resources.MaxProgramTexelOffset),
+ mComputeShaderLocalSizeDeclared(false)
+ {
+ mComputeShaderLocalSize.fill(-1);
+ }
const pp::Preprocessor &getPreprocessor() const { return mPreprocessor; }
pp::Preprocessor &getPreprocessor() { return mPreprocessor; }
@@ -62,8 +93,8 @@ class TParseContext : angle::NonCopyable
const char *token,
const char *extraInfo = "");
- TIntermBlock *getTreeRoot() const { return mTreeRoot; }
- void setTreeRoot(TIntermBlock *treeRoot) { mTreeRoot = treeRoot; }
+ TIntermNode *getTreeRoot() const { return mTreeRoot; }
+ void setTreeRoot(TIntermNode *treeRoot) { mTreeRoot = treeRoot; }
bool getFragmentPrecisionHigh() const
{
@@ -88,12 +119,6 @@ class TParseContext : angle::NonCopyable
bool isComputeShaderLocalSizeDeclared() const { return mComputeShaderLocalSizeDeclared; }
sh::WorkGroupSize getComputeShaderLocalSize() const;
- void enterFunctionDeclaration() { mDeclaringFunction = true; }
-
- void exitFunctionDeclaration() { mDeclaringFunction = false; }
-
- bool declaringFunction() const { return mDeclaringFunction; }
-
// This method is guaranteed to succeed, even if no variable with 'name' exists.
const TVariable *getNamedVariable(const TSourceLoc &location, const TString *name, const TSymbol *symbol);
TIntermTyped *parseVariableIdentifier(const TSourceLoc &location,
@@ -127,17 +152,16 @@ class TParseContext : angle::NonCopyable
bool checkIsNonVoid(const TSourceLoc &line, const TString &identifier, const TBasicType &type);
void checkIsScalarBool(const TSourceLoc &line, const TIntermTyped *type);
void checkIsScalarBool(const TSourceLoc &line, const TPublicType &pType);
- bool checkIsNotSampler(const TSourceLoc &line,
- const TTypeSpecifierNonArray &pType,
- const char *reason);
- bool checkIsNotImage(const TSourceLoc &line,
- const TTypeSpecifierNonArray &pType,
- const char *reason);
+ bool checkIsNotSampler(const TSourceLoc &line, const TPublicType &pType, const char *reason);
void checkDeclaratorLocationIsNotSpecified(const TSourceLoc &line, const TPublicType &pType);
void checkLocationIsNotSpecified(const TSourceLoc &location,
const TLayoutQualifier &layoutQualifier);
+ void checkOutParameterIsNotSampler(const TSourceLoc &line,
+ TQualifier qualifier,
+ const TType &type);
void checkIsParameterQualifierValid(const TSourceLoc &line,
- const TTypeQualifierBuilder &typeQualifierBuilder,
+ TQualifier qualifier,
+ TQualifier paramQualifier,
TType *type);
bool checkCanUseExtension(const TSourceLoc &line, const TString &extension);
void singleDeclarationErrorCheck(const TPublicType &publicType,
@@ -147,16 +171,14 @@ class TParseContext : angle::NonCopyable
int versionRequired);
bool checkWorkGroupSizeIsNotSpecified(const TSourceLoc &location,
const TLayoutQualifier &layoutQualifier);
- bool checkInternalFormatIsNotSpecified(const TSourceLoc &location,
- TLayoutImageInternalFormat internalFormat);
+
void functionCallLValueErrorCheck(const TFunction *fnCandidate, TIntermAggregate *fnCall);
- void checkInvariantVariableQualifier(bool invariant,
- const TQualifier qualifier,
- const TSourceLoc &invariantLocation);
+ void checkInvariantIsOutVariableES3(const TQualifier qualifier,
+ const TSourceLoc &invariantLocation);
void checkInputOutputTypeIsValidES3(const TQualifier qualifier,
const TPublicType &type,
const TSourceLoc &qualifierLocation);
- void checkLocalVariableConstStorageQualifier(const TQualifierWrapperBase &qualifier);
+
const TPragma &pragma() const { return mDirectiveHandler.pragma(); }
const TExtensionBehavior &extensionBehavior() const { return mDirectiveHandler.extensionBehavior(); }
bool supportsExtension(const char *extension);
@@ -164,84 +186,86 @@ class TParseContext : angle::NonCopyable
void handleExtensionDirective(const TSourceLoc &loc, const char *extName, const char *behavior);
void handlePragmaDirective(const TSourceLoc &loc, const char *name, const char *value, bool stdgl);
+ bool containsSampler(const TType &type);
const TFunction* findFunction(
const TSourceLoc &line, TFunction *pfnCall, int inputShaderVersion, bool *builtIn = 0);
bool executeInitializer(const TSourceLoc &line,
const TString &identifier,
const TPublicType &pType,
TIntermTyped *initializer,
- TIntermBinary **initNode);
+ TIntermNode **intermNode);
- void addFullySpecifiedType(TPublicType *typeSpecifier);
- TPublicType addFullySpecifiedType(const TTypeQualifierBuilder &typeQualifierBuilder,
+ TPublicType addFullySpecifiedType(TQualifier qualifier,
+ bool invariant,
+ TLayoutQualifier layoutQualifier,
const TPublicType &typeSpecifier);
- TIntermDeclaration *parseSingleDeclaration(TPublicType &publicType,
- const TSourceLoc &identifierOrTypeLocation,
- const TString &identifier);
- TIntermDeclaration *parseSingleArrayDeclaration(TPublicType &publicType,
- const TSourceLoc &identifierLocation,
- const TString &identifier,
- const TSourceLoc &indexLocation,
- TIntermTyped *indexExpression);
- TIntermDeclaration *parseSingleInitDeclaration(const TPublicType &publicType,
- const TSourceLoc &identifierLocation,
- const TString &identifier,
- const TSourceLoc &initLocation,
- TIntermTyped *initializer);
+ TIntermAggregate *parseSingleDeclaration(TPublicType &publicType,
+ const TSourceLoc &identifierOrTypeLocation,
+ const TString &identifier);
+ TIntermAggregate *parseSingleArrayDeclaration(TPublicType &publicType,
+ const TSourceLoc &identifierLocation,
+ const TString &identifier,
+ const TSourceLoc &indexLocation,
+ TIntermTyped *indexExpression);
+ TIntermAggregate *parseSingleInitDeclaration(const TPublicType &publicType,
+ const TSourceLoc &identifierLocation,
+ const TString &identifier,
+ const TSourceLoc &initLocation,
+ TIntermTyped *initializer);
// Parse a declaration like "type a[n] = initializer"
// Note that this does not apply to declarations like "type[n] a = initializer"
- TIntermDeclaration *parseSingleArrayInitDeclaration(TPublicType &publicType,
- const TSourceLoc &identifierLocation,
- const TString &identifier,
- const TSourceLoc &indexLocation,
- TIntermTyped *indexExpression,
- const TSourceLoc &initLocation,
- TIntermTyped *initializer);
-
- TIntermAggregate *parseInvariantDeclaration(const TTypeQualifierBuilder &typeQualifierBuilder,
+ TIntermAggregate *parseSingleArrayInitDeclaration(TPublicType &publicType,
+ const TSourceLoc &identifierLocation,
+ const TString &identifier,
+ const TSourceLoc &indexLocation,
+ TIntermTyped *indexExpression,
+ const TSourceLoc &initLocation,
+ TIntermTyped *initializer);
+
+ TIntermAggregate *parseInvariantDeclaration(const TSourceLoc &invariantLoc,
const TSourceLoc &identifierLoc,
const TString *identifier,
const TSymbol *symbol);
- void parseDeclarator(TPublicType &publicType,
- const TSourceLoc &identifierLocation,
- const TString &identifier,
- TIntermDeclaration *declarationOut);
- void parseArrayDeclarator(TPublicType &publicType,
- const TSourceLoc &identifierLocation,
- const TString &identifier,
- const TSourceLoc &arrayLocation,
- TIntermTyped *indexExpression,
- TIntermDeclaration *declarationOut);
- void parseInitDeclarator(const TPublicType &publicType,
- const TSourceLoc &identifierLocation,
- const TString &identifier,
- const TSourceLoc &initLocation,
- TIntermTyped *initializer,
- TIntermDeclaration *declarationOut);
+ TIntermAggregate *parseDeclarator(TPublicType &publicType,
+ TIntermAggregate *aggregateDeclaration,
+ const TSourceLoc &identifierLocation,
+ const TString &identifier);
+ TIntermAggregate *parseArrayDeclarator(TPublicType &publicType,
+ TIntermAggregate *aggregateDeclaration,
+ const TSourceLoc &identifierLocation,
+ const TString &identifier,
+ const TSourceLoc &arrayLocation,
+ TIntermTyped *indexExpression);
+ TIntermAggregate *parseInitDeclarator(const TPublicType &publicType,
+ TIntermAggregate *aggregateDeclaration,
+ const TSourceLoc &identifierLocation,
+ const TString &identifier,
+ const TSourceLoc &initLocation,
+ TIntermTyped *initializer);
// Parse a declarator like "a[n] = initializer"
- void parseArrayInitDeclarator(const TPublicType &publicType,
- const TSourceLoc &identifierLocation,
- const TString &identifier,
- const TSourceLoc &indexLocation,
- TIntermTyped *indexExpression,
- const TSourceLoc &initLocation,
- TIntermTyped *initializer,
- TIntermDeclaration *declarationOut);
-
- void parseGlobalLayoutQualifier(const TTypeQualifierBuilder &typeQualifierBuilder);
- TIntermAggregate *addFunctionPrototypeDeclaration(const TFunction &parsedFunction,
+ TIntermAggregate *parseArrayInitDeclarator(const TPublicType &publicType,
+ TIntermAggregate *aggregateDeclaration,
+ const TSourceLoc &identifierLocation,
+ const TString &identifier,
+ const TSourceLoc &indexLocation,
+ TIntermTyped *indexExpression,
+ const TSourceLoc &initLocation,
+ TIntermTyped *initializer);
+
+ void parseGlobalLayoutQualifier(const TPublicType &typeQualifier);
+ TIntermAggregate *addFunctionPrototypeDeclaration(const TFunction &function,
const TSourceLoc &location);
- TIntermFunctionDefinition *addFunctionDefinition(const TFunction &function,
- TIntermAggregate *functionParameters,
- TIntermBlock *functionBody,
- const TSourceLoc &location);
- void parseFunctionDefinitionHeader(const TSourceLoc &location,
- TFunction **function,
- TIntermAggregate **aggregateOut);
+ TIntermAggregate *addFunctionDefinition(const TFunction &function,
+ TIntermAggregate *functionPrototype,
+ TIntermAggregate *functionBody,
+ const TSourceLoc &location);
+ void parseFunctionPrototype(const TSourceLoc &location,
+ TFunction *function,
+ TIntermAggregate **aggregateOut);
TFunction *parseFunctionDeclarator(const TSourceLoc &location,
TFunction *function);
TFunction *parseFunctionHeader(const TPublicType &type,
@@ -253,6 +277,8 @@ class TParseContext : angle::NonCopyable
TFunction *fnCall,
const TSourceLoc &line);
+ TIntermTyped *addConstStruct(
+ const TString &identifier, TIntermTyped *node, const TSourceLoc& line);
TIntermTyped *addIndexExpression(TIntermTyped *baseExpression,
const TSourceLoc& location,
TIntermTyped *indexExpression);
@@ -261,24 +287,20 @@ class TParseContext : angle::NonCopyable
const TString &fieldString,
const TSourceLoc &fieldLocation);
- TFieldList *addStructDeclaratorListWithQualifiers(
- const TTypeQualifierBuilder &typeQualifierBuilder,
- TPublicType *typeSpecifier,
- TFieldList *fieldList);
TFieldList *addStructDeclaratorList(const TPublicType &typeSpecifier, TFieldList *fieldList);
- TTypeSpecifierNonArray addStructure(const TSourceLoc &structLine,
+ TPublicType addStructure(const TSourceLoc &structLine,
+ const TSourceLoc &nameLine,
+ const TString *structName,
+ TFieldList *fieldList);
+
+ TIntermAggregate* addInterfaceBlock(const TPublicType &typeQualifier,
const TSourceLoc &nameLine,
- const TString *structName,
- TFieldList *fieldList);
-
- TIntermDeclaration *addInterfaceBlock(const TTypeQualifierBuilder &typeQualifierBuilder,
- const TSourceLoc &nameLine,
- const TString &blockName,
- TFieldList *fieldList,
- const TString *instanceName,
- const TSourceLoc &instanceLine,
- TIntermTyped *arrayIndex,
- const TSourceLoc &arrayIndexLine);
+ const TString &blockName,
+ TFieldList *fieldList,
+ const TString *instanceName,
+ const TSourceLoc &instanceLine,
+ TIntermTyped *arrayIndex,
+ const TSourceLoc& arrayIndexLine);
void parseLocalSize(const TString &qualifierType,
const TSourceLoc &qualifierTypeLine,
@@ -293,10 +315,11 @@ class TParseContext : angle::NonCopyable
const TSourceLoc &qualifierTypeLine,
int intValue,
const TSourceLoc &intValueLine);
- TTypeQualifierBuilder *createTypeQualifierBuilder(const TSourceLoc &loc);
TLayoutQualifier joinLayoutQualifiers(TLayoutQualifier leftQualifier,
TLayoutQualifier rightQualifier,
const TSourceLoc &rightQualifierLocation);
+ TPublicType joinInterpolationQualifiers(const TSourceLoc &interpolationLoc, TQualifier interpolationQualifier,
+ const TSourceLoc &storageLoc, TQualifier storageQualifier);
// Performs an error check for embedded struct declarations.
void enterStructDeclaration(const TSourceLoc &line, const TString &identifier);
@@ -304,9 +327,7 @@ class TParseContext : angle::NonCopyable
void checkIsBelowStructNestingLimit(const TSourceLoc &line, const TField &field);
- TIntermSwitch *addSwitch(TIntermTyped *init,
- TIntermBlock *statementList,
- const TSourceLoc &loc);
+ TIntermSwitch *addSwitch(TIntermTyped *init, TIntermAggregate *statementList, const TSourceLoc &loc);
TIntermCase *addCase(TIntermTyped *condition, const TSourceLoc &loc);
TIntermCase *addDefault(const TSourceLoc &loc);
@@ -325,22 +346,17 @@ class TParseContext : angle::NonCopyable
TIntermBranch *addBranch(TOperator op, TIntermTyped *returnValue, const TSourceLoc &loc);
void checkTextureOffsetConst(TIntermAggregate *functionCall);
- void checkImageMemoryAccessForBuiltinFunctions(TIntermAggregate *functionCall);
- void checkImageMemoryAccessForUserDefinedFunctions(const TFunction *functionDefinition,
- const TIntermAggregate *functionCall);
TIntermTyped *addFunctionCallOrMethod(TFunction *fnCall,
TIntermNode *paramNode,
TIntermNode *thisNode,
const TSourceLoc &loc,
bool *fatalError);
- TIntermTyped *addTernarySelection(TIntermTyped *cond,
- TIntermTyped *trueExpression,
- TIntermTyped *falseExpression,
- const TSourceLoc &line);
+ TIntermTyped *addTernarySelection(
+ TIntermTyped *cond, TIntermTyped *trueBlock, TIntermTyped *falseBlock, const TSourceLoc &line);
// TODO(jmadill): make these private
- TIntermediate intermediate; // to build a parse tree
+ TIntermediate &intermediate; // to hold and build a parse tree
TSymbolTable &symbolTable; // symbol table that goes with the language currently being parsed
private:
@@ -352,6 +368,18 @@ class TParseContext : angle::NonCopyable
const char *reason,
const char *token);
+ // Constant folding for element access. Note that the returned node does not have the correct
+ // type - it is expected to be fixed later.
+ TIntermConstantUnion *foldVectorSwizzle(TVectorFields &fields,
+ TIntermConstantUnion *baseNode,
+ const TSourceLoc &location);
+ TIntermConstantUnion *foldMatrixSubscript(int index,
+ TIntermConstantUnion *baseNode,
+ const TSourceLoc &location);
+ TIntermConstantUnion *foldArraySubscript(int index,
+ TIntermConstantUnion *baseNode,
+ const TSourceLoc &location);
+
bool declareVariable(const TSourceLoc &line, const TString &identifier, const TType &type, TVariable **variable);
void checkCanBeDeclaredWithoutInitializer(const TSourceLoc &line,
@@ -364,24 +392,10 @@ class TParseContext : angle::NonCopyable
// Assumes that multiplication op has already been set based on the types.
bool isMultiplicationTypeCombinationValid(TOperator op, const TType &left, const TType &right);
- bool checkIsMemoryQualifierNotSpecified(const TMemoryQualifier &memoryQualifier,
- const TSourceLoc &location);
- void checkOutParameterIsNotImage(const TSourceLoc &line,
- TQualifier qualifier,
- const TType &type);
- void checkOutParameterIsNotOpaqueType(const TSourceLoc &line,
- TQualifier qualifier,
- const TType &type);
- void checkOutParameterIsNotSampler(const TSourceLoc &line,
- TQualifier qualifier,
- const TType &type);
-
TIntermTyped *addBinaryMathInternal(
TOperator op, TIntermTyped *left, TIntermTyped *right, const TSourceLoc &loc);
- TIntermBinary *createAssign(TOperator op,
- TIntermTyped *left,
- TIntermTyped *right,
- const TSourceLoc &loc);
+ TIntermTyped *createAssign(
+ TOperator op, TIntermTyped *left, TIntermTyped *right, const TSourceLoc &loc);
// The funcReturnType parameter is expected to be non-null when the operation is a built-in function.
// It is expected to be null for other unary operators.
TIntermTyped *createUnaryMath(
@@ -395,18 +409,16 @@ class TParseContext : angle::NonCopyable
bool mDeferredSingleDeclarationErrorCheck;
sh::GLenum mShaderType; // vertex or fragment language (future: pack or unpack)
- ShShaderSpec mShaderSpec; // The language specification compiler conforms to - GLES2 or WebGL.
- ShCompileOptions mCompileOptions; // Options passed to TCompiler
+ ShShaderSpec mShaderSpec; // The language specification compiler conforms to - GLES2 or WebGL.
+ int mCompileOptions; // Options passed to TCompiler
int mShaderVersion;
- TIntermBlock *mTreeRoot; // root of parse tree being created
+ TIntermNode *mTreeRoot; // root of parse tree being created
int mLoopNestingLevel; // 0 if outside all loops
- int mStructNestingLevel; // incremented while parsing a struct declaration
+ int mStructNestingLevel; // incremented while parsing a struct declaration
int mSwitchNestingLevel; // 0 if outside all switch statements
- const TType
- *mCurrentFunctionType; // the return type of the function that's currently being parsed
+ const TType *mCurrentFunctionType; // the return type of the function that's currently being parsed
bool mFunctionReturnsValue; // true if a non-void function has a return
- bool mChecksPrecisionErrors; // true if an error will be generated when a variable is declared
- // without precision, explicit or implicit.
+ bool mChecksPrecisionErrors; // true if an error will be generated when a variable is declared without precision, explicit or implicit.
bool mFragmentPrecisionHighOnESSL1; // true if highp precision is supported when compiling
// ESSL1.
TLayoutMatrixPacking mDefaultMatrixPacking;
@@ -426,13 +438,9 @@ class TParseContext : angle::NonCopyable
// keep track of local group size declared in layout. It should be declared only once.
bool mComputeShaderLocalSizeDeclared;
sh::WorkGroupSize mComputeShaderLocalSize;
- // keeps track whether we are declaring / defining a function
- bool mDeclaringFunction;
};
int PaParseStrings(
size_t count, const char *const string[], const int length[], TParseContext *context);
-} // namespace sh
-
#endif // COMPILER_TRANSLATOR_PARSECONTEXT_H_
diff --git a/gfx/angle/src/compiler/translator/PoolAlloc.cpp b/gfx/angle/src/compiler/translator/PoolAlloc.cpp
index 3b44afe33..27e1c06b5 100755
--- a/gfx/angle/src/compiler/translator/PoolAlloc.cpp
+++ b/gfx/angle/src/compiler/translator/PoolAlloc.cpp
@@ -50,18 +50,29 @@ void SetGlobalPoolAllocator(TPoolAllocator* poolAllocator)
// Implement the functionality of the TPoolAllocator class, which
// is documented in PoolAlloc.h.
//
-TPoolAllocator::TPoolAllocator(int growthIncrement, int allocationAlignment)
- : alignment(allocationAlignment),
-#if !defined(ANGLE_TRANSLATOR_DISABLE_POOL_ALLOC)
- pageSize(growthIncrement),
- freeList(0),
- inUseList(0),
- numCalls(0),
- totalBytes(0),
-#endif
- mLocked(false)
+TPoolAllocator::TPoolAllocator(int growthIncrement, int allocationAlignment) :
+ pageSize(growthIncrement),
+ alignment(allocationAlignment),
+ freeList(0),
+ inUseList(0),
+ numCalls(0),
+ totalBytes(0),
+ mLocked(false)
{
//
+ // Don't allow page sizes we know are smaller than all common
+ // OS page sizes.
+ //
+ if (pageSize < 4*1024)
+ pageSize = 4*1024;
+
+ //
+ // A large currentPageOffset indicates a new page needs to
+ // be obtained to allocate memory.
+ //
+ currentPageOffset = pageSize;
+
+ //
// Adjust alignment to be at least pointer aligned and
// power of 2.
//
@@ -75,20 +86,6 @@ TPoolAllocator::TPoolAllocator(int growthIncrement, int allocationAlignment)
alignment = a;
alignmentMask = a - 1;
-#if !defined(ANGLE_TRANSLATOR_DISABLE_POOL_ALLOC)
- //
- // Don't allow page sizes we know are smaller than all common
- // OS page sizes.
- //
- if (pageSize < 4 * 1024)
- pageSize = 4 * 1024;
-
- //
- // A large currentPageOffset indicates a new page needs to
- // be obtained to allocate memory.
- //
- currentPageOffset = pageSize;
-
//
// Align header skip
//
@@ -96,14 +93,10 @@ TPoolAllocator::TPoolAllocator(int growthIncrement, int allocationAlignment)
if (headerSkip < sizeof(tHeader)) {
headerSkip = (sizeof(tHeader) + alignmentMask) & ~alignmentMask;
}
-#else // !defined(ANGLE_TRANSLATOR_DISABLE_POOL_ALLOC)
- mStack.push_back({});
-#endif
}
TPoolAllocator::~TPoolAllocator()
{
-#if !defined(ANGLE_TRANSLATOR_DISABLE_POOL_ALLOC)
while (inUseList) {
tHeader* next = inUseList->nextPage;
inUseList->~tHeader();
@@ -120,16 +113,6 @@ TPoolAllocator::~TPoolAllocator()
delete [] reinterpret_cast<char*>(freeList);
freeList = next;
}
-#else // !defined(ANGLE_TRANSLATOR_DISABLE_POOL_ALLOC)
- for (auto &allocs : mStack)
- {
- for (auto alloc : allocs)
- {
- free(alloc);
- }
- }
- mStack.clear();
-#endif
}
// Support MSVC++ 6.0
@@ -170,18 +153,14 @@ void TAllocation::checkGuardBlock(unsigned char* blockMem, unsigned char val, co
void TPoolAllocator::push()
{
-#if !defined(ANGLE_TRANSLATOR_DISABLE_POOL_ALLOC)
tAllocState state = { currentPageOffset, inUseList };
- mStack.push_back(state);
-
+ stack.push_back(state);
+
//
// Indicate there is no current page to allocate from.
//
currentPageOffset = pageSize;
-#else // !defined(ANGLE_TRANSLATOR_DISABLE_POOL_ALLOC)
- mStack.push_back({});
-#endif
}
//
@@ -193,12 +172,11 @@ void TPoolAllocator::push()
//
void TPoolAllocator::pop()
{
- if (mStack.size() < 1)
+ if (stack.size() < 1)
return;
-#if !defined(ANGLE_TRANSLATOR_DISABLE_POOL_ALLOC)
- tHeader *page = mStack.back().page;
- currentPageOffset = mStack.back().offset;
+ tHeader* page = stack.back().page;
+ currentPageOffset = stack.back().offset;
while (inUseList != page) {
// invoke destructor to free allocation list
@@ -214,14 +192,7 @@ void TPoolAllocator::pop()
inUseList = nextInUse;
}
- mStack.pop_back();
-#else // !defined(ANGLE_TRANSLATOR_DISABLE_POOL_ALLOC)
- for (auto &alloc : mStack.back())
- {
- free(alloc);
- }
- mStack.pop_back();
-#endif
+ stack.pop_back();
}
//
@@ -230,7 +201,7 @@ void TPoolAllocator::pop()
//
void TPoolAllocator::popAll()
{
- while (mStack.size() > 0)
+ while (stack.size() > 0)
pop();
}
@@ -238,7 +209,6 @@ void* TPoolAllocator::allocate(size_t numBytes)
{
ASSERT(!mLocked);
-#if !defined(ANGLE_TRANSLATOR_DISABLE_POOL_ALLOC)
//
// Just keep some interesting statistics.
//
@@ -315,14 +285,6 @@ void* TPoolAllocator::allocate(size_t numBytes)
currentPageOffset = (headerSkip + allocationSize + alignmentMask) & ~alignmentMask;
return initializeAllocation(inUseList, ret, numBytes);
-#else // !defined(ANGLE_TRANSLATOR_DISABLE_POOL_ALLOC)
- void *alloc = malloc(numBytes + alignmentMask);
- mStack.back().push_back(alloc);
-
- intptr_t intAlloc = reinterpret_cast<intptr_t>(alloc);
- intAlloc = (intAlloc + alignmentMask) & ~alignmentMask;
- return reinterpret_cast<void *>(intAlloc);
-#endif
}
void TPoolAllocator::lock()
diff --git a/gfx/angle/src/compiler/translator/PoolAlloc.h b/gfx/angle/src/compiler/translator/PoolAlloc.h
index f15b3e05d..026e7a5c1 100755
--- a/gfx/angle/src/compiler/translator/PoolAlloc.h
+++ b/gfx/angle/src/compiler/translator/PoolAlloc.h
@@ -157,12 +157,7 @@ public:
void lock();
void unlock();
- private:
- size_t alignment; // all returned allocations will be aligned at
- // this granularity, which will be a power of 2
- size_t alignmentMask;
-
-#if !defined(ANGLE_TRANSLATOR_DISABLE_POOL_ALLOC)
+protected:
friend struct tHeader;
struct tHeader {
@@ -205,21 +200,20 @@ public:
}
size_t pageSize; // granularity of allocation from the OS
+ size_t alignment; // all returned allocations will be aligned at
+ // this granularity, which will be a power of 2
+ size_t alignmentMask;
size_t headerSkip; // amount of memory to skip to make room for the
// header (basically, size of header, rounded
// up to make it aligned
size_t currentPageOffset; // next offset in top of inUseList to allocate from
tHeader* freeList; // list of popped memory
tHeader* inUseList; // list of all memory currently being used
- tAllocStack mStack; // stack of where to allocate from, to partition pool
+ tAllocStack stack; // stack of where to allocate from, to partition pool
int numCalls; // just an interesting statistic
size_t totalBytes; // just an interesting statistic
-
-#else // !defined(ANGLE_TRANSLATOR_DISABLE_POOL_ALLOC)
- std::vector<std::vector<void *>> mStack;
-#endif
-
+private:
TPoolAllocator& operator=(const TPoolAllocator&); // dont allow assignment operator
TPoolAllocator(const TPoolAllocator&); // dont allow default copy constructor
bool mLocked;
diff --git a/gfx/angle/src/compiler/translator/PruneEmptyDeclarations.cpp b/gfx/angle/src/compiler/translator/PruneEmptyDeclarations.cpp
index 7ec434796..8cbeb7dee 100755
--- a/gfx/angle/src/compiler/translator/PruneEmptyDeclarations.cpp
+++ b/gfx/angle/src/compiler/translator/PruneEmptyDeclarations.cpp
@@ -9,9 +9,6 @@
#include "compiler/translator/IntermNode.h"
-namespace sh
-{
-
namespace
{
@@ -21,7 +18,7 @@ class PruneEmptyDeclarationsTraverser : private TIntermTraverser
static void apply(TIntermNode *root);
private:
PruneEmptyDeclarationsTraverser();
- bool visitDeclaration(Visit, TIntermDeclaration *node) override;
+ bool visitAggregate(Visit, TIntermAggregate *node) override;
};
void PruneEmptyDeclarationsTraverser::apply(TIntermNode *root)
@@ -36,71 +33,65 @@ PruneEmptyDeclarationsTraverser::PruneEmptyDeclarationsTraverser()
{
}
-bool PruneEmptyDeclarationsTraverser::visitDeclaration(Visit, TIntermDeclaration *node)
+bool PruneEmptyDeclarationsTraverser::visitAggregate(Visit, TIntermAggregate *node)
{
- TIntermSequence *sequence = node->getSequence();
- if (sequence->size() >= 1)
+ if (node->getOp() == EOpDeclaration)
{
- TIntermSymbol *sym = sequence->front()->getAsSymbolNode();
- // Prune declarations without a variable name, unless it's an interface block declaration.
- if (sym != nullptr && sym->getSymbol() == "" && !sym->isInterfaceBlock())
+ TIntermSequence *sequence = node->getSequence();
+ if (sequence->size() >= 1)
{
- if (sequence->size() > 1)
- {
- // Generate a replacement that will remove the empty declarator in the beginning of
- // a declarator list. Example of a declaration that will be changed:
- // float, a;
- // will be changed to
- // float a;
- // This applies also to struct declarations.
- TIntermSequence emptyReplacement;
- mMultiReplacements.push_back(
- NodeReplaceWithMultipleEntry(node, sym, emptyReplacement));
- }
- else if (sym->getBasicType() != EbtStruct)
+ TIntermSymbol *sym = sequence->front()->getAsSymbolNode();
+ // Prune declarations without a variable name, unless it's an interface block declaration.
+ if (sym != nullptr && sym->getSymbol() == "" && !sym->isInterfaceBlock())
{
- // Single struct declarations may just declare the struct type and no variables, so
- // they should not be pruned. All other single empty declarations can be pruned
- // entirely. Example of an empty declaration that will be pruned:
- // float;
- TIntermSequence emptyReplacement;
- TIntermBlock *parentAsBlock = getParentNode()->getAsBlock();
- // The declaration may be inside a block or in a loop init expression.
- ASSERT(parentAsBlock != nullptr || getParentNode()->getAsLoopNode() != nullptr);
- if (parentAsBlock)
+ if (sequence->size() > 1)
{
- mMultiReplacements.push_back(
- NodeReplaceWithMultipleEntry(parentAsBlock, node, emptyReplacement));
+ // Generate a replacement that will remove the empty declarator in the beginning of a declarator
+ // list. Example of a declaration that will be changed:
+ // float, a;
+ // will be changed to
+ // float a;
+ // This applies also to struct declarations.
+ TIntermSequence emptyReplacement;
+ mMultiReplacements.push_back(NodeReplaceWithMultipleEntry(node, sym, emptyReplacement));
}
- else
+ else if (sym->getBasicType() != EbtStruct)
{
- queueReplacement(node, nullptr, OriginalNode::IS_DROPPED);
+ // Single struct declarations may just declare the struct type and no variables, so they should
+ // not be pruned. All other single empty declarations can be pruned entirely. Example of an empty
+ // declaration that will be pruned:
+ // float;
+ TIntermSequence emptyReplacement;
+ TIntermAggregate *parentAgg = getParentNode()->getAsAggregate();
+ ASSERT(parentAgg != nullptr);
+ mMultiReplacements.push_back(NodeReplaceWithMultipleEntry(parentAgg, node, emptyReplacement));
}
- }
- else if (sym->getType().getQualifier() != EvqGlobal &&
- sym->getType().getQualifier() != EvqTemporary)
- {
- // We've hit an empty struct declaration with a qualifier, for example like
- // this:
- // const struct a { int i; };
- // NVIDIA GL driver version 367.27 doesn't accept this kind of declarations, so
- // we convert the declaration to a regular struct declaration. This is okay,
- // since ESSL 1.00 spec section 4.1.8 says about structs that "The optional
- // qualifiers only apply to any declarators, and are not part of the type being
- // defined for name."
-
- if (mInGlobalScope)
- {
- sym->getTypePointer()->setQualifier(EvqGlobal);
- }
- else
+ else if (sym->getType().getQualifier() != EvqGlobal &&
+ sym->getType().getQualifier() != EvqTemporary)
{
- sym->getTypePointer()->setQualifier(EvqTemporary);
+ // We've hit an empty struct declaration with a qualifier, for example like
+ // this:
+ // const struct a { int i; };
+ // NVIDIA GL driver version 367.27 doesn't accept this kind of declarations, so
+ // we convert the declaration to a regular struct declaration. This is okay,
+ // since ESSL 1.00 spec section 4.1.8 says about structs that "The optional
+ // qualifiers only apply to any declarators, and are not part of the type being
+ // defined for name."
+
+ if (mInGlobalScope)
+ {
+ sym->getTypePointer()->setQualifier(EvqGlobal);
+ }
+ else
+ {
+ sym->getTypePointer()->setQualifier(EvqTemporary);
+ }
}
}
}
+ return false;
}
- return false;
+ return true;
}
} // namespace
@@ -109,5 +100,3 @@ void PruneEmptyDeclarations(TIntermNode *root)
{
PruneEmptyDeclarationsTraverser::apply(root);
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/PruneEmptyDeclarations.h b/gfx/angle/src/compiler/translator/PruneEmptyDeclarations.h
index f03657766..122e83090 100755
--- a/gfx/angle/src/compiler/translator/PruneEmptyDeclarations.h
+++ b/gfx/angle/src/compiler/translator/PruneEmptyDeclarations.h
@@ -8,11 +8,8 @@
#ifndef COMPILER_TRANSLATOR_PRUNEEMPTYDECLARATIONS_H_
#define COMPILER_TRANSLATOR_PRUNEEMPTYDECLARATIONS_H_
-namespace sh
-{
class TIntermNode;
void PruneEmptyDeclarations(TIntermNode *root);
-}
#endif // COMPILER_TRANSLATOR_PRUNEEMPTYDECLARATIONS_H_
diff --git a/gfx/angle/src/compiler/translator/QualifierTypes.cpp b/gfx/angle/src/compiler/translator/QualifierTypes.cpp
deleted file mode 100644
index 302f5177d..000000000
--- a/gfx/angle/src/compiler/translator/QualifierTypes.cpp
+++ /dev/null
@@ -1,727 +0,0 @@
-//
-// Copyright (c) 2002-2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-
-#include "compiler/translator/QualifierTypes.h"
-
-#include "compiler/translator/Diagnostics.h"
-
-#include <algorithm>
-
-namespace sh
-{
-
-namespace
-{
-
-// GLSL ES 3.10 does not impose a strict order on type qualifiers and allows multiple layout
-// declarations.
-// GLSL ES 3.10 Revision 4, 4.10 Order of Qualification
-bool AreTypeQualifierChecksRelaxed(int shaderVersion)
-{
- return shaderVersion >= 310;
-}
-
-bool IsScopeQualifier(TQualifier qualifier)
-{
- return qualifier == EvqGlobal || qualifier == EvqTemporary;
-}
-
-bool IsScopeQualifierWrapper(const TQualifierWrapperBase *qualifier)
-{
- if (qualifier->getType() != QtStorage)
- return false;
- const TStorageQualifierWrapper *storageQualifier =
- static_cast<const TStorageQualifierWrapper *>(qualifier);
- TQualifier q = storageQualifier->getQualifier();
- return IsScopeQualifier(q);
-}
-
-// Returns true if the invariant for the qualifier sequence holds
-bool IsInvariantCorrect(const TTypeQualifierBuilder::QualifierSequence &qualifiers)
-{
- // We should have at least one qualifier.
- // The first qualifier always tells the scope.
- return qualifiers.size() >= 1 && IsScopeQualifierWrapper(qualifiers[0]);
-}
-
-// Returns true if there are qualifiers which have been specified multiple times
-// If areQualifierChecksRelaxed is set to true, then layout qualifier repetition is allowed.
-bool HasRepeatingQualifiers(const TTypeQualifierBuilder::QualifierSequence &qualifiers,
- bool areQualifierChecksRelaxed,
- std::string *errorMessage)
-{
- bool invariantFound = false;
- bool precisionFound = false;
- bool layoutFound = false;
- bool interpolationFound = false;
-
- unsigned int locationsSpecified = 0;
- bool isOut = false;
-
- // The iteration starts from one since the first qualifier only reveals the scope of the
- // expression. It is inserted first whenever the sequence gets created.
- for (size_t i = 1; i < qualifiers.size(); ++i)
- {
- switch (qualifiers[i]->getType())
- {
- case QtInvariant:
- {
- if (invariantFound)
- {
- *errorMessage = "The invariant qualifier specified multiple times.";
- return true;
- }
- invariantFound = true;
- break;
- }
- case QtPrecision:
- {
- if (precisionFound)
- {
- *errorMessage = "The precision qualifier specified multiple times.";
- return true;
- }
- precisionFound = true;
- break;
- }
- case QtLayout:
- {
- if (layoutFound && !areQualifierChecksRelaxed)
- {
- *errorMessage = "The layout qualifier specified multiple times.";
- return true;
- }
- if (invariantFound && !areQualifierChecksRelaxed)
- {
- // This combination is not correct according to the syntax specified in the
- // formal grammar in the ESSL 3.00 spec. In ESSL 3.10 the grammar does not have
- // a similar restriction.
- *errorMessage =
- "The layout qualifier and invariant qualifier cannot coexist in the same "
- "declaration according to the grammar.";
- return true;
- }
- layoutFound = true;
- const TLayoutQualifier &currentQualifier =
- static_cast<const TLayoutQualifierWrapper *>(qualifiers[i])->getQualifier();
- locationsSpecified += currentQualifier.locationsSpecified;
- break;
- }
- case QtInterpolation:
- {
- // 'centroid' is treated as a storage qualifier
- // 'flat centroid' will be squashed to 'flat'
- // 'smooth centroid' will be squashed to 'centroid'
- if (interpolationFound)
- {
- *errorMessage = "The interpolation qualifier specified multiple times.";
- return true;
- }
- interpolationFound = true;
- break;
- }
- case QtStorage:
- {
- // Go over all of the storage qualifiers up until the current one and check for
- // repetitions.
- TQualifier currentQualifier =
- static_cast<const TStorageQualifierWrapper *>(qualifiers[i])->getQualifier();
- if (currentQualifier == EvqVertexOut || currentQualifier == EvqFragmentOut)
- {
- isOut = true;
- }
- for (size_t j = 1; j < i; ++j)
- {
- if (qualifiers[j]->getType() == QtStorage)
- {
- const TStorageQualifierWrapper *previousQualifierWrapper =
- static_cast<const TStorageQualifierWrapper *>(qualifiers[j]);
- TQualifier previousQualifier = previousQualifierWrapper->getQualifier();
- if (currentQualifier == previousQualifier)
- {
- *errorMessage = previousQualifierWrapper->getQualifierString().c_str();
- *errorMessage += " specified multiple times";
- return true;
- }
- }
- }
- break;
- }
- case QtMemory:
- {
- // Go over all of the memory qualifiers up until the current one and check for
- // repetitions.
- // Having both readonly and writeonly in a sequence is valid.
- // GLSL ES 3.10 Revision 4, 4.9 Memory Access Qualifiers
- TQualifier currentQualifier =
- static_cast<const TMemoryQualifierWrapper *>(qualifiers[i])->getQualifier();
- for (size_t j = 1; j < i; ++j)
- {
- if (qualifiers[j]->getType() == QtMemory)
- {
- const TMemoryQualifierWrapper *previousQualifierWrapper =
- static_cast<const TMemoryQualifierWrapper *>(qualifiers[j]);
- TQualifier previousQualifier = previousQualifierWrapper->getQualifier();
- if (currentQualifier == previousQualifier)
- {
- *errorMessage = previousQualifierWrapper->getQualifierString().c_str();
- *errorMessage += " specified multiple times";
- return true;
- }
- }
- }
- break;
- }
- default:
- UNREACHABLE();
- }
- }
-
- if (locationsSpecified > 1 && isOut)
- {
- // GLSL ES 3.00.6 section 4.3.8.2 Output Layout Qualifiers
- // GLSL ES 3.10 section 4.4.2 Output Layout Qualifiers
- // "The qualifier may appear at most once within a declaration."
- *errorMessage = "Output layout location specified multiple times.";
- return true;
- }
-
- return false;
-}
-
-// GLSL ES 3.00_6, 4.7 Order of Qualification
-// The correct order of qualifiers is:
-// invariant-qualifier interpolation-qualifier storage-qualifier precision-qualifier
-// layout-qualifier has to be before storage-qualifier.
-bool AreQualifiersInOrder(const TTypeQualifierBuilder::QualifierSequence &qualifiers,
- std::string *errorMessage)
-{
- bool foundInterpolation = false;
- bool foundStorage = false;
- bool foundPrecision = false;
- for (size_t i = 1; i < qualifiers.size(); ++i)
- {
- switch (qualifiers[i]->getType())
- {
- case QtInvariant:
- if (foundInterpolation || foundStorage || foundPrecision)
- {
- *errorMessage = "The invariant qualifier has to be first in the expression.";
- return false;
- }
- break;
- case QtInterpolation:
- if (foundStorage)
- {
- *errorMessage = "Storage qualifiers have to be after interpolation qualifiers.";
- return false;
- }
- else if (foundPrecision)
- {
- *errorMessage =
- "Precision qualifiers have to be after interpolation qualifiers.";
- return false;
- }
- foundInterpolation = true;
- break;
- case QtLayout:
- if (foundStorage)
- {
- *errorMessage = "Storage qualifiers have to be after layout qualifiers.";
- return false;
- }
- else if (foundPrecision)
- {
- *errorMessage = "Precision qualifiers have to be after layout qualifiers.";
- return false;
- }
- break;
- case QtStorage:
- if (foundPrecision)
- {
- *errorMessage = "Precision qualifiers have to be after storage qualifiers.";
- return false;
- }
- foundStorage = true;
- break;
- case QtMemory:
- if (foundPrecision)
- {
- *errorMessage = "Precision qualifiers have to be after memory qualifiers.";
- return false;
- }
- break;
- case QtPrecision:
- foundPrecision = true;
- break;
- default:
- UNREACHABLE();
- }
- }
- return true;
-}
-
-struct QualifierComparator
-{
- bool operator()(const TQualifierWrapperBase *q1, const TQualifierWrapperBase *q2)
- {
- return q1->getRank() < q2->getRank();
- }
-};
-
-void SortSequence(TTypeQualifierBuilder::QualifierSequence &qualifiers)
-{
- // We need a stable sorting algorithm since the order of layout-qualifier declarations matter.
- // The sorting starts from index 1, instead of 0, since the element at index 0 tells the scope
- // and we always want it to be first.
- std::stable_sort(qualifiers.begin() + 1, qualifiers.end(), QualifierComparator());
-}
-
-// Handles the joining of storage qualifiers for variables.
-bool JoinVariableStorageQualifier(TQualifier *joinedQualifier, TQualifier storageQualifier)
-{
- switch (*joinedQualifier)
- {
- case EvqGlobal:
- *joinedQualifier = storageQualifier;
- break;
- case EvqTemporary:
- {
- switch (storageQualifier)
- {
- case EvqConst:
- *joinedQualifier = storageQualifier;
- break;
- default:
- return false;
- }
- break;
- }
- case EvqSmooth:
- {
- switch (storageQualifier)
- {
- case EvqCentroid:
- *joinedQualifier = EvqCentroid;
- break;
- case EvqVertexOut:
- *joinedQualifier = EvqSmoothOut;
- break;
- case EvqFragmentIn:
- *joinedQualifier = EvqSmoothIn;
- break;
- default:
- return false;
- }
- break;
- }
- case EvqFlat:
- {
- switch (storageQualifier)
- {
- case EvqCentroid:
- *joinedQualifier = EvqFlat;
- break;
- case EvqVertexOut:
- *joinedQualifier = EvqFlatOut;
- break;
- case EvqFragmentIn:
- *joinedQualifier = EvqFlatIn;
- break;
- default:
- return false;
- }
- break;
- }
- case EvqCentroid:
- {
- switch (storageQualifier)
- {
- case EvqVertexOut:
- *joinedQualifier = EvqCentroidOut;
- break;
- case EvqFragmentIn:
- *joinedQualifier = EvqCentroidIn;
- break;
- default:
- return false;
- }
- break;
- }
- default:
- return false;
- }
- return true;
-}
-
-// Handles the joining of storage qualifiers for a parameter in a function.
-bool JoinParameterStorageQualifier(TQualifier *joinedQualifier, TQualifier storageQualifier)
-{
- switch (*joinedQualifier)
- {
- case EvqTemporary:
- *joinedQualifier = storageQualifier;
- break;
- case EvqConst:
- {
- switch (storageQualifier)
- {
- case EvqIn:
- *joinedQualifier = EvqConstReadOnly;
- break;
- default:
- return false;
- }
- break;
- }
- default:
- return false;
- }
- return true;
-}
-
-bool JoinMemoryQualifier(TMemoryQualifier *joinedMemoryQualifier, TQualifier memoryQualifier)
-{
- switch (memoryQualifier)
- {
- case EvqReadOnly:
- joinedMemoryQualifier->readonly = true;
- break;
- case EvqWriteOnly:
- joinedMemoryQualifier->writeonly = true;
- break;
- case EvqCoherent:
- joinedMemoryQualifier->coherent = true;
- break;
- case EvqRestrict:
- joinedMemoryQualifier->restrictQualifier = true;
- break;
- case EvqVolatile:
- // Variables having the volatile qualifier are automatcally treated as coherent as well.
- // GLSL ES 3.10, Revision 4, 4.9 Memory Access Qualifiers
- joinedMemoryQualifier->volatileQualifier = true;
- joinedMemoryQualifier->coherent = true;
- break;
- default:
- UNREACHABLE();
- }
- return true;
-}
-
-TTypeQualifier GetVariableTypeQualifierFromSortedSequence(
- const TTypeQualifierBuilder::QualifierSequence &sortedSequence,
- TDiagnostics *diagnostics)
-{
- TTypeQualifier typeQualifier(
- static_cast<const TStorageQualifierWrapper *>(sortedSequence[0])->getQualifier(),
- sortedSequence[0]->getLine());
- for (size_t i = 1; i < sortedSequence.size(); ++i)
- {
- const TQualifierWrapperBase *qualifier = sortedSequence[i];
- bool isQualifierValid = false;
- switch (qualifier->getType())
- {
- case QtInvariant:
- isQualifierValid = true;
- typeQualifier.invariant = true;
- break;
- case QtInterpolation:
- {
- switch (typeQualifier.qualifier)
- {
- case EvqGlobal:
- isQualifierValid = true;
- typeQualifier.qualifier =
- static_cast<const TInterpolationQualifierWrapper *>(qualifier)
- ->getQualifier();
- break;
- default:
- isQualifierValid = false;
- }
- break;
- }
- case QtLayout:
- {
- const TLayoutQualifierWrapper *layoutQualifierWrapper =
- static_cast<const TLayoutQualifierWrapper *>(qualifier);
- isQualifierValid = true;
- typeQualifier.layoutQualifier = sh::JoinLayoutQualifiers(
- typeQualifier.layoutQualifier, layoutQualifierWrapper->getQualifier(),
- layoutQualifierWrapper->getLine(), diagnostics);
- break;
- }
- case QtStorage:
- isQualifierValid = JoinVariableStorageQualifier(
- &typeQualifier.qualifier,
- static_cast<const TStorageQualifierWrapper *>(qualifier)->getQualifier());
- break;
- case QtPrecision:
- isQualifierValid = true;
- typeQualifier.precision =
- static_cast<const TPrecisionQualifierWrapper *>(qualifier)->getQualifier();
- ASSERT(typeQualifier.precision != EbpUndefined);
- break;
- case QtMemory:
- isQualifierValid = JoinMemoryQualifier(
- &typeQualifier.memoryQualifier,
- static_cast<const TMemoryQualifierWrapper *>(qualifier)->getQualifier());
- break;
- default:
- UNREACHABLE();
- }
- if (!isQualifierValid)
- {
- const TString &qualifierString = qualifier->getQualifierString();
- diagnostics->error(qualifier->getLine(), "invalid qualifier combination",
- qualifierString.c_str(), "");
- break;
- }
- }
- return typeQualifier;
-}
-
-TTypeQualifier GetParameterTypeQualifierFromSortedSequence(
- const TTypeQualifierBuilder::QualifierSequence &sortedSequence,
- TDiagnostics *diagnostics)
-{
- TTypeQualifier typeQualifier(EvqTemporary, sortedSequence[0]->getLine());
- for (size_t i = 1; i < sortedSequence.size(); ++i)
- {
- const TQualifierWrapperBase *qualifier = sortedSequence[i];
- bool isQualifierValid = false;
- switch (qualifier->getType())
- {
- case QtInvariant:
- case QtInterpolation:
- case QtLayout:
- break;
- case QtMemory:
- isQualifierValid = JoinMemoryQualifier(
- &typeQualifier.memoryQualifier,
- static_cast<const TMemoryQualifierWrapper *>(qualifier)->getQualifier());
- break;
- case QtStorage:
- isQualifierValid = JoinParameterStorageQualifier(
- &typeQualifier.qualifier,
- static_cast<const TStorageQualifierWrapper *>(qualifier)->getQualifier());
- break;
- case QtPrecision:
- isQualifierValid = true;
- typeQualifier.precision =
- static_cast<const TPrecisionQualifierWrapper *>(qualifier)->getQualifier();
- ASSERT(typeQualifier.precision != EbpUndefined);
- break;
- default:
- UNREACHABLE();
- }
- if (!isQualifierValid)
- {
- const TString &qualifierString = qualifier->getQualifierString();
- diagnostics->error(qualifier->getLine(), "invalid parameter qualifier",
- qualifierString.c_str(), "");
- break;
- }
- }
-
- switch (typeQualifier.qualifier)
- {
- case EvqIn:
- case EvqConstReadOnly: // const in
- case EvqOut:
- case EvqInOut:
- break;
- case EvqConst:
- typeQualifier.qualifier = EvqConstReadOnly;
- break;
- case EvqTemporary:
- // no qualifier has been specified, set it to EvqIn which is the default
- typeQualifier.qualifier = EvqIn;
- break;
- default:
- diagnostics->error(sortedSequence[0]->getLine(), "Invalid parameter qualifier ",
- getQualifierString(typeQualifier.qualifier), "");
- }
- return typeQualifier;
-}
-} // namespace
-
-TLayoutQualifier JoinLayoutQualifiers(TLayoutQualifier leftQualifier,
- TLayoutQualifier rightQualifier,
- const TSourceLoc &rightQualifierLocation,
- TDiagnostics *diagnostics)
-{
- TLayoutQualifier joinedQualifier = leftQualifier;
-
- if (rightQualifier.location != -1)
- {
- joinedQualifier.location = rightQualifier.location;
- ++joinedQualifier.locationsSpecified;
- }
- if (rightQualifier.matrixPacking != EmpUnspecified)
- {
- joinedQualifier.matrixPacking = rightQualifier.matrixPacking;
- }
- if (rightQualifier.blockStorage != EbsUnspecified)
- {
- joinedQualifier.blockStorage = rightQualifier.blockStorage;
- }
-
- for (size_t i = 0u; i < rightQualifier.localSize.size(); ++i)
- {
- if (rightQualifier.localSize[i] != -1)
- {
- if (joinedQualifier.localSize[i] != -1 &&
- joinedQualifier.localSize[i] != rightQualifier.localSize[i])
- {
- diagnostics->error(rightQualifierLocation,
- "Cannot have multiple different work group size specifiers",
- getWorkGroupSizeString(i), "");
- }
- joinedQualifier.localSize[i] = rightQualifier.localSize[i];
- }
- }
-
- if (rightQualifier.imageInternalFormat != EiifUnspecified)
- {
- joinedQualifier.imageInternalFormat = rightQualifier.imageInternalFormat;
- }
-
- return joinedQualifier;
-}
-
-unsigned int TInvariantQualifierWrapper::getRank() const
-{
- return 0u;
-}
-
-unsigned int TInterpolationQualifierWrapper::getRank() const
-{
- return 1u;
-}
-
-unsigned int TLayoutQualifierWrapper::getRank() const
-{
- return 2u;
-}
-
-unsigned int TStorageQualifierWrapper::getRank() const
-{
- // Force the 'centroid' auxilary storage qualifier to be always first among all storage
- // qualifiers.
- if (mStorageQualifier == EvqCentroid)
- {
- return 3u;
- }
- else
- {
- return 4u;
- }
-}
-
-unsigned int TMemoryQualifierWrapper::getRank() const
-{
- return 4u;
-}
-
-unsigned int TPrecisionQualifierWrapper::getRank() const
-{
- return 5u;
-}
-
-TTypeQualifier::TTypeQualifier(TQualifier scope, const TSourceLoc &loc)
- : layoutQualifier(TLayoutQualifier::create()),
- memoryQualifier(TMemoryQualifier::create()),
- precision(EbpUndefined),
- qualifier(scope),
- invariant(false),
- line(loc)
-{
- ASSERT(IsScopeQualifier(qualifier));
-}
-
-TTypeQualifierBuilder::TTypeQualifierBuilder(const TStorageQualifierWrapper *scope,
- int shaderVersion)
- : mShaderVersion(shaderVersion)
-{
- ASSERT(IsScopeQualifier(scope->getQualifier()));
- mQualifiers.push_back(scope);
-}
-
-void TTypeQualifierBuilder::appendQualifier(const TQualifierWrapperBase *qualifier)
-{
- mQualifiers.push_back(qualifier);
-}
-
-bool TTypeQualifierBuilder::checkSequenceIsValid(TDiagnostics *diagnostics) const
-{
- bool areQualifierChecksRelaxed = AreTypeQualifierChecksRelaxed(mShaderVersion);
- std::string errorMessage;
- if (HasRepeatingQualifiers(mQualifiers, areQualifierChecksRelaxed, &errorMessage))
- {
- diagnostics->error(mQualifiers[0]->getLine(), "qualifier sequence", errorMessage.c_str(),
- "");
- return false;
- }
-
- if (!areQualifierChecksRelaxed && !AreQualifiersInOrder(mQualifiers, &errorMessage))
- {
- diagnostics->error(mQualifiers[0]->getLine(), "qualifier sequence", errorMessage.c_str(),
- "");
- return false;
- }
-
- return true;
-}
-
-TTypeQualifier TTypeQualifierBuilder::getParameterTypeQualifier(TDiagnostics *diagnostics) const
-{
- ASSERT(IsInvariantCorrect(mQualifiers));
- ASSERT(static_cast<const TStorageQualifierWrapper *>(mQualifiers[0])->getQualifier() ==
- EvqTemporary);
-
- if (!checkSequenceIsValid(diagnostics))
- {
- return TTypeQualifier(EvqTemporary, mQualifiers[0]->getLine());
- }
-
- // If the qualifier checks are relaxed, then it is easier to sort the qualifiers so
- // that the order imposed by the GLSL ES 3.00 spec is kept. Then we can use the same code to
- // combine the qualifiers.
- if (AreTypeQualifierChecksRelaxed(mShaderVersion))
- {
- // Copy the qualifier sequence so that we can sort them.
- QualifierSequence sortedQualifierSequence = mQualifiers;
- SortSequence(sortedQualifierSequence);
- return GetParameterTypeQualifierFromSortedSequence(sortedQualifierSequence, diagnostics);
- }
- return GetParameterTypeQualifierFromSortedSequence(mQualifiers, diagnostics);
-}
-
-TTypeQualifier TTypeQualifierBuilder::getVariableTypeQualifier(TDiagnostics *diagnostics) const
-{
- ASSERT(IsInvariantCorrect(mQualifiers));
-
- if (!checkSequenceIsValid(diagnostics))
- {
- return TTypeQualifier(
- static_cast<const TStorageQualifierWrapper *>(mQualifiers[0])->getQualifier(),
- mQualifiers[0]->getLine());
- }
-
- // If the qualifier checks are relaxed, then it is easier to sort the qualifiers so
- // that the order imposed by the GLSL ES 3.00 spec is kept. Then we can use the same code to
- // combine the qualifiers.
- if (AreTypeQualifierChecksRelaxed(mShaderVersion))
- {
- // Copy the qualifier sequence so that we can sort them.
- QualifierSequence sortedQualifierSequence = mQualifiers;
- SortSequence(sortedQualifierSequence);
- return GetVariableTypeQualifierFromSortedSequence(sortedQualifierSequence, diagnostics);
- }
- return GetVariableTypeQualifierFromSortedSequence(mQualifiers, diagnostics);
-}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/QualifierTypes.h b/gfx/angle/src/compiler/translator/QualifierTypes.h
deleted file mode 100644
index 10bdeed89..000000000
--- a/gfx/angle/src/compiler/translator/QualifierTypes.h
+++ /dev/null
@@ -1,191 +0,0 @@
-//
-// Copyright (c) 2002-2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-
-#ifndef COMPILER_TRANSLATOR_QUALIFIER_TYPES_H_
-#define COMPILER_TRANSLATOR_QUALIFIER_TYPES_H_
-
-#include "common/angleutils.h"
-#include "compiler/translator/BaseTypes.h"
-#include "compiler/translator/Types.h"
-
-namespace sh
-{
-class TDiagnostics;
-
-TLayoutQualifier JoinLayoutQualifiers(TLayoutQualifier leftQualifier,
- TLayoutQualifier rightQualifier,
- const TSourceLoc &rightQualifierLocation,
- TDiagnostics *diagnostics);
-
-enum TQualifierType
-{
- QtInvariant,
- QtInterpolation,
- QtLayout,
- QtStorage,
- QtPrecision,
- QtMemory
-};
-
-class TQualifierWrapperBase : angle::NonCopyable
-{
- public:
- POOL_ALLOCATOR_NEW_DELETE();
- TQualifierWrapperBase(const TSourceLoc &line) : mLine(line) {}
- virtual ~TQualifierWrapperBase(){};
- virtual TQualifierType getType() const = 0;
- virtual TString getQualifierString() const = 0;
- virtual unsigned int getRank() const = 0;
- const TSourceLoc &getLine() const { return mLine; }
- private:
- TSourceLoc mLine;
-};
-
-class TInvariantQualifierWrapper final : public TQualifierWrapperBase
-{
- public:
- TInvariantQualifierWrapper(const TSourceLoc &line) : TQualifierWrapperBase(line) {}
- ~TInvariantQualifierWrapper() {}
-
- TQualifierType getType() const { return QtInvariant; }
- TString getQualifierString() const { return "invariant"; }
- unsigned int getRank() const;
-};
-
-class TInterpolationQualifierWrapper final : public TQualifierWrapperBase
-{
- public:
- TInterpolationQualifierWrapper(TQualifier interpolationQualifier, const TSourceLoc &line)
- : TQualifierWrapperBase(line), mInterpolationQualifier(interpolationQualifier)
- {
- }
- ~TInterpolationQualifierWrapper() {}
-
- TQualifierType getType() const { return QtInterpolation; }
- TString getQualifierString() const { return sh::getQualifierString(mInterpolationQualifier); }
- TQualifier getQualifier() const { return mInterpolationQualifier; }
- unsigned int getRank() const;
-
- private:
- TQualifier mInterpolationQualifier;
-};
-
-class TLayoutQualifierWrapper final : public TQualifierWrapperBase
-{
- public:
- TLayoutQualifierWrapper(TLayoutQualifier layoutQualifier, const TSourceLoc &line)
- : TQualifierWrapperBase(line), mLayoutQualifier(layoutQualifier)
- {
- }
- ~TLayoutQualifierWrapper() {}
-
- TQualifierType getType() const { return QtLayout; }
- TString getQualifierString() const { return "layout"; }
- const TLayoutQualifier &getQualifier() const { return mLayoutQualifier; }
- unsigned int getRank() const;
-
- private:
- TLayoutQualifier mLayoutQualifier;
-};
-
-class TStorageQualifierWrapper final : public TQualifierWrapperBase
-{
- public:
- TStorageQualifierWrapper(TQualifier storageQualifier, const TSourceLoc &line)
- : TQualifierWrapperBase(line), mStorageQualifier(storageQualifier)
- {
- }
- ~TStorageQualifierWrapper() {}
-
- TQualifierType getType() const { return QtStorage; }
- TString getQualifierString() const { return sh::getQualifierString(mStorageQualifier); }
- TQualifier getQualifier() const { return mStorageQualifier; }
- unsigned int getRank() const;
-
- private:
- TQualifier mStorageQualifier;
-};
-
-class TPrecisionQualifierWrapper final : public TQualifierWrapperBase
-{
- public:
- TPrecisionQualifierWrapper(TPrecision precisionQualifier, const TSourceLoc &line)
- : TQualifierWrapperBase(line), mPrecisionQualifier(precisionQualifier)
- {
- }
- ~TPrecisionQualifierWrapper() {}
-
- TQualifierType getType() const { return QtPrecision; }
- TString getQualifierString() const { return sh::getPrecisionString(mPrecisionQualifier); }
- TPrecision getQualifier() const { return mPrecisionQualifier; }
- unsigned int getRank() const;
-
- private:
- TPrecision mPrecisionQualifier;
-};
-
-class TMemoryQualifierWrapper final : public TQualifierWrapperBase
-{
- public:
- TMemoryQualifierWrapper(TQualifier memoryQualifier, const TSourceLoc &line)
- : TQualifierWrapperBase(line), mMemoryQualifier(memoryQualifier)
- {
- }
- ~TMemoryQualifierWrapper() {}
-
- TQualifierType getType() const { return QtMemory; }
- TString getQualifierString() const { return sh::getQualifierString(mMemoryQualifier); }
- TQualifier getQualifier() const { return mMemoryQualifier; }
- unsigned int getRank() const;
-
- private:
- TQualifier mMemoryQualifier;
-};
-
-// TTypeQualifier tightly covers type_qualifier from the grammar
-struct TTypeQualifier
-{
- // initializes all of the qualifiers and sets the scope
- TTypeQualifier(TQualifier scope, const TSourceLoc &loc);
-
- TLayoutQualifier layoutQualifier;
- TMemoryQualifier memoryQualifier;
- TPrecision precision;
- TQualifier qualifier;
- bool invariant;
- TSourceLoc line;
-};
-
-// TTypeQualifierBuilder contains all of the qualifiers when type_qualifier gets parsed.
-// It is to be used to validate the qualifier sequence and build a TTypeQualifier from it.
-class TTypeQualifierBuilder : angle::NonCopyable
-{
- public:
- using QualifierSequence = TVector<const TQualifierWrapperBase *>;
-
- public:
- POOL_ALLOCATOR_NEW_DELETE();
- TTypeQualifierBuilder(const TStorageQualifierWrapper *scope, int shaderVersion);
- // Adds the passed qualifier to the end of the sequence.
- void appendQualifier(const TQualifierWrapperBase *qualifier);
- // Checks for the order of qualification and repeating qualifiers.
- bool checkSequenceIsValid(TDiagnostics *diagnostics) const;
- // Goes over the qualifier sequence and parses it to form a type qualifier for a function
- // parameter.
- // The returned object is initialized even if the parsing fails.
- TTypeQualifier getParameterTypeQualifier(TDiagnostics *diagnostics) const;
- // Goes over the qualifier sequence and parses it to form a type qualifier for a variable.
- // The returned object is initialized even if the parsing fails.
- TTypeQualifier getVariableTypeQualifier(TDiagnostics *diagnostics) const;
-
- private:
- QualifierSequence mQualifiers;
- int mShaderVersion;
-};
-
-} // namespace sh
-
-#endif // COMPILER_TRANSLATOR_QUALIFIER_TYPES_H_
diff --git a/gfx/angle/src/compiler/translator/RecordConstantPrecision.cpp b/gfx/angle/src/compiler/translator/RecordConstantPrecision.cpp
index 6b8515a2c..af1d1d1a3 100755
--- a/gfx/angle/src/compiler/translator/RecordConstantPrecision.cpp
+++ b/gfx/angle/src/compiler/translator/RecordConstantPrecision.cpp
@@ -18,9 +18,6 @@
#include "compiler/translator/InfoSink.h"
#include "compiler/translator/IntermNode.h"
-namespace sh
-{
-
namespace
{
@@ -48,11 +45,6 @@ RecordConstantPrecisionTraverser::RecordConstantPrecisionTraverser()
bool RecordConstantPrecisionTraverser::operandAffectsParentOperationPrecision(TIntermTyped *operand)
{
- if (getParentNode()->getAsCaseNode() || getParentNode()->getAsBlock())
- {
- return false;
- }
-
const TIntermBinary *parentAsBinary = getParentNode()->getAsBinaryNode();
if (parentAsBinary != nullptr)
{
@@ -163,5 +155,3 @@ void RecordConstantPrecision(TIntermNode *root, unsigned int *temporaryIndex)
}
while (traverser.foundHigherPrecisionConstant());
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/RecordConstantPrecision.h b/gfx/angle/src/compiler/translator/RecordConstantPrecision.h
index a62831e22..2cd401b41 100755
--- a/gfx/angle/src/compiler/translator/RecordConstantPrecision.h
+++ b/gfx/angle/src/compiler/translator/RecordConstantPrecision.h
@@ -16,11 +16,8 @@
#ifndef COMPILER_TRANSLATOR_RECORDCONSTANTPRECISION_H_
#define COMPILER_TRANSLATOR_RECORDCONSTANTPRECISION_H_
-namespace sh
-{
class TIntermNode;
void RecordConstantPrecision(TIntermNode *root, unsigned int *temporaryIndex);
-} // namespace sh
#endif // COMPILER_TRANSLATOR_RECORDCONSTANTPRECISION_H_
diff --git a/gfx/angle/src/compiler/translator/RegenerateStructNames.cpp b/gfx/angle/src/compiler/translator/RegenerateStructNames.cpp
index a01d79abe..5e0db2ad2 100755
--- a/gfx/angle/src/compiler/translator/RegenerateStructNames.cpp
+++ b/gfx/angle/src/compiler/translator/RegenerateStructNames.cpp
@@ -7,9 +7,6 @@
#include "common/debug.h"
#include "compiler/translator/RegenerateStructNames.h"
-namespace sh
-{
-
void RegenerateStructNames::visitSymbol(TIntermSymbol *symbol)
{
ASSERT(symbol);
@@ -61,16 +58,25 @@ void RegenerateStructNames::visitSymbol(TIntermSymbol *symbol)
userType->setName(tmp);
}
-bool RegenerateStructNames::visitBlock(Visit, TIntermBlock *block)
+bool RegenerateStructNames::visitAggregate(Visit, TIntermAggregate *aggregate)
{
- ++mScopeDepth;
- TIntermSequence &sequence = *(block->getSequence());
- for (TIntermNode *node : sequence)
+ ASSERT(aggregate);
+ switch (aggregate->getOp())
{
- node->traverse(this);
+ case EOpSequence:
+ ++mScopeDepth;
+ {
+ TIntermSequence &sequence = *(aggregate->getSequence());
+ for (size_t ii = 0; ii < sequence.size(); ++ii)
+ {
+ TIntermNode *node = sequence[ii];
+ ASSERT(node != NULL);
+ node->traverse(this);
+ }
+ }
+ --mScopeDepth;
+ return false;
+ default:
+ return true;
}
- --mScopeDepth;
- return false;
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/RegenerateStructNames.h b/gfx/angle/src/compiler/translator/RegenerateStructNames.h
index 86c5060b3..3b98e5d70 100755
--- a/gfx/angle/src/compiler/translator/RegenerateStructNames.h
+++ b/gfx/angle/src/compiler/translator/RegenerateStructNames.h
@@ -12,9 +12,6 @@
#include <set>
-namespace sh
-{
-
class RegenerateStructNames : public TIntermTraverser
{
public:
@@ -27,7 +24,7 @@ class RegenerateStructNames : public TIntermTraverser
protected:
void visitSymbol(TIntermSymbol *) override;
- bool visitBlock(Visit, TIntermBlock *block) override;
+ bool visitAggregate(Visit, TIntermAggregate *) override;
private:
const TSymbolTable &mSymbolTable;
@@ -41,6 +38,4 @@ class RegenerateStructNames : public TIntermTraverser
std::set<int> mDeclaredGlobalStructs;
};
-} // namespace sh
-
#endif // COMPILER_TRANSLATOR_REGENERATESTRUCTNAMES_H_
diff --git a/gfx/angle/src/compiler/translator/RemoveDynamicIndexing.cpp b/gfx/angle/src/compiler/translator/RemoveDynamicIndexing.cpp
index 31914dcf3..37955e736 100755
--- a/gfx/angle/src/compiler/translator/RemoveDynamicIndexing.cpp
+++ b/gfx/angle/src/compiler/translator/RemoveDynamicIndexing.cpp
@@ -14,9 +14,6 @@
#include "compiler/translator/IntermNodePatternMatcher.h"
#include "compiler/translator/SymbolTable.h"
-namespace sh
-{
-
namespace
{
@@ -95,15 +92,21 @@ TIntermBinary *CreateIndexDirectBaseSymbolNode(const TType &indexedType,
const int index,
TQualifier baseQualifier)
{
+ TIntermBinary *indexNode = new TIntermBinary(EOpIndexDirect);
+ indexNode->setType(fieldType);
TIntermSymbol *baseSymbol = CreateBaseSymbol(indexedType, baseQualifier);
- TIntermBinary *indexNode =
- new TIntermBinary(EOpIndexDirect, baseSymbol, TIntermTyped::CreateIndexNode(index));
+ indexNode->setLeft(baseSymbol);
+ indexNode->setRight(CreateIntConstantNode(index));
return indexNode;
}
TIntermBinary *CreateAssignValueSymbolNode(TIntermTyped *targetNode, const TType &assignedValueType)
{
- return new TIntermBinary(EOpAssign, targetNode, CreateValueSymbol(assignedValueType));
+ TIntermBinary *assignNode = new TIntermBinary(EOpAssign);
+ assignNode->setType(assignedValueType);
+ assignNode->setLeft(targetNode);
+ assignNode->setRight(CreateValueSymbol(assignedValueType));
+ return assignNode;
}
TIntermTyped *EnsureSignedInt(TIntermTyped *node)
@@ -175,7 +178,7 @@ TType GetFieldType(const TType &indexedType)
// base[1] = value;
// }
// Note that else is not used in above functions to avoid the RewriteElseBlocks transformation.
-TIntermFunctionDefinition *GetIndexFunctionDefinition(TType type, bool write)
+TIntermAggregate *GetIndexFunctionDefinition(TType type, bool write)
{
ASSERT(!type.isArray());
// Conservatively use highp here, even if the indexed type is not highp. That way the code can't
@@ -183,6 +186,8 @@ TIntermFunctionDefinition *GetIndexFunctionDefinition(TType type, bool write)
// highp values are being indexed in the shader. For HLSL precision doesn't matter, but in
// principle this code could be used with multiple backends.
type.setPrecision(EbpHigh);
+ TIntermAggregate *indexingFunction = new TIntermAggregate(EOpFunction);
+ indexingFunction->setNameObj(GetIndexFunctionName(type, write));
TType fieldType = GetFieldType(type);
int numCases = 0;
@@ -194,6 +199,14 @@ TIntermFunctionDefinition *GetIndexFunctionDefinition(TType type, bool write)
{
numCases = type.getNominalSize();
}
+ if (write)
+ {
+ indexingFunction->setType(TType(EbtVoid));
+ }
+ else
+ {
+ indexingFunction->setType(fieldType);
+ }
TIntermAggregate *paramsNode = new TIntermAggregate(EOpParameters);
TQualifier baseQualifier = EvqInOut;
@@ -208,8 +221,9 @@ TIntermFunctionDefinition *GetIndexFunctionDefinition(TType type, bool write)
TIntermSymbol *valueParam = CreateValueSymbol(fieldType);
paramsNode->getSequence()->push_back(valueParam);
}
+ indexingFunction->getSequence()->push_back(paramsNode);
- TIntermBlock *statementList = new TIntermBlock();
+ TIntermAggregate *statementList = new TIntermAggregate(EOpSequence);
for (int i = 0; i < numCases; ++i)
{
TIntermCase *caseNode = new TIntermCase(CreateIntConstantNode(i));
@@ -239,17 +253,18 @@ TIntermFunctionDefinition *GetIndexFunctionDefinition(TType type, bool write)
TIntermSwitch *switchNode = new TIntermSwitch(CreateIndexSymbol(), statementList);
- TIntermBlock *bodyNode = new TIntermBlock();
+ TIntermAggregate *bodyNode = new TIntermAggregate(EOpSequence);
bodyNode->getSequence()->push_back(switchNode);
- TIntermBinary *cond =
- new TIntermBinary(EOpLessThan, CreateIndexSymbol(), CreateIntConstantNode(0));
+ TIntermBinary *cond = new TIntermBinary(EOpLessThan);
cond->setType(TType(EbtBool, EbpUndefined));
+ cond->setLeft(CreateIndexSymbol());
+ cond->setRight(CreateIntConstantNode(0));
// Two blocks: one accesses (either reads or writes) the first element and returns,
// the other accesses the last element.
- TIntermBlock *useFirstBlock = new TIntermBlock();
- TIntermBlock *useLastBlock = new TIntermBlock();
+ TIntermAggregate *useFirstBlock = new TIntermAggregate(EOpSequence);
+ TIntermAggregate *useLastBlock = new TIntermAggregate(EOpSequence);
TIntermBinary *indexFirstNode =
CreateIndexDirectBaseSymbolNode(type, fieldType, 0, baseQualifier);
TIntermBinary *indexLastNode =
@@ -272,20 +287,12 @@ TIntermFunctionDefinition *GetIndexFunctionDefinition(TType type, bool write)
TIntermBranch *returnLastNode = new TIntermBranch(EOpReturn, indexLastNode);
useLastBlock->getSequence()->push_back(returnLastNode);
}
- TIntermIfElse *ifNode = new TIntermIfElse(cond, useFirstBlock, nullptr);
+ TIntermSelection *ifNode = new TIntermSelection(cond, useFirstBlock, nullptr);
bodyNode->getSequence()->push_back(ifNode);
bodyNode->getSequence()->push_back(useLastBlock);
- TIntermFunctionDefinition *indexingFunction = nullptr;
- if (write)
- {
- indexingFunction = new TIntermFunctionDefinition(TType(EbtVoid), paramsNode, bodyNode);
- }
- else
- {
- indexingFunction = new TIntermFunctionDefinition(fieldType, paramsNode, bodyNode);
- }
- indexingFunction->getFunctionSymbolInfo()->setNameObj(GetIndexFunctionName(type, write));
+ indexingFunction->getSequence()->push_back(bodyNode);
+
return indexingFunction;
}
@@ -327,8 +334,8 @@ RemoveDynamicIndexingTraverser::RemoveDynamicIndexingTraverser(const TSymbolTabl
void RemoveDynamicIndexingTraverser::insertHelperDefinitions(TIntermNode *root)
{
- TIntermBlock *rootBlock = root->getAsBlock();
- ASSERT(rootBlock != nullptr);
+ TIntermAggregate *rootAgg = root->getAsAggregate();
+ ASSERT(rootAgg != nullptr && rootAgg->getOp() == EOpSequence);
TIntermSequence insertions;
for (TType type : mIndexedVecAndMatrixTypes)
{
@@ -338,7 +345,7 @@ void RemoveDynamicIndexingTraverser::insertHelperDefinitions(TIntermNode *root)
{
insertions.push_back(GetIndexFunctionDefinition(type, true));
}
- mInsertions.push_back(NodeInsertMultipleEntry(rootBlock, 0, insertions, TIntermSequence()));
+ mInsertions.push_back(NodeInsertMultipleEntry(rootAgg, 0, insertions, TIntermSequence()));
}
// Create a call to dyn_index_*() based on an indirect indexing op node
@@ -350,8 +357,7 @@ TIntermAggregate *CreateIndexFunctionCall(TIntermBinary *node,
TIntermAggregate *indexingCall = new TIntermAggregate(EOpFunctionCall);
indexingCall->setLine(node->getLine());
indexingCall->setUserDefined();
- indexingCall->getFunctionSymbolInfo()->setNameObj(
- GetIndexFunctionName(indexedNode->getType(), false));
+ indexingCall->setNameObj(GetIndexFunctionName(indexedNode->getType(), false));
indexingCall->getSequence()->push_back(indexedNode);
indexingCall->getSequence()->push_back(index);
@@ -369,8 +375,7 @@ TIntermAggregate *CreateIndexedWriteFunctionCall(TIntermBinary *node,
ASSERT(leftCopy != nullptr && leftCopy->getAsTyped() != nullptr);
TIntermAggregate *indexedWriteCall =
CreateIndexFunctionCall(node, leftCopy->getAsTyped(), index);
- indexedWriteCall->getFunctionSymbolInfo()->setNameObj(
- GetIndexFunctionName(node->getLeft()->getType(), true));
+ indexedWriteCall->setNameObj(GetIndexFunctionName(node->getLeft()->getType(), true));
indexedWriteCall->setType(TType(EbtVoid));
indexedWriteCall->getSequence()->push_back(writtenValue);
return indexedWriteCall;
@@ -393,7 +398,7 @@ bool RemoveDynamicIndexingTraverser::visitBinary(Visit visit, TIntermBinary *nod
// Now v_expr[s0] can be safely executed several times without unintended side effects.
// Init the temp variable holding the index
- TIntermDeclaration *initIndex = createTempInitDeclaration(node->getRight());
+ TIntermAggregate *initIndex = createTempInitDeclaration(node->getRight());
insertStatementInParentBlock(initIndex);
mUsedTreeInsertion = true;
@@ -444,7 +449,7 @@ bool RemoveDynamicIndexingTraverser::visitBinary(Visit visit, TIntermBinary *nod
// Store the index in a temporary signed int variable.
TIntermTyped *indexInitializer = EnsureSignedInt(node->getRight());
- TIntermDeclaration *initIndex = createTempInitDeclaration(indexInitializer);
+ TIntermAggregate *initIndex = createTempInitDeclaration(indexInitializer);
initIndex->setLine(node->getLine());
insertionsBefore.push_back(initIndex);
@@ -509,5 +514,3 @@ void RemoveDynamicIndexing(TIntermNode *root,
traverser.insertHelperDefinitions(root);
traverser.updateTree();
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/RemoveDynamicIndexing.h b/gfx/angle/src/compiler/translator/RemoveDynamicIndexing.h
index 06305d0f8..ae3a93c9b 100755
--- a/gfx/angle/src/compiler/translator/RemoveDynamicIndexing.h
+++ b/gfx/angle/src/compiler/translator/RemoveDynamicIndexing.h
@@ -10,9 +10,6 @@
#ifndef COMPILER_TRANSLATOR_REMOVEDYNAMICINDEXING_H_
#define COMPILER_TRANSLATOR_REMOVEDYNAMICINDEXING_H_
-namespace sh
-{
-
class TIntermNode;
class TSymbolTable;
@@ -21,6 +18,4 @@ void RemoveDynamicIndexing(TIntermNode *root,
const TSymbolTable &symbolTable,
int shaderVersion);
-} // namespace sh
-
#endif // COMPILER_TRANSLATOR_REMOVEDYNAMICINDEXING_H_
diff --git a/gfx/angle/src/compiler/translator/RemoveInvariantDeclaration.cpp b/gfx/angle/src/compiler/translator/RemoveInvariantDeclaration.cpp
deleted file mode 100644
index f6f016310..000000000
--- a/gfx/angle/src/compiler/translator/RemoveInvariantDeclaration.cpp
+++ /dev/null
@@ -1,47 +0,0 @@
-//
-// Copyright (c) 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-
-#include "compiler/translator/RemoveInvariantDeclaration.h"
-
-#include "compiler/translator/IntermNode.h"
-
-namespace sh
-{
-
-namespace
-{
-
-// An AST traverser that removes invariant declaration for input in fragment shader
-// when GLSL >= 4.20 and for output in vertex shader when GLSL < 4.2.
-class RemoveInvariantDeclarationTraverser : public TIntermTraverser
-{
- public:
- RemoveInvariantDeclarationTraverser() : TIntermTraverser(true, false, false) {}
-
- private:
- bool visitAggregate(Visit visit, TIntermAggregate *node) override
- {
- if (node->getOp() == EOpInvariantDeclaration)
- {
- TIntermSequence emptyReplacement;
- mMultiReplacements.push_back(NodeReplaceWithMultipleEntry(getParentNode()->getAsBlock(),
- node, emptyReplacement));
- return false;
- }
- return true;
- }
-};
-
-} // anonymous namespace
-
-void RemoveInvariantDeclaration(TIntermNode *root)
-{
- RemoveInvariantDeclarationTraverser traverser;
- root->traverse(&traverser);
- traverser.updateTree();
-}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/RemoveInvariantDeclaration.h b/gfx/angle/src/compiler/translator/RemoveInvariantDeclaration.h
deleted file mode 100644
index cf9d4aa4c..000000000
--- a/gfx/angle/src/compiler/translator/RemoveInvariantDeclaration.h
+++ /dev/null
@@ -1,18 +0,0 @@
-//
-// Copyright (c) 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-
-#ifndef COMPILER_TRANSLATOR_REMOVEINVARIANTDECLARATION_H_
-#define COMPILER_TRANSLATOR_REMOVEINVARIANTDECLARATION_H_
-
-class TIntermNode;
-namespace sh
-{
-
-void RemoveInvariantDeclaration(TIntermNode *root);
-
-} // namespace sh
-
-#endif // COMPILER_TRANSLATOR_REMOVEINVARIANTDECLARATION_H_
diff --git a/gfx/angle/src/compiler/translator/RemovePow.cpp b/gfx/angle/src/compiler/translator/RemovePow.cpp
index 192084c36..ba505753a 100755
--- a/gfx/angle/src/compiler/translator/RemovePow.cpp
+++ b/gfx/angle/src/compiler/translator/RemovePow.cpp
@@ -13,9 +13,6 @@
#include "compiler/translator/InfoSink.h"
#include "compiler/translator/IntermNode.h"
-namespace sh
-{
-
namespace
{
@@ -58,15 +55,19 @@ bool RemovePowTraverser::visitAggregate(Visit visit, TIntermAggregate *node)
TIntermTyped *x = node->getSequence()->at(0)->getAsTyped();
TIntermTyped *y = node->getSequence()->at(1)->getAsTyped();
- TIntermUnary *log = new TIntermUnary(EOpLog2, x);
+ TIntermUnary *log = new TIntermUnary(EOpLog2);
+ log->setOperand(x);
log->setLine(node->getLine());
+ log->setType(x->getType());
TOperator op = TIntermBinary::GetMulOpBasedOnOperands(y->getType(), log->getType());
TIntermBinary *mul = new TIntermBinary(op, y, log);
mul->setLine(node->getLine());
- TIntermUnary *exp = new TIntermUnary(EOpExp2, mul);
+ TIntermUnary *exp = new TIntermUnary(EOpExp2);
+ exp->setOperand(mul);
exp->setLine(node->getLine());
+ exp->setType(node->getType());
queueReplacement(node, exp, OriginalNode::IS_DROPPED);
@@ -95,5 +96,3 @@ void RemovePow(TIntermNode *root)
}
while (traverser.needAnotherIteration());
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/RemovePow.h b/gfx/angle/src/compiler/translator/RemovePow.h
index 1e2f4e116..40f9d672b 100755
--- a/gfx/angle/src/compiler/translator/RemovePow.h
+++ b/gfx/angle/src/compiler/translator/RemovePow.h
@@ -11,11 +11,8 @@
#ifndef COMPILER_TRANSLATOR_REMOVEPOW_H_
#define COMPILER_TRANSLATOR_REMOVEPOW_H_
-namespace sh
-{
class TIntermNode;
void RemovePow(TIntermNode *root);
-} // namespace sh
#endif // COMPILER_TRANSLATOR_REMOVEPOW_H_
diff --git a/gfx/angle/src/compiler/translator/RemoveSwitchFallThrough.cpp b/gfx/angle/src/compiler/translator/RemoveSwitchFallThrough.cpp
index dd995af47..b278b5343 100755
--- a/gfx/angle/src/compiler/translator/RemoveSwitchFallThrough.cpp
+++ b/gfx/angle/src/compiler/translator/RemoveSwitchFallThrough.cpp
@@ -6,10 +6,7 @@
#include "compiler/translator/RemoveSwitchFallThrough.h"
-namespace sh
-{
-
-TIntermBlock *RemoveSwitchFallThrough::removeFallThrough(TIntermBlock *statementList)
+TIntermAggregate *RemoveSwitchFallThrough::removeFallThrough(TIntermAggregate *statementList)
{
RemoveSwitchFallThrough rm(statementList);
ASSERT(statementList);
@@ -25,13 +22,14 @@ TIntermBlock *RemoveSwitchFallThrough::removeFallThrough(TIntermBlock *statement
return rm.mStatementListOut;
}
-RemoveSwitchFallThrough::RemoveSwitchFallThrough(TIntermBlock *statementList)
+RemoveSwitchFallThrough::RemoveSwitchFallThrough(TIntermAggregate *statementList)
: TIntermTraverser(true, false, false),
mStatementList(statementList),
mLastStatementWasBreak(false),
mPreviousCase(nullptr)
{
- mStatementListOut = new TIntermBlock();
+ mStatementListOut = new TIntermAggregate();
+ mStatementListOut->setOp(EOpSequence);
}
void RemoveSwitchFallThrough::visitSymbol(TIntermSymbol *node)
@@ -64,14 +62,7 @@ bool RemoveSwitchFallThrough::visitUnary(Visit, TIntermUnary *node)
return false;
}
-bool RemoveSwitchFallThrough::visitTernary(Visit, TIntermTernary *node)
-{
- mPreviousCase->getSequence()->push_back(node);
- mLastStatementWasBreak = false;
- return false;
-}
-
-bool RemoveSwitchFallThrough::visitIfElse(Visit, TIntermIfElse *node)
+bool RemoveSwitchFallThrough::visitSelection(Visit, TIntermSelection *node)
{
mPreviousCase->getSequence()->push_back(node);
mLastStatementWasBreak = false;
@@ -132,7 +123,8 @@ void RemoveSwitchFallThrough::handlePreviousCase()
bool RemoveSwitchFallThrough::visitCase(Visit, TIntermCase *node)
{
handlePreviousCase();
- mPreviousCase = new TIntermBlock();
+ mPreviousCase = new TIntermAggregate();
+ mPreviousCase->setOp(EOpSequence);
mPreviousCase->getSequence()->push_back(node);
// Don't traverse the condition of the case statement
return false;
@@ -140,13 +132,6 @@ bool RemoveSwitchFallThrough::visitCase(Visit, TIntermCase *node)
bool RemoveSwitchFallThrough::visitAggregate(Visit, TIntermAggregate *node)
{
- mPreviousCase->getSequence()->push_back(node);
- mLastStatementWasBreak = false;
- return false;
-}
-
-bool RemoveSwitchFallThrough::visitBlock(Visit, TIntermBlock *node)
-{
if (node != mStatementList)
{
mPreviousCase->getSequence()->push_back(node);
@@ -170,5 +155,3 @@ bool RemoveSwitchFallThrough::visitBranch(Visit, TIntermBranch *node)
mLastStatementWasBreak = true;
return false;
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/RemoveSwitchFallThrough.h b/gfx/angle/src/compiler/translator/RemoveSwitchFallThrough.h
index fd8bf4fa2..db8699327 100755
--- a/gfx/angle/src/compiler/translator/RemoveSwitchFallThrough.h
+++ b/gfx/angle/src/compiler/translator/RemoveSwitchFallThrough.h
@@ -9,42 +9,35 @@
#include "compiler/translator/IntermNode.h"
-namespace sh
-{
-
class RemoveSwitchFallThrough : public TIntermTraverser
{
public:
// When given a statementList from a switch AST node, return an updated
// statementList that has fall-through removed.
- static TIntermBlock *removeFallThrough(TIntermBlock *statementList);
+ static TIntermAggregate *removeFallThrough(TIntermAggregate *statementList);
private:
- RemoveSwitchFallThrough(TIntermBlock *statementList);
+ RemoveSwitchFallThrough(TIntermAggregate *statementList);
void visitSymbol(TIntermSymbol *node) override;
void visitConstantUnion(TIntermConstantUnion *node) override;
bool visitBinary(Visit, TIntermBinary *node) override;
bool visitUnary(Visit, TIntermUnary *node) override;
- bool visitTernary(Visit visit, TIntermTernary *node) override;
- bool visitIfElse(Visit visit, TIntermIfElse *node) override;
+ bool visitSelection(Visit visit, TIntermSelection *node) override;
bool visitSwitch(Visit, TIntermSwitch *node) override;
bool visitCase(Visit, TIntermCase *node) override;
bool visitAggregate(Visit, TIntermAggregate *node) override;
- bool visitBlock(Visit, TIntermBlock *node) override;
bool visitLoop(Visit, TIntermLoop *node) override;
bool visitBranch(Visit, TIntermBranch *node) override;
void outputSequence(TIntermSequence *sequence, size_t startIndex);
void handlePreviousCase();
- TIntermBlock *mStatementList;
- TIntermBlock *mStatementListOut;
+ TIntermAggregate *mStatementList;
+ TIntermAggregate *mStatementListOut;
bool mLastStatementWasBreak;
- TIntermBlock *mPreviousCase;
- std::vector<TIntermBlock *> mCasesSharingBreak;
+ TIntermAggregate *mPreviousCase;
+ std::vector<TIntermAggregate *> mCasesSharingBreak;
};
-} // namespace sh
-
#endif // COMPILER_TRANSLATOR_REMOVESWITCHFALLTHROUGH_H_
diff --git a/gfx/angle/src/compiler/translator/RenameFunction.h b/gfx/angle/src/compiler/translator/RenameFunction.h
new file mode 100644
index 000000000..fd6a365fe
--- /dev/null
+++ b/gfx/angle/src/compiler/translator/RenameFunction.h
@@ -0,0 +1,36 @@
+//
+// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+
+#ifndef COMPILER_TRANSLATOR_RENAMEFUNCTION_H_
+#define COMPILER_TRANSLATOR_RENAMEFUNCTION_H_
+
+#include "compiler/translator/IntermNode.h"
+
+//
+// Renames a function, including its declaration and any calls to it.
+//
+class RenameFunction : public TIntermTraverser
+{
+public:
+ RenameFunction(const TString& oldFunctionName, const TString& newFunctionName)
+ : TIntermTraverser(true, false, false)
+ , mOldFunctionName(oldFunctionName)
+ , mNewFunctionName(newFunctionName) {}
+
+ bool visitAggregate(Visit visit, TIntermAggregate *node) override
+ {
+ TOperator op = node->getOp();
+ if ((op == EOpFunction || op == EOpFunctionCall) && node->getName() == mOldFunctionName)
+ node->setName(mNewFunctionName);
+ return true;
+ }
+
+private:
+ const TString mOldFunctionName;
+ const TString mNewFunctionName;
+};
+
+#endif // COMPILER_TRANSLATOR_RENAMEFUNCTION_H_
diff --git a/gfx/angle/src/compiler/translator/RewriteDoWhile.cpp b/gfx/angle/src/compiler/translator/RewriteDoWhile.cpp
index 7999cbf49..834744754 100755
--- a/gfx/angle/src/compiler/translator/RewriteDoWhile.cpp
+++ b/gfx/angle/src/compiler/translator/RewriteDoWhile.cpp
@@ -11,9 +11,6 @@
#include "compiler/translator/IntermNode.h"
-namespace sh
-{
-
namespace
{
@@ -46,11 +43,15 @@ class DoWhileRewriter : public TIntermTraverser
public:
DoWhileRewriter() : TIntermTraverser(true, false, false) {}
- bool visitBlock(Visit, TIntermBlock *node) override
+ bool visitAggregate(Visit, TIntermAggregate *node) override
{
- // A well-formed AST can only have do-while inside TIntermBlock. By doing a prefix traversal
- // we are able to replace the do-while in the sequence directly as the content of the
- // do-while will be traversed later.
+ // A well-formed AST can only have do-while in EOpSequence which represent lists of
+ // statements. By doing a prefix traversal we are able to replace the do-while in the
+ // sequence directly as the content of the do-while will be traversed later.
+ if (node->getOp() != EOpSequence)
+ {
+ return true;
+ }
TIntermSequence *statements = node->getSequence();
@@ -70,7 +71,7 @@ class DoWhileRewriter : public TIntermTraverser
TType boolType = TType(EbtBool);
// bool temp = false;
- TIntermDeclaration *tempDeclaration = nullptr;
+ TIntermAggregate *tempDeclaration = nullptr;
{
TConstantUnion *falseConstant = new TConstantUnion();
falseConstant->setBConst(false);
@@ -94,22 +95,23 @@ class DoWhileRewriter : public TIntermTraverser
// break;
// }
// }
- TIntermIfElse *breakIf = nullptr;
+ TIntermSelection *breakIf = nullptr;
{
TIntermBranch *breakStatement = new TIntermBranch(EOpBreak, nullptr);
- TIntermBlock *breakBlock = new TIntermBlock();
+ TIntermAggregate *breakBlock = new TIntermAggregate(EOpSequence);
breakBlock->getSequence()->push_back(breakStatement);
- TIntermUnary *negatedCondition =
- new TIntermUnary(EOpLogicalNot, loop->getCondition());
+ TIntermUnary *negatedCondition = new TIntermUnary(EOpLogicalNot);
+ negatedCondition->setOperand(loop->getCondition());
- TIntermIfElse *innerIf = new TIntermIfElse(negatedCondition, breakBlock, nullptr);
+ TIntermSelection *innerIf =
+ new TIntermSelection(negatedCondition, breakBlock, nullptr);
- TIntermBlock *innerIfBlock = new TIntermBlock();
+ TIntermAggregate *innerIfBlock = new TIntermAggregate(EOpSequence);
innerIfBlock->getSequence()->push_back(innerIf);
- breakIf = new TIntermIfElse(createTempSymbol(boolType), innerIfBlock, nullptr);
+ breakIf = new TIntermSelection(createTempSymbol(boolType), innerIfBlock, nullptr);
}
// Assemble the replacement loops, reusing the do-while loop's body and inserting our
@@ -120,10 +122,14 @@ class DoWhileRewriter : public TIntermTraverser
trueConstant->setBConst(true);
TIntermTyped *trueValue = new TIntermConstantUnion(trueConstant, boolType);
- TIntermBlock *body = loop->getBody();
- if (body == nullptr)
+ TIntermAggregate *body = nullptr;
+ if (loop->getBody() != nullptr)
{
- body = new TIntermBlock();
+ body = loop->getBody()->getAsAggregate();
+ }
+ else
+ {
+ body = new TIntermAggregate(EOpSequence);
}
auto sequence = body->getSequence();
sequence->insert(sequence->begin(), assignTrue);
@@ -155,5 +161,3 @@ void RewriteDoWhile(TIntermNode *root, unsigned int *temporaryIndex)
root->traverse(&rewriter);
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/RewriteDoWhile.h b/gfx/angle/src/compiler/translator/RewriteDoWhile.h
index 91a7958c0..f6ec1caf0 100755
--- a/gfx/angle/src/compiler/translator/RewriteDoWhile.h
+++ b/gfx/angle/src/compiler/translator/RewriteDoWhile.h
@@ -10,10 +10,7 @@
#ifndef COMPILER_TRANSLATOR_REWRITEDOWHILE_H_
#define COMPILER_TRANSLATOR_REWRITEDOWHILE_H_
-namespace sh
-{
class TIntermNode;
void RewriteDoWhile(TIntermNode *root, unsigned int *temporaryIndex);
-} // namespace sh
#endif // COMPILER_TRANSLATOR_REWRITEDOWHILE_H_
diff --git a/gfx/angle/src/compiler/translator/RewriteElseBlocks.cpp b/gfx/angle/src/compiler/translator/RewriteElseBlocks.cpp
index 937de11cd..52ede1743 100755
--- a/gfx/angle/src/compiler/translator/RewriteElseBlocks.cpp
+++ b/gfx/angle/src/compiler/translator/RewriteElseBlocks.cpp
@@ -8,8 +8,6 @@
//
#include "compiler/translator/RewriteElseBlocks.h"
-
-#include "compiler/translator/Intermediate.h"
#include "compiler/translator/NodeSearch.h"
#include "compiler/translator/SymbolTable.h"
@@ -25,60 +23,81 @@ class ElseBlockRewriter : public TIntermTraverser
ElseBlockRewriter();
protected:
- bool visitFunctionDefinition(Visit visit, TIntermFunctionDefinition *aggregate) override;
- bool visitBlock(Visit visit, TIntermBlock *block) override;
+ bool visitAggregate(Visit visit, TIntermAggregate *aggregate) override;
private:
const TType *mFunctionType;
- TIntermNode *rewriteIfElse(TIntermIfElse *ifElse);
+ TIntermNode *rewriteSelection(TIntermSelection *selection);
};
+TIntermUnary *MakeNewUnary(TOperator op, TIntermTyped *operand)
+{
+ TIntermUnary *unary = new TIntermUnary(op, operand->getType());
+ unary->setOperand(operand);
+ return unary;
+}
+
ElseBlockRewriter::ElseBlockRewriter()
: TIntermTraverser(true, false, true),
mFunctionType(NULL)
{}
-bool ElseBlockRewriter::visitFunctionDefinition(Visit visit, TIntermFunctionDefinition *node)
+bool ElseBlockRewriter::visitAggregate(Visit visit, TIntermAggregate *node)
{
- // Store the current function context (see comment below)
- mFunctionType = ((visit == PreVisit) ? &node->getType() : nullptr);
- return true;
-}
-
-bool ElseBlockRewriter::visitBlock(Visit visit, TIntermBlock *node)
-{
- if (visit == PostVisit)
+ switch (node->getOp())
{
- for (size_t statementIndex = 0; statementIndex != node->getSequence()->size();
- statementIndex++)
+ case EOpSequence:
+ if (visit == PostVisit)
{
- TIntermNode *statement = (*node->getSequence())[statementIndex];
- TIntermIfElse *ifElse = statement->getAsIfElseNode();
- if (ifElse && ifElse->getFalseBlock() != nullptr)
+ for (size_t statementIndex = 0; statementIndex != node->getSequence()->size(); statementIndex++)
{
- (*node->getSequence())[statementIndex] = rewriteIfElse(ifElse);
+ TIntermNode *statement = (*node->getSequence())[statementIndex];
+ TIntermSelection *selection = statement->getAsSelectionNode();
+ if (selection && selection->getFalseBlock() != nullptr)
+ {
+ // Check for if / else if
+ TIntermSelection *elseIfBranch = selection->getFalseBlock()->getAsSelectionNode();
+ if (elseIfBranch)
+ {
+ selection->replaceChildNode(elseIfBranch, rewriteSelection(elseIfBranch));
+ delete elseIfBranch;
+ }
+
+ (*node->getSequence())[statementIndex] = rewriteSelection(selection);
+ delete selection;
+ }
}
}
+ break;
+
+ case EOpFunction:
+ // Store the current function context (see comment below)
+ mFunctionType = ((visit == PreVisit) ? &node->getType() : NULL);
+ break;
+
+ default: break;
}
+
return true;
}
-TIntermNode *ElseBlockRewriter::rewriteIfElse(TIntermIfElse *ifElse)
+TIntermNode *ElseBlockRewriter::rewriteSelection(TIntermSelection *selection)
{
- ASSERT(ifElse != nullptr);
+ ASSERT(selection != nullptr);
nextTemporaryIndex();
- TIntermDeclaration *storeCondition = createTempInitDeclaration(ifElse->getCondition());
+ TIntermTyped *typedCondition = selection->getCondition()->getAsTyped();
+ TIntermAggregate *storeCondition = createTempInitDeclaration(typedCondition);
- TIntermBlock *falseBlock = nullptr;
+ TIntermSelection *falseBlock = nullptr;
TType boolType(EbtBool, EbpUndefined, EvqTemporary);
- if (ifElse->getFalseBlock())
+ if (selection->getFalseBlock())
{
- TIntermBlock *negatedElse = nullptr;
+ TIntermAggregate *negatedElse = nullptr;
// crbug.com/346463
// D3D generates error messages claiming a function has no return value, when rewriting
// an if-else clause that returns something non-void in a function. By appending dummy
@@ -89,24 +108,22 @@ TIntermNode *ElseBlockRewriter::rewriteIfElse(TIntermIfElse *ifElse)
mFunctionType->getBasicString();
TString rawText = "return (" + typeString + ")0";
TIntermRaw *returnNode = new TIntermRaw(*mFunctionType, rawText);
- negatedElse = new TIntermBlock();
+ negatedElse = new TIntermAggregate(EOpSequence);
negatedElse->getSequence()->push_back(returnNode);
}
TIntermSymbol *conditionSymbolElse = createTempSymbol(boolType);
- TIntermUnary *negatedCondition = new TIntermUnary(EOpLogicalNot, conditionSymbolElse);
- TIntermIfElse *falseIfElse =
- new TIntermIfElse(negatedCondition, ifElse->getFalseBlock(), negatedElse);
- falseBlock = TIntermediate::EnsureBlock(falseIfElse);
+ TIntermUnary *negatedCondition = MakeNewUnary(EOpLogicalNot, conditionSymbolElse);
+ falseBlock = new TIntermSelection(negatedCondition,
+ selection->getFalseBlock(), negatedElse);
}
TIntermSymbol *conditionSymbolSel = createTempSymbol(boolType);
- TIntermIfElse *newIfElse =
- new TIntermIfElse(conditionSymbolSel, ifElse->getTrueBlock(), falseBlock);
+ TIntermSelection *newSelection = new TIntermSelection(conditionSymbolSel, selection->getTrueBlock(), falseBlock);
- TIntermBlock *block = new TIntermBlock();
+ TIntermAggregate *block = new TIntermAggregate(EOpSequence);
block->getSequence()->push_back(storeCondition);
- block->getSequence()->push_back(newIfElse);
+ block->getSequence()->push_back(newSelection);
return block;
}
diff --git a/gfx/angle/src/compiler/translator/RewriteTexelFetchOffset.cpp b/gfx/angle/src/compiler/translator/RewriteTexelFetchOffset.cpp
index 487c90991..4ceceb226 100755
--- a/gfx/angle/src/compiler/translator/RewriteTexelFetchOffset.cpp
+++ b/gfx/angle/src/compiler/translator/RewriteTexelFetchOffset.cpp
@@ -22,6 +22,7 @@ class Traverser : public TIntermTraverser
{
public:
static void Apply(TIntermNode *root,
+ unsigned int *tempIndex,
const TSymbolTable &symbolTable,
int shaderVersion);
@@ -42,10 +43,12 @@ Traverser::Traverser(const TSymbolTable &symbolTable, int shaderVersion)
// static
void Traverser::Apply(TIntermNode *root,
+ unsigned int *tempIndex,
const TSymbolTable &symbolTable,
int shaderVersion)
{
Traverser traverser(symbolTable, shaderVersion);
+ traverser.useTemporaryIndex(tempIndex);
do
{
traverser.nextIteration();
@@ -60,6 +63,7 @@ void Traverser::Apply(TIntermNode *root,
void Traverser::nextIteration()
{
mFound = false;
+ nextTemporaryIndex();
}
bool Traverser::visitAggregate(Visit visit, TIntermAggregate *node)
@@ -75,7 +79,7 @@ bool Traverser::visitAggregate(Visit visit, TIntermAggregate *node)
return true;
}
- if (node->getFunctionSymbolInfo()->getName().compare(0, 16, "texelFetchOffset") != 0)
+ if (node->getName().compare(0, 16, "texelFetchOffset") != 0)
{
return true;
}
@@ -83,36 +87,42 @@ bool Traverser::visitAggregate(Visit visit, TIntermAggregate *node)
// Potential problem case detected, apply workaround.
const TIntermSequence *sequence = node->getSequence();
ASSERT(sequence->size() == 4u);
+ nextTemporaryIndex();
// Decide if there is a 2DArray sampler.
- bool is2DArray = node->getFunctionSymbolInfo()->getName().find("s2a1") != TString::npos;
+ bool is2DArray = node->getName().find("s2a1") != TString::npos;
// Create new argument list from node->getName().
// e.g. Get "(is2a1;vi3;i1;" from "texelFetchOffset(is2a1;vi3;i1;vi2;"
- TString newArgs = node->getFunctionSymbolInfo()->getName().substr(
- 16, node->getFunctionSymbolInfo()->getName().length() - 20);
+ TString newArgs = node->getName().substr(16, node->getName().length() - 20);
TString newName = "texelFetch" + newArgs;
TSymbol *texelFetchSymbol = symbolTable->findBuiltIn(newName, shaderVersion);
ASSERT(texelFetchSymbol);
int uniqueId = texelFetchSymbol->getUniqueId();
// Create new node that represents the call of function texelFetch.
- // Its argument list will be: texelFetch(sampler, Position+offset, lod).
TIntermAggregate *texelFetchNode = new TIntermAggregate(EOpFunctionCall);
- texelFetchNode->getFunctionSymbolInfo()->setName(newName);
- texelFetchNode->getFunctionSymbolInfo()->setId(uniqueId);
+ texelFetchNode->setName(newName);
+ texelFetchNode->setFunctionId(uniqueId);
texelFetchNode->setType(node->getType());
texelFetchNode->setLine(node->getLine());
+ // Create argument List of texelFetch(sampler, Position+offset, lod).
+ TIntermSequence newsequence;
+
// sampler
- texelFetchNode->getSequence()->push_back(sequence->at(0));
+ newsequence.push_back(sequence->at(0));
+ // Position+offset
+ TIntermBinary *add = new TIntermBinary(EOpAdd);
+ add->setType(node->getType());
// Position
TIntermTyped *texCoordNode = sequence->at(1)->getAsTyped();
ASSERT(texCoordNode);
-
+ add->setLine(texCoordNode->getLine());
+ add->setType(texCoordNode->getType());
+ add->setLeft(texCoordNode);
// offset
- TIntermTyped *offsetNode = nullptr;
ASSERT(sequence->at(3)->getAsTyped());
if (is2DArray)
{
@@ -122,31 +132,28 @@ bool Traverser::visitAggregate(Visit visit, TIntermAggregate *node)
constructIVec3Node->setLine(texCoordNode->getLine());
constructIVec3Node->setType(texCoordNode->getType());
- constructIVec3Node->getSequence()->push_back(sequence->at(3)->getAsTyped());
+ TIntermSequence ivec3Sequence;
+ ivec3Sequence.push_back(sequence->at(3)->getAsTyped());
TConstantUnion *zero = new TConstantUnion();
zero->setIConst(0);
TType *intType = new TType(EbtInt);
TIntermConstantUnion *zeroNode = new TIntermConstantUnion(zero, *intType);
- constructIVec3Node->getSequence()->push_back(zeroNode);
+ ivec3Sequence.push_back(zeroNode);
+ constructIVec3Node->insertChildNodes(0, ivec3Sequence);
- offsetNode = constructIVec3Node;
+ add->setRight(constructIVec3Node);
}
else
{
- offsetNode = sequence->at(3)->getAsTyped();
+ add->setRight(sequence->at(3)->getAsTyped());
}
-
- // Position+offset
- TIntermBinary *add = new TIntermBinary(EOpAdd, texCoordNode, offsetNode);
- add->setLine(texCoordNode->getLine());
- texelFetchNode->getSequence()->push_back(add);
+ newsequence.push_back(add);
// lod
- texelFetchNode->getSequence()->push_back(sequence->at(2));
-
- ASSERT(texelFetchNode->getSequence()->size() == 3u);
+ newsequence.push_back(sequence->at(2));
+ texelFetchNode->insertChildNodes(0, newsequence);
// Replace the old node by this new node.
queueReplacement(node, texelFetchNode, OriginalNode::IS_DROPPED);
@@ -157,6 +164,7 @@ bool Traverser::visitAggregate(Visit visit, TIntermAggregate *node)
} // anonymous namespace
void RewriteTexelFetchOffset(TIntermNode *root,
+ unsigned int *tempIndex,
const TSymbolTable &symbolTable,
int shaderVersion)
{
@@ -164,7 +172,7 @@ void RewriteTexelFetchOffset(TIntermNode *root,
if (shaderVersion < 300)
return;
- Traverser::Apply(root, symbolTable, shaderVersion);
+ Traverser::Apply(root, tempIndex, symbolTable, shaderVersion);
}
} // namespace sh \ No newline at end of file
diff --git a/gfx/angle/src/compiler/translator/RewriteTexelFetchOffset.h b/gfx/angle/src/compiler/translator/RewriteTexelFetchOffset.h
index 4218f0b69..a60c26331 100755
--- a/gfx/angle/src/compiler/translator/RewriteTexelFetchOffset.h
+++ b/gfx/angle/src/compiler/translator/RewriteTexelFetchOffset.h
@@ -22,6 +22,7 @@ namespace sh
{
void RewriteTexelFetchOffset(TIntermNode *root,
+ unsigned int *tempIndex,
const TSymbolTable &symbolTable,
int shaderVersion);
diff --git a/gfx/angle/src/compiler/translator/RewriteUnaryMinusOperatorInt.cpp b/gfx/angle/src/compiler/translator/RewriteUnaryMinusOperatorInt.cpp
deleted file mode 100644
index ef708cb2e..000000000
--- a/gfx/angle/src/compiler/translator/RewriteUnaryMinusOperatorInt.cpp
+++ /dev/null
@@ -1,112 +0,0 @@
-//
-// Copyright (c) 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// Implementation of evaluating unary integer variable bug workaround.
-// See header for more info.
-
-#include "compiler/translator/RewriteUnaryMinusOperatorInt.h"
-
-#include "compiler/translator/IntermNode.h"
-
-namespace sh
-{
-
-namespace
-{
-
-class Traverser : public TIntermTraverser
-{
- public:
- static void Apply(TIntermNode *root);
-
- private:
- Traverser();
- bool visitUnary(Visit visit, TIntermUnary *node) override;
- void nextIteration();
-
- bool mFound = false;
-};
-
-// static
-void Traverser::Apply(TIntermNode *root)
-{
- Traverser traverser;
- do
- {
- traverser.nextIteration();
- root->traverse(&traverser);
- if (traverser.mFound)
- {
- traverser.updateTree();
- }
- } while (traverser.mFound);
-}
-
-Traverser::Traverser() : TIntermTraverser(true, false, false)
-{
-}
-
-void Traverser::nextIteration()
-{
- mFound = false;
-}
-
-bool Traverser::visitUnary(Visit visit, TIntermUnary *node)
-{
- if (mFound)
- {
- return false;
- }
-
- // Decide if the current unary operator is unary minus.
- if (node->getOp() != EOpNegative)
- {
- return true;
- }
-
- // Decide if the current operand is an integer variable.
- TIntermTyped *opr = node->getOperand();
- if (!opr->getType().isScalarInt())
- {
- return true;
- }
-
- // Potential problem case detected, apply workaround: -(int) -> ~(int) + 1.
- // ~(int)
- TIntermUnary *bitwiseNot = new TIntermUnary(EOpBitwiseNot, opr);
- bitwiseNot->setLine(opr->getLine());
-
- // Constant 1 (or 1u)
- TConstantUnion *one = new TConstantUnion();
- if (opr->getType().getBasicType() == EbtInt)
- {
- one->setIConst(1);
- }
- else
- {
- one->setUConst(1u);
- }
- TIntermConstantUnion *oneNode = new TIntermConstantUnion(one, opr->getType());
- oneNode->getTypePointer()->setQualifier(EvqConst);
- oneNode->setLine(opr->getLine());
-
- // ~(int) + 1
- TIntermBinary *add = new TIntermBinary(EOpAdd, bitwiseNot, oneNode);
- add->setLine(opr->getLine());
-
- queueReplacement(node, add, OriginalNode::IS_DROPPED);
-
- mFound = true;
- return false;
-}
-
-} // anonymous namespace
-
-void RewriteUnaryMinusOperatorInt(TIntermNode *root)
-{
- Traverser::Apply(root);
-}
-
-} // namespace sh \ No newline at end of file
diff --git a/gfx/angle/src/compiler/translator/RewriteUnaryMinusOperatorInt.h b/gfx/angle/src/compiler/translator/RewriteUnaryMinusOperatorInt.h
deleted file mode 100644
index 50f0c442a..000000000
--- a/gfx/angle/src/compiler/translator/RewriteUnaryMinusOperatorInt.h
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright (c) 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// This mutating tree traversal works around a bug on evaluating unary
-// integer variable on Intel D3D driver. It works by rewriting -(int) to
-// ~(int) + 1 when evaluating unary integer variables.
-
-#ifndef COMPILER_TRANSLATOR_REWRITEUNARYMINUSOPERATORINT_H_
-#define COMPILER_TRANSLATOR_REWRITEUNARYMINUSOPERATORINT_H_
-
-class TIntermNode;
-namespace sh
-{
-
-void RewriteUnaryMinusOperatorInt(TIntermNode *root);
-
-} // namespace sh
-
-#endif // COMPILER_TRANSLATOR_REWRITEUNARYMINUSOPERATORINT_H_ \ No newline at end of file
diff --git a/gfx/angle/src/compiler/translator/ScalarizeVecAndMatConstructorArgs.cpp b/gfx/angle/src/compiler/translator/ScalarizeVecAndMatConstructorArgs.cpp
index 5afa0d308..775c5d871 100755
--- a/gfx/angle/src/compiler/translator/ScalarizeVecAndMatConstructorArgs.cpp
+++ b/gfx/angle/src/compiler/translator/ScalarizeVecAndMatConstructorArgs.cpp
@@ -3,10 +3,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
-// Scalarize vector and matrix constructor args, so that vectors built from components don't have
-// matrix arguments, and matrices built from components don't have vector arguments. This avoids
-// driver bugs around vector and matrix constructors.
-//
#include "common/debug.h"
#include "compiler/translator/ScalarizeVecAndMatConstructorArgs.h"
@@ -15,10 +11,6 @@
#include "angle_gl.h"
#include "common/angleutils.h"
-#include "compiler/translator/IntermNode.h"
-
-namespace sh
-{
namespace
{
@@ -45,9 +37,23 @@ bool ContainsVectorNode(const TIntermSequence &sequence)
return false;
}
+TIntermConstantUnion *ConstructIndexNode(int index)
+{
+ TConstantUnion *u = new TConstantUnion[1];
+ u[0].setIConst(index);
+
+ TType type(EbtInt, EbpUndefined, EvqConst, 1);
+ TIntermConstantUnion *node = new TIntermConstantUnion(u, type);
+ return node;
+}
+
TIntermBinary *ConstructVectorIndexBinaryNode(TIntermSymbol *symbolNode, int index)
{
- return new TIntermBinary(EOpIndexDirect, symbolNode, TIntermTyped::CreateIndexNode(index));
+ TIntermBinary *binary = new TIntermBinary(EOpIndexDirect);
+ binary->setLeft(symbolNode);
+ TIntermConstantUnion *indexNode = ConstructIndexNode(index);
+ binary->setRight(indexNode);
+ return binary;
}
TIntermBinary *ConstructMatrixIndexBinaryNode(
@@ -56,53 +62,40 @@ TIntermBinary *ConstructMatrixIndexBinaryNode(
TIntermBinary *colVectorNode =
ConstructVectorIndexBinaryNode(symbolNode, colIndex);
- return new TIntermBinary(EOpIndexDirect, colVectorNode,
- TIntermTyped::CreateIndexNode(rowIndex));
+ TIntermBinary *binary = new TIntermBinary(EOpIndexDirect);
+ binary->setLeft(colVectorNode);
+ TIntermConstantUnion *rowIndexNode = ConstructIndexNode(rowIndex);
+ binary->setRight(rowIndexNode);
+ return binary;
}
-class ScalarizeArgsTraverser : public TIntermTraverser
-{
- public:
- ScalarizeArgsTraverser(sh::GLenum shaderType,
- bool fragmentPrecisionHigh,
- unsigned int *temporaryIndex)
- : TIntermTraverser(true, false, false),
- mShaderType(shaderType),
- mFragmentPrecisionHigh(fragmentPrecisionHigh)
- {
- useTemporaryIndex(temporaryIndex);
- }
-
- protected:
- bool visitAggregate(Visit visit, TIntermAggregate *node) override;
- bool visitBlock(Visit visit, TIntermBlock *node) override;
-
- private:
- void scalarizeArgs(TIntermAggregate *aggregate, bool scalarizeVector, bool scalarizeMatrix);
-
- // If we have the following code:
- // mat4 m(0);
- // vec4 v(1, m);
- // We will rewrite to:
- // mat4 m(0);
- // mat4 s0 = m;
- // vec4 v(1, s0[0][0], s0[0][1], s0[0][2]);
- // This function is to create nodes for "mat4 s0 = m;" and insert it to the code sequence. This
- // way the possible side effects of the constructor argument will only be evaluated once.
- void createTempVariable(TIntermTyped *original);
-
- std::vector<TIntermSequence> mBlockStack;
-
- sh::GLenum mShaderType;
- bool mFragmentPrecisionHigh;
-};
+} // namespace anonymous
-bool ScalarizeArgsTraverser::visitAggregate(Visit visit, TIntermAggregate *node)
+bool ScalarizeVecAndMatConstructorArgs::visitAggregate(Visit visit, TIntermAggregate *node)
{
if (visit == PreVisit)
{
switch (node->getOp())
{
+ case EOpSequence:
+ mSequenceStack.push_back(TIntermSequence());
+ {
+ for (TIntermSequence::const_iterator iter = node->getSequence()->begin();
+ iter != node->getSequence()->end(); ++iter)
+ {
+ TIntermNode *child = *iter;
+ ASSERT(child != NULL);
+ child->traverse(this);
+ mSequenceStack.back().push_back(child);
+ }
+ }
+ if (mSequenceStack.back().size() > node->getSequence()->size())
+ {
+ node->getSequence()->clear();
+ *(node->getSequence()) = mSequenceStack.back();
+ }
+ mSequenceStack.pop_back();
+ return false;
case EOpConstructVec2:
case EOpConstructVec3:
case EOpConstructVec4:
@@ -134,29 +127,8 @@ bool ScalarizeArgsTraverser::visitAggregate(Visit visit, TIntermAggregate *node)
return true;
}
-bool ScalarizeArgsTraverser::visitBlock(Visit visit, TIntermBlock *node)
-{
- mBlockStack.push_back(TIntermSequence());
- {
- for (TIntermNode *child : *node->getSequence())
- {
- ASSERT(child != nullptr);
- child->traverse(this);
- mBlockStack.back().push_back(child);
- }
- }
- if (mBlockStack.back().size() > node->getSequence()->size())
- {
- node->getSequence()->clear();
- *(node->getSequence()) = mBlockStack.back();
- }
- mBlockStack.pop_back();
- return false;
-}
-
-void ScalarizeArgsTraverser::scalarizeArgs(TIntermAggregate *aggregate,
- bool scalarizeVector,
- bool scalarizeMatrix)
+void ScalarizeVecAndMatConstructorArgs::scalarizeArgs(
+ TIntermAggregate *aggregate, bool scalarizeVector, bool scalarizeMatrix)
{
ASSERT(aggregate);
int size = 0;
@@ -207,10 +179,12 @@ void ScalarizeArgsTraverser::scalarizeArgs(TIntermAggregate *aggregate,
ASSERT(size > 0);
TIntermTyped *node = original[ii]->getAsTyped();
ASSERT(node);
- createTempVariable(node);
+ TString varName = createTempVariable(node);
if (node->isScalar())
{
- sequence->push_back(createTempSymbol(node->getType()));
+ TIntermSymbol *symbolNode =
+ new TIntermSymbol(-1, varName, node->getType());
+ sequence->push_back(symbolNode);
size--;
}
else if (node->isVector())
@@ -221,7 +195,8 @@ void ScalarizeArgsTraverser::scalarizeArgs(TIntermAggregate *aggregate,
size -= repeat;
for (int index = 0; index < repeat; ++index)
{
- TIntermSymbol *symbolNode = createTempSymbol(node->getType());
+ TIntermSymbol *symbolNode =
+ new TIntermSymbol(-1, varName, node->getType());
TIntermBinary *newNode = ConstructVectorIndexBinaryNode(
symbolNode, index);
sequence->push_back(newNode);
@@ -229,7 +204,8 @@ void ScalarizeArgsTraverser::scalarizeArgs(TIntermAggregate *aggregate,
}
else
{
- TIntermSymbol *symbolNode = createTempSymbol(node->getType());
+ TIntermSymbol *symbolNode =
+ new TIntermSymbol(-1, varName, node->getType());
sequence->push_back(symbolNode);
size -= node->getNominalSize();
}
@@ -244,7 +220,8 @@ void ScalarizeArgsTraverser::scalarizeArgs(TIntermAggregate *aggregate,
size -= repeat;
while (repeat > 0)
{
- TIntermSymbol *symbolNode = createTempSymbol(node->getType());
+ TIntermSymbol *symbolNode =
+ new TIntermSymbol(-1, varName, node->getType());
TIntermBinary *newNode = ConstructMatrixIndexBinaryNode(
symbolNode, colIndex, rowIndex);
sequence->push_back(newNode);
@@ -259,7 +236,8 @@ void ScalarizeArgsTraverser::scalarizeArgs(TIntermAggregate *aggregate,
}
else
{
- TIntermSymbol *symbolNode = createTempSymbol(node->getType());
+ TIntermSymbol *symbolNode =
+ new TIntermSymbol(-1, varName, node->getType());
sequence->push_back(symbolNode);
size -= node->getCols() * node->getRows();
}
@@ -267,13 +245,29 @@ void ScalarizeArgsTraverser::scalarizeArgs(TIntermAggregate *aggregate,
}
}
-void ScalarizeArgsTraverser::createTempVariable(TIntermTyped *original)
+TString ScalarizeVecAndMatConstructorArgs::createTempVariable(TIntermTyped *original)
{
- ASSERT(original);
- nextTemporaryIndex();
- TIntermDeclaration *decl = createTempInitDeclaration(original);
+ TString tempVarName = "_webgl_tmp_";
+ if (original->isScalar())
+ {
+ tempVarName += "scalar_";
+ }
+ else if (original->isVector())
+ {
+ tempVarName += "vec_";
+ }
+ else
+ {
+ ASSERT(original->isMatrix());
+ tempVarName += "mat_";
+ }
+ tempVarName += Str(mTempVarCount).c_str();
+ mTempVarCount++;
+ ASSERT(original);
TType type = original->getType();
+ type.setQualifier(EvqTemporary);
+
if (mShaderType == GL_FRAGMENT_SHADER &&
type.getBasicType() == EbtFloat &&
type.getPrecision() == EbpUndefined)
@@ -281,26 +275,21 @@ void ScalarizeArgsTraverser::createTempVariable(TIntermTyped *original)
// We use the highest available precision for the temporary variable
// to avoid computing the actual precision using the rules defined
// in GLSL ES 1.0 Section 4.5.2.
- TIntermBinary *init = decl->getSequence()->at(0)->getAsBinaryNode();
- init->getTypePointer()->setPrecision(mFragmentPrecisionHigh ? EbpHigh : EbpMedium);
- init->getLeft()->getTypePointer()->setPrecision(mFragmentPrecisionHigh ? EbpHigh
- : EbpMedium);
+ type.setPrecision(mFragmentPrecisionHigh ? EbpHigh : EbpMedium);
}
- ASSERT(mBlockStack.size() > 0);
- TIntermSequence &sequence = mBlockStack.back();
- sequence.push_back(decl);
-}
+ TIntermBinary *init = new TIntermBinary(EOpInitialize);
+ TIntermSymbol *symbolNode = new TIntermSymbol(-1, tempVarName, type);
+ init->setLeft(symbolNode);
+ init->setRight(original);
+ init->setType(type);
-} // namespace anonymous
+ TIntermAggregate *decl = new TIntermAggregate(EOpDeclaration);
+ decl->getSequence()->push_back(init);
-void ScalarizeVecAndMatConstructorArgs(TIntermBlock *root,
- sh::GLenum shaderType,
- bool fragmentPrecisionHigh,
- unsigned int *temporaryIndex)
-{
- ScalarizeArgsTraverser scalarizer(shaderType, fragmentPrecisionHigh, temporaryIndex);
- root->traverse(&scalarizer);
-}
+ ASSERT(mSequenceStack.size() > 0);
+ TIntermSequence &sequence = mSequenceStack.back();
+ sequence.push_back(decl);
-} // namespace sh
+ return tempVarName;
+}
diff --git a/gfx/angle/src/compiler/translator/ScalarizeVecAndMatConstructorArgs.h b/gfx/angle/src/compiler/translator/ScalarizeVecAndMatConstructorArgs.h
index 14bbbe13e..d7553be23 100755
--- a/gfx/angle/src/compiler/translator/ScalarizeVecAndMatConstructorArgs.h
+++ b/gfx/angle/src/compiler/translator/ScalarizeVecAndMatConstructorArgs.h
@@ -3,24 +3,46 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
-// Scalarize vector and matrix constructor args, so that vectors built from components don't have
-// matrix arguments, and matrices built from components don't have vector arguments. This avoids
-// driver bugs around vector and matrix constructors.
-//
#ifndef COMPILER_TRANSLATOR_SCALARIZEVECANDMATCONSTRUCTORARGS_H_
#define COMPILER_TRANSLATOR_SCALARIZEVECANDMATCONSTRUCTORARGS_H_
-#include "GLSLANG/ShaderLang.h"
+#include "compiler/translator/IntermNode.h"
-namespace sh
+class ScalarizeVecAndMatConstructorArgs : public TIntermTraverser
{
-class TIntermBlock;
+ public:
+ ScalarizeVecAndMatConstructorArgs(sh::GLenum shaderType,
+ bool fragmentPrecisionHigh)
+ : TIntermTraverser(true, false, false),
+ mTempVarCount(0),
+ mShaderType(shaderType),
+ mFragmentPrecisionHigh(fragmentPrecisionHigh) {}
+
+ protected:
+ bool visitAggregate(Visit visit, TIntermAggregate *node) override;
+
+ private:
+ void scalarizeArgs(TIntermAggregate *aggregate,
+ bool scalarizeVector, bool scalarizeMatrix);
+
+ // If we have the following code:
+ // mat4 m(0);
+ // vec4 v(1, m);
+ // We will rewrite to:
+ // mat4 m(0);
+ // mat4 _webgl_tmp_mat_0 = m;
+ // vec4 v(1, _webgl_tmp_mat_0[0][0], _webgl_tmp_mat_0[0][1], _webgl_tmp_mat_0[0][2]);
+ // This function is to create nodes for "mat4 _webgl_tmp_mat_0 = m;" and insert it to
+ // the code sequence.
+ // Return the temporary variable name.
+ TString createTempVariable(TIntermTyped *original);
+
+ std::vector<TIntermSequence> mSequenceStack;
+ int mTempVarCount;
-void ScalarizeVecAndMatConstructorArgs(TIntermBlock *root,
- sh::GLenum shaderType,
- bool fragmentPrecisionHigh,
- unsigned int *temporaryIndex);
-} // namespace sh
+ sh::GLenum mShaderType;
+ bool mFragmentPrecisionHigh;
+};
#endif // COMPILER_TRANSLATOR_SCALARIZEVECANDMATCONSTRUCTORARGS_H_
diff --git a/gfx/angle/src/compiler/translator/SeparateArrayInitialization.cpp b/gfx/angle/src/compiler/translator/SeparateArrayInitialization.cpp
index 98e010a56..de9050cd8 100755
--- a/gfx/angle/src/compiler/translator/SeparateArrayInitialization.cpp
+++ b/gfx/angle/src/compiler/translator/SeparateArrayInitialization.cpp
@@ -20,9 +20,6 @@
#include "compiler/translator/IntermNode.h"
#include "compiler/translator/OutputHLSL.h"
-namespace sh
-{
-
namespace
{
@@ -32,7 +29,7 @@ class SeparateArrayInitTraverser : private TIntermTraverser
static void apply(TIntermNode *root);
private:
SeparateArrayInitTraverser();
- bool visitDeclaration(Visit, TIntermDeclaration *node) override;
+ bool visitAggregate(Visit, TIntermAggregate *node) override;
};
void SeparateArrayInitTraverser::apply(TIntermNode *root)
@@ -47,38 +44,44 @@ SeparateArrayInitTraverser::SeparateArrayInitTraverser()
{
}
-bool SeparateArrayInitTraverser::visitDeclaration(Visit, TIntermDeclaration *node)
+bool SeparateArrayInitTraverser::visitAggregate(Visit, TIntermAggregate *node)
{
- TIntermSequence *sequence = node->getSequence();
- TIntermBinary *initNode = sequence->back()->getAsBinaryNode();
- if (initNode != nullptr && initNode->getOp() == EOpInitialize)
+ if (node->getOp() == EOpDeclaration)
{
- TIntermTyped *initializer = initNode->getRight();
- if (initializer->isArray() && !sh::OutputHLSL::canWriteAsHLSLLiteral(initializer))
+ TIntermSequence *sequence = node->getSequence();
+ TIntermBinary *initNode = sequence->back()->getAsBinaryNode();
+ if (initNode != nullptr && initNode->getOp() == EOpInitialize)
{
- // We rely on that array declarations have been isolated to single declarations.
- ASSERT(sequence->size() == 1);
- TIntermTyped *symbol = initNode->getLeft();
- TIntermBlock *parentBlock = getParentNode()->getAsBlock();
- ASSERT(parentBlock != nullptr);
+ TIntermTyped *initializer = initNode->getRight();
+ if (initializer->isArray() && !sh::OutputHLSL::canWriteAsHLSLLiteral(initializer))
+ {
+ // We rely on that array declarations have been isolated to single declarations.
+ ASSERT(sequence->size() == 1);
+ TIntermTyped *symbol = initNode->getLeft();
+ TIntermAggregate *parentAgg = getParentNode()->getAsAggregate();
+ ASSERT(parentAgg != nullptr);
- TIntermSequence replacements;
+ TIntermSequence replacements;
- TIntermDeclaration *replacementDeclaration = new TIntermDeclaration();
- replacementDeclaration->appendDeclarator(symbol);
- replacementDeclaration->setLine(symbol->getLine());
- replacements.push_back(replacementDeclaration);
+ TIntermAggregate *replacementDeclaration = new TIntermAggregate;
+ replacementDeclaration->setOp(EOpDeclaration);
+ replacementDeclaration->getSequence()->push_back(symbol);
+ replacementDeclaration->setLine(symbol->getLine());
+ replacements.push_back(replacementDeclaration);
- TIntermBinary *replacementAssignment =
- new TIntermBinary(EOpAssign, symbol, initializer);
- replacementAssignment->setLine(symbol->getLine());
- replacements.push_back(replacementAssignment);
+ TIntermBinary *replacementAssignment = new TIntermBinary(EOpAssign);
+ replacementAssignment->setLeft(symbol);
+ replacementAssignment->setRight(initializer);
+ replacementAssignment->setType(initializer->getType());
+ replacementAssignment->setLine(symbol->getLine());
+ replacements.push_back(replacementAssignment);
- mMultiReplacements.push_back(
- NodeReplaceWithMultipleEntry(parentBlock, node, replacements));
+ mMultiReplacements.push_back(NodeReplaceWithMultipleEntry(parentAgg, node, replacements));
+ }
}
+ return false;
}
- return false;
+ return true;
}
} // namespace
@@ -87,5 +90,3 @@ void SeparateArrayInitialization(TIntermNode *root)
{
SeparateArrayInitTraverser::apply(root);
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/SeparateArrayInitialization.h b/gfx/angle/src/compiler/translator/SeparateArrayInitialization.h
index 038d38a61..d16357a3a 100755
--- a/gfx/angle/src/compiler/translator/SeparateArrayInitialization.h
+++ b/gfx/angle/src/compiler/translator/SeparateArrayInitialization.h
@@ -18,11 +18,8 @@
#ifndef COMPILER_TRANSLATOR_SEPARATEARRAYINITIALIZATION_H_
#define COMPILER_TRANSLATOR_SEPARATEARRAYINITIALIZATION_H_
-namespace sh
-{
class TIntermNode;
void SeparateArrayInitialization(TIntermNode *root);
-} // namespace sh
#endif // COMPILER_TRANSLATOR_SEPARATEARRAYINITIALIZATION_H_
diff --git a/gfx/angle/src/compiler/translator/SeparateDeclarations.cpp b/gfx/angle/src/compiler/translator/SeparateDeclarations.cpp
index 4d3835370..d33747f85 100755
--- a/gfx/angle/src/compiler/translator/SeparateDeclarations.cpp
+++ b/gfx/angle/src/compiler/translator/SeparateDeclarations.cpp
@@ -17,9 +17,6 @@
#include "compiler/translator/IntermNode.h"
-namespace sh
-{
-
namespace
{
@@ -29,7 +26,7 @@ class SeparateDeclarationsTraverser : private TIntermTraverser
static void apply(TIntermNode *root);
private:
SeparateDeclarationsTraverser();
- bool visitDeclaration(Visit, TIntermDeclaration *node) override;
+ bool visitAggregate(Visit, TIntermAggregate *node) override;
};
void SeparateDeclarationsTraverser::apply(TIntermNode *root)
@@ -44,28 +41,32 @@ SeparateDeclarationsTraverser::SeparateDeclarationsTraverser()
{
}
-bool SeparateDeclarationsTraverser::visitDeclaration(Visit, TIntermDeclaration *node)
+bool SeparateDeclarationsTraverser::visitAggregate(Visit, TIntermAggregate *node)
{
- TIntermSequence *sequence = node->getSequence();
- if (sequence->size() > 1)
+ if (node->getOp() == EOpDeclaration)
{
- TIntermBlock *parentBlock = getParentNode()->getAsBlock();
- ASSERT(parentBlock != nullptr);
-
- TIntermSequence replacementDeclarations;
- for (size_t ii = 0; ii < sequence->size(); ++ii)
+ TIntermSequence *sequence = node->getSequence();
+ if (sequence->size() > 1)
{
- TIntermDeclaration *replacementDeclaration = new TIntermDeclaration();
+ TIntermAggregate *parentAgg = getParentNode()->getAsAggregate();
+ ASSERT(parentAgg != nullptr);
- replacementDeclaration->appendDeclarator(sequence->at(ii)->getAsTyped());
- replacementDeclaration->setLine(sequence->at(ii)->getLine());
- replacementDeclarations.push_back(replacementDeclaration);
- }
+ TIntermSequence replacementDeclarations;
+ for (size_t ii = 0; ii < sequence->size(); ++ii)
+ {
+ TIntermAggregate *replacementDeclaration = new TIntermAggregate;
- mMultiReplacements.push_back(
- NodeReplaceWithMultipleEntry(parentBlock, node, replacementDeclarations));
+ replacementDeclaration->setOp(EOpDeclaration);
+ replacementDeclaration->getSequence()->push_back(sequence->at(ii));
+ replacementDeclaration->setLine(sequence->at(ii)->getLine());
+ replacementDeclarations.push_back(replacementDeclaration);
+ }
+
+ mMultiReplacements.push_back(NodeReplaceWithMultipleEntry(parentAgg, node, replacementDeclarations));
+ }
+ return false;
}
- return false;
+ return true;
}
} // namespace
@@ -74,5 +75,3 @@ void SeparateDeclarations(TIntermNode *root)
{
SeparateDeclarationsTraverser::apply(root);
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/SeparateDeclarations.h b/gfx/angle/src/compiler/translator/SeparateDeclarations.h
index 2c2611a49..77913ab8b 100755
--- a/gfx/angle/src/compiler/translator/SeparateDeclarations.h
+++ b/gfx/angle/src/compiler/translator/SeparateDeclarations.h
@@ -16,11 +16,8 @@
#ifndef COMPILER_TRANSLATOR_SEPARATEDECLARATIONS_H_
#define COMPILER_TRANSLATOR_SEPARATEDECLARATIONS_H_
-namespace sh
-{
class TIntermNode;
void SeparateDeclarations(TIntermNode *root);
-} // namespace sh
#endif // COMPILER_TRANSLATOR_SEPARATEDECLARATIONS_H_
diff --git a/gfx/angle/src/compiler/translator/SeparateExpressionsReturningArrays.cpp b/gfx/angle/src/compiler/translator/SeparateExpressionsReturningArrays.cpp
index 0f7c404d3..4041be971 100755
--- a/gfx/angle/src/compiler/translator/SeparateExpressionsReturningArrays.cpp
+++ b/gfx/angle/src/compiler/translator/SeparateExpressionsReturningArrays.cpp
@@ -14,9 +14,6 @@
#include "compiler/translator/IntermNode.h"
#include "compiler/translator/IntermNodePatternMatcher.h"
-namespace sh
-{
-
namespace
{
@@ -52,7 +49,11 @@ SeparateExpressionsTraverser::SeparateExpressionsTraverser()
// and also needs to be replaced in its original location by a different node.
TIntermBinary *CopyAssignmentNode(TIntermBinary *node)
{
- return new TIntermBinary(node->getOp(), node->getLeft(), node->getRight());
+ TIntermBinary *copyNode = new TIntermBinary(node->getOp());
+ copyNode->setLeft(node->getLeft());
+ copyNode->setRight(node->getRight());
+ copyNode->setType(node->getType());
+ return copyNode;
}
// Performs a shallow copy of a constructor/function call node.
@@ -62,11 +63,12 @@ TIntermAggregate *CopyAggregateNode(TIntermAggregate *node)
TIntermSequence *copySeq = copyNode->getSequence();
copySeq->insert(copySeq->begin(), node->getSequence()->begin(), node->getSequence()->end());
copyNode->setType(node->getType());
- *copyNode->getFunctionSymbolInfo() = *node->getFunctionSymbolInfo();
+ copyNode->setFunctionId(node->getFunctionId());
if (node->isUserDefined())
{
copyNode->setUserDefined();
}
+ copyNode->setNameObj(node->getNameObj());
return copyNode;
}
@@ -140,5 +142,3 @@ void SeparateExpressionsReturningArrays(TIntermNode *root, unsigned int *tempora
}
while (traverser.foundArrayExpression());
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/SeparateExpressionsReturningArrays.h b/gfx/angle/src/compiler/translator/SeparateExpressionsReturningArrays.h
index d0c73dc18..b178ebb3e 100755
--- a/gfx/angle/src/compiler/translator/SeparateExpressionsReturningArrays.h
+++ b/gfx/angle/src/compiler/translator/SeparateExpressionsReturningArrays.h
@@ -12,11 +12,8 @@
#ifndef COMPILER_TRANSLATOR_SEPARATEEXPRESSIONSRETURNINGARRAYS_H_
#define COMPILER_TRANSLATOR_SEPARATEEXPRESSIONSRETURNINGARRAYS_H_
-namespace sh
-{
class TIntermNode;
void SeparateExpressionsReturningArrays(TIntermNode *root, unsigned int *temporaryIndex);
-} // namespace sh
#endif // COMPILER_TRANSLATOR_SEPARATEEXPRESSIONSRETURNINGARRAYS_H_
diff --git a/gfx/angle/src/compiler/translator/ShaderLang.cpp b/gfx/angle/src/compiler/translator/ShaderLang.cpp
index b776ca50b..429bbf2e4 100755
--- a/gfx/angle/src/compiler/translator/ShaderLang.cpp
+++ b/gfx/angle/src/compiler/translator/ShaderLang.cpp
@@ -20,8 +20,6 @@
#include "compiler/translator/VariablePacker.h"
#include "angle_gl.h"
-using namespace sh;
-
namespace
{
@@ -36,31 +34,31 @@ template <typename VarT>
const std::vector<VarT> *GetVariableList(const TCompiler *compiler);
template <>
-const std::vector<Uniform> *GetVariableList(const TCompiler *compiler)
+const std::vector<sh::Uniform> *GetVariableList(const TCompiler *compiler)
{
return &compiler->getUniforms();
}
template <>
-const std::vector<Varying> *GetVariableList(const TCompiler *compiler)
+const std::vector<sh::Varying> *GetVariableList(const TCompiler *compiler)
{
return &compiler->getVaryings();
}
template <>
-const std::vector<Attribute> *GetVariableList(const TCompiler *compiler)
+const std::vector<sh::Attribute> *GetVariableList(const TCompiler *compiler)
{
return &compiler->getAttributes();
}
template <>
-const std::vector<OutputVariable> *GetVariableList(const TCompiler *compiler)
+const std::vector<sh::OutputVariable> *GetVariableList(const TCompiler *compiler)
{
return &compiler->getOutputVariables();
}
template <>
-const std::vector<InterfaceBlock> *GetVariableList(const TCompiler *compiler)
+const std::vector<sh::InterfaceBlock> *GetVariableList(const TCompiler *compiler)
{
return &compiler->getInterfaceBlocks();
}
@@ -237,9 +235,8 @@ ShHandle ShConstructCompiler(sh::GLenum type, ShShaderSpec spec,
}
// Generate built-in symbol table.
- if (!compiler->Init(*resources))
- {
- sh::Destruct(base);
+ if (!compiler->Init(*resources)) {
+ ShDestruct(base);
return 0;
}
@@ -271,10 +268,11 @@ const std::string &ShGetBuiltInResourcesString(const ShHandle handle)
// Return: The return value of ShCompile is really boolean, indicating
// success or failure.
//
-bool ShCompile(const ShHandle handle,
- const char *const shaderStrings[],
- size_t numStrings,
- ShCompileOptions compileOptions)
+bool ShCompile(
+ const ShHandle handle,
+ const char *const shaderStrings[],
+ size_t numStrings,
+ int compileOptions)
{
TCompiler *compiler = GetCompilerFromHandle(handle);
ASSERT(compiler);
@@ -335,32 +333,32 @@ const std::map<std::string, std::string> *ShGetNameHashingMap(
return &(compiler->getNameMap());
}
-const std::vector<Uniform> *ShGetUniforms(const ShHandle handle)
+const std::vector<sh::Uniform> *ShGetUniforms(const ShHandle handle)
{
- return GetShaderVariables<Uniform>(handle);
+ return GetShaderVariables<sh::Uniform>(handle);
}
-const std::vector<Varying> *ShGetVaryings(const ShHandle handle)
+const std::vector<sh::Varying> *ShGetVaryings(const ShHandle handle)
{
- return GetShaderVariables<Varying>(handle);
+ return GetShaderVariables<sh::Varying>(handle);
}
-const std::vector<Attribute> *ShGetAttributes(const ShHandle handle)
+const std::vector<sh::Attribute> *ShGetAttributes(const ShHandle handle)
{
- return GetShaderVariables<Attribute>(handle);
+ return GetShaderVariables<sh::Attribute>(handle);
}
-const std::vector<OutputVariable> *ShGetOutputVariables(const ShHandle handle)
+const std::vector<sh::OutputVariable> *ShGetOutputVariables(const ShHandle handle)
{
- return GetShaderVariables<OutputVariable>(handle);
+ return GetShaderVariables<sh::OutputVariable>(handle);
}
-const std::vector<InterfaceBlock> *ShGetInterfaceBlocks(const ShHandle handle)
+const std::vector<sh::InterfaceBlock> *ShGetInterfaceBlocks(const ShHandle handle)
{
- return GetShaderVariables<InterfaceBlock>(handle);
+ return GetShaderVariables<sh::InterfaceBlock>(handle);
}
-WorkGroupSize ShGetComputeShaderLocalGroupSize(const ShHandle handle)
+sh::WorkGroupSize ShGetComputeShaderLocalGroupSize(const ShHandle handle)
{
ASSERT(handle);
@@ -372,7 +370,7 @@ WorkGroupSize ShGetComputeShaderLocalGroupSize(const ShHandle handle)
}
bool ShCheckVariablesWithinPackingLimits(int maxVectors,
- const std::vector<ShaderVariable> &variables)
+ const std::vector<sh::ShaderVariable> &variables)
{
VariablePacker packer;
return packer.CheckVariablesWithinPackingLimits(maxVectors, variables);
@@ -408,126 +406,7 @@ const std::map<std::string, unsigned int> *ShGetUniformRegisterMap(const ShHandl
return translator->getUniformRegisterMap();
#else
- return nullptr;
+ static std::map<std::string, unsigned int> map;
+ return &map;
#endif // ANGLE_ENABLE_HLSL
}
-
-namespace sh
-{
-bool Initialize()
-{
- return ShInitialize();
-}
-
-bool Finalize()
-{
- return ShFinalize();
-}
-
-void InitBuiltInResources(ShBuiltInResources *resources)
-{
- ShInitBuiltInResources(resources);
-}
-
-const std::string &GetBuiltInResourcesString(const ShHandle handle)
-{
- return ShGetBuiltInResourcesString(handle);
-}
-
-ShHandle ConstructCompiler(sh::GLenum type,
- ShShaderSpec spec,
- ShShaderOutput output,
- const ShBuiltInResources *resources)
-{
- return ShConstructCompiler(type, spec, output, resources);
-}
-
-void Destruct(ShHandle handle)
-{
- return ShDestruct(handle);
-}
-
-bool Compile(const ShHandle handle,
- const char *const shaderStrings[],
- size_t numStrings,
- ShCompileOptions compileOptions)
-{
- return ShCompile(handle, shaderStrings, numStrings, compileOptions);
-}
-
-void ClearResults(const ShHandle handle)
-{
- return ShClearResults(handle);
-}
-
-int GetShaderVersion(const ShHandle handle)
-{
- return ShGetShaderVersion(handle);
-}
-
-ShShaderOutput GetShaderOutputType(const ShHandle handle)
-{
- return ShGetShaderOutputType(handle);
-}
-
-const std::string &GetInfoLog(const ShHandle handle)
-{
- return ShGetInfoLog(handle);
-}
-
-const std::string &GetObjectCode(const ShHandle handle)
-{
- return ShGetObjectCode(handle);
-}
-
-const std::map<std::string, std::string> *GetNameHashingMap(const ShHandle handle)
-{
- return ShGetNameHashingMap(handle);
-}
-
-const std::vector<sh::Uniform> *GetUniforms(const ShHandle handle)
-{
- return ShGetUniforms(handle);
-}
-const std::vector<sh::Varying> *GetVaryings(const ShHandle handle)
-{
- return ShGetVaryings(handle);
-}
-const std::vector<sh::Attribute> *GetAttributes(const ShHandle handle)
-{
- return ShGetAttributes(handle);
-}
-
-const std::vector<sh::OutputVariable> *GetOutputVariables(const ShHandle handle)
-{
- return ShGetOutputVariables(handle);
-}
-const std::vector<sh::InterfaceBlock> *GetInterfaceBlocks(const ShHandle handle)
-{
- return ShGetInterfaceBlocks(handle);
-}
-
-sh::WorkGroupSize GetComputeShaderLocalGroupSize(const ShHandle handle)
-{
- return ShGetComputeShaderLocalGroupSize(handle);
-}
-
-bool CheckVariablesWithinPackingLimits(int maxVectors,
- const std::vector<sh::ShaderVariable> &variables)
-{
- return ShCheckVariablesWithinPackingLimits(maxVectors, variables);
-}
-
-bool GetInterfaceBlockRegister(const ShHandle handle,
- const std::string &interfaceBlockName,
- unsigned int *indexOut)
-{
- return ShGetInterfaceBlockRegister(handle, interfaceBlockName, indexOut);
-}
-
-const std::map<std::string, unsigned int> *GetUniformRegisterMap(const ShHandle handle)
-{
- return ShGetUniformRegisterMap(handle);
-}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/SimplifyLoopConditions.cpp b/gfx/angle/src/compiler/translator/SimplifyLoopConditions.cpp
index 85c166e59..61a68fc93 100755
--- a/gfx/angle/src/compiler/translator/SimplifyLoopConditions.cpp
+++ b/gfx/angle/src/compiler/translator/SimplifyLoopConditions.cpp
@@ -13,9 +13,6 @@
#include "compiler/translator/IntermNode.h"
#include "compiler/translator/IntermNodePatternMatcher.h"
-namespace sh
-{
-
namespace
{
@@ -39,7 +36,7 @@ class SimplifyLoopConditionsTraverser : public TLValueTrackingTraverser
bool visitBinary(Visit visit, TIntermBinary *node) override;
bool visitAggregate(Visit visit, TIntermAggregate *node) override;
- bool visitTernary(Visit visit, TIntermTernary *node) override;
+ bool visitSelection(Visit visit, TIntermSelection *node) override;
void nextIteration();
bool foundLoopToChange() const { return mFoundLoopToChange; }
@@ -97,20 +94,20 @@ bool SimplifyLoopConditionsTraverser::visitAggregate(Visit visit, TIntermAggrega
// If we're outside a loop condition, we only need to traverse nodes that may contain loops.
if (!mInsideLoopConditionOrExpression)
- return false;
+ return (node->getOp() == EOpSequence || node->getOp() == EOpFunction);
mFoundLoopToChange = mConditionsToSimplify.match(node, getParentNode());
return !mFoundLoopToChange;
}
-bool SimplifyLoopConditionsTraverser::visitTernary(Visit visit, TIntermTernary *node)
+bool SimplifyLoopConditionsTraverser::visitSelection(Visit visit, TIntermSelection *node)
{
if (mFoundLoopToChange)
return false;
// Don't traverse ternary operators outside loop conditions.
if (!mInsideLoopConditionOrExpression)
- return false;
+ return !node->usesTernaryOperator();
mFoundLoopToChange = mConditionsToSimplify.match(node);
return !mFoundLoopToChange;
@@ -148,9 +145,10 @@ void SimplifyLoopConditionsTraverser::traverseLoop(TIntermLoop *node)
tempInitSeq.push_back(createTempInitDeclaration(node->getCondition()->deepCopy()));
insertStatementsInParentBlock(tempInitSeq);
- TIntermBlock *newBody = new TIntermBlock();
+ TIntermAggregate *newBody = new TIntermAggregate(EOpSequence);
if (node->getBody())
{
+ ASSERT(node->getBody()->getOp() == EOpSequence);
newBody->getSequence()->push_back(node->getBody());
}
newBody->getSequence()->push_back(
@@ -178,9 +176,10 @@ void SimplifyLoopConditionsTraverser::traverseLoop(TIntermLoop *node)
tempInitSeq.push_back(createTempInitDeclaration(CreateBoolConstantNode(true)));
insertStatementsInParentBlock(tempInitSeq);
- TIntermBlock *newBody = new TIntermBlock();
+ TIntermAggregate *newBody = new TIntermAggregate(EOpSequence);
if (node->getBody())
{
+ ASSERT(node->getBody()->getOp() == EOpSequence);
newBody->getSequence()->push_back(node->getBody());
}
newBody->getSequence()->push_back(
@@ -203,7 +202,7 @@ void SimplifyLoopConditionsTraverser::traverseLoop(TIntermLoop *node)
// bool s0 = expr;
// while (s0) { { body; } exprB; s0 = expr; }
// }
- TIntermBlock *loopScope = new TIntermBlock();
+ TIntermAggregate *loopScope = new TIntermAggregate(EOpSequence);
if (node->getInit())
{
loopScope->getSequence()->push_back(node->getInit());
@@ -211,15 +210,12 @@ void SimplifyLoopConditionsTraverser::traverseLoop(TIntermLoop *node)
loopScope->getSequence()->push_back(
createTempInitDeclaration(node->getCondition()->deepCopy()));
- TIntermBlock *whileLoopBody = new TIntermBlock();
+ TIntermAggregate *whileLoopBody = new TIntermAggregate(EOpSequence);
if (node->getBody())
{
whileLoopBody->getSequence()->push_back(node->getBody());
}
- if (node->getExpression())
- {
- whileLoopBody->getSequence()->push_back(node->getExpression());
- }
+ whileLoopBody->getSequence()->push_back(node->getExpression());
whileLoopBody->getSequence()->push_back(
createTempAssignment(node->getCondition()->deepCopy()));
TIntermLoop *whileLoop = new TIntermLoop(
@@ -246,8 +242,8 @@ void SimplifyLoopConditionsTraverser::traverseLoop(TIntermLoop *node)
// for (init; expr; ) { { body; } exprB; }
TIntermTyped *loopExpression = node->getExpression();
node->setExpression(nullptr);
- TIntermBlock *oldBody = node->getBody();
- node->setBody(new TIntermBlock());
+ TIntermAggregate *oldBody = node->getBody();
+ node->setBody(new TIntermAggregate(EOpSequence));
if (oldBody != nullptr)
{
node->getBody()->getSequence()->push_back(oldBody);
@@ -284,5 +280,3 @@ void SimplifyLoopConditions(TIntermNode *root,
traverser.updateTree();
} while (traverser.foundLoopToChange());
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/SimplifyLoopConditions.h b/gfx/angle/src/compiler/translator/SimplifyLoopConditions.h
index 968089d54..b8802aa11 100755
--- a/gfx/angle/src/compiler/translator/SimplifyLoopConditions.h
+++ b/gfx/angle/src/compiler/translator/SimplifyLoopConditions.h
@@ -11,8 +11,6 @@
#ifndef COMPILER_TRANSLATOR_SIMPLIFYLOOPCONDITIONS_H_
#define COMPILER_TRANSLATOR_SIMPLIFYLOOPCONDITIONS_H_
-namespace sh
-{
class TIntermNode;
class TSymbolTable;
@@ -21,6 +19,5 @@ void SimplifyLoopConditions(TIntermNode *root,
unsigned int *temporaryIndex,
const TSymbolTable &symbolTable,
int shaderVersion);
-} // namespace sh
#endif // COMPILER_TRANSLATOR_SIMPLIFYLOOPCONDITIONS_H_
diff --git a/gfx/angle/src/compiler/translator/SplitSequenceOperator.cpp b/gfx/angle/src/compiler/translator/SplitSequenceOperator.cpp
index 4c63b59f7..45fc8dc9b 100755
--- a/gfx/angle/src/compiler/translator/SplitSequenceOperator.cpp
+++ b/gfx/angle/src/compiler/translator/SplitSequenceOperator.cpp
@@ -14,9 +14,6 @@
#include "compiler/translator/IntermNode.h"
#include "compiler/translator/IntermNodePatternMatcher.h"
-namespace sh
-{
-
namespace
{
@@ -29,7 +26,7 @@ class SplitSequenceOperatorTraverser : public TLValueTrackingTraverser
bool visitBinary(Visit visit, TIntermBinary *node) override;
bool visitAggregate(Visit visit, TIntermAggregate *node) override;
- bool visitTernary(Visit visit, TIntermTernary *node) override;
+ bool visitSelection(Visit visit, TIntermSelection *node) override;
void nextIteration();
bool foundExpressionToSplit() const { return mFoundExpressionToSplit; }
@@ -60,7 +57,7 @@ void SplitSequenceOperatorTraverser::nextIteration()
nextTemporaryIndex();
}
-bool SplitSequenceOperatorTraverser::visitAggregate(Visit visit, TIntermAggregate *node)
+bool SplitSequenceOperatorTraverser::visitBinary(Visit visit, TIntermBinary *node)
{
if (mFoundExpressionToSplit)
return false;
@@ -68,14 +65,15 @@ bool SplitSequenceOperatorTraverser::visitAggregate(Visit visit, TIntermAggregat
if (mInsideSequenceOperator > 0 && visit == PreVisit)
{
// Detect expressions that need to be simplified
- mFoundExpressionToSplit = mPatternToSplitMatcher.match(node, getParentNode());
+ mFoundExpressionToSplit =
+ mPatternToSplitMatcher.match(node, getParentNode(), isLValueRequiredHere());
return !mFoundExpressionToSplit;
}
return true;
}
-bool SplitSequenceOperatorTraverser::visitBinary(Visit visit, TIntermBinary *node)
+bool SplitSequenceOperatorTraverser::visitAggregate(Visit visit, TIntermAggregate *node)
{
if (node->getOp() == EOpComma)
{
@@ -93,12 +91,19 @@ bool SplitSequenceOperatorTraverser::visitBinary(Visit visit, TIntermBinary *nod
// execution order.
if (mFoundExpressionToSplit && mInsideSequenceOperator == 1)
{
- // Move the left side operand into a separate statement in the parent block.
+ // Move all operands of the sequence operation except the last one into separate
+ // statements in the parent block.
TIntermSequence insertions;
- insertions.push_back(node->getLeft());
+ for (auto *sequenceChild : *node->getSequence())
+ {
+ if (sequenceChild != node->getSequence()->back())
+ {
+ insertions.push_back(sequenceChild);
+ }
+ }
insertStatementsInParentBlock(insertions);
- // Replace the comma node with its right side operand.
- queueReplacement(node, node->getRight(), OriginalNode::IS_DROPPED);
+ // Replace the sequence with its last operand
+ queueReplacement(node, node->getSequence()->back(), OriginalNode::IS_DROPPED);
}
mInsideSequenceOperator--;
}
@@ -111,15 +116,14 @@ bool SplitSequenceOperatorTraverser::visitBinary(Visit visit, TIntermBinary *nod
if (mInsideSequenceOperator > 0 && visit == PreVisit)
{
// Detect expressions that need to be simplified
- mFoundExpressionToSplit =
- mPatternToSplitMatcher.match(node, getParentNode(), isLValueRequiredHere());
+ mFoundExpressionToSplit = mPatternToSplitMatcher.match(node, getParentNode());
return !mFoundExpressionToSplit;
}
return true;
}
-bool SplitSequenceOperatorTraverser::visitTernary(Visit visit, TIntermTernary *node)
+bool SplitSequenceOperatorTraverser::visitSelection(Visit visit, TIntermSelection *node)
{
if (mFoundExpressionToSplit)
return false;
@@ -154,5 +158,3 @@ void SplitSequenceOperator(TIntermNode *root,
traverser.updateTree();
} while (traverser.foundExpressionToSplit());
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/SplitSequenceOperator.h b/gfx/angle/src/compiler/translator/SplitSequenceOperator.h
index 6df9d458e..4a46fe36c 100755
--- a/gfx/angle/src/compiler/translator/SplitSequenceOperator.h
+++ b/gfx/angle/src/compiler/translator/SplitSequenceOperator.h
@@ -12,9 +12,6 @@
#ifndef COMPILER_TRANSLATOR_SPLITSEQUENCEOPERATOR_H_
#define COMPILER_TRANSLATOR_SPLITSEQUENCEOPERATOR_H_
-namespace sh
-{
-
class TIntermNode;
class TSymbolTable;
@@ -24,6 +21,4 @@ void SplitSequenceOperator(TIntermNode *root,
const TSymbolTable &symbolTable,
int shaderVersion);
-} // namespace sh
-
#endif // COMPILER_TRANSLATOR_SPLITSEQUENCEOPERATOR_H_
diff --git a/gfx/angle/src/compiler/translator/SymbolTable.cpp b/gfx/angle/src/compiler/translator/SymbolTable.cpp
index 188f810e3..059c5c76a 100755
--- a/gfx/angle/src/compiler/translator/SymbolTable.cpp
+++ b/gfx/angle/src/compiler/translator/SymbolTable.cpp
@@ -19,38 +19,15 @@
#include <stdio.h>
#include <algorithm>
-namespace sh
-{
-
int TSymbolTable::uniqueIdCounter = 0;
-TSymbol::TSymbol(const TString *n) : uniqueId(TSymbolTable::nextUniqueId()), name(n)
-{
-}
-
//
// Functions have buried pointers to delete.
//
TFunction::~TFunction()
{
- clearParameters();
-}
-
-void TFunction::clearParameters()
-{
for (TParamList::iterator i = parameters.begin(); i != parameters.end(); ++i)
delete (*i).type;
- parameters.clear();
- mangledName = nullptr;
-}
-
-void TFunction::swapParameters(const TFunction &parametersSource)
-{
- clearParameters();
- for (auto parameter : parametersSource.parameters)
- {
- addParameter(parameter);
- }
}
const TString *TFunction::buildMangledName() const
@@ -76,6 +53,8 @@ TSymbolTableLevel::~TSymbolTableLevel()
bool TSymbolTableLevel::insert(TSymbol *symbol)
{
+ symbol->setUniqueId(TSymbolTable::nextUniqueId());
+
// returning true means symbol was added to the table
tInsertResult result = level.insert(tLevelPair(symbol->getMangledName(), symbol));
@@ -84,6 +63,8 @@ bool TSymbolTableLevel::insert(TSymbol *symbol)
bool TSymbolTableLevel::insertUnmangled(TFunction *function)
{
+ function->setUniqueId(TSymbolTable::nextUniqueId());
+
// returning true means symbol was added to the table
tInsertResult result = level.insert(tLevelPair(function->getName(), function));
@@ -126,12 +107,6 @@ TSymbol *TSymbolTable::find(const TString &name, int shaderVersion,
return symbol;
}
-TSymbol *TSymbolTable::findGlobal(const TString &name) const
-{
- ASSERT(table.size() > GLOBAL_LEVEL);
- return table[GLOBAL_LEVEL]->find(name);
-}
-
TSymbol *TSymbolTable::findBuiltIn(
const TString &name, int shaderVersion) const
{
@@ -258,43 +233,6 @@ void TSymbolTable::insertBuiltIn(ESymbolLevel level, TOperator op, const char *e
insertBuiltIn(level, gvec4 ? TCache::getType(EbtInt, 4) : rvalue, name, TCache::getType(EbtISampler2DArray), ptype2, ptype3, ptype4, ptype5);
insertBuiltIn(level, gvec4 ? TCache::getType(EbtUInt, 4) : rvalue, name, TCache::getType(EbtUSampler2DArray), ptype2, ptype3, ptype4, ptype5);
}
- else if (IsGImage(ptype1->getBasicType()))
- {
- insertUnmangledBuiltIn(name);
-
- const TType *floatType = TCache::getType(EbtFloat, 4);
- const TType *intType = TCache::getType(EbtInt, 4);
- const TType *unsignedType = TCache::getType(EbtUInt, 4);
-
- const TType *floatImage =
- TCache::getType(convertGImageToFloatImage(ptype1->getBasicType()));
- const TType *intImage = TCache::getType(convertGImageToIntImage(ptype1->getBasicType()));
- const TType *unsignedImage =
- TCache::getType(convertGImageToUnsignedImage(ptype1->getBasicType()));
-
- // GLSL ES 3.10, Revision 4, 8.12 Image Functions
- if (rvalue->getBasicType() == EbtGVec4)
- {
- // imageLoad
- insertBuiltIn(level, floatType, name, floatImage, ptype2, ptype3, ptype4, ptype5);
- insertBuiltIn(level, intType, name, intImage, ptype2, ptype3, ptype4, ptype5);
- insertBuiltIn(level, unsignedType, name, unsignedImage, ptype2, ptype3, ptype4, ptype5);
- }
- else if (rvalue->getBasicType() == EbtVoid)
- {
- // imageStore
- insertBuiltIn(level, rvalue, name, floatImage, ptype2, floatType, ptype4, ptype5);
- insertBuiltIn(level, rvalue, name, intImage, ptype2, intType, ptype4, ptype5);
- insertBuiltIn(level, rvalue, name, unsignedImage, ptype2, unsignedType, ptype4, ptype5);
- }
- else
- {
- // imageSize
- insertBuiltIn(level, rvalue, name, floatImage, ptype2, ptype3, ptype4, ptype5);
- insertBuiltIn(level, rvalue, name, intImage, ptype2, ptype3, ptype4, ptype5);
- insertBuiltIn(level, rvalue, name, unsignedImage, ptype2, ptype3, ptype4, ptype5);
- }
- }
else if (IsGenType(rvalue) || IsGenType(ptype1) || IsGenType(ptype2) || IsGenType(ptype3))
{
ASSERT(!ptype4 && !ptype5);
@@ -367,5 +305,3 @@ TPrecision TSymbolTable::getDefaultPrecision(TBasicType type) const
}
return prec;
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/SymbolTable.h b/gfx/angle/src/compiler/translator/SymbolTable.h
index 7c4d3aab3..60e0b9929 100755
--- a/gfx/angle/src/compiler/translator/SymbolTable.h
+++ b/gfx/angle/src/compiler/translator/SymbolTable.h
@@ -38,16 +38,16 @@
#include "compiler/translator/InfoSink.h"
#include "compiler/translator/IntermNode.h"
-namespace sh
-{
-
// Symbol base class. (Can build functions or variables out of these...)
class TSymbol : angle::NonCopyable
{
public:
POOL_ALLOCATOR_NEW_DELETE();
- TSymbol(const TString *n);
-
+ TSymbol(const TString *n)
+ : uniqueId(0),
+ name(n)
+ {
+ }
virtual ~TSymbol()
{
// don't delete name, it's from the pool
@@ -69,6 +69,10 @@ class TSymbol : angle::NonCopyable
{
return false;
}
+ void setUniqueId(int id)
+ {
+ uniqueId = id;
+ }
int getUniqueId() const
{
return uniqueId;
@@ -83,7 +87,7 @@ class TSymbol : angle::NonCopyable
}
private:
- const int uniqueId;
+ int uniqueId; // For real comparing during code generation
const TString *name;
TString extension;
};
@@ -225,8 +229,6 @@ class TFunction : public TSymbol
mangledName = nullptr;
}
- void swapParameters(const TFunction &parametersSource);
-
const TString &getMangledName() const override
{
if (mangledName == nullptr)
@@ -260,8 +262,6 @@ class TFunction : public TSymbol
}
private:
- void clearParameters();
-
const TString *buildMangledName() const;
typedef TVector<TConstParameter> TParamList;
@@ -459,11 +459,8 @@ class TSymbolTable : angle::NonCopyable
TSymbol *find(const TString &name, int shaderVersion,
bool *builtIn = NULL, bool *sameScope = NULL) const;
-
- TSymbol *findGlobal(const TString &name) const;
-
TSymbol *findBuiltIn(const TString &name, int shaderVersion) const;
-
+
TSymbolTableLevel *getOuterLevel()
{
assert(currentLevel() >= 1);
@@ -474,15 +471,15 @@ class TSymbolTable : angle::NonCopyable
bool setDefaultPrecision(const TPublicType &type, TPrecision prec)
{
- if (!SupportsPrecision(type.getBasicType()))
+ if (!SupportsPrecision(type.type))
return false;
- if (type.getBasicType() == EbtUInt)
+ if (type.type == EbtUInt)
return false; // ESSL 3.00.4 section 4.5.4
if (type.isAggregate())
return false; // Not allowed to set for aggregate types
int indexOfLastElement = static_cast<int>(precisionStack.size()) - 1;
// Uses map operator [], overwrites the current value
- (*precisionStack[indexOfLastElement])[type.getBasicType()] = prec;
+ (*precisionStack[indexOfLastElement])[type.type] = prec;
return true;
}
@@ -544,6 +541,4 @@ class TSymbolTable : angle::NonCopyable
static int uniqueIdCounter;
};
-} // namespace sh
-
#endif // COMPILER_TRANSLATOR_SYMBOLTABLE_H_
diff --git a/gfx/angle/src/compiler/translator/TextureFunctionHLSL.cpp b/gfx/angle/src/compiler/translator/TextureFunctionHLSL.cpp
index 33d098531..6580f258d 100755
--- a/gfx/angle/src/compiler/translator/TextureFunctionHLSL.cpp
+++ b/gfx/angle/src/compiler/translator/TextureFunctionHLSL.cpp
@@ -393,22 +393,41 @@ void OutputTextureFunctionArgumentList(TInfoSinkBase &out,
{
switch (textureFunction.sampler)
{
+ case EbtSampler2D:
+ out << ", int2 offset";
+ break;
case EbtSampler3D:
- case EbtISampler3D:
- case EbtUSampler3D:
out << ", int3 offset";
break;
- case EbtSampler2D:
case EbtSampler2DArray:
+ out << ", int2 offset";
+ break;
case EbtISampler2D:
+ out << ", int2 offset";
+ break;
+ case EbtISampler3D:
+ out << ", int3 offset";
+ break;
case EbtISampler2DArray:
+ out << ", int2 offset";
+ break;
case EbtUSampler2D:
+ out << ", int2 offset";
+ break;
+ case EbtUSampler3D:
+ out << ", int3 offset";
+ break;
case EbtUSampler2DArray:
+ out << ", int2 offset";
+ break;
case EbtSampler2DShadow:
+ out << ", int2 offset";
+ break;
case EbtSampler2DArrayShadow:
- case EbtSamplerExternalOES:
out << ", int2 offset";
break;
+ case EbtSamplerExternalOES:
+ out << ", int2 offset";
default:
UNREACHABLE();
}
@@ -1094,8 +1113,32 @@ const char *TextureFunctionHLSL::TextureFunction::getReturnType() const
bool TextureFunctionHLSL::TextureFunction::operator<(const TextureFunction &rhs) const
{
- return std::tie(sampler, coords, proj, offset, method) <
- std::tie(rhs.sampler, rhs.coords, rhs.proj, rhs.offset, rhs.method);
+ if (sampler < rhs.sampler)
+ return true;
+ if (sampler > rhs.sampler)
+ return false;
+
+ if (coords < rhs.coords)
+ return true;
+ if (coords > rhs.coords)
+ return false;
+
+ if (!proj && rhs.proj)
+ return true;
+ if (proj && !rhs.proj)
+ return false;
+
+ if (!offset && rhs.offset)
+ return true;
+ if (offset && !rhs.offset)
+ return false;
+
+ if (method < rhs.method)
+ return true;
+ if (method > rhs.method)
+ return false;
+
+ return false;
}
TString TextureFunctionHLSL::useTextureFunction(const TString &name,
diff --git a/gfx/angle/src/compiler/translator/TranslatorESSL.cpp b/gfx/angle/src/compiler/translator/TranslatorESSL.cpp
index 43bce74cc..fef176857 100755
--- a/gfx/angle/src/compiler/translator/TranslatorESSL.cpp
+++ b/gfx/angle/src/compiler/translator/TranslatorESSL.cpp
@@ -6,20 +6,26 @@
#include "compiler/translator/TranslatorESSL.h"
+#include "compiler/translator/BuiltInFunctionEmulatorGLSL.h"
#include "compiler/translator/EmulatePrecision.h"
#include "compiler/translator/RecordConstantPrecision.h"
#include "compiler/translator/OutputESSL.h"
#include "angle_gl.h"
-namespace sh
-{
-
TranslatorESSL::TranslatorESSL(sh::GLenum type, ShShaderSpec spec)
: TCompiler(type, spec, SH_ESSL_OUTPUT)
{
}
-void TranslatorESSL::translate(TIntermNode *root, ShCompileOptions compileOptions)
+void TranslatorESSL::initBuiltInFunctionEmulator(BuiltInFunctionEmulator *emu, int compileOptions)
+{
+ if (compileOptions & SH_EMULATE_BUILT_IN_FUNCTIONS)
+ {
+ InitBuiltInFunctionEmulatorForGLSLWorkarounds(emu, getShaderType());
+ }
+}
+
+void TranslatorESSL::translate(TIntermNode *root, int compileOptions)
{
TInfoSinkBase& sink = getInfoSink().obj;
@@ -81,8 +87,7 @@ void TranslatorESSL::translate(TIntermNode *root, ShCompileOptions compileOption
// Write translated shader.
TOutputESSL outputESSL(sink, getArrayIndexClampingStrategy(), getHashFunction(), getNameMap(),
- getSymbolTable(), getShaderType(), shaderVer, precisionEmulation,
- compileOptions);
+ getSymbolTable(), shaderVer, precisionEmulation);
root->traverse(&outputESSL);
}
@@ -111,5 +116,3 @@ void TranslatorESSL::writeExtensionBehavior() {
}
}
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/TranslatorESSL.h b/gfx/angle/src/compiler/translator/TranslatorESSL.h
index b7b46a65e..0fbc47de5 100755
--- a/gfx/angle/src/compiler/translator/TranslatorESSL.h
+++ b/gfx/angle/src/compiler/translator/TranslatorESSL.h
@@ -9,22 +9,19 @@
#include "compiler/translator/Compiler.h"
-namespace sh
-{
-
class TranslatorESSL : public TCompiler
{
public:
TranslatorESSL(sh::GLenum type, ShShaderSpec spec);
protected:
- void translate(TIntermNode *root, ShCompileOptions compileOptions) override;
+ void initBuiltInFunctionEmulator(BuiltInFunctionEmulator *emu, int compileOptions) override;
+
+ void translate(TIntermNode *root, int compileOptions) override;
bool shouldFlattenPragmaStdglInvariantAll() override;
private:
void writeExtensionBehavior();
};
-} // namespace sh
-
#endif // COMPILER_TRANSLATOR_TRANSLATORESSL_H_
diff --git a/gfx/angle/src/compiler/translator/TranslatorGLSL.cpp b/gfx/angle/src/compiler/translator/TranslatorGLSL.cpp
index 1d6582b02..0ee96f590 100755
--- a/gfx/angle/src/compiler/translator/TranslatorGLSL.cpp
+++ b/gfx/angle/src/compiler/translator/TranslatorGLSL.cpp
@@ -11,36 +11,26 @@
#include "compiler/translator/EmulatePrecision.h"
#include "compiler/translator/ExtensionGLSL.h"
#include "compiler/translator/OutputGLSL.h"
-#include "compiler/translator/RewriteTexelFetchOffset.h"
#include "compiler/translator/VersionGLSL.h"
-namespace sh
-{
-
TranslatorGLSL::TranslatorGLSL(sh::GLenum type,
ShShaderSpec spec,
ShShaderOutput output)
: TCompiler(type, spec, output) {
}
-void TranslatorGLSL::initBuiltInFunctionEmulator(BuiltInFunctionEmulator *emu,
- ShCompileOptions compileOptions)
+void TranslatorGLSL::initBuiltInFunctionEmulator(BuiltInFunctionEmulator *emu, int compileOptions)
{
- if (compileOptions & SH_EMULATE_ABS_INT_FUNCTION)
- {
- InitBuiltInAbsFunctionEmulatorForGLSLWorkarounds(emu, getShaderType());
- }
-
- if (compileOptions & SH_EMULATE_ISNAN_FLOAT_FUNCTION)
+ if (compileOptions & SH_EMULATE_BUILT_IN_FUNCTIONS)
{
- InitBuiltInIsnanFunctionEmulatorForGLSLWorkarounds(emu, getShaderVersion());
+ InitBuiltInFunctionEmulatorForGLSLWorkarounds(emu, getShaderType());
}
int targetGLSLVersion = ShaderOutputTypeToGLSLVersion(getOutputType());
InitBuiltInFunctionEmulatorForGLSLMissingFunctions(emu, getShaderType(), targetGLSLVersion);
}
-void TranslatorGLSL::translate(TIntermNode *root, ShCompileOptions compileOptions)
+void TranslatorGLSL::translate(TIntermNode *root, int compileOptions)
{
TInfoSinkBase& sink = getInfoSink().obj;
@@ -60,7 +50,7 @@ void TranslatorGLSL::translate(TIntermNode *root, ShCompileOptions compileOption
// variables that are actually used, to avoid affecting the behavior of the shader.
if ((compileOptions & SH_FLATTEN_PRAGMA_STDGL_INVARIANT_ALL) && getPragma().stdgl.invariantAll)
{
- ASSERT(wereVariablesCollected());
+ collectVariables(root);
switch (getShaderType())
{
@@ -85,11 +75,6 @@ void TranslatorGLSL::translate(TIntermNode *root, ShCompileOptions compileOption
}
}
- if ((compileOptions & SH_REWRITE_TEXELFETCHOFFSET_TO_TEXELFETCH) != 0)
- {
- sh::RewriteTexelFetchOffset(root, getSymbolTable(), getShaderVersion());
- }
-
bool precisionEmulation = getResources().WEBGL_debug_shader_precision && getPragma().debugShaderPrecision;
if (precisionEmulation)
@@ -188,9 +173,13 @@ void TranslatorGLSL::translate(TIntermNode *root, ShCompileOptions compileOption
}
// Write translated shader.
- TOutputGLSL outputGLSL(sink, getArrayIndexClampingStrategy(), getHashFunction(), getNameMap(),
- getSymbolTable(), getShaderType(), getShaderVersion(), getOutputType(),
- compileOptions);
+ TOutputGLSL outputGLSL(sink,
+ getArrayIndexClampingStrategy(),
+ getHashFunction(),
+ getNameMap(),
+ getSymbolTable(),
+ getShaderVersion(),
+ getOutputType());
root->traverse(&outputGLSL);
}
@@ -201,12 +190,6 @@ bool TranslatorGLSL::shouldFlattenPragmaStdglInvariantAll()
return IsGLSL130OrNewer(getOutputType());
}
-bool TranslatorGLSL::shouldCollectVariables(ShCompileOptions compileOptions)
-{
- return (compileOptions & SH_FLATTEN_PRAGMA_STDGL_INVARIANT_ALL) ||
- TCompiler::shouldCollectVariables(compileOptions);
-}
-
void TranslatorGLSL::writeVersion(TIntermNode *root)
{
TVersionGLSL versionGLSL(getShaderType(), getPragma(), getOutputType());
@@ -294,5 +277,3 @@ void TranslatorGLSL::conditionallyOutputInvariantDeclaration(const char *builtin
sink << "invariant " << builtinVaryingName << ";\n";
}
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/TranslatorGLSL.h b/gfx/angle/src/compiler/translator/TranslatorGLSL.h
index d6f694824..91df58868 100755
--- a/gfx/angle/src/compiler/translator/TranslatorGLSL.h
+++ b/gfx/angle/src/compiler/translator/TranslatorGLSL.h
@@ -9,21 +9,16 @@
#include "compiler/translator/Compiler.h"
-namespace sh
-{
-
class TranslatorGLSL : public TCompiler
{
public:
TranslatorGLSL(sh::GLenum type, ShShaderSpec spec, ShShaderOutput output);
protected:
- void initBuiltInFunctionEmulator(BuiltInFunctionEmulator *emu,
- ShCompileOptions compileOptions) override;
+ void initBuiltInFunctionEmulator(BuiltInFunctionEmulator *emu, int compileOptions) override;
- void translate(TIntermNode *root, ShCompileOptions compileOptions) override;
+ void translate(TIntermNode *root, int compileOptions) override;
bool shouldFlattenPragmaStdglInvariantAll() override;
- bool shouldCollectVariables(ShCompileOptions compileOptions) override;
private:
void writeVersion(TIntermNode *root);
@@ -31,6 +26,4 @@ class TranslatorGLSL : public TCompiler
void conditionallyOutputInvariantDeclaration(const char *builtinVaryingName);
};
-} // namespace sh
-
#endif // COMPILER_TRANSLATOR_TRANSLATORGLSL_H_
diff --git a/gfx/angle/src/compiler/translator/TranslatorHLSL.cpp b/gfx/angle/src/compiler/translator/TranslatorHLSL.cpp
index 7ef1d4e36..6721d8942 100755
--- a/gfx/angle/src/compiler/translator/TranslatorHLSL.cpp
+++ b/gfx/angle/src/compiler/translator/TranslatorHLSL.cpp
@@ -8,7 +8,6 @@
#include "compiler/translator/AddDefaultReturnStatements.h"
#include "compiler/translator/ArrayReturnValueToOutParameter.h"
-#include "compiler/translator/BreakVariableAliasingInInnerLoops.h"
#include "compiler/translator/EmulatePrecision.h"
#include "compiler/translator/ExpandIntegerPowExpressions.h"
#include "compiler/translator/IntermNodePatternMatcher.h"
@@ -16,7 +15,6 @@
#include "compiler/translator/RemoveDynamicIndexing.h"
#include "compiler/translator/RewriteElseBlocks.h"
#include "compiler/translator/RewriteTexelFetchOffset.h"
-#include "compiler/translator/RewriteUnaryMinusOperatorInt.h"
#include "compiler/translator/SeparateArrayInitialization.h"
#include "compiler/translator/SeparateDeclarations.h"
#include "compiler/translator/SeparateExpressionsReturningArrays.h"
@@ -24,15 +22,12 @@
#include "compiler/translator/SplitSequenceOperator.h"
#include "compiler/translator/UnfoldShortCircuitToIf.h"
-namespace sh
-{
-
TranslatorHLSL::TranslatorHLSL(sh::GLenum type, ShShaderSpec spec, ShShaderOutput output)
: TCompiler(type, spec, output)
{
}
-void TranslatorHLSL::translate(TIntermNode *root, ShCompileOptions compileOptions)
+void TranslatorHLSL::translate(TIntermNode *root, int compileOptions)
{
const ShBuiltInResources &resources = getResources();
int numRenderTargets = resources.EXT_draw_buffers ? resources.MaxDrawBuffers : 1;
@@ -80,12 +75,6 @@ void TranslatorHLSL::translate(TIntermNode *root, ShCompileOptions compileOption
sh::RewriteElseBlocks(root, getTemporaryIndex());
}
- // Work around an HLSL compiler frontend aliasing optimization bug.
- // TODO(cwallez) The date is 2016-08-25, Microsoft said the bug would be fixed
- // in the next release of d3dcompiler.dll, it would be nice to detect the DLL
- // version and only apply the workaround if it is too old.
- sh::BreakVariableAliasingInInnerLoops(root);
-
bool precisionEmulation =
getResources().WEBGL_debug_shader_precision && getPragma().debugShaderPrecision;
@@ -105,13 +94,8 @@ void TranslatorHLSL::translate(TIntermNode *root, ShCompileOptions compileOption
if ((compileOptions & SH_REWRITE_TEXELFETCHOFFSET_TO_TEXELFETCH) != 0)
{
- sh::RewriteTexelFetchOffset(root, getSymbolTable(), getShaderVersion());
- }
-
- if (((compileOptions & SH_REWRITE_INTEGER_UNARY_MINUS_OPERATOR) != 0) &&
- getShaderType() == GL_VERTEX_SHADER)
- {
- sh::RewriteUnaryMinusOperatorInt(root);
+ sh::RewriteTexelFetchOffset(root, getTemporaryIndex(), getSymbolTable(),
+ getShaderVersion());
}
sh::OutputHLSL outputHLSL(getShaderType(), getShaderVersion(), getExtensionBehavior(),
@@ -144,5 +128,3 @@ const std::map<std::string, unsigned int> *TranslatorHLSL::getUniformRegisterMap
{
return &mUniformRegisterMap;
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/TranslatorHLSL.h b/gfx/angle/src/compiler/translator/TranslatorHLSL.h
index 3bf64b2e6..f96c18dff 100755
--- a/gfx/angle/src/compiler/translator/TranslatorHLSL.h
+++ b/gfx/angle/src/compiler/translator/TranslatorHLSL.h
@@ -9,9 +9,6 @@
#include "compiler/translator/Compiler.h"
-namespace sh
-{
-
class TranslatorHLSL : public TCompiler
{
public:
@@ -24,16 +21,14 @@ class TranslatorHLSL : public TCompiler
const std::map<std::string, unsigned int> *getUniformRegisterMap() const;
protected:
- void translate(TIntermNode *root, ShCompileOptions compileOptions) override;
+ void translate(TIntermNode *root, int compileOptions) override;
bool shouldFlattenPragmaStdglInvariantAll() override;
// collectVariables needs to be run always so registers can be assigned.
- bool shouldCollectVariables(ShCompileOptions compileOptions) override { return true; }
+ bool shouldCollectVariables(int compileOptions) override { return true; }
std::map<std::string, unsigned int> mInterfaceBlockRegisterMap;
std::map<std::string, unsigned int> mUniformRegisterMap;
};
-} // namespace sh
-
#endif // COMPILER_TRANSLATOR_TRANSLATORHLSL_H_
diff --git a/gfx/angle/src/compiler/translator/Types.cpp b/gfx/angle/src/compiler/translator/Types.cpp
index af79d3eea..be1f9822c 100755
--- a/gfx/angle/src/compiler/translator/Types.cpp
+++ b/gfx/angle/src/compiler/translator/Types.cpp
@@ -11,86 +11,49 @@
#include "compiler/translator/Types.h"
#include "compiler/translator/InfoSink.h"
#include "compiler/translator/IntermNode.h"
-#include "compiler/translator/SymbolTable.h"
#include <algorithm>
#include <climits>
-namespace sh
-{
-
const char* getBasicString(TBasicType t)
{
switch (t)
{
- case EbtVoid: return "void";
- case EbtFloat: return "float";
- case EbtInt: return "int";
- case EbtUInt: return "uint";
- case EbtBool: return "bool";
- case EbtSampler2D: return "sampler2D";
- case EbtSampler3D: return "sampler3D";
- case EbtSamplerCube: return "samplerCube";
- case EbtSamplerExternalOES: return "samplerExternalOES";
- case EbtSampler2DRect: return "sampler2DRect";
- case EbtSampler2DArray: return "sampler2DArray";
- case EbtISampler2D: return "isampler2D";
- case EbtISampler3D: return "isampler3D";
- case EbtISamplerCube: return "isamplerCube";
- case EbtISampler2DArray: return "isampler2DArray";
- case EbtUSampler2D: return "usampler2D";
- case EbtUSampler3D: return "usampler3D";
- case EbtUSamplerCube: return "usamplerCube";
- case EbtUSampler2DArray: return "usampler2DArray";
- case EbtSampler2DShadow: return "sampler2DShadow";
- case EbtSamplerCubeShadow: return "samplerCubeShadow";
- case EbtSampler2DArrayShadow: return "sampler2DArrayShadow";
- case EbtStruct: return "structure";
- case EbtInterfaceBlock: return "interface block";
- case EbtImage2D:
- return "image2D";
- case EbtIImage2D:
- return "iimage2D";
- case EbtUImage2D:
- return "uimage2D";
- case EbtImage3D:
- return "image3D";
- case EbtIImage3D:
- return "iimage3D";
- case EbtUImage3D:
- return "uimage3D";
- case EbtImage2DArray:
- return "image2DArray";
- case EbtIImage2DArray:
- return "iimage2DArray";
- case EbtUImage2DArray:
- return "uimage2DArray";
- case EbtImageCube:
- return "imageCube";
- case EbtIImageCube:
- return "iimageCube";
- case EbtUImageCube:
- return "uimageCube";
- default: UNREACHABLE(); return "unknown type";
+ case EbtVoid: return "void"; break;
+ case EbtFloat: return "float"; break;
+ case EbtInt: return "int"; break;
+ case EbtUInt: return "uint"; break;
+ case EbtBool: return "bool"; break;
+ case EbtSampler2D: return "sampler2D"; break;
+ case EbtSampler3D: return "sampler3D"; break;
+ case EbtSamplerCube: return "samplerCube"; break;
+ case EbtSamplerExternalOES: return "samplerExternalOES"; break;
+ case EbtSampler2DRect: return "sampler2DRect"; break;
+ case EbtSampler2DArray: return "sampler2DArray"; break;
+ case EbtISampler2D: return "isampler2D"; break;
+ case EbtISampler3D: return "isampler3D"; break;
+ case EbtISamplerCube: return "isamplerCube"; break;
+ case EbtISampler2DArray: return "isampler2DArray"; break;
+ case EbtUSampler2D: return "usampler2D"; break;
+ case EbtUSampler3D: return "usampler3D"; break;
+ case EbtUSamplerCube: return "usamplerCube"; break;
+ case EbtUSampler2DArray: return "usampler2DArray"; break;
+ case EbtSampler2DShadow: return "sampler2DShadow"; break;
+ case EbtSamplerCubeShadow: return "samplerCubeShadow"; break;
+ case EbtSampler2DArrayShadow: return "sampler2DArrayShadow"; break;
+ case EbtStruct: return "structure"; break;
+ case EbtInterfaceBlock: return "interface block"; break;
+ default: UNREACHABLE(); return "unknown type";
}
}
TType::TType(const TPublicType &p)
- : type(p.getBasicType()),
- precision(p.precision),
- qualifier(p.qualifier),
- invariant(p.invariant),
- memoryQualifier(p.memoryQualifier),
- layoutQualifier(p.layoutQualifier),
- primarySize(p.getPrimarySize()),
- secondarySize(p.getSecondarySize()),
- array(p.array),
- arraySize(p.arraySize),
- interfaceBlock(0),
- structure(0)
+ : type(p.type), precision(p.precision), qualifier(p.qualifier), invariant(p.invariant),
+ layoutQualifier(p.layoutQualifier), primarySize(p.primarySize), secondarySize(p.secondarySize),
+ array(p.array), arraySize(p.arraySize), interfaceBlock(0), structure(0)
{
- if (p.getUserDef())
- structure = p.getUserDef()->getStruct();
+ if (p.userDef)
+ structure = p.userDef->getStruct();
}
bool TStructure::equals(const TStructure &other) const
@@ -311,42 +274,6 @@ TString TType::buildMangledName() const
case EbtSampler2DArrayShadow:
mangledName += "s2as";
break;
- case EbtImage2D:
- mangledName += "im2";
- break;
- case EbtIImage2D:
- mangledName += "iim2";
- break;
- case EbtUImage2D:
- mangledName += "uim2";
- break;
- case EbtImage3D:
- mangledName += "im3";
- break;
- case EbtIImage3D:
- mangledName += "iim3";
- break;
- case EbtUImage3D:
- mangledName += "uim3";
- break;
- case EbtImage2DArray:
- mangledName += "im2a";
- break;
- case EbtIImage2DArray:
- mangledName += "iim2a";
- break;
- case EbtUImage2DArray:
- mangledName += "uim2a";
- break;
- case EbtImageCube:
- mangledName += "imc";
- break;
- case EbtIImageCube:
- mangledName += "iimc";
- break;
- case EbtUImageCube:
- mangledName += "uimc";
- break;
case EbtStruct:
mangledName += structure->mangledName();
break;
@@ -391,9 +318,6 @@ size_t TType::getObjectSize() const
if (isArray())
{
- if (totalSize == 0)
- return 0;
-
size_t currentArraySize = getArraySize();
if (currentArraySize > INT_MAX / totalSize)
totalSize = INT_MAX;
@@ -404,14 +328,6 @@ size_t TType::getObjectSize() const
return totalSize;
}
-TStructure::TStructure(const TString *name, TFieldList *fields)
- : TFieldListCollection(name, fields),
- mDeepestNesting(0),
- mUniqueId(TSymbolTable::nextUniqueId()),
- mAtGlobalScope(false)
-{
-}
-
bool TStructure::containsArrays() const
{
for (size_t i = 0; i < mFields->size(); ++i)
@@ -445,17 +361,6 @@ bool TStructure::containsSamplers() const
return false;
}
-bool TStructure::containsImages() const
-{
- for (size_t i = 0; i < mFields->size(); ++i)
- {
- const TType *fieldType = (*mFields)[i]->type();
- if (IsImage(fieldType->getBasicType()) || fieldType->isStructureContainingImages())
- return true;
- }
- return false;
-}
-
void TStructure::createSamplerSymbols(const TString &structName,
const TString &structAPIName,
const unsigned int arrayOfStructsSize,
@@ -560,5 +465,3 @@ int TStructure::calculateDeepestNesting() const
maxNesting = std::max(maxNesting, (*mFields)[i]->type()->getDeepestStructNesting());
return 1 + maxNesting;
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/Types.h b/gfx/angle/src/compiler/translator/Types.h
index fc26d5f59..2a85e010c 100755
--- a/gfx/angle/src/compiler/translator/Types.h
+++ b/gfx/angle/src/compiler/translator/Types.h
@@ -13,9 +13,6 @@
#include "compiler/translator/BaseTypes.h"
#include "compiler/translator/Common.h"
-namespace sh
-{
-
struct TPublicType;
class TType;
class TSymbol;
@@ -106,7 +103,13 @@ class TStructure : public TFieldListCollection
{
public:
POOL_ALLOCATOR_NEW_DELETE();
- TStructure(const TString *name, TFieldList *fields);
+ TStructure(const TString *name, TFieldList *fields)
+ : TFieldListCollection(name, fields),
+ mDeepestNesting(0),
+ mUniqueId(0),
+ mAtGlobalScope(false)
+ {
+ }
int deepestNesting() const
{
@@ -117,7 +120,6 @@ class TStructure : public TFieldListCollection
bool containsArrays() const;
bool containsType(TBasicType t) const;
bool containsSamplers() const;
- bool containsImages() const;
void createSamplerSymbols(const TString &structName,
const TString &structAPIName,
@@ -233,18 +235,10 @@ class TType
public:
POOL_ALLOCATOR_NEW_DELETE();
TType()
- : type(EbtVoid),
- precision(EbpUndefined),
- qualifier(EvqGlobal),
- invariant(false),
- memoryQualifier(TMemoryQualifier::create()),
+ : type(EbtVoid), precision(EbpUndefined), qualifier(EvqGlobal), invariant(false),
layoutQualifier(TLayoutQualifier::create()),
- primarySize(0),
- secondarySize(0),
- array(false),
- arraySize(0),
- interfaceBlock(nullptr),
- structure(nullptr)
+ primarySize(0), secondarySize(0), array(false), arraySize(0),
+ interfaceBlock(nullptr), structure(nullptr)
{
}
explicit TType(TBasicType t, unsigned char ps = 1, unsigned char ss = 1)
@@ -252,7 +246,6 @@ class TType
precision(EbpUndefined),
qualifier(EvqGlobal),
invariant(false),
- memoryQualifier(TMemoryQualifier::create()),
layoutQualifier(TLayoutQualifier::create()),
primarySize(ps),
secondarySize(ss),
@@ -262,24 +255,12 @@ class TType
structure(0)
{
}
- TType(TBasicType t,
- TPrecision p,
- TQualifier q = EvqTemporary,
- unsigned char ps = 1,
- unsigned char ss = 1,
- bool a = false)
- : type(t),
- precision(p),
- qualifier(q),
- invariant(false),
- memoryQualifier(TMemoryQualifier::create()),
+ TType(TBasicType t, TPrecision p, TQualifier q = EvqTemporary,
+ unsigned char ps = 1, unsigned char ss = 1, bool a = false)
+ : type(t), precision(p), qualifier(q), invariant(false),
layoutQualifier(TLayoutQualifier::create()),
- primarySize(ps),
- secondarySize(ss),
- array(a),
- arraySize(0),
- interfaceBlock(0),
- structure(0)
+ primarySize(ps), secondarySize(ss), array(a), arraySize(0),
+ interfaceBlock(0), structure(0)
{
}
explicit TType(const TPublicType &p);
@@ -288,7 +269,6 @@ class TType
precision(p),
qualifier(EvqTemporary),
invariant(false),
- memoryQualifier(TMemoryQualifier::create()),
layoutQualifier(TLayoutQualifier::create()),
primarySize(1),
secondarySize(1),
@@ -298,22 +278,12 @@ class TType
structure(userDef)
{
}
- TType(TInterfaceBlock *interfaceBlockIn,
- TQualifier qualifierIn,
- TLayoutQualifier layoutQualifierIn,
- int arraySizeIn)
- : type(EbtInterfaceBlock),
- precision(EbpUndefined),
- qualifier(qualifierIn),
- invariant(false),
- memoryQualifier(TMemoryQualifier::create()),
- layoutQualifier(layoutQualifierIn),
- primarySize(1),
- secondarySize(1),
- array(arraySizeIn > 0),
- arraySize(arraySizeIn),
- interfaceBlock(interfaceBlockIn),
- structure(0)
+ TType(TInterfaceBlock *interfaceBlockIn, TQualifier qualifierIn,
+ TLayoutQualifier layoutQualifierIn, int arraySizeIn)
+ : type(EbtInterfaceBlock), precision(EbpUndefined), qualifier(qualifierIn),
+ invariant(false), layoutQualifier(layoutQualifierIn),
+ primarySize(1), secondarySize(1), array(arraySizeIn > 0), arraySize(arraySizeIn),
+ interfaceBlock(interfaceBlockIn), structure(0)
{
}
@@ -358,9 +328,6 @@ class TType
void setInvariant(bool i) { invariant = i; }
- TMemoryQualifier getMemoryQualifier() const { return memoryQualifier; }
- void setMemoryQualifier(const TMemoryQualifier &mq) { memoryQualifier = mq; }
-
TLayoutQualifier getLayoutQualifier() const
{
return layoutQualifier;
@@ -538,16 +505,16 @@ class TType
const char *getBasicString() const
{
- return sh::getBasicString(type);
+ return ::getBasicString(type);
}
const char *getPrecisionString() const
{
- return sh::getPrecisionString(precision);
+ return ::getPrecisionString(precision);
}
const char *getQualifierString() const
{
- return sh::getQualifierString(qualifier);
+ return ::getQualifierString(qualifier);
}
const char *getBuiltInTypeNameString() const;
@@ -586,11 +553,6 @@ class TType
return structure ? structure->containsSamplers() : false;
}
- bool isStructureContainingImages() const
- {
- return structure ? structure->containsImages() : false;
- }
-
void createSamplerSymbols(const TString &structName,
const TString &structAPIName,
const unsigned int arrayOfStructsSize,
@@ -617,7 +579,6 @@ class TType
TPrecision precision;
TQualifier qualifier;
bool invariant;
- TMemoryQualifier memoryQualifier;
TLayoutQualifier layoutQualifier;
unsigned char primarySize; // size of vector or cols matrix
unsigned char secondarySize; // rows of a matrix
@@ -633,25 +594,44 @@ class TType
mutable TString mangled;
};
-// TTypeSpecifierNonArray stores all of the necessary fields for type_specifier_nonarray from the
-// grammar
-struct TTypeSpecifierNonArray
+//
+// This is a workaround for a problem with the yacc stack, It can't have
+// types that it thinks have non-trivial constructors. It should
+// just be used while recognizing the grammar, not anything else. Pointers
+// could be used, but also trying to avoid lots of memory management overhead.
+//
+// Not as bad as it looks, there is no actual assumption that the fields
+// match up or are name the same or anything like that.
+//
+struct TPublicType
{
TBasicType type;
+ TLayoutQualifier layoutQualifier;
+ TQualifier qualifier;
+ bool invariant;
+ TPrecision precision;
unsigned char primarySize; // size of vector or cols of matrix
unsigned char secondarySize; // rows of matrix
+ bool array;
+ int arraySize;
TType *userDef;
TSourceLoc line;
// true if the type was defined by a struct specifier rather than a reference to a type name.
bool isStructSpecifier;
- void initialize(TBasicType bt, const TSourceLoc &ln)
+ void setBasic(TBasicType bt, TQualifier q, const TSourceLoc &ln)
{
type = bt;
+ layoutQualifier = TLayoutQualifier::create();
+ qualifier = q;
+ invariant = false;
+ precision = EbpUndefined;
primarySize = 1;
secondarySize = 1;
- userDef = nullptr;
+ array = false;
+ arraySize = 0;
+ userDef = 0;
line = ln;
isStructSpecifier = false;
}
@@ -661,113 +641,79 @@ struct TTypeSpecifierNonArray
primarySize = size;
}
- void setMatrix(unsigned char columns, unsigned char rows)
+ void setMatrix(unsigned char c, unsigned char r)
{
- ASSERT(columns > 1 && rows > 1 && columns <= 4 && rows <= 4);
- primarySize = columns;
- secondarySize = rows;
+ ASSERT(c > 1 && r > 1 && c <= 4 && r <= 4);
+ primarySize = c;
+ secondarySize = r;
}
- bool isMatrix() const { return primarySize > 1 && secondarySize > 1; }
-
- bool isVector() const { return primarySize > 1 && secondarySize == 1; }
-};
-
-//
-// This is a workaround for a problem with the yacc stack, It can't have
-// types that it thinks have non-trivial constructors. It should
-// just be used while recognizing the grammar, not anything else. Pointers
-// could be used, but also trying to avoid lots of memory management overhead.
-//
-// Not as bad as it looks, there is no actual assumption that the fields
-// match up or are name the same or anything like that.
-//
-struct TPublicType
-{
- TTypeSpecifierNonArray typeSpecifierNonArray;
- TLayoutQualifier layoutQualifier;
- TMemoryQualifier memoryQualifier;
- TQualifier qualifier;
- bool invariant;
- TPrecision precision;
- bool array;
- int arraySize;
-
- void initialize(const TTypeSpecifierNonArray &typeSpecifier, TQualifier q)
+ bool isUnsizedArray() const
{
- typeSpecifierNonArray = typeSpecifier;
- layoutQualifier = TLayoutQualifier::create();
- memoryQualifier = TMemoryQualifier::create();
- qualifier = q;
- invariant = false;
- precision = EbpUndefined;
- array = false;
- arraySize = 0;
+ return array && arraySize == 0;
}
-
- void initializeBasicType(TBasicType basicType)
+ void setArraySize(int s)
{
- typeSpecifierNonArray.type = basicType;
- typeSpecifierNonArray.primarySize = 1;
- typeSpecifierNonArray.secondarySize = 1;
- layoutQualifier = TLayoutQualifier::create();
- memoryQualifier = TMemoryQualifier::create();
- qualifier = EvqTemporary;
- invariant = false;
- precision = EbpUndefined;
- array = false;
- arraySize = 0;
+ array = true;
+ arraySize = s;
+ }
+ void clearArrayness()
+ {
+ array = false;
+ arraySize = 0;
}
-
- TBasicType getBasicType() const { return typeSpecifierNonArray.type; }
- void setBasicType(TBasicType basicType) { typeSpecifierNonArray.type = basicType; }
-
- unsigned char getPrimarySize() const { return typeSpecifierNonArray.primarySize; }
- unsigned char getSecondarySize() const { return typeSpecifierNonArray.secondarySize; }
-
- const TType *getUserDef() const { return typeSpecifierNonArray.userDef; }
- const TSourceLoc &getLine() const { return typeSpecifierNonArray.line; }
-
- bool isStructSpecifier() const { return typeSpecifierNonArray.isStructSpecifier; }
bool isStructureContainingArrays() const
{
- if (!typeSpecifierNonArray.userDef)
+ if (!userDef)
{
return false;
}
- return typeSpecifierNonArray.userDef->isStructureContainingArrays();
+ return userDef->isStructureContainingArrays();
}
bool isStructureContainingType(TBasicType t) const
{
- if (!typeSpecifierNonArray.userDef)
+ if (!userDef)
{
return false;
}
- return typeSpecifierNonArray.userDef->isStructureContainingType(t);
+ return userDef->isStructureContainingType(t);
}
- bool isUnsizedArray() const { return array && arraySize == 0; }
- void setArraySize(int s)
+ bool isMatrix() const
{
- array = true;
- arraySize = s;
+ return primarySize > 1 && secondarySize > 1;
}
- void clearArrayness()
+
+ bool isVector() const
{
- array = false;
- arraySize = 0;
+ return primarySize > 1 && secondarySize == 1;
+ }
+
+ int getCols() const
+ {
+ ASSERT(isMatrix());
+ return primarySize;
+ }
+
+ int getRows() const
+ {
+ ASSERT(isMatrix());
+ return secondarySize;
+ }
+
+ int getNominalSize() const
+ {
+ return primarySize;
}
bool isAggregate() const
{
- return array || typeSpecifierNonArray.isMatrix() || typeSpecifierNonArray.isVector();
+ return array || isMatrix() || isVector();
}
};
-} // namespace sh
-
#endif // COMPILER_TRANSLATOR_TYPES_H_
diff --git a/gfx/angle/src/compiler/translator/UnfoldShortCircuitAST.cpp b/gfx/angle/src/compiler/translator/UnfoldShortCircuitAST.cpp
index b6a355a13..3ef555fc8 100755
--- a/gfx/angle/src/compiler/translator/UnfoldShortCircuitAST.cpp
+++ b/gfx/angle/src/compiler/translator/UnfoldShortCircuitAST.cpp
@@ -6,37 +6,36 @@
#include "compiler/translator/UnfoldShortCircuitAST.h"
-namespace sh
-{
-
namespace
{
// "x || y" is equivalent to "x ? true : y".
-TIntermTernary *UnfoldOR(TIntermTyped *x, TIntermTyped *y)
+TIntermSelection *UnfoldOR(TIntermTyped *x, TIntermTyped *y)
{
+ const TType boolType(EbtBool, EbpUndefined);
TConstantUnion *u = new TConstantUnion;
u->setBConst(true);
TIntermConstantUnion *trueNode = new TIntermConstantUnion(
u, TType(EbtBool, EbpUndefined, EvqConst, 1));
- return new TIntermTernary(x, trueNode, y);
+ return new TIntermSelection(x, trueNode, y, boolType);
}
// "x && y" is equivalent to "x ? y : false".
-TIntermTernary *UnfoldAND(TIntermTyped *x, TIntermTyped *y)
+TIntermSelection *UnfoldAND(TIntermTyped *x, TIntermTyped *y)
{
+ const TType boolType(EbtBool, EbpUndefined);
TConstantUnion *u = new TConstantUnion;
u->setBConst(false);
TIntermConstantUnion *falseNode = new TIntermConstantUnion(
u, TType(EbtBool, EbpUndefined, EvqConst, 1));
- return new TIntermTernary(x, y, falseNode);
+ return new TIntermSelection(x, y, falseNode, boolType);
}
} // namespace anonymous
bool UnfoldShortCircuitAST::visitBinary(Visit visit, TIntermBinary *node)
{
- TIntermTernary *replacement = nullptr;
+ TIntermSelection *replacement = NULL;
switch (node->getOp())
{
@@ -55,5 +54,3 @@ bool UnfoldShortCircuitAST::visitBinary(Visit visit, TIntermBinary *node)
}
return true;
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/UnfoldShortCircuitAST.h b/gfx/angle/src/compiler/translator/UnfoldShortCircuitAST.h
index ac18bbf99..b92a4e915 100755
--- a/gfx/angle/src/compiler/translator/UnfoldShortCircuitAST.h
+++ b/gfx/angle/src/compiler/translator/UnfoldShortCircuitAST.h
@@ -13,9 +13,6 @@
#include "common/angleutils.h"
#include "compiler/translator/IntermNode.h"
-namespace sh
-{
-
// This traverser identifies all the short circuit binary nodes that need to
// be replaced, and creates the corresponding replacement nodes. However,
// the actual replacements happen after the traverse through updateTree().
@@ -31,6 +28,4 @@ class UnfoldShortCircuitAST : public TIntermTraverser
bool visitBinary(Visit visit, TIntermBinary *) override;
};
-} // namespace sh
-
#endif // COMPILER_TRANSLATOR_UNFOLDSHORTCIRCUITAST_H_
diff --git a/gfx/angle/src/compiler/translator/UnfoldShortCircuitToIf.cpp b/gfx/angle/src/compiler/translator/UnfoldShortCircuitToIf.cpp
index 22fa54287..4f32d6a7f 100755
--- a/gfx/angle/src/compiler/translator/UnfoldShortCircuitToIf.cpp
+++ b/gfx/angle/src/compiler/translator/UnfoldShortCircuitToIf.cpp
@@ -13,9 +13,6 @@
#include "compiler/translator/IntermNode.h"
#include "compiler/translator/IntermNodePatternMatcher.h"
-namespace sh
-{
-
namespace
{
@@ -26,7 +23,7 @@ class UnfoldShortCircuitTraverser : public TIntermTraverser
UnfoldShortCircuitTraverser();
bool visitBinary(Visit visit, TIntermBinary *node) override;
- bool visitTernary(Visit visit, TIntermTernary *node) override;
+ bool visitSelection(Visit visit, TIntermSelection *node) override;
void nextIteration();
bool foundShortCircuit() const { return mFoundShortCircuit; }
@@ -78,12 +75,13 @@ bool UnfoldShortCircuitTraverser::visitBinary(Visit visit, TIntermBinary *node)
ASSERT(node->getLeft()->getType() == boolType);
insertions.push_back(createTempInitDeclaration(node->getLeft()));
- TIntermBlock *assignRightBlock = new TIntermBlock();
+ TIntermAggregate *assignRightBlock = new TIntermAggregate(EOpSequence);
ASSERT(node->getRight()->getType() == boolType);
assignRightBlock->getSequence()->push_back(createTempAssignment(node->getRight()));
- TIntermUnary *notTempSymbol = new TIntermUnary(EOpLogicalNot, createTempSymbol(boolType));
- TIntermIfElse *ifNode = new TIntermIfElse(notTempSymbol, assignRightBlock, nullptr);
+ TIntermUnary *notTempSymbol = new TIntermUnary(EOpLogicalNot, boolType);
+ notTempSymbol->setOperand(createTempSymbol(boolType));
+ TIntermSelection *ifNode = new TIntermSelection(notTempSymbol, assignRightBlock, nullptr);
insertions.push_back(ifNode);
insertStatementsInParentBlock(insertions);
@@ -102,12 +100,12 @@ bool UnfoldShortCircuitTraverser::visitBinary(Visit visit, TIntermBinary *node)
ASSERT(node->getLeft()->getType() == boolType);
insertions.push_back(createTempInitDeclaration(node->getLeft()));
- TIntermBlock *assignRightBlock = new TIntermBlock();
+ TIntermAggregate *assignRightBlock = new TIntermAggregate(EOpSequence);
ASSERT(node->getRight()->getType() == boolType);
assignRightBlock->getSequence()->push_back(createTempAssignment(node->getRight()));
- TIntermIfElse *ifNode =
- new TIntermIfElse(createTempSymbol(boolType), assignRightBlock, nullptr);
+ TIntermSelection *ifNode =
+ new TIntermSelection(createTempSymbol(boolType), assignRightBlock, nullptr);
insertions.push_back(ifNode);
insertStatementsInParentBlock(insertions);
@@ -121,7 +119,7 @@ bool UnfoldShortCircuitTraverser::visitBinary(Visit visit, TIntermBinary *node)
}
}
-bool UnfoldShortCircuitTraverser::visitTernary(Visit visit, TIntermTernary *node)
+bool UnfoldShortCircuitTraverser::visitSelection(Visit visit, TIntermSelection *node)
{
if (mFoundShortCircuit)
return false;
@@ -134,22 +132,26 @@ bool UnfoldShortCircuitTraverser::visitTernary(Visit visit, TIntermTernary *node
mFoundShortCircuit = true;
+ ASSERT(node->usesTernaryOperator());
+
// Unfold "b ? x : y" into "type s; if(b) s = x; else s = y;"
TIntermSequence insertions;
- TIntermDeclaration *tempDeclaration = createTempDeclaration(node->getType());
+ TIntermSymbol *tempSymbol = createTempSymbol(node->getType());
+ TIntermAggregate *tempDeclaration = new TIntermAggregate(EOpDeclaration);
+ tempDeclaration->getSequence()->push_back(tempSymbol);
insertions.push_back(tempDeclaration);
- TIntermBlock *trueBlock = new TIntermBlock();
- TIntermBinary *trueAssignment = createTempAssignment(node->getTrueExpression());
+ TIntermAggregate *trueBlock = new TIntermAggregate(EOpSequence);
+ TIntermBinary *trueAssignment = createTempAssignment(node->getTrueBlock()->getAsTyped());
trueBlock->getSequence()->push_back(trueAssignment);
- TIntermBlock *falseBlock = new TIntermBlock();
- TIntermBinary *falseAssignment = createTempAssignment(node->getFalseExpression());
+ TIntermAggregate *falseBlock = new TIntermAggregate(EOpSequence);
+ TIntermBinary *falseAssignment = createTempAssignment(node->getFalseBlock()->getAsTyped());
falseBlock->getSequence()->push_back(falseAssignment);
- TIntermIfElse *ifNode =
- new TIntermIfElse(node->getCondition()->getAsTyped(), trueBlock, falseBlock);
+ TIntermSelection *ifNode =
+ new TIntermSelection(node->getCondition()->getAsTyped(), trueBlock, falseBlock);
insertions.push_back(ifNode);
insertStatementsInParentBlock(insertions);
@@ -183,5 +185,3 @@ void UnfoldShortCircuitToIf(TIntermNode *root, unsigned int *temporaryIndex)
}
while (traverser.foundShortCircuit());
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/UnfoldShortCircuitToIf.h b/gfx/angle/src/compiler/translator/UnfoldShortCircuitToIf.h
index 24ff289a3..0fe37b714 100755
--- a/gfx/angle/src/compiler/translator/UnfoldShortCircuitToIf.h
+++ b/gfx/angle/src/compiler/translator/UnfoldShortCircuitToIf.h
@@ -11,11 +11,8 @@
#ifndef COMPILER_TRANSLATOR_UNFOLDSHORTCIRCUIT_H_
#define COMPILER_TRANSLATOR_UNFOLDSHORTCIRCUIT_H_
-namespace sh
-{
class TIntermNode;
void UnfoldShortCircuitToIf(TIntermNode *root, unsigned int *temporaryIndex);
-} // namespace sh
#endif // COMPILER_TRANSLATOR_UNFOLDSHORTCIRCUIT_H_
diff --git a/gfx/angle/src/compiler/translator/UseInterfaceBlockFields.cpp b/gfx/angle/src/compiler/translator/UseInterfaceBlockFields.cpp
deleted file mode 100644
index 390e2b092..000000000
--- a/gfx/angle/src/compiler/translator/UseInterfaceBlockFields.cpp
+++ /dev/null
@@ -1,163 +0,0 @@
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-
-// UseInterfaceBlockFields.cpp: insert statements to reference all members in InterfaceBlock list at
-// the beginning of main. This is to work around a Mac driver that treats unused standard/shared
-// uniform blocks as inactive.
-
-#include "compiler/translator/UseInterfaceBlockFields.h"
-
-#include "compiler/translator/IntermNode.h"
-#include "compiler/translator/SymbolTable.h"
-#include "compiler/translator/util.h"
-
-namespace sh
-{
-
-namespace
-{
-
-class UseUniformBlockMembers : public TIntermTraverser
-{
- public:
- UseUniformBlockMembers(const InterfaceBlockList &blocks, const TSymbolTable &symbolTable)
- : TIntermTraverser(true, false, false),
- mBlocks(blocks),
- mSymbolTable(symbolTable),
- mCodeInserted(false)
- {
- ASSERT(mSymbolTable.atGlobalLevel());
- }
-
- protected:
- bool visitAggregate(Visit visit, TIntermAggregate *node) override { return !mCodeInserted; }
- bool visitFunctionDefinition(Visit visit, TIntermFunctionDefinition *node) override;
-
- private:
- void insertUseCode(TIntermSequence *sequence);
- void AddFieldUseStatements(const ShaderVariable &var, TIntermSequence *sequence);
-
- const InterfaceBlockList &mBlocks;
- const TSymbolTable &mSymbolTable;
- bool mCodeInserted;
-};
-
-bool UseUniformBlockMembers::visitFunctionDefinition(Visit visit, TIntermFunctionDefinition *node)
-{
- ASSERT(visit == PreVisit);
- if (node->getFunctionSymbolInfo()->isMain())
- {
- TIntermBlock *body = node->getBody();
- ASSERT(body);
- insertUseCode(body->getSequence());
- mCodeInserted = true;
- return false;
- }
- return !mCodeInserted;
-}
-
-void UseUniformBlockMembers::AddFieldUseStatements(const ShaderVariable &var,
- TIntermSequence *sequence)
-{
- TString name = TString(var.name.c_str());
- if (var.isArray())
- {
- size_t pos = name.find_last_of('[');
- if (pos != TString::npos)
- {
- name = name.substr(0, pos);
- }
- }
- const TType *type;
- TType basicType;
- if (var.isStruct())
- {
- TVariable *structInfo = reinterpret_cast<TVariable *>(mSymbolTable.findGlobal(name));
- ASSERT(structInfo);
- const TType &structType = structInfo->getType();
- type = &structType;
- }
- else
- {
- basicType = sh::GetShaderVariableBasicType(var);
- type = &basicType;
- }
- ASSERT(type);
-
- TIntermSymbol *symbol = new TIntermSymbol(0, name, *type);
- if (var.isArray())
- {
- for (unsigned int i = 0; i < var.arraySize; ++i)
- {
- TIntermBinary *element =
- new TIntermBinary(EOpIndexDirect, symbol, TIntermTyped::CreateIndexNode(i));
- sequence->insert(sequence->begin(), element);
- }
- }
- else
- {
- sequence->insert(sequence->begin(), symbol);
- }
-}
-
-void UseUniformBlockMembers::insertUseCode(TIntermSequence *sequence)
-{
- for (const auto &block : mBlocks)
- {
- if (block.instanceName.empty())
- {
- for (const auto &var : block.fields)
- {
- AddFieldUseStatements(var, sequence);
- }
- }
- else if (block.arraySize > 0)
- {
- TString name = TString(block.instanceName.c_str());
- TVariable *ubInfo = reinterpret_cast<TVariable *>(mSymbolTable.findGlobal(name));
- ASSERT(ubInfo);
- TIntermSymbol *arraySymbol = new TIntermSymbol(0, name, ubInfo->getType());
- for (unsigned int i = 0; i < block.arraySize; ++i)
- {
- TIntermBinary *instanceSymbol = new TIntermBinary(EOpIndexDirect, arraySymbol,
- TIntermTyped::CreateIndexNode(i));
- for (unsigned int j = 0; j < block.fields.size(); ++j)
- {
- TIntermBinary *element =
- new TIntermBinary(EOpIndexDirectInterfaceBlock, instanceSymbol,
- TIntermTyped::CreateIndexNode(j));
- sequence->insert(sequence->begin(), element);
- }
- }
- }
- else
- {
- TString name = TString(block.instanceName.c_str());
- TVariable *ubInfo = reinterpret_cast<TVariable *>(mSymbolTable.findGlobal(name));
- ASSERT(ubInfo);
- TIntermSymbol *blockSymbol = new TIntermSymbol(0, name, ubInfo->getType());
- for (unsigned int i = 0; i < block.fields.size(); ++i)
- {
- TIntermBinary *element = new TIntermBinary(
- EOpIndexDirectInterfaceBlock, blockSymbol, TIntermTyped::CreateIndexNode(i));
-
- sequence->insert(sequence->begin(), element);
- }
- }
- }
-}
-
-} // namespace anonymous
-
-void UseInterfaceBlockFields(TIntermNode *root,
- const InterfaceBlockList &blocks,
- const TSymbolTable &symbolTable)
-{
- UseUniformBlockMembers useUniformBlock(blocks, symbolTable);
- root->traverse(&useUniformBlock);
-}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/UseInterfaceBlockFields.h b/gfx/angle/src/compiler/translator/UseInterfaceBlockFields.h
deleted file mode 100644
index a789bb7e9..000000000
--- a/gfx/angle/src/compiler/translator/UseInterfaceBlockFields.h
+++ /dev/null
@@ -1,30 +0,0 @@
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-
-// UseInterfaceBlockFields.h: insert statements to reference all members in InterfaceBlock list at
-// the beginning of main. This is to work around a Mac driver that treats unused standard/shared
-// uniform blocks as inactive.
-
-#ifndef COMPILER_TRANSLATOR_USEINTERFACEBLOCKFIELDS_H_
-#define COMPILER_TRANSLATOR_USEINTERFACEBLOCKFIELDS_H_
-
-#include <GLSLANG/ShaderLang.h>
-
-class TIntermNode;
-namespace sh
-{
-
-class TSymbolTable;
-
-using InterfaceBlockList = std::vector<sh::InterfaceBlock>;
-
-void UseInterfaceBlockFields(TIntermNode *root,
- const InterfaceBlockList &blocks,
- const TSymbolTable &symbolTable);
-
-} // namespace sh
-
-#endif // COMPILER_TRANSLATOR_USEINTERFACEBLOCKFIELDS_H_
diff --git a/gfx/angle/src/compiler/translator/UtilsHLSL.cpp b/gfx/angle/src/compiler/translator/UtilsHLSL.cpp
index 221d5d9b5..b3a065f19 100755
--- a/gfx/angle/src/compiler/translator/UtilsHLSL.cpp
+++ b/gfx/angle/src/compiler/translator/UtilsHLSL.cpp
@@ -173,8 +173,6 @@ TString TextureTypeSuffix(const TBasicType type)
return "Cube_int4_";
case EbtUSamplerCube:
return "Cube_uint4_";
- case EbtSamplerExternalOES:
- return "_External";
default:
// All other types are identified by their group suffix
return TextureGroupSuffix(type);
diff --git a/gfx/angle/src/compiler/translator/ValidateGlobalInitializer.cpp b/gfx/angle/src/compiler/translator/ValidateGlobalInitializer.cpp
index d5b1b3be4..2461b6a43 100755
--- a/gfx/angle/src/compiler/translator/ValidateGlobalInitializer.cpp
+++ b/gfx/angle/src/compiler/translator/ValidateGlobalInitializer.cpp
@@ -8,9 +8,6 @@
#include "compiler/translator/ParseContext.h"
-namespace sh
-{
-
namespace
{
@@ -113,4 +110,3 @@ bool ValidateGlobalInitializer(TIntermTyped *initializer, const TParseContext *c
return validate.isValid();
}
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/ValidateGlobalInitializer.h b/gfx/angle/src/compiler/translator/ValidateGlobalInitializer.h
index 89b4b1176..c3d2a47eb 100755
--- a/gfx/angle/src/compiler/translator/ValidateGlobalInitializer.h
+++ b/gfx/angle/src/compiler/translator/ValidateGlobalInitializer.h
@@ -7,15 +7,10 @@
#ifndef COMPILER_TRANSLATOR_VALIDATEGLOBALINITIALIZER_H_
#define COMPILER_TRANSLATOR_VALIDATEGLOBALINITIALIZER_H_
-namespace sh
-{
-
class TIntermTyped;
class TParseContext;
// Returns true if the initializer is valid.
bool ValidateGlobalInitializer(TIntermTyped *initializer, const TParseContext *context, bool *warning);
-} // namespace sh
-
#endif // COMPILER_TRANSLATOR_VALIDATEGLOBALINITIALIZER_H_
diff --git a/gfx/angle/src/compiler/translator/ValidateLimitations.cpp b/gfx/angle/src/compiler/translator/ValidateLimitations.cpp
index 75a0c5156..ba8cdd0aa 100755
--- a/gfx/angle/src/compiler/translator/ValidateLimitations.cpp
+++ b/gfx/angle/src/compiler/translator/ValidateLimitations.cpp
@@ -10,9 +10,6 @@
#include "compiler/translator/ParseContext.h"
#include "angle_gl.h"
-namespace sh
-{
-
namespace
{
@@ -216,8 +213,8 @@ int ValidateLimitations::validateForLoopInit(TIntermLoop *node)
// init-declaration has the form:
// type-specifier identifier = constant-expression
//
- TIntermDeclaration *decl = init->getAsDeclarationNode();
- if (decl == nullptr)
+ TIntermAggregate *decl = init->getAsAggregate();
+ if ((decl == NULL) || (decl->getOp() != EOpDeclaration))
{
error(init->getLine(), "Invalid init declaration", "for");
return -1;
@@ -426,8 +423,7 @@ bool ValidateLimitations::validateFunctionCall(TIntermAggregate *node)
bool valid = true;
TSymbolTable& symbolTable = GetGlobalParseContext()->symbolTable;
- TSymbol *symbol = symbolTable.find(node->getFunctionSymbolInfo()->getName(),
- GetGlobalParseContext()->getShaderVersion());
+ TSymbol* symbol = symbolTable.find(node->getName(), GetGlobalParseContext()->getShaderVersion());
ASSERT(symbol && symbol->isFunction());
TFunction *function = static_cast<TFunction *>(symbol);
for (ParamIndex::const_iterator i = pIndex.begin();
@@ -499,4 +495,3 @@ bool ValidateLimitations::validateIndexing(TIntermBinary *node)
return valid;
}
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/ValidateLimitations.h b/gfx/angle/src/compiler/translator/ValidateLimitations.h
index 4c84f9db7..666e38ff5 100755
--- a/gfx/angle/src/compiler/translator/ValidateLimitations.h
+++ b/gfx/angle/src/compiler/translator/ValidateLimitations.h
@@ -10,9 +10,6 @@
#include "compiler/translator/IntermNode.h"
#include "compiler/translator/LoopInfo.h"
-namespace sh
-{
-
class TInfoSinkBase;
// Traverses intermediate tree to ensure that the shader does not exceed the
@@ -63,6 +60,4 @@ class ValidateLimitations : public TIntermTraverser
bool mValidateInnerLoops;
};
-} // namespace sh
-
#endif // COMPILER_TRANSLATOR_VALIDATELIMITATIONS_H_
diff --git a/gfx/angle/src/compiler/translator/ValidateMaxParameters.cpp b/gfx/angle/src/compiler/translator/ValidateMaxParameters.cpp
index f97f7a907..00b3c9b45 100755
--- a/gfx/angle/src/compiler/translator/ValidateMaxParameters.cpp
+++ b/gfx/angle/src/compiler/translator/ValidateMaxParameters.cpp
@@ -7,9 +7,6 @@
#include "compiler/translator/ValidateMaxParameters.h"
-namespace sh
-{
-
ValidateMaxParameters::ValidateMaxParameters(unsigned int maxParameters)
: TIntermTraverser(true, false, false), mMaxParameters(maxParameters), mValid(true)
{
@@ -36,5 +33,3 @@ bool ValidateMaxParameters::validate(TIntermNode *root, unsigned int maxParamete
root->traverse(&argsTraverser);
return argsTraverser.mValid;
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/ValidateMaxParameters.h b/gfx/angle/src/compiler/translator/ValidateMaxParameters.h
index fdd0b8d09..87916afef 100755
--- a/gfx/angle/src/compiler/translator/ValidateMaxParameters.h
+++ b/gfx/angle/src/compiler/translator/ValidateMaxParameters.h
@@ -10,9 +10,6 @@
#include "compiler/translator/IntermNode.h"
-namespace sh
-{
-
class ValidateMaxParameters : public TIntermTraverser
{
public:
@@ -29,6 +26,4 @@ class ValidateMaxParameters : public TIntermTraverser
bool mValid;
};
-} // namespace sh
-
#endif // COMPILER_TRANSLATOR_VALIDATEMAXPARAMETERS_H_
diff --git a/gfx/angle/src/compiler/translator/ValidateOutputs.cpp b/gfx/angle/src/compiler/translator/ValidateOutputs.cpp
index e48da8a79..9f5f8f577 100755
--- a/gfx/angle/src/compiler/translator/ValidateOutputs.cpp
+++ b/gfx/angle/src/compiler/translator/ValidateOutputs.cpp
@@ -9,9 +9,6 @@
#include "compiler/translator/InitializeParseContext.h"
#include "compiler/translator/ParseContext.h"
-namespace sh
-{
-
namespace
{
void error(int *errorCount, TInfoSinkBase &sink, const TIntermSymbol &symbol, const char *reason)
@@ -109,5 +106,3 @@ int ValidateOutputs::validateAndCountErrors(TInfoSinkBase &sink) const
}
return errorCount;
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/ValidateOutputs.h b/gfx/angle/src/compiler/translator/ValidateOutputs.h
index 0788f4ed6..0122ca25f 100755
--- a/gfx/angle/src/compiler/translator/ValidateOutputs.h
+++ b/gfx/angle/src/compiler/translator/ValidateOutputs.h
@@ -12,9 +12,6 @@
#include <set>
-namespace sh
-{
-
class TInfoSinkBase;
class ValidateOutputs : public TIntermTraverser
@@ -36,6 +33,4 @@ class ValidateOutputs : public TIntermTraverser
std::set<std::string> mVisitedSymbols;
};
-} // namespace sh
-
#endif // COMPILER_TRANSLATOR_VALIDATEOUTPUTS_H_
diff --git a/gfx/angle/src/compiler/translator/ValidateSwitch.cpp b/gfx/angle/src/compiler/translator/ValidateSwitch.cpp
index 9bcd8f5fe..9a4ed3363 100755
--- a/gfx/angle/src/compiler/translator/ValidateSwitch.cpp
+++ b/gfx/angle/src/compiler/translator/ValidateSwitch.cpp
@@ -8,13 +8,8 @@
#include "compiler/translator/ParseContext.h"
-namespace sh
-{
-
-bool ValidateSwitch::validate(TBasicType switchType,
- TParseContext *context,
- TIntermBlock *statementList,
- const TSourceLoc &loc)
+bool ValidateSwitch::validate(TBasicType switchType, TParseContext *context,
+ TIntermAggregate *statementList, const TSourceLoc &loc)
{
ValidateSwitch validate(switchType, context);
ASSERT(statementList);
@@ -64,19 +59,11 @@ bool ValidateSwitch::visitUnary(Visit, TIntermUnary *)
{
if (!mFirstCaseFound)
mStatementBeforeCase = true;
- mLastStatementWasCase = false;
- return true;
-}
-
-bool ValidateSwitch::visitTernary(Visit, TIntermTernary *)
-{
- if (!mFirstCaseFound)
- mStatementBeforeCase = true;
mLastStatementWasCase = false;
return true;
}
-bool ValidateSwitch::visitIfElse(Visit visit, TIntermIfElse *)
+bool ValidateSwitch::visitSelection(Visit visit, TIntermSelection *)
{
if (visit == PreVisit)
++mControlFlowDepth;
@@ -211,5 +198,3 @@ bool ValidateSwitch::validateInternal(const TSourceLoc &loc)
return !mStatementBeforeCase && !mLastStatementWasCase && !mCaseInsideControlFlow &&
!mCaseTypeMismatch && mDefaultCount <= 1 && !mDuplicateCases;
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/ValidateSwitch.h b/gfx/angle/src/compiler/translator/ValidateSwitch.h
index feffbc03c..ddbefc561 100755
--- a/gfx/angle/src/compiler/translator/ValidateSwitch.h
+++ b/gfx/angle/src/compiler/translator/ValidateSwitch.h
@@ -9,8 +9,6 @@
#include "compiler/translator/IntermNode.h"
-namespace sh
-{
class TParseContext;
class ValidateSwitch : public TIntermTraverser
@@ -18,17 +16,14 @@ class ValidateSwitch : public TIntermTraverser
public:
// Check for errors and output messages any remaining errors on the context.
// Returns true if there are no errors.
- static bool validate(TBasicType switchType,
- TParseContext *context,
- TIntermBlock *statementList,
- const TSourceLoc &loc);
+ static bool validate(TBasicType switchType, TParseContext *context,
+ TIntermAggregate *statementList, const TSourceLoc &loc);
void visitSymbol(TIntermSymbol *) override;
void visitConstantUnion(TIntermConstantUnion *) override;
bool visitBinary(Visit, TIntermBinary *) override;
bool visitUnary(Visit, TIntermUnary *) override;
- bool visitTernary(Visit, TIntermTernary *) override;
- bool visitIfElse(Visit visit, TIntermIfElse *) override;
+ bool visitSelection(Visit visit, TIntermSelection *) override;
bool visitSwitch(Visit, TIntermSwitch *) override;
bool visitCase(Visit, TIntermCase *node) override;
bool visitAggregate(Visit, TIntermAggregate *) override;
@@ -54,6 +49,4 @@ class ValidateSwitch : public TIntermTraverser
bool mDuplicateCases;
};
-} // namespace sh
-
#endif // COMPILER_TRANSLATOR_VALIDATESWITCH_H_
diff --git a/gfx/angle/src/compiler/translator/VariableInfo.cpp b/gfx/angle/src/compiler/translator/VariableInfo.cpp
index 07fe12e5d..7e1e5cd82 100755
--- a/gfx/angle/src/compiler/translator/VariableInfo.cpp
+++ b/gfx/angle/src/compiler/translator/VariableInfo.cpp
@@ -559,43 +559,54 @@ void CollectVariables::visitInfoList(const TIntermSequence &sequence,
}
}
-bool CollectVariables::visitDeclaration(Visit, TIntermDeclaration *node)
+bool CollectVariables::visitAggregate(Visit, TIntermAggregate *node)
{
- const TIntermSequence &sequence = *(node->getSequence());
- ASSERT(!sequence.empty());
+ bool visitChildren = true;
- const TIntermTyped &typedNode = *(sequence.front()->getAsTyped());
- TQualifier qualifier = typedNode.getQualifier();
-
- if (typedNode.getBasicType() == EbtInterfaceBlock)
+ switch (node->getOp())
{
- visitInfoList(sequence, mInterfaceBlocks);
- return false;
- }
- else if (qualifier == EvqAttribute || qualifier == EvqVertexIn || qualifier == EvqFragmentOut ||
- qualifier == EvqUniform || IsVarying(qualifier))
- {
- switch (qualifier)
+ case EOpDeclaration:
{
- case EvqAttribute:
- case EvqVertexIn:
- visitInfoList(sequence, mAttribs);
- break;
- case EvqFragmentOut:
- visitInfoList(sequence, mOutputVariables);
- break;
- case EvqUniform:
- visitInfoList(sequence, mUniforms);
- break;
- default:
- visitInfoList(sequence, mVaryings);
- break;
- }
+ const TIntermSequence &sequence = *(node->getSequence());
+ ASSERT(!sequence.empty());
- return false;
+ const TIntermTyped &typedNode = *(sequence.front()->getAsTyped());
+ TQualifier qualifier = typedNode.getQualifier();
+
+ if (typedNode.getBasicType() == EbtInterfaceBlock)
+ {
+ visitInfoList(sequence, mInterfaceBlocks);
+ visitChildren = false;
+ }
+ else if (qualifier == EvqAttribute || qualifier == EvqVertexIn ||
+ qualifier == EvqFragmentOut || qualifier == EvqUniform ||
+ IsVarying(qualifier))
+ {
+ switch (qualifier)
+ {
+ case EvqAttribute:
+ case EvqVertexIn:
+ visitInfoList(sequence, mAttribs);
+ break;
+ case EvqFragmentOut:
+ visitInfoList(sequence, mOutputVariables);
+ break;
+ case EvqUniform:
+ visitInfoList(sequence, mUniforms);
+ break;
+ default:
+ visitInfoList(sequence, mVaryings);
+ break;
+ }
+
+ visitChildren = false;
+ }
+ break;
+ }
+ default: break;
}
- return true;
+ return visitChildren;
}
bool CollectVariables::visitBinary(Visit, TIntermBinary *binaryNode)
diff --git a/gfx/angle/src/compiler/translator/VariableInfo.h b/gfx/angle/src/compiler/translator/VariableInfo.h
index 6b2115656..f79035d38 100755
--- a/gfx/angle/src/compiler/translator/VariableInfo.h
+++ b/gfx/angle/src/compiler/translator/VariableInfo.h
@@ -31,7 +31,7 @@ class CollectVariables : public TIntermTraverser
const TExtensionBehavior &extensionBehavior);
void visitSymbol(TIntermSymbol *symbol) override;
- bool visitDeclaration(Visit, TIntermDeclaration *node) override;
+ bool visitAggregate(Visit, TIntermAggregate *node) override;
bool visitBinary(Visit visit, TIntermBinary *binaryNode) override;
private:
diff --git a/gfx/angle/src/compiler/translator/VersionGLSL.cpp b/gfx/angle/src/compiler/translator/VersionGLSL.cpp
index 9e593ac76..c8718daa1 100755
--- a/gfx/angle/src/compiler/translator/VersionGLSL.cpp
+++ b/gfx/angle/src/compiler/translator/VersionGLSL.cpp
@@ -6,9 +6,6 @@
#include "compiler/translator/VersionGLSL.h"
-namespace sh
-{
-
int ShaderOutputTypeToGLSLVersion(ShShaderOutput output)
{
switch (output)
@@ -65,22 +62,25 @@ void TVersionGLSL::visitSymbol(TIntermSymbol *node)
}
}
-bool TVersionGLSL::visitDeclaration(Visit, TIntermDeclaration *node)
-{
- const TIntermSequence &sequence = *(node->getSequence());
- if (sequence.front()->getAsTyped()->getType().isInvariant())
- {
- ensureVersionIsAtLeast(GLSL_VERSION_120);
- }
- return true;
-}
-
bool TVersionGLSL::visitAggregate(Visit, TIntermAggregate *node)
{
bool visitChildren = true;
switch (node->getOp())
{
+ case EOpSequence:
+ // We need to visit sequence children to get to global or inner scope.
+ visitChildren = true;
+ break;
+ case EOpDeclaration:
+ {
+ const TIntermSequence &sequence = *(node->getSequence());
+ if (sequence.front()->getAsTyped()->getType().isInvariant())
+ {
+ ensureVersionIsAtLeast(GLSL_VERSION_120);
+ }
+ break;
+ }
case EOpInvariantDeclaration:
ensureVersionIsAtLeast(GLSL_VERSION_120);
break;
@@ -138,4 +138,3 @@ void TVersionGLSL::ensureVersionIsAtLeast(int version)
mVersion = std::max(version, mVersion);
}
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/VersionGLSL.h b/gfx/angle/src/compiler/translator/VersionGLSL.h
index 380349be0..c41069d42 100755
--- a/gfx/angle/src/compiler/translator/VersionGLSL.h
+++ b/gfx/angle/src/compiler/translator/VersionGLSL.h
@@ -11,9 +11,6 @@
#include "compiler/translator/Pragma.h"
-namespace sh
-{
-
static const int GLSL_VERSION_110 = 110;
static const int GLSL_VERSION_120 = 120;
static const int GLSL_VERSION_130 = 130;
@@ -61,7 +58,6 @@ class TVersionGLSL : public TIntermTraverser
void visitSymbol(TIntermSymbol *) override;
bool visitAggregate(Visit, TIntermAggregate *) override;
- bool visitDeclaration(Visit, TIntermDeclaration *node) override;
private:
void ensureVersionIsAtLeast(int version);
@@ -69,6 +65,4 @@ class TVersionGLSL : public TIntermTraverser
int mVersion;
};
-} // namespace sh
-
#endif // COMPILER_TRANSLATOR_VERSIONGLSL_H_
diff --git a/gfx/angle/src/compiler/translator/blocklayout.h b/gfx/angle/src/compiler/translator/blocklayout.h
index 298a72c92..dd5fe0737 100755
--- a/gfx/angle/src/compiler/translator/blocklayout.h
+++ b/gfx/angle/src/compiler/translator/blocklayout.h
@@ -24,7 +24,7 @@ struct Uniform;
struct Varying;
struct InterfaceBlock;
-struct BlockMemberInfo
+struct COMPILER_EXPORT BlockMemberInfo
{
BlockMemberInfo() : offset(-1), arrayStride(-1), matrixStride(-1), isRowMajorMatrix(false) {}
@@ -46,7 +46,7 @@ struct BlockMemberInfo
bool isRowMajorMatrix;
};
-class BlockLayoutEncoder
+class COMPILER_EXPORT BlockLayoutEncoder
{
public:
BlockLayoutEncoder();
@@ -77,7 +77,7 @@ class BlockLayoutEncoder
// Block layout according to the std140 block layout
// See "Standard Uniform Block Layout" in Section 2.11.6 of the OpenGL ES 3.0 specification
-class Std140BlockEncoder : public BlockLayoutEncoder
+class COMPILER_EXPORT Std140BlockEncoder : public BlockLayoutEncoder
{
public:
Std140BlockEncoder();
diff --git a/gfx/angle/src/compiler/translator/blocklayoutHLSL.h b/gfx/angle/src/compiler/translator/blocklayoutHLSL.h
index 8d98847bd..c61cb1ae5 100755
--- a/gfx/angle/src/compiler/translator/blocklayoutHLSL.h
+++ b/gfx/angle/src/compiler/translator/blocklayoutHLSL.h
@@ -24,7 +24,7 @@ namespace sh
// The strategy should be ENCODE_LOOSE for D3D9 constant blocks, and ENCODE_PACKED
// for everything else (D3D10+ constant blocks and all attributes/varyings).
-class HLSLBlockEncoder : public BlockLayoutEncoder
+class COMPILER_EXPORT HLSLBlockEncoder : public BlockLayoutEncoder
{
public:
enum HLSLBlockEncoderStrategy
@@ -54,8 +54,9 @@ class HLSLBlockEncoder : public BlockLayoutEncoder
// This method returns the number of used registers for a ShaderVariable. It is dependent on the HLSLBlockEncoder
// class to count the number of used registers in a struct (which are individually packed according to the same rules).
-unsigned int HLSLVariableRegisterCount(const Varying &variable, bool transposeMatrices);
-unsigned int HLSLVariableRegisterCount(const Uniform &variable, ShShaderOutput outputType);
+COMPILER_EXPORT unsigned int HLSLVariableRegisterCount(const Varying &variable, bool transposeMatrices);
+COMPILER_EXPORT unsigned int HLSLVariableRegisterCount(const Uniform &variable, ShShaderOutput outputType);
+
}
#endif // COMMON_BLOCKLAYOUTHLSL_H_
diff --git a/gfx/angle/src/compiler/translator/depgraph/DependencyGraph.cpp b/gfx/angle/src/compiler/translator/depgraph/DependencyGraph.cpp
new file mode 100644
index 000000000..4dee0dbd2
--- /dev/null
+++ b/gfx/angle/src/compiler/translator/depgraph/DependencyGraph.cpp
@@ -0,0 +1,95 @@
+//
+// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+
+#include "compiler/translator/depgraph/DependencyGraph.h"
+#include "compiler/translator/depgraph/DependencyGraphBuilder.h"
+
+TDependencyGraph::TDependencyGraph(TIntermNode* intermNode)
+{
+ TDependencyGraphBuilder::build(intermNode, this);
+}
+
+TDependencyGraph::~TDependencyGraph()
+{
+ for (TGraphNodeVector::const_iterator iter = mAllNodes.begin(); iter != mAllNodes.end(); ++iter)
+ {
+ TGraphNode* node = *iter;
+ delete node;
+ }
+}
+
+TGraphArgument* TDependencyGraph::createArgument(TIntermAggregate* intermFunctionCall,
+ int argumentNumber)
+{
+ TGraphArgument* argument = new TGraphArgument(intermFunctionCall, argumentNumber);
+ mAllNodes.push_back(argument);
+ return argument;
+}
+
+TGraphFunctionCall* TDependencyGraph::createFunctionCall(TIntermAggregate* intermFunctionCall)
+{
+ TGraphFunctionCall* functionCall = new TGraphFunctionCall(intermFunctionCall);
+ mAllNodes.push_back(functionCall);
+ if (functionCall->getIntermFunctionCall()->isUserDefined())
+ mUserDefinedFunctionCalls.push_back(functionCall);
+ return functionCall;
+}
+
+TGraphSymbol* TDependencyGraph::getOrCreateSymbol(TIntermSymbol* intermSymbol)
+{
+ TSymbolIdMap::const_iterator iter = mSymbolIdMap.find(intermSymbol->getId());
+
+ TGraphSymbol* symbol = NULL;
+
+ if (iter != mSymbolIdMap.end()) {
+ TSymbolIdPair pair = *iter;
+ symbol = pair.second;
+ } else {
+ symbol = new TGraphSymbol(intermSymbol);
+ mAllNodes.push_back(symbol);
+
+ TSymbolIdPair pair(intermSymbol->getId(), symbol);
+ mSymbolIdMap.insert(pair);
+
+ // We save all sampler symbols in a collection, so we can start graph traversals from them quickly.
+ if (IsSampler(intermSymbol->getBasicType()))
+ mSamplerSymbols.push_back(symbol);
+ }
+
+ return symbol;
+}
+
+TGraphSelection* TDependencyGraph::createSelection(TIntermSelection* intermSelection)
+{
+ TGraphSelection* selection = new TGraphSelection(intermSelection);
+ mAllNodes.push_back(selection);
+ return selection;
+}
+
+TGraphLoop* TDependencyGraph::createLoop(TIntermLoop* intermLoop)
+{
+ TGraphLoop* loop = new TGraphLoop(intermLoop);
+ mAllNodes.push_back(loop);
+ return loop;
+}
+
+TGraphLogicalOp* TDependencyGraph::createLogicalOp(TIntermBinary* intermLogicalOp)
+{
+ TGraphLogicalOp* logicalOp = new TGraphLogicalOp(intermLogicalOp);
+ mAllNodes.push_back(logicalOp);
+ return logicalOp;
+}
+
+const char* TGraphLogicalOp::getOpString() const
+{
+ const char* opString = NULL;
+ switch (getIntermLogicalOp()->getOp()) {
+ case EOpLogicalAnd: opString = "and"; break;
+ case EOpLogicalOr: opString = "or"; break;
+ default: opString = "unknown"; break;
+ }
+ return opString;
+}
diff --git a/gfx/angle/src/compiler/translator/depgraph/DependencyGraph.h b/gfx/angle/src/compiler/translator/depgraph/DependencyGraph.h
new file mode 100644
index 000000000..2f7f7b9ab
--- /dev/null
+++ b/gfx/angle/src/compiler/translator/depgraph/DependencyGraph.h
@@ -0,0 +1,199 @@
+//
+// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+
+#ifndef COMPILER_TRANSLATOR_DEPGRAPH_DEPENDENCYGRAPH_H_
+#define COMPILER_TRANSLATOR_DEPGRAPH_DEPENDENCYGRAPH_H_
+
+#include "compiler/translator/IntermNode.h"
+
+#include <set>
+#include <stack>
+
+class TGraphNode;
+class TGraphParentNode;
+class TGraphArgument;
+class TGraphFunctionCall;
+class TGraphSymbol;
+class TGraphSelection;
+class TGraphLoop;
+class TGraphLogicalOp;
+class TDependencyGraphTraverser;
+class TDependencyGraphOutput;
+
+typedef std::set<TGraphNode*> TGraphNodeSet;
+typedef std::vector<TGraphNode*> TGraphNodeVector;
+typedef std::vector<TGraphSymbol*> TGraphSymbolVector;
+typedef std::vector<TGraphFunctionCall*> TFunctionCallVector;
+
+//
+// Base class for all dependency graph nodes.
+//
+class TGraphNode {
+public:
+ TGraphNode(TIntermNode* node) : intermNode(node) {}
+ virtual ~TGraphNode() {}
+ virtual void traverse(TDependencyGraphTraverser* graphTraverser);
+protected:
+ TIntermNode* intermNode;
+};
+
+//
+// Base class for dependency graph nodes that may have children.
+//
+class TGraphParentNode : public TGraphNode {
+public:
+ TGraphParentNode(TIntermNode* node) : TGraphNode(node) {}
+ ~TGraphParentNode() override {}
+ void addDependentNode(TGraphNode* node) { if (node != this) mDependentNodes.insert(node); }
+ void traverse(TDependencyGraphTraverser *graphTraverser) override;
+
+private:
+ TGraphNodeSet mDependentNodes;
+};
+
+//
+// Handle function call arguments.
+//
+class TGraphArgument : public TGraphParentNode {
+public:
+ TGraphArgument(TIntermAggregate* intermFunctionCall, int argumentNumber)
+ : TGraphParentNode(intermFunctionCall)
+ , mArgumentNumber(argumentNumber) {}
+ ~TGraphArgument() override {}
+ const TIntermAggregate* getIntermFunctionCall() const { return intermNode->getAsAggregate(); }
+ int getArgumentNumber() const { return mArgumentNumber; }
+ void traverse(TDependencyGraphTraverser *graphTraverser) override;
+
+private:
+ int mArgumentNumber;
+};
+
+//
+// Handle function calls.
+//
+class TGraphFunctionCall : public TGraphParentNode {
+public:
+ TGraphFunctionCall(TIntermAggregate* intermFunctionCall)
+ : TGraphParentNode(intermFunctionCall) {}
+ ~TGraphFunctionCall() override {}
+ const TIntermAggregate* getIntermFunctionCall() const { return intermNode->getAsAggregate(); }
+ void traverse(TDependencyGraphTraverser *graphTraverser) override;
+};
+
+//
+// Handle symbols.
+//
+class TGraphSymbol : public TGraphParentNode {
+public:
+ TGraphSymbol(TIntermSymbol* intermSymbol) : TGraphParentNode(intermSymbol) {}
+ ~TGraphSymbol() override {}
+ const TIntermSymbol* getIntermSymbol() const { return intermNode->getAsSymbolNode(); }
+ void traverse(TDependencyGraphTraverser *graphTraverser) override;
+};
+
+//
+// Handle if statements and ternary operators.
+//
+class TGraphSelection : public TGraphNode {
+public:
+ TGraphSelection(TIntermSelection* intermSelection) : TGraphNode(intermSelection) {}
+ ~TGraphSelection() override {}
+ const TIntermSelection* getIntermSelection() const { return intermNode->getAsSelectionNode(); }
+ void traverse(TDependencyGraphTraverser *graphTraverser) override;
+};
+
+//
+// Handle for, do-while, and while loops.
+//
+class TGraphLoop : public TGraphNode {
+public:
+ TGraphLoop(TIntermLoop* intermLoop) : TGraphNode(intermLoop) {}
+ ~TGraphLoop() override {}
+ const TIntermLoop* getIntermLoop() const { return intermNode->getAsLoopNode(); }
+ void traverse(TDependencyGraphTraverser *graphTraverser) override;
+};
+
+//
+// Handle logical and, or.
+//
+class TGraphLogicalOp : public TGraphNode {
+public:
+ TGraphLogicalOp(TIntermBinary* intermLogicalOp) : TGraphNode(intermLogicalOp) {}
+ ~TGraphLogicalOp() override {}
+ const TIntermBinary* getIntermLogicalOp() const { return intermNode->getAsBinaryNode(); }
+ const char* getOpString() const;
+ void traverse(TDependencyGraphTraverser *graphTraverser) override;
+};
+
+//
+// A dependency graph of symbols, function calls, conditions etc.
+//
+// This class provides an interface to the entry points of the dependency graph.
+//
+// Dependency graph nodes should be created by using one of the provided "create..." methods.
+// This class (and nobody else) manages the memory of the created nodes.
+// Nodes may not be removed after being added, so all created nodes will exist while the
+// TDependencyGraph instance exists.
+//
+class TDependencyGraph {
+public:
+ TDependencyGraph(TIntermNode* intermNode);
+ ~TDependencyGraph();
+ const TGraphNodeVector &allNodes() const { return mAllNodes; }
+ const TGraphSymbolVector &samplerSymbols() const { return mSamplerSymbols; }
+ const TFunctionCallVector &userDefinedFunctionCalls() const
+ {
+ return mUserDefinedFunctionCalls;
+ }
+
+ TGraphArgument* createArgument(TIntermAggregate* intermFunctionCall, int argumentNumber);
+ TGraphFunctionCall* createFunctionCall(TIntermAggregate* intermFunctionCall);
+ TGraphSymbol* getOrCreateSymbol(TIntermSymbol* intermSymbol);
+ TGraphSelection* createSelection(TIntermSelection* intermSelection);
+ TGraphLoop* createLoop(TIntermLoop* intermLoop);
+ TGraphLogicalOp* createLogicalOp(TIntermBinary* intermLogicalOp);
+private:
+ typedef TMap<int, TGraphSymbol*> TSymbolIdMap;
+ typedef std::pair<int, TGraphSymbol*> TSymbolIdPair;
+
+ TGraphNodeVector mAllNodes;
+ TGraphSymbolVector mSamplerSymbols;
+ TFunctionCallVector mUserDefinedFunctionCalls;
+ TSymbolIdMap mSymbolIdMap;
+};
+
+//
+// For traversing the dependency graph. Users should derive from this,
+// put their traversal specific data in it, and then pass it to a
+// traverse method.
+//
+// When using this, just fill in the methods for nodes you want visited.
+//
+class TDependencyGraphTraverser : angle::NonCopyable {
+public:
+ TDependencyGraphTraverser() : mDepth(0) {}
+ virtual ~TDependencyGraphTraverser() {}
+
+ virtual void visitSymbol(TGraphSymbol* symbol) {};
+ virtual void visitArgument(TGraphArgument* selection) {};
+ virtual void visitFunctionCall(TGraphFunctionCall* functionCall) {};
+ virtual void visitSelection(TGraphSelection* selection) {};
+ virtual void visitLoop(TGraphLoop* loop) {};
+ virtual void visitLogicalOp(TGraphLogicalOp* logicalOp) {};
+
+ int getDepth() const { return mDepth; }
+ void incrementDepth() { ++mDepth; }
+ void decrementDepth() { --mDepth; }
+
+ void clearVisited() { mVisited.clear(); }
+ void markVisited(TGraphNode* node) { mVisited.insert(node); }
+ bool isVisited(TGraphNode* node) const { return mVisited.find(node) != mVisited.end(); }
+private:
+ int mDepth;
+ TGraphNodeSet mVisited;
+};
+
+#endif // COMPILER_TRANSLATOR_DEPGRAPH_DEPENDENCYGRAPH_H_
diff --git a/gfx/angle/src/compiler/translator/depgraph/DependencyGraphBuilder.cpp b/gfx/angle/src/compiler/translator/depgraph/DependencyGraphBuilder.cpp
new file mode 100644
index 000000000..1aeb822d5
--- /dev/null
+++ b/gfx/angle/src/compiler/translator/depgraph/DependencyGraphBuilder.cpp
@@ -0,0 +1,255 @@
+//
+// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+
+#include "compiler/translator/depgraph/DependencyGraphBuilder.h"
+
+void TDependencyGraphBuilder::build(TIntermNode *node, TDependencyGraph *graph)
+{
+ TDependencyGraphBuilder builder(graph);
+ builder.build(node);
+}
+
+bool TDependencyGraphBuilder::visitAggregate(
+ Visit visit, TIntermAggregate *intermAggregate)
+{
+ switch (intermAggregate->getOp())
+ {
+ case EOpFunction:
+ visitFunctionDefinition(intermAggregate);
+ break;
+ case EOpFunctionCall:
+ visitFunctionCall(intermAggregate);
+ break;
+ default:
+ visitAggregateChildren(intermAggregate);
+ break;
+ }
+ return false;
+}
+
+void TDependencyGraphBuilder::visitFunctionDefinition(
+ TIntermAggregate *intermAggregate)
+{
+ // Currently, we do not support user defined functions.
+ if (intermAggregate->getName() != "main(")
+ return;
+
+ visitAggregateChildren(intermAggregate);
+}
+
+// Takes an expression like "f(x)" and creates a dependency graph like
+// "x -> argument 0 -> function call".
+void TDependencyGraphBuilder::visitFunctionCall(
+ TIntermAggregate *intermFunctionCall)
+{
+ TGraphFunctionCall *functionCall =
+ mGraph->createFunctionCall(intermFunctionCall);
+
+ // Run through the function call arguments.
+ int argumentNumber = 0;
+ TIntermSequence *intermArguments = intermFunctionCall->getSequence();
+ for (TIntermSequence::const_iterator iter = intermArguments->begin();
+ iter != intermArguments->end();
+ ++iter, ++argumentNumber)
+ {
+ TNodeSetMaintainer nodeSetMaintainer(this);
+
+ TIntermNode *intermArgument = *iter;
+ intermArgument->traverse(this);
+
+ if (TParentNodeSet *argumentNodes = mNodeSets.getTopSet())
+ {
+ TGraphArgument *argument = mGraph->createArgument(
+ intermFunctionCall, argumentNumber);
+ connectMultipleNodesToSingleNode(argumentNodes, argument);
+ argument->addDependentNode(functionCall);
+ }
+ }
+
+ // Push the leftmost symbol of this function call into the current set of
+ // dependent symbols to represent the result of this function call.
+ // Thus, an expression like "y = f(x)" will yield a dependency graph like
+ // "x -> argument 0 -> function call -> y".
+ // This line essentially passes the function call node back up to an earlier
+ // visitAssignment call, which will create the connection "function call -> y".
+ mNodeSets.insertIntoTopSet(functionCall);
+}
+
+void TDependencyGraphBuilder::visitAggregateChildren(
+ TIntermAggregate *intermAggregate)
+{
+ TIntermSequence *sequence = intermAggregate->getSequence();
+ for (TIntermSequence::const_iterator iter = sequence->begin();
+ iter != sequence->end(); ++iter)
+ {
+ TIntermNode *intermChild = *iter;
+ intermChild->traverse(this);
+ }
+}
+
+void TDependencyGraphBuilder::visitSymbol(TIntermSymbol *intermSymbol)
+{
+ // Push this symbol into the set of dependent symbols for the current
+ // assignment or condition that we are traversing.
+ TGraphSymbol *symbol = mGraph->getOrCreateSymbol(intermSymbol);
+ mNodeSets.insertIntoTopSet(symbol);
+
+ // If this symbol is the current leftmost symbol under an assignment, replace
+ // the previous leftmost symbol with this symbol.
+ if (!mLeftmostSymbols.empty() && mLeftmostSymbols.top() != &mRightSubtree)
+ {
+ mLeftmostSymbols.pop();
+ mLeftmostSymbols.push(symbol);
+ }
+}
+
+bool TDependencyGraphBuilder::visitBinary(Visit visit, TIntermBinary *intermBinary)
+{
+ TOperator op = intermBinary->getOp();
+ if (op == EOpInitialize || intermBinary->isAssignment())
+ visitAssignment(intermBinary);
+ else if (op == EOpLogicalAnd || op == EOpLogicalOr)
+ visitLogicalOp(intermBinary);
+ else
+ visitBinaryChildren(intermBinary);
+
+ return false;
+}
+
+void TDependencyGraphBuilder::visitAssignment(TIntermBinary *intermAssignment)
+{
+ TIntermTyped *intermLeft = intermAssignment->getLeft();
+ if (!intermLeft)
+ return;
+
+ TGraphSymbol *leftmostSymbol = NULL;
+
+ {
+ TNodeSetMaintainer nodeSetMaintainer(this);
+
+ {
+ TLeftmostSymbolMaintainer leftmostSymbolMaintainer(this, mLeftSubtree);
+ intermLeft->traverse(this);
+ leftmostSymbol = mLeftmostSymbols.top();
+
+ // After traversing the left subtree of this assignment, we should
+ // have found a real leftmost symbol, and the leftmost symbol should
+ // not be a placeholder.
+ ASSERT(leftmostSymbol != &mLeftSubtree);
+ ASSERT(leftmostSymbol != &mRightSubtree);
+ }
+
+ if (TIntermTyped *intermRight = intermAssignment->getRight())
+ {
+ TLeftmostSymbolMaintainer leftmostSymbolMaintainer(this, mRightSubtree);
+ intermRight->traverse(this);
+ }
+
+ if (TParentNodeSet *assignmentNodes = mNodeSets.getTopSet())
+ connectMultipleNodesToSingleNode(assignmentNodes, leftmostSymbol);
+ }
+
+ // Push the leftmost symbol of this assignment into the current set of dependent
+ // symbols to represent the result of this assignment.
+ // An expression like "a = (b = c)" will yield a dependency graph like
+ // "c -> b -> a".
+ // This line essentially passes the leftmost symbol of the nested assignment
+ // ("b" in this example) back up to the earlier visitAssignment call for the
+ // outer assignment, which will create the connection "b -> a".
+ mNodeSets.insertIntoTopSet(leftmostSymbol);
+}
+
+void TDependencyGraphBuilder::visitLogicalOp(TIntermBinary *intermLogicalOp)
+{
+ if (TIntermTyped *intermLeft = intermLogicalOp->getLeft())
+ {
+ TNodeSetPropagatingMaintainer nodeSetMaintainer(this);
+
+ intermLeft->traverse(this);
+ if (TParentNodeSet *leftNodes = mNodeSets.getTopSet())
+ {
+ TGraphLogicalOp *logicalOp = mGraph->createLogicalOp(intermLogicalOp);
+ connectMultipleNodesToSingleNode(leftNodes, logicalOp);
+ }
+ }
+
+ if (TIntermTyped *intermRight = intermLogicalOp->getRight())
+ {
+ TLeftmostSymbolMaintainer leftmostSymbolMaintainer(this, mRightSubtree);
+ intermRight->traverse(this);
+ }
+}
+
+void TDependencyGraphBuilder::visitBinaryChildren(TIntermBinary *intermBinary)
+{
+ if (TIntermTyped *intermLeft = intermBinary->getLeft())
+ intermLeft->traverse(this);
+
+ if (TIntermTyped *intermRight = intermBinary->getRight())
+ {
+ TLeftmostSymbolMaintainer leftmostSymbolMaintainer(this, mRightSubtree);
+ intermRight->traverse(this);
+ }
+}
+
+bool TDependencyGraphBuilder::visitSelection(
+ Visit visit, TIntermSelection *intermSelection)
+{
+ if (TIntermNode *intermCondition = intermSelection->getCondition())
+ {
+ TNodeSetMaintainer nodeSetMaintainer(this);
+
+ intermCondition->traverse(this);
+ if (TParentNodeSet *conditionNodes = mNodeSets.getTopSet())
+ {
+ TGraphSelection *selection = mGraph->createSelection(intermSelection);
+ connectMultipleNodesToSingleNode(conditionNodes, selection);
+ }
+ }
+
+ if (TIntermNode *intermTrueBlock = intermSelection->getTrueBlock())
+ intermTrueBlock->traverse(this);
+
+ if (TIntermNode *intermFalseBlock = intermSelection->getFalseBlock())
+ intermFalseBlock->traverse(this);
+
+ return false;
+}
+
+bool TDependencyGraphBuilder::visitLoop(Visit visit, TIntermLoop *intermLoop)
+{
+ if (TIntermTyped *intermCondition = intermLoop->getCondition())
+ {
+ TNodeSetMaintainer nodeSetMaintainer(this);
+
+ intermCondition->traverse(this);
+ if (TParentNodeSet *conditionNodes = mNodeSets.getTopSet())
+ {
+ TGraphLoop *loop = mGraph->createLoop(intermLoop);
+ connectMultipleNodesToSingleNode(conditionNodes, loop);
+ }
+ }
+
+ if (TIntermNode* intermBody = intermLoop->getBody())
+ intermBody->traverse(this);
+
+ if (TIntermTyped *intermExpression = intermLoop->getExpression())
+ intermExpression->traverse(this);
+
+ return false;
+}
+
+
+void TDependencyGraphBuilder::connectMultipleNodesToSingleNode(
+ TParentNodeSet *nodes, TGraphNode *node) const
+{
+ for (TParentNodeSet::const_iterator iter = nodes->begin();
+ iter != nodes->end(); ++iter)
+ {
+ TGraphParentNode *currentNode = *iter;
+ currentNode->addDependentNode(node);
+ }
+}
diff --git a/gfx/angle/src/compiler/translator/depgraph/DependencyGraphBuilder.h b/gfx/angle/src/compiler/translator/depgraph/DependencyGraphBuilder.h
new file mode 100644
index 000000000..c7b54f66b
--- /dev/null
+++ b/gfx/angle/src/compiler/translator/depgraph/DependencyGraphBuilder.h
@@ -0,0 +1,199 @@
+//
+// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+
+#ifndef COMPILER_TRANSLATOR_DEPGRAPH_DEPENDENCYGRAPHBUILDER_H_
+#define COMPILER_TRANSLATOR_DEPGRAPH_DEPENDENCYGRAPHBUILDER_H_
+
+#include "compiler/translator/depgraph/DependencyGraph.h"
+
+//
+// Creates a dependency graph of symbols, function calls, conditions etc. by
+// traversing a intermediate tree.
+//
+class TDependencyGraphBuilder : public TIntermTraverser
+{
+ public:
+ static void build(TIntermNode *node, TDependencyGraph *graph);
+
+ void visitSymbol(TIntermSymbol *) override;
+ bool visitBinary(Visit visit, TIntermBinary *) override;
+ bool visitSelection(Visit visit, TIntermSelection *) override;
+ bool visitAggregate(Visit visit, TIntermAggregate *) override;
+ bool visitLoop(Visit visit, TIntermLoop *) override;
+
+ private:
+ typedef std::stack<TGraphSymbol *> TSymbolStack;
+ typedef std::set<TGraphParentNode *> TParentNodeSet;
+
+ //
+ // For collecting the dependent nodes of assignments, conditions, etc.
+ // while traversing the intermediate tree.
+ //
+ // This data structure is stack of sets. Each set contains dependency graph
+ // parent nodes.
+ //
+ class TNodeSetStack
+ {
+ public:
+ TNodeSetStack() {};
+ ~TNodeSetStack() { clear(); }
+
+ // This should only be called after a pushSet.
+ // Returns NULL if the top set is empty.
+ TParentNodeSet *getTopSet() const
+ {
+ ASSERT(!mNodeSets.empty());
+ TParentNodeSet *topSet = mNodeSets.top();
+ return !topSet->empty() ? topSet : NULL;
+ }
+
+ void pushSet() { mNodeSets.push(new TParentNodeSet()); }
+ void popSet()
+ {
+ ASSERT(!mNodeSets.empty());
+ delete mNodeSets.top();
+ mNodeSets.pop();
+ }
+
+ // Pops the top set and adds its contents to the new top set.
+ // This should only be called after a pushSet.
+ // If there is no set below the top set, the top set is just deleted.
+ void popSetIntoNext()
+ {
+ ASSERT(!mNodeSets.empty());
+ TParentNodeSet *oldTopSet = mNodeSets.top();
+ mNodeSets.pop();
+
+ if (!mNodeSets.empty())
+ {
+ TParentNodeSet *newTopSet = mNodeSets.top();
+ newTopSet->insert(oldTopSet->begin(), oldTopSet->end());
+ }
+
+ delete oldTopSet;
+ }
+
+ // Does nothing if there is no top set.
+ // This can be called when there is no top set if we are visiting
+ // symbols that are not under an assignment or condition.
+ // We don't need to track those symbols.
+ void insertIntoTopSet(TGraphParentNode *node)
+ {
+ if (mNodeSets.empty())
+ return;
+
+ mNodeSets.top()->insert(node);
+ }
+
+ void clear()
+ {
+ while (!mNodeSets.empty())
+ popSet();
+ }
+
+ private:
+ typedef std::stack<TParentNodeSet *> TParentNodeSetStack;
+
+ TParentNodeSetStack mNodeSets;
+ };
+
+ //
+ // An instance of this class pushes a new node set when instantiated.
+ // When the instance goes out of scope, it and pops the node set.
+ //
+ class TNodeSetMaintainer : angle::NonCopyable
+ {
+ public:
+ TNodeSetMaintainer(TDependencyGraphBuilder *factory)
+ : mSets(factory->mNodeSets)
+ {
+ mSets.pushSet();
+ }
+ ~TNodeSetMaintainer() { mSets.popSet(); }
+ protected:
+ TNodeSetStack &mSets;
+ };
+
+ //
+ // An instance of this class pushes a new node set when instantiated.
+ // When the instance goes out of scope, it and pops the top node set and adds
+ // its contents to the new top node set.
+ //
+ class TNodeSetPropagatingMaintainer : angle::NonCopyable
+ {
+ public:
+ TNodeSetPropagatingMaintainer(TDependencyGraphBuilder *factory)
+ : mSets(factory->mNodeSets)
+ {
+ mSets.pushSet();
+ }
+ ~TNodeSetPropagatingMaintainer() { mSets.popSetIntoNext(); }
+ protected:
+ TNodeSetStack &mSets;
+ };
+
+ //
+ // An instance of this class keeps track of the leftmost symbol while we're
+ // exploring an assignment.
+ // It will push the placeholder symbol kLeftSubtree when instantiated under a
+ // left subtree, and kRightSubtree under a right subtree.
+ // When it goes out of scope, it will pop the leftmost symbol at the top of the
+ // scope.
+ // During traversal, the TDependencyGraphBuilder will replace kLeftSubtree with
+ // a real symbol.
+ // kRightSubtree will never be replaced by a real symbol because we are tracking
+ // the leftmost symbol.
+ //
+ class TLeftmostSymbolMaintainer : angle::NonCopyable
+ {
+ public:
+ TLeftmostSymbolMaintainer(
+ TDependencyGraphBuilder *factory, TGraphSymbol &subtree)
+ : mLeftmostSymbols(factory->mLeftmostSymbols)
+ {
+ mNeedsPlaceholderSymbol =
+ mLeftmostSymbols.empty() || mLeftmostSymbols.top() != &subtree;
+ if (mNeedsPlaceholderSymbol)
+ mLeftmostSymbols.push(&subtree);
+ }
+
+ ~TLeftmostSymbolMaintainer()
+ {
+ if (mNeedsPlaceholderSymbol)
+ mLeftmostSymbols.pop();
+ }
+
+ protected:
+ TSymbolStack& mLeftmostSymbols;
+ bool mNeedsPlaceholderSymbol;
+ };
+
+ TDependencyGraphBuilder(TDependencyGraph *graph)
+ : TIntermTraverser(true, false, false),
+ mLeftSubtree(NULL),
+ mRightSubtree(NULL),
+ mGraph(graph) {}
+ void build(TIntermNode *intermNode) { intermNode->traverse(this); }
+
+ void connectMultipleNodesToSingleNode(
+ TParentNodeSet *nodes, TGraphNode *node) const;
+
+ void visitAssignment(TIntermBinary *);
+ void visitLogicalOp(TIntermBinary *);
+ void visitBinaryChildren(TIntermBinary *);
+ void visitFunctionDefinition(TIntermAggregate *);
+ void visitFunctionCall(TIntermAggregate *intermFunctionCall);
+ void visitAggregateChildren(TIntermAggregate *);
+
+ TGraphSymbol mLeftSubtree;
+ TGraphSymbol mRightSubtree;
+
+ TDependencyGraph *mGraph;
+ TNodeSetStack mNodeSets;
+ TSymbolStack mLeftmostSymbols;
+};
+
+#endif // COMPILER_TRANSLATOR_DEPGRAPH_DEPENDENCYGRAPHBUILDER_H_
diff --git a/gfx/angle/src/compiler/translator/depgraph/DependencyGraphOutput.cpp b/gfx/angle/src/compiler/translator/depgraph/DependencyGraphOutput.cpp
new file mode 100644
index 000000000..32a2f3014
--- /dev/null
+++ b/gfx/angle/src/compiler/translator/depgraph/DependencyGraphOutput.cpp
@@ -0,0 +1,64 @@
+//
+// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+
+#include "compiler/translator/depgraph/DependencyGraphOutput.h"
+
+void TDependencyGraphOutput::outputIndentation()
+{
+ for (int i = 0; i < getDepth(); ++i)
+ mSink << " ";
+}
+
+void TDependencyGraphOutput::visitArgument(TGraphArgument* parameter)
+{
+ outputIndentation();
+ mSink << "argument " << parameter->getArgumentNumber() << " of call to "
+ << parameter->getIntermFunctionCall()->getName() << "\n";
+}
+
+void TDependencyGraphOutput::visitFunctionCall(TGraphFunctionCall* functionCall)
+{
+ outputIndentation();
+ mSink << "function call " << functionCall->getIntermFunctionCall()->getName() << "\n";
+}
+
+void TDependencyGraphOutput::visitSymbol(TGraphSymbol* symbol)
+{
+ outputIndentation();
+ mSink << symbol->getIntermSymbol()->getSymbol() << " (symbol id: "
+ << symbol->getIntermSymbol()->getId() << ")\n";
+}
+
+void TDependencyGraphOutput::visitSelection(TGraphSelection* selection)
+{
+ outputIndentation();
+ mSink << "selection\n";
+}
+
+void TDependencyGraphOutput::visitLoop(TGraphLoop* loop)
+{
+ outputIndentation();
+ mSink << "loop condition\n";
+}
+
+void TDependencyGraphOutput::visitLogicalOp(TGraphLogicalOp* logicalOp)
+{
+ outputIndentation();
+ mSink << "logical " << logicalOp->getOpString() << "\n";
+}
+
+void TDependencyGraphOutput::outputAllSpanningTrees(TDependencyGraph& graph)
+{
+ mSink << "\n";
+
+ for (auto symbol : graph.allNodes())
+ {
+ mSink << "--- Dependency graph spanning tree ---\n";
+ clearVisited();
+ symbol->traverse(this);
+ mSink << "\n";
+ }
+}
diff --git a/gfx/angle/src/compiler/translator/depgraph/DependencyGraphOutput.h b/gfx/angle/src/compiler/translator/depgraph/DependencyGraphOutput.h
new file mode 100644
index 000000000..b201e0a67
--- /dev/null
+++ b/gfx/angle/src/compiler/translator/depgraph/DependencyGraphOutput.h
@@ -0,0 +1,31 @@
+//
+// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+
+#ifndef COMPILER_TRANSLATOR_DEPGRAPH_DEPENDENCYGRAPHOUTPUT_H_
+#define COMPILER_TRANSLATOR_DEPGRAPH_DEPENDENCYGRAPHOUTPUT_H_
+
+#include "compiler/translator/depgraph/DependencyGraph.h"
+#include "compiler/translator/InfoSink.h"
+
+class TDependencyGraphOutput : public TDependencyGraphTraverser
+{
+ public:
+ TDependencyGraphOutput(TInfoSinkBase& sink) : mSink(sink) {}
+ void visitSymbol(TGraphSymbol* symbol) override;
+ void visitArgument(TGraphArgument* parameter) override;
+ void visitFunctionCall(TGraphFunctionCall* functionCall) override;
+ void visitSelection(TGraphSelection* selection) override;
+ void visitLoop(TGraphLoop* loop) override;
+ void visitLogicalOp(TGraphLogicalOp* logicalOp) override;
+
+ void outputAllSpanningTrees(TDependencyGraph& graph);
+ private:
+ void outputIndentation();
+
+ TInfoSinkBase& mSink;
+};
+
+#endif // COMPILER_TRANSLATOR_DEPGRAPH_DEPENDENCYGRAPHOUTPUT_H_
diff --git a/gfx/angle/src/compiler/translator/depgraph/DependencyGraphTraverse.cpp b/gfx/angle/src/compiler/translator/depgraph/DependencyGraphTraverse.cpp
new file mode 100644
index 000000000..197fde97e
--- /dev/null
+++ b/gfx/angle/src/compiler/translator/depgraph/DependencyGraphTraverse.cpp
@@ -0,0 +1,69 @@
+//
+// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+
+#include "compiler/translator/depgraph/DependencyGraph.h"
+
+// These methods do a breadth-first traversal through the graph and mark visited nodes.
+
+void TGraphNode::traverse(TDependencyGraphTraverser* graphTraverser)
+{
+ graphTraverser->markVisited(this);
+}
+
+void TGraphParentNode::traverse(TDependencyGraphTraverser* graphTraverser)
+{
+ TGraphNode::traverse(graphTraverser);
+
+ graphTraverser->incrementDepth();
+
+ // Visit the parent node's children.
+ for (TGraphNodeSet::const_iterator iter = mDependentNodes.begin();
+ iter != mDependentNodes.end();
+ ++iter)
+ {
+ TGraphNode* node = *iter;
+ if (!graphTraverser->isVisited(node))
+ node->traverse(graphTraverser);
+ }
+
+ graphTraverser->decrementDepth();
+}
+
+void TGraphArgument::traverse(TDependencyGraphTraverser* graphTraverser)
+{
+ graphTraverser->visitArgument(this);
+ TGraphParentNode::traverse(graphTraverser);
+}
+
+void TGraphFunctionCall::traverse(TDependencyGraphTraverser* graphTraverser)
+{
+ graphTraverser->visitFunctionCall(this);
+ TGraphParentNode::traverse(graphTraverser);
+}
+
+void TGraphSymbol::traverse(TDependencyGraphTraverser* graphTraverser)
+{
+ graphTraverser->visitSymbol(this);
+ TGraphParentNode::traverse(graphTraverser);
+}
+
+void TGraphSelection::traverse(TDependencyGraphTraverser* graphTraverser)
+{
+ graphTraverser->visitSelection(this);
+ TGraphNode::traverse(graphTraverser);
+}
+
+void TGraphLoop::traverse(TDependencyGraphTraverser* graphTraverser)
+{
+ graphTraverser->visitLoop(this);
+ TGraphNode::traverse(graphTraverser);
+}
+
+void TGraphLogicalOp::traverse(TDependencyGraphTraverser* graphTraverser)
+{
+ graphTraverser->visitLogicalOp(this);
+ TGraphNode::traverse(graphTraverser);
+}
diff --git a/gfx/angle/src/compiler/translator/glslang.h b/gfx/angle/src/compiler/translator/glslang.h
index aaa5dd119..0555e96d4 100755
--- a/gfx/angle/src/compiler/translator/glslang.h
+++ b/gfx/angle/src/compiler/translator/glslang.h
@@ -7,18 +7,14 @@
#ifndef COMPILER_TRANSLATOR_GLSLANG_H_
#define COMPILER_TRANSLATOR_GLSLANG_H_
-namespace sh
-{
class TParseContext;
-}
-
-extern int glslang_initialize(sh::TParseContext *context);
-extern int glslang_finalize(sh::TParseContext *context);
+extern int glslang_initialize(TParseContext* context);
+extern int glslang_finalize(TParseContext* context);
extern int glslang_scan(size_t count,
- const char *const string[],
+ const char* const string[],
const int length[],
- sh::TParseContext *context);
-extern int glslang_parse(sh::TParseContext *context);
+ TParseContext* context);
+extern int glslang_parse(TParseContext* context);
#endif // COMPILER_TRANSLATOR_GLSLANG_H_
diff --git a/gfx/angle/src/compiler/translator/glslang.l b/gfx/angle/src/compiler/translator/glslang.l
index a30f2c33e..7fe289302 100755
--- a/gfx/angle/src/compiler/translator/glslang.l
+++ b/gfx/angle/src/compiler/translator/glslang.l
@@ -22,8 +22,6 @@ WHICH GENERATES THE GLSL ES LEXER (glslang_lex.cpp).
// This file is auto-generated by generate_parser.sh. DO NOT EDIT!
-/* clang-format off */
-
// Ignore errors in auto-generated code.
#if defined(__GNUC__)
#pragma GCC diagnostic ignored "-Wunused-function"
@@ -46,9 +44,6 @@ WHICH GENERATES THE GLSL ES LEXER (glslang_lex.cpp).
#include "compiler/preprocessor/Token.h"
#include "compiler/translator/util.h"
#include "compiler/translator/length_limits.h"
-
-using namespace sh;
-
#include "glslang_tab.h"
/* windows only pragma */
@@ -76,8 +71,6 @@ static int reserved_word(yyscan_t yyscanner);
static int ES2_reserved_ES3_keyword(TParseContext *context, int token);
static int ES2_keyword_ES3_reserved(TParseContext *context, int token);
static int ES2_ident_ES3_keyword(TParseContext *context, int token);
-static int ES2_ident_ES3_reserved_ES3_1_keyword(TParseContext *context, int token);
-static int ES2_and_ES3_reserved_ES3_1_keyword(TParseContext *context, int token);
static int uint_constant(TParseContext *context);
static int int_constant(TParseContext *context);
static int float_constant(yyscan_t yyscanner);
@@ -194,25 +187,11 @@ O [0-7]
"layout" { return ES2_ident_ES3_keyword(context, LAYOUT); }
-"image2D" { return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGE2D); }
-"iimage2D" { return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGE2D); }
-"uimage2D" { return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGE2D); }
-"image2DArray" { return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGE2DARRAY); }
-"iimage2DArray" { return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGE2DARRAY); }
-"uimage2DArray" { return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGE2DARRAY); }
-"image3D" { return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGE3D); }
-"uimage3D" { return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGE3D); }
-"iimage3D" { return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGE3D); }
-"iimageCube" { return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGECUBE); }
-"uimageCube" { return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGECUBE); }
-"imageCube" { return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGECUBE); }
-"readonly" { return ES2_ident_ES3_reserved_ES3_1_keyword(context, READONLY); }
-"writeonly" { return ES2_ident_ES3_reserved_ES3_1_keyword(context, WRITEONLY); }
-"coherent" { return ES2_ident_ES3_reserved_ES3_1_keyword(context, COHERENT); }
-"restrict" { return ES2_ident_ES3_reserved_ES3_1_keyword(context, RESTRICT); }
-"volatile" { return ES2_and_ES3_reserved_ES3_1_keyword(context, VOLATILE); }
-
/* Reserved keywords for GLSL ES 3.00 that are not reserved for GLSL ES 1.00 */
+"coherent" |
+"restrict" |
+"readonly" |
+"writeonly" |
"resource" |
"atomic_uint" |
"noperspective" |
@@ -225,11 +204,23 @@ O [0-7]
"filter" |
"image1D" |
+"image2D" |
+"image3D" |
+"imageCube" |
"iimage1D" |
+"iimage2D" |
+"iimage3D" |
+"iimageCube" |
"uimage1D" |
+"uimage2D" |
+"uimage3D" |
+"uimageCube" |
"image1DArray" |
+"image2DArray" |
"iimage1DArray" |
+"iimage2DArray" |
"uimage1DArray" |
+"uimage2DArray" |
"image1DShadow" |
"image2DShadow" |
"image1DArrayShadow" |
@@ -287,6 +278,7 @@ O [0-7]
"inline" |
"noinline" |
+"volatile" |
"public" |
"static" |
"extern" |
@@ -471,24 +463,6 @@ int ES2_keyword_ES3_reserved(TParseContext *context, int token)
return token;
}
-int ES2_ident_ES3_reserved_ES3_1_keyword(TParseContext *context, int token)
-{
- struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner();
- yyscan_t yyscanner = (yyscan_t) context->getScanner();
-
- if (context->getShaderVersion() < 300)
- {
- yylval->lex.string = NewPoolTString(yytext);
- return check_type(yyscanner);
- }
- else if (context->getShaderVersion() == 300)
- {
- return reserved_word(yyscanner);
- }
-
- return token;
-}
-
int ES2_ident_ES3_keyword(TParseContext *context, int token)
{
struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner();
@@ -504,18 +478,6 @@ int ES2_ident_ES3_keyword(TParseContext *context, int token)
return token;
}
-int ES2_and_ES3_reserved_ES3_1_keyword(TParseContext *context, int token)
-{
- yyscan_t yyscanner = (yyscan_t) context->getScanner();
-
- if (context->getShaderVersion() < 310)
- {
- return reserved_word(yyscanner);
- }
-
- return token;
-}
-
int uint_constant(TParseContext *context)
{
struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner();
@@ -617,7 +579,8 @@ int glslang_scan(size_t count, const char* const string[], const int length[],
if (context->getFragmentPrecisionHigh())
preprocessor->predefineMacro("GL_FRAGMENT_PRECISION_HIGH", 1);
- preprocessor->setMaxTokenSize(sh::GetGlobalMaxTokenSize(context->getShaderSpec()));
+ preprocessor->setMaxTokenSize(GetGlobalMaxTokenSize(context->getShaderSpec()));
return 0;
}
+
diff --git a/gfx/angle/src/compiler/translator/glslang.y b/gfx/angle/src/compiler/translator/glslang.y
index c15dd9d6e..8604d8eb6 100755
--- a/gfx/angle/src/compiler/translator/glslang.y
+++ b/gfx/angle/src/compiler/translator/glslang.y
@@ -46,8 +46,6 @@ WHICH GENERATES THE GLSL ES PARSER (glslang_tab.cpp AND glslang_tab.h).
#define YYENABLE_NLS 0
-using namespace sh;
-
%}
%expect 1 /* One shift reduce conflict because of if | else */
%parse-param {TParseContext* context}
@@ -74,27 +72,22 @@ using namespace sh;
struct {
TOperator op;
union {
- TIntermNode *intermNode;
+ TIntermNode* intermNode;
TIntermNodePair nodePair;
- TIntermTyped *intermTypedNode;
- TIntermAggregate *intermAggregate;
- TIntermBlock *intermBlock;
- TIntermDeclaration *intermDeclaration;
- TIntermSwitch *intermSwitch;
- TIntermCase *intermCase;
+ TIntermTyped* intermTypedNode;
+ TIntermAggregate* intermAggregate;
+ TIntermSwitch* intermSwitch;
+ TIntermCase* intermCase;
};
union {
- TTypeSpecifierNonArray typeSpecifierNonArray;
TPublicType type;
TPrecision precision;
TLayoutQualifier layoutQualifier;
TQualifier qualifier;
- TFunction *function;
+ TFunction* function;
TParameter param;
- TField *field;
- TFieldList *fieldList;
- TQualifierWrapperBase *qualifierWrapper;
- TTypeQualifierBuilder *typeQualifierBuilder;
+ TField* field;
+ TFieldList* fieldList;
};
} interm;
}
@@ -169,14 +162,11 @@ extern void yyerror(YYLTYPE* yylloc, TParseContext* context, void *scanner, cons
%token <lex> MATRIX2 MATRIX3 MATRIX4 IN_QUAL OUT_QUAL INOUT_QUAL UNIFORM VARYING
%token <lex> MATRIX2x3 MATRIX3x2 MATRIX2x4 MATRIX4x2 MATRIX3x4 MATRIX4x3
%token <lex> CENTROID FLAT SMOOTH
-%token <lex> READONLY WRITEONLY COHERENT RESTRICT VOLATILE
%token <lex> STRUCT VOID_TYPE WHILE
%token <lex> SAMPLER2D SAMPLERCUBE SAMPLER_EXTERNAL_OES SAMPLER2DRECT SAMPLER2DARRAY
%token <lex> ISAMPLER2D ISAMPLER3D ISAMPLERCUBE ISAMPLER2DARRAY
%token <lex> USAMPLER2D USAMPLER3D USAMPLERCUBE USAMPLER2DARRAY
%token <lex> SAMPLER3D SAMPLER3DRECT SAMPLER2DSHADOW SAMPLERCUBESHADOW SAMPLER2DARRAYSHADOW
-%token <lex> IMAGE2D IIMAGE2D UIMAGE2D IMAGE3D IIMAGE3D UIMAGE3D IMAGE2DARRAY IIMAGE2DARRAY UIMAGE2DARRAY
-%token <lex> IMAGECUBE IIMAGECUBE UIMAGECUBE
%token <lex> LAYOUT
%token <lex> IDENTIFIER TYPE_NAME FLOATCONSTANT INTCONSTANT UINTCONSTANT BOOLCONSTANT
@@ -202,9 +192,9 @@ extern void yyerror(YYLTYPE* yylloc, TParseContext* context, void *scanner, cons
%type <interm.intermTypedNode> shift_expression and_expression exclusive_or_expression inclusive_or_expression
%type <interm.intermTypedNode> function_call initializer condition conditionopt
-%type <interm.intermBlock> translation_unit
-%type <interm.intermNode> function_definition statement simple_statement
-%type <interm.intermBlock> statement_list compound_statement compound_statement_no_new_scope
+%type <interm.intermNode> translation_unit function_definition
+%type <interm.intermNode> statement simple_statement
+%type <interm.intermAggregate> statement_list compound_statement compound_statement_no_new_scope
%type <interm.intermNode> declaration_statement selection_statement expression_statement
%type <interm.intermNode> declaration external_declaration
%type <interm.intermNode> for_init_statement
@@ -215,18 +205,13 @@ extern void yyerror(YYLTYPE* yylloc, TParseContext* context, void *scanner, cons
%type <interm> single_declaration init_declarator_list
%type <interm> parameter_declaration parameter_declarator parameter_type_specifier
-%type <interm.layoutQualifier> layout_qualifier_id_list layout_qualifier_id
-
-%type <interm.type> fully_specified_type type_specifier
+%type <interm.qualifier> parameter_qualifier parameter_type_qualifier
+%type <interm.layoutQualifier> layout_qualifier layout_qualifier_id_list layout_qualifier_id
%type <interm.precision> precision_qualifier
-%type <interm.layoutQualifier> layout_qualifier
-%type <interm.qualifier> interpolation_qualifier
-%type <interm.qualifierWrapper> storage_qualifier single_type_qualifier invariant_qualifier
-%type <interm.typeQualifierBuilder> type_qualifier
-
-%type <interm.typeSpecifierNonArray> type_specifier_nonarray struct_specifier
-%type <interm.type> type_specifier_no_prec
+%type <interm.type> type_qualifier fully_specified_type type_specifier storage_qualifier interpolation_qualifier
+%type <interm.type> type_specifier_no_prec type_specifier_nonarray
+%type <interm.type> struct_specifier
%type <interm.field> struct_declarator
%type <interm.fieldList> struct_declarator_list struct_declaration struct_declaration_list
%type <interm.function> function_header function_declarator function_identifier
@@ -358,7 +343,7 @@ function_call_header_with_parameters
const TType *type = new TType($2->getType());
$1->addParameter(TConstParameter(type));
$$.function = $1;
- $$.nodePair.node1 = TIntermediate::MakeAggregate($2, @2);
+ $$.nodePair.node1 = context->intermediate.makeAggregate($2, @2);
}
| function_call_header_with_parameters COMMA assignment_expression {
const TType *type = new TType($3->getType());
@@ -609,43 +594,41 @@ declaration
$$ = context->addFunctionPrototypeDeclaration(*($1.function), @1);
}
| init_declarator_list SEMICOLON {
- $$ = $1.intermDeclaration;
+ TIntermAggregate *aggNode = $1.intermAggregate;
+ if (aggNode && aggNode->getOp() == EOpNull)
+ aggNode->setOp(EOpDeclaration);
+ $$ = aggNode;
}
| PRECISION precision_qualifier type_specifier_no_prec SEMICOLON {
if (($2 == EbpHigh) && (context->getShaderType() == GL_FRAGMENT_SHADER) && !context->getFragmentPrecisionHigh()) {
context->error(@1, "precision is not supported in fragment shader", "highp");
}
if (!context->symbolTable.setDefaultPrecision( $3, $2 )) {
- context->error(@1, "illegal type argument for default precision qualifier", getBasicString($3.getBasicType()));
+ context->error(@1, "illegal type argument for default precision qualifier", getBasicString($3.type));
}
$$ = 0;
}
| type_qualifier enter_struct struct_declaration_list RIGHT_BRACE SEMICOLON {
- ES3_OR_NEWER($2.string->c_str(), @1, "interface blocks");
- $$ = context->addInterfaceBlock(*$1, @2, *$2.string, $3, NULL, @$, NULL, @$);
+ ES3_OR_NEWER(getQualifierString($1.qualifier), @1, "interface blocks");
+ $$ = context->addInterfaceBlock($1, @2, *$2.string, $3, NULL, @$, NULL, @$);
}
| type_qualifier enter_struct struct_declaration_list RIGHT_BRACE IDENTIFIER SEMICOLON {
- ES3_OR_NEWER($2.string->c_str(), @1, "interface blocks");
- $$ = context->addInterfaceBlock(*$1, @2, *$2.string, $3, $5.string, @5, NULL, @$);
+ ES3_OR_NEWER(getQualifierString($1.qualifier), @1, "interface blocks");
+ $$ = context->addInterfaceBlock($1, @2, *$2.string, $3, $5.string, @5, NULL, @$);
}
| type_qualifier enter_struct struct_declaration_list RIGHT_BRACE IDENTIFIER LEFT_BRACKET constant_expression RIGHT_BRACKET SEMICOLON {
- ES3_OR_NEWER($2.string->c_str(), @1, "interface blocks");
- $$ = context->addInterfaceBlock(*$1, @2, *$2.string, $3, $5.string, @5, $7, @6);
+ ES3_OR_NEWER(getQualifierString($1.qualifier), @1, "interface blocks");
+ $$ = context->addInterfaceBlock($1, @2, *$2.string, $3, $5.string, @5, $7, @6);
}
| type_qualifier SEMICOLON {
- context->parseGlobalLayoutQualifier(*$1);
+ context->parseGlobalLayoutQualifier($1);
$$ = 0;
}
- | type_qualifier IDENTIFIER SEMICOLON // e.g. to qualify an existing variable as invariant
- {
- $$ = context->parseInvariantDeclaration(*$1, @2, $2.string, $2.symbol);
- }
;
function_prototype
: function_declarator RIGHT_PAREN {
$$.function = context->parseFunctionDeclarator(@2, $1);
- context->exitFunctionDeclaration();
}
;
@@ -692,14 +675,13 @@ function_header
$$ = context->parseFunctionHeader($1, $2.string, @2);
context->symbolTable.push();
- context->enterFunctionDeclaration();
}
;
parameter_declarator
// Type + name
: type_specifier identifier {
- if ($1.getBasicType() == EbtVoid) {
+ if ($1.type == EbtVoid) {
context->error(@2, "illegal use of type 'void'", $2.string->c_str());
}
context->checkIsNotReserved(@2, *$2.string);
@@ -731,21 +713,41 @@ parameter_declaration
//
// Type + name
//
- : type_qualifier parameter_declarator {
+ : parameter_type_qualifier parameter_qualifier parameter_declarator {
+ $$ = $3;
+ context->checkIsParameterQualifierValid(@3, $1, $2, $$.param.type);
+ }
+ | parameter_qualifier parameter_declarator {
$$ = $2;
- context->checkIsParameterQualifierValid(@2, *$1, $2.param.type);
+ context->checkOutParameterIsNotSampler(@2, $1, *$2.param.type);
+ context->checkIsParameterQualifierValid(@2, EvqTemporary, $1, $$.param.type);
}
- | parameter_declarator {
- $$ = $1;
- $$.param.type->setQualifier(EvqIn);
+ //
+ // Only type
+ //
+ | parameter_type_qualifier parameter_qualifier parameter_type_specifier {
+ $$ = $3;
+ context->checkIsParameterQualifierValid(@3, $1, $2, $$.param.type);
}
- | type_qualifier parameter_type_specifier {
+ | parameter_qualifier parameter_type_specifier {
$$ = $2;
- context->checkIsParameterQualifierValid(@2, *$1, $2.param.type);
+ context->checkOutParameterIsNotSampler(@2, $1, *$2.param.type);
+ context->checkIsParameterQualifierValid(@2, EvqTemporary, $1, $$.param.type);
}
- | parameter_type_specifier {
- $$ = $1;
- $$.param.type->setQualifier(EvqIn);
+ ;
+
+parameter_qualifier
+ : /* empty */ {
+ $$ = EvqIn;
+ }
+ | IN_QUAL {
+ $$ = EvqIn;
+ }
+ | OUT_QUAL {
+ $$ = EvqOut;
+ }
+ | INOUT_QUAL {
+ $$ = EvqInOut;
}
;
@@ -762,209 +764,209 @@ init_declarator_list
}
| init_declarator_list COMMA identifier {
$$ = $1;
- context->parseDeclarator($$.type, @3, *$3.string, $$.intermDeclaration);
+ $$.intermAggregate = context->parseDeclarator($$.type, $1.intermAggregate, @3, *$3.string);
}
| init_declarator_list COMMA identifier LEFT_BRACKET constant_expression RIGHT_BRACKET {
$$ = $1;
- context->parseArrayDeclarator($$.type, @3, *$3.string, @4, $5, $$.intermDeclaration);
+ $$.intermAggregate = context->parseArrayDeclarator($$.type, $1.intermAggregate, @3, *$3.string, @4, $5);
}
| init_declarator_list COMMA identifier LEFT_BRACKET RIGHT_BRACKET EQUAL initializer {
ES3_OR_NEWER("[]", @3, "implicitly sized array");
$$ = $1;
- context->parseArrayInitDeclarator($$.type, @3, *$3.string, @4, nullptr, @6, $7, $$.intermDeclaration);
+ $$.intermAggregate = context->parseArrayInitDeclarator($$.type, $1.intermAggregate, @3, *$3.string, @4, nullptr, @6, $7);
}
| init_declarator_list COMMA identifier LEFT_BRACKET constant_expression RIGHT_BRACKET EQUAL initializer {
ES3_OR_NEWER("=", @7, "first-class arrays (array initializer)");
$$ = $1;
- context->parseArrayInitDeclarator($$.type, @3, *$3.string, @4, $5, @7, $8, $$.intermDeclaration);
+ $$.intermAggregate = context->parseArrayInitDeclarator($$.type, $1.intermAggregate, @3, *$3.string, @4, $5, @7, $8);
}
| init_declarator_list COMMA identifier EQUAL initializer {
$$ = $1;
- context->parseInitDeclarator($$.type, @3, *$3.string, @4, $5, $$.intermDeclaration);
+ $$.intermAggregate = context->parseInitDeclarator($$.type, $1.intermAggregate, @3, *$3.string, @4, $5);
}
;
single_declaration
: fully_specified_type {
$$.type = $1;
- $$.intermDeclaration = context->parseSingleDeclaration($$.type, @1, "");
+ $$.intermAggregate = context->parseSingleDeclaration($$.type, @1, "");
}
| fully_specified_type identifier {
$$.type = $1;
- $$.intermDeclaration = context->parseSingleDeclaration($$.type, @2, *$2.string);
+ $$.intermAggregate = context->parseSingleDeclaration($$.type, @2, *$2.string);
}
| fully_specified_type identifier LEFT_BRACKET constant_expression RIGHT_BRACKET {
$$.type = $1;
- $$.intermDeclaration = context->parseSingleArrayDeclaration($$.type, @2, *$2.string, @3, $4);
+ $$.intermAggregate = context->parseSingleArrayDeclaration($$.type, @2, *$2.string, @3, $4);
}
| fully_specified_type identifier LEFT_BRACKET RIGHT_BRACKET EQUAL initializer {
ES3_OR_NEWER("[]", @3, "implicitly sized array");
$$.type = $1;
- $$.intermDeclaration = context->parseSingleArrayInitDeclaration($$.type, @2, *$2.string, @3, nullptr, @5, $6);
+ $$.intermAggregate = context->parseSingleArrayInitDeclaration($$.type, @2, *$2.string, @3, nullptr, @5, $6);
}
| fully_specified_type identifier LEFT_BRACKET constant_expression RIGHT_BRACKET EQUAL initializer {
ES3_OR_NEWER("=", @6, "first-class arrays (array initializer)");
$$.type = $1;
- $$.intermDeclaration = context->parseSingleArrayInitDeclaration($$.type, @2, *$2.string, @3, $4, @6, $7);
+ $$.intermAggregate = context->parseSingleArrayInitDeclaration($$.type, @2, *$2.string, @3, $4, @6, $7);
}
| fully_specified_type identifier EQUAL initializer {
$$.type = $1;
- $$.intermDeclaration = context->parseSingleInitDeclaration($$.type, @2, *$2.string, @3, $4);
+ $$.intermAggregate = context->parseSingleInitDeclaration($$.type, @2, *$2.string, @3, $4);
+ }
+ | INVARIANT IDENTIFIER {
+ // $$.type is not used in invariant declarations.
+ $$.intermAggregate = context->parseInvariantDeclaration(@1, @2, $2.string, $2.symbol);
}
;
fully_specified_type
: type_specifier {
- context->addFullySpecifiedType(&$1);
$$ = $1;
+
+ if ($1.array) {
+ ES3_OR_NEWER("[]", @1, "first-class-array");
+ if (context->getShaderVersion() != 300) {
+ $1.clearArrayness();
+ }
+ }
}
- | type_qualifier type_specifier {
- $$ = context->addFullySpecifiedType(*$1, $2);
+ | type_qualifier type_specifier {
+ $$ = context->addFullySpecifiedType($1.qualifier, $1.invariant, $1.layoutQualifier, $2);
}
;
interpolation_qualifier
: SMOOTH {
- $$ = EvqSmooth;
+ $$.qualifier = EvqSmooth;
}
| FLAT {
- $$ = EvqFlat;
+ $$.qualifier = EvqFlat;
}
;
-type_qualifier
- : single_type_qualifier {
- $$ = context->createTypeQualifierBuilder(@1);
- $$->appendQualifier($1);
- }
- | type_qualifier single_type_qualifier {
- $$ = $1;
- $$->appendQualifier($2);
- }
- ;
-
-invariant_qualifier
- : INVARIANT {
- // empty
+parameter_type_qualifier
+ : CONST_QUAL {
+ $$ = EvqConst;
}
;
-single_type_qualifier
- : storage_qualifier {
- context->checkLocalVariableConstStorageQualifier(*$1);
- $$ = $1;
- }
- | layout_qualifier {
- context->checkIsAtGlobalLevel(@1, "layout");
- $$ = new TLayoutQualifierWrapper($1, @1);
- }
- | precision_qualifier {
- $$ = new TPrecisionQualifierWrapper($1, @1);
- }
- | interpolation_qualifier {
- $$ = new TInterpolationQualifierWrapper($1, @1);
- }
- | invariant_qualifier {
- context->checkIsAtGlobalLevel(@1, "invariant");
- $$ = new TInvariantQualifierWrapper(@1);
- }
- ;
-
-
-storage_qualifier
- :
- ATTRIBUTE {
+type_qualifier
+ : ATTRIBUTE {
VERTEX_ONLY("attribute", @1);
ES2_ONLY("attribute", @1);
context->checkIsAtGlobalLevel(@1, "attribute");
- $$ = new TStorageQualifierWrapper(EvqAttribute, @1);
+ $$.setBasic(EbtVoid, EvqAttribute, @1);
}
| VARYING {
ES2_ONLY("varying", @1);
context->checkIsAtGlobalLevel(@1, "varying");
if (context->getShaderType() == GL_VERTEX_SHADER)
- $$ = new TStorageQualifierWrapper(EvqVaryingOut, @1);
+ $$.setBasic(EbtVoid, EvqVaryingOut, @1);
else
- $$ = new TStorageQualifierWrapper(EvqVaryingIn, @1);
+ $$.setBasic(EbtVoid, EvqVaryingIn, @1);
}
- | CONST_QUAL {
- $$ = new TStorageQualifierWrapper(EvqConst, @1);
+ | INVARIANT VARYING {
+ ES2_ONLY("varying", @1);
+ context->checkIsAtGlobalLevel(@1, "invariant varying");
+ if (context->getShaderType() == GL_VERTEX_SHADER)
+ $$.setBasic(EbtVoid, EvqVaryingOut, @1);
+ else
+ $$.setBasic(EbtVoid, EvqVaryingIn, @1);
+ $$.invariant = true;
}
- | IN_QUAL {
- if (context->declaringFunction())
+ | storage_qualifier {
+ if ($1.qualifier != EvqConst && !context->symbolTable.atGlobalLevel())
{
- $$ = new TStorageQualifierWrapper(EvqIn, @1);
+ context->error(@1, "Local variables can only use the const storage qualifier.", getQualifierString($1.qualifier));
}
- else if (context->getShaderType() == GL_FRAGMENT_SHADER)
+ $$.setBasic(EbtVoid, $1.qualifier, @1);
+ }
+ | interpolation_qualifier storage_qualifier {
+ $$ = context->joinInterpolationQualifiers(@1, $1.qualifier, @2, $2.qualifier);
+ }
+ | interpolation_qualifier {
+ context->error(@1, "interpolation qualifier requires a fragment 'in' or vertex 'out' storage qualifier", getInterpolationString($1.qualifier));
+
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.setBasic(EbtVoid, qual, @1);
+ }
+ | layout_qualifier {
+ $$.qualifier = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.layoutQualifier = $1;
+ }
+ | layout_qualifier storage_qualifier {
+ $$.setBasic(EbtVoid, $2.qualifier, @2);
+ $$.layoutQualifier = $1;
+ }
+ | INVARIANT storage_qualifier {
+ context->checkInvariantIsOutVariableES3($2.qualifier, @1);
+ $$.setBasic(EbtVoid, $2.qualifier, @2);
+ $$.invariant = true;
+ }
+ | INVARIANT interpolation_qualifier storage_qualifier {
+ context->checkInvariantIsOutVariableES3($3.qualifier, @1);
+ $$ = context->joinInterpolationQualifiers(@2, $2.qualifier, @3, $3.qualifier);
+ $$.invariant = true;
+ }
+ ;
+
+storage_qualifier
+ : CONST_QUAL {
+ $$.qualifier = EvqConst;
+ }
+ | IN_QUAL {
+ if (context->getShaderType() == GL_FRAGMENT_SHADER)
{
ES3_OR_NEWER("in", @1, "storage qualifier");
- $$ = new TStorageQualifierWrapper(EvqFragmentIn, @1);
+ $$.qualifier = EvqFragmentIn;
}
else if (context->getShaderType() == GL_VERTEX_SHADER)
{
ES3_OR_NEWER("in", @1, "storage qualifier");
- $$ = new TStorageQualifierWrapper(EvqVertexIn, @1);
+ $$.qualifier = EvqVertexIn;
}
else
{
- $$ = new TStorageQualifierWrapper(EvqComputeIn, @1);
+ $$.qualifier = EvqComputeIn;
}
}
| OUT_QUAL {
- if (context->declaringFunction())
- {
- $$ = new TStorageQualifierWrapper(EvqOut, @1);
- }
- else
- {
- ES3_OR_NEWER("out", @1, "storage qualifier");
- NON_COMPUTE_ONLY("out", @1);
- if (context->getShaderType() == GL_FRAGMENT_SHADER)
- {
- $$ = new TStorageQualifierWrapper(EvqFragmentOut, @1);
- }
- else
- {
- $$ = new TStorageQualifierWrapper(EvqVertexOut, @1);
- }
- }
+ ES3_OR_NEWER("out", @1, "storage qualifier");
+ NON_COMPUTE_ONLY("out", @1);
+ $$.qualifier = (context->getShaderType() == GL_FRAGMENT_SHADER) ? EvqFragmentOut : EvqVertexOut;
}
- | INOUT_QUAL {
- if (!context->declaringFunction())
- {
- context->error(@1, "invalid inout qualifier", "'inout' can be only used with function parameters");
- }
- $$ = new TStorageQualifierWrapper(EvqInOut, @1);
+ | CENTROID IN_QUAL {
+ ES3_OR_NEWER("centroid in", @1, "storage qualifier");
+ FRAG_ONLY("centroid in", @1);
+ $$.qualifier = EvqCentroidIn;
}
- | CENTROID {
- ES3_OR_NEWER("centroid", @1, "storage qualifier");
- $$ = new TStorageQualifierWrapper(EvqCentroid, @1);
+ | CENTROID OUT_QUAL {
+ ES3_OR_NEWER("centroid out", @1, "storage qualifier");
+ VERTEX_ONLY("centroid out", @1);
+ $$.qualifier = EvqCentroidOut;
}
| UNIFORM {
context->checkIsAtGlobalLevel(@1, "uniform");
- $$ = new TStorageQualifierWrapper(EvqUniform, @1);
- }
- | READONLY {
- $$ = new TMemoryQualifierWrapper(EvqReadOnly, @1);
- }
- | WRITEONLY {
- $$ = new TMemoryQualifierWrapper(EvqWriteOnly, @1);
- }
- | COHERENT {
- $$ = new TMemoryQualifierWrapper(EvqCoherent, @1);
- }
- | RESTRICT {
- $$ = new TMemoryQualifierWrapper(EvqRestrict, @1);
- }
- | VOLATILE {
- $$ = new TMemoryQualifierWrapper(EvqVolatile, @1);
+ $$.qualifier = EvqUniform;
}
;
type_specifier
: type_specifier_no_prec {
$$ = $1;
- $$.precision = context->symbolTable.getDefaultPrecision($1.getBasicType());
+
+ if ($$.precision == EbpUndefined) {
+ $$.precision = context->symbolTable.getDefaultPrecision($1.type);
+ context->checkPrecisionSpecified(@1, $$.precision, $1.type);
+ }
+ }
+ | precision_qualifier type_specifier_no_prec {
+ $$ = $2;
+ $$.precision = $1;
+
+ if (!SupportsPrecision($2.type)) {
+ context->error(@1, "illegal type for precision qualifier", getBasicString($2.type));
+ }
}
;
@@ -1010,16 +1012,17 @@ layout_qualifier_id
type_specifier_no_prec
: type_specifier_nonarray {
- $$.initialize($1, (context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary));
+ $$ = $1;
}
| type_specifier_nonarray LEFT_BRACKET RIGHT_BRACKET {
ES3_OR_NEWER("[]", @2, "implicitly sized array");
- $$.initialize($1, (context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary));
+ $$ = $1;
$$.setArraySize(0);
}
| type_specifier_nonarray LEFT_BRACKET constant_expression RIGHT_BRACKET {
- $$.initialize($1, (context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary));
- if (context->checkIsValidTypeForArray(@2, $$))
+ $$ = $1;
+
+ if (context->checkIsValidTypeForArray(@2, $1))
{
unsigned int size = context->checkIsValidArraySize(@2, $3);
$$.setArraySize(size);
@@ -1029,200 +1032,208 @@ type_specifier_no_prec
type_specifier_nonarray
: VOID_TYPE {
- $$.initialize(EbtVoid, @1);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.setBasic(EbtVoid, qual, @1);
}
| FLOAT_TYPE {
- $$.initialize(EbtFloat, @1);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.setBasic(EbtFloat, qual, @1);
}
| INT_TYPE {
- $$.initialize(EbtInt, @1);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.setBasic(EbtInt, qual, @1);
}
| UINT_TYPE {
- $$.initialize(EbtUInt, @1);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.setBasic(EbtUInt, qual, @1);
}
| BOOL_TYPE {
- $$.initialize(EbtBool, @1);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.setBasic(EbtBool, qual, @1);
}
| VEC2 {
- $$.initialize(EbtFloat, @1);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.setBasic(EbtFloat, qual, @1);
$$.setAggregate(2);
}
| VEC3 {
- $$.initialize(EbtFloat, @1);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.setBasic(EbtFloat, qual, @1);
$$.setAggregate(3);
}
| VEC4 {
- $$.initialize(EbtFloat, @1);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.setBasic(EbtFloat, qual, @1);
$$.setAggregate(4);
}
| BVEC2 {
- $$.initialize(EbtBool, @1);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.setBasic(EbtBool, qual, @1);
$$.setAggregate(2);
}
| BVEC3 {
- $$.initialize(EbtBool, @1);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.setBasic(EbtBool, qual, @1);
$$.setAggregate(3);
}
| BVEC4 {
- $$.initialize(EbtBool, @1);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.setBasic(EbtBool, qual, @1);
$$.setAggregate(4);
}
| IVEC2 {
- $$.initialize(EbtInt, @1);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.setBasic(EbtInt, qual, @1);
$$.setAggregate(2);
}
| IVEC3 {
- $$.initialize(EbtInt, @1);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.setBasic(EbtInt, qual, @1);
$$.setAggregate(3);
}
| IVEC4 {
- $$.initialize(EbtInt, @1);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.setBasic(EbtInt, qual, @1);
$$.setAggregate(4);
}
| UVEC2 {
- $$.initialize(EbtUInt, @1);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.setBasic(EbtUInt, qual, @1);
$$.setAggregate(2);
}
| UVEC3 {
- $$.initialize(EbtUInt, @1);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.setBasic(EbtUInt, qual, @1);
$$.setAggregate(3);
}
| UVEC4 {
- $$.initialize(EbtUInt, @1);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.setBasic(EbtUInt, qual, @1);
$$.setAggregate(4);
}
| MATRIX2 {
- $$.initialize(EbtFloat, @1);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.setBasic(EbtFloat, qual, @1);
$$.setMatrix(2, 2);
}
| MATRIX3 {
- $$.initialize(EbtFloat, @1);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.setBasic(EbtFloat, qual, @1);
$$.setMatrix(3, 3);
}
| MATRIX4 {
- $$.initialize(EbtFloat, @1);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.setBasic(EbtFloat, qual, @1);
$$.setMatrix(4, 4);
}
| MATRIX2x3 {
- $$.initialize(EbtFloat, @1);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.setBasic(EbtFloat, qual, @1);
$$.setMatrix(2, 3);
}
| MATRIX3x2 {
- $$.initialize(EbtFloat, @1);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.setBasic(EbtFloat, qual, @1);
$$.setMatrix(3, 2);
}
| MATRIX2x4 {
- $$.initialize(EbtFloat, @1);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.setBasic(EbtFloat, qual, @1);
$$.setMatrix(2, 4);
}
| MATRIX4x2 {
- $$.initialize(EbtFloat, @1);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.setBasic(EbtFloat, qual, @1);
$$.setMatrix(4, 2);
}
| MATRIX3x4 {
- $$.initialize(EbtFloat, @1);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.setBasic(EbtFloat, qual, @1);
$$.setMatrix(3, 4);
}
| MATRIX4x3 {
- $$.initialize(EbtFloat, @1);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.setBasic(EbtFloat, qual, @1);
$$.setMatrix(4, 3);
}
| SAMPLER2D {
- $$.initialize(EbtSampler2D, @1);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.setBasic(EbtSampler2D, qual, @1);
}
| SAMPLER3D {
- $$.initialize(EbtSampler3D, @1);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.setBasic(EbtSampler3D, qual, @1);
}
| SAMPLERCUBE {
- $$.initialize(EbtSamplerCube, @1);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.setBasic(EbtSamplerCube, qual, @1);
}
| SAMPLER2DARRAY {
- $$.initialize(EbtSampler2DArray, @1);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.setBasic(EbtSampler2DArray, qual, @1);
}
| ISAMPLER2D {
- $$.initialize(EbtISampler2D, @1);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.setBasic(EbtISampler2D, qual, @1);
}
| ISAMPLER3D {
- $$.initialize(EbtISampler3D, @1);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.setBasic(EbtISampler3D, qual, @1);
}
| ISAMPLERCUBE {
- $$.initialize(EbtISamplerCube, @1);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.setBasic(EbtISamplerCube, qual, @1);
}
| ISAMPLER2DARRAY {
- $$.initialize(EbtISampler2DArray, @1);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.setBasic(EbtISampler2DArray, qual, @1);
}
| USAMPLER2D {
- $$.initialize(EbtUSampler2D, @1);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.setBasic(EbtUSampler2D, qual, @1);
}
| USAMPLER3D {
- $$.initialize(EbtUSampler3D, @1);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.setBasic(EbtUSampler3D, qual, @1);
}
| USAMPLERCUBE {
- $$.initialize(EbtUSamplerCube, @1);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.setBasic(EbtUSamplerCube, qual, @1);
}
| USAMPLER2DARRAY {
- $$.initialize(EbtUSampler2DArray, @1);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.setBasic(EbtUSampler2DArray, qual, @1);
}
| SAMPLER2DSHADOW {
- $$.initialize(EbtSampler2DShadow, @1);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.setBasic(EbtSampler2DShadow, qual, @1);
}
| SAMPLERCUBESHADOW {
- $$.initialize(EbtSamplerCubeShadow, @1);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.setBasic(EbtSamplerCubeShadow, qual, @1);
}
| SAMPLER2DARRAYSHADOW {
- $$.initialize(EbtSampler2DArrayShadow, @1);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.setBasic(EbtSampler2DArrayShadow, qual, @1);
}
| SAMPLER_EXTERNAL_OES {
if (!context->supportsExtension("GL_OES_EGL_image_external") &&
!context->supportsExtension("GL_NV_EGL_stream_consumer_external")) {
context->error(@1, "unsupported type", "samplerExternalOES");
}
- $$.initialize(EbtSamplerExternalOES, @1);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.setBasic(EbtSamplerExternalOES, qual, @1);
}
| SAMPLER2DRECT {
if (!context->supportsExtension("GL_ARB_texture_rectangle")) {
context->error(@1, "unsupported type", "sampler2DRect");
}
- $$.initialize(EbtSampler2DRect, @1);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.setBasic(EbtSampler2DRect, qual, @1);
}
| struct_specifier {
$$ = $1;
- }
- | IMAGE2D {
- $$.initialize(EbtImage2D, @1);
- }
- | IIMAGE2D {
- $$.initialize(EbtIImage2D, @1);
- }
- | UIMAGE2D {
- $$.initialize(EbtUImage2D, @1);
- }
- | IMAGE3D {
- $$.initialize(EbtImage3D, @1);
- }
- | IIMAGE3D {
- $$.initialize(EbtIImage3D, @1);
- }
- | UIMAGE3D {
- $$.initialize(EbtUImage3D, @1);
- }
- | IMAGE2DARRAY {
- $$.initialize(EbtImage2DArray, @1);
- }
- | IIMAGE2DARRAY {
- $$.initialize(EbtIImage2DArray, @1);
- }
- | UIMAGE2DARRAY {
- $$.initialize(EbtUImage2DArray, @1);
- }
- | IMAGECUBE {
- $$.initialize(EbtImageCube, @1);
- }
- | IIMAGECUBE {
- $$.initialize(EbtIImageCube, @1);
- }
- | UIMAGECUBE {
- $$.initialize(EbtUImageCube, @1);
+ $$.qualifier = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
}
| TYPE_NAME {
//
@@ -1230,7 +1241,8 @@ type_specifier_nonarray
// type.
//
TType& structure = static_cast<TVariable*>($1.symbol)->getType();
- $$.initialize(EbtStruct, @1);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ $$.setBasic(EbtStruct, qual, @1);
$$.userDef = &structure;
}
;
@@ -1268,7 +1280,9 @@ struct_declaration
}
| type_qualifier type_specifier struct_declarator_list SEMICOLON {
// ES3 Only, but errors should be handled elsewhere
- $$ = context->addStructDeclaratorListWithQualifiers(*$1, &$2, $3);
+ $2.qualifier = $1.qualifier;
+ $2.layoutQualifier = $1.layoutQualifier;
+ $$ = context->addStructDeclaratorList($2, $3);
}
;
@@ -1329,6 +1343,7 @@ compound_statement
: LEFT_BRACE RIGHT_BRACE { $$ = 0; }
| LEFT_BRACE { context->symbolTable.push(); } statement_list { context->symbolTable.pop(); } RIGHT_BRACE {
if ($3 != 0) {
+ $3->setOp(EOpSequence);
$3->setLine(@$);
}
$$ = $3;
@@ -1352,6 +1367,7 @@ compound_statement_no_new_scope
}
| LEFT_BRACE statement_list RIGHT_BRACE {
if ($2) {
+ $2->setOp(EOpSequence);
$2->setLine(@$);
}
$$ = $2;
@@ -1360,13 +1376,10 @@ compound_statement_no_new_scope
statement_list
: statement {
- $$ = new TIntermBlock();
- $$->setLine(@$);
- $$->appendStatement($1);
+ $$ = context->intermediate.makeAggregate($1, @$);
}
| statement_list statement {
- $$ = $1;
- $$->appendStatement($2);
+ $$ = context->intermediate.growAggregate($1, $2, @$);
}
;
@@ -1378,7 +1391,7 @@ expression_statement
selection_statement
: IF LEFT_PAREN expression RIGHT_PAREN selection_rest_statement {
context->checkIsScalarBool(@1, $3);
- $$ = context->intermediate.addIfElse($3, $5, @1);
+ $$ = context->intermediate.addSelection($3, $5, @1);
}
;
@@ -1416,10 +1429,10 @@ condition
context->checkIsScalarBool($1->getLine(), $1);
}
| fully_specified_type identifier EQUAL initializer {
- TIntermBinary *initNode = nullptr;
+ TIntermNode *intermNode;
context->checkIsScalarBool(@2, $1);
- if (!context->executeInitializer(@2, *$2.string, $1, $4, &initNode))
+ if (!context->executeInitializer(@2, *$2.string, $1, $4, &intermNode))
$$ = $4;
else {
$$ = 0;
@@ -1498,13 +1511,12 @@ jump_statement
translation_unit
: external_declaration {
- $$ = new TIntermBlock();
- $$->setLine(@$);
- $$->appendStatement($1);
+ $$ = $1;
context->setTreeRoot($$);
}
| translation_unit external_declaration {
- $$->appendStatement($2);
+ $$ = context->intermediate.growAggregate($1, $2, @$);
+ context->setTreeRoot($$);
}
;
@@ -1519,7 +1531,7 @@ external_declaration
function_definition
: function_prototype {
- context->parseFunctionDefinitionHeader(@1, &($1.function), &$1.intermAggregate);
+ context->parseFunctionPrototype(@1, $1.function, &$1.intermAggregate);
}
compound_statement_no_new_scope {
$$ = context->addFunctionDefinition(*($1.function), $1.intermAggregate, $3, @1);
diff --git a/gfx/angle/src/compiler/translator/glslang_lex.cpp b/gfx/angle/src/compiler/translator/glslang_lex.cpp
index 2dcc1bc0f..8ad7b1464 100755
--- a/gfx/angle/src/compiler/translator/glslang_lex.cpp
+++ b/gfx/angle/src/compiler/translator/glslang_lex.cpp
@@ -1,3 +1,4 @@
+#line 17 "./glslang.l"
//
// Copyright (c) 2012-2013 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
@@ -6,8 +7,6 @@
// This file is auto-generated by generate_parser.sh. DO NOT EDIT!
-/* clang-format off */
-
// Ignore errors in auto-generated code.
#if defined(__GNUC__)
#pragma GCC diagnostic ignored "-Wunused-function"
@@ -25,7 +24,7 @@
-#line 30 "./glslang_lex.cpp"
+#line 28 "./glslang_lex.cpp"
#define YY_INT_ALIGNED short int
@@ -221,7 +220,7 @@ typedef size_t yy_size_t;
#define YY_LESS_LINENO(n) \
do { \
yy_size_t yyl;\
- for ( yyl = n; yyl < static_cast<yy_site_t>(yyleng); ++yyl )\
+ for ( yyl = n; yyl < yyleng; ++yyl )\
if ( yytext[yyl] == '\n' )\
--yylineno;\
}while(0)
@@ -396,7 +395,7 @@ static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
*/
#define YY_DO_BEFORE_ACTION \
yyg->yytext_ptr = yy_bp; \
- yyleng = (size_t) (yy_cp - yy_bp); \
+ yyleng = (yy_size_t) (yy_cp - yy_bp); \
yyg->yy_hold_char = *yy_cp; \
*yy_cp = '\0'; \
yyg->yy_c_buf_p = yy_cp;
@@ -429,7 +428,7 @@ static yyconst flex_int16_t yy_accept[820] =
177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
177, 199, 203, 235, 0, 189, 185, 0, 188, 182,
- 0, 184, 178, 195, 196, 177, 137, 177, 177, 177,
+ 0, 184, 178, 195, 196, 177, 136, 177, 177, 177,
177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
13, 177, 177, 177, 177, 177, 177, 177, 177, 177,
@@ -441,67 +440,67 @@ static yyconst flex_int16_t yy_accept[820] =
177, 177, 177, 177, 177, 177, 177, 177, 0, 186,
0, 185, 187, 181, 177, 177, 177, 30, 177, 177,
18, 174, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 16, 140, 177, 177, 177, 177, 21, 177,
- 177, 144, 155, 177, 177, 177, 177, 177, 177, 177,
+ 177, 177, 16, 139, 177, 177, 177, 177, 21, 177,
+ 177, 143, 155, 177, 177, 177, 177, 177, 177, 177,
177, 177, 177, 177, 177, 152, 4, 35, 36, 37,
177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 143, 31, 177, 177, 28, 177,
+ 177, 177, 177, 177, 142, 31, 177, 177, 28, 177,
177, 177, 177, 177, 177, 177, 47, 48, 49, 29,
177, 177, 177, 177, 177, 177, 10, 53, 54, 55,
- 177, 138, 177, 177, 7, 177, 177, 177, 177, 164,
+ 177, 137, 177, 177, 7, 177, 177, 177, 177, 164,
165, 166, 177, 32, 177, 156, 26, 167, 168, 169,
2, 161, 162, 163, 177, 177, 177, 25, 159, 177,
177, 177, 50, 51, 52, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 99, 177, 177, 177,
+ 177, 177, 177, 177, 177, 177, 86, 177, 177, 177,
177, 177, 177, 177, 153, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 139, 177, 177, 176,
- 56, 57, 58, 177, 177, 14, 177, 104, 177, 177,
- 177, 177, 102, 177, 177, 177, 154, 149, 105, 177,
- 177, 177, 177, 177, 177, 145, 177, 177, 177, 78,
+ 177, 177, 177, 177, 177, 177, 138, 177, 177, 176,
+ 56, 57, 58, 177, 177, 14, 177, 91, 177, 177,
+ 177, 177, 89, 177, 177, 177, 154, 149, 92, 177,
+ 177, 177, 177, 177, 177, 144, 177, 177, 177, 78,
38, 41, 43, 42, 39, 45, 44, 46, 40, 177,
- 177, 177, 177, 160, 136, 177, 177, 147, 177, 177,
- 177, 34, 100, 173, 22, 148, 77, 177, 158, 17,
+ 177, 177, 177, 160, 135, 177, 177, 147, 177, 177,
+ 177, 34, 87, 173, 22, 148, 77, 177, 158, 17,
177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
177, 177, 177, 177, 19, 33, 177, 177, 177, 177,
- 177, 177, 106, 79, 85, 177, 177, 177, 177, 177,
+ 177, 177, 93, 94, 95, 177, 177, 177, 177, 177,
3, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 141, 177, 177, 177, 177, 177, 8, 177,
- 177, 9, 177, 177, 177, 177, 20, 93, 11, 150,
- 107, 80, 87, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 146, 177, 177, 177, 91,
- 96, 94, 177, 177, 177, 177, 177, 177, 177, 142,
- 108, 81, 86, 177, 177, 157, 177, 95, 177, 177,
+ 177, 177, 140, 177, 177, 177, 177, 177, 8, 177,
+ 177, 9, 177, 177, 177, 177, 20, 79, 11, 150,
+ 97, 98, 99, 177, 177, 177, 177, 177, 177, 177,
+ 177, 177, 177, 177, 177, 145, 177, 177, 177, 81,
+ 83, 80, 177, 177, 177, 177, 177, 177, 177, 141,
+ 101, 102, 103, 177, 177, 157, 177, 146, 177, 177,
6, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 90, 151, 1, 177, 177, 177, 177, 177, 175, 177,
+ 96, 151, 1, 177, 177, 177, 177, 177, 175, 177,
- 103, 5, 170, 59, 62, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 177, 92, 177,
- 177, 177, 177, 88, 177, 177, 177, 177, 177, 121,
+ 90, 5, 170, 59, 62, 177, 177, 177, 177, 177,
+ 177, 177, 177, 177, 177, 177, 177, 177, 82, 177,
+ 177, 177, 177, 100, 177, 177, 177, 177, 177, 120,
66, 67, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 101, 177, 177, 177, 89,
- 123, 70, 71, 177, 177, 97, 177, 177, 177, 177,
- 177, 177, 177, 116, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 130, 177, 177, 177, 177, 60,
+ 177, 177, 177, 177, 177, 88, 177, 177, 177, 104,
+ 122, 70, 71, 177, 177, 84, 177, 177, 177, 177,
+ 177, 177, 177, 115, 177, 177, 177, 177, 177, 177,
+ 177, 177, 177, 177, 129, 177, 177, 177, 177, 60,
177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 117, 109, 177, 82, 177, 177, 177, 131,
+ 177, 177, 116, 105, 177, 106, 177, 177, 177, 130,
177, 177, 68, 177, 177, 177, 177, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 118, 177, 177, 132,
- 177, 177, 72, 110, 83, 177, 112, 177, 113, 177,
- 177, 177, 177, 177, 98, 177, 177, 177, 177, 64,
- 177, 63, 127, 177, 177, 111, 84, 177, 177, 177,
- 177, 177, 177, 177, 177, 177, 177, 125, 128, 119,
+ 177, 177, 177, 177, 177, 177, 117, 177, 177, 131,
+ 177, 177, 72, 107, 108, 177, 111, 177, 112, 177,
+ 177, 177, 177, 177, 85, 177, 177, 177, 177, 64,
+ 177, 63, 126, 177, 177, 109, 110, 177, 177, 177,
+ 177, 177, 177, 177, 177, 177, 177, 124, 127, 118,
177, 65, 177, 177, 177, 177, 177, 177, 177, 177,
- 126, 129, 177, 177, 122, 69, 177, 177, 171, 177,
- 177, 177, 74, 177, 177, 124, 73, 177, 177, 177,
- 177, 177, 177, 133, 177, 177, 177, 177, 177, 177,
+ 125, 128, 177, 177, 121, 69, 177, 177, 171, 177,
+ 177, 177, 74, 177, 177, 123, 73, 177, 177, 177,
+ 177, 177, 177, 132, 177, 177, 177, 177, 177, 177,
- 134, 177, 177, 177, 75, 177, 135, 114, 115, 177,
- 177, 177, 61, 177, 177, 172, 120, 76, 0
+ 133, 177, 177, 177, 75, 177, 134, 113, 114, 177,
+ 177, 177, 61, 177, 177, 172, 119, 76, 0
} ;
static yyconst flex_int32_t yy_ec[256] =
@@ -1028,9 +1027,6 @@ WHICH GENERATES THE GLSL ES LEXER (glslang_lex.cpp).
#include "compiler/preprocessor/Token.h"
#include "compiler/translator/util.h"
#include "compiler/translator/length_limits.h"
-
-using namespace sh;
-
#include "glslang_tab.h"
/* windows only pragma */
@@ -1058,8 +1054,6 @@ static int reserved_word(yyscan_t yyscanner);
static int ES2_reserved_ES3_keyword(TParseContext *context, int token);
static int ES2_keyword_ES3_reserved(TParseContext *context, int token);
static int ES2_ident_ES3_keyword(TParseContext *context, int token);
-static int ES2_ident_ES3_reserved_ES3_1_keyword(TParseContext *context, int token);
-static int ES2_and_ES3_reserved_ES3_1_keyword(TParseContext *context, int token);
static int uint_constant(TParseContext *context);
static int int_constant(TParseContext *context);
static int float_constant(yyscan_t yyscanner);
@@ -1374,7 +1368,7 @@ yy_find_action:
if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] )
{
yy_size_t yyl;
- for ( yyl = 0; yyl < static_cast<yy_size_t>(yyleng); ++yyl )
+ for ( yyl = 0; yyl < yyleng; ++yyl )
if ( yytext[yyl] == '\n' )
do{ yylineno++;
@@ -1706,75 +1700,24 @@ case 78:
YY_RULE_SETUP
{ return ES2_ident_ES3_keyword(context, LAYOUT); }
YY_BREAK
+/* Reserved keywords for GLSL ES 3.00 that are not reserved for GLSL ES 1.00 */
case 79:
-YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGE2D); }
- YY_BREAK
case 80:
-YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGE2D); }
- YY_BREAK
case 81:
-YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGE2D); }
- YY_BREAK
case 82:
-YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGE2DARRAY); }
- YY_BREAK
case 83:
-YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGE2DARRAY); }
- YY_BREAK
case 84:
-YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGE2DARRAY); }
- YY_BREAK
case 85:
-YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGE3D); }
- YY_BREAK
case 86:
-YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGE3D); }
- YY_BREAK
case 87:
-YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGE3D); }
- YY_BREAK
case 88:
-YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGECUBE); }
- YY_BREAK
case 89:
-YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGECUBE); }
- YY_BREAK
case 90:
-YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGECUBE); }
- YY_BREAK
case 91:
-YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, READONLY); }
- YY_BREAK
case 92:
-YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, WRITEONLY); }
- YY_BREAK
case 93:
-YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, COHERENT); }
- YY_BREAK
case 94:
-YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, RESTRICT); }
- YY_BREAK
case 95:
-YY_RULE_SETUP
-{ return ES2_and_ES3_reserved_ES3_1_keyword(context, VOLATILE); }
- YY_BREAK
-/* Reserved keywords for GLSL ES 3.00 that are not reserved for GLSL ES 1.00 */
case 96:
case 97:
case 98:
@@ -1814,7 +1757,6 @@ case 131:
case 132:
case 133:
case 134:
-case 135:
YY_RULE_SETUP
{
if (context->getShaderVersion() < 300) {
@@ -1825,7 +1767,7 @@ YY_RULE_SETUP
}
YY_BREAK
/* Reserved keywords in GLSL ES 1.00 that are not reserved in GLSL ES 3.00 */
-case 136:
+case 135:
YY_RULE_SETUP
{
if (context->getShaderVersion() >= 300)
@@ -1838,6 +1780,7 @@ YY_RULE_SETUP
}
YY_BREAK
/* Reserved keywords */
+case 136:
case 137:
case 138:
case 139:
@@ -2338,7 +2281,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
else
{
- int num_to_read =
+ yy_size_t num_to_read =
YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
while ( num_to_read <= 0 )
@@ -2374,7 +2317,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
- static_cast<int>(number_to_move) - 1;
+ number_to_move - 1;
}
@@ -2382,10 +2325,8 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
num_to_read = YY_READ_BUF_SIZE;
/* Read in more data. */
- size_t result = 0;
YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
- result, num_to_read );
- yyg->yy_n_chars = static_cast<int>(result);
+ yyg->yy_n_chars, num_to_read );
YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
}
@@ -2826,7 +2767,7 @@ static void yyensure_buffer_stack (yyscan_t yyscanner)
/* Increase the buffer to prepare for a possible push. */
int grow_size = 8 /* arbitrary grow size */;
- num_to_alloc = static_cast<int>(yyg->yy_buffer_stack_max + grow_size);
+ num_to_alloc = yyg->yy_buffer_stack_max + grow_size;
yyg->yy_buffer_stack = (struct yy_buffer_state**)yyrealloc
(yyg->yy_buffer_stack,
num_to_alloc * sizeof(struct yy_buffer_state*)
@@ -2860,7 +2801,7 @@ YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size , yyscan_t yyscann
if ( ! b )
YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
- b->yy_buf_size = static_cast<int>(size) - 2; /* "- 2" to take care of EOB's */
+ b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
b->yy_buf_pos = b->yy_ch_buf = base;
b->yy_is_our_buffer = 0;
b->yy_input_file = 0;
@@ -2909,7 +2850,7 @@ YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len
if ( ! buf )
YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
- for ( i = 0; i < static_cast<yy_size_t>(_yybytes_len); ++i )
+ for ( i = 0; i < _yybytes_len; ++i )
buf[i] = yybytes[i];
buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
@@ -3360,24 +3301,6 @@ int ES2_keyword_ES3_reserved(TParseContext *context, int token)
return token;
}
-int ES2_ident_ES3_reserved_ES3_1_keyword(TParseContext *context, int token)
-{
- struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner();
- yyscan_t yyscanner = (yyscan_t) context->getScanner();
-
- if (context->getShaderVersion() < 300)
- {
- yylval->lex.string = NewPoolTString(yytext);
- return check_type(yyscanner);
- }
- else if (context->getShaderVersion() == 300)
- {
- return reserved_word(yyscanner);
- }
-
- return token;
-}
-
int ES2_ident_ES3_keyword(TParseContext *context, int token)
{
struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner();
@@ -3393,18 +3316,6 @@ int ES2_ident_ES3_keyword(TParseContext *context, int token)
return token;
}
-int ES2_and_ES3_reserved_ES3_1_keyword(TParseContext *context, int token)
-{
- yyscan_t yyscanner = (yyscan_t) context->getScanner();
-
- if (context->getShaderVersion() < 310)
- {
- return reserved_word(yyscanner);
- }
-
- return token;
-}
-
int uint_constant(TParseContext *context)
{
struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner();
@@ -3506,7 +3417,7 @@ int glslang_scan(size_t count, const char* const string[], const int length[],
if (context->getFragmentPrecisionHigh())
preprocessor->predefineMacro("GL_FRAGMENT_PRECISION_HIGH", 1);
- preprocessor->setMaxTokenSize(sh::GetGlobalMaxTokenSize(context->getShaderSpec()));
+ preprocessor->setMaxTokenSize(GetGlobalMaxTokenSize(context->getShaderSpec()));
return 0;
}
diff --git a/gfx/angle/src/compiler/translator/glslang_tab.cpp b/gfx/angle/src/compiler/translator/glslang_tab.cpp
index 63a3371dc..ada392497 100755
--- a/gfx/angle/src/compiler/translator/glslang_tab.cpp
+++ b/gfx/angle/src/compiler/translator/glslang_tab.cpp
@@ -96,8 +96,6 @@
#define YYENABLE_NLS 0
-using namespace sh;
-
@@ -192,97 +190,80 @@ extern int yydebug;
CENTROID = 306,
FLAT = 307,
SMOOTH = 308,
- READONLY = 309,
- WRITEONLY = 310,
- COHERENT = 311,
- RESTRICT = 312,
- VOLATILE = 313,
- STRUCT = 314,
- VOID_TYPE = 315,
- WHILE = 316,
- SAMPLER2D = 317,
- SAMPLERCUBE = 318,
- SAMPLER_EXTERNAL_OES = 319,
- SAMPLER2DRECT = 320,
- SAMPLER2DARRAY = 321,
- ISAMPLER2D = 322,
- ISAMPLER3D = 323,
- ISAMPLERCUBE = 324,
- ISAMPLER2DARRAY = 325,
- USAMPLER2D = 326,
- USAMPLER3D = 327,
- USAMPLERCUBE = 328,
- USAMPLER2DARRAY = 329,
- SAMPLER3D = 330,
- SAMPLER3DRECT = 331,
- SAMPLER2DSHADOW = 332,
- SAMPLERCUBESHADOW = 333,
- SAMPLER2DARRAYSHADOW = 334,
- IMAGE2D = 335,
- IIMAGE2D = 336,
- UIMAGE2D = 337,
- IMAGE3D = 338,
- IIMAGE3D = 339,
- UIMAGE3D = 340,
- IMAGE2DARRAY = 341,
- IIMAGE2DARRAY = 342,
- UIMAGE2DARRAY = 343,
- IMAGECUBE = 344,
- IIMAGECUBE = 345,
- UIMAGECUBE = 346,
- LAYOUT = 347,
- IDENTIFIER = 348,
- TYPE_NAME = 349,
- FLOATCONSTANT = 350,
- INTCONSTANT = 351,
- UINTCONSTANT = 352,
- BOOLCONSTANT = 353,
- FIELD_SELECTION = 354,
- LEFT_OP = 355,
- RIGHT_OP = 356,
- INC_OP = 357,
- DEC_OP = 358,
- LE_OP = 359,
- GE_OP = 360,
- EQ_OP = 361,
- NE_OP = 362,
- AND_OP = 363,
- OR_OP = 364,
- XOR_OP = 365,
- MUL_ASSIGN = 366,
- DIV_ASSIGN = 367,
- ADD_ASSIGN = 368,
- MOD_ASSIGN = 369,
- LEFT_ASSIGN = 370,
- RIGHT_ASSIGN = 371,
- AND_ASSIGN = 372,
- XOR_ASSIGN = 373,
- OR_ASSIGN = 374,
- SUB_ASSIGN = 375,
- LEFT_PAREN = 376,
- RIGHT_PAREN = 377,
- LEFT_BRACKET = 378,
- RIGHT_BRACKET = 379,
- LEFT_BRACE = 380,
- RIGHT_BRACE = 381,
- DOT = 382,
- COMMA = 383,
- COLON = 384,
- EQUAL = 385,
- SEMICOLON = 386,
- BANG = 387,
- DASH = 388,
- TILDE = 389,
- PLUS = 390,
- STAR = 391,
- SLASH = 392,
- PERCENT = 393,
- LEFT_ANGLE = 394,
- RIGHT_ANGLE = 395,
- VERTICAL_BAR = 396,
- CARET = 397,
- AMPERSAND = 398,
- QUESTION = 399
+ STRUCT = 309,
+ VOID_TYPE = 310,
+ WHILE = 311,
+ SAMPLER2D = 312,
+ SAMPLERCUBE = 313,
+ SAMPLER_EXTERNAL_OES = 314,
+ SAMPLER2DRECT = 315,
+ SAMPLER2DARRAY = 316,
+ ISAMPLER2D = 317,
+ ISAMPLER3D = 318,
+ ISAMPLERCUBE = 319,
+ ISAMPLER2DARRAY = 320,
+ USAMPLER2D = 321,
+ USAMPLER3D = 322,
+ USAMPLERCUBE = 323,
+ USAMPLER2DARRAY = 324,
+ SAMPLER3D = 325,
+ SAMPLER3DRECT = 326,
+ SAMPLER2DSHADOW = 327,
+ SAMPLERCUBESHADOW = 328,
+ SAMPLER2DARRAYSHADOW = 329,
+ LAYOUT = 330,
+ IDENTIFIER = 331,
+ TYPE_NAME = 332,
+ FLOATCONSTANT = 333,
+ INTCONSTANT = 334,
+ UINTCONSTANT = 335,
+ BOOLCONSTANT = 336,
+ FIELD_SELECTION = 337,
+ LEFT_OP = 338,
+ RIGHT_OP = 339,
+ INC_OP = 340,
+ DEC_OP = 341,
+ LE_OP = 342,
+ GE_OP = 343,
+ EQ_OP = 344,
+ NE_OP = 345,
+ AND_OP = 346,
+ OR_OP = 347,
+ XOR_OP = 348,
+ MUL_ASSIGN = 349,
+ DIV_ASSIGN = 350,
+ ADD_ASSIGN = 351,
+ MOD_ASSIGN = 352,
+ LEFT_ASSIGN = 353,
+ RIGHT_ASSIGN = 354,
+ AND_ASSIGN = 355,
+ XOR_ASSIGN = 356,
+ OR_ASSIGN = 357,
+ SUB_ASSIGN = 358,
+ LEFT_PAREN = 359,
+ RIGHT_PAREN = 360,
+ LEFT_BRACKET = 361,
+ RIGHT_BRACKET = 362,
+ LEFT_BRACE = 363,
+ RIGHT_BRACE = 364,
+ DOT = 365,
+ COMMA = 366,
+ COLON = 367,
+ EQUAL = 368,
+ SEMICOLON = 369,
+ BANG = 370,
+ DASH = 371,
+ TILDE = 372,
+ PLUS = 373,
+ STAR = 374,
+ SLASH = 375,
+ PERCENT = 376,
+ LEFT_ANGLE = 377,
+ RIGHT_ANGLE = 378,
+ VERTICAL_BAR = 379,
+ CARET = 380,
+ AMPERSAND = 381,
+ QUESTION = 382
};
#endif
@@ -306,27 +287,22 @@ union YYSTYPE
struct {
TOperator op;
union {
- TIntermNode *intermNode;
+ TIntermNode* intermNode;
TIntermNodePair nodePair;
- TIntermTyped *intermTypedNode;
- TIntermAggregate *intermAggregate;
- TIntermBlock *intermBlock;
- TIntermDeclaration *intermDeclaration;
- TIntermSwitch *intermSwitch;
- TIntermCase *intermCase;
+ TIntermTyped* intermTypedNode;
+ TIntermAggregate* intermAggregate;
+ TIntermSwitch* intermSwitch;
+ TIntermCase* intermCase;
};
union {
- TTypeSpecifierNonArray typeSpecifierNonArray;
TPublicType type;
TPrecision precision;
TLayoutQualifier layoutQualifier;
TQualifier qualifier;
- TFunction *function;
+ TFunction* function;
TParameter param;
- TField *field;
- TFieldList *fieldList;
- TQualifierWrapperBase *qualifierWrapper;
- TTypeQualifierBuilder *typeQualifierBuilder;
+ TField* field;
+ TFieldList* fieldList;
};
} interm;
@@ -664,23 +640,23 @@ union yyalloc
#endif /* !YYCOPY_NEEDED */
/* YYFINAL -- State number of the termination state. */
-#define YYFINAL 126
+#define YYFINAL 116
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 2825
+#define YYLAST 2516
/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 145
+#define YYNTOKENS 128
/* YYNNTS -- Number of nonterminals. */
#define YYNNTS 94
/* YYNRULES -- Number of rules. */
-#define YYNRULES 286
+#define YYNRULES 275
/* YYNSTATES -- Number of states. */
-#define YYNSTATES 422
+#define YYNSTATES 417
/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
by yylex, with out-of-bounds checking. */
#define YYUNDEFTOK 2
-#define YYMAXUTOK 399
+#define YYMAXUTOK 382
#define YYTRANSLATE(YYX) \
((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -727,43 +703,41 @@ static const yytype_uint8 yytranslate[] =
95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
- 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
- 135, 136, 137, 138, 139, 140, 141, 142, 143, 144
+ 125, 126, 127
};
#if YYDEBUG
/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
static const yytype_uint16 yyrline[] =
{
- 0, 243, 243, 244, 247, 257, 260, 265, 270, 275,
- 280, 286, 289, 292, 295, 298, 301, 307, 314, 325,
- 329, 337, 340, 346, 350, 357, 363, 372, 380, 386,
- 392, 401, 404, 407, 410, 420, 421, 422, 423, 431,
- 432, 435, 438, 445, 446, 449, 455, 456, 460, 467,
- 468, 471, 474, 477, 483, 484, 487, 493, 494, 501,
- 502, 509, 510, 517, 518, 524, 525, 531, 532, 538,
- 539, 545, 546, 553, 554, 555, 556, 560, 561, 562,
- 566, 570, 574, 578, 585, 588, 594, 601, 608, 611,
- 614, 623, 627, 631, 635, 639, 646, 653, 656, 663,
- 671, 691, 701, 709, 734, 738, 742, 746, 753, 760,
- 763, 767, 771, 776, 781, 788, 792, 796, 800, 805,
- 810, 817, 821, 827, 830, 836, 840, 847, 853, 857,
- 861, 864, 867, 876, 882, 890, 893, 913, 932, 939,
- 943, 947, 950, 953, 956, 959, 965, 972, 975, 978,
- 984, 991, 994, 1000, 1003, 1006, 1012, 1015, 1020, 1031,
- 1034, 1037, 1040, 1043, 1046, 1050, 1054, 1058, 1062, 1066,
- 1070, 1074, 1078, 1082, 1086, 1090, 1094, 1098, 1102, 1106,
- 1110, 1114, 1118, 1122, 1126, 1130, 1133, 1136, 1139, 1142,
- 1145, 1148, 1151, 1154, 1157, 1160, 1163, 1166, 1169, 1172,
- 1175, 1182, 1188, 1191, 1194, 1197, 1200, 1203, 1206, 1209,
- 1212, 1215, 1218, 1221, 1224, 1227, 1239, 1239, 1242, 1242,
- 1248, 1251, 1266, 1269, 1276, 1280, 1286, 1292, 1304, 1308,
- 1312, 1313, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1329,
- 1330, 1330, 1330, 1339, 1340, 1344, 1344, 1345, 1345, 1350,
- 1353, 1362, 1367, 1374, 1375, 1379, 1386, 1390, 1397, 1397,
- 1404, 1407, 1414, 1418, 1431, 1431, 1436, 1436, 1442, 1442,
- 1450, 1453, 1459, 1462, 1468, 1472, 1479, 1482, 1485, 1488,
- 1491, 1500, 1506, 1512, 1515, 1521, 1521
+ 0, 228, 228, 229, 232, 242, 245, 250, 255, 260,
+ 265, 271, 274, 277, 280, 283, 286, 292, 299, 310,
+ 314, 322, 325, 331, 335, 342, 348, 357, 365, 371,
+ 377, 386, 389, 392, 395, 405, 406, 407, 408, 416,
+ 417, 420, 423, 430, 431, 434, 440, 441, 445, 452,
+ 453, 456, 459, 462, 468, 469, 472, 478, 479, 486,
+ 487, 494, 495, 502, 503, 509, 510, 516, 517, 523,
+ 524, 530, 531, 538, 539, 540, 541, 545, 546, 547,
+ 551, 555, 559, 563, 570, 573, 579, 586, 593, 596,
+ 602, 611, 615, 619, 623, 630, 636, 639, 646, 654,
+ 674, 683, 691, 716, 720, 728, 732, 740, 743, 746,
+ 749, 755, 762, 765, 769, 773, 778, 783, 790, 794,
+ 798, 802, 807, 812, 816, 823, 833, 839, 842, 848,
+ 854, 860, 868, 877, 884, 887, 893, 897, 901, 906,
+ 914, 917, 933, 938, 943, 948, 955, 963, 974, 977,
+ 980, 986, 993, 996, 1002, 1005, 1008, 1014, 1017, 1022,
+ 1034, 1038, 1042, 1046, 1050, 1054, 1059, 1064, 1069, 1074,
+ 1079, 1084, 1089, 1094, 1099, 1104, 1109, 1114, 1119, 1124,
+ 1129, 1134, 1139, 1144, 1149, 1154, 1159, 1163, 1167, 1171,
+ 1175, 1179, 1183, 1187, 1191, 1195, 1199, 1203, 1207, 1211,
+ 1215, 1219, 1227, 1234, 1238, 1251, 1251, 1254, 1254, 1260,
+ 1263, 1278, 1281, 1290, 1294, 1300, 1306, 1318, 1322, 1326,
+ 1327, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1343, 1344,
+ 1344, 1344, 1354, 1355, 1359, 1359, 1360, 1360, 1365, 1368,
+ 1378, 1381, 1387, 1388, 1392, 1399, 1403, 1410, 1410, 1417,
+ 1420, 1427, 1431, 1444, 1444, 1449, 1449, 1455, 1455, 1463,
+ 1466, 1472, 1475, 1481, 1485, 1492, 1495, 1498, 1501, 1504,
+ 1513, 1517, 1524, 1527, 1533, 1533
};
#endif
@@ -780,28 +754,24 @@ static const char *const yytname[] =
"IVEC4", "VEC2", "VEC3", "VEC4", "UVEC2", "UVEC3", "UVEC4", "MATRIX2",
"MATRIX3", "MATRIX4", "IN_QUAL", "OUT_QUAL", "INOUT_QUAL", "UNIFORM",
"VARYING", "MATRIX2x3", "MATRIX3x2", "MATRIX2x4", "MATRIX4x2",
- "MATRIX3x4", "MATRIX4x3", "CENTROID", "FLAT", "SMOOTH", "READONLY",
- "WRITEONLY", "COHERENT", "RESTRICT", "VOLATILE", "STRUCT", "VOID_TYPE",
- "WHILE", "SAMPLER2D", "SAMPLERCUBE", "SAMPLER_EXTERNAL_OES",
+ "MATRIX3x4", "MATRIX4x3", "CENTROID", "FLAT", "SMOOTH", "STRUCT",
+ "VOID_TYPE", "WHILE", "SAMPLER2D", "SAMPLERCUBE", "SAMPLER_EXTERNAL_OES",
"SAMPLER2DRECT", "SAMPLER2DARRAY", "ISAMPLER2D", "ISAMPLER3D",
"ISAMPLERCUBE", "ISAMPLER2DARRAY", "USAMPLER2D", "USAMPLER3D",
"USAMPLERCUBE", "USAMPLER2DARRAY", "SAMPLER3D", "SAMPLER3DRECT",
- "SAMPLER2DSHADOW", "SAMPLERCUBESHADOW", "SAMPLER2DARRAYSHADOW",
- "IMAGE2D", "IIMAGE2D", "UIMAGE2D", "IMAGE3D", "IIMAGE3D", "UIMAGE3D",
- "IMAGE2DARRAY", "IIMAGE2DARRAY", "UIMAGE2DARRAY", "IMAGECUBE",
- "IIMAGECUBE", "UIMAGECUBE", "LAYOUT", "IDENTIFIER", "TYPE_NAME",
- "FLOATCONSTANT", "INTCONSTANT", "UINTCONSTANT", "BOOLCONSTANT",
- "FIELD_SELECTION", "LEFT_OP", "RIGHT_OP", "INC_OP", "DEC_OP", "LE_OP",
- "GE_OP", "EQ_OP", "NE_OP", "AND_OP", "OR_OP", "XOR_OP", "MUL_ASSIGN",
- "DIV_ASSIGN", "ADD_ASSIGN", "MOD_ASSIGN", "LEFT_ASSIGN", "RIGHT_ASSIGN",
- "AND_ASSIGN", "XOR_ASSIGN", "OR_ASSIGN", "SUB_ASSIGN", "LEFT_PAREN",
- "RIGHT_PAREN", "LEFT_BRACKET", "RIGHT_BRACKET", "LEFT_BRACE",
- "RIGHT_BRACE", "DOT", "COMMA", "COLON", "EQUAL", "SEMICOLON", "BANG",
- "DASH", "TILDE", "PLUS", "STAR", "SLASH", "PERCENT", "LEFT_ANGLE",
- "RIGHT_ANGLE", "VERTICAL_BAR", "CARET", "AMPERSAND", "QUESTION",
- "$accept", "identifier", "variable_identifier", "primary_expression",
- "postfix_expression", "integer_expression", "function_call",
- "function_call_or_method", "function_call_generic",
+ "SAMPLER2DSHADOW", "SAMPLERCUBESHADOW", "SAMPLER2DARRAYSHADOW", "LAYOUT",
+ "IDENTIFIER", "TYPE_NAME", "FLOATCONSTANT", "INTCONSTANT",
+ "UINTCONSTANT", "BOOLCONSTANT", "FIELD_SELECTION", "LEFT_OP", "RIGHT_OP",
+ "INC_OP", "DEC_OP", "LE_OP", "GE_OP", "EQ_OP", "NE_OP", "AND_OP",
+ "OR_OP", "XOR_OP", "MUL_ASSIGN", "DIV_ASSIGN", "ADD_ASSIGN",
+ "MOD_ASSIGN", "LEFT_ASSIGN", "RIGHT_ASSIGN", "AND_ASSIGN", "XOR_ASSIGN",
+ "OR_ASSIGN", "SUB_ASSIGN", "LEFT_PAREN", "RIGHT_PAREN", "LEFT_BRACKET",
+ "RIGHT_BRACKET", "LEFT_BRACE", "RIGHT_BRACE", "DOT", "COMMA", "COLON",
+ "EQUAL", "SEMICOLON", "BANG", "DASH", "TILDE", "PLUS", "STAR", "SLASH",
+ "PERCENT", "LEFT_ANGLE", "RIGHT_ANGLE", "VERTICAL_BAR", "CARET",
+ "AMPERSAND", "QUESTION", "$accept", "identifier", "variable_identifier",
+ "primary_expression", "postfix_expression", "integer_expression",
+ "function_call", "function_call_or_method", "function_call_generic",
"function_call_header_no_parameters",
"function_call_header_with_parameters", "function_call_header",
"function_identifier", "unary_expression", "unary_operator",
@@ -814,10 +784,10 @@ static const char *const yytname[] =
"constant_expression", "enter_struct", "declaration",
"function_prototype", "function_declarator",
"function_header_with_parameters", "function_header",
- "parameter_declarator", "parameter_declaration",
+ "parameter_declarator", "parameter_declaration", "parameter_qualifier",
"parameter_type_specifier", "init_declarator_list", "single_declaration",
- "fully_specified_type", "interpolation_qualifier", "type_qualifier",
- "invariant_qualifier", "single_type_qualifier", "storage_qualifier",
+ "fully_specified_type", "interpolation_qualifier",
+ "parameter_type_qualifier", "type_qualifier", "storage_qualifier",
"type_specifier", "precision_qualifier", "layout_qualifier",
"layout_qualifier_id_list", "layout_qualifier_id",
"type_specifier_no_prec", "type_specifier_nonarray", "struct_specifier",
@@ -852,18 +822,16 @@ static const yytype_uint16 yytoknum[] =
345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
355, 356, 357, 358, 359, 360, 361, 362, 363, 364,
365, 366, 367, 368, 369, 370, 371, 372, 373, 374,
- 375, 376, 377, 378, 379, 380, 381, 382, 383, 384,
- 385, 386, 387, 388, 389, 390, 391, 392, 393, 394,
- 395, 396, 397, 398, 399
+ 375, 376, 377, 378, 379, 380, 381, 382
};
# endif
-#define YYPACT_NINF -363
+#define YYPACT_NINF -361
#define yypact_value_is_default(Yystate) \
- (!!((Yystate) == (-363)))
+ (!!((Yystate) == (-361)))
-#define YYTABLE_NINF -246
+#define YYTABLE_NINF -235
#define yytable_value_is_error(Yytable_value) \
0
@@ -872,49 +840,48 @@ static const yytype_uint16 yytoknum[] =
STATE-NUM. */
static const yytype_int16 yypact[] =
{
- 2469, -363, -363, -363, -363, 101, -363, -363, -363, -363,
- -363, -363, -363, -363, -363, -363, -363, -363, -363, -363,
- -363, -363, -363, -363, -363, -363, -363, -363, -363, -363,
- -363, -363, -363, -363, -363, -363, -363, -363, -363, -363,
- -363, -363, -363, -363, -363, -363, -68, -363, -363, -363,
- -363, -363, -363, -363, -363, -363, -363, -363, -363, -363,
- -363, -363, -363, -363, -363, -363, -363, -363, -363, -363,
- -363, -363, -363, -363, -363, -363, -363, -88, -363, -363,
- -77, -35, -13, 2561, -51, -363, 27, -363, 1301, -363,
- -363, -363, -363, -363, -363, -363, 12, -363, 2377, -363,
- -363, 2731, -363, -363, -363, 15, 49, -363, 22, -363,
- 2561, -363, -363, -363, 2561, 51, 51, -363, 16, -103,
- -87, -363, 2561, -363, -363, 1388, -363, -363, 20, 2561,
- -363, 19, -82, -363, 408, -363, -363, -363, -363, 39,
- -91, -363, 1503, 1845, -363, -363, 2561, 51, 2071, -363,
- 47, -363, -363, -363, -363, -363, 1845, 1845, 1845, -363,
- -363, -363, -363, -363, -363, -363, -41, -363, -363, -363,
- 55, -55, 1957, 59, -363, 1845, -5, -90, 64, -81,
- -42, 33, 45, 48, 78, 80, -93, -363, 71, -363,
- -363, 2173, 2561, 70, -363, 49, 57, 63, -363, 79,
- 81, 68, 1618, 83, 1845, 72, 84, 82, -363, -363,
- 41, -363, -363, -36, -363, -77, 85, -363, -363, -363,
- -363, 541, -363, -363, -363, -363, -363, -363, 1845, 1730,
- 1845, 77, 88, -363, -363, 51, 86, -34, -363, -78,
- -363, -363, -363, -50, -363, -363, 1845, 2646, -363, -363,
- 1845, 92, -363, -363, -363, 1845, 1845, 1845, 1845, 1845,
- 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845,
- 1845, 1845, 1845, 1845, 1845, -363, -363, 2275, -363, -363,
- -363, -363, -363, 90, -363, 1845, -363, -363, -29, 1845,
- 87, -363, -363, -363, 674, -363, -363, -363, -363, -363,
- -363, -363, -363, -363, -363, -363, 1845, 1845, -363, -363,
- -363, 93, 89, 94, -363, 1845, 95, -1, 1845, 51,
- -363, -94, -363, -363, 96, 98, -363, 102, -363, -363,
- -363, -363, -363, -5, -5, -90, -90, 64, 64, 64,
- 64, -81, -81, -42, 33, 45, 48, 78, 80, 44,
- -363, 161, 22, 940, 1073, -47, -363, -37, -363, 1187,
- 674, -363, -363, -363, 1845, 103, -363, 1845, -363, 100,
- -363, 1845, -363, -363, 1845, 107, -363, -363, -363, -363,
- 1187, 90, -363, 98, 51, 2561, 109, 106, -363, 1845,
- -363, -363, 111, -363, 1845, -363, 105, 116, 222, -363,
- 115, 112, 807, -363, -363, 110, -32, 1845, 807, 90,
- -363, 1845, -363, -363, -363, -363, 113, 98, -363, -363,
- -363, -363
+ 2154, 224, -361, -361, -361, 130, -361, -361, -361, -361,
+ -361, -361, -361, -361, -361, -361, -361, -361, -361, -361,
+ -361, -361, -361, -361, -361, -361, -361, -361, -361, -361,
+ -361, -361, -361, -361, -361, -361, -361, 145, -361, -361,
+ -46, -361, -361, -361, -361, -361, -361, -361, -361, -361,
+ -361, -361, -361, -361, -361, -361, -361, -361, -361, -82,
+ -361, -361, -68, -41, -45, 9, 7, -361, 117, 16,
+ 1173, -361, -361, 2439, 16, -361, -9, -361, 2079, -361,
+ -361, -361, -361, 16, -361, 2439, -361, -361, -361, -361,
+ -361, -31, 23, -361, 11, -361, 63, -361, -361, -361,
+ -361, -361, 2303, 168, 120, -361, 13, -66, -361, 31,
+ -361, 2229, -361, -361, -361, 1243, -361, -361, -361, 56,
+ 2229, -361, 17, -50, -361, 401, -361, -361, -361, -361,
+ 120, 2303, -18, -361, 1341, 1632, -361, 179, 2303, 120,
+ 1824, -361, 70, -361, -361, -361, -361, -361, 1632, 1632,
+ 1632, -361, -361, -361, -361, -361, -361, -361, 22, -361,
+ -361, -361, 101, -29, 1727, 114, -361, 1632, 96, -97,
+ 128, -54, 111, 118, 102, 115, 154, 153, -69, -361,
+ 140, -361, -361, 1909, 2229, 124, -361, 23, 134, 136,
+ -361, 147, 149, 143, 1439, 155, 1632, 148, 157, 160,
+ -361, -361, 184, -361, -361, 52, -361, -68, 158, -361,
+ -361, -361, -361, 517, -361, -361, -361, -361, -361, -361,
+ 166, -361, -361, 1534, 1632, 150, 159, -361, -361, 120,
+ 167, 61, -361, -62, -361, -361, -361, -5, -361, -361,
+ 1632, 2371, -361, -361, 1632, 185, -361, -361, -361, 1632,
+ 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632,
+ 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, -361,
+ -361, 1994, -361, -361, -361, -361, -361, 181, -361, 1632,
+ -361, -361, 67, 1632, 180, -361, -361, -361, 633, -361,
+ -361, -361, -361, -361, -361, -361, -361, -361, -361, -361,
+ 1632, 1632, -361, -361, -361, 1632, 178, 186, -361, 1632,
+ 182, 68, 1632, 120, -361, -71, -361, -361, 187, 188,
+ -361, 192, -361, -361, -361, -361, -361, 96, 96, -97,
+ -97, 128, 128, 128, 128, -54, -54, 111, 118, 102,
+ 115, 154, 153, 113, -361, 242, 11, 865, 981, 4,
+ -361, 18, -361, 1078, 633, -361, -361, 194, 1632, 189,
+ -361, 1632, -361, 196, -361, 1632, -361, -361, 1632, 200,
+ -361, -361, -361, -361, 1078, 181, -361, 188, 120, 2303,
+ 201, 198, -361, -361, 1632, -361, -361, 202, -361, 1632,
+ -361, 191, 203, 293, -361, 204, 205, 749, -361, -361,
+ 197, 60, 1632, 749, 181, -361, 1632, -361, -361, -361,
+ -361, 199, 188, -361, -361, -361, -361
};
/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -922,79 +889,78 @@ static const yytype_int16 yypact[] =
means the default is an error. */
static const yytype_uint16 yydefact[] =
{
- 0, 127, 147, 148, 149, 0, 133, 135, 163, 160,
- 161, 162, 167, 168, 169, 170, 171, 172, 164, 165,
- 166, 173, 174, 175, 176, 177, 178, 136, 137, 138,
- 140, 134, 179, 180, 181, 182, 183, 184, 139, 124,
- 123, 141, 142, 143, 144, 145, 0, 159, 185, 187,
- 200, 201, 188, 189, 190, 191, 192, 193, 194, 195,
- 196, 186, 197, 198, 199, 203, 204, 205, 206, 207,
- 208, 209, 210, 211, 212, 213, 214, 0, 215, 284,
- 285, 0, 98, 97, 0, 109, 115, 131, 0, 132,
- 125, 128, 121, 130, 129, 146, 156, 202, 0, 281,
- 283, 0, 2, 3, 218, 0, 0, 88, 0, 96,
- 0, 105, 99, 107, 0, 108, 0, 89, 2, 116,
- 0, 94, 0, 126, 122, 0, 1, 282, 0, 0,
- 216, 153, 0, 151, 0, 286, 100, 104, 106, 102,
- 110, 101, 0, 0, 87, 95, 0, 0, 0, 220,
- 4, 8, 6, 7, 9, 30, 0, 0, 0, 157,
- 37, 36, 38, 35, 5, 11, 31, 13, 18, 19,
- 0, 0, 24, 0, 39, 0, 43, 46, 49, 54,
- 57, 59, 61, 63, 65, 67, 69, 86, 0, 28,
- 90, 0, 0, 0, 150, 0, 0, 0, 266, 0,
- 0, 0, 0, 0, 0, 0, 0, 240, 249, 253,
- 39, 71, 84, 0, 229, 0, 146, 232, 251, 231,
- 230, 0, 233, 234, 235, 236, 237, 238, 0, 0,
- 0, 0, 0, 228, 120, 0, 226, 0, 224, 0,
- 221, 32, 33, 0, 15, 16, 0, 0, 22, 21,
- 0, 159, 25, 27, 34, 0, 0, 0, 0, 0,
+ 0, 0, 148, 149, 150, 0, 130, 140, 164, 161,
+ 162, 163, 168, 169, 170, 171, 172, 173, 165, 166,
+ 167, 174, 175, 176, 177, 178, 179, 141, 142, 145,
+ 131, 180, 181, 182, 183, 184, 185, 0, 128, 127,
+ 0, 160, 186, 188, 201, 202, 189, 190, 191, 192,
+ 193, 194, 195, 196, 197, 187, 198, 199, 200, 0,
+ 204, 273, 274, 0, 97, 107, 0, 112, 118, 135,
+ 0, 133, 125, 0, 136, 146, 157, 203, 0, 270,
+ 272, 132, 124, 0, 138, 0, 143, 144, 2, 3,
+ 207, 0, 0, 88, 0, 95, 107, 129, 108, 109,
+ 110, 98, 0, 107, 0, 89, 2, 119, 134, 0,
+ 94, 0, 126, 147, 137, 0, 1, 271, 139, 0,
+ 0, 205, 154, 0, 152, 0, 275, 99, 104, 106,
+ 111, 0, 113, 100, 0, 0, 87, 0, 0, 0,
+ 0, 209, 4, 8, 6, 7, 9, 30, 0, 0,
+ 0, 158, 37, 36, 38, 35, 5, 11, 31, 13,
+ 18, 19, 0, 0, 24, 0, 39, 0, 43, 46,
+ 49, 54, 57, 59, 61, 63, 65, 67, 69, 86,
+ 0, 28, 90, 0, 0, 0, 151, 0, 0, 0,
+ 255, 0, 0, 0, 0, 0, 0, 0, 0, 229,
+ 238, 242, 39, 71, 84, 0, 218, 0, 146, 221,
+ 240, 220, 219, 0, 222, 223, 224, 225, 226, 227,
+ 101, 103, 105, 0, 0, 0, 0, 217, 123, 0,
+ 215, 0, 213, 0, 210, 32, 33, 0, 15, 16,
+ 0, 0, 22, 21, 0, 160, 25, 27, 34, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 158, 219, 0, 154, 155,
- 152, 277, 276, 247, 268, 0, 280, 278, 0, 0,
- 0, 261, 264, 239, 0, 74, 75, 77, 76, 79,
- 80, 81, 82, 83, 78, 73, 0, 0, 254, 250,
- 252, 0, 0, 0, 114, 0, 117, 0, 0, 0,
- 222, 0, 91, 10, 0, 17, 29, 14, 20, 26,
- 40, 41, 42, 45, 44, 47, 48, 52, 53, 50,
- 51, 55, 56, 58, 60, 62, 64, 66, 68, 0,
- 217, 0, 0, 0, 0, 0, 279, 0, 260, 0,
- 241, 72, 85, 103, 0, 111, 118, 0, 223, 0,
- 225, 0, 92, 12, 0, 0, 246, 248, 271, 270,
- 273, 247, 258, 262, 0, 0, 0, 0, 112, 0,
- 119, 227, 0, 70, 0, 272, 0, 0, 257, 255,
- 0, 0, 0, 242, 113, 0, 0, 274, 0, 247,
- 259, 0, 244, 265, 243, 93, 0, 275, 269, 256,
- 263, 267
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 159,
+ 208, 0, 155, 156, 153, 266, 265, 236, 257, 0,
+ 269, 267, 0, 0, 0, 250, 253, 228, 0, 74,
+ 75, 77, 76, 79, 80, 81, 82, 83, 78, 73,
+ 0, 0, 243, 239, 241, 0, 0, 0, 117, 0,
+ 120, 0, 0, 0, 211, 0, 91, 10, 0, 17,
+ 29, 14, 20, 26, 40, 41, 42, 45, 44, 47,
+ 48, 52, 53, 50, 51, 55, 56, 58, 60, 62,
+ 64, 66, 68, 0, 206, 0, 0, 0, 0, 0,
+ 268, 0, 249, 0, 230, 72, 85, 0, 0, 114,
+ 121, 0, 212, 0, 214, 0, 92, 12, 0, 0,
+ 235, 237, 260, 259, 262, 236, 247, 251, 0, 0,
+ 0, 0, 102, 115, 0, 122, 216, 0, 70, 0,
+ 261, 0, 0, 246, 244, 0, 0, 0, 231, 116,
+ 0, 0, 263, 0, 236, 248, 0, 233, 254, 232,
+ 93, 0, 264, 258, 245, 252, 256
};
/* YYPGOTO[NTERM-NUM]. */
static const yytype_int16 yypgoto[] =
{
- -363, -45, -363, -363, -363, -363, -363, -363, -4, -363,
- -363, -363, -363, 54, -363, -84, -79, -139, -83, -23,
- -22, -21, -18, -17, -16, -363, -120, -137, -363, -146,
- -125, -363, 18, 21, -363, -363, -363, 136, 146, 145,
- -363, -363, -328, -363, -74, -363, -86, -363, -80, 255,
- -363, -363, 67, 0, -363, -363, -363, -363, -116, -141,
- 28, -54, -226, -85, -210, -339, -136, -363, -363, -142,
- -362, -363, -363, -98, -27, -76, -363, -363, -363, -363,
- -363, -112, -363, -363, -363, -363, -363, -363, -363, -363,
- -363, 172, -363, -363
+ -361, -39, -361, -361, -361, -361, -361, -361, 73, -361,
+ -361, -361, -361, -107, -361, -15, -20, -67, -19, 53,
+ 54, 55, 51, 57, 58, -361, -110, -132, -361, -146,
+ -125, -361, 6, 12, -361, -361, -361, 190, 228, 217,
+ 195, -361, -361, -336, 25, -361, -104, 27, -57, 322,
+ -361, -361, 141, 0, -361, -361, -361, -361, -109, -130,
+ 100, 19, -185, -17, -193, -310, -65, -361, -361, -70,
+ -360, -361, -361, -92, 46, -13, -361, -361, -361, -361,
+ -361, -38, -361, -361, -361, -361, -361, -361, -361, -361,
+ -361, 259, -361, -361
};
/* YYDEFGOTO[NTERM-NUM]. */
static const yytype_int16 yydefgoto[] =
{
- -1, 236, 164, 165, 166, 324, 167, 168, 169, 170,
- 171, 172, 173, 210, 175, 176, 177, 178, 179, 180,
- 181, 182, 183, 184, 185, 186, 211, 212, 306, 213,
- 188, 122, 214, 215, 81, 82, 83, 111, 112, 113,
- 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
- 94, 132, 133, 189, 96, 97, 192, 129, 148, 149,
- 237, 238, 234, 217, 218, 219, 220, 294, 387, 413,
- 351, 352, 353, 414, 221, 222, 223, 399, 224, 400,
- 225, 386, 226, 359, 283, 354, 380, 396, 397, 227,
- 98, 99, 100, 108
+ -1, 230, 156, 157, 158, 318, 159, 160, 161, 162,
+ 163, 164, 165, 202, 167, 168, 169, 170, 171, 172,
+ 173, 174, 175, 176, 177, 178, 203, 204, 300, 205,
+ 180, 111, 206, 207, 63, 64, 65, 128, 101, 102,
+ 129, 66, 67, 68, 69, 103, 70, 71, 72, 73,
+ 74, 123, 124, 181, 76, 77, 184, 120, 140, 141,
+ 231, 232, 228, 209, 210, 211, 212, 288, 381, 408,
+ 345, 346, 347, 409, 213, 214, 215, 394, 216, 395,
+ 217, 380, 218, 353, 277, 348, 374, 391, 392, 219,
+ 78, 79, 80, 94
};
/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
@@ -1002,576 +968,514 @@ static const yytype_int16 yydefgoto[] =
number is the opposite. If YYTABLE_NINF, syntax error. */
static const yytype_int16 yytable[] =
{
- 95, 105, 123, 115, 314, 187, 233, 240, 124, 114,
- 135, 310, 243, 191, 377, 321, 273, 232, 79, 398,
- 142, 80, 187, 262, 263, 102, 103, 143, 123, 371,
- 115, 384, 229, 106, 115, 252, 114, 372, 144, 230,
- 194, 119, 147, 258, 145, 259, 195, 419, 146, 147,
- 240, 274, 384, 322, 107, 146, 288, 104, 264, 265,
- 123, 244, 245, 412, 266, 267, 235, 249, 147, 412,
- 139, 140, 323, 250, 146, 381, 277, 116, 307, 290,
- 117, 307, 246, 95, 187, 382, 247, 109, 95, 366,
- 416, 307, 307, 233, 319, 308, 307, 320, 95, 307,
- 325, 128, 356, 311, 313, 2, 3, 4, 187, 187,
- 95, 147, 147, 329, 95, 110, 79, 146, 146, 80,
- 118, 103, 95, 337, 338, 339, 340, 319, 349, 95,
- 368, 255, 256, 257, 216, 125, 240, 141, 388, 355,
- 130, 390, 131, 357, 102, 103, 95, 134, 95, 193,
- 310, 190, 295, 296, 297, 298, 299, 300, 301, 302,
- 303, 304, 228, 404, 260, 261, 278, 279, -29, 361,
- 362, 305, 307, 374, 333, 334, 268, 248, 233, 174,
- 253, 335, 336, 341, 342, 420, 271, 269, 281, 270,
- 272, 95, 95, 369, 282, 275, 174, 147, 187, 286,
- 284, 291, 285, 146, 289, 292, -28, 315, 293, 318,
- 241, 242, 316, 383, -23, -245, 358, 363, 365, 364,
- 373, 216, 375, -30, 391, 367, 307, 233, 394, 254,
- 233, 402, 403, 389, 383, 405, 407, 393, 408, 409,
- 207, 415, 411, 328, 421, 343, 392, 344, 406, 345,
- 137, 187, 233, 346, 376, 347, 136, 348, 174, 138,
- 101, 417, 280, 317, 410, 370, 418, 360, 395, 378,
- 127, 0, 0, 0, 233, 0, 0, 95, 379, 0,
- 0, 0, 174, 174, 0, 385, 0, 0, 0, 0,
- 0, 0, 0, 0, 216, 0, 0, 0, 0, 123,
- 0, 0, 0, 0, 0, 124, 385, 0, 0, 330,
- 331, 332, 174, 174, 174, 174, 174, 174, 174, 174,
- 174, 174, 174, 174, 174, 174, 174, 174, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 401,
+ 75, 91, 126, 227, 237, 179, 61, 138, 166, 226,
+ 234, 183, 62, 112, 315, 393, 138, 378, 97, 252,
+ 304, 253, 92, 267, 179, 7, 83, 166, 84, 107,
+ 88, 89, 246, 256, 257, 365, 138, 371, 378, 308,
+ 134, 235, 236, 366, 414, 130, 93, 135, 282, 98,
+ 99, 100, 316, 234, 139, 186, 27, 28, 268, 29,
+ 248, 187, 90, 139, 95, 132, 96, 37, 258, 259,
+ 75, 284, 97, 113, 130, 271, 243, 121, 75, 138,
+ 138, 229, 244, 139, 61, 119, 179, 407, 223, 166,
+ 62, 220, 227, 407, 319, 224, 108, 115, 307, 122,
+ 317, 114, 75, 98, 99, 100, 301, 238, 239, 375,
+ 118, 75, 323, 179, -96, 301, 166, 133, 104, 125,
+ 75, 105, 343, 376, 360, 208, 139, 139, 240, 301,
+ 185, 75, 241, 349, 2, 3, 4, 351, 75, 136,
+ 75, 234, 324, 325, 326, 166, 166, 166, 166, 166,
+ 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
+ 166, 304, 83, 301, 84, 411, 302, 138, 355, 356,
+ 182, 301, 313, 383, -29, 314, 385, 227, 301, 313,
+ 357, 350, 362, 75, 75, 86, 87, 363, 7, 331,
+ 332, 333, 334, 106, 89, 179, 88, 89, 166, 399,
+ 260, 261, 179, 272, 273, 166, 242, 377, 98, 99,
+ 100, 254, 255, 208, 139, 249, 250, 251, 247, 27,
+ 28, 415, 29, 81, 301, 368, 227, 263, 377, 227,
+ 37, 38, 39, 7, 329, 330, 388, 327, 328, 264,
+ 387, 335, 336, 401, 262, 265, 266, 269, 275, 379,
+ 276, 278, 227, 279, 370, 179, 412, 280, 166, 283,
+ 285, 286, -28, 309, 27, 28, 310, 29, 81, 287,
+ 379, 75, 305, 312, 227, 37, 38, 39, 289, 290,
+ 291, 292, 293, 294, 295, 296, 297, 298, 208, -234,
+ -23, 358, 352, 359, 367, 361, -30, 299, 369, 301,
+ 82, 382, 384, 386, 389, 402, 397, 398, 403, 400,
+ 404, 410, 199, 416, 322, 337, 340, 338, 406, 339,
+ 131, 221, 112, 341, 127, 342, 222, 85, 274, 311,
+ 405, 372, 364, 413, 354, 373, 390, 117, 0, 396,
+ 0, 0, 0, 0, 0, 0, 0, 208, 208, 0,
+ 0, 0, 0, 208, 208, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 216, 216, 0, 0, 0, 0, 216,
- 216, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 174, 0, 0, 0, 0, 0, 0, 0,
- 216, 0, 0, 0, 0, 95, 0, 0, 0, 0,
+ 0, 0, 0, 0, 208, 0, 0, 0, 0, 75,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 216, 0, 0, 0, 0, 0, 216, 0,
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
- 10, 11, 196, 197, 198, 174, 199, 200, 201, 202,
- 203, 204, 205, 12, 13, 14, 15, 16, 17, 18,
- 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
- 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
- 39, 40, 41, 42, 43, 44, 45, 46, 47, 206,
- 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
- 58, 59, 60, 61, 0, 62, 63, 64, 65, 66,
- 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
- 77, 150, 78, 151, 152, 153, 154, 155, 0, 0,
- 156, 157, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 158,
- 0, 0, 0, 207, 208, 0, 0, 0, 0, 209,
- 160, 161, 162, 163, 1, 2, 3, 4, 5, 6,
- 7, 8, 9, 10, 11, 196, 197, 198, 0, 199,
- 200, 201, 202, 203, 204, 205, 12, 13, 14, 15,
+ 0, 0, 0, 0, 0, 0, 0, 208, 0, 0,
+ 0, 0, 0, 208, 1, 2, 3, 4, 5, 6,
+ 7, 8, 9, 10, 11, 188, 189, 190, 0, 191,
+ 192, 193, 194, 195, 196, 197, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
- 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
- 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
- 46, 47, 206, 48, 49, 50, 51, 52, 53, 54,
- 55, 56, 57, 58, 59, 60, 61, 0, 62, 63,
- 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
- 74, 75, 76, 77, 150, 78, 151, 152, 153, 154,
- 155, 0, 0, 156, 157, 0, 0, 0, 0, 0,
+ 26, 27, 28, 0, 29, 30, 31, 32, 33, 34,
+ 35, 36, 37, 38, 39, 40, 41, 198, 42, 43,
+ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
+ 54, 55, 0, 56, 57, 58, 59, 142, 60, 143,
+ 144, 145, 146, 147, 0, 0, 148, 149, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 158, 0, 0, 0, 207, 309, 0, 0,
- 0, 0, 209, 160, 161, 162, 163, 1, 2, 3,
- 4, 5, 6, 7, 8, 9, 10, 11, 196, 197,
- 198, 0, 199, 200, 201, 202, 203, 204, 205, 12,
- 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
- 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
- 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
- 43, 44, 45, 46, 47, 206, 48, 49, 50, 51,
- 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
- 0, 62, 63, 64, 65, 66, 67, 68, 69, 70,
- 71, 72, 73, 74, 75, 76, 77, 150, 78, 151,
- 152, 153, 154, 155, 0, 0, 156, 157, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 158, 0, 0, 0, 207,
- 0, 0, 0, 0, 0, 209, 160, 161, 162, 163,
+ 0, 0, 0, 0, 0, 150, 0, 0, 0, 199,
+ 200, 0, 0, 0, 0, 201, 152, 153, 154, 155,
1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
- 11, 196, 197, 198, 0, 199, 200, 201, 202, 203,
- 204, 205, 12, 13, 14, 15, 16, 17, 18, 19,
- 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
- 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 42, 43, 44, 45, 46, 47, 206, 48,
- 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
- 59, 60, 61, 0, 62, 63, 64, 65, 66, 67,
- 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
- 150, 78, 151, 152, 153, 154, 155, 0, 0, 156,
- 157, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 158, 0,
- 0, 0, 134, 0, 0, 0, 0, 0, 209, 160,
- 161, 162, 163, 1, 2, 3, 4, 5, 6, 7,
- 8, 9, 10, 11, 196, 197, 198, 0, 199, 200,
- 201, 202, 203, 204, 205, 12, 13, 14, 15, 16,
- 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
- 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
- 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
- 47, 206, 48, 49, 50, 51, 52, 53, 54, 55,
- 56, 57, 58, 59, 60, 61, 0, 62, 63, 64,
- 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
- 75, 76, 77, 150, 78, 151, 152, 153, 154, 155,
- 0, 0, 156, 157, 0, 0, 0, 0, 0, 0,
+ 11, 188, 189, 190, 0, 191, 192, 193, 194, 195,
+ 196, 197, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 0,
+ 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
+ 39, 40, 41, 198, 42, 43, 44, 45, 46, 47,
+ 48, 49, 50, 51, 52, 53, 54, 55, 0, 56,
+ 57, 58, 59, 142, 60, 143, 144, 145, 146, 147,
+ 0, 0, 148, 149, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 158, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 209, 160, 161, 162, 163, 1, 2, 3, 4,
- 5, 6, 7, 8, 9, 10, 11, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 12, 13,
+ 0, 150, 0, 0, 0, 199, 303, 0, 0, 0,
+ 0, 201, 152, 153, 154, 155, 1, 2, 3, 4,
+ 5, 6, 7, 8, 9, 10, 11, 188, 189, 190,
+ 0, 191, 192, 193, 194, 195, 196, 197, 12, 13,
14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
- 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
- 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
- 44, 45, 46, 47, 0, 48, 49, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 59, 60, 61, 0,
- 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
- 72, 73, 74, 75, 76, 77, 150, 78, 151, 152,
- 153, 154, 155, 0, 0, 156, 157, 0, 0, 0,
+ 24, 25, 26, 27, 28, 0, 29, 30, 31, 32,
+ 33, 34, 35, 36, 37, 38, 39, 40, 41, 198,
+ 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
+ 52, 53, 54, 55, 0, 56, 57, 58, 59, 142,
+ 60, 143, 144, 145, 146, 147, 0, 0, 148, 149,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 2, 3, 4, 158, 6, 7, 8, 9, 10,
- 11, 0, 0, 0, 209, 160, 161, 162, 163, 0,
- 0, 0, 12, 13, 14, 15, 16, 17, 18, 19,
- 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
- 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 42, 43, 44, 45, 46, 47, 0, 48,
- 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
- 59, 60, 61, 0, 62, 63, 64, 65, 66, 67,
- 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
- 150, 78, 151, 152, 153, 154, 155, 0, 0, 156,
- 157, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 2, 3, 4, 158, 6,
- 7, 8, 9, 10, 11, 0, 0, 0, 0, 160,
- 161, 162, 163, 0, 0, 0, 12, 13, 14, 15,
+ 0, 0, 0, 0, 0, 0, 0, 150, 0, 0,
+ 0, 199, 0, 0, 0, 0, 0, 201, 152, 153,
+ 154, 155, 1, 2, 3, 4, 5, 6, 7, 8,
+ 9, 10, 11, 188, 189, 190, 0, 191, 192, 193,
+ 194, 195, 196, 197, 12, 13, 14, 15, 16, 17,
+ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
+ 28, 0, 29, 30, 31, 32, 33, 34, 35, 36,
+ 37, 38, 39, 40, 41, 198, 42, 43, 44, 45,
+ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
+ 0, 56, 57, 58, 59, 142, 60, 143, 144, 145,
+ 146, 147, 0, 0, 148, 149, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 150, 0, 0, 0, 125, 0, 0,
+ 0, 0, 0, 201, 152, 153, 154, 155, 1, 2,
+ 3, 4, 5, 6, 7, 8, 9, 10, 11, 188,
+ 189, 190, 0, 191, 192, 193, 194, 195, 196, 197,
+ 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 26, 27, 28, 0, 29, 30,
+ 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
+ 41, 198, 42, 43, 44, 45, 46, 47, 48, 49,
+ 50, 51, 52, 53, 54, 55, 0, 56, 57, 58,
+ 59, 142, 60, 143, 144, 145, 146, 147, 0, 0,
+ 148, 149, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 150,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 201,
+ 152, 153, 154, 155, 1, 2, 3, 4, 5, 6,
+ 7, 8, 9, 10, 11, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
- 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
- 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
- 46, 47, 0, 48, 49, 50, 51, 52, 53, 54,
- 55, 56, 57, 58, 59, 60, 61, 0, 62, 63,
- 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
- 74, 75, 76, 77, 120, 78, 0, 0, 8, 9,
- 10, 11, 0, 0, 0, 0, 0, 0, 0, 0,
+ 26, 27, 28, 0, 29, 30, 31, 32, 33, 34,
+ 35, 36, 37, 38, 39, 40, 41, 0, 42, 43,
+ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
+ 54, 55, 0, 56, 57, 58, 59, 142, 60, 143,
+ 144, 145, 146, 147, 0, 0, 148, 149, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 137, 2, 3, 4, 150, 6, 7, 8, 9,
+ 10, 11, 0, 0, 0, 201, 152, 153, 154, 155,
0, 0, 0, 12, 13, 14, 15, 16, 17, 18,
- 19, 20, 21, 22, 23, 24, 25, 26, 0, 0,
- 0, 0, 121, 32, 33, 34, 35, 36, 37, 0,
- 0, 0, 0, 0, 0, 0, 0, 46, 47, 0,
- 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
- 58, 59, 60, 61, 0, 62, 63, 64, 65, 66,
- 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
- 0, 150, 78, 151, 152, 153, 154, 155, 0, 0,
- 156, 157, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 158,
- 0, 0, 159, 8, 9, 10, 11, 0, 0, 0,
- 160, 161, 162, 163, 0, 0, 0, 0, 12, 13,
+ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
+ 0, 29, 30, 31, 32, 33, 34, 35, 36, 37,
+ 38, 39, 40, 41, 0, 42, 43, 44, 45, 46,
+ 47, 48, 49, 50, 51, 52, 53, 54, 55, 0,
+ 56, 57, 58, 59, 142, 60, 143, 144, 145, 146,
+ 147, 0, 0, 148, 149, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 2, 3, 4,
+ 0, 0, 150, 8, 9, 10, 11, 0, 0, 0,
+ 0, 0, 0, 152, 153, 154, 155, 0, 12, 13,
+ 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
+ 24, 25, 26, 0, 0, 0, 0, 0, 31, 32,
+ 33, 34, 35, 36, 0, 0, 0, 40, 41, 0,
+ 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
+ 52, 53, 54, 55, 0, 56, 57, 58, 0, 109,
+ 60, 0, 0, 8, 9, 10, 11, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 12, 13,
14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
- 24, 25, 26, 0, 0, 0, 0, 0, 32, 33,
- 34, 35, 36, 37, 0, 0, 0, 0, 0, 0,
- 0, 0, 46, 47, 0, 48, 49, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 59, 60, 61, 0,
- 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
- 72, 73, 74, 75, 76, 0, 150, 78, 151, 152,
- 153, 154, 155, 0, 0, 156, 157, 0, 0, 0,
+ 24, 25, 26, 0, 0, 0, 0, 110, 31, 32,
+ 33, 34, 35, 36, 0, 0, 0, 40, 41, 0,
+ 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
+ 52, 53, 54, 55, 0, 56, 57, 58, 0, 142,
+ 60, 143, 144, 145, 146, 147, 0, 0, 148, 149,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 158, 0, 0, 231, 8, 9,
- 10, 11, 0, 0, 0, 160, 161, 162, 163, 0,
- 0, 0, 0, 12, 13, 14, 15, 16, 17, 18,
- 19, 20, 21, 22, 23, 24, 25, 26, 0, 0,
- 0, 0, 0, 32, 33, 34, 35, 36, 37, 0,
- 0, 0, 0, 0, 0, 0, 0, 46, 47, 0,
- 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
- 58, 59, 60, 61, 0, 62, 63, 64, 65, 66,
- 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
- 0, 150, 78, 151, 152, 153, 154, 155, 0, 0,
- 156, 157, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 158,
- 8, 9, 10, 11, 0, 0, 0, 0, 0, 287,
- 160, 161, 162, 163, 0, 12, 13, 14, 15, 16,
- 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
- 0, 0, 0, 0, 0, 32, 33, 34, 35, 36,
- 37, 0, 0, 0, 0, 0, 0, 0, 0, 46,
- 47, 0, 48, 49, 50, 51, 52, 53, 54, 55,
- 56, 57, 58, 59, 60, 61, 0, 62, 63, 64,
- 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
- 75, 76, 0, 150, 78, 151, 152, 153, 154, 155,
- 0, 0, 156, 157, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 150, 0, 0,
+ 151, 8, 9, 10, 11, 0, 0, 0, 152, 153,
+ 154, 155, 0, 0, 0, 0, 12, 13, 14, 15,
+ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+ 26, 0, 0, 0, 0, 0, 31, 32, 33, 34,
+ 35, 36, 0, 0, 0, 40, 41, 0, 42, 43,
+ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
+ 54, 55, 0, 56, 57, 58, 0, 142, 60, 143,
+ 144, 145, 146, 147, 0, 0, 148, 149, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 158, 0, 0, 312, 8, 9, 10, 11, 0,
- 0, 0, 160, 161, 162, 163, 0, 0, 0, 0,
- 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
- 22, 23, 24, 25, 26, 0, 0, 0, 0, 0,
- 32, 33, 34, 35, 36, 37, 0, 0, 0, 0,
- 0, 0, 0, 0, 46, 47, 0, 48, 49, 50,
- 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
- 61, 0, 62, 63, 64, 65, 66, 67, 68, 69,
- 70, 71, 72, 73, 74, 75, 76, 0, 150, 78,
- 151, 152, 153, 154, 155, 0, 0, 156, 157, 0,
+ 0, 0, 0, 0, 0, 150, 0, 0, 225, 8,
+ 9, 10, 11, 0, 0, 0, 152, 153, 154, 155,
+ 0, 0, 0, 0, 12, 13, 14, 15, 16, 17,
+ 18, 19, 20, 21, 22, 23, 24, 25, 26, 0,
+ 0, 0, 0, 0, 31, 32, 33, 34, 35, 36,
+ 0, 0, 0, 40, 41, 0, 42, 43, 44, 45,
+ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
+ 0, 56, 57, 58, 0, 142, 60, 143, 144, 145,
+ 146, 147, 0, 0, 148, 149, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 158, 8, 9, 10,
- 11, 0, 0, 0, 0, 0, 0, 160, 161, 162,
- 163, 0, 12, 13, 14, 15, 16, 17, 18, 19,
+ 0, 0, 0, 150, 8, 9, 10, 11, 0, 0,
+ 0, 0, 0, 281, 152, 153, 154, 155, 0, 12,
+ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+ 23, 24, 25, 26, 0, 0, 0, 0, 0, 31,
+ 32, 33, 34, 35, 36, 0, 0, 0, 40, 41,
+ 0, 42, 43, 44, 45, 46, 47, 48, 49, 50,
+ 51, 52, 53, 54, 55, 0, 56, 57, 58, 0,
+ 142, 60, 143, 144, 145, 146, 147, 0, 0, 148,
+ 149, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 150, 0,
+ 0, 306, 8, 9, 10, 11, 0, 0, 0, 152,
+ 153, 154, 155, 0, 0, 0, 0, 12, 13, 14,
+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
+ 25, 26, 0, 0, 0, 0, 0, 31, 32, 33,
+ 34, 35, 36, 0, 0, 0, 40, 41, 0, 42,
+ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+ 53, 54, 55, 0, 56, 57, 58, 0, 142, 60,
+ 143, 144, 145, 146, 147, 0, 0, 148, 149, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 150, 8, 9, 10,
+ 11, 0, 0, 0, 0, 0, 0, 152, 153, 154,
+ 155, 0, 12, 13, 14, 15, 16, 17, 18, 19,
20, 21, 22, 23, 24, 25, 26, 0, 0, 0,
- 0, 0, 32, 33, 34, 35, 36, 37, 0, 0,
- 0, 0, 0, 0, 0, 0, 46, 251, 0, 48,
- 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
- 59, 60, 61, 0, 62, 63, 64, 65, 66, 67,
- 68, 69, 70, 71, 72, 73, 74, 75, 76, 0,
- 150, 78, 151, 152, 153, 154, 155, 0, 0, 156,
- 157, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 2, 3, 4, 158, 6,
- 7, 8, 9, 10, 11, 0, 0, 0, 0, 160,
- 161, 162, 163, 0, 0, 0, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
- 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
- 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
- 46, 47, 0, 48, 49, 50, 51, 52, 53, 54,
- 55, 56, 57, 58, 59, 60, 61, 0, 62, 63,
- 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
- 74, 75, 76, 77, 0, 78, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 2, 3, 4,
- 0, 6, 7, 8, 9, 10, 11, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 239, 12, 13,
- 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
- 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
- 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
- 44, 45, 46, 47, 0, 48, 49, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 59, 60, 61, 0,
- 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
- 72, 73, 74, 75, 76, 77, 0, 78, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 2,
- 3, 4, 0, 6, 7, 8, 9, 10, 11, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 276,
- 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
- 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
+ 0, 0, 31, 32, 33, 34, 35, 36, 0, 0,
+ 0, 40, 245, 0, 42, 43, 44, 45, 46, 47,
+ 48, 49, 50, 51, 52, 53, 54, 55, 0, 56,
+ 57, 58, 0, 142, 60, 143, 144, 145, 146, 147,
+ 0, 0, 148, 149, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 137, 2, 3,
+ 4, 150, 6, 7, 8, 9, 10, 11, 0, 0,
+ 0, 0, 152, 153, 154, 155, 0, 0, 0, 12,
+ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+ 23, 24, 25, 26, 27, 28, 0, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
- 42, 43, 44, 45, 46, 47, 0, 48, 49, 50,
- 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
- 61, 0, 62, 63, 64, 65, 66, 67, 68, 69,
- 70, 71, 72, 73, 74, 75, 76, 77, 0, 78,
- 0, 0, 0, 0, 0, 0, 0, 126, 0, 0,
- 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
- 11, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 350, 12, 13, 14, 15, 16, 17, 18, 19,
- 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
- 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 42, 43, 44, 45, 46, 47, 0, 48,
- 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
- 59, 60, 61, 0, 62, 63, 64, 65, 66, 67,
- 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
- 0, 78, 1, 2, 3, 4, 5, 6, 7, 8,
+ 0, 42, 43, 44, 45, 46, 47, 48, 49, 50,
+ 51, 52, 53, 54, 55, 0, 56, 57, 58, 59,
+ 0, 60, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 137, 2, 3, 4, 0, 6, 7, 8,
+ 9, 10, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 233, 12, 13, 14, 15, 16, 17,
+ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
+ 28, 0, 29, 30, 31, 32, 33, 34, 35, 36,
+ 37, 38, 39, 40, 41, 0, 42, 43, 44, 45,
+ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
+ 0, 56, 57, 58, 59, 0, 60, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 137, 2, 3,
+ 4, 0, 6, 7, 8, 9, 10, 11, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 270, 12,
+ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+ 23, 24, 25, 26, 27, 28, 0, 29, 30, 31,
+ 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
+ 0, 42, 43, 44, 45, 46, 47, 48, 49, 50,
+ 51, 52, 53, 54, 55, 0, 56, 57, 58, 59,
+ 0, 60, 0, 0, 0, 0, 0, 0, 0, 116,
+ 0, 0, 1, 2, 3, 4, 5, 6, 7, 8,
+ 9, 10, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 344, 12, 13, 14, 15, 16, 17,
+ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
+ 28, 0, 29, 30, 31, 32, 33, 34, 35, 36,
+ 37, 38, 39, 40, 41, 0, 42, 43, 44, 45,
+ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
+ 0, 56, 57, 58, 59, 0, 60, 1, 2, 3,
+ 4, 5, 6, 7, 8, 9, 10, 11, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,
+ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+ 23, 24, 25, 26, 27, 28, 0, 29, 30, 31,
+ 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
+ 0, 42, 43, 44, 45, 46, 47, 48, 49, 50,
+ 51, 52, 53, 54, 55, 0, 56, 57, 58, 59,
+ 0, 60, 137, 2, 3, 4, 0, 6, 7, 8,
9, 10, 11, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 12, 13, 14, 15, 16, 17,
18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
- 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
- 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
- 0, 48, 49, 50, 51, 52, 53, 54, 55, 56,
- 57, 58, 59, 60, 61, 0, 62, 63, 64, 65,
- 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
- 76, 77, 0, 78, 1, 2, 3, 4, 0, 6,
- 7, 8, 9, 10, 11, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
- 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
- 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
- 46, 47, 0, 48, 49, 50, 51, 52, 53, 54,
- 55, 56, 57, 58, 59, 60, 61, 0, 62, 63,
- 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
- 74, 75, 76, 77, 0, 78, 8, 9, 10, 11,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 12, 13, 14, 15, 16, 17, 18, 19, 20,
- 21, 22, 23, 24, 25, 26, 0, 0, 0, 0,
- 0, 32, 33, 34, 35, 36, 37, 0, 0, 0,
- 0, 0, 0, 0, 0, 46, 47, 0, 48, 49,
- 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
- 60, 61, 0, 62, 63, 64, 65, 66, 67, 68,
- 69, 70, 71, 72, 73, 74, 75, 76, 0, 326,
- 78, 8, 9, 10, 11, 327, 0, 0, 0, 0,
+ 28, 0, 29, 30, 31, 32, 33, 34, 35, 36,
+ 37, 38, 39, 40, 41, 0, 42, 43, 44, 45,
+ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
+ 0, 56, 57, 58, 59, 0, 60, 2, 3, 4,
+ 0, 0, 0, 8, 9, 10, 11, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 12, 13,
+ 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
+ 24, 25, 26, 0, 0, 0, 0, 0, 31, 32,
+ 33, 34, 35, 36, 0, 0, 0, 40, 41, 0,
+ 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
+ 52, 53, 54, 55, 0, 56, 57, 58, 0, 0,
+ 60, 8, 9, 10, 11, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
- 26, 0, 0, 0, 0, 0, 32, 33, 34, 35,
- 36, 37, 0, 0, 0, 0, 0, 0, 0, 0,
- 46, 47, 0, 48, 49, 50, 51, 52, 53, 54,
- 55, 56, 57, 58, 59, 60, 61, 0, 62, 63,
- 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
- 74, 75, 76, 0, 0, 78
+ 26, 0, 0, 0, 0, 0, 31, 32, 33, 34,
+ 35, 36, 0, 0, 0, 40, 41, 0, 42, 43,
+ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
+ 54, 55, 0, 56, 57, 58, 0, 320, 60, 8,
+ 9, 10, 11, 321, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 12, 13, 14, 15, 16, 17,
+ 18, 19, 20, 21, 22, 23, 24, 25, 26, 0,
+ 0, 0, 0, 0, 31, 32, 33, 34, 35, 36,
+ 0, 0, 0, 40, 41, 0, 42, 43, 44, 45,
+ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
+ 0, 56, 57, 58, 0, 0, 60
};
static const yytype_int16 yycheck[] =
{
- 0, 46, 88, 83, 230, 125, 143, 148, 88, 83,
- 108, 221, 158, 129, 353, 93, 109, 142, 0, 381,
- 123, 0, 142, 104, 105, 93, 94, 130, 114, 123,
- 110, 359, 123, 121, 114, 172, 110, 131, 125, 130,
- 122, 86, 122, 133, 131, 135, 128, 409, 122, 129,
- 191, 144, 380, 131, 131, 129, 202, 125, 139, 140,
- 146, 102, 103, 402, 106, 107, 146, 122, 148, 408,
- 115, 116, 122, 128, 148, 122, 192, 128, 128, 204,
- 131, 128, 123, 83, 204, 122, 127, 122, 88, 315,
- 122, 128, 128, 230, 128, 131, 128, 131, 98, 128,
- 246, 101, 131, 228, 229, 4, 5, 6, 228, 229,
- 110, 191, 192, 250, 114, 128, 98, 191, 192, 98,
- 93, 94, 122, 262, 263, 264, 265, 128, 274, 129,
- 131, 136, 137, 138, 134, 123, 277, 121, 364, 285,
- 125, 367, 93, 289, 93, 94, 146, 125, 148, 130,
- 360, 131, 111, 112, 113, 114, 115, 116, 117, 118,
- 119, 120, 123, 389, 100, 101, 96, 97, 121, 306,
- 307, 130, 128, 129, 258, 259, 143, 122, 315, 125,
- 121, 260, 261, 266, 267, 411, 108, 142, 131, 141,
- 110, 191, 192, 318, 131, 124, 142, 277, 318, 131,
- 121, 129, 121, 277, 121, 121, 121, 130, 126, 123,
- 156, 157, 124, 359, 122, 125, 129, 124, 124, 130,
- 124, 221, 61, 121, 124, 130, 128, 364, 121, 175,
- 367, 122, 126, 130, 380, 124, 131, 374, 122, 17,
- 125, 131, 130, 247, 131, 268, 371, 269, 394, 270,
- 114, 371, 389, 271, 352, 272, 110, 273, 204, 114,
- 5, 407, 195, 235, 400, 319, 408, 294, 380, 354,
- 98, -1, -1, -1, 411, -1, -1, 277, 354, -1,
- -1, -1, 228, 229, -1, 359, -1, -1, -1, -1,
- -1, -1, -1, -1, 294, -1, -1, -1, -1, 385,
- -1, -1, -1, -1, -1, 385, 380, -1, -1, 255,
- 256, 257, 258, 259, 260, 261, 262, 263, 264, 265,
- 266, 267, 268, 269, 270, 271, 272, 273, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 384,
+ 0, 40, 94, 135, 150, 115, 0, 111, 115, 134,
+ 140, 120, 0, 70, 76, 375, 120, 353, 9, 116,
+ 213, 118, 104, 92, 134, 9, 1, 134, 1, 68,
+ 76, 77, 164, 87, 88, 106, 140, 347, 374, 224,
+ 106, 148, 149, 114, 404, 102, 114, 113, 194, 40,
+ 41, 42, 114, 183, 111, 105, 40, 41, 127, 43,
+ 167, 111, 108, 120, 105, 104, 111, 51, 122, 123,
+ 70, 196, 9, 73, 131, 184, 105, 108, 78, 183,
+ 184, 138, 111, 140, 78, 85, 196, 397, 106, 196,
+ 78, 130, 224, 403, 240, 113, 69, 106, 223, 76,
+ 105, 74, 102, 40, 41, 42, 111, 85, 86, 105,
+ 83, 111, 244, 223, 105, 111, 223, 104, 111, 108,
+ 120, 114, 268, 105, 309, 125, 183, 184, 106, 111,
+ 113, 131, 110, 279, 4, 5, 6, 283, 138, 108,
+ 140, 271, 249, 250, 251, 252, 253, 254, 255, 256,
+ 257, 258, 259, 260, 261, 262, 263, 264, 265, 266,
+ 267, 354, 137, 111, 137, 105, 114, 271, 300, 301,
+ 114, 111, 111, 358, 104, 114, 361, 309, 111, 111,
+ 305, 114, 114, 183, 184, 40, 41, 312, 9, 256,
+ 257, 258, 259, 76, 77, 305, 76, 77, 305, 384,
+ 89, 90, 312, 79, 80, 312, 105, 353, 40, 41,
+ 42, 83, 84, 213, 271, 119, 120, 121, 104, 40,
+ 41, 406, 43, 44, 111, 112, 358, 125, 374, 361,
+ 51, 52, 53, 9, 254, 255, 368, 252, 253, 124,
+ 365, 260, 261, 389, 126, 91, 93, 107, 114, 353,
+ 114, 104, 384, 104, 346, 365, 402, 114, 365, 104,
+ 112, 104, 104, 113, 40, 41, 107, 43, 44, 109,
+ 374, 271, 106, 106, 406, 51, 52, 53, 94, 95,
+ 96, 97, 98, 99, 100, 101, 102, 103, 288, 108,
+ 105, 113, 112, 107, 107, 113, 104, 113, 56, 111,
+ 76, 107, 113, 107, 104, 114, 105, 109, 105, 107,
+ 17, 114, 108, 114, 241, 262, 265, 263, 113, 264,
+ 103, 131, 379, 266, 96, 267, 131, 5, 187, 229,
+ 395, 348, 313, 403, 288, 348, 374, 78, -1, 378,
+ -1, -1, -1, -1, -1, -1, -1, 347, 348, -1,
+ -1, -1, -1, 353, 354, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 353, 354, -1, -1, -1, -1, 359,
- 360, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 318, -1, -1, -1, -1, -1, -1, -1,
- 380, -1, -1, -1, -1, 385, -1, -1, -1, -1,
+ -1, -1, -1, -1, 374, -1, -1, -1, -1, 379,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 402, -1, -1, -1, -1, -1, 408, -1,
- -1, 3, 4, 5, 6, 7, 8, 9, 10, 11,
- 12, 13, 14, 15, 16, 371, 18, 19, 20, 21,
- 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
- 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
- 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
- 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
- 72, 73, 74, 75, -1, 77, 78, 79, 80, 81,
- 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
- 92, 93, 94, 95, 96, 97, 98, 99, -1, -1,
- 102, 103, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 121,
- -1, -1, -1, 125, 126, -1, -1, -1, -1, 131,
- 132, 133, 134, 135, 3, 4, 5, 6, 7, 8,
+ -1, -1, -1, -1, -1, -1, -1, 397, -1, -1,
+ -1, -1, -1, 403, 3, 4, 5, 6, 7, 8,
9, 10, 11, 12, 13, 14, 15, 16, -1, 18,
19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
- 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
+ 39, 40, 41, -1, 43, 44, 45, 46, 47, 48,
49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
- 69, 70, 71, 72, 73, 74, 75, -1, 77, 78,
- 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
- 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
- 99, -1, -1, 102, 103, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 121, -1, -1, -1, 125, 126, -1, -1,
- -1, -1, 131, 132, 133, 134, 135, 3, 4, 5,
- 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, -1, 18, 19, 20, 21, 22, 23, 24, 25,
- 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
- 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
- 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
- 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
- 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
- -1, 77, 78, 79, 80, 81, 82, 83, 84, 85,
- 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
- 96, 97, 98, 99, -1, -1, 102, 103, -1, -1,
+ 69, 70, -1, 72, 73, 74, 75, 76, 77, 78,
+ 79, 80, 81, 82, -1, -1, 85, 86, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 121, -1, -1, -1, 125,
- -1, -1, -1, -1, -1, 131, 132, 133, 134, 135,
+ -1, -1, -1, -1, -1, 104, -1, -1, -1, 108,
+ 109, -1, -1, -1, -1, 114, 115, 116, 117, 118,
3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
13, 14, 15, 16, -1, 18, 19, 20, 21, 22,
23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
- 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
+ 33, 34, 35, 36, 37, 38, 39, 40, 41, -1,
43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
- 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
- 73, 74, 75, -1, 77, 78, 79, 80, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
- 93, 94, 95, 96, 97, 98, 99, -1, -1, 102,
- 103, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 121, -1,
- -1, -1, 125, -1, -1, -1, -1, -1, 131, 132,
- 133, 134, 135, 3, 4, 5, 6, 7, 8, 9,
- 10, 11, 12, 13, 14, 15, 16, -1, 18, 19,
- 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
- 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
- 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
- 60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
- 70, 71, 72, 73, 74, 75, -1, 77, 78, 79,
- 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
- 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
- -1, -1, 102, 103, -1, -1, -1, -1, -1, -1,
+ 63, 64, 65, 66, 67, 68, 69, 70, -1, 72,
+ 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
+ -1, -1, 85, 86, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 121, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 131, 132, 133, 134, 135, 3, 4, 5, 6,
- 7, 8, 9, 10, 11, 12, 13, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 25, 26,
+ -1, 104, -1, -1, -1, 108, 109, -1, -1, -1,
+ -1, 114, 115, 116, 117, 118, 3, 4, 5, 6,
+ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
+ -1, 18, 19, 20, 21, 22, 23, 24, 25, 26,
27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
- 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
+ 37, 38, 39, 40, 41, -1, 43, 44, 45, 46,
47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
- 57, 58, 59, 60, -1, 62, 63, 64, 65, 66,
- 67, 68, 69, 70, 71, 72, 73, 74, 75, -1,
- 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
- 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
- 97, 98, 99, -1, -1, 102, 103, -1, -1, -1,
+ 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
+ 67, 68, 69, 70, -1, 72, 73, 74, 75, 76,
+ 77, 78, 79, 80, 81, 82, -1, -1, 85, 86,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 3, 4, 5, 6, 121, 8, 9, 10, 11, 12,
- 13, -1, -1, -1, 131, 132, 133, 134, 135, -1,
- -1, -1, 25, 26, 27, 28, 29, 30, 31, 32,
- 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
- 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 59, 60, -1, 62,
- 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
- 73, 74, 75, -1, 77, 78, 79, 80, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
- 93, 94, 95, 96, 97, 98, 99, -1, -1, 102,
- 103, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 3, 4, 5, 6, 121, 8,
- 9, 10, 11, 12, 13, -1, -1, -1, -1, 132,
- 133, 134, 135, -1, -1, -1, 25, 26, 27, 28,
+ -1, -1, -1, -1, -1, -1, -1, 104, -1, -1,
+ -1, 108, -1, -1, -1, -1, -1, 114, 115, 116,
+ 117, 118, 3, 4, 5, 6, 7, 8, 9, 10,
+ 11, 12, 13, 14, 15, 16, -1, 18, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
+ 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
+ 41, -1, 43, 44, 45, 46, 47, 48, 49, 50,
+ 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
+ 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
+ -1, 72, 73, 74, 75, 76, 77, 78, 79, 80,
+ 81, 82, -1, -1, 85, 86, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 104, -1, -1, -1, 108, -1, -1,
+ -1, -1, -1, 114, 115, 116, 117, 118, 3, 4,
+ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+ 15, 16, -1, 18, 19, 20, 21, 22, 23, 24,
+ 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
+ 35, 36, 37, 38, 39, 40, 41, -1, 43, 44,
+ 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
+ 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
+ 65, 66, 67, 68, 69, 70, -1, 72, 73, 74,
+ 75, 76, 77, 78, 79, 80, 81, 82, -1, -1,
+ 85, 86, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 104,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 114,
+ 115, 116, 117, 118, 3, 4, 5, 6, 7, 8,
+ 9, 10, 11, 12, 13, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 25, 26, 27, 28,
29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
- 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
- 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
- 59, 60, -1, 62, 63, 64, 65, 66, 67, 68,
- 69, 70, 71, 72, 73, 74, 75, -1, 77, 78,
- 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
- 89, 90, 91, 92, 93, 94, -1, -1, 10, 11,
- 12, 13, -1, -1, -1, -1, -1, -1, -1, -1,
+ 39, 40, 41, -1, 43, 44, 45, 46, 47, 48,
+ 49, 50, 51, 52, 53, 54, 55, -1, 57, 58,
+ 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
+ 69, 70, -1, 72, 73, 74, 75, 76, 77, 78,
+ 79, 80, 81, 82, -1, -1, 85, 86, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 3, 4, 5, 6, 104, 8, 9, 10, 11,
+ 12, 13, -1, -1, -1, 114, 115, 116, 117, 118,
-1, -1, -1, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, -1, -1,
- -1, -1, 131, 45, 46, 47, 48, 49, 50, -1,
- -1, -1, -1, -1, -1, -1, -1, 59, 60, -1,
- 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
- 72, 73, 74, 75, -1, 77, 78, 79, 80, 81,
- 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
- -1, 93, 94, 95, 96, 97, 98, 99, -1, -1,
- 102, 103, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 121,
- -1, -1, 124, 10, 11, 12, 13, -1, -1, -1,
- 132, 133, 134, 135, -1, -1, -1, -1, 25, 26,
+ 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
+ -1, 43, 44, 45, 46, 47, 48, 49, 50, 51,
+ 52, 53, 54, 55, -1, 57, 58, 59, 60, 61,
+ 62, 63, 64, 65, 66, 67, 68, 69, 70, -1,
+ 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
+ 82, -1, -1, 85, 86, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 4, 5, 6,
+ -1, -1, 104, 10, 11, 12, 13, -1, -1, -1,
+ -1, -1, -1, 115, 116, 117, 118, -1, 25, 26,
27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
37, 38, 39, -1, -1, -1, -1, -1, 45, 46,
- 47, 48, 49, 50, -1, -1, -1, -1, -1, -1,
- -1, -1, 59, 60, -1, 62, 63, 64, 65, 66,
- 67, 68, 69, 70, 71, 72, 73, 74, 75, -1,
- 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
- 87, 88, 89, 90, 91, -1, 93, 94, 95, 96,
- 97, 98, 99, -1, -1, 102, 103, -1, -1, -1,
+ 47, 48, 49, 50, -1, -1, -1, 54, 55, -1,
+ 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
+ 67, 68, 69, 70, -1, 72, 73, 74, -1, 76,
+ 77, -1, -1, 10, 11, 12, 13, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 25, 26,
+ 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
+ 37, 38, 39, -1, -1, -1, -1, 114, 45, 46,
+ 47, 48, 49, 50, -1, -1, -1, 54, 55, -1,
+ 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
+ 67, 68, 69, 70, -1, 72, 73, 74, -1, 76,
+ 77, 78, 79, 80, 81, 82, -1, -1, 85, 86,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 121, -1, -1, 124, 10, 11,
- 12, 13, -1, -1, -1, 132, 133, 134, 135, -1,
- -1, -1, -1, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, -1, -1,
- -1, -1, -1, 45, 46, 47, 48, 49, 50, -1,
- -1, -1, -1, -1, -1, -1, -1, 59, 60, -1,
- 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
- 72, 73, 74, 75, -1, 77, 78, 79, 80, 81,
- 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
- -1, 93, 94, 95, 96, 97, 98, 99, -1, -1,
- 102, 103, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 121,
- 10, 11, 12, 13, -1, -1, -1, -1, -1, 131,
- 132, 133, 134, 135, -1, 25, 26, 27, 28, 29,
- 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
- -1, -1, -1, -1, -1, 45, 46, 47, 48, 49,
- 50, -1, -1, -1, -1, -1, -1, -1, -1, 59,
- 60, -1, 62, 63, 64, 65, 66, 67, 68, 69,
- 70, 71, 72, 73, 74, 75, -1, 77, 78, 79,
- 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
- 90, 91, -1, 93, 94, 95, 96, 97, 98, 99,
- -1, -1, 102, 103, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 104, -1, -1,
+ 107, 10, 11, 12, 13, -1, -1, -1, 115, 116,
+ 117, 118, -1, -1, -1, -1, 25, 26, 27, 28,
+ 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
+ 39, -1, -1, -1, -1, -1, 45, 46, 47, 48,
+ 49, 50, -1, -1, -1, 54, 55, -1, 57, 58,
+ 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
+ 69, 70, -1, 72, 73, 74, -1, 76, 77, 78,
+ 79, 80, 81, 82, -1, -1, 85, 86, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 121, -1, -1, 124, 10, 11, 12, 13, -1,
- -1, -1, 132, 133, 134, 135, -1, -1, -1, -1,
- 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
- 35, 36, 37, 38, 39, -1, -1, -1, -1, -1,
- 45, 46, 47, 48, 49, 50, -1, -1, -1, -1,
- -1, -1, -1, -1, 59, 60, -1, 62, 63, 64,
- 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
- 75, -1, 77, 78, 79, 80, 81, 82, 83, 84,
- 85, 86, 87, 88, 89, 90, 91, -1, 93, 94,
- 95, 96, 97, 98, 99, -1, -1, 102, 103, -1,
+ -1, -1, -1, -1, -1, 104, -1, -1, 107, 10,
+ 11, 12, 13, -1, -1, -1, 115, 116, 117, 118,
+ -1, -1, -1, -1, 25, 26, 27, 28, 29, 30,
+ 31, 32, 33, 34, 35, 36, 37, 38, 39, -1,
+ -1, -1, -1, -1, 45, 46, 47, 48, 49, 50,
+ -1, -1, -1, 54, 55, -1, 57, 58, 59, 60,
+ 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
+ -1, 72, 73, 74, -1, 76, 77, 78, 79, 80,
+ 81, 82, -1, -1, 85, 86, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 121, 10, 11, 12,
- 13, -1, -1, -1, -1, -1, -1, 132, 133, 134,
- 135, -1, 25, 26, 27, 28, 29, 30, 31, 32,
+ -1, -1, -1, 104, 10, 11, 12, 13, -1, -1,
+ -1, -1, -1, 114, 115, 116, 117, 118, -1, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
+ 36, 37, 38, 39, -1, -1, -1, -1, -1, 45,
+ 46, 47, 48, 49, 50, -1, -1, -1, 54, 55,
+ -1, 57, 58, 59, 60, 61, 62, 63, 64, 65,
+ 66, 67, 68, 69, 70, -1, 72, 73, 74, -1,
+ 76, 77, 78, 79, 80, 81, 82, -1, -1, 85,
+ 86, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 104, -1,
+ -1, 107, 10, 11, 12, 13, -1, -1, -1, 115,
+ 116, 117, 118, -1, -1, -1, -1, 25, 26, 27,
+ 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
+ 38, 39, -1, -1, -1, -1, -1, 45, 46, 47,
+ 48, 49, 50, -1, -1, -1, 54, 55, -1, 57,
+ 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
+ 68, 69, 70, -1, 72, 73, 74, -1, 76, 77,
+ 78, 79, 80, 81, 82, -1, -1, 85, 86, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 104, 10, 11, 12,
+ 13, -1, -1, -1, -1, -1, -1, 115, 116, 117,
+ 118, -1, 25, 26, 27, 28, 29, 30, 31, 32,
33, 34, 35, 36, 37, 38, 39, -1, -1, -1,
-1, -1, 45, 46, 47, 48, 49, 50, -1, -1,
- -1, -1, -1, -1, -1, -1, 59, 60, -1, 62,
- 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
- 73, 74, 75, -1, 77, 78, 79, 80, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 90, 91, -1,
- 93, 94, 95, 96, 97, 98, 99, -1, -1, 102,
- 103, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 3, 4, 5, 6, 121, 8,
- 9, 10, 11, 12, 13, -1, -1, -1, -1, 132,
- 133, 134, 135, -1, -1, -1, 25, 26, 27, 28,
- 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
- 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
- 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
- 59, 60, -1, 62, 63, 64, 65, 66, 67, 68,
- 69, 70, 71, 72, 73, 74, 75, -1, 77, 78,
- 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
- 89, 90, 91, 92, -1, 94, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 3, 4, 5, 6,
- -1, 8, 9, 10, 11, 12, 13, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 126, 25, 26,
- 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
- 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
- 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
- 57, 58, 59, 60, -1, 62, 63, 64, 65, 66,
- 67, 68, 69, 70, 71, 72, 73, 74, 75, -1,
- 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
- 87, 88, 89, 90, 91, 92, -1, 94, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 3, 4,
- 5, 6, -1, 8, 9, 10, 11, 12, 13, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 126,
- 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
- 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
- 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
- 55, 56, 57, 58, 59, 60, -1, 62, 63, 64,
- 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
- 75, -1, 77, 78, 79, 80, 81, 82, 83, 84,
- 85, 86, 87, 88, 89, 90, 91, 92, -1, 94,
- -1, -1, -1, -1, -1, -1, -1, 0, -1, -1,
- 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
- 13, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 126, 25, 26, 27, 28, 29, 30, 31, 32,
- 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
- 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 59, 60, -1, 62,
- 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
- 73, 74, 75, -1, 77, 78, 79, 80, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
- -1, 94, 3, 4, 5, 6, 7, 8, 9, 10,
+ -1, 54, 55, -1, 57, 58, 59, 60, 61, 62,
+ 63, 64, 65, 66, 67, 68, 69, 70, -1, 72,
+ 73, 74, -1, 76, 77, 78, 79, 80, 81, 82,
+ -1, -1, 85, 86, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
+ 6, 104, 8, 9, 10, 11, 12, 13, -1, -1,
+ -1, -1, 115, 116, 117, 118, -1, -1, -1, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
+ 36, 37, 38, 39, 40, 41, -1, 43, 44, 45,
+ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
+ -1, 57, 58, 59, 60, 61, 62, 63, 64, 65,
+ 66, 67, 68, 69, 70, -1, 72, 73, 74, 75,
+ -1, 77, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 3, 4, 5, 6, -1, 8, 9, 10,
+ 11, 12, 13, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 109, 25, 26, 27, 28, 29, 30,
+ 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
+ 41, -1, 43, 44, 45, 46, 47, 48, 49, 50,
+ 51, 52, 53, 54, 55, -1, 57, 58, 59, 60,
+ 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
+ -1, 72, 73, 74, 75, -1, 77, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
+ 6, -1, 8, 9, 10, 11, 12, 13, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 109, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
+ 36, 37, 38, 39, 40, 41, -1, 43, 44, 45,
+ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
+ -1, 57, 58, 59, 60, 61, 62, 63, 64, 65,
+ 66, 67, 68, 69, 70, -1, 72, 73, 74, 75,
+ -1, 77, -1, -1, -1, -1, -1, -1, -1, 0,
+ -1, -1, 3, 4, 5, 6, 7, 8, 9, 10,
+ 11, 12, 13, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 109, 25, 26, 27, 28, 29, 30,
+ 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
+ 41, -1, 43, 44, 45, 46, 47, 48, 49, 50,
+ 51, 52, 53, 54, 55, -1, 57, 58, 59, 60,
+ 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
+ -1, 72, 73, 74, 75, -1, 77, 3, 4, 5,
+ 6, 7, 8, 9, 10, 11, 12, 13, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
+ 36, 37, 38, 39, 40, 41, -1, 43, 44, 45,
+ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
+ -1, 57, 58, 59, 60, 61, 62, 63, 64, 65,
+ 66, 67, 68, 69, 70, -1, 72, 73, 74, 75,
+ -1, 77, 3, 4, 5, 6, -1, 8, 9, 10,
11, 12, 13, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, 25, 26, 27, 28, 29, 30,
31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
- 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
- 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
- -1, 62, 63, 64, 65, 66, 67, 68, 69, 70,
- 71, 72, 73, 74, 75, -1, 77, 78, 79, 80,
- 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
- 91, 92, -1, 94, 3, 4, 5, 6, -1, 8,
- 9, 10, 11, 12, 13, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 25, 26, 27, 28,
- 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
- 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
- 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
- 59, 60, -1, 62, 63, 64, 65, 66, 67, 68,
- 69, 70, 71, 72, 73, 74, 75, -1, 77, 78,
- 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
- 89, 90, 91, 92, -1, 94, 10, 11, 12, 13,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 25, 26, 27, 28, 29, 30, 31, 32, 33,
- 34, 35, 36, 37, 38, 39, -1, -1, -1, -1,
- -1, 45, 46, 47, 48, 49, 50, -1, -1, -1,
- -1, -1, -1, -1, -1, 59, 60, -1, 62, 63,
- 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
- 74, 75, -1, 77, 78, 79, 80, 81, 82, 83,
- 84, 85, 86, 87, 88, 89, 90, 91, -1, 93,
- 94, 10, 11, 12, 13, 99, -1, -1, -1, -1,
+ 41, -1, 43, 44, 45, 46, 47, 48, 49, 50,
+ 51, 52, 53, 54, 55, -1, 57, 58, 59, 60,
+ 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
+ -1, 72, 73, 74, 75, -1, 77, 4, 5, 6,
+ -1, -1, -1, 10, 11, 12, 13, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 25, 26,
+ 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
+ 37, 38, 39, -1, -1, -1, -1, -1, 45, 46,
+ 47, 48, 49, 50, -1, -1, -1, 54, 55, -1,
+ 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
+ 67, 68, 69, 70, -1, 72, 73, 74, -1, -1,
+ 77, 10, 11, 12, 13, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, 25, 26, 27, 28,
29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
39, -1, -1, -1, -1, -1, 45, 46, 47, 48,
- 49, 50, -1, -1, -1, -1, -1, -1, -1, -1,
- 59, 60, -1, 62, 63, 64, 65, 66, 67, 68,
- 69, 70, 71, 72, 73, 74, 75, -1, 77, 78,
- 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
- 89, 90, 91, -1, -1, 94
+ 49, 50, -1, -1, -1, 54, 55, -1, 57, 58,
+ 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
+ 69, 70, -1, 72, 73, 74, -1, 76, 77, 10,
+ 11, 12, 13, 82, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 25, 26, 27, 28, 29, 30,
+ 31, 32, 33, 34, 35, 36, 37, 38, 39, -1,
+ -1, -1, -1, -1, 45, 46, 47, 48, 49, 50,
+ -1, -1, -1, 54, 55, -1, 57, 58, 59, 60,
+ 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
+ -1, 72, 73, 74, -1, -1, 77
};
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1580,81 +1484,79 @@ static const yytype_uint8 yystos[] =
{
0, 3, 4, 5, 6, 7, 8, 9, 10, 11,
12, 13, 25, 26, 27, 28, 29, 30, 31, 32,
- 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
- 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 59, 60, 62, 63,
- 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
- 74, 75, 77, 78, 79, 80, 81, 82, 83, 84,
- 85, 86, 87, 88, 89, 90, 91, 92, 94, 177,
- 178, 179, 180, 181, 185, 186, 187, 188, 189, 190,
- 191, 192, 193, 194, 195, 198, 199, 200, 235, 236,
- 237, 194, 93, 94, 125, 146, 121, 131, 238, 122,
- 128, 182, 183, 184, 189, 193, 128, 131, 93, 146,
- 93, 131, 176, 191, 193, 123, 0, 236, 198, 202,
- 125, 93, 196, 197, 125, 218, 183, 182, 184, 146,
- 146, 121, 123, 130, 125, 131, 189, 193, 203, 204,
- 93, 95, 96, 97, 98, 99, 102, 103, 121, 124,
- 132, 133, 134, 135, 147, 148, 149, 151, 152, 153,
- 154, 155, 156, 157, 158, 159, 160, 161, 162, 163,
- 164, 165, 166, 167, 168, 169, 170, 171, 175, 198,
- 131, 203, 201, 130, 122, 128, 14, 15, 16, 18,
- 19, 20, 21, 22, 23, 24, 61, 125, 126, 131,
- 158, 171, 172, 174, 177, 178, 198, 208, 209, 210,
- 211, 219, 220, 221, 223, 225, 227, 234, 123, 123,
- 130, 124, 175, 172, 207, 193, 146, 205, 206, 126,
- 204, 158, 158, 174, 102, 103, 123, 127, 122, 122,
- 128, 60, 172, 121, 158, 136, 137, 138, 133, 135,
- 100, 101, 104, 105, 139, 140, 106, 107, 143, 142,
- 141, 108, 110, 109, 144, 124, 126, 203, 96, 97,
- 197, 131, 131, 229, 121, 121, 131, 131, 174, 121,
- 175, 129, 121, 126, 212, 111, 112, 113, 114, 115,
- 116, 117, 118, 119, 120, 130, 173, 128, 131, 126,
- 209, 175, 124, 175, 207, 130, 124, 205, 123, 128,
- 131, 93, 131, 122, 150, 174, 93, 99, 153, 172,
- 158, 158, 158, 160, 160, 161, 161, 162, 162, 162,
- 162, 163, 163, 164, 165, 166, 167, 168, 169, 174,
- 126, 215, 216, 217, 230, 174, 131, 174, 129, 228,
- 219, 172, 172, 124, 130, 124, 207, 130, 131, 175,
- 206, 123, 131, 124, 129, 61, 218, 210, 208, 220,
- 231, 122, 122, 174, 187, 189, 226, 213, 207, 130,
- 207, 124, 175, 172, 121, 226, 232, 233, 215, 222,
- 224, 146, 122, 126, 207, 124, 174, 131, 122, 17,
- 211, 130, 210, 214, 218, 131, 122, 174, 214, 215,
- 207, 131
+ 33, 34, 35, 36, 37, 38, 39, 40, 41, 43,
+ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
+ 54, 55, 57, 58, 59, 60, 61, 62, 63, 64,
+ 65, 66, 67, 68, 69, 70, 72, 73, 74, 75,
+ 77, 160, 161, 162, 163, 164, 169, 170, 171, 172,
+ 174, 175, 176, 177, 178, 181, 182, 183, 218, 219,
+ 220, 44, 76, 172, 175, 177, 40, 41, 76, 77,
+ 108, 129, 104, 114, 221, 105, 111, 9, 40, 41,
+ 42, 166, 167, 173, 111, 114, 76, 129, 175, 76,
+ 114, 159, 176, 181, 175, 106, 0, 219, 175, 181,
+ 185, 108, 76, 179, 180, 108, 201, 166, 165, 168,
+ 176, 167, 129, 104, 106, 113, 108, 3, 174, 176,
+ 186, 187, 76, 78, 79, 80, 81, 82, 85, 86,
+ 104, 107, 115, 116, 117, 118, 130, 131, 132, 134,
+ 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
+ 145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
+ 158, 181, 114, 186, 184, 113, 105, 111, 14, 15,
+ 16, 18, 19, 20, 21, 22, 23, 24, 56, 108,
+ 109, 114, 141, 154, 155, 157, 160, 161, 181, 191,
+ 192, 193, 194, 202, 203, 204, 206, 208, 210, 217,
+ 129, 165, 168, 106, 113, 107, 158, 155, 190, 176,
+ 129, 188, 189, 109, 187, 141, 141, 157, 85, 86,
+ 106, 110, 105, 105, 111, 55, 155, 104, 141, 119,
+ 120, 121, 116, 118, 83, 84, 87, 88, 122, 123,
+ 89, 90, 126, 125, 124, 91, 93, 92, 127, 107,
+ 109, 186, 79, 80, 180, 114, 114, 212, 104, 104,
+ 114, 114, 157, 104, 158, 112, 104, 109, 195, 94,
+ 95, 96, 97, 98, 99, 100, 101, 102, 103, 113,
+ 156, 111, 114, 109, 192, 106, 107, 158, 190, 113,
+ 107, 188, 106, 111, 114, 76, 114, 105, 133, 157,
+ 76, 82, 136, 155, 141, 141, 141, 143, 143, 144,
+ 144, 145, 145, 145, 145, 146, 146, 147, 148, 149,
+ 150, 151, 152, 157, 109, 198, 199, 200, 213, 157,
+ 114, 157, 112, 211, 202, 155, 155, 158, 113, 107,
+ 190, 113, 114, 158, 189, 106, 114, 107, 112, 56,
+ 201, 193, 191, 203, 214, 105, 105, 157, 171, 174,
+ 209, 196, 107, 190, 113, 190, 107, 158, 155, 104,
+ 209, 215, 216, 198, 205, 207, 129, 105, 109, 190,
+ 107, 157, 114, 105, 17, 194, 113, 193, 197, 201,
+ 114, 105, 157, 197, 198, 190, 114
};
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
static const yytype_uint8 yyr1[] =
{
- 0, 145, 146, 146, 147, 148, 148, 148, 148, 148,
- 148, 149, 149, 149, 149, 149, 149, 150, 151, 152,
- 152, 153, 153, 154, 154, 155, 155, 156, 157, 157,
- 157, 158, 158, 158, 158, 159, 159, 159, 159, 160,
- 160, 160, 160, 161, 161, 161, 162, 162, 162, 163,
- 163, 163, 163, 163, 164, 164, 164, 165, 165, 166,
- 166, 167, 167, 168, 168, 169, 169, 170, 170, 171,
- 171, 172, 172, 173, 173, 173, 173, 173, 173, 173,
- 173, 173, 173, 173, 174, 174, 175, 176, 177, 177,
- 177, 177, 177, 177, 177, 177, 178, 179, 179, 180,
- 180, 181, 182, 182, 183, 183, 183, 183, 184, 185,
- 185, 185, 185, 185, 185, 186, 186, 186, 186, 186,
- 186, 187, 187, 188, 188, 189, 189, 190, 191, 191,
- 191, 191, 191, 192, 192, 192, 192, 192, 192, 192,
- 192, 192, 192, 192, 192, 192, 193, 194, 194, 194,
- 195, 196, 196, 197, 197, 197, 198, 198, 198, 199,
- 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 201, 200, 202, 200,
- 203, 203, 204, 204, 205, 205, 206, 206, 207, 208,
- 209, 209, 210, 210, 210, 210, 210, 210, 210, 211,
- 212, 213, 211, 214, 214, 216, 215, 217, 215, 218,
- 218, 219, 219, 220, 220, 221, 222, 222, 224, 223,
- 225, 225, 226, 226, 228, 227, 229, 227, 230, 227,
- 231, 231, 232, 232, 233, 233, 234, 234, 234, 234,
- 234, 235, 235, 236, 236, 238, 237
+ 0, 128, 129, 129, 130, 131, 131, 131, 131, 131,
+ 131, 132, 132, 132, 132, 132, 132, 133, 134, 135,
+ 135, 136, 136, 137, 137, 138, 138, 139, 140, 140,
+ 140, 141, 141, 141, 141, 142, 142, 142, 142, 143,
+ 143, 143, 143, 144, 144, 144, 145, 145, 145, 146,
+ 146, 146, 146, 146, 147, 147, 147, 148, 148, 149,
+ 149, 150, 150, 151, 151, 152, 152, 153, 153, 154,
+ 154, 155, 155, 156, 156, 156, 156, 156, 156, 156,
+ 156, 156, 156, 156, 157, 157, 158, 159, 160, 160,
+ 160, 160, 160, 160, 160, 161, 162, 162, 163, 163,
+ 164, 165, 165, 166, 166, 166, 166, 167, 167, 167,
+ 167, 168, 169, 169, 169, 169, 169, 169, 170, 170,
+ 170, 170, 170, 170, 170, 171, 171, 172, 172, 173,
+ 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
+ 175, 175, 175, 175, 175, 175, 176, 176, 177, 177,
+ 177, 178, 179, 179, 180, 180, 180, 181, 181, 181,
+ 182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
+ 182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
+ 182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
+ 182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
+ 182, 182, 182, 182, 182, 184, 183, 185, 183, 186,
+ 186, 187, 187, 188, 188, 189, 189, 190, 191, 192,
+ 192, 193, 193, 193, 193, 193, 193, 193, 194, 195,
+ 196, 194, 197, 197, 199, 198, 200, 198, 201, 201,
+ 202, 202, 203, 203, 204, 205, 205, 207, 206, 208,
+ 208, 209, 209, 211, 210, 212, 210, 213, 210, 214,
+ 214, 215, 215, 216, 216, 217, 217, 217, 217, 217,
+ 218, 218, 219, 219, 221, 220
};
/* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
@@ -1669,26 +1571,25 @@ static const yytype_uint8 yyr2[] =
3, 1, 3, 1, 3, 1, 3, 1, 3, 1,
5, 1, 3, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 3, 1, 2, 2, 2,
- 4, 5, 6, 9, 2, 3, 2, 1, 1, 2,
- 3, 3, 2, 5, 2, 1, 2, 1, 1, 1,
- 3, 6, 7, 8, 5, 1, 2, 5, 6, 7,
- 4, 1, 2, 1, 1, 1, 2, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 4, 1, 3, 1, 3, 3, 1, 3, 4, 1,
+ 4, 5, 6, 9, 2, 2, 1, 1, 2, 3,
+ 3, 2, 5, 3, 2, 3, 2, 0, 1, 1,
+ 1, 1, 1, 3, 6, 7, 8, 5, 1, 2,
+ 5, 6, 7, 4, 2, 1, 2, 1, 1, 1,
+ 1, 1, 2, 1, 2, 1, 1, 2, 2, 3,
+ 1, 1, 1, 2, 2, 1, 1, 2, 1, 1,
+ 1, 4, 1, 3, 1, 3, 3, 1, 3, 4,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 0, 6, 0, 5,
- 1, 2, 3, 4, 1, 3, 1, 4, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
- 0, 0, 5, 1, 1, 0, 2, 0, 2, 2,
- 3, 1, 2, 1, 2, 5, 3, 1, 0, 6,
- 3, 2, 1, 4, 0, 6, 0, 8, 0, 7,
- 1, 1, 1, 0, 2, 3, 2, 2, 2, 3,
- 2, 1, 2, 1, 1, 0, 3
+ 1, 1, 1, 1, 1, 0, 6, 0, 5, 1,
+ 2, 3, 4, 1, 3, 1, 4, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 2, 0,
+ 0, 5, 1, 1, 0, 2, 0, 2, 2, 3,
+ 1, 2, 1, 2, 5, 3, 1, 0, 6, 3,
+ 2, 1, 4, 0, 6, 0, 8, 0, 7, 1,
+ 1, 1, 0, 2, 3, 2, 2, 2, 3, 2,
+ 1, 2, 1, 1, 0, 3
};
@@ -2664,7 +2565,7 @@ yyreduce:
const TType *type = new TType((yyvsp[0].interm.intermTypedNode)->getType());
(yyvsp[-1].interm.function)->addParameter(TConstParameter(type));
(yyval.interm).function = (yyvsp[-1].interm.function);
- (yyval.interm).nodePair.node1 = TIntermediate::MakeAggregate((yyvsp[0].interm.intermTypedNode), (yylsp[0]));
+ (yyval.interm).nodePair.node1 = context->intermediate.makeAggregate((yyvsp[0].interm.intermTypedNode), (yylsp[0]));
}
break;
@@ -3165,7 +3066,10 @@ yyreduce:
case 89:
{
- (yyval.interm.intermNode) = (yyvsp[-1].interm).intermDeclaration;
+ TIntermAggregate *aggNode = (yyvsp[-1].interm).intermAggregate;
+ if (aggNode && aggNode->getOp() == EOpNull)
+ aggNode->setOp(EOpDeclaration);
+ (yyval.interm.intermNode) = aggNode;
}
break;
@@ -3177,7 +3081,7 @@ yyreduce:
context->error((yylsp[-3]), "precision is not supported in fragment shader", "highp");
}
if (!context->symbolTable.setDefaultPrecision( (yyvsp[-1].interm.type), (yyvsp[-2].interm.precision) )) {
- context->error((yylsp[-3]), "illegal type argument for default precision qualifier", getBasicString((yyvsp[-1].interm.type).getBasicType()));
+ context->error((yylsp[-3]), "illegal type argument for default precision qualifier", getBasicString((yyvsp[-1].interm.type).type));
}
(yyval.interm.intermNode) = 0;
}
@@ -3187,8 +3091,8 @@ yyreduce:
case 91:
{
- ES3_OR_NEWER((yyvsp[-3].lex).string->c_str(), (yylsp[-4]), "interface blocks");
- (yyval.interm.intermNode) = context->addInterfaceBlock(*(yyvsp[-4].interm.typeQualifierBuilder), (yylsp[-3]), *(yyvsp[-3].lex).string, (yyvsp[-2].interm.fieldList), NULL, (yyloc), NULL, (yyloc));
+ ES3_OR_NEWER(getQualifierString((yyvsp[-4].interm.type).qualifier), (yylsp[-4]), "interface blocks");
+ (yyval.interm.intermNode) = context->addInterfaceBlock((yyvsp[-4].interm.type), (yylsp[-3]), *(yyvsp[-3].lex).string, (yyvsp[-2].interm.fieldList), NULL, (yyloc), NULL, (yyloc));
}
break;
@@ -3196,8 +3100,8 @@ yyreduce:
case 92:
{
- ES3_OR_NEWER((yyvsp[-4].lex).string->c_str(), (yylsp[-5]), "interface blocks");
- (yyval.interm.intermNode) = context->addInterfaceBlock(*(yyvsp[-5].interm.typeQualifierBuilder), (yylsp[-4]), *(yyvsp[-4].lex).string, (yyvsp[-3].interm.fieldList), (yyvsp[-1].lex).string, (yylsp[-1]), NULL, (yyloc));
+ ES3_OR_NEWER(getQualifierString((yyvsp[-5].interm.type).qualifier), (yylsp[-5]), "interface blocks");
+ (yyval.interm.intermNode) = context->addInterfaceBlock((yyvsp[-5].interm.type), (yylsp[-4]), *(yyvsp[-4].lex).string, (yyvsp[-3].interm.fieldList), (yyvsp[-1].lex).string, (yylsp[-1]), NULL, (yyloc));
}
break;
@@ -3205,8 +3109,8 @@ yyreduce:
case 93:
{
- ES3_OR_NEWER((yyvsp[-7].lex).string->c_str(), (yylsp[-8]), "interface blocks");
- (yyval.interm.intermNode) = context->addInterfaceBlock(*(yyvsp[-8].interm.typeQualifierBuilder), (yylsp[-7]), *(yyvsp[-7].lex).string, (yyvsp[-6].interm.fieldList), (yyvsp[-4].lex).string, (yylsp[-4]), (yyvsp[-2].interm.intermTypedNode), (yylsp[-3]));
+ ES3_OR_NEWER(getQualifierString((yyvsp[-8].interm.type).qualifier), (yylsp[-8]), "interface blocks");
+ (yyval.interm.intermNode) = context->addInterfaceBlock((yyvsp[-8].interm.type), (yylsp[-7]), *(yyvsp[-7].lex).string, (yyvsp[-6].interm.fieldList), (yyvsp[-4].lex).string, (yylsp[-4]), (yyvsp[-2].interm.intermTypedNode), (yylsp[-3]));
}
break;
@@ -3214,7 +3118,7 @@ yyreduce:
case 94:
{
- context->parseGlobalLayoutQualifier(*(yyvsp[-1].interm.typeQualifierBuilder));
+ context->parseGlobalLayoutQualifier((yyvsp[-1].interm.type));
(yyval.interm.intermNode) = 0;
}
@@ -3223,7 +3127,7 @@ yyreduce:
case 95:
{
- (yyval.interm.intermNode) = context->parseInvariantDeclaration(*(yyvsp[-2].interm.typeQualifierBuilder), (yylsp[-1]), (yyvsp[-1].lex).string, (yyvsp[-1].lex).symbol);
+ (yyval.interm).function = context->parseFunctionDeclarator((yylsp[0]), (yyvsp[-1].interm.function));
}
break;
@@ -3231,8 +3135,7 @@ yyreduce:
case 96:
{
- (yyval.interm).function = context->parseFunctionDeclarator((yylsp[0]), (yyvsp[-1].interm.function));
- context->exitFunctionDeclaration();
+ (yyval.interm.function) = (yyvsp[0].interm.function);
}
break;
@@ -3248,14 +3151,6 @@ yyreduce:
case 98:
{
- (yyval.interm.function) = (yyvsp[0].interm.function);
- }
-
- break;
-
- case 99:
-
- {
// Add the parameter
(yyval.interm.function) = (yyvsp[-1].interm.function);
if ((yyvsp[0].interm).param.type->getBasicType() != EbtVoid)
@@ -3266,7 +3161,7 @@ yyreduce:
break;
- case 100:
+ case 99:
{
//
@@ -3288,21 +3183,20 @@ yyreduce:
break;
- case 101:
+ case 100:
{
(yyval.interm.function) = context->parseFunctionHeader((yyvsp[-2].interm.type), (yyvsp[-1].lex).string, (yylsp[-1]));
context->symbolTable.push();
- context->enterFunctionDeclaration();
}
break;
- case 102:
+ case 101:
{
- if ((yyvsp[-1].interm.type).getBasicType() == EbtVoid) {
+ if ((yyvsp[-1].interm.type).type == EbtVoid) {
context->error((yylsp[0]), "illegal use of type 'void'", (yyvsp[0].lex).string->c_str());
}
context->checkIsNotReserved((yylsp[0]), *(yyvsp[0].lex).string);
@@ -3312,7 +3206,7 @@ yyreduce:
break;
- case 103:
+ case 102:
{
// Check that we can make an array out of this type
@@ -3331,11 +3225,21 @@ yyreduce:
break;
+ case 103:
+
+ {
+ (yyval.interm) = (yyvsp[0].interm);
+ context->checkIsParameterQualifierValid((yylsp[0]), (yyvsp[-2].interm.qualifier), (yyvsp[-1].interm.qualifier), (yyval.interm).param.type);
+ }
+
+ break;
+
case 104:
{
(yyval.interm) = (yyvsp[0].interm);
- context->checkIsParameterQualifierValid((yylsp[0]), *(yyvsp[-1].interm.typeQualifierBuilder), (yyvsp[0].interm).param.type);
+ context->checkOutParameterIsNotSampler((yylsp[0]), (yyvsp[-1].interm.qualifier), *(yyvsp[0].interm).param.type);
+ context->checkIsParameterQualifierValid((yylsp[0]), EvqTemporary, (yyvsp[-1].interm.qualifier), (yyval.interm).param.type);
}
break;
@@ -3344,7 +3248,7 @@ yyreduce:
{
(yyval.interm) = (yyvsp[0].interm);
- (yyval.interm).param.type->setQualifier(EvqIn);
+ context->checkIsParameterQualifierValid((yylsp[0]), (yyvsp[-2].interm.qualifier), (yyvsp[-1].interm.qualifier), (yyval.interm).param.type);
}
break;
@@ -3353,7 +3257,8 @@ yyreduce:
{
(yyval.interm) = (yyvsp[0].interm);
- context->checkIsParameterQualifierValid((yylsp[0]), *(yyvsp[-1].interm.typeQualifierBuilder), (yyvsp[0].interm).param.type);
+ context->checkOutParameterIsNotSampler((yylsp[0]), (yyvsp[-1].interm.qualifier), *(yyvsp[0].interm).param.type);
+ context->checkIsParameterQualifierValid((yylsp[0]), EvqTemporary, (yyvsp[-1].interm.qualifier), (yyval.interm).param.type);
}
break;
@@ -3361,8 +3266,7 @@ yyreduce:
case 107:
{
- (yyval.interm) = (yyvsp[0].interm);
- (yyval.interm).param.type->setQualifier(EvqIn);
+ (yyval.interm.qualifier) = EvqIn;
}
break;
@@ -3370,8 +3274,7 @@ yyreduce:
case 108:
{
- TParameter param = { 0, new TType((yyvsp[0].interm.type)) };
- (yyval.interm).param = param;
+ (yyval.interm.qualifier) = EvqIn;
}
break;
@@ -3379,7 +3282,7 @@ yyreduce:
case 109:
{
- (yyval.interm) = (yyvsp[0].interm);
+ (yyval.interm.qualifier) = EvqOut;
}
break;
@@ -3387,8 +3290,7 @@ yyreduce:
case 110:
{
- (yyval.interm) = (yyvsp[-2].interm);
- context->parseDeclarator((yyval.interm).type, (yylsp[0]), *(yyvsp[0].lex).string, (yyval.interm).intermDeclaration);
+ (yyval.interm.qualifier) = EvqInOut;
}
break;
@@ -3396,8 +3298,8 @@ yyreduce:
case 111:
{
- (yyval.interm) = (yyvsp[-5].interm);
- context->parseArrayDeclarator((yyval.interm).type, (yylsp[-3]), *(yyvsp[-3].lex).string, (yylsp[-2]), (yyvsp[-1].interm.intermTypedNode), (yyval.interm).intermDeclaration);
+ TParameter param = { 0, new TType((yyvsp[0].interm.type)) };
+ (yyval.interm).param = param;
}
break;
@@ -3405,9 +3307,7 @@ yyreduce:
case 112:
{
- ES3_OR_NEWER("[]", (yylsp[-4]), "implicitly sized array");
- (yyval.interm) = (yyvsp[-6].interm);
- context->parseArrayInitDeclarator((yyval.interm).type, (yylsp[-4]), *(yyvsp[-4].lex).string, (yylsp[-3]), nullptr, (yylsp[-1]), (yyvsp[0].interm.intermTypedNode), (yyval.interm).intermDeclaration);
+ (yyval.interm) = (yyvsp[0].interm);
}
break;
@@ -3415,9 +3315,8 @@ yyreduce:
case 113:
{
- ES3_OR_NEWER("=", (yylsp[-1]), "first-class arrays (array initializer)");
- (yyval.interm) = (yyvsp[-7].interm);
- context->parseArrayInitDeclarator((yyval.interm).type, (yylsp[-5]), *(yyvsp[-5].lex).string, (yylsp[-4]), (yyvsp[-3].interm.intermTypedNode), (yylsp[-1]), (yyvsp[0].interm.intermTypedNode), (yyval.interm).intermDeclaration);
+ (yyval.interm) = (yyvsp[-2].interm);
+ (yyval.interm).intermAggregate = context->parseDeclarator((yyval.interm).type, (yyvsp[-2].interm).intermAggregate, (yylsp[0]), *(yyvsp[0].lex).string);
}
break;
@@ -3425,8 +3324,8 @@ yyreduce:
case 114:
{
- (yyval.interm) = (yyvsp[-4].interm);
- context->parseInitDeclarator((yyval.interm).type, (yylsp[-2]), *(yyvsp[-2].lex).string, (yylsp[-1]), (yyvsp[0].interm.intermTypedNode), (yyval.interm).intermDeclaration);
+ (yyval.interm) = (yyvsp[-5].interm);
+ (yyval.interm).intermAggregate = context->parseArrayDeclarator((yyval.interm).type, (yyvsp[-5].interm).intermAggregate, (yylsp[-3]), *(yyvsp[-3].lex).string, (yylsp[-2]), (yyvsp[-1].interm.intermTypedNode));
}
break;
@@ -3434,8 +3333,9 @@ yyreduce:
case 115:
{
- (yyval.interm).type = (yyvsp[0].interm.type);
- (yyval.interm).intermDeclaration = context->parseSingleDeclaration((yyval.interm).type, (yylsp[0]), "");
+ ES3_OR_NEWER("[]", (yylsp[-4]), "implicitly sized array");
+ (yyval.interm) = (yyvsp[-6].interm);
+ (yyval.interm).intermAggregate = context->parseArrayInitDeclarator((yyval.interm).type, (yyvsp[-6].interm).intermAggregate, (yylsp[-4]), *(yyvsp[-4].lex).string, (yylsp[-3]), nullptr, (yylsp[-1]), (yyvsp[0].interm.intermTypedNode));
}
break;
@@ -3443,8 +3343,9 @@ yyreduce:
case 116:
{
- (yyval.interm).type = (yyvsp[-1].interm.type);
- (yyval.interm).intermDeclaration = context->parseSingleDeclaration((yyval.interm).type, (yylsp[0]), *(yyvsp[0].lex).string);
+ ES3_OR_NEWER("=", (yylsp[-1]), "first-class arrays (array initializer)");
+ (yyval.interm) = (yyvsp[-7].interm);
+ (yyval.interm).intermAggregate = context->parseArrayInitDeclarator((yyval.interm).type, (yyvsp[-7].interm).intermAggregate, (yylsp[-5]), *(yyvsp[-5].lex).string, (yylsp[-4]), (yyvsp[-3].interm.intermTypedNode), (yylsp[-1]), (yyvsp[0].interm.intermTypedNode));
}
break;
@@ -3452,8 +3353,8 @@ yyreduce:
case 117:
{
- (yyval.interm).type = (yyvsp[-4].interm.type);
- (yyval.interm).intermDeclaration = context->parseSingleArrayDeclaration((yyval.interm).type, (yylsp[-3]), *(yyvsp[-3].lex).string, (yylsp[-2]), (yyvsp[-1].interm.intermTypedNode));
+ (yyval.interm) = (yyvsp[-4].interm);
+ (yyval.interm).intermAggregate = context->parseInitDeclarator((yyval.interm).type, (yyvsp[-4].interm).intermAggregate, (yylsp[-2]), *(yyvsp[-2].lex).string, (yylsp[-1]), (yyvsp[0].interm.intermTypedNode));
}
break;
@@ -3461,9 +3362,8 @@ yyreduce:
case 118:
{
- ES3_OR_NEWER("[]", (yylsp[-3]), "implicitly sized array");
- (yyval.interm).type = (yyvsp[-5].interm.type);
- (yyval.interm).intermDeclaration = context->parseSingleArrayInitDeclaration((yyval.interm).type, (yylsp[-4]), *(yyvsp[-4].lex).string, (yylsp[-3]), nullptr, (yylsp[-1]), (yyvsp[0].interm.intermTypedNode));
+ (yyval.interm).type = (yyvsp[0].interm.type);
+ (yyval.interm).intermAggregate = context->parseSingleDeclaration((yyval.interm).type, (yylsp[0]), "");
}
break;
@@ -3471,9 +3371,8 @@ yyreduce:
case 119:
{
- ES3_OR_NEWER("=", (yylsp[-1]), "first-class arrays (array initializer)");
- (yyval.interm).type = (yyvsp[-6].interm.type);
- (yyval.interm).intermDeclaration = context->parseSingleArrayInitDeclaration((yyval.interm).type, (yylsp[-5]), *(yyvsp[-5].lex).string, (yylsp[-4]), (yyvsp[-3].interm.intermTypedNode), (yylsp[-1]), (yyvsp[0].interm.intermTypedNode));
+ (yyval.interm).type = (yyvsp[-1].interm.type);
+ (yyval.interm).intermAggregate = context->parseSingleDeclaration((yyval.interm).type, (yylsp[0]), *(yyvsp[0].lex).string);
}
break;
@@ -3481,8 +3380,8 @@ yyreduce:
case 120:
{
- (yyval.interm).type = (yyvsp[-3].interm.type);
- (yyval.interm).intermDeclaration = context->parseSingleInitDeclaration((yyval.interm).type, (yylsp[-2]), *(yyvsp[-2].lex).string, (yylsp[-1]), (yyvsp[0].interm.intermTypedNode));
+ (yyval.interm).type = (yyvsp[-4].interm.type);
+ (yyval.interm).intermAggregate = context->parseSingleArrayDeclaration((yyval.interm).type, (yylsp[-3]), *(yyvsp[-3].lex).string, (yylsp[-2]), (yyvsp[-1].interm.intermTypedNode));
}
break;
@@ -3490,8 +3389,9 @@ yyreduce:
case 121:
{
- context->addFullySpecifiedType(&(yyvsp[0].interm.type));
- (yyval.interm.type) = (yyvsp[0].interm.type);
+ ES3_OR_NEWER("[]", (yylsp[-3]), "implicitly sized array");
+ (yyval.interm).type = (yyvsp[-5].interm.type);
+ (yyval.interm).intermAggregate = context->parseSingleArrayInitDeclaration((yyval.interm).type, (yylsp[-4]), *(yyvsp[-4].lex).string, (yylsp[-3]), nullptr, (yylsp[-1]), (yyvsp[0].interm.intermTypedNode));
}
break;
@@ -3499,7 +3399,9 @@ yyreduce:
case 122:
{
- (yyval.interm.type) = context->addFullySpecifiedType(*(yyvsp[-1].interm.typeQualifierBuilder), (yyvsp[0].interm.type));
+ ES3_OR_NEWER("=", (yylsp[-1]), "first-class arrays (array initializer)");
+ (yyval.interm).type = (yyvsp[-6].interm.type);
+ (yyval.interm).intermAggregate = context->parseSingleArrayInitDeclaration((yyval.interm).type, (yylsp[-5]), *(yyvsp[-5].lex).string, (yylsp[-4]), (yyvsp[-3].interm.intermTypedNode), (yylsp[-1]), (yyvsp[0].interm.intermTypedNode));
}
break;
@@ -3507,7 +3409,8 @@ yyreduce:
case 123:
{
- (yyval.interm.qualifier) = EvqSmooth;
+ (yyval.interm).type = (yyvsp[-3].interm.type);
+ (yyval.interm).intermAggregate = context->parseSingleInitDeclaration((yyval.interm).type, (yylsp[-2]), *(yyvsp[-2].lex).string, (yylsp[-1]), (yyvsp[0].interm.intermTypedNode));
}
break;
@@ -3515,7 +3418,8 @@ yyreduce:
case 124:
{
- (yyval.interm.qualifier) = EvqFlat;
+ // $$.type is not used in invariant declarations.
+ (yyval.interm).intermAggregate = context->parseInvariantDeclaration((yylsp[-1]), (yylsp[0]), (yyvsp[0].lex).string, (yyvsp[0].lex).symbol);
}
break;
@@ -3523,8 +3427,14 @@ yyreduce:
case 125:
{
- (yyval.interm.typeQualifierBuilder) = context->createTypeQualifierBuilder((yylsp[0]));
- (yyval.interm.typeQualifierBuilder)->appendQualifier((yyvsp[0].interm.qualifierWrapper));
+ (yyval.interm.type) = (yyvsp[0].interm.type);
+
+ if ((yyvsp[0].interm.type).array) {
+ ES3_OR_NEWER("[]", (yylsp[0]), "first-class-array");
+ if (context->getShaderVersion() != 300) {
+ (yyvsp[0].interm.type).clearArrayness();
+ }
+ }
}
break;
@@ -3532,8 +3442,7 @@ yyreduce:
case 126:
{
- (yyval.interm.typeQualifierBuilder) = (yyvsp[-1].interm.typeQualifierBuilder);
- (yyval.interm.typeQualifierBuilder)->appendQualifier((yyvsp[0].interm.qualifierWrapper));
+ (yyval.interm.type) = context->addFullySpecifiedType((yyvsp[-1].interm.type).qualifier, (yyvsp[-1].interm.type).invariant, (yyvsp[-1].interm.type).layoutQualifier, (yyvsp[0].interm.type));
}
break;
@@ -3541,7 +3450,7 @@ yyreduce:
case 127:
{
- // empty
+ (yyval.interm.type).qualifier = EvqSmooth;
}
break;
@@ -3549,8 +3458,7 @@ yyreduce:
case 128:
{
- context->checkLocalVariableConstStorageQualifier(*(yyvsp[0].interm.qualifierWrapper));
- (yyval.interm.qualifierWrapper) = (yyvsp[0].interm.qualifierWrapper);
+ (yyval.interm.type).qualifier = EvqFlat;
}
break;
@@ -3558,8 +3466,7 @@ yyreduce:
case 129:
{
- context->checkIsAtGlobalLevel((yylsp[0]), "layout");
- (yyval.interm.qualifierWrapper) = new TLayoutQualifierWrapper((yyvsp[0].interm.layoutQualifier), (yylsp[0]));
+ (yyval.interm.qualifier) = EvqConst;
}
break;
@@ -3567,7 +3474,10 @@ yyreduce:
case 130:
{
- (yyval.interm.qualifierWrapper) = new TPrecisionQualifierWrapper((yyvsp[0].interm.precision), (yylsp[0]));
+ VERTEX_ONLY("attribute", (yylsp[0]));
+ ES2_ONLY("attribute", (yylsp[0]));
+ context->checkIsAtGlobalLevel((yylsp[0]), "attribute");
+ (yyval.interm.type).setBasic(EbtVoid, EvqAttribute, (yylsp[0]));
}
break;
@@ -3575,7 +3485,12 @@ yyreduce:
case 131:
{
- (yyval.interm.qualifierWrapper) = new TInterpolationQualifierWrapper((yyvsp[0].interm.qualifier), (yylsp[0]));
+ ES2_ONLY("varying", (yylsp[0]));
+ context->checkIsAtGlobalLevel((yylsp[0]), "varying");
+ if (context->getShaderType() == GL_VERTEX_SHADER)
+ (yyval.interm.type).setBasic(EbtVoid, EvqVaryingOut, (yylsp[0]));
+ else
+ (yyval.interm.type).setBasic(EbtVoid, EvqVaryingIn, (yylsp[0]));
}
break;
@@ -3583,8 +3498,13 @@ yyreduce:
case 132:
{
- context->checkIsAtGlobalLevel((yylsp[0]), "invariant");
- (yyval.interm.qualifierWrapper) = new TInvariantQualifierWrapper((yylsp[0]));
+ ES2_ONLY("varying", (yylsp[-1]));
+ context->checkIsAtGlobalLevel((yylsp[-1]), "invariant varying");
+ if (context->getShaderType() == GL_VERTEX_SHADER)
+ (yyval.interm.type).setBasic(EbtVoid, EvqVaryingOut, (yylsp[-1]));
+ else
+ (yyval.interm.type).setBasic(EbtVoid, EvqVaryingIn, (yylsp[-1]));
+ (yyval.interm.type).invariant = true;
}
break;
@@ -3592,10 +3512,11 @@ yyreduce:
case 133:
{
- VERTEX_ONLY("attribute", (yylsp[0]));
- ES2_ONLY("attribute", (yylsp[0]));
- context->checkIsAtGlobalLevel((yylsp[0]), "attribute");
- (yyval.interm.qualifierWrapper) = new TStorageQualifierWrapper(EvqAttribute, (yylsp[0]));
+ if ((yyvsp[0].interm.type).qualifier != EvqConst && !context->symbolTable.atGlobalLevel())
+ {
+ context->error((yylsp[0]), "Local variables can only use the const storage qualifier.", getQualifierString((yyvsp[0].interm.type).qualifier));
+ }
+ (yyval.interm.type).setBasic(EbtVoid, (yyvsp[0].interm.type).qualifier, (yylsp[0]));
}
break;
@@ -3603,12 +3524,7 @@ yyreduce:
case 134:
{
- ES2_ONLY("varying", (yylsp[0]));
- context->checkIsAtGlobalLevel((yylsp[0]), "varying");
- if (context->getShaderType() == GL_VERTEX_SHADER)
- (yyval.interm.qualifierWrapper) = new TStorageQualifierWrapper(EvqVaryingOut, (yylsp[0]));
- else
- (yyval.interm.qualifierWrapper) = new TStorageQualifierWrapper(EvqVaryingIn, (yylsp[0]));
+ (yyval.interm.type) = context->joinInterpolationQualifiers((yylsp[-1]), (yyvsp[-1].interm.type).qualifier, (yylsp[0]), (yyvsp[0].interm.type).qualifier);
}
break;
@@ -3616,7 +3532,10 @@ yyreduce:
case 135:
{
- (yyval.interm.qualifierWrapper) = new TStorageQualifierWrapper(EvqConst, (yylsp[0]));
+ context->error((yylsp[0]), "interpolation qualifier requires a fragment 'in' or vertex 'out' storage qualifier", getInterpolationString((yyvsp[0].interm.type).qualifier));
+
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).setBasic(EbtVoid, qual, (yylsp[0]));
}
break;
@@ -3624,24 +3543,8 @@ yyreduce:
case 136:
{
- if (context->declaringFunction())
- {
- (yyval.interm.qualifierWrapper) = new TStorageQualifierWrapper(EvqIn, (yylsp[0]));
- }
- else if (context->getShaderType() == GL_FRAGMENT_SHADER)
- {
- ES3_OR_NEWER("in", (yylsp[0]), "storage qualifier");
- (yyval.interm.qualifierWrapper) = new TStorageQualifierWrapper(EvqFragmentIn, (yylsp[0]));
- }
- else if (context->getShaderType() == GL_VERTEX_SHADER)
- {
- ES3_OR_NEWER("in", (yylsp[0]), "storage qualifier");
- (yyval.interm.qualifierWrapper) = new TStorageQualifierWrapper(EvqVertexIn, (yylsp[0]));
- }
- else
- {
- (yyval.interm.qualifierWrapper) = new TStorageQualifierWrapper(EvqComputeIn, (yylsp[0]));
- }
+ (yyval.interm.type).qualifier = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).layoutQualifier = (yyvsp[0].interm.layoutQualifier);
}
break;
@@ -3649,23 +3552,8 @@ yyreduce:
case 137:
{
- if (context->declaringFunction())
- {
- (yyval.interm.qualifierWrapper) = new TStorageQualifierWrapper(EvqOut, (yylsp[0]));
- }
- else
- {
- ES3_OR_NEWER("out", (yylsp[0]), "storage qualifier");
- NON_COMPUTE_ONLY("out", (yylsp[0]));
- if (context->getShaderType() == GL_FRAGMENT_SHADER)
- {
- (yyval.interm.qualifierWrapper) = new TStorageQualifierWrapper(EvqFragmentOut, (yylsp[0]));
- }
- else
- {
- (yyval.interm.qualifierWrapper) = new TStorageQualifierWrapper(EvqVertexOut, (yylsp[0]));
- }
- }
+ (yyval.interm.type).setBasic(EbtVoid, (yyvsp[0].interm.type).qualifier, (yylsp[0]));
+ (yyval.interm.type).layoutQualifier = (yyvsp[-1].interm.layoutQualifier);
}
break;
@@ -3673,11 +3561,9 @@ yyreduce:
case 138:
{
- if (!context->declaringFunction())
- {
- context->error((yylsp[0]), "invalid inout qualifier", "'inout' can be only used with function parameters");
- }
- (yyval.interm.qualifierWrapper) = new TStorageQualifierWrapper(EvqInOut, (yylsp[0]));
+ context->checkInvariantIsOutVariableES3((yyvsp[0].interm.type).qualifier, (yylsp[-1]));
+ (yyval.interm.type).setBasic(EbtVoid, (yyvsp[0].interm.type).qualifier, (yylsp[0]));
+ (yyval.interm.type).invariant = true;
}
break;
@@ -3685,8 +3571,9 @@ yyreduce:
case 139:
{
- ES3_OR_NEWER("centroid", (yylsp[0]), "storage qualifier");
- (yyval.interm.qualifierWrapper) = new TStorageQualifierWrapper(EvqCentroid, (yylsp[0]));
+ context->checkInvariantIsOutVariableES3((yyvsp[0].interm.type).qualifier, (yylsp[-2]));
+ (yyval.interm.type) = context->joinInterpolationQualifiers((yylsp[-1]), (yyvsp[-1].interm.type).qualifier, (yylsp[0]), (yyvsp[0].interm.type).qualifier);
+ (yyval.interm.type).invariant = true;
}
break;
@@ -3694,8 +3581,7 @@ yyreduce:
case 140:
{
- context->checkIsAtGlobalLevel((yylsp[0]), "uniform");
- (yyval.interm.qualifierWrapper) = new TStorageQualifierWrapper(EvqUniform, (yylsp[0]));
+ (yyval.interm.type).qualifier = EvqConst;
}
break;
@@ -3703,7 +3589,20 @@ yyreduce:
case 141:
{
- (yyval.interm.qualifierWrapper) = new TMemoryQualifierWrapper(EvqReadOnly, (yylsp[0]));
+ if (context->getShaderType() == GL_FRAGMENT_SHADER)
+ {
+ ES3_OR_NEWER("in", (yylsp[0]), "storage qualifier");
+ (yyval.interm.type).qualifier = EvqFragmentIn;
+ }
+ else if (context->getShaderType() == GL_VERTEX_SHADER)
+ {
+ ES3_OR_NEWER("in", (yylsp[0]), "storage qualifier");
+ (yyval.interm.type).qualifier = EvqVertexIn;
+ }
+ else
+ {
+ (yyval.interm.type).qualifier = EvqComputeIn;
+ }
}
break;
@@ -3711,7 +3610,9 @@ yyreduce:
case 142:
{
- (yyval.interm.qualifierWrapper) = new TMemoryQualifierWrapper(EvqWriteOnly, (yylsp[0]));
+ ES3_OR_NEWER("out", (yylsp[0]), "storage qualifier");
+ NON_COMPUTE_ONLY("out", (yylsp[0]));
+ (yyval.interm.type).qualifier = (context->getShaderType() == GL_FRAGMENT_SHADER) ? EvqFragmentOut : EvqVertexOut;
}
break;
@@ -3719,7 +3620,9 @@ yyreduce:
case 143:
{
- (yyval.interm.qualifierWrapper) = new TMemoryQualifierWrapper(EvqCoherent, (yylsp[0]));
+ ES3_OR_NEWER("centroid in", (yylsp[-1]), "storage qualifier");
+ FRAG_ONLY("centroid in", (yylsp[-1]));
+ (yyval.interm.type).qualifier = EvqCentroidIn;
}
break;
@@ -3727,7 +3630,9 @@ yyreduce:
case 144:
{
- (yyval.interm.qualifierWrapper) = new TMemoryQualifierWrapper(EvqRestrict, (yylsp[0]));
+ ES3_OR_NEWER("centroid out", (yylsp[-1]), "storage qualifier");
+ VERTEX_ONLY("centroid out", (yylsp[-1]));
+ (yyval.interm.type).qualifier = EvqCentroidOut;
}
break;
@@ -3735,7 +3640,8 @@ yyreduce:
case 145:
{
- (yyval.interm.qualifierWrapper) = new TMemoryQualifierWrapper(EvqVolatile, (yylsp[0]));
+ context->checkIsAtGlobalLevel((yylsp[0]), "uniform");
+ (yyval.interm.type).qualifier = EvqUniform;
}
break;
@@ -3744,7 +3650,11 @@ yyreduce:
{
(yyval.interm.type) = (yyvsp[0].interm.type);
- (yyval.interm.type).precision = context->symbolTable.getDefaultPrecision((yyvsp[0].interm.type).getBasicType());
+
+ if ((yyval.interm.type).precision == EbpUndefined) {
+ (yyval.interm.type).precision = context->symbolTable.getDefaultPrecision((yyvsp[0].interm.type).type);
+ context->checkPrecisionSpecified((yylsp[0]), (yyval.interm.type).precision, (yyvsp[0].interm.type).type);
+ }
}
break;
@@ -3752,7 +3662,12 @@ yyreduce:
case 147:
{
- (yyval.interm.precision) = EbpHigh;
+ (yyval.interm.type) = (yyvsp[0].interm.type);
+ (yyval.interm.type).precision = (yyvsp[-1].interm.precision);
+
+ if (!SupportsPrecision((yyvsp[0].interm.type).type)) {
+ context->error((yylsp[-1]), "illegal type for precision qualifier", getBasicString((yyvsp[0].interm.type).type));
+ }
}
break;
@@ -3760,7 +3675,7 @@ yyreduce:
case 148:
{
- (yyval.interm.precision) = EbpMedium;
+ (yyval.interm.precision) = EbpHigh;
}
break;
@@ -3768,7 +3683,7 @@ yyreduce:
case 149:
{
- (yyval.interm.precision) = EbpLow;
+ (yyval.interm.precision) = EbpMedium;
}
break;
@@ -3776,8 +3691,7 @@ yyreduce:
case 150:
{
- ES3_OR_NEWER("layout", (yylsp[-3]), "qualifier");
- (yyval.interm.layoutQualifier) = (yyvsp[-1].interm.layoutQualifier);
+ (yyval.interm.precision) = EbpLow;
}
break;
@@ -3785,7 +3699,8 @@ yyreduce:
case 151:
{
- (yyval.interm.layoutQualifier) = (yyvsp[0].interm.layoutQualifier);
+ ES3_OR_NEWER("layout", (yylsp[-3]), "qualifier");
+ (yyval.interm.layoutQualifier) = (yyvsp[-1].interm.layoutQualifier);
}
break;
@@ -3793,7 +3708,7 @@ yyreduce:
case 152:
{
- (yyval.interm.layoutQualifier) = context->joinLayoutQualifiers((yyvsp[-2].interm.layoutQualifier), (yyvsp[0].interm.layoutQualifier), (yylsp[0]));
+ (yyval.interm.layoutQualifier) = (yyvsp[0].interm.layoutQualifier);
}
break;
@@ -3801,7 +3716,7 @@ yyreduce:
case 153:
{
- (yyval.interm.layoutQualifier) = context->parseLayoutQualifier(*(yyvsp[0].lex).string, (yylsp[0]));
+ (yyval.interm.layoutQualifier) = context->joinLayoutQualifiers((yyvsp[-2].interm.layoutQualifier), (yyvsp[0].interm.layoutQualifier), (yylsp[0]));
}
break;
@@ -3809,7 +3724,7 @@ yyreduce:
case 154:
{
- (yyval.interm.layoutQualifier) = context->parseLayoutQualifier(*(yyvsp[-2].lex).string, (yylsp[-2]), (yyvsp[0].lex).i, (yylsp[0]));
+ (yyval.interm.layoutQualifier) = context->parseLayoutQualifier(*(yyvsp[0].lex).string, (yylsp[0]));
}
break;
@@ -3825,7 +3740,7 @@ yyreduce:
case 156:
{
- (yyval.interm.type).initialize((yyvsp[0].interm.typeSpecifierNonArray), (context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary));
+ (yyval.interm.layoutQualifier) = context->parseLayoutQualifier(*(yyvsp[-2].lex).string, (yylsp[-2]), (yyvsp[0].lex).i, (yylsp[0]));
}
break;
@@ -3833,9 +3748,7 @@ yyreduce:
case 157:
{
- ES3_OR_NEWER("[]", (yylsp[-1]), "implicitly sized array");
- (yyval.interm.type).initialize((yyvsp[-2].interm.typeSpecifierNonArray), (context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary));
- (yyval.interm.type).setArraySize(0);
+ (yyval.interm.type) = (yyvsp[0].interm.type);
}
break;
@@ -3843,12 +3756,9 @@ yyreduce:
case 158:
{
- (yyval.interm.type).initialize((yyvsp[-3].interm.typeSpecifierNonArray), (context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary));
- if (context->checkIsValidTypeForArray((yylsp[-2]), (yyval.interm.type)))
- {
- unsigned int size = context->checkIsValidArraySize((yylsp[-2]), (yyvsp[-1].interm.intermTypedNode));
- (yyval.interm.type).setArraySize(size);
- }
+ ES3_OR_NEWER("[]", (yylsp[-1]), "implicitly sized array");
+ (yyval.interm.type) = (yyvsp[-2].interm.type);
+ (yyval.interm.type).setArraySize(0);
}
break;
@@ -3856,7 +3766,13 @@ yyreduce:
case 159:
{
- (yyval.interm.typeSpecifierNonArray).initialize(EbtVoid, (yylsp[0]));
+ (yyval.interm.type) = (yyvsp[-3].interm.type);
+
+ if (context->checkIsValidTypeForArray((yylsp[-2]), (yyvsp[-3].interm.type)))
+ {
+ unsigned int size = context->checkIsValidArraySize((yylsp[-2]), (yyvsp[-1].interm.intermTypedNode));
+ (yyval.interm.type).setArraySize(size);
+ }
}
break;
@@ -3864,7 +3780,8 @@ yyreduce:
case 160:
{
- (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).setBasic(EbtVoid, qual, (yylsp[0]));
}
break;
@@ -3872,7 +3789,8 @@ yyreduce:
case 161:
{
- (yyval.interm.typeSpecifierNonArray).initialize(EbtInt, (yylsp[0]));
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).setBasic(EbtFloat, qual, (yylsp[0]));
}
break;
@@ -3880,7 +3798,8 @@ yyreduce:
case 162:
{
- (yyval.interm.typeSpecifierNonArray).initialize(EbtUInt, (yylsp[0]));
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).setBasic(EbtInt, qual, (yylsp[0]));
}
break;
@@ -3888,7 +3807,8 @@ yyreduce:
case 163:
{
- (yyval.interm.typeSpecifierNonArray).initialize(EbtBool, (yylsp[0]));
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).setBasic(EbtUInt, qual, (yylsp[0]));
}
break;
@@ -3896,8 +3816,8 @@ yyreduce:
case 164:
{
- (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
- (yyval.interm.typeSpecifierNonArray).setAggregate(2);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).setBasic(EbtBool, qual, (yylsp[0]));
}
break;
@@ -3905,8 +3825,9 @@ yyreduce:
case 165:
{
- (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
- (yyval.interm.typeSpecifierNonArray).setAggregate(3);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).setBasic(EbtFloat, qual, (yylsp[0]));
+ (yyval.interm.type).setAggregate(2);
}
break;
@@ -3914,8 +3835,9 @@ yyreduce:
case 166:
{
- (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
- (yyval.interm.typeSpecifierNonArray).setAggregate(4);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).setBasic(EbtFloat, qual, (yylsp[0]));
+ (yyval.interm.type).setAggregate(3);
}
break;
@@ -3923,8 +3845,9 @@ yyreduce:
case 167:
{
- (yyval.interm.typeSpecifierNonArray).initialize(EbtBool, (yylsp[0]));
- (yyval.interm.typeSpecifierNonArray).setAggregate(2);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).setBasic(EbtFloat, qual, (yylsp[0]));
+ (yyval.interm.type).setAggregate(4);
}
break;
@@ -3932,8 +3855,9 @@ yyreduce:
case 168:
{
- (yyval.interm.typeSpecifierNonArray).initialize(EbtBool, (yylsp[0]));
- (yyval.interm.typeSpecifierNonArray).setAggregate(3);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).setBasic(EbtBool, qual, (yylsp[0]));
+ (yyval.interm.type).setAggregate(2);
}
break;
@@ -3941,8 +3865,9 @@ yyreduce:
case 169:
{
- (yyval.interm.typeSpecifierNonArray).initialize(EbtBool, (yylsp[0]));
- (yyval.interm.typeSpecifierNonArray).setAggregate(4);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).setBasic(EbtBool, qual, (yylsp[0]));
+ (yyval.interm.type).setAggregate(3);
}
break;
@@ -3950,8 +3875,9 @@ yyreduce:
case 170:
{
- (yyval.interm.typeSpecifierNonArray).initialize(EbtInt, (yylsp[0]));
- (yyval.interm.typeSpecifierNonArray).setAggregate(2);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).setBasic(EbtBool, qual, (yylsp[0]));
+ (yyval.interm.type).setAggregate(4);
}
break;
@@ -3959,8 +3885,9 @@ yyreduce:
case 171:
{
- (yyval.interm.typeSpecifierNonArray).initialize(EbtInt, (yylsp[0]));
- (yyval.interm.typeSpecifierNonArray).setAggregate(3);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).setBasic(EbtInt, qual, (yylsp[0]));
+ (yyval.interm.type).setAggregate(2);
}
break;
@@ -3968,8 +3895,9 @@ yyreduce:
case 172:
{
- (yyval.interm.typeSpecifierNonArray).initialize(EbtInt, (yylsp[0]));
- (yyval.interm.typeSpecifierNonArray).setAggregate(4);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).setBasic(EbtInt, qual, (yylsp[0]));
+ (yyval.interm.type).setAggregate(3);
}
break;
@@ -3977,8 +3905,9 @@ yyreduce:
case 173:
{
- (yyval.interm.typeSpecifierNonArray).initialize(EbtUInt, (yylsp[0]));
- (yyval.interm.typeSpecifierNonArray).setAggregate(2);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).setBasic(EbtInt, qual, (yylsp[0]));
+ (yyval.interm.type).setAggregate(4);
}
break;
@@ -3986,8 +3915,9 @@ yyreduce:
case 174:
{
- (yyval.interm.typeSpecifierNonArray).initialize(EbtUInt, (yylsp[0]));
- (yyval.interm.typeSpecifierNonArray).setAggregate(3);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).setBasic(EbtUInt, qual, (yylsp[0]));
+ (yyval.interm.type).setAggregate(2);
}
break;
@@ -3995,8 +3925,9 @@ yyreduce:
case 175:
{
- (yyval.interm.typeSpecifierNonArray).initialize(EbtUInt, (yylsp[0]));
- (yyval.interm.typeSpecifierNonArray).setAggregate(4);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).setBasic(EbtUInt, qual, (yylsp[0]));
+ (yyval.interm.type).setAggregate(3);
}
break;
@@ -4004,8 +3935,9 @@ yyreduce:
case 176:
{
- (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
- (yyval.interm.typeSpecifierNonArray).setMatrix(2, 2);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).setBasic(EbtUInt, qual, (yylsp[0]));
+ (yyval.interm.type).setAggregate(4);
}
break;
@@ -4013,8 +3945,9 @@ yyreduce:
case 177:
{
- (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
- (yyval.interm.typeSpecifierNonArray).setMatrix(3, 3);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).setBasic(EbtFloat, qual, (yylsp[0]));
+ (yyval.interm.type).setMatrix(2, 2);
}
break;
@@ -4022,8 +3955,9 @@ yyreduce:
case 178:
{
- (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
- (yyval.interm.typeSpecifierNonArray).setMatrix(4, 4);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).setBasic(EbtFloat, qual, (yylsp[0]));
+ (yyval.interm.type).setMatrix(3, 3);
}
break;
@@ -4031,8 +3965,9 @@ yyreduce:
case 179:
{
- (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
- (yyval.interm.typeSpecifierNonArray).setMatrix(2, 3);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).setBasic(EbtFloat, qual, (yylsp[0]));
+ (yyval.interm.type).setMatrix(4, 4);
}
break;
@@ -4040,8 +3975,9 @@ yyreduce:
case 180:
{
- (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
- (yyval.interm.typeSpecifierNonArray).setMatrix(3, 2);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).setBasic(EbtFloat, qual, (yylsp[0]));
+ (yyval.interm.type).setMatrix(2, 3);
}
break;
@@ -4049,8 +3985,9 @@ yyreduce:
case 181:
{
- (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
- (yyval.interm.typeSpecifierNonArray).setMatrix(2, 4);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).setBasic(EbtFloat, qual, (yylsp[0]));
+ (yyval.interm.type).setMatrix(3, 2);
}
break;
@@ -4058,8 +3995,9 @@ yyreduce:
case 182:
{
- (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
- (yyval.interm.typeSpecifierNonArray).setMatrix(4, 2);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).setBasic(EbtFloat, qual, (yylsp[0]));
+ (yyval.interm.type).setMatrix(2, 4);
}
break;
@@ -4067,8 +4005,9 @@ yyreduce:
case 183:
{
- (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
- (yyval.interm.typeSpecifierNonArray).setMatrix(3, 4);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).setBasic(EbtFloat, qual, (yylsp[0]));
+ (yyval.interm.type).setMatrix(4, 2);
}
break;
@@ -4076,8 +4015,9 @@ yyreduce:
case 184:
{
- (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
- (yyval.interm.typeSpecifierNonArray).setMatrix(4, 3);
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).setBasic(EbtFloat, qual, (yylsp[0]));
+ (yyval.interm.type).setMatrix(3, 4);
}
break;
@@ -4085,7 +4025,9 @@ yyreduce:
case 185:
{
- (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2D, (yylsp[0]));
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).setBasic(EbtFloat, qual, (yylsp[0]));
+ (yyval.interm.type).setMatrix(4, 3);
}
break;
@@ -4093,7 +4035,8 @@ yyreduce:
case 186:
{
- (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler3D, (yylsp[0]));
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).setBasic(EbtSampler2D, qual, (yylsp[0]));
}
break;
@@ -4101,7 +4044,8 @@ yyreduce:
case 187:
{
- (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerCube, (yylsp[0]));
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).setBasic(EbtSampler3D, qual, (yylsp[0]));
}
break;
@@ -4109,7 +4053,8 @@ yyreduce:
case 188:
{
- (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DArray, (yylsp[0]));
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).setBasic(EbtSamplerCube, qual, (yylsp[0]));
}
break;
@@ -4117,7 +4062,8 @@ yyreduce:
case 189:
{
- (yyval.interm.typeSpecifierNonArray).initialize(EbtISampler2D, (yylsp[0]));
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).setBasic(EbtSampler2DArray, qual, (yylsp[0]));
}
break;
@@ -4125,7 +4071,8 @@ yyreduce:
case 190:
{
- (yyval.interm.typeSpecifierNonArray).initialize(EbtISampler3D, (yylsp[0]));
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).setBasic(EbtISampler2D, qual, (yylsp[0]));
}
break;
@@ -4133,7 +4080,8 @@ yyreduce:
case 191:
{
- (yyval.interm.typeSpecifierNonArray).initialize(EbtISamplerCube, (yylsp[0]));
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).setBasic(EbtISampler3D, qual, (yylsp[0]));
}
break;
@@ -4141,7 +4089,8 @@ yyreduce:
case 192:
{
- (yyval.interm.typeSpecifierNonArray).initialize(EbtISampler2DArray, (yylsp[0]));
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).setBasic(EbtISamplerCube, qual, (yylsp[0]));
}
break;
@@ -4149,7 +4098,8 @@ yyreduce:
case 193:
{
- (yyval.interm.typeSpecifierNonArray).initialize(EbtUSampler2D, (yylsp[0]));
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).setBasic(EbtISampler2DArray, qual, (yylsp[0]));
}
break;
@@ -4157,7 +4107,8 @@ yyreduce:
case 194:
{
- (yyval.interm.typeSpecifierNonArray).initialize(EbtUSampler3D, (yylsp[0]));
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).setBasic(EbtUSampler2D, qual, (yylsp[0]));
}
break;
@@ -4165,7 +4116,8 @@ yyreduce:
case 195:
{
- (yyval.interm.typeSpecifierNonArray).initialize(EbtUSamplerCube, (yylsp[0]));
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).setBasic(EbtUSampler3D, qual, (yylsp[0]));
}
break;
@@ -4173,7 +4125,8 @@ yyreduce:
case 196:
{
- (yyval.interm.typeSpecifierNonArray).initialize(EbtUSampler2DArray, (yylsp[0]));
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).setBasic(EbtUSamplerCube, qual, (yylsp[0]));
}
break;
@@ -4181,7 +4134,8 @@ yyreduce:
case 197:
{
- (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DShadow, (yylsp[0]));
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).setBasic(EbtUSampler2DArray, qual, (yylsp[0]));
}
break;
@@ -4189,7 +4143,8 @@ yyreduce:
case 198:
{
- (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerCubeShadow, (yylsp[0]));
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).setBasic(EbtSampler2DShadow, qual, (yylsp[0]));
}
break;
@@ -4197,7 +4152,8 @@ yyreduce:
case 199:
{
- (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DArrayShadow, (yylsp[0]));
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).setBasic(EbtSamplerCubeShadow, qual, (yylsp[0]));
}
break;
@@ -4205,11 +4161,8 @@ yyreduce:
case 200:
{
- if (!context->supportsExtension("GL_OES_EGL_image_external") &&
- !context->supportsExtension("GL_NV_EGL_stream_consumer_external")) {
- context->error((yylsp[0]), "unsupported type", "samplerExternalOES");
- }
- (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerExternalOES, (yylsp[0]));
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).setBasic(EbtSampler2DArrayShadow, qual, (yylsp[0]));
}
break;
@@ -4217,10 +4170,12 @@ yyreduce:
case 201:
{
- if (!context->supportsExtension("GL_ARB_texture_rectangle")) {
- context->error((yylsp[0]), "unsupported type", "sampler2DRect");
+ if (!context->supportsExtension("GL_OES_EGL_image_external") &&
+ !context->supportsExtension("GL_NV_EGL_stream_consumer_external")) {
+ context->error((yylsp[0]), "unsupported type", "samplerExternalOES");
}
- (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DRect, (yylsp[0]));
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).setBasic(EbtSamplerExternalOES, qual, (yylsp[0]));
}
break;
@@ -4228,7 +4183,11 @@ yyreduce:
case 202:
{
- (yyval.interm.typeSpecifierNonArray) = (yyvsp[0].interm.typeSpecifierNonArray);
+ if (!context->supportsExtension("GL_ARB_texture_rectangle")) {
+ context->error((yylsp[0]), "unsupported type", "sampler2DRect");
+ }
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).setBasic(EbtSampler2DRect, qual, (yylsp[0]));
}
break;
@@ -4236,7 +4195,8 @@ yyreduce:
case 203:
{
- (yyval.interm.typeSpecifierNonArray).initialize(EbtImage2D, (yylsp[0]));
+ (yyval.interm.type) = (yyvsp[0].interm.type);
+ (yyval.interm.type).qualifier = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
}
break;
@@ -4244,134 +4204,47 @@ yyreduce:
case 204:
{
- (yyval.interm.typeSpecifierNonArray).initialize(EbtIImage2D, (yylsp[0]));
- }
-
- break;
-
- case 205:
-
- {
- (yyval.interm.typeSpecifierNonArray).initialize(EbtUImage2D, (yylsp[0]));
- }
-
- break;
-
- case 206:
-
- {
- (yyval.interm.typeSpecifierNonArray).initialize(EbtImage3D, (yylsp[0]));
- }
-
- break;
-
- case 207:
-
- {
- (yyval.interm.typeSpecifierNonArray).initialize(EbtIImage3D, (yylsp[0]));
- }
-
- break;
-
- case 208:
-
- {
- (yyval.interm.typeSpecifierNonArray).initialize(EbtUImage3D, (yylsp[0]));
- }
-
- break;
-
- case 209:
-
- {
- (yyval.interm.typeSpecifierNonArray).initialize(EbtImage2DArray, (yylsp[0]));
- }
-
- break;
-
- case 210:
-
- {
- (yyval.interm.typeSpecifierNonArray).initialize(EbtIImage2DArray, (yylsp[0]));
- }
-
- break;
-
- case 211:
-
- {
- (yyval.interm.typeSpecifierNonArray).initialize(EbtUImage2DArray, (yylsp[0]));
- }
-
- break;
-
- case 212:
-
- {
- (yyval.interm.typeSpecifierNonArray).initialize(EbtImageCube, (yylsp[0]));
- }
-
- break;
-
- case 213:
-
- {
- (yyval.interm.typeSpecifierNonArray).initialize(EbtIImageCube, (yylsp[0]));
- }
-
- break;
-
- case 214:
-
- {
- (yyval.interm.typeSpecifierNonArray).initialize(EbtUImageCube, (yylsp[0]));
- }
-
- break;
-
- case 215:
-
- {
//
// This is for user defined type names. The lexical phase looked up the
// type.
//
TType& structure = static_cast<TVariable*>((yyvsp[0].lex).symbol)->getType();
- (yyval.interm.typeSpecifierNonArray).initialize(EbtStruct, (yylsp[0]));
- (yyval.interm.typeSpecifierNonArray).userDef = &structure;
+ TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+ (yyval.interm.type).setBasic(EbtStruct, qual, (yylsp[0]));
+ (yyval.interm.type).userDef = &structure;
}
break;
- case 216:
+ case 205:
{ context->enterStructDeclaration((yylsp[-1]), *(yyvsp[-1].lex).string); }
break;
- case 217:
+ case 206:
{
- (yyval.interm.typeSpecifierNonArray) = context->addStructure((yylsp[-5]), (yylsp[-4]), (yyvsp[-4].lex).string, (yyvsp[-1].interm.fieldList));
+ (yyval.interm.type) = context->addStructure((yylsp[-5]), (yylsp[-4]), (yyvsp[-4].lex).string, (yyvsp[-1].interm.fieldList));
}
break;
- case 218:
+ case 207:
{ context->enterStructDeclaration((yylsp[0]), *(yyvsp[0].lex).string); }
break;
- case 219:
+ case 208:
{
- (yyval.interm.typeSpecifierNonArray) = context->addStructure((yylsp[-4]), (yyloc), NewPoolTString(""), (yyvsp[-1].interm.fieldList));
+ (yyval.interm.type) = context->addStructure((yylsp[-4]), (yyloc), NewPoolTString(""), (yyvsp[-1].interm.fieldList));
}
break;
- case 220:
+ case 209:
{
(yyval.interm.fieldList) = (yyvsp[0].interm.fieldList);
@@ -4379,7 +4252,7 @@ yyreduce:
break;
- case 221:
+ case 210:
{
(yyval.interm.fieldList) = (yyvsp[-1].interm.fieldList);
@@ -4396,7 +4269,7 @@ yyreduce:
break;
- case 222:
+ case 211:
{
(yyval.interm.fieldList) = context->addStructDeclaratorList((yyvsp[-2].interm.type), (yyvsp[-1].interm.fieldList));
@@ -4404,16 +4277,18 @@ yyreduce:
break;
- case 223:
+ case 212:
{
// ES3 Only, but errors should be handled elsewhere
- (yyval.interm.fieldList) = context->addStructDeclaratorListWithQualifiers(*(yyvsp[-3].interm.typeQualifierBuilder), &(yyvsp[-2].interm.type), (yyvsp[-1].interm.fieldList));
+ (yyvsp[-2].interm.type).qualifier = (yyvsp[-3].interm.type).qualifier;
+ (yyvsp[-2].interm.type).layoutQualifier = (yyvsp[-3].interm.type).layoutQualifier;
+ (yyval.interm.fieldList) = context->addStructDeclaratorList((yyvsp[-2].interm.type), (yyvsp[-1].interm.fieldList));
}
break;
- case 224:
+ case 213:
{
(yyval.interm.fieldList) = NewPoolTFieldList();
@@ -4422,7 +4297,7 @@ yyreduce:
break;
- case 225:
+ case 214:
{
(yyval.interm.fieldList)->push_back((yyvsp[0].interm.field));
@@ -4430,7 +4305,7 @@ yyreduce:
break;
- case 226:
+ case 215:
{
context->checkIsNotReserved((yylsp[0]), *(yyvsp[0].lex).string);
@@ -4441,7 +4316,7 @@ yyreduce:
break;
- case 227:
+ case 216:
{
context->checkIsNotReserved((yylsp[-3]), *(yyvsp[-3].lex).string);
@@ -4455,197 +4330,196 @@ yyreduce:
break;
- case 228:
+ case 217:
{ (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
break;
- case 229:
+ case 218:
{ (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
break;
- case 230:
+ case 219:
- { (yyval.interm.intermNode) = (yyvsp[0].interm.intermBlock); }
+ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermAggregate); }
break;
- case 231:
+ case 220:
{ (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
break;
- case 232:
+ case 221:
{ (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
break;
- case 233:
+ case 222:
{ (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
break;
- case 234:
+ case 223:
{ (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
break;
- case 235:
+ case 224:
{ (yyval.interm.intermNode) = (yyvsp[0].interm.intermSwitch); }
break;
- case 236:
+ case 225:
{ (yyval.interm.intermNode) = (yyvsp[0].interm.intermCase); }
break;
- case 237:
+ case 226:
{ (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
break;
- case 238:
+ case 227:
{ (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
break;
- case 239:
+ case 228:
- { (yyval.interm.intermBlock) = 0; }
+ { (yyval.interm.intermAggregate) = 0; }
break;
- case 240:
+ case 229:
{ context->symbolTable.push(); }
break;
- case 241:
+ case 230:
{ context->symbolTable.pop(); }
break;
- case 242:
+ case 231:
{
- if ((yyvsp[-2].interm.intermBlock) != 0) {
- (yyvsp[-2].interm.intermBlock)->setLine((yyloc));
+ if ((yyvsp[-2].interm.intermAggregate) != 0) {
+ (yyvsp[-2].interm.intermAggregate)->setOp(EOpSequence);
+ (yyvsp[-2].interm.intermAggregate)->setLine((yyloc));
}
- (yyval.interm.intermBlock) = (yyvsp[-2].interm.intermBlock);
+ (yyval.interm.intermAggregate) = (yyvsp[-2].interm.intermAggregate);
}
break;
- case 243:
+ case 232:
- { (yyval.interm.intermNode) = (yyvsp[0].interm.intermBlock); }
+ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermAggregate); }
break;
- case 244:
+ case 233:
{ (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
break;
- case 245:
+ case 234:
{ context->symbolTable.push(); }
break;
- case 246:
+ case 235:
- { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[0].interm.intermBlock); }
+ { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[0].interm.intermAggregate); }
break;
- case 247:
+ case 236:
{ context->symbolTable.push(); }
break;
- case 248:
+ case 237:
{ context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
break;
- case 249:
+ case 238:
{
- (yyval.interm.intermBlock) = 0;
+ (yyval.interm.intermAggregate) = 0;
}
break;
- case 250:
+ case 239:
{
- if ((yyvsp[-1].interm.intermBlock)) {
- (yyvsp[-1].interm.intermBlock)->setLine((yyloc));
+ if ((yyvsp[-1].interm.intermAggregate)) {
+ (yyvsp[-1].interm.intermAggregate)->setOp(EOpSequence);
+ (yyvsp[-1].interm.intermAggregate)->setLine((yyloc));
}
- (yyval.interm.intermBlock) = (yyvsp[-1].interm.intermBlock);
+ (yyval.interm.intermAggregate) = (yyvsp[-1].interm.intermAggregate);
}
break;
- case 251:
+ case 240:
{
- (yyval.interm.intermBlock) = new TIntermBlock();
- (yyval.interm.intermBlock)->setLine((yyloc));
- (yyval.interm.intermBlock)->appendStatement((yyvsp[0].interm.intermNode));
+ (yyval.interm.intermAggregate) = context->intermediate.makeAggregate((yyvsp[0].interm.intermNode), (yyloc));
}
break;
- case 252:
+ case 241:
{
- (yyval.interm.intermBlock) = (yyvsp[-1].interm.intermBlock);
- (yyval.interm.intermBlock)->appendStatement((yyvsp[0].interm.intermNode));
+ (yyval.interm.intermAggregate) = context->intermediate.growAggregate((yyvsp[-1].interm.intermAggregate), (yyvsp[0].interm.intermNode), (yyloc));
}
break;
- case 253:
+ case 242:
{ (yyval.interm.intermNode) = 0; }
break;
- case 254:
+ case 243:
{ (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[-1].interm.intermTypedNode)); }
break;
- case 255:
+ case 244:
{
context->checkIsScalarBool((yylsp[-4]), (yyvsp[-2].interm.intermTypedNode));
- (yyval.interm.intermNode) = context->intermediate.addIfElse((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.nodePair), (yylsp[-4]));
+ (yyval.interm.intermNode) = context->intermediate.addSelection((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.nodePair), (yylsp[-4]));
}
break;
- case 256:
+ case 245:
{
(yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode);
@@ -4654,7 +4528,7 @@ yyreduce:
break;
- case 257:
+ case 246:
{
(yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode);
@@ -4663,22 +4537,22 @@ yyreduce:
break;
- case 258:
+ case 247:
{ context->incrSwitchNestingLevel(); }
break;
- case 259:
+ case 248:
{
- (yyval.interm.intermSwitch) = context->addSwitch((yyvsp[-3].interm.intermTypedNode), (yyvsp[0].interm.intermBlock), (yylsp[-5]));
+ (yyval.interm.intermSwitch) = context->addSwitch((yyvsp[-3].interm.intermTypedNode), (yyvsp[0].interm.intermAggregate), (yylsp[-5]));
context->decrSwitchNestingLevel();
}
break;
- case 260:
+ case 249:
{
(yyval.interm.intermCase) = context->addCase((yyvsp[-1].interm.intermTypedNode), (yylsp[-2]));
@@ -4686,7 +4560,7 @@ yyreduce:
break;
- case 261:
+ case 250:
{
(yyval.interm.intermCase) = context->addDefault((yylsp[-1]));
@@ -4694,7 +4568,7 @@ yyreduce:
break;
- case 262:
+ case 251:
{
(yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
@@ -4703,13 +4577,13 @@ yyreduce:
break;
- case 263:
+ case 252:
{
- TIntermBinary *initNode = nullptr;
+ TIntermNode *intermNode;
context->checkIsScalarBool((yylsp[-2]), (yyvsp[-3].interm.type));
- if (!context->executeInitializer((yylsp[-2]), *(yyvsp[-2].lex).string, (yyvsp[-3].interm.type), (yyvsp[0].interm.intermTypedNode), &initNode))
+ if (!context->executeInitializer((yylsp[-2]), *(yyvsp[-2].lex).string, (yyvsp[-3].interm.type), (yyvsp[0].interm.intermTypedNode), &intermNode))
(yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
else {
(yyval.interm.intermTypedNode) = 0;
@@ -4718,13 +4592,13 @@ yyreduce:
break;
- case 264:
+ case 253:
{ context->symbolTable.push(); context->incrLoopNestingLevel(); }
break;
- case 265:
+ case 254:
{
context->symbolTable.pop();
@@ -4734,13 +4608,13 @@ yyreduce:
break;
- case 266:
+ case 255:
{ context->incrLoopNestingLevel(); }
break;
- case 267:
+ case 256:
{
context->checkIsScalarBool((yylsp[0]), (yyvsp[-2].interm.intermTypedNode));
@@ -4751,13 +4625,13 @@ yyreduce:
break;
- case 268:
+ case 257:
{ context->symbolTable.push(); context->incrLoopNestingLevel(); }
break;
- case 269:
+ case 258:
{
context->symbolTable.pop();
@@ -4767,7 +4641,7 @@ yyreduce:
break;
- case 270:
+ case 259:
{
(yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
@@ -4775,7 +4649,7 @@ yyreduce:
break;
- case 271:
+ case 260:
{
(yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
@@ -4783,7 +4657,7 @@ yyreduce:
break;
- case 272:
+ case 261:
{
(yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
@@ -4791,7 +4665,7 @@ yyreduce:
break;
- case 273:
+ case 262:
{
(yyval.interm.intermTypedNode) = 0;
@@ -4799,7 +4673,7 @@ yyreduce:
break;
- case 274:
+ case 263:
{
(yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermTypedNode);
@@ -4808,7 +4682,7 @@ yyreduce:
break;
- case 275:
+ case 264:
{
(yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermTypedNode);
@@ -4817,7 +4691,7 @@ yyreduce:
break;
- case 276:
+ case 265:
{
(yyval.interm.intermNode) = context->addBranch(EOpContinue, (yylsp[-1]));
@@ -4825,7 +4699,7 @@ yyreduce:
break;
- case 277:
+ case 266:
{
(yyval.interm.intermNode) = context->addBranch(EOpBreak, (yylsp[-1]));
@@ -4833,7 +4707,7 @@ yyreduce:
break;
- case 278:
+ case 267:
{
(yyval.interm.intermNode) = context->addBranch(EOpReturn, (yylsp[-1]));
@@ -4841,7 +4715,7 @@ yyreduce:
break;
- case 279:
+ case 268:
{
(yyval.interm.intermNode) = context->addBranch(EOpReturn, (yyvsp[-1].interm.intermTypedNode), (yylsp[-2]));
@@ -4849,7 +4723,7 @@ yyreduce:
break;
- case 280:
+ case 269:
{
FRAG_ONLY("discard", (yylsp[-1]));
@@ -4858,26 +4732,25 @@ yyreduce:
break;
- case 281:
+ case 270:
{
- (yyval.interm.intermBlock) = new TIntermBlock();
- (yyval.interm.intermBlock)->setLine((yyloc));
- (yyval.interm.intermBlock)->appendStatement((yyvsp[0].interm.intermNode));
- context->setTreeRoot((yyval.interm.intermBlock));
+ (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
+ context->setTreeRoot((yyval.interm.intermNode));
}
break;
- case 282:
+ case 271:
{
- (yyval.interm.intermBlock)->appendStatement((yyvsp[0].interm.intermNode));
+ (yyval.interm.intermNode) = context->intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode), (yyloc));
+ context->setTreeRoot((yyval.interm.intermNode));
}
break;
- case 283:
+ case 272:
{
(yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
@@ -4885,7 +4758,7 @@ yyreduce:
break;
- case 284:
+ case 273:
{
(yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
@@ -4893,18 +4766,18 @@ yyreduce:
break;
- case 285:
+ case 274:
{
- context->parseFunctionDefinitionHeader((yylsp[0]), &((yyvsp[0].interm).function), &(yyvsp[0].interm).intermAggregate);
+ context->parseFunctionPrototype((yylsp[0]), (yyvsp[0].interm).function, &(yyvsp[0].interm).intermAggregate);
}
break;
- case 286:
+ case 275:
{
- (yyval.interm.intermNode) = context->addFunctionDefinition(*((yyvsp[-2].interm).function), (yyvsp[-2].interm).intermAggregate, (yyvsp[0].interm.intermBlock), (yylsp[-2]));
+ (yyval.interm.intermNode) = context->addFunctionDefinition(*((yyvsp[-2].interm).function), (yyvsp[-2].interm).intermAggregate, (yyvsp[0].interm.intermAggregate), (yylsp[-2]));
}
break;
diff --git a/gfx/angle/src/compiler/translator/glslang_tab.h b/gfx/angle/src/compiler/translator/glslang_tab.h
index 8b043c01d..7331594a4 100755
--- a/gfx/angle/src/compiler/translator/glslang_tab.h
+++ b/gfx/angle/src/compiler/translator/glslang_tab.h
@@ -50,151 +50,134 @@ extern int yydebug;
/* Token type. */
#ifndef YYTOKENTYPE
# define YYTOKENTYPE
-enum yytokentype
-{
- INVARIANT = 258,
- HIGH_PRECISION = 259,
- MEDIUM_PRECISION = 260,
- LOW_PRECISION = 261,
- PRECISION = 262,
- ATTRIBUTE = 263,
- CONST_QUAL = 264,
- BOOL_TYPE = 265,
- FLOAT_TYPE = 266,
- INT_TYPE = 267,
- UINT_TYPE = 268,
- BREAK = 269,
- CONTINUE = 270,
- DO = 271,
- ELSE = 272,
- FOR = 273,
- IF = 274,
- DISCARD = 275,
- RETURN = 276,
- SWITCH = 277,
- CASE = 278,
- DEFAULT = 279,
- BVEC2 = 280,
- BVEC3 = 281,
- BVEC4 = 282,
- IVEC2 = 283,
- IVEC3 = 284,
- IVEC4 = 285,
- VEC2 = 286,
- VEC3 = 287,
- VEC4 = 288,
- UVEC2 = 289,
- UVEC3 = 290,
- UVEC4 = 291,
- MATRIX2 = 292,
- MATRIX3 = 293,
- MATRIX4 = 294,
- IN_QUAL = 295,
- OUT_QUAL = 296,
- INOUT_QUAL = 297,
- UNIFORM = 298,
- VARYING = 299,
- MATRIX2x3 = 300,
- MATRIX3x2 = 301,
- MATRIX2x4 = 302,
- MATRIX4x2 = 303,
- MATRIX3x4 = 304,
- MATRIX4x3 = 305,
- CENTROID = 306,
- FLAT = 307,
- SMOOTH = 308,
- READONLY = 309,
- WRITEONLY = 310,
- COHERENT = 311,
- RESTRICT = 312,
- VOLATILE = 313,
- STRUCT = 314,
- VOID_TYPE = 315,
- WHILE = 316,
- SAMPLER2D = 317,
- SAMPLERCUBE = 318,
- SAMPLER_EXTERNAL_OES = 319,
- SAMPLER2DRECT = 320,
- SAMPLER2DARRAY = 321,
- ISAMPLER2D = 322,
- ISAMPLER3D = 323,
- ISAMPLERCUBE = 324,
- ISAMPLER2DARRAY = 325,
- USAMPLER2D = 326,
- USAMPLER3D = 327,
- USAMPLERCUBE = 328,
- USAMPLER2DARRAY = 329,
- SAMPLER3D = 330,
- SAMPLER3DRECT = 331,
- SAMPLER2DSHADOW = 332,
- SAMPLERCUBESHADOW = 333,
- SAMPLER2DARRAYSHADOW = 334,
- IMAGE2D = 335,
- IIMAGE2D = 336,
- UIMAGE2D = 337,
- IMAGE3D = 338,
- IIMAGE3D = 339,
- UIMAGE3D = 340,
- IMAGE2DARRAY = 341,
- IIMAGE2DARRAY = 342,
- UIMAGE2DARRAY = 343,
- IMAGECUBE = 344,
- IIMAGECUBE = 345,
- UIMAGECUBE = 346,
- LAYOUT = 347,
- IDENTIFIER = 348,
- TYPE_NAME = 349,
- FLOATCONSTANT = 350,
- INTCONSTANT = 351,
- UINTCONSTANT = 352,
- BOOLCONSTANT = 353,
- FIELD_SELECTION = 354,
- LEFT_OP = 355,
- RIGHT_OP = 356,
- INC_OP = 357,
- DEC_OP = 358,
- LE_OP = 359,
- GE_OP = 360,
- EQ_OP = 361,
- NE_OP = 362,
- AND_OP = 363,
- OR_OP = 364,
- XOR_OP = 365,
- MUL_ASSIGN = 366,
- DIV_ASSIGN = 367,
- ADD_ASSIGN = 368,
- MOD_ASSIGN = 369,
- LEFT_ASSIGN = 370,
- RIGHT_ASSIGN = 371,
- AND_ASSIGN = 372,
- XOR_ASSIGN = 373,
- OR_ASSIGN = 374,
- SUB_ASSIGN = 375,
- LEFT_PAREN = 376,
- RIGHT_PAREN = 377,
- LEFT_BRACKET = 378,
- RIGHT_BRACKET = 379,
- LEFT_BRACE = 380,
- RIGHT_BRACE = 381,
- DOT = 382,
- COMMA = 383,
- COLON = 384,
- EQUAL = 385,
- SEMICOLON = 386,
- BANG = 387,
- DASH = 388,
- TILDE = 389,
- PLUS = 390,
- STAR = 391,
- SLASH = 392,
- PERCENT = 393,
- LEFT_ANGLE = 394,
- RIGHT_ANGLE = 395,
- VERTICAL_BAR = 396,
- CARET = 397,
- AMPERSAND = 398,
- QUESTION = 399
-};
+ enum yytokentype
+ {
+ INVARIANT = 258,
+ HIGH_PRECISION = 259,
+ MEDIUM_PRECISION = 260,
+ LOW_PRECISION = 261,
+ PRECISION = 262,
+ ATTRIBUTE = 263,
+ CONST_QUAL = 264,
+ BOOL_TYPE = 265,
+ FLOAT_TYPE = 266,
+ INT_TYPE = 267,
+ UINT_TYPE = 268,
+ BREAK = 269,
+ CONTINUE = 270,
+ DO = 271,
+ ELSE = 272,
+ FOR = 273,
+ IF = 274,
+ DISCARD = 275,
+ RETURN = 276,
+ SWITCH = 277,
+ CASE = 278,
+ DEFAULT = 279,
+ BVEC2 = 280,
+ BVEC3 = 281,
+ BVEC4 = 282,
+ IVEC2 = 283,
+ IVEC3 = 284,
+ IVEC4 = 285,
+ VEC2 = 286,
+ VEC3 = 287,
+ VEC4 = 288,
+ UVEC2 = 289,
+ UVEC3 = 290,
+ UVEC4 = 291,
+ MATRIX2 = 292,
+ MATRIX3 = 293,
+ MATRIX4 = 294,
+ IN_QUAL = 295,
+ OUT_QUAL = 296,
+ INOUT_QUAL = 297,
+ UNIFORM = 298,
+ VARYING = 299,
+ MATRIX2x3 = 300,
+ MATRIX3x2 = 301,
+ MATRIX2x4 = 302,
+ MATRIX4x2 = 303,
+ MATRIX3x4 = 304,
+ MATRIX4x3 = 305,
+ CENTROID = 306,
+ FLAT = 307,
+ SMOOTH = 308,
+ STRUCT = 309,
+ VOID_TYPE = 310,
+ WHILE = 311,
+ SAMPLER2D = 312,
+ SAMPLERCUBE = 313,
+ SAMPLER_EXTERNAL_OES = 314,
+ SAMPLER2DRECT = 315,
+ SAMPLER2DARRAY = 316,
+ ISAMPLER2D = 317,
+ ISAMPLER3D = 318,
+ ISAMPLERCUBE = 319,
+ ISAMPLER2DARRAY = 320,
+ USAMPLER2D = 321,
+ USAMPLER3D = 322,
+ USAMPLERCUBE = 323,
+ USAMPLER2DARRAY = 324,
+ SAMPLER3D = 325,
+ SAMPLER3DRECT = 326,
+ SAMPLER2DSHADOW = 327,
+ SAMPLERCUBESHADOW = 328,
+ SAMPLER2DARRAYSHADOW = 329,
+ LAYOUT = 330,
+ IDENTIFIER = 331,
+ TYPE_NAME = 332,
+ FLOATCONSTANT = 333,
+ INTCONSTANT = 334,
+ UINTCONSTANT = 335,
+ BOOLCONSTANT = 336,
+ FIELD_SELECTION = 337,
+ LEFT_OP = 338,
+ RIGHT_OP = 339,
+ INC_OP = 340,
+ DEC_OP = 341,
+ LE_OP = 342,
+ GE_OP = 343,
+ EQ_OP = 344,
+ NE_OP = 345,
+ AND_OP = 346,
+ OR_OP = 347,
+ XOR_OP = 348,
+ MUL_ASSIGN = 349,
+ DIV_ASSIGN = 350,
+ ADD_ASSIGN = 351,
+ MOD_ASSIGN = 352,
+ LEFT_ASSIGN = 353,
+ RIGHT_ASSIGN = 354,
+ AND_ASSIGN = 355,
+ XOR_ASSIGN = 356,
+ OR_ASSIGN = 357,
+ SUB_ASSIGN = 358,
+ LEFT_PAREN = 359,
+ RIGHT_PAREN = 360,
+ LEFT_BRACKET = 361,
+ RIGHT_BRACKET = 362,
+ LEFT_BRACE = 363,
+ RIGHT_BRACE = 364,
+ DOT = 365,
+ COMMA = 366,
+ COLON = 367,
+ EQUAL = 368,
+ SEMICOLON = 369,
+ BANG = 370,
+ DASH = 371,
+ TILDE = 372,
+ PLUS = 373,
+ STAR = 374,
+ SLASH = 375,
+ PERCENT = 376,
+ LEFT_ANGLE = 377,
+ RIGHT_ANGLE = 378,
+ VERTICAL_BAR = 379,
+ CARET = 380,
+ AMPERSAND = 381,
+ QUESTION = 382
+ };
#endif
/* Value type. */
@@ -217,27 +200,22 @@ union YYSTYPE
struct {
TOperator op;
union {
- TIntermNode *intermNode;
+ TIntermNode* intermNode;
TIntermNodePair nodePair;
- TIntermTyped *intermTypedNode;
- TIntermAggregate *intermAggregate;
- TIntermBlock *intermBlock;
- TIntermDeclaration *intermDeclaration;
- TIntermSwitch *intermSwitch;
- TIntermCase *intermCase;
+ TIntermTyped* intermTypedNode;
+ TIntermAggregate* intermAggregate;
+ TIntermSwitch* intermSwitch;
+ TIntermCase* intermCase;
};
union {
- TTypeSpecifierNonArray typeSpecifierNonArray;
TPublicType type;
TPrecision precision;
TLayoutQualifier layoutQualifier;
TQualifier qualifier;
- TFunction *function;
+ TFunction* function;
TParameter param;
- TField *field;
- TFieldList *fieldList;
- TQualifierWrapperBase *qualifierWrapper;
- TTypeQualifierBuilder *typeQualifierBuilder;
+ TField* field;
+ TFieldList* fieldList;
};
} interm;
diff --git a/gfx/angle/src/compiler/translator/intermOut.cpp b/gfx/angle/src/compiler/translator/intermOut.cpp
index 53ee1d02a..6dca547f0 100755
--- a/gfx/angle/src/compiler/translator/intermOut.cpp
+++ b/gfx/angle/src/compiler/translator/intermOut.cpp
@@ -7,17 +7,13 @@
#include "compiler/translator/Intermediate.h"
#include "compiler/translator/SymbolTable.h"
-namespace sh
-{
-
namespace
{
-void OutputFunction(TInfoSinkBase &out, const char *str, TFunctionSymbolInfo *info)
+void OutputFunction(TInfoSinkBase &out, const char *str, TIntermAggregate *node)
{
- const char *internal = info->getNameObj().isInternal() ? " (internal function)" : "";
- out << str << internal << ": " << info->getNameObj().getString() << " (symbol id "
- << info->getId() << ")";
+ const char *internal = node->getNameObj().isInternal() ? " (internal function)" : "";
+ out << str << internal << ": " << node->getNameObj().getString();
}
//
@@ -46,17 +42,10 @@ class TOutputTraverser : public TIntermTraverser
protected:
void visitSymbol(TIntermSymbol *) override;
void visitConstantUnion(TIntermConstantUnion *) override;
- bool visitSwizzle(Visit visit, TIntermSwizzle *node) override;
bool visitBinary(Visit visit, TIntermBinary *) override;
bool visitUnary(Visit visit, TIntermUnary *) override;
- bool visitTernary(Visit visit, TIntermTernary *node) override;
- bool visitIfElse(Visit visit, TIntermIfElse *node) override;
- bool visitSwitch(Visit visit, TIntermSwitch *node) override;
- bool visitCase(Visit visit, TIntermCase *node) override;
- bool visitFunctionDefinition(Visit visit, TIntermFunctionDefinition *node) override;
+ bool visitSelection(Visit visit, TIntermSelection *) override;
bool visitAggregate(Visit visit, TIntermAggregate *) override;
- bool visitBlock(Visit visit, TIntermBlock *) override;
- bool visitDeclaration(Visit visit, TIntermDeclaration *node) override;
bool visitLoop(Visit visit, TIntermLoop *) override;
bool visitBranch(Visit visit, TIntermBranch *) override;
};
@@ -93,14 +82,6 @@ void TOutputTraverser::visitSymbol(TIntermSymbol *node)
sink << "(" << node->getCompleteString() << ")\n";
}
-bool TOutputTraverser::visitSwizzle(Visit visit, TIntermSwizzle *node)
-{
- TInfoSinkBase &out = sink;
- OutputTreeText(out, node, mDepth);
- out << "vector swizzle";
- return true;
-}
-
bool TOutputTraverser::visitBinary(Visit visit, TIntermBinary *node)
{
TInfoSinkBase& out = sink;
@@ -109,148 +90,148 @@ bool TOutputTraverser::visitBinary(Visit visit, TIntermBinary *node)
switch (node->getOp())
{
- case EOpComma:
- out << "comma";
- break;
- case EOpAssign:
- out << "move second child to first child";
- break;
- case EOpInitialize:
- out << "initialize first child with second child";
- break;
- case EOpAddAssign:
- out << "add second child into first child";
- break;
- case EOpSubAssign:
- out << "subtract second child into first child";
- break;
- case EOpMulAssign:
- out << "multiply second child into first child";
- break;
- case EOpVectorTimesMatrixAssign:
- out << "matrix mult second child into first child";
- break;
- case EOpVectorTimesScalarAssign:
- out << "vector scale second child into first child";
- break;
- case EOpMatrixTimesScalarAssign:
- out << "matrix scale second child into first child";
- break;
- case EOpMatrixTimesMatrixAssign:
- out << "matrix mult second child into first child";
- break;
- case EOpDivAssign:
- out << "divide second child into first child";
- break;
- case EOpIModAssign:
- out << "modulo second child into first child";
- break;
- case EOpBitShiftLeftAssign:
- out << "bit-wise shift first child left by second child";
- break;
- case EOpBitShiftRightAssign:
- out << "bit-wise shift first child right by second child";
- break;
- case EOpBitwiseAndAssign:
- out << "bit-wise and second child into first child";
- break;
- case EOpBitwiseXorAssign:
- out << "bit-wise xor second child into first child";
- break;
- case EOpBitwiseOrAssign:
- out << "bit-wise or second child into first child";
- break;
-
- case EOpIndexDirect:
- out << "direct index";
- break;
- case EOpIndexIndirect:
- out << "indirect index";
- break;
- case EOpIndexDirectStruct:
- out << "direct index for structure";
- break;
- case EOpIndexDirectInterfaceBlock:
- out << "direct index for interface block";
- break;
-
- case EOpAdd:
- out << "add";
- break;
- case EOpSub:
- out << "subtract";
- break;
- case EOpMul:
- out << "component-wise multiply";
- break;
- case EOpDiv:
- out << "divide";
- break;
- case EOpIMod:
- out << "modulo";
- break;
- case EOpBitShiftLeft:
- out << "bit-wise shift left";
- break;
- case EOpBitShiftRight:
- out << "bit-wise shift right";
- break;
- case EOpBitwiseAnd:
- out << "bit-wise and";
- break;
- case EOpBitwiseXor:
- out << "bit-wise xor";
- break;
- case EOpBitwiseOr:
- out << "bit-wise or";
- break;
-
- case EOpEqual:
- out << "Compare Equal";
- break;
- case EOpNotEqual:
- out << "Compare Not Equal";
- break;
- case EOpLessThan:
- out << "Compare Less Than";
- break;
- case EOpGreaterThan:
- out << "Compare Greater Than";
- break;
- case EOpLessThanEqual:
- out << "Compare Less Than or Equal";
- break;
- case EOpGreaterThanEqual:
- out << "Compare Greater Than or Equal";
- break;
-
- case EOpVectorTimesScalar:
- out << "vector-scale";
- break;
- case EOpVectorTimesMatrix:
- out << "vector-times-matrix";
- break;
- case EOpMatrixTimesVector:
- out << "matrix-times-vector";
- break;
- case EOpMatrixTimesScalar:
- out << "matrix-scale";
- break;
- case EOpMatrixTimesMatrix:
- out << "matrix-multiply";
- break;
-
- case EOpLogicalOr:
- out << "logical-or";
- break;
- case EOpLogicalXor:
- out << "logical-xor";
- break;
- case EOpLogicalAnd:
- out << "logical-and";
- break;
- default:
- out << "<unknown op>";
+ case EOpAssign:
+ out << "move second child to first child";
+ break;
+ case EOpInitialize:
+ out << "initialize first child with second child";
+ break;
+ case EOpAddAssign:
+ out << "add second child into first child";
+ break;
+ case EOpSubAssign:
+ out << "subtract second child into first child";
+ break;
+ case EOpMulAssign:
+ out << "multiply second child into first child";
+ break;
+ case EOpVectorTimesMatrixAssign:
+ out << "matrix mult second child into first child";
+ break;
+ case EOpVectorTimesScalarAssign:
+ out << "vector scale second child into first child";
+ break;
+ case EOpMatrixTimesScalarAssign:
+ out << "matrix scale second child into first child";
+ break;
+ case EOpMatrixTimesMatrixAssign:
+ out << "matrix mult second child into first child";
+ break;
+ case EOpDivAssign:
+ out << "divide second child into first child";
+ break;
+ case EOpIModAssign:
+ out << "modulo second child into first child";
+ break;
+ case EOpBitShiftLeftAssign:
+ out << "bit-wise shift first child left by second child";
+ break;
+ case EOpBitShiftRightAssign:
+ out << "bit-wise shift first child right by second child";
+ break;
+ case EOpBitwiseAndAssign:
+ out << "bit-wise and second child into first child";
+ break;
+ case EOpBitwiseXorAssign:
+ out << "bit-wise xor second child into first child";
+ break;
+ case EOpBitwiseOrAssign:
+ out << "bit-wise or second child into first child";
+ break;
+
+ case EOpIndexDirect:
+ out << "direct index";
+ break;
+ case EOpIndexIndirect:
+ out << "indirect index";
+ break;
+ case EOpIndexDirectStruct:
+ out << "direct index for structure";
+ break;
+ case EOpIndexDirectInterfaceBlock:
+ out << "direct index for interface block";
+ break;
+ case EOpVectorSwizzle:
+ out << "vector swizzle";
+ break;
+
+ case EOpAdd:
+ out << "add";
+ break;
+ case EOpSub:
+ out << "subtract";
+ break;
+ case EOpMul:
+ out << "component-wise multiply";
+ break;
+ case EOpDiv:
+ out << "divide";
+ break;
+ case EOpIMod:
+ out << "modulo";
+ break;
+ case EOpBitShiftLeft:
+ out << "bit-wise shift left";
+ break;
+ case EOpBitShiftRight:
+ out << "bit-wise shift right";
+ break;
+ case EOpBitwiseAnd:
+ out << "bit-wise and";
+ break;
+ case EOpBitwiseXor:
+ out << "bit-wise xor";
+ break;
+ case EOpBitwiseOr:
+ out << "bit-wise or";
+ break;
+
+ case EOpEqual:
+ out << "Compare Equal";
+ break;
+ case EOpNotEqual:
+ out << "Compare Not Equal";
+ break;
+ case EOpLessThan:
+ out << "Compare Less Than";
+ break;
+ case EOpGreaterThan:
+ out << "Compare Greater Than";
+ break;
+ case EOpLessThanEqual:
+ out << "Compare Less Than or Equal";
+ break;
+ case EOpGreaterThanEqual:
+ out << "Compare Greater Than or Equal";
+ break;
+
+ case EOpVectorTimesScalar:
+ out << "vector-scale";
+ break;
+ case EOpVectorTimesMatrix:
+ out << "vector-times-matrix";
+ break;
+ case EOpMatrixTimesVector:
+ out << "matrix-times-vector";
+ break;
+ case EOpMatrixTimesScalar:
+ out << "matrix-scale";
+ break;
+ case EOpMatrixTimesMatrix:
+ out << "matrix-multiply";
+ break;
+
+ case EOpLogicalOr:
+ out << "logical-or";
+ break;
+ case EOpLogicalXor:
+ out << "logical-xor";
+ break;
+ case EOpLogicalAnd:
+ out << "logical-and";
+ break;
+ default:
+ out << "<unknown op>";
}
out << " (" << node->getCompleteString() << ")";
@@ -381,38 +362,27 @@ bool TOutputTraverser::visitUnary(Visit visit, TIntermUnary *node)
return true;
}
-bool TOutputTraverser::visitFunctionDefinition(Visit visit, TIntermFunctionDefinition *node)
-{
- TInfoSinkBase &out = sink;
- OutputTreeText(out, node, mDepth);
- OutputFunction(out, "Function Definition", node->getFunctionSymbolInfo());
- out << "\n";
- return true;
-}
-
bool TOutputTraverser::visitAggregate(Visit visit, TIntermAggregate *node)
{
TInfoSinkBase &out = sink;
- OutputTreeText(out, node, mDepth);
-
if (node->getOp() == EOpNull)
{
out.prefix(EPrefixError);
- out << "node is still EOpNull!\n";
+ out << "node is still EOpNull!";
return true;
}
+ OutputTreeText(out, node, mDepth);
switch (node->getOp())
{
- case EOpFunctionCall:
- OutputFunction(out, "Function Call", node->getFunctionSymbolInfo());
- break;
+ case EOpSequence: out << "Sequence\n"; return true;
+ case EOpComma: out << "Comma\n"; return true;
+ case EOpFunction: OutputFunction(out, "Function Definition", node); break;
+ case EOpFunctionCall: OutputFunction(out, "Function Call", node); break;
case EOpParameters: out << "Function Parameters: "; break;
- case EOpPrototype:
- OutputFunction(out, "Function Prototype", node->getFunctionSymbolInfo());
- break;
+ case EOpPrototype: OutputFunction(out, "Function Prototype", node); break;
case EOpConstructFloat: out << "Construct float"; break;
case EOpConstructVec2: out << "Construct vec2"; break;
@@ -471,6 +441,7 @@ bool TOutputTraverser::visitAggregate(Visit visit, TIntermAggregate *node)
case EOpOuterProduct: out << "outer product"; break;
+ case EOpDeclaration: out << "Declaration: "; break;
case EOpInvariantDeclaration: out << "Invariant Declaration: "; break;
default:
@@ -478,7 +449,7 @@ bool TOutputTraverser::visitAggregate(Visit visit, TIntermAggregate *node)
out << "Bad aggregation op";
}
- if (node->getOp() != EOpParameters)
+ if (node->getOp() != EOpSequence && node->getOp() != EOpParameters)
out << " (" << node->getCompleteString() << ")";
out << "\n";
@@ -486,33 +457,13 @@ bool TOutputTraverser::visitAggregate(Visit visit, TIntermAggregate *node)
return true;
}
-bool TOutputTraverser::visitBlock(Visit visit, TIntermBlock *node)
-{
- TInfoSinkBase &out = sink;
-
- OutputTreeText(out, node, mDepth);
- out << "Code block\n";
-
- return true;
-}
-
-bool TOutputTraverser::visitDeclaration(Visit visit, TIntermDeclaration *node)
-{
- TInfoSinkBase &out = sink;
-
- OutputTreeText(out, node, mDepth);
- out << "Declaration\n";
-
- return true;
-}
-
-bool TOutputTraverser::visitTernary(Visit visit, TIntermTernary *node)
+bool TOutputTraverser::visitSelection(Visit visit, TIntermSelection *node)
{
TInfoSinkBase &out = sink;
OutputTreeText(out, node, mDepth);
- out << "Ternary selection";
+ out << "Test condition and select";
out << " (" << node->getCompleteString() << ")\n";
++mDepth;
@@ -522,38 +473,6 @@ bool TOutputTraverser::visitTernary(Visit visit, TIntermTernary *node)
node->getCondition()->traverse(this);
OutputTreeText(sink, node, mDepth);
- if (node->getTrueExpression())
- {
- out << "true case\n";
- node->getTrueExpression()->traverse(this);
- }
- if (node->getFalseExpression())
- {
- OutputTreeText(sink, node, mDepth);
- out << "false case\n";
- node->getFalseExpression()->traverse(this);
- }
-
- --mDepth;
-
- return false;
-}
-
-bool TOutputTraverser::visitIfElse(Visit visit, TIntermIfElse *node)
-{
- TInfoSinkBase &out = sink;
-
- OutputTreeText(out, node, mDepth);
-
- out << "If test\n";
-
- ++mDepth;
-
- OutputTreeText(sink, node, mDepth);
- out << "Condition\n";
- node->getCondition()->traverse(this);
-
- OutputTreeText(sink, node, mDepth);
if (node->getTrueBlock())
{
out << "true case\n";
@@ -576,35 +495,6 @@ bool TOutputTraverser::visitIfElse(Visit visit, TIntermIfElse *node)
return false;
}
-bool TOutputTraverser::visitSwitch(Visit visit, TIntermSwitch *node)
-{
- TInfoSinkBase &out = sink;
-
- OutputTreeText(out, node, mDepth);
-
- out << "Switch\n";
-
- return true;
-}
-
-bool TOutputTraverser::visitCase(Visit visit, TIntermCase *node)
-{
- TInfoSinkBase &out = sink;
-
- OutputTreeText(out, node, mDepth);
-
- if (node->getCondition() == nullptr)
- {
- out << "Default\n";
- }
- else
- {
- out << "Case\n";
- }
-
- return true;
-}
-
void TOutputTraverser::visitConstantUnion(TIntermConstantUnion *node)
{
TInfoSinkBase &out = sink;
@@ -734,5 +624,3 @@ void TIntermediate::outputTree(TIntermNode *root, TInfoSinkBase &infoSink)
root->traverse(&it);
}
-
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/length_limits.h b/gfx/angle/src/compiler/translator/length_limits.h
index 607157f4a..88634381f 100755
--- a/gfx/angle/src/compiler/translator/length_limits.h
+++ b/gfx/angle/src/compiler/translator/length_limits.h
@@ -16,11 +16,6 @@
// These constants are factored out from the rest of the headers to
// make it easier to reference them from the compiler sources.
-namespace sh
-{
-
size_t GetGlobalMaxTokenSize(ShShaderSpec spec);
-} // namespace sh
-
#endif // COMPILER_TRANSLATOR_LENGTHLIMITS_H_
diff --git a/gfx/angle/src/compiler/translator/timing/RestrictFragmentShaderTiming.cpp b/gfx/angle/src/compiler/translator/timing/RestrictFragmentShaderTiming.cpp
new file mode 100644
index 000000000..790974a2b
--- /dev/null
+++ b/gfx/angle/src/compiler/translator/timing/RestrictFragmentShaderTiming.cpp
@@ -0,0 +1,130 @@
+//
+// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+
+#include "compiler/translator/InfoSink.h"
+#include "compiler/translator/ParseContext.h"
+#include "compiler/translator/depgraph/DependencyGraphOutput.h"
+#include "compiler/translator/timing/RestrictFragmentShaderTiming.h"
+
+RestrictFragmentShaderTiming::RestrictFragmentShaderTiming(TInfoSinkBase& sink)
+ : mSink(sink)
+ , mNumErrors(0)
+{
+ // Sampling ops found only in fragment shaders.
+ mSamplingOps.insert("texture2D(s21;vf2;f1;");
+ mSamplingOps.insert("texture2DProj(s21;vf3;f1;");
+ mSamplingOps.insert("texture2DProj(s21;vf4;f1;");
+ mSamplingOps.insert("textureCube(sC1;vf3;f1;");
+ // Sampling ops found in both vertex and fragment shaders.
+ mSamplingOps.insert("texture2D(s21;vf2;");
+ mSamplingOps.insert("texture2DProj(s21;vf3;");
+ mSamplingOps.insert("texture2DProj(s21;vf4;");
+ mSamplingOps.insert("textureCube(sC1;vf3;");
+ // Sampling ops provided by OES_EGL_image_external.
+ mSamplingOps.insert("texture2D(1;vf2;");
+ mSamplingOps.insert("texture2DProj(1;vf3;");
+ mSamplingOps.insert("texture2DProj(1;vf4;");
+ // Sampling ops provided by ARB_texture_rectangle.
+ mSamplingOps.insert("texture2DRect(1;vf2;");
+ mSamplingOps.insert("texture2DRectProj(1;vf3;");
+ mSamplingOps.insert("texture2DRectProj(1;vf4;");
+ // Sampling ops provided by EXT_shader_texture_lod.
+ mSamplingOps.insert("texture2DLodEXT(1;vf2;f1;");
+ mSamplingOps.insert("texture2DProjLodEXT(1;vf3;f1;");
+ mSamplingOps.insert("texture2DProjLodEXT(1;vf4;f1;");
+ mSamplingOps.insert("textureCubeLodEXT(1;vf4;f1;");
+ mSamplingOps.insert("texture2DGradEXT(1;vf2;vf2;vf2;");
+ mSamplingOps.insert("texture2DProjGradEXT(1;vf3;vf2;vf2;");
+ mSamplingOps.insert("texture2DProjGradEXT(1;vf4;vf2;vf2;");
+ mSamplingOps.insert("textureCubeGradEXT(1;vf3;vf3;vf3;");
+}
+
+// FIXME(mvujovic): We do not know if the execution time of built-in operations like sin, pow, etc.
+// can vary based on the value of the input arguments. If so, we should restrict those as well.
+void RestrictFragmentShaderTiming::enforceRestrictions(const TDependencyGraph& graph)
+{
+ mNumErrors = 0;
+
+ // FIXME(mvujovic): The dependency graph does not support user defined function calls right now,
+ // so we generate errors for them.
+ validateUserDefinedFunctionCallUsage(graph);
+
+ // Starting from each sampler, traverse the dependency graph and generate an error each time we
+ // hit a node where sampler dependent values are not allowed.
+ for (auto samplerSymbol : graph.samplerSymbols())
+ {
+ clearVisited();
+ samplerSymbol->traverse(this);
+ }
+}
+
+void RestrictFragmentShaderTiming::validateUserDefinedFunctionCallUsage(const TDependencyGraph& graph)
+{
+ for (const auto* functionCall : graph.userDefinedFunctionCalls())
+ {
+ beginError(functionCall->getIntermFunctionCall());
+ mSink << "A call to a user defined function is not permitted.\n";
+ }
+}
+
+void RestrictFragmentShaderTiming::beginError(const TIntermNode* node)
+{
+ ++mNumErrors;
+ mSink.prefix(EPrefixError);
+ mSink.location(node->getLine());
+}
+
+bool RestrictFragmentShaderTiming::isSamplingOp(const TIntermAggregate* intermFunctionCall) const
+{
+ return !intermFunctionCall->isUserDefined() &&
+ mSamplingOps.find(intermFunctionCall->getName()) != mSamplingOps.end();
+}
+
+void RestrictFragmentShaderTiming::visitArgument(TGraphArgument* parameter)
+{
+ // Texture cache access time might leak sensitive information.
+ // Thus, we restrict sampler dependent values from affecting the coordinate or LOD bias of a
+ // sampling operation.
+ if (isSamplingOp(parameter->getIntermFunctionCall())) {
+ switch (parameter->getArgumentNumber()) {
+ case 1:
+ // Second argument (coord)
+ beginError(parameter->getIntermFunctionCall());
+ mSink << "An expression dependent on a sampler is not permitted to be the"
+ << " coordinate argument of a sampling operation.\n";
+ break;
+ case 2:
+ // Third argument (bias)
+ beginError(parameter->getIntermFunctionCall());
+ mSink << "An expression dependent on a sampler is not permitted to be the"
+ << " bias argument of a sampling operation.\n";
+ break;
+ default:
+ // First argument (sampler)
+ break;
+ }
+ }
+}
+
+void RestrictFragmentShaderTiming::visitSelection(TGraphSelection* selection)
+{
+ beginError(selection->getIntermSelection());
+ mSink << "An expression dependent on a sampler is not permitted in a conditional statement.\n";
+}
+
+void RestrictFragmentShaderTiming::visitLoop(TGraphLoop* loop)
+{
+ beginError(loop->getIntermLoop());
+ mSink << "An expression dependent on a sampler is not permitted in a loop condition.\n";
+}
+
+void RestrictFragmentShaderTiming::visitLogicalOp(TGraphLogicalOp* logicalOp)
+{
+ beginError(logicalOp->getIntermLogicalOp());
+ mSink << "An expression dependent on a sampler is not permitted on the left hand side of a logical "
+ << logicalOp->getOpString()
+ << " operator.\n";
+}
diff --git a/gfx/angle/src/compiler/translator/timing/RestrictFragmentShaderTiming.h b/gfx/angle/src/compiler/translator/timing/RestrictFragmentShaderTiming.h
new file mode 100644
index 000000000..b8c7e8295
--- /dev/null
+++ b/gfx/angle/src/compiler/translator/timing/RestrictFragmentShaderTiming.h
@@ -0,0 +1,39 @@
+//
+// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+
+#ifndef COMPILER_TRANSLATOR_TIMING_RESTRICTFRAGMENTSHADERTIMING_H_
+#define COMPILER_TRANSLATOR_TIMING_RESTRICTFRAGMENTSHADERTIMING_H_
+
+#include "compiler/translator/IntermNode.h"
+#include "compiler/translator/depgraph/DependencyGraph.h"
+
+class TInfoSinkBase;
+
+class RestrictFragmentShaderTiming : TDependencyGraphTraverser
+{
+ public:
+ RestrictFragmentShaderTiming(TInfoSinkBase &sink);
+ void enforceRestrictions(const TDependencyGraph &graph);
+ int numErrors() const { return mNumErrors; }
+
+ void visitArgument(TGraphArgument *parameter) override;
+ void visitSelection(TGraphSelection *selection) override;
+ void visitLoop(TGraphLoop *loop) override;
+ void visitLogicalOp(TGraphLogicalOp *logicalOp) override;
+
+ private:
+ void beginError(const TIntermNode *node);
+ void validateUserDefinedFunctionCallUsage(const TDependencyGraph &graph);
+ bool isSamplingOp(const TIntermAggregate *intermFunctionCall) const;
+
+ TInfoSinkBase &mSink;
+ int mNumErrors;
+
+ typedef std::set<TString> StringSet;
+ StringSet mSamplingOps;
+};
+
+#endif // COMPILER_TRANSLATOR_TIMING_RESTRICTFRAGMENTSHADERTIMING_H_
diff --git a/gfx/angle/src/compiler/translator/timing/RestrictVertexShaderTiming.cpp b/gfx/angle/src/compiler/translator/timing/RestrictVertexShaderTiming.cpp
new file mode 100644
index 000000000..7c1208a29
--- /dev/null
+++ b/gfx/angle/src/compiler/translator/timing/RestrictVertexShaderTiming.cpp
@@ -0,0 +1,17 @@
+//
+// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+
+#include "compiler/translator/timing/RestrictVertexShaderTiming.h"
+
+void RestrictVertexShaderTiming::visitSymbol(TIntermSymbol* node)
+{
+ if (IsSampler(node->getBasicType())) {
+ ++mNumErrors;
+ mSink.message(EPrefixError,
+ node->getLine(),
+ "Samplers are not permitted in vertex shaders.\n");
+ }
+}
diff --git a/gfx/angle/src/compiler/translator/timing/RestrictVertexShaderTiming.h b/gfx/angle/src/compiler/translator/timing/RestrictVertexShaderTiming.h
new file mode 100644
index 000000000..23a821772
--- /dev/null
+++ b/gfx/angle/src/compiler/translator/timing/RestrictVertexShaderTiming.h
@@ -0,0 +1,32 @@
+//
+// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+
+#ifndef COMPILER_TRANSLATOR_TIMING_RESTRICTVERTEXSHADERTIMING_H_
+#define COMPILER_TRANSLATOR_TIMING_RESTRICTVERTEXSHADERTIMING_H_
+
+#include "compiler/translator/IntermNode.h"
+#include "compiler/translator/InfoSink.h"
+
+class TInfoSinkBase;
+
+class RestrictVertexShaderTiming : public TIntermTraverser {
+public:
+ RestrictVertexShaderTiming(TInfoSinkBase& sink)
+ : TIntermTraverser(true, false, false)
+ , mSink(sink)
+ , mNumErrors(0) {}
+
+ void enforceRestrictions(TIntermNode* root) { root->traverse(this); }
+ int numErrors() { return mNumErrors; }
+
+ void visitSymbol(TIntermSymbol *) override;
+
+private:
+ TInfoSinkBase& mSink;
+ int mNumErrors;
+};
+
+#endif // COMPILER_TRANSLATOR_TIMING_RESTRICTVERTEXSHADERTIMING_H_
diff --git a/gfx/angle/src/compiler/translator/util.cpp b/gfx/angle/src/compiler/translator/util.cpp
index 89f237ceb..bd3e484eb 100755
--- a/gfx/angle/src/compiler/translator/util.cpp
+++ b/gfx/angle/src/compiler/translator/util.cpp
@@ -159,30 +159,6 @@ GLenum GLVariableType(const TType &type)
case EbtSampler2DShadow: return GL_SAMPLER_2D_SHADOW;
case EbtSamplerCubeShadow: return GL_SAMPLER_CUBE_SHADOW;
case EbtSampler2DArrayShadow: return GL_SAMPLER_2D_ARRAY_SHADOW;
- case EbtImage2D:
- return GL_IMAGE_2D;
- case EbtIImage2D:
- return GL_INT_IMAGE_2D;
- case EbtUImage2D:
- return GL_UNSIGNED_INT_IMAGE_2D;
- case EbtImage2DArray:
- return GL_IMAGE_2D_ARRAY;
- case EbtIImage2DArray:
- return GL_INT_IMAGE_2D_ARRAY;
- case EbtUImage2DArray:
- return GL_UNSIGNED_INT_IMAGE_2D_ARRAY;
- case EbtImage3D:
- return GL_IMAGE_3D;
- case EbtIImage3D:
- return GL_INT_IMAGE_3D;
- case EbtUImage3D:
- return GL_UNSIGNED_INT_IMAGE_3D;
- case EbtImageCube:
- return GL_IMAGE_CUBE;
- case EbtIImageCube:
- return GL_INT_IMAGE_CUBE;
- case EbtUImageCube:
- return GL_UNSIGNED_INT_IMAGE_CUBE;
default: UNREACHABLE();
}
@@ -302,18 +278,10 @@ InterpolationType GetInterpolationType(TQualifier qualifier)
}
}
-TType GetShaderVariableBasicType(const sh::ShaderVariable &var)
+TType ConvertShaderVariableTypeToTType(sh::GLenum type)
{
- switch (var.type)
+ switch (type)
{
- case GL_BOOL:
- return TType(EbtBool);
- case GL_BOOL_VEC2:
- return TType(EbtBool, 2);
- case GL_BOOL_VEC3:
- return TType(EbtBool, 3);
- case GL_BOOL_VEC4:
- return TType(EbtBool, 4);
case GL_FLOAT:
return TType(EbtFloat);
case GL_FLOAT_VEC2:
@@ -569,52 +537,4 @@ template void GetVariableTraverser::traverse(const TType &, const TString &, std
template void GetVariableTraverser::traverse(const TType &, const TString &, std::vector<Uniform> *);
template void GetVariableTraverser::traverse(const TType &, const TString &, std::vector<Varying> *);
-// GLSL ES 1.0.17 4.6.1 The Invariant Qualifier
-bool CanBeInvariantESSL1(TQualifier qualifier)
-{
- return IsVaryingIn(qualifier) || IsVaryingOut(qualifier) ||
- IsBuiltinOutputVariable(qualifier) ||
- (IsBuiltinFragmentInputVariable(qualifier) && qualifier != EvqFrontFacing);
-}
-
-// GLSL ES 3.00 Revision 6, 4.6.1 The Invariant Qualifier
-// GLSL ES 3.10 Revision 4, 4.8.1 The Invariant Qualifier
-bool CanBeInvariantESSL3OrGreater(TQualifier qualifier)
-{
- return IsVaryingOut(qualifier) || qualifier == EvqFragmentOut ||
- IsBuiltinOutputVariable(qualifier);
-}
-
-bool IsBuiltinOutputVariable(TQualifier qualifier)
-{
- switch (qualifier)
- {
- case EvqPosition:
- case EvqPointSize:
- case EvqFragDepth:
- case EvqFragDepthEXT:
- case EvqFragColor:
- case EvqSecondaryFragColorEXT:
- case EvqFragData:
- case EvqSecondaryFragDataEXT:
- return true;
- default:
- break;
- }
- return false;
-}
-
-bool IsBuiltinFragmentInputVariable(TQualifier qualifier)
-{
- switch (qualifier)
- {
- case EvqFragCoord:
- case EvqPointCoord:
- case EvqFrontFacing:
- return true;
- default:
- break;
- }
- return false;
}
-} // namespace sh
diff --git a/gfx/angle/src/compiler/translator/util.h b/gfx/angle/src/compiler/translator/util.h
index bfad5fb4c..4e577b111 100755
--- a/gfx/angle/src/compiler/translator/util.h
+++ b/gfx/angle/src/compiler/translator/util.h
@@ -25,9 +25,10 @@ bool strtof_clamp(const std::string &str, float *value);
// Return false if overflow happens.
bool atoi_clamp(const char *str, unsigned int *value);
+class TSymbolTable;
+
namespace sh
{
-class TSymbolTable;
GLenum GLVariableType(const TType &type);
GLenum GLVariablePrecision(const TType &type);
@@ -36,8 +37,8 @@ bool IsVaryingOut(TQualifier qualifier);
bool IsVarying(TQualifier qualifier);
InterpolationType GetInterpolationType(TQualifier qualifier);
TString ArrayString(const TType &type);
-
-TType GetShaderVariableBasicType(const sh::ShaderVariable &var);
+// Handles only basic output variable types.
+TType ConvertShaderVariableTypeToTType(sh::GLenum type);
TOperator TypeToConstructorOperator(const TType &type);
@@ -64,10 +65,6 @@ class GetVariableTraverser : angle::NonCopyable
const TSymbolTable &mSymbolTable;
};
-bool IsBuiltinOutputVariable(TQualifier qualifier);
-bool IsBuiltinFragmentInputVariable(TQualifier qualifier);
-bool CanBeInvariantESSL1(TQualifier qualifier);
-bool CanBeInvariantESSL3OrGreater(TQualifier qualifier);
-} // namespace sh
+}
#endif // COMPILER_TRANSLATOR_UTIL_H_
diff --git a/gfx/angle/src/image_util/loadimage_etc.cpp b/gfx/angle/src/image_util/loadimage_etc.cpp
index b0881f728..39cdef20f 100755
--- a/gfx/angle/src/image_util/loadimage_etc.cpp
+++ b/gfx/angle/src/image_util/loadimage_etc.cpp
@@ -891,10 +891,10 @@ struct ETC2Block
std::swap(dxEnd, dyEnd);
}
- for (size_t j = dyBegin; j < dyEnd; j++)
+ for (size_t j = dyBegin; j < dyEnd && (y + j) < h; j++)
{
int *row = &pixelIndices[j * 4];
- for (size_t i = dxBegin; i < dxEnd; i++)
+ for (size_t i = dxBegin; i < dxEnd && (x + i) < w; i++)
{
const size_t pixelIndex = subblockIdx * 4 + getIndex(i, j);
row[i] = static_cast<int>(pixelIndex);
diff --git a/gfx/angle/src/libANGLE/Buffer.cpp b/gfx/angle/src/libANGLE/Buffer.cpp
index c69d1c671..3523b32ac 100755
--- a/gfx/angle/src/libANGLE/Buffer.cpp
+++ b/gfx/angle/src/libANGLE/Buffer.cpp
@@ -10,95 +10,99 @@
#include "libANGLE/Buffer.h"
#include "libANGLE/renderer/BufferImpl.h"
-#include "libANGLE/renderer/GLImplFactory.h"
namespace gl
{
-BufferState::BufferState()
- : mLabel(),
+Buffer::Buffer(rx::BufferImpl *impl, GLuint id)
+ : RefCountObject(id),
+ mBuffer(impl),
+ mLabel(),
mUsage(GL_STATIC_DRAW),
mSize(0),
mAccessFlags(0),
mAccess(GL_WRITE_ONLY_OES),
mMapped(GL_FALSE),
- mMapPointer(nullptr),
+ mMapPointer(NULL),
mMapOffset(0),
mMapLength(0)
{
}
-BufferState::~BufferState()
-{
-}
-
-Buffer::Buffer(rx::GLImplFactory *factory, GLuint id)
- : RefCountObject(id), mImpl(factory->createBuffer(mState))
-{
-}
-
Buffer::~Buffer()
{
- SafeDelete(mImpl);
+ SafeDelete(mBuffer);
}
void Buffer::setLabel(const std::string &label)
{
- mState.mLabel = label;
+ mLabel = label;
}
const std::string &Buffer::getLabel() const
{
- return mState.mLabel;
+ return mLabel;
}
-Error Buffer::bufferData(GLenum target, const void *data, GLsizeiptr size, GLenum usage)
+Error Buffer::bufferData(const void *data, GLsizeiptr size, GLenum usage)
{
- ANGLE_TRY(mImpl->setData(target, data, size, usage));
+ gl::Error error = mBuffer->setData(data, size, usage);
+ if (error.isError())
+ {
+ return error;
+ }
mIndexRangeCache.clear();
- mState.mUsage = usage;
- mState.mSize = size;
+ mUsage = usage;
+ mSize = size;
- return NoError();
+ return error;
}
-Error Buffer::bufferSubData(GLenum target, const void *data, GLsizeiptr size, GLintptr offset)
+Error Buffer::bufferSubData(const void *data, GLsizeiptr size, GLintptr offset)
{
- ANGLE_TRY(mImpl->setSubData(target, data, size, offset));
+ gl::Error error = mBuffer->setSubData(data, size, offset);
+ if (error.isError())
+ {
+ return error;
+ }
mIndexRangeCache.invalidateRange(static_cast<unsigned int>(offset), static_cast<unsigned int>(size));
- return NoError();
+ return error;
}
Error Buffer::copyBufferSubData(Buffer* source, GLintptr sourceOffset, GLintptr destOffset, GLsizeiptr size)
{
- ANGLE_TRY(mImpl->copySubData(source->getImplementation(), sourceOffset, destOffset, size));
+ gl::Error error = mBuffer->copySubData(source->getImplementation(), sourceOffset, destOffset, size);
+ if (error.isError())
+ {
+ return error;
+ }
mIndexRangeCache.invalidateRange(static_cast<unsigned int>(destOffset), static_cast<unsigned int>(size));
- return NoError();
+ return error;
}
Error Buffer::map(GLenum access)
{
- ASSERT(!mState.mMapped);
+ ASSERT(!mMapped);
- Error error = mImpl->map(access, &mState.mMapPointer);
+ Error error = mBuffer->map(access, &mMapPointer);
if (error.isError())
{
- mState.mMapPointer = nullptr;
+ mMapPointer = NULL;
return error;
}
ASSERT(access == GL_WRITE_ONLY_OES);
- mState.mMapped = GL_TRUE;
- mState.mMapOffset = 0;
- mState.mMapLength = mState.mSize;
- mState.mAccess = access;
- mState.mAccessFlags = GL_MAP_WRITE_BIT;
+ mMapped = GL_TRUE;
+ mMapOffset = 0;
+ mMapLength = mSize;
+ mAccess = access;
+ mAccessFlags = GL_MAP_WRITE_BIT;
mIndexRangeCache.clear();
return error;
@@ -106,21 +110,21 @@ Error Buffer::map(GLenum access)
Error Buffer::mapRange(GLintptr offset, GLsizeiptr length, GLbitfield access)
{
- ASSERT(!mState.mMapped);
- ASSERT(offset + length <= mState.mSize);
+ ASSERT(!mMapped);
+ ASSERT(offset + length <= mSize);
- Error error = mImpl->mapRange(offset, length, access, &mState.mMapPointer);
+ Error error = mBuffer->mapRange(offset, length, access, &mMapPointer);
if (error.isError())
{
- mState.mMapPointer = nullptr;
+ mMapPointer = NULL;
return error;
}
- mState.mMapped = GL_TRUE;
- mState.mMapOffset = static_cast<GLint64>(offset);
- mState.mMapLength = static_cast<GLint64>(length);
- mState.mAccess = GL_WRITE_ONLY_OES;
- mState.mAccessFlags = access;
+ mMapped = GL_TRUE;
+ mMapOffset = static_cast<GLint64>(offset);
+ mMapLength = static_cast<GLint64>(length);
+ mAccess = GL_WRITE_ONLY_OES;
+ mAccessFlags = access;
// The OES_mapbuffer extension states that GL_WRITE_ONLY_OES is the only valid
// value for GL_BUFFER_ACCESS_OES because it was written against ES2. Since there is
@@ -137,21 +141,21 @@ Error Buffer::mapRange(GLintptr offset, GLsizeiptr length, GLbitfield access)
Error Buffer::unmap(GLboolean *result)
{
- ASSERT(mState.mMapped);
+ ASSERT(mMapped);
- Error error = mImpl->unmap(result);
+ Error error = mBuffer->unmap(result);
if (error.isError())
{
*result = GL_FALSE;
return error;
}
- mState.mMapped = GL_FALSE;
- mState.mMapPointer = nullptr;
- mState.mMapOffset = 0;
- mState.mMapLength = 0;
- mState.mAccess = GL_WRITE_ONLY_OES;
- mState.mAccessFlags = 0;
+ mMapped = GL_FALSE;
+ mMapPointer = NULL;
+ mMapOffset = 0;
+ mMapLength = 0;
+ mAccess = GL_WRITE_ONLY_OES;
+ mAccessFlags = 0;
return error;
}
@@ -174,14 +178,18 @@ Error Buffer::getIndexRange(GLenum type,
{
if (mIndexRangeCache.findRange(type, offset, count, primitiveRestartEnabled, outRange))
{
- return NoError();
+ return gl::Error(GL_NO_ERROR);
}
- ANGLE_TRY(mImpl->getIndexRange(type, offset, count, primitiveRestartEnabled, outRange));
+ Error error = mBuffer->getIndexRange(type, offset, count, primitiveRestartEnabled, outRange);
+ if (error.isError())
+ {
+ return error;
+ }
mIndexRangeCache.addRange(type, offset, count, primitiveRestartEnabled, *outRange);
- return NoError();
+ return Error(GL_NO_ERROR);
}
} // namespace gl
diff --git a/gfx/angle/src/libANGLE/Buffer.h b/gfx/angle/src/libANGLE/Buffer.h
index dba4d5adf..6c951ef58 100755
--- a/gfx/angle/src/libANGLE/Buffer.h
+++ b/gfx/angle/src/libANGLE/Buffer.h
@@ -20,20 +20,35 @@
namespace rx
{
class BufferImpl;
-class GLImplFactory;
};
namespace gl
{
-class Buffer;
-class BufferState final : angle::NonCopyable
+class Buffer final : public RefCountObject, public LabeledObject
{
public:
- BufferState();
- ~BufferState();
+ Buffer(rx::BufferImpl *impl, GLuint id);
+ virtual ~Buffer();
+
+ void setLabel(const std::string &label) override;
+ const std::string &getLabel() const override;
+
+ Error bufferData(const void *data, GLsizeiptr size, GLenum usage);
+ Error bufferSubData(const void *data, GLsizeiptr size, GLintptr offset);
+ Error copyBufferSubData(Buffer* source, GLintptr sourceOffset, GLintptr destOffset, GLsizeiptr size);
+ Error map(GLenum access);
+ Error mapRange(GLintptr offset, GLsizeiptr length, GLbitfield access);
+ Error unmap(GLboolean *result);
+
+ void onTransformFeedback();
+ void onPixelUnpack();
- const std::string &getLabel();
+ Error getIndexRange(GLenum type,
+ size_t offset,
+ size_t count,
+ bool primitiveRestartEnabled,
+ IndexRange *outRange) const;
GLenum getUsage() const { return mUsage; }
GLbitfield getAccessFlags() const { return mAccessFlags; }
@@ -44,8 +59,10 @@ class BufferState final : angle::NonCopyable
GLint64 getMapLength() const { return mMapLength; }
GLint64 getSize() const { return mSize; }
+ rx::BufferImpl *getImplementation() const { return mBuffer; }
+
private:
- friend class Buffer;
+ rx::BufferImpl *mBuffer;
std::string mLabel;
@@ -57,47 +74,6 @@ class BufferState final : angle::NonCopyable
GLvoid *mMapPointer;
GLint64 mMapOffset;
GLint64 mMapLength;
-};
-
-class Buffer final : public RefCountObject, public LabeledObject
-{
- public:
- Buffer(rx::GLImplFactory *factory, GLuint id);
- ~Buffer() override;
-
- void setLabel(const std::string &label) override;
- const std::string &getLabel() const override;
-
- Error bufferData(GLenum target, const void *data, GLsizeiptr size, GLenum usage);
- Error bufferSubData(GLenum target, const void *data, GLsizeiptr size, GLintptr offset);
- Error copyBufferSubData(Buffer* source, GLintptr sourceOffset, GLintptr destOffset, GLsizeiptr size);
- Error map(GLenum access);
- Error mapRange(GLintptr offset, GLsizeiptr length, GLbitfield access);
- Error unmap(GLboolean *result);
-
- void onTransformFeedback();
- void onPixelUnpack();
-
- Error getIndexRange(GLenum type,
- size_t offset,
- size_t count,
- bool primitiveRestartEnabled,
- IndexRange *outRange) const;
-
- GLenum getUsage() const { return mState.mUsage; }
- GLbitfield getAccessFlags() const { return mState.mAccessFlags; }
- GLenum getAccess() const { return mState.mAccess; }
- GLboolean isMapped() const { return mState.mMapped; }
- GLvoid *getMapPointer() const { return mState.mMapPointer; }
- GLint64 getMapOffset() const { return mState.mMapOffset; }
- GLint64 getMapLength() const { return mState.mMapLength; }
- GLint64 getSize() const { return mState.mSize; }
-
- rx::BufferImpl *getImplementation() const { return mImpl; }
-
- private:
- BufferState mState;
- rx::BufferImpl *mImpl;
mutable IndexRangeCache mIndexRangeCache;
};
diff --git a/gfx/angle/src/libANGLE/Caps.cpp b/gfx/angle/src/libANGLE/Caps.cpp
index d8e486d3d..985d79867 100755
--- a/gfx/angle/src/libANGLE/Caps.cpp
+++ b/gfx/angle/src/libANGLE/Caps.cpp
@@ -70,11 +70,6 @@ void TextureCapsMap::remove(GLenum internalFormat)
}
}
-void TextureCapsMap::clear()
-{
- mCapsMap.clear();
-}
-
const TextureCaps &TextureCapsMap::get(GLenum internalFormat) const
{
static TextureCaps defaultUnsupportedTexture;
@@ -166,12 +161,6 @@ Extensions::Extensions()
bindUniformLocation(false),
syncQuery(false),
copyTexture(false),
- copyCompressedTexture(false),
- webglCompatibility(false),
- bindGeneratesResource(false),
- robustClientMemory(false),
- textureSRGBDecode(false),
- sRGBWriteControl(false),
colorBufferFloat(false),
multisampleCompatibility(false),
framebufferMixedSamples(false),
@@ -184,13 +173,78 @@ std::vector<std::string> Extensions::getStrings() const
{
std::vector<std::string> extensionStrings;
- for (const auto &extensionInfo : GetExtensionInfoMap())
- {
- if (this->*(extensionInfo.second.ExtensionsMember))
- {
- extensionStrings.push_back(extensionInfo.first);
- }
- }
+ // clang-format off
+ // | Extension name | Supported flag | Output vector |
+ InsertExtensionString("GL_OES_element_index_uint", elementIndexUint, &extensionStrings);
+ InsertExtensionString("GL_OES_packed_depth_stencil", packedDepthStencil, &extensionStrings);
+ InsertExtensionString("GL_OES_get_program_binary", getProgramBinary, &extensionStrings);
+ InsertExtensionString("GL_OES_rgb8_rgba8", rgb8rgba8, &extensionStrings);
+ InsertExtensionString("GL_EXT_texture_format_BGRA8888", textureFormatBGRA8888, &extensionStrings);
+ InsertExtensionString("GL_EXT_read_format_bgra", readFormatBGRA, &extensionStrings);
+ InsertExtensionString("GL_NV_pixel_buffer_object", pixelBufferObject, &extensionStrings);
+ InsertExtensionString("GL_OES_mapbuffer", mapBuffer, &extensionStrings);
+ InsertExtensionString("GL_EXT_map_buffer_range", mapBufferRange, &extensionStrings);
+ InsertExtensionString("GL_EXT_color_buffer_half_float", colorBufferHalfFloat, &extensionStrings);
+ InsertExtensionString("GL_OES_texture_half_float", textureHalfFloat, &extensionStrings);
+ InsertExtensionString("GL_OES_texture_half_float_linear", textureHalfFloatLinear, &extensionStrings);
+ InsertExtensionString("GL_OES_texture_float", textureFloat, &extensionStrings);
+ InsertExtensionString("GL_OES_texture_float_linear", textureFloatLinear, &extensionStrings);
+ InsertExtensionString("GL_EXT_texture_rg", textureRG, &extensionStrings);
+ InsertExtensionString("GL_EXT_texture_compression_dxt1", textureCompressionDXT1, &extensionStrings);
+ InsertExtensionString("GL_ANGLE_texture_compression_dxt3", textureCompressionDXT3, &extensionStrings);
+ InsertExtensionString("GL_ANGLE_texture_compression_dxt5", textureCompressionDXT5, &extensionStrings);
+ InsertExtensionString("GL_KHR_texture_compression_astc_hdr", textureCompressionASTCHDR, &extensionStrings);
+ InsertExtensionString("GL_KHR_texture_compression_astc_ldr", textureCompressionASTCLDR, &extensionStrings);
+ InsertExtensionString("GL_OES_compressed_ETC1_RGB8_texture", compressedETC1RGB8Texture, &extensionStrings);
+ InsertExtensionString("GL_EXT_sRGB", sRGB, &extensionStrings);
+ InsertExtensionString("GL_ANGLE_depth_texture", depthTextures, &extensionStrings);
+ InsertExtensionString("GL_OES_depth32", depth32, &extensionStrings);
+ InsertExtensionString("GL_EXT_texture_storage", textureStorage, &extensionStrings);
+ InsertExtensionString("GL_OES_texture_npot", textureNPOT, &extensionStrings);
+ InsertExtensionString("GL_EXT_draw_buffers", drawBuffers, &extensionStrings);
+ InsertExtensionString("GL_EXT_texture_filter_anisotropic", textureFilterAnisotropic, &extensionStrings);
+ InsertExtensionString("GL_EXT_occlusion_query_boolean", occlusionQueryBoolean, &extensionStrings);
+ InsertExtensionString("GL_NV_fence", fence, &extensionStrings);
+ InsertExtensionString("GL_ANGLE_timer_query", timerQuery, &extensionStrings);
+ InsertExtensionString("GL_EXT_disjoint_timer_query", disjointTimerQuery, &extensionStrings);
+ InsertExtensionString("GL_EXT_robustness", robustness, &extensionStrings);
+ InsertExtensionString("GL_EXT_blend_minmax", blendMinMax, &extensionStrings);
+ InsertExtensionString("GL_ANGLE_framebuffer_blit", framebufferBlit, &extensionStrings);
+ InsertExtensionString("GL_ANGLE_framebuffer_multisample", framebufferMultisample, &extensionStrings);
+ InsertExtensionString("GL_ANGLE_instanced_arrays", instancedArrays, &extensionStrings);
+ InsertExtensionString("GL_ANGLE_pack_reverse_row_order", packReverseRowOrder, &extensionStrings);
+ InsertExtensionString("GL_OES_standard_derivatives", standardDerivatives, &extensionStrings);
+ InsertExtensionString("GL_EXT_shader_texture_lod", shaderTextureLOD, &extensionStrings);
+ InsertExtensionString("GL_NV_shader_framebuffer_fetch", NVshaderFramebufferFetch, &extensionStrings);
+ InsertExtensionString("GL_ARM_shader_framebuffer_fetch", ARMshaderFramebufferFetch, &extensionStrings);
+ InsertExtensionString("GL_EXT_shader_framebuffer_fetch", shaderFramebufferFetch, &extensionStrings);
+ InsertExtensionString("GL_EXT_frag_depth", fragDepth, &extensionStrings);
+ InsertExtensionString("GL_ANGLE_texture_usage", textureUsage, &extensionStrings);
+ InsertExtensionString("GL_ANGLE_translated_shader_source", translatedShaderSource, &extensionStrings);
+ InsertExtensionString("GL_OES_fbo_render_mipmap", fboRenderMipmap, &extensionStrings);
+ InsertExtensionString("GL_EXT_discard_framebuffer", discardFramebuffer, &extensionStrings);
+ InsertExtensionString("GL_EXT_debug_marker", debugMarker, &extensionStrings);
+ InsertExtensionString("GL_OES_EGL_image", eglImage, &extensionStrings);
+ InsertExtensionString("GL_OES_EGL_image_external", eglImageExternal, &extensionStrings);
+ InsertExtensionString("GL_OES_EGL_image_external_essl3", eglImageExternalEssl3, &extensionStrings);
+ InsertExtensionString("GL_NV_EGL_stream_consumer_external", eglStreamConsumerExternal, &extensionStrings);
+ InsertExtensionString("GL_EXT_unpack_subimage", unpackSubimage, &extensionStrings);
+ InsertExtensionString("GL_NV_pack_subimage", packSubimage, &extensionStrings);
+ InsertExtensionString("GL_EXT_color_buffer_float", colorBufferFloat, &extensionStrings);
+ InsertExtensionString("GL_OES_vertex_array_object", vertexArrayObject, &extensionStrings);
+ InsertExtensionString("GL_KHR_debug", debug, &extensionStrings);
+ // TODO(jmadill): Enable this when complete.
+ //InsertExtensionString("GL_KHR_no_error", noError, &extensionStrings);
+
+ InsertExtensionString("GL_ANGLE_lossy_etc_decode", lossyETCDecode, &extensionStrings);
+ InsertExtensionString("GL_CHROMIUM_bind_uniform_location", bindUniformLocation, &extensionStrings);
+ InsertExtensionString("GL_CHROMIUM_sync_query", syncQuery, &extensionStrings);
+ InsertExtensionString("GL_CHROMIUM_copy_texture", copyTexture, &extensionStrings);
+ InsertExtensionString("GL_EXT_multisample_compatibility", multisampleCompatibility, &extensionStrings);
+ InsertExtensionString("GL_CHROMIUM_framebuffer_mixed_samples", framebufferMixedSamples, &extensionStrings);
+ InsertExtensionString("GL_EXT_texture_norm16", textureNorm16, &extensionStrings);
+ InsertExtensionString("GL_CHROMIUM_path_rendering", pathRendering, &extensionStrings);
+ // clang-format on
return extensionStrings;
}
@@ -501,107 +555,6 @@ void Extensions::setTextureExtensionSupport(const TextureCapsMap &textureCaps)
textureNorm16 = DetermineTextureNorm16Support(textureCaps);
}
-const ExtensionInfoMap &GetExtensionInfoMap()
-{
- auto buildExtensionInfoMap = []() {
- auto enableableExtension = [](ExtensionInfo::ExtensionBool member) {
- ExtensionInfo info;
- info.Enableable = true;
- info.ExtensionsMember = member;
- return info;
- };
-
- auto esOnlyExtension = [](ExtensionInfo::ExtensionBool member) {
- ExtensionInfo info;
- info.ExtensionsMember = member;
- return info;
- };
-
- // clang-format off
- ExtensionInfoMap map;
- map["GL_OES_element_index_uint"] = enableableExtension(&Extensions::elementIndexUint);
- map["GL_OES_packed_depth_stencil"] = esOnlyExtension(&Extensions::packedDepthStencil);
- map["GL_OES_get_program_binary"] = esOnlyExtension(&Extensions::getProgramBinary);
- map["GL_OES_rgb8_rgba8"] = esOnlyExtension(&Extensions::rgb8rgba8);
- map["GL_EXT_texture_format_BGRA8888"] = esOnlyExtension(&Extensions::textureFormatBGRA8888);
- map["GL_EXT_read_format_bgra"] = esOnlyExtension(&Extensions::readFormatBGRA);
- map["GL_NV_pixel_buffer_object"] = esOnlyExtension(&Extensions::pixelBufferObject);
- map["GL_OES_mapbuffer"] = esOnlyExtension(&Extensions::mapBuffer);
- map["GL_EXT_map_buffer_range"] = esOnlyExtension(&Extensions::mapBufferRange);
- map["GL_EXT_color_buffer_half_float"] = esOnlyExtension(&Extensions::colorBufferHalfFloat);
- map["GL_OES_texture_half_float"] = esOnlyExtension(&Extensions::textureHalfFloat);
- map["GL_OES_texture_half_float_linear"] = esOnlyExtension(&Extensions::textureHalfFloatLinear);
- map["GL_OES_texture_float"] = esOnlyExtension(&Extensions::textureFloat);
- map["GL_OES_texture_float_linear"] = esOnlyExtension(&Extensions::textureFloatLinear);
- map["GL_EXT_texture_rg"] = esOnlyExtension(&Extensions::textureRG);
- map["GL_EXT_texture_compression_dxt1"] = esOnlyExtension(&Extensions::textureCompressionDXT1);
- map["GL_ANGLE_texture_compression_dxt3"] = esOnlyExtension(&Extensions::textureCompressionDXT3);
- map["GL_ANGLE_texture_compression_dxt5"] = esOnlyExtension(&Extensions::textureCompressionDXT5);
- map["GL_KHR_texture_compression_astc_hdr"] = esOnlyExtension(&Extensions::textureCompressionASTCHDR);
- map["GL_KHR_texture_compression_astc_ldr"] = esOnlyExtension(&Extensions::textureCompressionASTCLDR);
- map["GL_OES_compressed_ETC1_RGB8_texture"] = esOnlyExtension(&Extensions::compressedETC1RGB8Texture);
- map["GL_EXT_sRGB"] = esOnlyExtension(&Extensions::sRGB);
- map["GL_ANGLE_depth_texture"] = esOnlyExtension(&Extensions::depthTextures);
- map["GL_OES_depth32"] = esOnlyExtension(&Extensions::depth32);
- map["GL_EXT_texture_storage"] = esOnlyExtension(&Extensions::textureStorage);
- map["GL_OES_texture_npot"] = esOnlyExtension(&Extensions::textureNPOT);
- map["GL_EXT_draw_buffers"] = esOnlyExtension(&Extensions::drawBuffers);
- map["GL_EXT_texture_filter_anisotropic"] = esOnlyExtension(&Extensions::textureFilterAnisotropic);
- map["GL_EXT_occlusion_query_boolean"] = esOnlyExtension(&Extensions::occlusionQueryBoolean);
- map["GL_NV_fence"] = esOnlyExtension(&Extensions::fence);
- map["GL_ANGLE_timer_query"] = esOnlyExtension(&Extensions::timerQuery);
- map["GL_EXT_disjoint_timer_query"] = esOnlyExtension(&Extensions::disjointTimerQuery);
- map["GL_EXT_robustness"] = esOnlyExtension(&Extensions::robustness);
- map["GL_EXT_blend_minmax"] = esOnlyExtension(&Extensions::blendMinMax);
- map["GL_ANGLE_framebuffer_blit"] = esOnlyExtension(&Extensions::framebufferBlit);
- map["GL_ANGLE_framebuffer_multisample"] = esOnlyExtension(&Extensions::framebufferMultisample);
- map["GL_ANGLE_instanced_arrays"] = esOnlyExtension(&Extensions::instancedArrays);
- map["GL_ANGLE_pack_reverse_row_order"] = esOnlyExtension(&Extensions::packReverseRowOrder);
- map["GL_OES_standard_derivatives"] = esOnlyExtension(&Extensions::standardDerivatives);
- map["GL_EXT_shader_texture_lod"] = esOnlyExtension(&Extensions::shaderTextureLOD);
- map["GL_NV_shader_framebuffer_fetch"] = esOnlyExtension(&Extensions::NVshaderFramebufferFetch);
- map["GL_ARM_shader_framebuffer_fetch"] = esOnlyExtension(&Extensions::ARMshaderFramebufferFetch);
- map["GL_EXT_shader_framebuffer_fetch"] = esOnlyExtension(&Extensions::shaderFramebufferFetch);
- map["GL_EXT_frag_depth"] = esOnlyExtension(&Extensions::fragDepth);
- map["GL_ANGLE_texture_usage"] = esOnlyExtension(&Extensions::textureUsage);
- map["GL_ANGLE_translated_shader_source"] = esOnlyExtension(&Extensions::translatedShaderSource);
- map["GL_OES_fbo_render_mipmap"] = esOnlyExtension(&Extensions::fboRenderMipmap);
- map["GL_EXT_discard_framebuffer"] = esOnlyExtension(&Extensions::discardFramebuffer);
- map["GL_EXT_debug_marker"] = esOnlyExtension(&Extensions::debugMarker);
- map["GL_OES_EGL_image"] = esOnlyExtension(&Extensions::eglImage);
- map["GL_OES_EGL_image_external"] = esOnlyExtension(&Extensions::eglImageExternal);
- map["GL_OES_EGL_image_external_essl3"] = esOnlyExtension(&Extensions::eglImageExternalEssl3);
- map["GL_NV_EGL_stream_consumer_external"] = esOnlyExtension(&Extensions::eglStreamConsumerExternal);
- map["GL_EXT_unpack_subimage"] = esOnlyExtension(&Extensions::unpackSubimage);
- map["GL_NV_pack_subimage"] = esOnlyExtension(&Extensions::packSubimage);
- map["GL_EXT_color_buffer_float"] = esOnlyExtension(&Extensions::colorBufferFloat);
- map["GL_OES_vertex_array_object"] = esOnlyExtension(&Extensions::vertexArrayObject);
- map["GL_KHR_debug"] = esOnlyExtension(&Extensions::debug);
- // TODO(jmadill): Enable this when complete.
- //map["GL_KHR_no_error"] = esOnlyExtension(&Extensions::noError);
- map["GL_ANGLE_lossy_etc_decode"] = esOnlyExtension(&Extensions::lossyETCDecode);
- map["GL_CHROMIUM_bind_uniform_location"] = esOnlyExtension(&Extensions::bindUniformLocation);
- map["GL_CHROMIUM_sync_query"] = esOnlyExtension(&Extensions::syncQuery);
- map["GL_CHROMIUM_copy_texture"] = esOnlyExtension(&Extensions::copyTexture);
- map["GL_CHROMIUM_copy_compressed_texture"] = esOnlyExtension(&Extensions::copyCompressedTexture);
- map["GL_ANGLE_webgl_compatibility"] = esOnlyExtension(&Extensions::webglCompatibility);
- map["GL_CHROMIUM_bind_generates_resource"] = esOnlyExtension(&Extensions::bindGeneratesResource);
- map["GL_ANGLE_robust_client_memory"] = esOnlyExtension(&Extensions::robustClientMemory);
- map["GL_EXT_texture_sRGB_decode"] = esOnlyExtension(&Extensions::textureSRGBDecode);
- map["GL_EXT_sRGB_write_control"] = esOnlyExtension(&Extensions::sRGBWriteControl);
- map["GL_EXT_multisample_compatibility"] = esOnlyExtension(&Extensions::multisampleCompatibility);
- map["GL_CHROMIUM_framebuffer_mixed_samples"] = esOnlyExtension(&Extensions::framebufferMixedSamples);
- map["GL_EXT_texture_norm16"] = esOnlyExtension(&Extensions::textureNorm16);
- map["GL_CHROMIUM_path_rendering"] = esOnlyExtension(&Extensions::pathRendering);
- // clang-format on
-
- return map;
- };
-
- static const ExtensionInfoMap extensionInfo = buildExtensionInfoMap();
- return extensionInfo;
-}
-
TypePrecision::TypePrecision()
{
range[0] = 0;
@@ -764,7 +717,6 @@ Caps::Caps()
DisplayExtensions::DisplayExtensions()
: createContextRobustness(false),
d3dShareHandleClientBuffer(false),
- d3dTextureClientBuffer(false),
surfaceD3DTexture2DShareHandle(false),
querySurfacePointer(false),
windowFixedSize(false),
@@ -787,10 +739,7 @@ DisplayExtensions::DisplayExtensions()
stream(false),
streamConsumerGLTexture(false),
streamConsumerGLTextureYUV(false),
- streamProducerD3DTextureNV12(false),
- createContextWebGLCompatibility(false),
- createContextBindGeneratesResource(false),
- swapBuffersWithDamage(false)
+ streamProducerD3DTextureNV12(false)
{
}
@@ -799,37 +748,33 @@ std::vector<std::string> DisplayExtensions::getStrings() const
std::vector<std::string> extensionStrings;
// clang-format off
- // | Extension name | Supported flag | Output vector |
- InsertExtensionString("EGL_EXT_create_context_robustness", createContextRobustness, &extensionStrings);
- InsertExtensionString("EGL_ANGLE_d3d_share_handle_client_buffer", d3dShareHandleClientBuffer, &extensionStrings);
- InsertExtensionString("EGL_ANGLE_d3d_texture_client_buffer", d3dTextureClientBuffer, &extensionStrings);
- InsertExtensionString("EGL_ANGLE_surface_d3d_texture_2d_share_handle", surfaceD3DTexture2DShareHandle, &extensionStrings);
- InsertExtensionString("EGL_ANGLE_query_surface_pointer", querySurfacePointer, &extensionStrings);
- InsertExtensionString("EGL_ANGLE_window_fixed_size", windowFixedSize, &extensionStrings);
- InsertExtensionString("EGL_ANGLE_keyed_mutex", keyedMutex, &extensionStrings);
- InsertExtensionString("EGL_ANGLE_surface_orientation", surfaceOrientation, &extensionStrings);
- InsertExtensionString("EGL_ANGLE_direct_composition", directComposition, &extensionStrings);
- InsertExtensionString("EGL_NV_post_sub_buffer", postSubBuffer, &extensionStrings);
- InsertExtensionString("EGL_KHR_create_context", createContext, &extensionStrings);
- InsertExtensionString("EGL_EXT_device_query", deviceQuery, &extensionStrings);
- InsertExtensionString("EGL_KHR_image", image, &extensionStrings);
- InsertExtensionString("EGL_KHR_image_base", imageBase, &extensionStrings);
- InsertExtensionString("EGL_KHR_image_pixmap", imagePixmap, &extensionStrings);
- InsertExtensionString("EGL_KHR_gl_texture_2D_image", glTexture2DImage, &extensionStrings);
- InsertExtensionString("EGL_KHR_gl_texture_cubemap_image", glTextureCubemapImage, &extensionStrings);
- InsertExtensionString("EGL_KHR_gl_texture_3D_image", glTexture3DImage, &extensionStrings);
- InsertExtensionString("EGL_KHR_gl_renderbuffer_image", glRenderbufferImage, &extensionStrings);
- InsertExtensionString("EGL_KHR_get_all_proc_addresses", getAllProcAddresses, &extensionStrings);
- InsertExtensionString("EGL_KHR_stream", stream, &extensionStrings);
- InsertExtensionString("EGL_KHR_stream_consumer_gltexture", streamConsumerGLTexture, &extensionStrings);
- InsertExtensionString("EGL_NV_stream_consumer_gltexture_yuv", streamConsumerGLTextureYUV, &extensionStrings);
- InsertExtensionString("EGL_ANGLE_flexible_surface_compatibility", flexibleSurfaceCompatibility, &extensionStrings);
- InsertExtensionString("EGL_ANGLE_stream_producer_d3d_texture_nv12", streamProducerD3DTextureNV12, &extensionStrings);
- InsertExtensionString("EGL_ANGLE_create_context_webgl_compatibility", createContextWebGLCompatibility, &extensionStrings);
- InsertExtensionString("EGL_CHROMIUM_create_context_bind_generates_resource", createContextBindGeneratesResource, &extensionStrings);
- InsertExtensionString("EGL_EXT_swap_buffers_with_damage", swapBuffersWithDamage, &extensionStrings);
+ // | Extension name | Supported flag | Output vector |
+ InsertExtensionString("EGL_EXT_create_context_robustness", createContextRobustness, &extensionStrings);
+ InsertExtensionString("EGL_ANGLE_d3d_share_handle_client_buffer", d3dShareHandleClientBuffer, &extensionStrings);
+ InsertExtensionString("EGL_ANGLE_surface_d3d_texture_2d_share_handle", surfaceD3DTexture2DShareHandle, &extensionStrings);
+ InsertExtensionString("EGL_ANGLE_query_surface_pointer", querySurfacePointer, &extensionStrings);
+ InsertExtensionString("EGL_ANGLE_window_fixed_size", windowFixedSize, &extensionStrings);
+ InsertExtensionString("EGL_ANGLE_keyed_mutex", keyedMutex, &extensionStrings);
+ InsertExtensionString("EGL_ANGLE_surface_orientation", surfaceOrientation, &extensionStrings);
+ InsertExtensionString("EGL_ANGLE_direct_composition", directComposition, &extensionStrings);
+ InsertExtensionString("EGL_NV_post_sub_buffer", postSubBuffer, &extensionStrings);
+ InsertExtensionString("EGL_KHR_create_context", createContext, &extensionStrings);
+ InsertExtensionString("EGL_EXT_device_query", deviceQuery, &extensionStrings);
+ InsertExtensionString("EGL_KHR_image", image, &extensionStrings);
+ InsertExtensionString("EGL_KHR_image_base", imageBase, &extensionStrings);
+ InsertExtensionString("EGL_KHR_image_pixmap", imagePixmap, &extensionStrings);
+ InsertExtensionString("EGL_KHR_gl_texture_2D_image", glTexture2DImage, &extensionStrings);
+ InsertExtensionString("EGL_KHR_gl_texture_cubemap_image", glTextureCubemapImage, &extensionStrings);
+ InsertExtensionString("EGL_KHR_gl_texture_3D_image", glTexture3DImage, &extensionStrings);
+ InsertExtensionString("EGL_KHR_gl_renderbuffer_image", glRenderbufferImage, &extensionStrings);
+ InsertExtensionString("EGL_KHR_get_all_proc_addresses", getAllProcAddresses, &extensionStrings);
+ InsertExtensionString("EGL_KHR_stream", stream, &extensionStrings);
+ InsertExtensionString("EGL_KHR_stream_consumer_gltexture", streamConsumerGLTexture, &extensionStrings);
+ InsertExtensionString("EGL_NV_stream_consumer_gltexture_yuv", streamConsumerGLTextureYUV, &extensionStrings);
+ InsertExtensionString("EGL_ANGLE_flexible_surface_compatibility", flexibleSurfaceCompatibility, &extensionStrings);
+ InsertExtensionString("EGL_ANGLE_stream_producer_d3d_texture_nv12", streamProducerD3DTextureNV12, &extensionStrings);
// TODO(jmadill): Enable this when complete.
- //InsertExtensionString("KHR_create_context_no_error", createContextNoError, &extensionStrings);
+ //InsertExtensionString("KHR_create_context_no_error", createContextNoError, &extensionStrings);
// clang-format on
return extensionStrings;
@@ -877,7 +822,6 @@ std::vector<std::string> ClientExtensions::getStrings() const
InsertExtensionString("EGL_ANGLE_platform_angle", platformANGLE, &extensionStrings);
InsertExtensionString("EGL_ANGLE_platform_angle_d3d", platformANGLED3D, &extensionStrings);
InsertExtensionString("EGL_ANGLE_platform_angle_opengl", platformANGLEOpenGL, &extensionStrings);
- InsertExtensionString("EGL_ANGLE_platform_angle_null", platformANGLENULL, &extensionStrings);
InsertExtensionString("EGL_ANGLE_device_creation", deviceCreation, &extensionStrings);
InsertExtensionString("EGL_ANGLE_device_creation_d3d11", deviceCreationD3D11, &extensionStrings);
InsertExtensionString("EGL_ANGLE_x11_visual", x11Visual, &extensionStrings);
diff --git a/gfx/angle/src/libANGLE/Caps.h b/gfx/angle/src/libANGLE/Caps.h
index 277b4a490..6382830eb 100755
--- a/gfx/angle/src/libANGLE/Caps.h
+++ b/gfx/angle/src/libANGLE/Caps.h
@@ -52,7 +52,6 @@ class TextureCapsMap
void insert(GLenum internalFormat, const TextureCaps &caps);
void remove(GLenum internalFormat);
- void clear();
const TextureCaps &get(GLenum internalFormat) const;
@@ -293,24 +292,6 @@ struct Extensions
// GL_CHROMIUM_copy_texture
bool copyTexture;
- // GL_CHROMIUM_copy_compressed_texture
- bool copyCompressedTexture;
-
- // GL_ANGLE_webgl_compatibility
- bool webglCompatibility;
-
- // GL_CHROMIUM_bind_generates_resource
- bool bindGeneratesResource;
-
- // GL_ANGLE_robust_client_memory
- bool robustClientMemory;
-
- // GL_EXT_texture_sRGB_decode
- bool textureSRGBDecode;
-
- // GL_EXT_sRGB_write_control
- bool sRGBWriteControl;
-
// ES3 Extension support
// GL_EXT_color_buffer_float
@@ -331,19 +312,6 @@ struct Extensions
bool pathRendering;
};
-struct ExtensionInfo
-{
- // If this extension can be enabled with glEnableExtension (GL_ANGLE_webgl_compatibility)
- bool Enableable = false;
-
- // Pointer to a boolean member of the Extensions struct
- typedef bool(Extensions::*ExtensionBool);
- ExtensionBool ExtensionsMember = nullptr;
-};
-
-using ExtensionInfoMap = std::map<std::string, ExtensionInfo>;
-const ExtensionInfoMap &GetExtensionInfoMap();
-
struct Limitations
{
Limitations();
@@ -536,9 +504,6 @@ struct DisplayExtensions
// EGL_ANGLE_d3d_share_handle_client_buffer
bool d3dShareHandleClientBuffer;
- // EGL_ANGLE_d3d_texture_client_buffer
- bool d3dTextureClientBuffer;
-
// EGL_ANGLE_surface_d3d_texture_2d_share_handle
bool surfaceD3DTexture2DShareHandle;
@@ -607,15 +572,6 @@ struct DisplayExtensions
// EGL_ANGLE_stream_producer_d3d_texture_nv12
bool streamProducerD3DTextureNV12;
-
- // EGL_ANGLE_create_context_webgl_compatibility
- bool createContextWebGLCompatibility;
-
- // EGL_CHROMIUM_create_context_bind_generates_resource
- bool createContextBindGeneratesResource;
-
- // EGL_EXT_swap_buffers_with_damage
- bool swapBuffersWithDamage;
};
struct DeviceExtensions
@@ -654,9 +610,6 @@ struct ClientExtensions
// EGL_ANGLE_platform_angle_opengl
bool platformANGLEOpenGL;
- // EGL_ANGLE_platform_angle_null
- bool platformANGLENULL;
-
// EGL_ANGLE_device_creation
bool deviceCreation;
diff --git a/gfx/angle/src/libANGLE/Compiler.cpp b/gfx/angle/src/libANGLE/Compiler.cpp
index 078491284..b745888f2 100755
--- a/gfx/angle/src/libANGLE/Compiler.cpp
+++ b/gfx/angle/src/libANGLE/Compiler.cpp
@@ -19,33 +19,31 @@ namespace gl
namespace
{
-// Global count of active shader compiler handles. Needed to know when to call sh::Initialize and
-// sh::Finalize.
+// Global count of active shader compiler handles. Needed to know when to call ShInitialize and
+// ShFinalize.
size_t activeCompilerHandles = 0;
-ShShaderSpec SelectShaderSpec(GLint majorVersion, GLint minorVersion, bool isWebGL)
+ShShaderSpec SelectShaderSpec(GLint majorVersion, GLint minorVersion)
{
if (majorVersion >= 3)
{
if (minorVersion == 1)
{
- return isWebGL ? SH_WEBGL3_SPEC : SH_GLES3_1_SPEC;
+ return SH_GLES3_1_SPEC;
}
else
{
- return isWebGL ? SH_WEBGL2_SPEC : SH_GLES3_SPEC;
+ return SH_GLES3_SPEC;
}
}
- return isWebGL ? SH_WEBGL_SPEC : SH_GLES2_SPEC;
+ return SH_GLES2_SPEC;
}
} // anonymous namespace
Compiler::Compiler(rx::GLImplFactory *implFactory, const ContextState &state)
: mImplementation(implFactory->createCompiler()),
- mSpec(SelectShaderSpec(state.getClientMajorVersion(),
- state.getClientMinorVersion(),
- state.getExtensions().webglCompatibility)),
+ mSpec(SelectShaderSpec(state.getClientMajorVersion(), state.getClientMinorVersion())),
mOutputType(mImplementation->getTranslatorOutputType()),
mResources(),
mFragmentCompiler(nullptr),
@@ -57,7 +55,7 @@ Compiler::Compiler(rx::GLImplFactory *implFactory, const ContextState &state)
const gl::Caps &caps = state.getCaps();
const gl::Extensions &extensions = state.getExtensions();
- sh::InitBuiltInResources(&mResources);
+ ShInitBuiltInResources(&mResources);
mResources.MaxVertexAttribs = caps.maxVertexAttributes;
mResources.MaxVertexUniformVectors = caps.maxVertexUniformVectors;
mResources.MaxVaryingVectors = caps.maxVaryingVectors;
@@ -122,7 +120,7 @@ Error Compiler::release()
{
if (mFragmentCompiler)
{
- sh::Destruct(mFragmentCompiler);
+ ShDestruct(mFragmentCompiler);
mFragmentCompiler = nullptr;
ASSERT(activeCompilerHandles > 0);
@@ -131,7 +129,7 @@ Error Compiler::release()
if (mVertexCompiler)
{
- sh::Destruct(mVertexCompiler);
+ ShDestruct(mVertexCompiler);
mVertexCompiler = nullptr;
ASSERT(activeCompilerHandles > 0);
@@ -140,7 +138,7 @@ Error Compiler::release()
if (mComputeCompiler)
{
- sh::Destruct(mComputeCompiler);
+ ShDestruct(mComputeCompiler);
mComputeCompiler = nullptr;
ASSERT(activeCompilerHandles > 0);
@@ -149,7 +147,7 @@ Error Compiler::release()
if (activeCompilerHandles == 0)
{
- sh::Finalize();
+ ShFinalize();
}
mImplementation->release();
@@ -181,10 +179,10 @@ ShHandle Compiler::getCompilerHandle(GLenum type)
{
if (activeCompilerHandles == 0)
{
- sh::Initialize();
+ ShInitialize();
}
- *compiler = sh::ConstructCompiler(type, mSpec, mOutputType, &mResources);
+ *compiler = ShConstructCompiler(type, mSpec, mOutputType, &mResources);
activeCompilerHandles++;
}
diff --git a/gfx/angle/src/libANGLE/Context.cpp b/gfx/angle/src/libANGLE/Context.cpp
index d74f33057..c79f3b7b7 100755
--- a/gfx/angle/src/libANGLE/Context.cpp
+++ b/gfx/angle/src/libANGLE/Context.cpp
@@ -35,11 +35,9 @@
#include "libANGLE/VertexArray.h"
#include "libANGLE/formatutils.h"
#include "libANGLE/validationES.h"
-#include "libANGLE/Workarounds.h"
#include "libANGLE/renderer/ContextImpl.h"
#include "libANGLE/renderer/EGLImplFactory.h"
#include "libANGLE/queryconversions.h"
-#include "libANGLE/queryutils.h"
namespace
{
@@ -97,21 +95,22 @@ std::vector<gl::Path *> GatherPaths(gl::ResourceManager &resourceManager,
}
template <typename T>
-gl::Error GetQueryObjectParameter(gl::Query *query, GLenum pname, T *params)
+gl::Error GetQueryObjectParameter(gl::Context *context, GLuint id, GLenum pname, T *params)
{
- ASSERT(query != nullptr);
+ gl::Query *queryObject = context->getQuery(id, false, GL_NONE);
+ ASSERT(queryObject != nullptr);
switch (pname)
{
case GL_QUERY_RESULT_EXT:
- return query->getResult(params);
+ return queryObject->getResult(params);
case GL_QUERY_RESULT_AVAILABLE_EXT:
{
bool available;
- gl::Error error = query->isResultAvailable(&available);
+ gl::Error error = queryObject->isResultAvailable(&available);
if (!error.isError())
{
- *params = gl::ConvertFromGLboolean<T>(available);
+ *params = static_cast<T>(available ? GL_TRUE : GL_FALSE);
}
return error;
}
@@ -149,11 +148,6 @@ EGLint GetClientMinorVersion(const egl::AttributeMap &attribs)
return static_cast<EGLint>(attribs.get(EGL_CONTEXT_MINOR_VERSION, 0));
}
-gl::Version GetClientVersion(const egl::AttributeMap &attribs)
-{
- return gl::Version(GetClientMajorVersion(attribs), GetClientMinorVersion(attribs));
-}
-
GLenum GetResetStrategy(const egl::AttributeMap &attribs)
{
EGLAttrib attrib = attribs.get(EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_EXT,
@@ -172,15 +166,12 @@ GLenum GetResetStrategy(const egl::AttributeMap &attribs)
bool GetRobustAccess(const egl::AttributeMap &attribs)
{
- return (attribs.get(EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT, EGL_FALSE) == EGL_TRUE) ||
- ((attribs.get(EGL_CONTEXT_FLAGS_KHR, 0) & EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR) !=
- 0);
+ return (attribs.get(EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT, EGL_FALSE) == EGL_TRUE);
}
bool GetDebug(const egl::AttributeMap &attribs)
{
- return (attribs.get(EGL_CONTEXT_OPENGL_DEBUG, EGL_FALSE) == EGL_TRUE) ||
- ((attribs.get(EGL_CONTEXT_FLAGS_KHR, 0) & EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR) != 0);
+ return (attribs.get(EGL_CONTEXT_OPENGL_DEBUG, EGL_FALSE) == EGL_TRUE);
}
bool GetNoError(const egl::AttributeMap &attribs)
@@ -188,16 +179,6 @@ bool GetNoError(const egl::AttributeMap &attribs)
return (attribs.get(EGL_CONTEXT_OPENGL_NO_ERROR_KHR, EGL_FALSE) == EGL_TRUE);
}
-bool GetWebGLContext(const egl::AttributeMap &attribs)
-{
- return (attribs.get(EGL_CONTEXT_WEBGL_COMPATIBILITY_ANGLE, EGL_FALSE) == EGL_TRUE);
-}
-
-bool GetBindGeneratesResource(const egl::AttributeMap &attribs)
-{
- return (attribs.get(EGL_CONTEXT_BIND_GENERATES_RESOURCE_CHROMIUM, EGL_TRUE) == EGL_TRUE);
-}
-
std::string GetObjectLabelFromPointer(GLsizei length, const GLchar *label)
{
std::string labelName;
@@ -238,38 +219,34 @@ Context::Context(rx::EGLImplFactory *implFactory,
const Context *shareContext,
const egl::AttributeMap &attribs)
- : ValidationContext(GetClientVersion(attribs),
+ : ValidationContext(GetClientMajorVersion(attribs),
+ GetClientMinorVersion(attribs),
&mGLState,
mCaps,
mTextureCaps,
mExtensions,
nullptr,
mLimitations,
- mFramebufferMap,
GetNoError(attribs)),
mImplementation(implFactory->createContext(mState)),
mCompiler(nullptr),
+ mClientMajorVersion(GetClientMajorVersion(attribs)),
+ mClientMinorVersion(GetClientMinorVersion(attribs)),
mConfig(config),
mClientType(EGL_OPENGL_ES_API),
mHasBeenCurrent(false),
mContextLost(false),
mResetStatus(GL_NO_ERROR),
- mContextLostForced(false),
mResetStrategy(GetResetStrategy(attribs)),
mRobustAccess(GetRobustAccess(attribs)),
mCurrentSurface(nullptr),
mResourceManager(nullptr)
{
- if (mRobustAccess)
- {
- UNIMPLEMENTED();
- }
+ ASSERT(!mRobustAccess); // Unimplemented
- initCaps(GetWebGLContext(attribs));
- initWorkarounds();
+ initCaps();
- mGLState.initialize(mCaps, mExtensions, getClientVersion(), GetDebug(attribs),
- GetBindGeneratesResource(attribs));
+ mGLState.initialize(mCaps, mExtensions, mClientMajorVersion, GetDebug(attribs));
mFenceNVHandleAllocator.setBaseHandle(0);
@@ -297,7 +274,7 @@ Context::Context(rx::EGLImplFactory *implFactory,
Texture *zeroTextureCube = new Texture(mImplementation.get(), 0, GL_TEXTURE_CUBE_MAP);
mZeroTextures[GL_TEXTURE_CUBE_MAP].set(zeroTextureCube);
- if (getClientVersion() >= Version(3, 0))
+ if (mClientMajorVersion >= 3)
{
// TODO: These could also be enabled via extension
Texture *zeroTexture3D = new Texture(mImplementation.get(), 0, GL_TEXTURE_3D);
@@ -320,7 +297,7 @@ Context::Context(rx::EGLImplFactory *implFactory,
bindArrayBuffer(0);
bindElementArrayBuffer(0);
- bindRenderbuffer(GL_RENDERBUFFER, 0);
+ bindRenderbuffer(0);
bindGenericUniformBuffer(0);
for (unsigned int i = 0; i < mCaps.maxCombinedUniformBlocks; i++)
@@ -333,7 +310,7 @@ Context::Context(rx::EGLImplFactory *implFactory,
bindPixelPackBuffer(0);
bindPixelUnpackBuffer(0);
- if (getClientVersion() >= Version(3, 0))
+ if (mClientMajorVersion >= 3)
{
// [OpenGL ES 3.0.2] section 2.14.1 pg 85:
// In the initial state, a default transform feedback object is bound and treated as
@@ -379,7 +356,6 @@ Context::Context(rx::EGLImplFactory *implFactory,
mBlitDirtyBits.set(State::DIRTY_BIT_SCISSOR_TEST_ENABLED);
mBlitDirtyBits.set(State::DIRTY_BIT_SCISSOR);
- mBlitDirtyBits.set(State::DIRTY_BIT_FRAMEBUFFER_SRGB);
mBlitDirtyObjects.set(State::DIRTY_OBJECT_READ_FRAMEBUFFER);
mBlitDirtyObjects.set(State::DIRTY_OBJECT_DRAW_FRAMEBUFFER);
@@ -830,6 +806,16 @@ Buffer *Context::getBuffer(GLuint handle) const
return mResourceManager->getBuffer(handle);
}
+Shader *Context::getShader(GLuint handle) const
+{
+ return mResourceManager->getShader(handle);
+}
+
+Program *Context::getProgram(GLuint handle) const
+{
+ return mResourceManager->getProgram(handle);
+}
+
Texture *Context::getTexture(GLuint handle) const
{
return mResourceManager->getTexture(handle);
@@ -986,6 +972,13 @@ void Context::bindDrawFramebuffer(GLuint framebufferHandle)
mGLState.setDrawFramebufferBinding(framebuffer);
}
+void Context::bindRenderbuffer(GLuint renderbufferHandle)
+{
+ Renderbuffer *renderbuffer =
+ mResourceManager->checkRenderbufferAllocation(mImplementation.get(), renderbufferHandle);
+ mGLState.setRenderbufferBinding(renderbuffer);
+}
+
void Context::bindVertexArray(GLuint vertexArrayHandle)
{
VertexArray *vertexArray = checkVertexArrayAllocation(vertexArrayHandle);
@@ -1135,24 +1128,24 @@ void Context::getQueryiv(GLenum target, GLenum pname, GLint *params)
}
}
-void Context::getQueryObjectiv(GLuint id, GLenum pname, GLint *params)
+Error Context::getQueryObjectiv(GLuint id, GLenum pname, GLint *params)
{
- handleError(GetQueryObjectParameter(getQuery(id), pname, params));
+ return GetQueryObjectParameter(this, id, pname, params);
}
-void Context::getQueryObjectuiv(GLuint id, GLenum pname, GLuint *params)
+Error Context::getQueryObjectuiv(GLuint id, GLenum pname, GLuint *params)
{
- handleError(GetQueryObjectParameter(getQuery(id), pname, params));
+ return GetQueryObjectParameter(this, id, pname, params);
}
-void Context::getQueryObjecti64v(GLuint id, GLenum pname, GLint64 *params)
+Error Context::getQueryObjecti64v(GLuint id, GLenum pname, GLint64 *params)
{
- handleError(GetQueryObjectParameter(getQuery(id), pname, params));
+ return GetQueryObjectParameter(this, id, pname, params);
}
-void Context::getQueryObjectui64v(GLuint id, GLenum pname, GLuint64 *params)
+Error Context::getQueryObjectui64v(GLuint id, GLenum pname, GLuint64 *params)
{
- handleError(GetQueryObjectParameter(getQuery(id), pname, params));
+ return GetQueryObjectParameter(this, id, pname, params);
}
Framebuffer *Context::getFramebuffer(unsigned int handle) const
@@ -1301,10 +1294,10 @@ void Context::getIntegerv(GLenum pname, GLint *params)
case GL_MIN_PROGRAM_TEXEL_OFFSET: *params = mCaps.minProgramTexelOffset; break;
case GL_MAX_PROGRAM_TEXEL_OFFSET: *params = mCaps.maxProgramTexelOffset; break;
case GL_MAJOR_VERSION:
- *params = getClientVersion().major;
+ *params = mClientMajorVersion;
break;
case GL_MINOR_VERSION:
- *params = getClientVersion().minor;
+ *params = mClientMinorVersion;
break;
case GL_MAX_ELEMENTS_INDICES: *params = mCaps.maxElementsIndices; break;
case GL_MAX_ELEMENTS_VERTICES: *params = mCaps.maxElementsVertices; break;
@@ -1539,6 +1532,7 @@ void Context::getIntegeri_v(GLenum target, GLuint index, GLint *data)
GLenum nativeType;
unsigned int numParams;
bool queryStatus = getIndexedQueryParameterInfo(target, &nativeType, &numParams);
+ UNUSED_ASSERTION_VARIABLE(queryStatus);
ASSERT(queryStatus);
if (nativeType == GL_INT)
@@ -1571,6 +1565,7 @@ void Context::getInteger64i_v(GLenum target, GLuint index, GLint64 *data)
GLenum nativeType;
unsigned int numParams;
bool queryStatus = getIndexedQueryParameterInfo(target, &nativeType, &numParams);
+ UNUSED_ASSERTION_VARIABLE(queryStatus);
ASSERT(queryStatus);
if (nativeType == GL_INT_64_ANGLEX)
@@ -1591,6 +1586,7 @@ void Context::getBooleani_v(GLenum target, GLuint index, GLboolean *data)
GLenum nativeType;
unsigned int numParams;
bool queryStatus = getIndexedQueryParameterInfo(target, &nativeType, &numParams);
+ UNUSED_ASSERTION_VARIABLE(queryStatus);
ASSERT(queryStatus);
if (nativeType == GL_BOOL)
@@ -1919,12 +1915,7 @@ void Context::handleError(const Error &error)
{
if (error.isError())
{
- GLenum code = error.getCode();
- mErrors.insert(code);
- if (code == GL_OUT_OF_MEMORY && getWorkarounds().loseContextOnOutOfMemory)
- {
- markContextLost();
- }
+ mErrors.insert(error.getCode());
if (!error.getMessage().empty())
{
@@ -1955,10 +1946,7 @@ GLenum Context::getError()
void Context::markContextLost()
{
if (mResetStrategy == GL_LOSE_CONTEXT_ON_RESET_EXT)
- {
mResetStatus = GL_UNKNOWN_CONTEXT_RESET_EXT;
- mContextLostForced = true;
- }
mContextLost = true;
}
@@ -1997,11 +1985,8 @@ GLenum Context::getResetStatus()
mContextLost = true;
}
}
- else if (!mContextLostForced && mResetStatus != GL_NO_ERROR)
+ else if (mResetStatus != GL_NO_ERROR)
{
- // If markContextLost was used to mark the context lost then
- // assume that is not recoverable, and continue to report the
- // lost reset status for the lifetime of this context.
mResetStatus = mImplementation->getResetStatus();
}
@@ -2092,13 +2077,11 @@ Framebuffer *Context::checkFramebufferAllocation(GLuint framebuffer)
bool Context::isVertexArrayGenerated(GLuint vertexArray)
{
- ASSERT(mVertexArrayMap.find(0) != mVertexArrayMap.end());
return mVertexArrayMap.find(vertexArray) != mVertexArrayMap.end();
}
bool Context::isTransformFeedbackGenerated(GLuint transformFeedback)
{
- ASSERT(mTransformFeedbackMap.find(0) != mTransformFeedbackMap.end());
return mTransformFeedbackMap.find(transformFeedback) != mTransformFeedbackMap.end();
}
@@ -2192,44 +2175,102 @@ void Context::setVertexAttribDivisor(GLuint index, GLuint divisor)
void Context::samplerParameteri(GLuint sampler, GLenum pname, GLint param)
{
- Sampler *samplerObject =
- mResourceManager->checkSamplerAllocation(mImplementation.get(), sampler);
- SetSamplerParameteri(samplerObject, pname, param);
-}
+ mResourceManager->checkSamplerAllocation(mImplementation.get(), sampler);
-void Context::samplerParameteriv(GLuint sampler, GLenum pname, const GLint *param)
-{
- Sampler *samplerObject =
- mResourceManager->checkSamplerAllocation(mImplementation.get(), sampler);
- SetSamplerParameteriv(samplerObject, pname, param);
+ Sampler *samplerObject = getSampler(sampler);
+ ASSERT(samplerObject);
+
+ // clang-format off
+ switch (pname)
+ {
+ case GL_TEXTURE_MIN_FILTER: samplerObject->setMinFilter(static_cast<GLenum>(param)); break;
+ case GL_TEXTURE_MAG_FILTER: samplerObject->setMagFilter(static_cast<GLenum>(param)); break;
+ case GL_TEXTURE_WRAP_S: samplerObject->setWrapS(static_cast<GLenum>(param)); break;
+ case GL_TEXTURE_WRAP_T: samplerObject->setWrapT(static_cast<GLenum>(param)); break;
+ case GL_TEXTURE_WRAP_R: samplerObject->setWrapR(static_cast<GLenum>(param)); break;
+ case GL_TEXTURE_MAX_ANISOTROPY_EXT: samplerObject->setMaxAnisotropy(std::min(static_cast<GLfloat>(param), getExtensions().maxTextureAnisotropy)); break;
+ case GL_TEXTURE_MIN_LOD: samplerObject->setMinLod(static_cast<GLfloat>(param)); break;
+ case GL_TEXTURE_MAX_LOD: samplerObject->setMaxLod(static_cast<GLfloat>(param)); break;
+ case GL_TEXTURE_COMPARE_MODE: samplerObject->setCompareMode(static_cast<GLenum>(param)); break;
+ case GL_TEXTURE_COMPARE_FUNC: samplerObject->setCompareFunc(static_cast<GLenum>(param)); break;
+ default: UNREACHABLE(); break;
+ }
+ // clang-format on
}
void Context::samplerParameterf(GLuint sampler, GLenum pname, GLfloat param)
{
- Sampler *samplerObject =
- mResourceManager->checkSamplerAllocation(mImplementation.get(), sampler);
- SetSamplerParameterf(samplerObject, pname, param);
-}
+ mResourceManager->checkSamplerAllocation(mImplementation.get(), sampler);
-void Context::samplerParameterfv(GLuint sampler, GLenum pname, const GLfloat *param)
-{
- Sampler *samplerObject =
- mResourceManager->checkSamplerAllocation(mImplementation.get(), sampler);
- SetSamplerParameterfv(samplerObject, pname, param);
+ Sampler *samplerObject = getSampler(sampler);
+ ASSERT(samplerObject);
+
+ // clang-format off
+ switch (pname)
+ {
+ case GL_TEXTURE_MIN_FILTER: samplerObject->setMinFilter(uiround<GLenum>(param)); break;
+ case GL_TEXTURE_MAG_FILTER: samplerObject->setMagFilter(uiround<GLenum>(param)); break;
+ case GL_TEXTURE_WRAP_S: samplerObject->setWrapS(uiround<GLenum>(param)); break;
+ case GL_TEXTURE_WRAP_T: samplerObject->setWrapT(uiround<GLenum>(param)); break;
+ case GL_TEXTURE_WRAP_R: samplerObject->setWrapR(uiround<GLenum>(param)); break;
+ case GL_TEXTURE_MAX_ANISOTROPY_EXT: samplerObject->setMaxAnisotropy(std::min(param, getExtensions().maxTextureAnisotropy)); break;
+ case GL_TEXTURE_MIN_LOD: samplerObject->setMinLod(param); break;
+ case GL_TEXTURE_MAX_LOD: samplerObject->setMaxLod(param); break;
+ case GL_TEXTURE_COMPARE_MODE: samplerObject->setCompareMode(uiround<GLenum>(param)); break;
+ case GL_TEXTURE_COMPARE_FUNC: samplerObject->setCompareFunc(uiround<GLenum>(param)); break;
+ default: UNREACHABLE(); break;
+ }
+ // clang-format on
}
-void Context::getSamplerParameteriv(GLuint sampler, GLenum pname, GLint *params)
+GLint Context::getSamplerParameteri(GLuint sampler, GLenum pname)
{
- const Sampler *samplerObject =
- mResourceManager->checkSamplerAllocation(mImplementation.get(), sampler);
- QuerySamplerParameteriv(samplerObject, pname, params);
+ mResourceManager->checkSamplerAllocation(mImplementation.get(), sampler);
+
+ Sampler *samplerObject = getSampler(sampler);
+ ASSERT(samplerObject);
+
+ // clang-format off
+ switch (pname)
+ {
+ case GL_TEXTURE_MIN_FILTER: return static_cast<GLint>(samplerObject->getMinFilter());
+ case GL_TEXTURE_MAG_FILTER: return static_cast<GLint>(samplerObject->getMagFilter());
+ case GL_TEXTURE_WRAP_S: return static_cast<GLint>(samplerObject->getWrapS());
+ case GL_TEXTURE_WRAP_T: return static_cast<GLint>(samplerObject->getWrapT());
+ case GL_TEXTURE_WRAP_R: return static_cast<GLint>(samplerObject->getWrapR());
+ case GL_TEXTURE_MAX_ANISOTROPY_EXT: return static_cast<GLint>(samplerObject->getMaxAnisotropy());
+ case GL_TEXTURE_MIN_LOD: return iround<GLint>(samplerObject->getMinLod());
+ case GL_TEXTURE_MAX_LOD: return iround<GLint>(samplerObject->getMaxLod());
+ case GL_TEXTURE_COMPARE_MODE: return static_cast<GLint>(samplerObject->getCompareMode());
+ case GL_TEXTURE_COMPARE_FUNC: return static_cast<GLint>(samplerObject->getCompareFunc());
+ default: UNREACHABLE(); return 0;
+ }
+ // clang-format on
}
-void Context::getSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat *params)
+GLfloat Context::getSamplerParameterf(GLuint sampler, GLenum pname)
{
- const Sampler *samplerObject =
- mResourceManager->checkSamplerAllocation(mImplementation.get(), sampler);
- QuerySamplerParameterfv(samplerObject, pname, params);
+ mResourceManager->checkSamplerAllocation(mImplementation.get(), sampler);
+
+ Sampler *samplerObject = getSampler(sampler);
+ ASSERT(samplerObject);
+
+ // clang-format off
+ switch (pname)
+ {
+ case GL_TEXTURE_MIN_FILTER: return static_cast<GLfloat>(samplerObject->getMinFilter());
+ case GL_TEXTURE_MAG_FILTER: return static_cast<GLfloat>(samplerObject->getMagFilter());
+ case GL_TEXTURE_WRAP_S: return static_cast<GLfloat>(samplerObject->getWrapS());
+ case GL_TEXTURE_WRAP_T: return static_cast<GLfloat>(samplerObject->getWrapT());
+ case GL_TEXTURE_WRAP_R: return static_cast<GLfloat>(samplerObject->getWrapR());
+ case GL_TEXTURE_MAX_ANISOTROPY_EXT: return samplerObject->getMaxAnisotropy();
+ case GL_TEXTURE_MIN_LOD: return samplerObject->getMinLod();
+ case GL_TEXTURE_MAX_LOD: return samplerObject->getMaxLod();
+ case GL_TEXTURE_COMPARE_MODE: return static_cast<GLfloat>(samplerObject->getCompareMode());
+ case GL_TEXTURE_COMPARE_FUNC: return static_cast<GLfloat>(samplerObject->getCompareFunc());
+ default: UNREACHABLE(); return 0;
+ }
+ // clang-format on
}
void Context::programParameteri(GLuint program, GLenum pname, GLint value)
@@ -2251,30 +2292,26 @@ void Context::initRendererString()
mRendererString = MakeStaticString(rendererString.str());
}
-const char *Context::getRendererString() const
+const std::string &Context::getRendererString() const
{
return mRendererString;
}
void Context::initExtensionStrings()
{
- for (const auto &extensionString : mExtensions.getStrings())
- {
- mExtensionStrings.push_back(MakeStaticString(extensionString));
- }
+ mExtensionStrings = mExtensions.getStrings();
std::ostringstream combinedStringStream;
- std::copy(mExtensionStrings.begin(), mExtensionStrings.end(),
- std::ostream_iterator<const char *>(combinedStringStream, " "));
- mExtensionString = MakeStaticString(combinedStringStream.str());
+ std::copy(mExtensionStrings.begin(), mExtensionStrings.end(), std::ostream_iterator<std::string>(combinedStringStream, " "));
+ mExtensionString = combinedStringStream.str();
}
-const char *Context::getExtensionString() const
+const std::string &Context::getExtensionString() const
{
return mExtensionString;
}
-const char *Context::getExtensionString(size_t idx) const
+const std::string &Context::getExtensionString(size_t idx) const
{
return mExtensionStrings[idx];
}
@@ -2305,7 +2342,7 @@ bool Context::hasActiveTransformFeedback(GLuint program) const
return false;
}
-void Context::initCaps(bool webGLContext)
+void Context::initCaps()
{
mCaps = mImplementation->getNativeCaps();
@@ -2313,7 +2350,7 @@ void Context::initCaps(bool webGLContext)
mLimitations = mImplementation->getNativeLimitations();
- if (getClientVersion() < Version(3, 0))
+ if (mClientMajorVersion < 3)
{
// Disable ES3+ extensions
mExtensions.colorBufferFloat = false;
@@ -2321,7 +2358,7 @@ void Context::initCaps(bool webGLContext)
mExtensions.textureNorm16 = false;
}
- if (getClientVersion() > Version(2, 0))
+ if (mClientMajorVersion > 2)
{
// FIXME(geofflang): Don't support EXT_sRGB in non-ES2 contexts
//mExtensions.sRGB = false;
@@ -2330,7 +2367,6 @@ void Context::initCaps(bool webGLContext)
// Some extensions are always available because they are implemented in the GL layer.
mExtensions.bindUniformLocation = true;
mExtensions.vertexArrayObject = true;
- mExtensions.bindGeneratesResource = true;
// Enable the no error extension if the context was created with the flag.
mExtensions.noError = mSkipValidation;
@@ -2342,9 +2378,6 @@ void Context::initCaps(bool webGLContext)
mExtensions.maxDebugGroupStackDepth = 1024;
mExtensions.maxLabelLength = 1024;
- // Explicitly enable GL_ANGLE_robust_client_memory
- mExtensions.robustClientMemory = true;
-
// Apply implementation limits
mCaps.maxVertexAttributes = std::min<GLuint>(mCaps.maxVertexAttributes, MAX_VERTEX_ATTRIBS);
mCaps.maxVertexUniformBlocks = std::min<GLuint>(mCaps.maxVertexUniformBlocks, IMPLEMENTATION_MAX_VERTEX_SHADER_UNIFORM_BUFFERS);
@@ -2352,25 +2385,7 @@ void Context::initCaps(bool webGLContext)
mCaps.maxFragmentInputComponents = std::min<GLuint>(mCaps.maxFragmentInputComponents, IMPLEMENTATION_MAX_VARYING_VECTORS * 4);
- // WebGL compatibility
- mExtensions.webglCompatibility = webGLContext;
- for (const auto &extensionInfo : GetExtensionInfoMap())
- {
- // If this context is for WebGL, disable all enableable extensions
- if (webGLContext && extensionInfo.second.Enableable)
- {
- mExtensions.*(extensionInfo.second.ExtensionsMember) = false;
- }
- }
-
- // Generate texture caps
- updateCaps();
-}
-
-void Context::updateCaps()
-{
mCaps.compressedTextureFormats.clear();
- mTextureCaps.clear();
const TextureCapsMap &rendererFormats = mImplementation->getNativeTextureCaps();
for (TextureCapsMap::const_iterator i = rendererFormats.begin(); i != rendererFormats.end(); i++)
@@ -2384,11 +2399,11 @@ void Context::updateCaps()
// Caps are AND'd with the renderer caps because some core formats are still unsupported in
// ES3.
formatCaps.texturable =
- formatCaps.texturable && formatInfo.textureSupport(getClientVersion(), mExtensions);
+ formatCaps.texturable && formatInfo.textureSupport(mClientMajorVersion, mExtensions);
formatCaps.renderable =
- formatCaps.renderable && formatInfo.renderSupport(getClientVersion(), mExtensions);
+ formatCaps.renderable && formatInfo.renderSupport(mClientMajorVersion, mExtensions);
formatCaps.filterable =
- formatCaps.filterable && formatInfo.filterSupport(getClientVersion(), mExtensions);
+ formatCaps.filterable && formatInfo.filterSupport(mClientMajorVersion, mExtensions);
// OpenGL ES does not support multisampling with integer formats
if (!formatInfo.renderSupport || formatInfo.componentType == GL_INT || formatInfo.componentType == GL_UNSIGNED_INT)
@@ -2405,13 +2420,6 @@ void Context::updateCaps()
}
}
-void Context::initWorkarounds()
-{
- // Lose the context upon out of memory error if the application is
- // expecting to watch for those events.
- mWorkarounds.loseContextOnOutOfMemory = (mResetStrategy == GL_LOSE_CONTEXT_ON_RESET_EXT);
-}
-
void Context::syncRendererState()
{
const State::DirtyBits &dirtyBits = mGLState.getDirtyBits();
@@ -2504,11 +2512,6 @@ void Context::readPixels(GLint x,
GLenum type,
GLvoid *pixels)
{
- if (width == 0 || height == 0)
- {
- return;
- }
-
syncStateForReadPixels();
Framebuffer *framebufferObject = mGLState.getReadFramebuffer();
@@ -2547,11 +2550,6 @@ void Context::copyTexSubImage2D(GLenum target,
GLsizei width,
GLsizei height)
{
- if (width == 0 || height == 0)
- {
- return;
- }
-
// Only sync the read FBO
mGLState.syncDirtyObject(GL_READ_FRAMEBUFFER);
@@ -2574,11 +2572,6 @@ void Context::copyTexSubImage3D(GLenum target,
GLsizei width,
GLsizei height)
{
- if (width == 0 || height == 0)
- {
- return;
- }
-
// Only sync the read FBO
mGLState.syncDirtyObject(GL_READ_FRAMEBUFFER);
@@ -2931,32 +2924,6 @@ void Context::generateMipmap(GLenum target)
handleError(texture->generateMipmap());
}
-GLboolean Context::enableExtension(const char *name)
-{
- const ExtensionInfoMap &extensionInfos = GetExtensionInfoMap();
- ASSERT(extensionInfos.find(name) != extensionInfos.end());
- const auto &extension = extensionInfos.at(name);
- ASSERT(extension.Enableable);
-
- if (mExtensions.*(extension.ExtensionsMember))
- {
- // Extension already enabled
- return GL_TRUE;
- }
-
- const auto &nativeExtensions = mImplementation->getNativeExtensions();
- if (!(nativeExtensions.*(extension.ExtensionsMember)))
- {
- // Underlying implementation does not support this valid extension
- return GL_FALSE;
- }
-
- mExtensions.*(extension.ExtensionsMember) = true;
- updateCaps();
- initExtensionStrings();
- return GL_TRUE;
-}
-
void Context::copyTextureCHROMIUM(GLuint sourceId,
GLuint destId,
GLint internalFormat,
@@ -3003,21 +2970,19 @@ void Context::copySubTextureCHROMIUM(GLuint sourceId,
unpackUnmultiplyAlpha == GL_TRUE, sourceTexture));
}
-void Context::compressedCopyTextureCHROMIUM(GLuint sourceId, GLuint destId)
-{
- syncStateForTexImage();
-
- gl::Texture *sourceTexture = getTexture(sourceId);
- gl::Texture *destTexture = getTexture(destId);
- handleError(destTexture->copyCompressedTexture(sourceTexture));
-}
-
-void Context::getBufferPointerv(GLenum target, GLenum pname, void **params)
+void Context::getBufferPointerv(GLenum target, GLenum /*pname*/, void **params)
{
Buffer *buffer = mGLState.getTargetBuffer(target);
ASSERT(buffer);
- QueryBufferPointerv(buffer, pname, params);
+ if (!buffer->isMapped())
+ {
+ *params = nullptr;
+ }
+ else
+ {
+ *params = buffer->getMapPointer();
+ }
}
GLvoid *Context::mapBuffer(GLenum target, GLenum access)
@@ -3104,21 +3069,11 @@ void Context::blendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf a
mGLState.setBlendColor(clamp01(red), clamp01(green), clamp01(blue), clamp01(alpha));
}
-void Context::blendEquation(GLenum mode)
-{
- mGLState.setBlendEquation(mode, mode);
-}
-
void Context::blendEquationSeparate(GLenum modeRGB, GLenum modeAlpha)
{
mGLState.setBlendEquation(modeRGB, modeAlpha);
}
-void Context::blendFunc(GLenum sfactor, GLenum dfactor)
-{
- mGLState.setBlendFactors(sfactor, dfactor, sfactor, dfactor);
-}
-
void Context::blendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
{
mGLState.setBlendFactors(srcRGB, dstRGB, srcAlpha, dstAlpha);
@@ -3475,119 +3430,4 @@ void Context::popDebugGroup()
mGLState.getDebug().popGroup();
}
-void Context::bufferData(GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage)
-{
- Buffer *buffer = mGLState.getTargetBuffer(target);
- ASSERT(buffer);
- handleError(buffer->bufferData(target, data, size, usage));
-}
-
-void Context::bufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data)
-{
- if (data == nullptr)
- {
- return;
- }
-
- Buffer *buffer = mGLState.getTargetBuffer(target);
- ASSERT(buffer);
- handleError(buffer->bufferSubData(target, data, size, offset));
-}
-
-void Context::attachShader(GLuint program, GLuint shader)
-{
- auto programObject = mResourceManager->getProgram(program);
- auto shaderObject = mResourceManager->getShader(shader);
- ASSERT(programObject && shaderObject);
- programObject->attachShader(shaderObject);
-}
-
-const Workarounds &Context::getWorkarounds() const
-{
- return mWorkarounds;
-}
-
-void Context::copyBufferSubData(GLenum readTarget,
- GLenum writeTarget,
- GLintptr readOffset,
- GLintptr writeOffset,
- GLsizeiptr size)
-{
- // if size is zero, the copy is a successful no-op
- if (size == 0)
- {
- return;
- }
-
- // TODO(jmadill): cache these.
- Buffer *readBuffer = mGLState.getTargetBuffer(readTarget);
- Buffer *writeBuffer = mGLState.getTargetBuffer(writeTarget);
-
- handleError(writeBuffer->copyBufferSubData(readBuffer, readOffset, writeOffset, size));
-}
-
-void Context::bindAttribLocation(GLuint program, GLuint index, const GLchar *name)
-{
- Program *programObject = getProgram(program);
- // TODO(jmadill): Re-use this from the validation if possible.
- ASSERT(programObject);
- programObject->bindAttributeLocation(index, name);
-}
-
-void Context::bindBuffer(GLenum target, GLuint buffer)
-{
- switch (target)
- {
- case GL_ARRAY_BUFFER:
- bindArrayBuffer(buffer);
- break;
- case GL_ELEMENT_ARRAY_BUFFER:
- bindElementArrayBuffer(buffer);
- break;
- case GL_COPY_READ_BUFFER:
- bindCopyReadBuffer(buffer);
- break;
- case GL_COPY_WRITE_BUFFER:
- bindCopyWriteBuffer(buffer);
- break;
- case GL_PIXEL_PACK_BUFFER:
- bindPixelPackBuffer(buffer);
- break;
- case GL_PIXEL_UNPACK_BUFFER:
- bindPixelUnpackBuffer(buffer);
- break;
- case GL_UNIFORM_BUFFER:
- bindGenericUniformBuffer(buffer);
- break;
- case GL_TRANSFORM_FEEDBACK_BUFFER:
- bindGenericTransformFeedbackBuffer(buffer);
- break;
-
- default:
- UNREACHABLE();
- break;
- }
-}
-
-void Context::bindFramebuffer(GLenum target, GLuint framebuffer)
-{
- if (target == GL_READ_FRAMEBUFFER || target == GL_FRAMEBUFFER)
- {
- bindReadFramebuffer(framebuffer);
- }
-
- if (target == GL_DRAW_FRAMEBUFFER || target == GL_FRAMEBUFFER)
- {
- bindDrawFramebuffer(framebuffer);
- }
-}
-
-void Context::bindRenderbuffer(GLenum target, GLuint renderbuffer)
-{
- ASSERT(target == GL_RENDERBUFFER);
- Renderbuffer *object =
- mResourceManager->checkRenderbufferAllocation(mImplementation.get(), renderbuffer);
- mGLState.setRenderbufferBinding(object);
-}
-
} // namespace gl
diff --git a/gfx/angle/src/libANGLE/Context.h b/gfx/angle/src/libANGLE/Context.h
index 26c5d98e2..26182802f 100755
--- a/gfx/angle/src/libANGLE/Context.h
+++ b/gfx/angle/src/libANGLE/Context.h
@@ -22,7 +22,6 @@
#include "libANGLE/Error.h"
#include "libANGLE/HandleAllocator.h"
#include "libANGLE/VertexAttribute.h"
-#include "libANGLE/Workarounds.h"
#include "libANGLE/angletypes.h"
namespace rx
@@ -125,6 +124,7 @@ class Context final : public ValidationContext
void bindTexture(GLenum target, GLuint handle);
void bindReadFramebuffer(GLuint framebufferHandle);
void bindDrawFramebuffer(GLuint framebufferHandle);
+ void bindRenderbuffer(GLuint renderbufferHandle);
void bindVertexArray(GLuint vertexArrayHandle);
void bindSampler(GLuint textureUnit, GLuint samplerHandle);
void bindGenericUniformBuffer(GLuint bufferHandle);
@@ -148,26 +148,25 @@ class Context final : public ValidationContext
Error endQuery(GLenum target);
Error queryCounter(GLuint id, GLenum target);
void getQueryiv(GLenum target, GLenum pname, GLint *params);
- void getQueryObjectiv(GLuint id, GLenum pname, GLint *params);
- void getQueryObjectuiv(GLuint id, GLenum pname, GLuint *params);
- void getQueryObjecti64v(GLuint id, GLenum pname, GLint64 *params);
- void getQueryObjectui64v(GLuint id, GLenum pname, GLuint64 *params);
+ Error getQueryObjectiv(GLuint id, GLenum pname, GLint *params);
+ Error getQueryObjectuiv(GLuint id, GLenum pname, GLuint *params);
+ Error getQueryObjecti64v(GLuint id, GLenum pname, GLint64 *params);
+ Error getQueryObjectui64v(GLuint id, GLenum pname, GLuint64 *params);
void setVertexAttribDivisor(GLuint index, GLuint divisor);
void samplerParameteri(GLuint sampler, GLenum pname, GLint param);
- void samplerParameteriv(GLuint sampler, GLenum pname, const GLint *param);
void samplerParameterf(GLuint sampler, GLenum pname, GLfloat param);
- void samplerParameterfv(GLuint sampler, GLenum pname, const GLfloat *param);
-
- void getSamplerParameteriv(GLuint sampler, GLenum pname, GLint *params);
- void getSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat *params);
+ GLint getSamplerParameteri(GLuint sampler, GLenum pname);
+ GLfloat getSamplerParameterf(GLuint sampler, GLenum pname);
void programParameteri(GLuint program, GLenum pname, GLint value);
Buffer *getBuffer(GLuint handle) const;
FenceNV *getFenceNV(GLuint handle);
FenceSync *getFenceSync(GLsync handle) const;
+ Shader *getShader(GLuint handle) const;
+ Program *getProgram(GLuint handle) const;
Texture *getTexture(GLuint handle) const;
Framebuffer *getFramebuffer(GLuint handle) const;
Renderbuffer *getRenderbuffer(GLuint handle) const;
@@ -206,9 +205,7 @@ class Context final : public ValidationContext
void activeTexture(GLenum texture);
void blendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
- void blendEquation(GLenum mode);
void blendEquationSeparate(GLenum modeRGB, GLenum modeAlpha);
- void blendFunc(GLenum sfactor, GLenum dfactor);
void blendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
void clearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
void clearDepthf(GLclampf depth);
@@ -481,12 +478,9 @@ class Context final : public ValidationContext
GLboolean unpackFlipY,
GLboolean unpackPremultiplyAlpha,
GLboolean unpackUnmultiplyAlpha);
- void compressedCopyTextureCHROMIUM(GLuint sourceId, GLuint destId);
void generateMipmap(GLenum target);
- GLboolean enableExtension(const char *name);
-
Error flush();
Error finish();
@@ -573,20 +567,6 @@ class Context final : public ValidationContext
GLint components,
const GLfloat *coeffs);
- void bufferData(GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage);
- void bufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data);
- void attachShader(GLuint program, GLuint shader);
- void bindAttribLocation(GLuint program, GLuint index, const GLchar *name);
- void bindBuffer(GLenum target, GLuint buffer);
- void bindFramebuffer(GLenum target, GLuint framebuffer);
- void bindRenderbuffer(GLenum target, GLuint renderbuffer);
-
- void copyBufferSubData(GLenum readTarget,
- GLenum writeTarget,
- GLintptr readOffset,
- GLintptr writeOffset,
- GLsizeiptr size);
-
void handleError(const Error &error) override;
GLenum getError();
@@ -599,14 +579,13 @@ class Context final : public ValidationContext
EGLenum getClientType() const;
EGLenum getRenderBuffer() const;
- const char *getRendererString() const;
+ const std::string &getRendererString() const;
- const char *getExtensionString() const;
- const char *getExtensionString(size_t idx) const;
+ const std::string &getExtensionString() const;
+ const std::string &getExtensionString(size_t idx) const;
size_t getExtensionStringCount() const;
rx::ContextImpl *getImplementation() const { return mImplementation.get(); }
- const Workarounds &getWorkarounds() const;
private:
void syncRendererState();
@@ -630,9 +609,7 @@ class Context final : public ValidationContext
void initRendererString();
void initExtensionStrings();
- void initCaps(bool webGLContext);
- void updateCaps();
- void initWorkarounds();
+ void initCaps();
LabeledObject *getLabeledObject(GLenum identifier, GLuint name) const;
LabeledObject *getLabeledObjectFromPtr(const void *ptr) const;
@@ -650,6 +627,9 @@ class Context final : public ValidationContext
State mGLState;
+ int mClientMajorVersion;
+ int mClientMinorVersion;
+
const egl::Config *mConfig;
EGLenum mClientType;
@@ -670,9 +650,9 @@ class Context final : public ValidationContext
ResourceMap<TransformFeedback> mTransformFeedbackMap;
HandleAllocator mTransformFeedbackAllocator;
- const char *mRendererString;
- const char *mExtensionString;
- std::vector<const char *> mExtensionStrings;
+ std::string mRendererString;
+ std::string mExtensionString;
+ std::vector<std::string> mExtensionStrings;
// Recorded errors
typedef std::set<GLenum> ErrorSet;
@@ -682,7 +662,6 @@ class Context final : public ValidationContext
bool mHasBeenCurrent;
bool mContextLost;
GLenum mResetStatus;
- bool mContextLostForced;
GLenum mResetStrategy;
bool mRobustAccess;
egl::Surface *mCurrentSurface;
@@ -697,8 +676,6 @@ class Context final : public ValidationContext
State::DirtyObjects mClearDirtyObjects;
State::DirtyBits mBlitDirtyBits;
State::DirtyObjects mBlitDirtyObjects;
-
- Workarounds mWorkarounds;
};
} // namespace gl
diff --git a/gfx/angle/src/libANGLE/ContextState.cpp b/gfx/angle/src/libANGLE/ContextState.cpp
index dbf867909..375893c72 100755
--- a/gfx/angle/src/libANGLE/ContextState.cpp
+++ b/gfx/angle/src/libANGLE/ContextState.cpp
@@ -15,23 +15,22 @@ namespace gl
{
ContextState::ContextState(uintptr_t contextIn,
- const Version &clientVersion,
+ GLint clientMajorVersionIn,
+ GLint clientMinorVersionIn,
State *stateIn,
const Caps &capsIn,
const TextureCapsMap &textureCapsIn,
const Extensions &extensionsIn,
const ResourceManager *resourceManagerIn,
- const Limitations &limitationsIn,
- const ResourceMap<Framebuffer> &framebufferMap)
- : mClientVersion(clientVersion),
+ const Limitations &limitationsIn)
+ : mGLVersion(clientMajorVersionIn, clientMinorVersionIn),
mContext(contextIn),
mState(stateIn),
mCaps(capsIn),
mTextureCaps(textureCapsIn),
mExtensions(extensionsIn),
mResourceManager(resourceManagerIn),
- mLimitations(limitationsIn),
- mFramebufferMap(framebufferMap)
+ mLimitations(limitationsIn)
{
}
@@ -44,24 +43,24 @@ const TextureCaps &ContextState::getTextureCap(GLenum internalFormat) const
return mTextureCaps.get(internalFormat);
}
-ValidationContext::ValidationContext(const Version &clientVersion,
+ValidationContext::ValidationContext(GLint clientMajorVersion,
+ GLint clientMinorVersion,
State *state,
const Caps &caps,
const TextureCapsMap &textureCaps,
const Extensions &extensions,
const ResourceManager *resourceManager,
const Limitations &limitations,
- const ResourceMap<Framebuffer> &framebufferMap,
bool skipValidation)
: mState(reinterpret_cast<uintptr_t>(this),
- clientVersion,
+ clientMajorVersion,
+ clientMinorVersion,
state,
caps,
textureCaps,
extensions,
resourceManager,
- limitations,
- framebufferMap),
+ limitations),
mSkipValidation(skipValidation)
{
}
@@ -279,14 +278,6 @@ bool ValidationContext::getQueryParameterInfo(GLenum pname, GLenum *type, unsign
*type = GL_INT;
*numParams = 1;
return true;
- case GL_TEXTURE_BINDING_EXTERNAL_OES:
- if (!getExtensions().eglStreamConsumerExternal && !getExtensions().eglImageExternal)
- {
- return false;
- }
- *type = GL_INT;
- *numParams = 1;
- return true;
}
if (getExtensions().debug)
@@ -336,28 +327,6 @@ bool ValidationContext::getQueryParameterInfo(GLenum pname, GLenum *type, unsign
}
}
- if (getExtensions().bindGeneratesResource)
- {
- switch (pname)
- {
- case GL_BIND_GENERATES_RESOURCE_CHROMIUM:
- *type = GL_BOOL;
- *numParams = 1;
- return true;
- }
- }
-
- if (getExtensions().sRGBWriteControl)
- {
- switch (pname)
- {
- case GL_FRAMEBUFFER_SRGB_EXT:
- *type = GL_BOOL;
- *numParams = 1;
- return true;
- }
- }
-
// Check for ES3.0+ parameter names which are also exposed as ES2 extensions
switch (pname)
{
@@ -400,7 +369,9 @@ bool ValidationContext::getQueryParameterInfo(GLenum pname, GLenum *type, unsign
return true;
}
- if (getClientVersion() < Version(3, 0))
+ const GLVersion &glVersion = mState.getGLVersion();
+
+ if (!glVersion.isES3OrGreater())
{
return false;
}
@@ -476,7 +447,7 @@ bool ValidationContext::getQueryParameterInfo(GLenum pname, GLenum *type, unsign
}
}
- if (getClientVersion() < Version(3, 1))
+ if (!glVersion.isES31())
{
return false;
}
@@ -540,7 +511,9 @@ bool ValidationContext::getIndexedQueryParameterInfo(GLenum target,
GLenum *type,
unsigned int *numParams)
{
- if (getClientVersion() < Version(3, 0))
+
+ const GLVersion &glVersion = mState.getGLVersion();
+ if (!glVersion.isES3OrGreater())
{
return false;
}
@@ -565,7 +538,7 @@ bool ValidationContext::getIndexedQueryParameterInfo(GLenum target,
}
}
- if (getClientVersion() < Version(3, 1))
+ if (!glVersion.isES31())
{
return false;
}
@@ -584,35 +557,4 @@ bool ValidationContext::getIndexedQueryParameterInfo(GLenum target,
return false;
}
-Program *ValidationContext::getProgram(GLuint handle) const
-{
- return mState.mResourceManager->getProgram(handle);
-}
-
-Shader *ValidationContext::getShader(GLuint handle) const
-{
- return mState.mResourceManager->getShader(handle);
-}
-
-bool ValidationContext::isTextureGenerated(GLuint texture) const
-{
- return mState.mResourceManager->isTextureGenerated(texture);
-}
-
-bool ValidationContext::isBufferGenerated(GLuint buffer) const
-{
- return mState.mResourceManager->isBufferGenerated(buffer);
-}
-
-bool ValidationContext::isRenderbufferGenerated(GLuint renderbuffer) const
-{
- return mState.mResourceManager->isRenderbufferGenerated(renderbuffer);
-}
-
-bool ValidationContext::isFramebufferGenerated(GLuint framebuffer) const
-{
- ASSERT(mState.mFramebufferMap.find(0) != mState.mFramebufferMap.end());
- return mState.mFramebufferMap.find(framebuffer) != mState.mFramebufferMap.end();
-}
-
} // namespace gl
diff --git a/gfx/angle/src/libANGLE/ContextState.h b/gfx/angle/src/libANGLE/ContextState.h
index 494c1a3da..ecb3759f4 100755
--- a/gfx/angle/src/libANGLE/ContextState.h
+++ b/gfx/angle/src/libANGLE/ContextState.h
@@ -11,35 +11,51 @@
#include "common/angleutils.h"
#include "libANGLE/State.h"
-#include "libANGLE/Version.h"
namespace gl
{
class ValidationContext;
class ContextState;
-static constexpr Version ES_2_0 = Version(2, 0);
-static constexpr Version ES_3_0 = Version(3, 0);
-static constexpr Version ES_3_1 = Version(3, 1);
+class GLVersion final : angle::NonCopyable
+{
+ public:
+ GLVersion(GLint clientMajorVersion, GLint clientMinorVersion)
+ : mClientMajorVersion(clientMajorVersion), mClientMinorVersion(clientMinorVersion)
+ {
+ }
+
+ GLint getClientMajorVersion() const { return mClientMajorVersion; }
+ GLint getClientMinorVersion() const { return mClientMinorVersion; }
+
+ bool isES2() const { return mClientMajorVersion == 2; }
+ bool isES3() const { return mClientMajorVersion == 3 && mClientMinorVersion == 0; }
+ bool isES31() const { return mClientMajorVersion == 3 && mClientMinorVersion == 1; }
+ bool isES3OrGreater() const { return mClientMajorVersion >= 3; }
+
+ private:
+ GLint mClientMajorVersion;
+ GLint mClientMinorVersion;
+};
class ContextState final : public angle::NonCopyable
{
public:
ContextState(uintptr_t context,
- const Version &clientVersion,
+ GLint clientMajorVersion,
+ GLint clientMinorVersion,
State *state,
const Caps &caps,
const TextureCapsMap &textureCaps,
const Extensions &extensions,
const ResourceManager *resourceManager,
- const Limitations &limitations,
- const ResourceMap<Framebuffer> &framebufferMap);
+ const Limitations &limitations);
~ContextState();
uintptr_t getContext() const { return mContext; }
- GLint getClientMajorVersion() const { return mClientVersion.major; }
- GLint getClientMinorVersion() const { return mClientVersion.minor; }
- const Version &getClientVersion() const { return mClientVersion; }
+ GLint getClientMajorVersion() const { return mGLVersion.getClientMajorVersion(); }
+ GLint getClientMinorVersion() const { return mGLVersion.getClientMinorVersion(); }
+ const GLVersion &getGLVersion() const { return mGLVersion; }
const State &getState() const { return *mState; }
const Caps &getCaps() const { return mCaps; }
const TextureCapsMap &getTextureCaps() const { return mTextureCaps; }
@@ -53,7 +69,7 @@ class ContextState final : public angle::NonCopyable
friend class Context;
friend class ValidationContext;
- Version mClientVersion;
+ GLVersion mGLVersion;
uintptr_t mContext;
State *mState;
const Caps &mCaps;
@@ -61,29 +77,28 @@ class ContextState final : public angle::NonCopyable
const Extensions &mExtensions;
const ResourceManager *mResourceManager;
const Limitations &mLimitations;
- const ResourceMap<Framebuffer> &mFramebufferMap;
};
class ValidationContext : angle::NonCopyable
{
public:
- ValidationContext(const Version &clientVersion,
+ ValidationContext(GLint clientMajorVersion,
+ GLint clientMinorVersion,
State *state,
const Caps &caps,
const TextureCapsMap &textureCaps,
const Extensions &extensions,
const ResourceManager *resourceManager,
const Limitations &limitations,
- const ResourceMap<Framebuffer> &framebufferMap,
bool skipValidation);
virtual ~ValidationContext() {}
virtual void handleError(const Error &error) = 0;
const ContextState &getContextState() const { return mState; }
- GLint getClientMajorVersion() const { return mState.getClientMajorVersion(); }
- GLint getClientMinorVersion() const { return mState.getClientMinorVersion(); }
- const Version &getClientVersion() const { return mState.getClientVersion(); }
+ int getClientMajorVersion() const { return mState.getClientMajorVersion(); }
+ int getClientMinorVersion() const { return mState.getClientMinorVersion(); }
+ const GLVersion &getGLVersion() const { return mState.mGLVersion; }
const State &getGLState() const { return mState.getState(); }
const Caps &getCaps() const { return mState.getCaps(); }
const TextureCapsMap &getTextureCaps() const { return mState.getTextureCaps(); }
@@ -95,14 +110,6 @@ class ValidationContext : angle::NonCopyable
bool getQueryParameterInfo(GLenum pname, GLenum *type, unsigned int *numParams);
bool getIndexedQueryParameterInfo(GLenum target, GLenum *type, unsigned int *numParams);
- Program *getProgram(GLuint handle) const;
- Shader *getShader(GLuint handle) const;
-
- bool isTextureGenerated(GLuint texture) const;
- bool isBufferGenerated(GLuint buffer) const;
- bool isRenderbufferGenerated(GLuint renderbuffer) const;
- bool isFramebufferGenerated(GLuint framebuffer) const;
-
protected:
ContextState mState;
bool mSkipValidation;
diff --git a/gfx/angle/src/libANGLE/Display.cpp b/gfx/angle/src/libANGLE/Display.cpp
index 39851f9f8..26bd0d28f 100755
--- a/gfx/angle/src/libANGLE/Display.cpp
+++ b/gfx/angle/src/libANGLE/Display.cpp
@@ -53,10 +53,6 @@
# endif
#endif
-#if defined(ANGLE_ENABLE_NULL)
-#include "libANGLE/renderer/null/DisplayNULL.h"
-#endif
-
namespace egl
{
@@ -213,12 +209,6 @@ rx::DisplayImpl *CreateDisplayFromAttribs(const AttributeMap &attribMap)
break;
#endif
-#if defined(ANGLE_ENABLE_NULL)
- case EGL_PLATFORM_ANGLE_TYPE_NULL_ANGLE:
- impl = new rx::DisplayNULL();
- break;
-#endif
-
default:
UNREACHABLE();
break;
@@ -587,11 +577,8 @@ Error Display::createPbufferSurface(const Config *configuration, const Attribute
return egl::Error(EGL_SUCCESS);
}
-Error Display::createPbufferFromClientBuffer(const Config *configuration,
- EGLenum buftype,
- EGLClientBuffer clientBuffer,
- const AttributeMap &attribs,
- Surface **outSurface)
+Error Display::createPbufferFromClientBuffer(const Config *configuration, EGLClientBuffer shareHandle,
+ const AttributeMap &attribs, Surface **outSurface)
{
ASSERT(isInitialized());
@@ -601,7 +588,7 @@ Error Display::createPbufferFromClientBuffer(const Config *configuration,
}
std::unique_ptr<Surface> surface(
- new PbufferSurface(mImplementation, configuration, buftype, clientBuffer, attribs));
+ new PbufferSurface(mImplementation, configuration, shareHandle, attribs));
ANGLE_TRY(surface->initialize());
ASSERT(outSurface != nullptr);
@@ -758,6 +745,7 @@ void Display::destroySurface(Surface *surface)
}
ASSERT(surfaceRemoved);
+ UNUSED_ASSERTION_VARIABLE(surfaceRemoved);
}
mImplementation->destroySurface(surface);
@@ -841,15 +829,14 @@ bool Display::isValidConfig(const Config *config) const
return mConfigSet.contains(config);
}
-bool Display::isValidContext(const gl::Context *context) const
+bool Display::isValidContext(gl::Context *context) const
{
- return mContextSet.find(const_cast<gl::Context *>(context)) != mContextSet.end();
+ return mContextSet.find(context) != mContextSet.end();
}
-bool Display::isValidSurface(const Surface *surface) const
+bool Display::isValidSurface(Surface *surface) const
{
- return mImplementation->getSurfaceSet().find(const_cast<Surface *>(surface)) !=
- mImplementation->getSurfaceSet().end();
+ return mImplementation->getSurfaceSet().find(surface) != mImplementation->getSurfaceSet().end();
}
bool Display::isValidImage(const Image *image) const
@@ -887,10 +874,6 @@ static ClientExtensions GenerateClientExtensions()
extensions.platformANGLEOpenGL = true;
#endif
-#if defined(ANGLE_ENABLE_NULL)
- extensions.platformANGLENULL = true;
-#endif
-
#if defined(ANGLE_ENABLE_D3D11)
extensions.deviceCreation = true;
extensions.deviceCreationD3D11 = true;
@@ -935,8 +918,6 @@ void Display::initDisplayExtensions()
// Some extensions are always available because they are implemented in the EGL layer.
mDisplayExtensions.createContext = true;
mDisplayExtensions.createContextNoError = true;
- mDisplayExtensions.createContextWebGLCompatibility = true;
- mDisplayExtensions.createContextBindGeneratesResource = true;
// Force EGL_KHR_get_all_proc_addresses on.
mDisplayExtensions.getAllProcAddresses = true;
@@ -949,14 +930,6 @@ bool Display::isValidNativeWindow(EGLNativeWindowType window) const
return mImplementation->isValidNativeWindow(window);
}
-Error Display::validateClientBuffer(const Config *configuration,
- EGLenum buftype,
- EGLClientBuffer clientBuffer,
- const AttributeMap &attribs)
-{
- return mImplementation->validateClientBuffer(configuration, buftype, clientBuffer, attribs);
-}
-
bool Display::isValidDisplay(const egl::Display *display)
{
const ANGLEPlatformDisplayMap *anglePlatformDisplayMap = GetANGLEPlatformDisplayMap();
diff --git a/gfx/angle/src/libANGLE/Display.h b/gfx/angle/src/libANGLE/Display.h
index 15754ac37..c0dafb90f 100755
--- a/gfx/angle/src/libANGLE/Display.h
+++ b/gfx/angle/src/libANGLE/Display.h
@@ -57,10 +57,7 @@ class Display final : angle::NonCopyable
Error createWindowSurface(const Config *configuration, EGLNativeWindowType window, const AttributeMap &attribs,
Surface **outSurface);
Error createPbufferSurface(const Config *configuration, const AttributeMap &attribs, Surface **outSurface);
- Error createPbufferFromClientBuffer(const Config *configuration,
- EGLenum buftype,
- EGLClientBuffer clientBuffer,
- const AttributeMap &attribs,
+ Error createPbufferFromClientBuffer(const Config *configuration, EGLClientBuffer shareHandle, const AttributeMap &attribs,
Surface **outSurface);
Error createPixmapSurface(const Config *configuration, NativePixmapType nativePixmap, const AttributeMap &attribs,
Surface **outSurface);
@@ -85,17 +82,12 @@ class Display final : angle::NonCopyable
bool isInitialized() const;
bool isValidConfig(const Config *config) const;
- bool isValidContext(const gl::Context *context) const;
- bool isValidSurface(const egl::Surface *surface) const;
+ bool isValidContext(gl::Context *context) const;
+ bool isValidSurface(egl::Surface *surface) const;
bool isValidImage(const Image *image) const;
bool isValidStream(const Stream *stream) const;
bool isValidNativeWindow(EGLNativeWindowType window) const;
- Error validateClientBuffer(const Config *configuration,
- EGLenum buftype,
- EGLClientBuffer clientBuffer,
- const AttributeMap &attribs);
-
static bool isValidDisplay(const egl::Display *display);
static bool isValidNativeDisplay(EGLNativeDisplayType display);
static bool hasExistingWindowSurface(EGLNativeWindowType window);
diff --git a/gfx/angle/src/libANGLE/HandleAllocator.cpp b/gfx/angle/src/libANGLE/HandleAllocator.cpp
index c090b3dfc..4815855d5 100755
--- a/gfx/angle/src/libANGLE/HandleAllocator.cpp
+++ b/gfx/angle/src/libANGLE/HandleAllocator.cpp
@@ -63,14 +63,11 @@ GLuint HandleAllocator::allocate()
GLuint freeListHandle = listIt->begin;
ASSERT(freeListHandle > 0);
+ listIt->begin++;
if (listIt->begin == listIt->end)
{
mUnallocatedList.erase(listIt);
}
- else
- {
- listIt->begin++;
- }
return freeListHandle;
}
@@ -104,7 +101,7 @@ void HandleAllocator::reserve(GLuint handle)
if (handle == begin || handle == end)
{
- if (begin == end)
+ if (begin + 1 == end)
{
mUnallocatedList.erase(boundIt);
}
@@ -120,12 +117,18 @@ void HandleAllocator::reserve(GLuint handle)
return;
}
- ASSERT(begin < handle && handle < end);
-
// need to split the range
auto placementIt = mUnallocatedList.erase(boundIt);
- placementIt = mUnallocatedList.insert(placementIt, HandleRange(handle + 1, end));
- mUnallocatedList.insert(placementIt, HandleRange(begin, handle - 1));
+
+ if (handle + 1 != end)
+ {
+ placementIt = mUnallocatedList.insert(placementIt, HandleRange(handle + 1, end));
+ }
+ if (begin != handle)
+ {
+ ASSERT(begin < handle);
+ mUnallocatedList.insert(placementIt, HandleRange(begin, handle));
+ }
}
} // namespace gl
diff --git a/gfx/angle/src/libANGLE/HandleAllocator.h b/gfx/angle/src/libANGLE/HandleAllocator.h
index c7e0a0d85..1888d57cf 100755
--- a/gfx/angle/src/libANGLE/HandleAllocator.h
+++ b/gfx/angle/src/libANGLE/HandleAllocator.h
@@ -41,7 +41,6 @@ class HandleAllocator final : angle::NonCopyable
typedef std::vector<GLuint> HandleList;
HandleList mFreeValues;
- // Represents an inclusive range [begin, end]
struct HandleRange
{
HandleRange(GLuint beginIn, GLuint endIn) : begin(beginIn), end(endIn) {}
diff --git a/gfx/angle/src/libANGLE/HandleAllocator_unittest.cpp b/gfx/angle/src/libANGLE/HandleAllocator_unittest.cpp
index bfcbd8f01..726b64bab 100755
--- a/gfx/angle/src/libANGLE/HandleAllocator_unittest.cpp
+++ b/gfx/angle/src/libANGLE/HandleAllocator_unittest.cpp
@@ -90,7 +90,8 @@ TEST(HandleAllocatorTest, Reallocation)
EXPECT_EQ(finalResult, 1);
}
-// The following test covers reserving a handle with max uint value. See http://anglebug.com/1052
+// The following test covers reserving a handle with max uint value.
+// See http://anglebug.com/1052
TEST(HandleAllocatorTest, ReserveMaxUintHandle)
{
gl::HandleAllocator allocator;
@@ -102,19 +103,6 @@ TEST(HandleAllocatorTest, ReserveMaxUintHandle)
EXPECT_EQ(1u, normalHandle);
}
-// The following test covers reserving a handle with max uint value minus one then max uint value.
-TEST(HandleAllocatorTest, ReserveMaxUintHandle2)
-{
- gl::HandleAllocator allocator;
-
- GLuint maxUintHandle = std::numeric_limits<GLuint>::max();
- allocator.reserve(maxUintHandle - 1);
- allocator.reserve(maxUintHandle);
-
- GLuint normalHandle = allocator.allocate();
- EXPECT_EQ(1u, normalHandle);
-}
-
// To test if the allocator keep the handle in a sorted order.
TEST(HandleAllocatorTest, SortedOrderHandle)
{
diff --git a/gfx/angle/src/libANGLE/HandleRangeAllocator.cpp b/gfx/angle/src/libANGLE/HandleRangeAllocator.cpp
index 500a79629..f219f954f 100755
--- a/gfx/angle/src/libANGLE/HandleRangeAllocator.cpp
+++ b/gfx/angle/src/libANGLE/HandleRangeAllocator.cpp
@@ -49,6 +49,7 @@ GLuint HandleRangeAllocator::allocateAtOrAbove(GLuint wanted)
}
GLuint firstId = current->first;
+ UNUSED_ASSERTION_VARIABLE(firstId);
GLuint lastId = current->second;
ASSERT(wanted >= firstId);
diff --git a/gfx/angle/src/libANGLE/ImageIndex.cpp b/gfx/angle/src/libANGLE/ImageIndex.cpp
index f74ce19d9..38c1941a3 100755
--- a/gfx/angle/src/libANGLE/ImageIndex.cpp
+++ b/gfx/angle/src/libANGLE/ImageIndex.cpp
@@ -135,12 +135,7 @@ ImageIndexIterator::ImageIndexIterator(GLenum type, const Range<GLint> &mipRange
GLint ImageIndexIterator::maxLayer() const
{
- if (mLayerCounts)
- {
- ASSERT(mCurrentMip >= 0);
- return (mCurrentMip < mMipRange.end) ? mLayerCounts[mCurrentMip] : 0;
- }
- return mLayerRange.end;
+ return (mLayerCounts ? static_cast<GLint>(mLayerCounts[mCurrentMip]) : mLayerRange.end);
}
ImageIndex ImageIndexIterator::next()
@@ -154,29 +149,21 @@ ImageIndex ImageIndexIterator::next()
if (mCurrentLayer != ImageIndex::ENTIRE_LEVEL)
{
- if (mCurrentLayer < maxLayer() - 1)
+ if (mCurrentLayer < maxLayer()-1)
{
mCurrentLayer++;
}
- else if (mCurrentMip < mMipRange.end - 1)
+ else if (mCurrentMip < mMipRange.end-1)
{
mCurrentMip++;
mCurrentLayer = mLayerRange.start;
}
- else
- {
- done();
- }
}
- else if (mCurrentMip < mMipRange.end - 1)
+ else if (mCurrentMip < mMipRange.end-1)
{
mCurrentMip++;
mCurrentLayer = mLayerRange.start;
}
- else
- {
- done();
- }
return value;
}
@@ -198,10 +185,4 @@ bool ImageIndexIterator::hasNext() const
return (mCurrentMip < mMipRange.end || mCurrentLayer < maxLayer());
}
-void ImageIndexIterator::done()
-{
- mCurrentMip = mMipRange.end;
- mCurrentLayer = maxLayer();
}
-
-} // namespace gl
diff --git a/gfx/angle/src/libANGLE/ImageIndex.h b/gfx/angle/src/libANGLE/ImageIndex.h
index 5961f0cb0..52ac40c45 100755
--- a/gfx/angle/src/libANGLE/ImageIndex.h
+++ b/gfx/angle/src/libANGLE/ImageIndex.h
@@ -68,7 +68,6 @@ class ImageIndexIterator
const Range<GLint> &layerRange, const GLsizei *layerCounts);
GLint maxLayer() const;
- void done();
GLenum mType;
Range<GLint> mMipRange;
diff --git a/gfx/angle/src/libANGLE/ImageIndexIterator_unittest.cpp b/gfx/angle/src/libANGLE/ImageIndexIterator_unittest.cpp
index 2f97e8eba..2dc0b2ab7 100755
--- a/gfx/angle/src/libANGLE/ImageIndexIterator_unittest.cpp
+++ b/gfx/angle/src/libANGLE/ImageIndexIterator_unittest.cpp
@@ -41,8 +41,6 @@ TEST(ImageIndexTest, Iterator2D)
EXPECT_EQ(current.mipIndex, nextIndex.mipIndex);
EXPECT_EQ(current.layerIndex, nextIndex.layerIndex);
}
-
- EXPECT_FALSE(iter.hasNext());
}
TEST(ImageIndexTest, IteratorCube)
@@ -66,8 +64,6 @@ TEST(ImageIndexTest, IteratorCube)
EXPECT_TRUE(nextIndex.hasLayer());
}
}
-
- EXPECT_FALSE(iter.hasNext());
}
TEST(ImageIndexTest, Iterator3D)
@@ -89,8 +85,6 @@ TEST(ImageIndexTest, Iterator3D)
EXPECT_TRUE(nextIndex.hasLayer());
}
}
-
- EXPECT_FALSE(iter.hasNext());
}
TEST(ImageIndexTest, Iterator2DArray)
@@ -115,8 +109,6 @@ TEST(ImageIndexTest, Iterator2DArray)
EXPECT_TRUE(nextIndex.hasLayer());
}
}
-
- EXPECT_FALSE(iter.hasNext());
}
} // namespace
diff --git a/gfx/angle/src/libANGLE/Path.h b/gfx/angle/src/libANGLE/Path.h
index b103c8460..40e2cf289 100755
--- a/gfx/angle/src/libANGLE/Path.h
+++ b/gfx/angle/src/libANGLE/Path.h
@@ -49,7 +49,9 @@ class Path final : angle::NonCopyable
bool hasPathData() const { return mHasData; }
- rx::PathImpl *getImplementation() const { return mPath; }
+ const rx::PathImpl *getImplementation() const { return mPath; }
+
+ rx::PathImpl *getImplementation() { return mPath; }
private:
rx::PathImpl *mPath;
diff --git a/gfx/angle/src/libANGLE/Program.cpp b/gfx/angle/src/libANGLE/Program.cpp
index 06d8d1534..49a0f9a33 100755
--- a/gfx/angle/src/libANGLE/Program.cpp
+++ b/gfx/angle/src/libANGLE/Program.cpp
@@ -377,27 +377,39 @@ const std::string &Program::getLabel() const
return mState.mLabel;
}
-void Program::attachShader(Shader *shader)
+bool Program::attachShader(Shader *shader)
{
switch (shader->getType())
{
case GL_VERTEX_SHADER:
{
- ASSERT(!mState.mAttachedVertexShader);
+ if (mState.mAttachedVertexShader)
+ {
+ return false;
+ }
+
mState.mAttachedVertexShader = shader;
mState.mAttachedVertexShader->addRef();
break;
}
case GL_FRAGMENT_SHADER:
{
- ASSERT(!mState.mAttachedFragmentShader);
+ if (mState.mAttachedFragmentShader)
+ {
+ return false;
+ }
+
mState.mAttachedFragmentShader = shader;
mState.mAttachedFragmentShader->addRef();
break;
}
case GL_COMPUTE_SHADER:
{
- ASSERT(!mState.mAttachedComputeShader);
+ if (mState.mAttachedComputeShader)
+ {
+ return false;
+ }
+
mState.mAttachedComputeShader = shader;
mState.mAttachedComputeShader->addRef();
break;
@@ -405,6 +417,8 @@ void Program::attachShader(Shader *shader)
default:
UNREACHABLE();
}
+
+ return true;
}
bool Program::detachShader(Shader *shader)
@@ -509,7 +523,7 @@ BindingInfo Program::getFragmentInputBindingInfo(GLint index) const
if (arrayIndex == GL_INVALID_INDEX)
arrayIndex = 0;
- ret.name = in.mappedName + "[" + ToString(arrayIndex) + "]";
+ ret.name = in.mappedName + "[" + std::to_string(arrayIndex) + "]";
}
else
{
@@ -597,10 +611,11 @@ Error Program::link(const ContextState &data)
return NoError();
}
- ANGLE_TRY_RESULT(mProgram->link(data, mInfoLog), mLinked);
- if (!mLinked)
+ rx::LinkResult result = mProgram->link(data, mInfoLog);
+
+ if (result.error.isError() || !result.linkSuccess)
{
- return NoError();
+ return result.error;
}
}
else
@@ -653,10 +668,10 @@ Error Program::link(const ContextState &data)
linkOutputVariables();
- ANGLE_TRY_RESULT(mProgram->link(data, mInfoLog), mLinked);
- if (!mLinked)
+ rx::LinkResult result = mProgram->link(data, mInfoLog);
+ if (result.error.isError() || !result.linkSuccess)
{
- return NoError();
+ return result.error;
}
gatherTransformFeedbackVaryings(mergedVaryings);
@@ -664,6 +679,13 @@ Error Program::link(const ContextState &data)
gatherInterfaceBlockInfo();
+ // Because we do lazy init in assignUniformBlockRegisters,
+ // we must initialize them when linking shaders,
+ // otherwise, we will have no shaders for getting uniform blocks
+ // information from shaders when doing draw calls.
+ mProgram->assignUniformBlockRegisters();
+
+ mLinked = true;
return NoError();
}
@@ -843,9 +865,14 @@ Error Program::loadBinary(GLenum binaryFormat, const void *binary, GLsizei lengt
stream.readInt(&mSamplerUniformRange.start);
stream.readInt(&mSamplerUniformRange.end);
- ANGLE_TRY_RESULT(mProgram->load(mInfoLog, &stream), mLinked);
+ rx::LinkResult result = mProgram->load(mInfoLog, &stream);
+ if (result.error.isError() || !result.linkSuccess)
+ {
+ return result.error;
+ }
- return NoError();
+ mLinked = true;
+ return Error(GL_NO_ERROR);
#endif // #if ANGLE_PROGRAM_BINARY_LOAD == ANGLE_ENABLED
}
@@ -1336,128 +1363,128 @@ GLuint Program::getUniformIndex(const std::string &name) const
void Program::setUniform1fv(GLint location, GLsizei count, const GLfloat *v)
{
- GLsizei clampedCount = setUniformInternal(location, count, 1, v);
- mProgram->setUniform1fv(location, clampedCount, v);
+ setUniformInternal(location, count * 1, v);
+ mProgram->setUniform1fv(location, count, v);
}
void Program::setUniform2fv(GLint location, GLsizei count, const GLfloat *v)
{
- GLsizei clampedCount = setUniformInternal(location, count, 2, v);
- mProgram->setUniform2fv(location, clampedCount, v);
+ setUniformInternal(location, count * 2, v);
+ mProgram->setUniform2fv(location, count, v);
}
void Program::setUniform3fv(GLint location, GLsizei count, const GLfloat *v)
{
- GLsizei clampedCount = setUniformInternal(location, count, 3, v);
- mProgram->setUniform3fv(location, clampedCount, v);
+ setUniformInternal(location, count * 3, v);
+ mProgram->setUniform3fv(location, count, v);
}
void Program::setUniform4fv(GLint location, GLsizei count, const GLfloat *v)
{
- GLsizei clampedCount = setUniformInternal(location, count, 4, v);
- mProgram->setUniform4fv(location, clampedCount, v);
+ setUniformInternal(location, count * 4, v);
+ mProgram->setUniform4fv(location, count, v);
}
void Program::setUniform1iv(GLint location, GLsizei count, const GLint *v)
{
- GLsizei clampedCount = setUniformInternal(location, count, 1, v);
- mProgram->setUniform1iv(location, clampedCount, v);
+ setUniformInternal(location, count * 1, v);
+ mProgram->setUniform1iv(location, count, v);
}
void Program::setUniform2iv(GLint location, GLsizei count, const GLint *v)
{
- GLsizei clampedCount = setUniformInternal(location, count, 2, v);
- mProgram->setUniform2iv(location, clampedCount, v);
+ setUniformInternal(location, count * 2, v);
+ mProgram->setUniform2iv(location, count, v);
}
void Program::setUniform3iv(GLint location, GLsizei count, const GLint *v)
{
- GLsizei clampedCount = setUniformInternal(location, count, 3, v);
- mProgram->setUniform3iv(location, clampedCount, v);
+ setUniformInternal(location, count * 3, v);
+ mProgram->setUniform3iv(location, count, v);
}
void Program::setUniform4iv(GLint location, GLsizei count, const GLint *v)
{
- GLsizei clampedCount = setUniformInternal(location, count, 4, v);
- mProgram->setUniform4iv(location, clampedCount, v);
+ setUniformInternal(location, count * 4, v);
+ mProgram->setUniform4iv(location, count, v);
}
void Program::setUniform1uiv(GLint location, GLsizei count, const GLuint *v)
{
- GLsizei clampedCount = setUniformInternal(location, count, 1, v);
- mProgram->setUniform1uiv(location, clampedCount, v);
+ setUniformInternal(location, count * 1, v);
+ mProgram->setUniform1uiv(location, count, v);
}
void Program::setUniform2uiv(GLint location, GLsizei count, const GLuint *v)
{
- GLsizei clampedCount = setUniformInternal(location, count, 2, v);
- mProgram->setUniform2uiv(location, clampedCount, v);
+ setUniformInternal(location, count * 2, v);
+ mProgram->setUniform2uiv(location, count, v);
}
void Program::setUniform3uiv(GLint location, GLsizei count, const GLuint *v)
{
- GLsizei clampedCount = setUniformInternal(location, count, 3, v);
- mProgram->setUniform3uiv(location, clampedCount, v);
+ setUniformInternal(location, count * 3, v);
+ mProgram->setUniform3uiv(location, count, v);
}
void Program::setUniform4uiv(GLint location, GLsizei count, const GLuint *v)
{
- GLsizei clampedCount = setUniformInternal(location, count, 4, v);
- mProgram->setUniform4uiv(location, clampedCount, v);
+ setUniformInternal(location, count * 4, v);
+ mProgram->setUniform4uiv(location, count, v);
}
void Program::setUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *v)
{
- GLsizei clampedCount = setMatrixUniformInternal<2, 2>(location, count, transpose, v);
- mProgram->setUniformMatrix2fv(location, clampedCount, transpose, v);
+ setMatrixUniformInternal<2, 2>(location, count, transpose, v);
+ mProgram->setUniformMatrix2fv(location, count, transpose, v);
}
void Program::setUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *v)
{
- GLsizei clampedCount = setMatrixUniformInternal<3, 3>(location, count, transpose, v);
- mProgram->setUniformMatrix3fv(location, clampedCount, transpose, v);
+ setMatrixUniformInternal<3, 3>(location, count, transpose, v);
+ mProgram->setUniformMatrix3fv(location, count, transpose, v);
}
void Program::setUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *v)
{
- GLsizei clampedCount = setMatrixUniformInternal<4, 4>(location, count, transpose, v);
- mProgram->setUniformMatrix4fv(location, clampedCount, transpose, v);
+ setMatrixUniformInternal<4, 4>(location, count, transpose, v);
+ mProgram->setUniformMatrix4fv(location, count, transpose, v);
}
void Program::setUniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *v)
{
- GLsizei clampedCount = setMatrixUniformInternal<2, 3>(location, count, transpose, v);
- mProgram->setUniformMatrix2x3fv(location, clampedCount, transpose, v);
+ setMatrixUniformInternal<2, 3>(location, count, transpose, v);
+ mProgram->setUniformMatrix2x3fv(location, count, transpose, v);
}
void Program::setUniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *v)
{
- GLsizei clampedCount = setMatrixUniformInternal<2, 4>(location, count, transpose, v);
- mProgram->setUniformMatrix2x4fv(location, clampedCount, transpose, v);
+ setMatrixUniformInternal<2, 4>(location, count, transpose, v);
+ mProgram->setUniformMatrix2x4fv(location, count, transpose, v);
}
void Program::setUniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *v)
{
- GLsizei clampedCount = setMatrixUniformInternal<3, 2>(location, count, transpose, v);
- mProgram->setUniformMatrix3x2fv(location, clampedCount, transpose, v);
+ setMatrixUniformInternal<3, 2>(location, count, transpose, v);
+ mProgram->setUniformMatrix3x2fv(location, count, transpose, v);
}
void Program::setUniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *v)
{
- GLsizei clampedCount = setMatrixUniformInternal<3, 4>(location, count, transpose, v);
- mProgram->setUniformMatrix3x4fv(location, clampedCount, transpose, v);
+ setMatrixUniformInternal<3, 4>(location, count, transpose, v);
+ mProgram->setUniformMatrix3x4fv(location, count, transpose, v);
}
void Program::setUniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *v)
{
- GLsizei clampedCount = setMatrixUniformInternal<4, 2>(location, count, transpose, v);
- mProgram->setUniformMatrix4x2fv(location, clampedCount, transpose, v);
+ setMatrixUniformInternal<4, 2>(location, count, transpose, v);
+ mProgram->setUniformMatrix4x2fv(location, count, transpose, v);
}
void Program::setUniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *v)
{
- GLsizei clampedCount = setMatrixUniformInternal<4, 3>(location, count, transpose, v);
- mProgram->setUniformMatrix4x3fv(location, clampedCount, transpose, v);
+ setMatrixUniformInternal<4, 3>(location, count, transpose, v);
+ mProgram->setUniformMatrix4x3fv(location, count, transpose, v);
}
void Program::getUniformfv(GLint location, GLfloat *v) const
@@ -1612,6 +1639,44 @@ void Program::getActiveUniformBlockName(GLuint uniformBlockIndex, GLsizei bufSiz
}
}
+void Program::getActiveUniformBlockiv(GLuint uniformBlockIndex, GLenum pname, GLint *params) const
+{
+ ASSERT(
+ uniformBlockIndex <
+ mState.mUniformBlocks.size()); // index must be smaller than getActiveUniformBlockCount()
+
+ const UniformBlock &uniformBlock = mState.mUniformBlocks[uniformBlockIndex];
+
+ switch (pname)
+ {
+ case GL_UNIFORM_BLOCK_DATA_SIZE:
+ *params = static_cast<GLint>(uniformBlock.dataSize);
+ break;
+ case GL_UNIFORM_BLOCK_NAME_LENGTH:
+ *params =
+ static_cast<GLint>(uniformBlock.name.size() + 1 + (uniformBlock.isArray ? 3 : 0));
+ break;
+ case GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS:
+ *params = static_cast<GLint>(uniformBlock.memberUniformIndexes.size());
+ break;
+ case GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES:
+ {
+ for (unsigned int blockMemberIndex = 0; blockMemberIndex < uniformBlock.memberUniformIndexes.size(); blockMemberIndex++)
+ {
+ params[blockMemberIndex] = static_cast<GLint>(uniformBlock.memberUniformIndexes[blockMemberIndex]);
+ }
+ }
+ break;
+ case GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER:
+ *params = static_cast<GLint>(uniformBlock.vertexStaticUse);
+ break;
+ case GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER:
+ *params = static_cast<GLint>(uniformBlock.fragmentStaticUse);
+ break;
+ default: UNREACHABLE();
+ }
+}
+
GLint Program::getActiveUniformBlockMaxLength() const
{
int maxLength = 0;
@@ -2401,6 +2466,7 @@ bool Program::linkValidateTransformFeedback(InfoLog &infoLog,
// All transform feedback varyings are expected to exist since packVaryings checks for them.
ASSERT(found);
+ UNUSED_ASSERTION_VARIABLE(found);
}
if (mState.mTransformFeedbackBufferMode == GL_INTERLEAVED_ATTRIBS &&
@@ -2751,13 +2817,7 @@ void Program::defineUniformBlock(const sh::InterfaceBlock &interfaceBlock, GLenu
size_t blockSize = 0;
// Don't define this block at all if it's not active in the implementation.
- std::stringstream blockNameStr;
- blockNameStr << interfaceBlock.name;
- if (interfaceBlock.arraySize > 0)
- {
- blockNameStr << "[0]";
- }
- if (!mProgram->getUniformBlockSize(blockNameStr.str(), &blockSize))
+ if (!mProgram->getUniformBlockSize(interfaceBlock.name, &blockSize))
{
return;
}
@@ -2803,10 +2863,15 @@ void Program::defineUniformBlock(const sh::InterfaceBlock &interfaceBlock, GLenu
UNREACHABLE();
}
- // Since all block elements in an array share the same active uniforms, they will all be
- // active once any uniform member is used. So, since interfaceBlock.name[0] was active,
- // here we will add every block element in the array.
- block.dataSize = static_cast<unsigned int>(blockSize);
+ // TODO(jmadill): Determine if we can ever have an inactive array element block.
+ size_t blockElementSize = 0;
+ if (!mProgram->getUniformBlockSize(block.nameWithArrayIndex(), &blockElementSize))
+ {
+ continue;
+ }
+
+ ASSERT(blockElementSize == blockSize);
+ block.dataSize = static_cast<unsigned int>(blockElementSize);
mState.mUniformBlocks.push_back(block);
}
}
@@ -2842,32 +2907,18 @@ void Program::defineUniformBlock(const sh::InterfaceBlock &interfaceBlock, GLenu
}
template <typename T>
-GLsizei Program::setUniformInternal(GLint location, GLsizei countIn, int vectorSize, const T *v)
+void Program::setUniformInternal(GLint location, GLsizei count, const T *v)
{
const VariableLocation &locationInfo = mState.mUniformLocations[location];
LinkedUniform *linkedUniform = &mState.mUniforms[locationInfo.index];
uint8_t *destPointer = linkedUniform->getDataPtrToElement(locationInfo.element);
- // OpenGL ES 3.0.4 spec pg 67: "Values for any array element that exceeds the highest array
- // element index used, as reported by GetActiveUniform, will be ignored by the GL."
- unsigned int remainingElements = linkedUniform->elementCount() - locationInfo.element;
- GLsizei maxElementCount =
- static_cast<GLsizei>(remainingElements * linkedUniform->getElementComponents());
-
- GLsizei count = countIn;
- GLsizei clampedCount = count * vectorSize;
- if (clampedCount > maxElementCount)
- {
- clampedCount = maxElementCount;
- count = maxElementCount / vectorSize;
- }
-
if (VariableComponentType(linkedUniform->type) == GL_BOOL)
{
// Do a cast conversion for boolean types. From the spec:
// "The uniform is set to FALSE if the input value is 0 or 0.0f, and set to TRUE otherwise."
GLint *destAsInt = reinterpret_cast<GLint *>(destPointer);
- for (GLsizei component = 0; component < clampedCount; ++component)
+ for (GLsizei component = 0; component < count; ++component)
{
destAsInt[component] = (v[component] != static_cast<T>(0) ? GL_TRUE : GL_FALSE);
}
@@ -2875,39 +2926,32 @@ GLsizei Program::setUniformInternal(GLint location, GLsizei countIn, int vectorS
else
{
// Invalide the validation cache if we modify the sampler data.
- if (linkedUniform->isSampler() && memcmp(destPointer, v, sizeof(T) * clampedCount) != 0)
+ if (linkedUniform->isSampler() && memcmp(destPointer, v, sizeof(T) * count) != 0)
{
mCachedValidateSamplersResult.reset();
}
- memcpy(destPointer, v, sizeof(T) * clampedCount);
+ memcpy(destPointer, v, sizeof(T) * count);
}
-
- return count;
}
template <size_t cols, size_t rows, typename T>
-GLsizei Program::setMatrixUniformInternal(GLint location,
- GLsizei count,
- GLboolean transpose,
- const T *v)
+void Program::setMatrixUniformInternal(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const T *v)
{
if (!transpose)
{
- return setUniformInternal(location, count, cols * rows, v);
+ setUniformInternal(location, count * cols * rows, v);
+ return;
}
// Perform a transposing copy.
const VariableLocation &locationInfo = mState.mUniformLocations[location];
LinkedUniform *linkedUniform = &mState.mUniforms[locationInfo.index];
T *destPtr = reinterpret_cast<T *>(linkedUniform->getDataPtrToElement(locationInfo.element));
-
- // OpenGL ES 3.0.4 spec pg 67: "Values for any array element that exceeds the highest array
- // element index used, as reported by GetActiveUniform, will be ignored by the GL."
- unsigned int remainingElements = linkedUniform->elementCount() - locationInfo.element;
- GLsizei clampedCount = std::min(count, static_cast<GLsizei>(remainingElements));
-
- for (GLsizei element = 0; element < clampedCount; ++element)
+ for (GLsizei element = 0; element < count; ++element)
{
size_t elementOffset = element * rows * cols;
@@ -2919,8 +2963,6 @@ GLsizei Program::setMatrixUniformInternal(GLint location,
}
}
}
-
- return clampedCount;
}
template <typename DestT>
diff --git a/gfx/angle/src/libANGLE/Program.h b/gfx/angle/src/libANGLE/Program.h
index 18bec495f..03212a5cd 100755
--- a/gfx/angle/src/libANGLE/Program.h
+++ b/gfx/angle/src/libANGLE/Program.h
@@ -241,16 +241,13 @@ class Program final : angle::NonCopyable, public LabeledObject
void setLabel(const std::string &label) override;
const std::string &getLabel() const override;
- rx::ProgramImpl *getImplementation() const { return mProgram; }
+ rx::ProgramImpl *getImplementation() { return mProgram; }
+ const rx::ProgramImpl *getImplementation() const { return mProgram; }
- void attachShader(Shader *shader);
+ bool attachShader(Shader *shader);
bool detachShader(Shader *shader);
int getAttachedShadersCount() const;
- const Shader *getAttachedVertexShader() const { return mState.mAttachedVertexShader; }
- const Shader *getAttachedFragmentShader() const { return mState.mAttachedFragmentShader; }
- const Shader *getAttachedComputeShader() const { return mState.mAttachedComputeShader; }
-
void bindAttributeLocation(GLuint index, const char *name);
void bindUniformLocation(GLuint index, const char *name);
@@ -327,6 +324,7 @@ class Program final : angle::NonCopyable, public LabeledObject
void getUniformuiv(GLint location, GLuint *params) const;
void getActiveUniformBlockName(GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName) const;
+ void getActiveUniformBlockiv(GLuint uniformBlockIndex, GLenum pname, GLint *params) const;
GLuint getActiveUniformBlockCount() const;
GLint getActiveUniformBlockMaxLength() const;
@@ -460,15 +458,11 @@ class Program final : angle::NonCopyable, public LabeledObject
void defineUniformBlock(const sh::InterfaceBlock &interfaceBlock, GLenum shaderType);
- // Both these function update the cached uniform values and return a modified "count"
- // so that the uniform update doesn't overflow the uniform.
template <typename T>
- GLsizei setUniformInternal(GLint location, GLsizei count, int vectorSize, const T *v);
+ void setUniformInternal(GLint location, GLsizei count, const T *v);
+
template <size_t cols, size_t rows, typename T>
- GLsizei setMatrixUniformInternal(GLint location,
- GLsizei count,
- GLboolean transpose,
- const T *v);
+ void setMatrixUniformInternal(GLint location, GLsizei count, GLboolean transpose, const T *v);
template <typename DestT>
void getUniformInternal(GLint location, DestT *dataOut) const;
diff --git a/gfx/angle/src/libANGLE/Renderbuffer.cpp b/gfx/angle/src/libANGLE/Renderbuffer.cpp
index 7b30a46be..977117d24 100755
--- a/gfx/angle/src/libANGLE/Renderbuffer.cpp
+++ b/gfx/angle/src/libANGLE/Renderbuffer.cpp
@@ -95,12 +95,17 @@ Error Renderbuffer::setStorageEGLImageTarget(egl::Image *image)
return NoError();
}
-rx::RenderbufferImpl *Renderbuffer::getImplementation() const
+rx::RenderbufferImpl *Renderbuffer::getImplementation()
{
ASSERT(mRenderbuffer);
return mRenderbuffer;
}
+const rx::RenderbufferImpl *Renderbuffer::getImplementation() const
+{
+ return mRenderbuffer;
+}
+
GLsizei Renderbuffer::getWidth() const
{
return mWidth;
diff --git a/gfx/angle/src/libANGLE/Renderbuffer.h b/gfx/angle/src/libANGLE/Renderbuffer.h
index 57cc08279..eceda70bc 100755
--- a/gfx/angle/src/libANGLE/Renderbuffer.h
+++ b/gfx/angle/src/libANGLE/Renderbuffer.h
@@ -42,7 +42,8 @@ class Renderbuffer final : public egl::ImageSibling,
Error setStorageMultisample(size_t samples, GLenum internalformat, size_t width, size_t height);
Error setStorageEGLImageTarget(egl::Image *imageTarget);
- rx::RenderbufferImpl *getImplementation() const;
+ rx::RenderbufferImpl *getImplementation();
+ const rx::RenderbufferImpl *getImplementation() const;
GLsizei getWidth() const;
GLsizei getHeight() const;
diff --git a/gfx/angle/src/libANGLE/ResourceManager.cpp b/gfx/angle/src/libANGLE/ResourceManager.cpp
index cfb965d92..3fdfe47d9 100755
--- a/gfx/angle/src/libANGLE/ResourceManager.cpp
+++ b/gfx/angle/src/libANGLE/ResourceManager.cpp
@@ -309,7 +309,7 @@ Buffer *ResourceManager::getBuffer(unsigned int handle)
}
}
-Shader *ResourceManager::getShader(unsigned int handle) const
+Shader *ResourceManager::getShader(unsigned int handle)
{
auto shader = mShaderMap.find(handle);
@@ -438,7 +438,7 @@ Buffer *ResourceManager::checkBufferAllocation(rx::GLImplFactory *factory, GLuin
return bufferMapIt->second;
}
- Buffer *buffer = new Buffer(factory, handle);
+ Buffer *buffer = new Buffer(factory->createBuffer(), handle);
buffer->addRef();
if (handleAllocated)
@@ -544,19 +544,4 @@ bool ResourceManager::isSampler(GLuint sampler)
return mSamplerMap.find(sampler) != mSamplerMap.end();
}
-bool ResourceManager::isTextureGenerated(GLuint texture) const
-{
- return texture == 0 || mTextureMap.find(texture) != mTextureMap.end();
-}
-
-bool ResourceManager::isBufferGenerated(GLuint buffer) const
-{
- return buffer == 0 || mBufferMap.find(buffer) != mBufferMap.end();
-}
-
-bool ResourceManager::isRenderbufferGenerated(GLuint renderbuffer) const
-{
- return renderbuffer == 0 || mRenderbufferMap.find(renderbuffer) != mRenderbufferMap.end();
-}
-
} // namespace gl
diff --git a/gfx/angle/src/libANGLE/ResourceManager.h b/gfx/angle/src/libANGLE/ResourceManager.h
index f6a0002ed..a673257e1 100755
--- a/gfx/angle/src/libANGLE/ResourceManager.h
+++ b/gfx/angle/src/libANGLE/ResourceManager.h
@@ -64,7 +64,7 @@ class ResourceManager : angle::NonCopyable
void deletePaths(GLuint first, GLsizei range);
Buffer *getBuffer(GLuint handle);
- Shader *getShader(GLuint handle) const;
+ Shader *getShader(GLuint handle);
Program *getProgram(GLuint handle) const;
Texture *getTexture(GLuint handle);
Renderbuffer *getRenderbuffer(GLuint handle);
@@ -85,11 +85,6 @@ class ResourceManager : angle::NonCopyable
bool isSampler(GLuint sampler);
- // GL_CHROMIUM_bind_generates_resource
- bool isTextureGenerated(GLuint texture) const;
- bool isBufferGenerated(GLuint buffer) const;
- bool isRenderbufferGenerated(GLuint renderbuffer) const;
-
private:
void createTextureInternal(GLuint handle);
diff --git a/gfx/angle/src/libANGLE/ResourceManager_unittest.cpp b/gfx/angle/src/libANGLE/ResourceManager_unittest.cpp
index a9dff145b..ded2dc538 100755
--- a/gfx/angle/src/libANGLE/ResourceManager_unittest.cpp
+++ b/gfx/angle/src/libANGLE/ResourceManager_unittest.cpp
@@ -48,7 +48,7 @@ TEST_F(ResourceManagerTest, ReallocateBoundTexture)
TEST_F(ResourceManagerTest, ReallocateBoundBuffer)
{
- EXPECT_CALL(mMockFactory, createBuffer(_)).Times(1).RetiresOnSaturation();
+ EXPECT_CALL(mMockFactory, createBuffer()).Times(1).RetiresOnSaturation();
mResourceManager->checkBufferAllocation(&mMockFactory, 1);
GLuint newBuffer = mResourceManager->createBuffer();
diff --git a/gfx/angle/src/libANGLE/Sampler.cpp b/gfx/angle/src/libANGLE/Sampler.cpp
index 369c3cbaa..dc1d7c94a 100755
--- a/gfx/angle/src/libANGLE/Sampler.cpp
+++ b/gfx/angle/src/libANGLE/Sampler.cpp
@@ -135,24 +135,18 @@ GLenum Sampler::getCompareFunc() const
return mSamplerState.compareFunc;
}
-void Sampler::setSRGBDecode(GLenum sRGBDecode)
-{
- mSamplerState.sRGBDecode = sRGBDecode;
-}
-
-GLenum Sampler::getSRGBDecode() const
-{
- return mSamplerState.sRGBDecode;
-}
-
const SamplerState &Sampler::getSamplerState() const
{
return mSamplerState;
}
-rx::SamplerImpl *Sampler::getImplementation() const
+const rx::SamplerImpl *Sampler::getImplementation() const
{
return mImpl;
}
+rx::SamplerImpl *Sampler::getImplementation()
+{
+ return mImpl;
+}
}
diff --git a/gfx/angle/src/libANGLE/Sampler.h b/gfx/angle/src/libANGLE/Sampler.h
index 156d61f66..f950bc04e 100755
--- a/gfx/angle/src/libANGLE/Sampler.h
+++ b/gfx/angle/src/libANGLE/Sampler.h
@@ -62,12 +62,10 @@ class Sampler final : public RefCountObject, public LabeledObject
void setCompareFunc(GLenum compareFunc);
GLenum getCompareFunc() const;
- void setSRGBDecode(GLenum sRGBDecode);
- GLenum getSRGBDecode() const;
-
const SamplerState &getSamplerState() const;
- rx::SamplerImpl *getImplementation() const;
+ const rx::SamplerImpl *getImplementation() const;
+ rx::SamplerImpl *getImplementation();
private:
rx::SamplerImpl *mImpl;
diff --git a/gfx/angle/src/libANGLE/Shader.cpp b/gfx/angle/src/libANGLE/Shader.cpp
index a4c68950b..904345d58 100755
--- a/gfx/angle/src/libANGLE/Shader.cpp
+++ b/gfx/angle/src/libANGLE/Shader.cpp
@@ -20,7 +20,6 @@
#include "libANGLE/renderer/GLImplFactory.h"
#include "libANGLE/renderer/ShaderImpl.h"
#include "libANGLE/ResourceManager.h"
-#include "libANGLE/Context.h"
namespace gl
{
@@ -228,7 +227,7 @@ void Shader::getTranslatedSourceWithDebugInfo(GLsizei bufSize, GLsizei *length,
getSourceImpl(debugInfo, bufSize, length, buffer);
}
-void Shader::compile(const Context *context)
+void Shader::compile(Compiler *compiler)
{
mState.mTranslatedSource.clear();
mInfoLog.clear();
@@ -239,23 +238,14 @@ void Shader::compile(const Context *context)
mState.mActiveAttributes.clear();
mState.mActiveOutputVariables.clear();
- Compiler *compiler = context->getCompiler();
ShHandle compilerHandle = compiler->getCompilerHandle(mState.mShaderType);
std::stringstream sourceStream;
std::string sourcePath;
- ShCompileOptions additionalOptions =
+ int additionalOptions =
mImplementation->prepareSourceAndReturnOptions(&sourceStream, &sourcePath);
- ShCompileOptions compileOptions = (SH_OBJECT_CODE | SH_VARIABLES | additionalOptions);
-
- // Add default options to WebGL shaders to prevent unexpected behavior during compilation.
- if (context->getExtensions().webglCompatibility)
- {
- compileOptions |= SH_LIMIT_CALL_STACK_DEPTH;
- compileOptions |= SH_LIMIT_EXPRESSION_COMPLEXITY;
- compileOptions |= SH_ENFORCE_PACKING_RESTRICTIONS;
- }
+ int compileOptions = (SH_OBJECT_CODE | SH_VARIABLES | additionalOptions);
// Some targets (eg D3D11 Feature Level 9_3 and below) do not support non-constant loop indexes
// in fragment shaders. Shader compilation will fail. To provide a better error message we can
@@ -276,17 +266,17 @@ void Shader::compile(const Context *context)
sourceCStrings.push_back(sourceString.c_str());
bool result =
- sh::Compile(compilerHandle, &sourceCStrings[0], sourceCStrings.size(), compileOptions);
+ ShCompile(compilerHandle, &sourceCStrings[0], sourceCStrings.size(), compileOptions);
if (!result)
{
- mInfoLog = sh::GetInfoLog(compilerHandle);
+ mInfoLog = ShGetInfoLog(compilerHandle);
TRACE("\n%s", mInfoLog.c_str());
mCompiled = false;
return;
}
- mState.mTranslatedSource = sh::GetObjectCode(compilerHandle);
+ mState.mTranslatedSource = ShGetObjectCode(compilerHandle);
#ifndef NDEBUG
// Prefix translated shader with commented out un-translated shader.
@@ -311,22 +301,22 @@ void Shader::compile(const Context *context)
#endif
// Gather the shader information
- mState.mShaderVersion = sh::GetShaderVersion(compilerHandle);
+ mState.mShaderVersion = ShGetShaderVersion(compilerHandle);
- mState.mVaryings = GetShaderVariables(sh::GetVaryings(compilerHandle));
- mState.mUniforms = GetShaderVariables(sh::GetUniforms(compilerHandle));
- mState.mInterfaceBlocks = GetShaderVariables(sh::GetInterfaceBlocks(compilerHandle));
+ mState.mVaryings = GetShaderVariables(ShGetVaryings(compilerHandle));
+ mState.mUniforms = GetShaderVariables(ShGetUniforms(compilerHandle));
+ mState.mInterfaceBlocks = GetShaderVariables(ShGetInterfaceBlocks(compilerHandle));
switch (mState.mShaderType)
{
case GL_COMPUTE_SHADER:
{
- mState.mLocalSize = sh::GetComputeShaderLocalGroupSize(compilerHandle);
+ mState.mLocalSize = ShGetComputeShaderLocalGroupSize(compilerHandle);
break;
}
case GL_VERTEX_SHADER:
{
- mState.mActiveAttributes = GetActiveShaderVariables(sh::GetAttributes(compilerHandle));
+ mState.mActiveAttributes = GetActiveShaderVariables(ShGetAttributes(compilerHandle));
break;
}
case GL_FRAGMENT_SHADER:
@@ -334,7 +324,7 @@ void Shader::compile(const Context *context)
// TODO(jmadill): Figure out why we only sort in the FS, and if we need to.
std::sort(mState.mVaryings.begin(), mState.mVaryings.end(), CompareShaderVar);
mState.mActiveOutputVariables =
- GetActiveShaderVariables(sh::GetOutputVariables(compilerHandle));
+ GetActiveShaderVariables(ShGetOutputVariables(compilerHandle));
break;
}
default:
diff --git a/gfx/angle/src/libANGLE/Shader.h b/gfx/angle/src/libANGLE/Shader.h
index ee42a80a3..d73400a80 100755
--- a/gfx/angle/src/libANGLE/Shader.h
+++ b/gfx/angle/src/libANGLE/Shader.h
@@ -36,7 +36,6 @@ class Compiler;
class ContextState;
struct Limitations;
class ResourceManager;
-class Context;
class ShaderState final : angle::NonCopyable
{
@@ -97,7 +96,7 @@ class Shader final : angle::NonCopyable, public LabeledObject
GLenum getType() const { return mType; }
GLuint getHandle() const;
- rx::ShaderImpl *getImplementation() const { return mImplementation; }
+ const rx::ShaderImpl *getImplementation() const { return mImplementation; }
void deleteSource();
void setSource(GLsizei count, const char *const *string, const GLint *length);
@@ -111,7 +110,7 @@ class Shader final : angle::NonCopyable, public LabeledObject
void getTranslatedSource(GLsizei bufSize, GLsizei *length, char *buffer) const;
void getTranslatedSourceWithDebugInfo(GLsizei bufSize, GLsizei *length, char *buffer) const;
- void compile(const Context *context);
+ void compile(Compiler *compiler);
bool isCompiled() const { return mCompiled; }
void addRef();
diff --git a/gfx/angle/src/libANGLE/State.cpp b/gfx/angle/src/libANGLE/State.cpp
index a56bb1c5d..6c3f04ded 100755
--- a/gfx/angle/src/libANGLE/State.cpp
+++ b/gfx/angle/src/libANGLE/State.cpp
@@ -50,7 +50,6 @@ State::State()
mLineWidth(0),
mGenerateMipmapHint(GL_NONE),
mFragmentShaderDerivativeHint(GL_NONE),
- mBindGeneratesResource(true),
mNearZ(0),
mFarZ(0),
mReadFramebuffer(nullptr),
@@ -60,8 +59,7 @@ State::State()
mActiveSampler(0),
mPrimitiveRestart(false),
mMultiSampling(false),
- mSampleAlphaToOne(false),
- mFramebufferSRGB(true)
+ mSampleAlphaToOne(false)
{
}
@@ -72,9 +70,8 @@ State::~State()
void State::initialize(const Caps &caps,
const Extensions &extensions,
- const Version &clientVersion,
- bool debug,
- bool bindGeneratesResource)
+ GLuint clientVersion,
+ bool debug)
{
mMaxDrawBuffers = caps.maxDrawBuffers;
mMaxCombinedTextureImageUnits = caps.maxCombinedTextureImageUnits;
@@ -140,8 +137,6 @@ void State::initialize(const Caps &caps,
mGenerateMipmapHint = GL_DONT_CARE;
mFragmentShaderDerivativeHint = GL_DONT_CARE;
- mBindGeneratesResource = bindGeneratesResource;
-
mLineWidth = 1.0f;
mViewport.x = 0;
@@ -164,7 +159,7 @@ void State::initialize(const Caps &caps,
mSamplerTextures[GL_TEXTURE_2D].resize(caps.maxCombinedTextureImageUnits);
mSamplerTextures[GL_TEXTURE_CUBE_MAP].resize(caps.maxCombinedTextureImageUnits);
- if (clientVersion >= Version(3, 0))
+ if (clientVersion >= 3)
{
// TODO: These could also be enabled via extension
mSamplerTextures[GL_TEXTURE_2D_ARRAY].resize(caps.maxCombinedTextureImageUnits);
@@ -638,9 +633,6 @@ void State::setEnableFeature(GLenum feature, bool enabled)
case GL_DEBUG_OUTPUT:
mDebug.setOutputEnabled(enabled);
break;
- case GL_FRAMEBUFFER_SRGB_EXT:
- setFramebufferSRGB(enabled);
- break;
default: UNREACHABLE();
}
}
@@ -666,10 +658,6 @@ bool State::getEnableFeature(GLenum feature) const
return mDebug.isOutputSynchronous();
case GL_DEBUG_OUTPUT:
return mDebug.isOutputEnabled();
- case GL_BIND_GENERATES_RESOURCE_CHROMIUM:
- return isBindGeneratesResourceEnabled();
- case GL_FRAMEBUFFER_SRGB_EXT:
- return getFramebufferSRGB();
default: UNREACHABLE(); return false;
}
}
@@ -700,11 +688,6 @@ void State::setFragmentShaderDerivativeHint(GLenum hint)
// Ignore for now. It is valid for implementations to ignore hint.
}
-bool State::isBindGeneratesResourceEnabled() const
-{
- return mBindGeneratesResource;
-}
-
void State::setViewportParams(GLint x, GLint y, GLsizei width, GLsizei height)
{
mViewport.x = x;
@@ -1462,17 +1445,6 @@ GLuint State::getPathStencilMask() const
return mPathStencilMask;
}
-void State::setFramebufferSRGB(bool sRGB)
-{
- mFramebufferSRGB = sRGB;
- mDirtyBits.set(DIRTY_BIT_FRAMEBUFFER_SRGB);
-}
-
-bool State::getFramebufferSRGB() const
-{
- return mFramebufferSRGB;
-}
-
void State::getBooleanv(GLenum pname, GLboolean *params)
{
switch (pname)
@@ -1514,12 +1486,6 @@ void State::getBooleanv(GLenum pname, GLboolean *params)
case GL_SAMPLE_ALPHA_TO_ONE_EXT:
*params = mSampleAlphaToOne;
break;
- case GL_BIND_GENERATES_RESOURCE_CHROMIUM:
- *params = isBindGeneratesResourceEnabled() ? GL_TRUE : GL_FALSE;
- break;
- case GL_FRAMEBUFFER_SRGB_EXT:
- *params = getFramebufferSRGB() ? GL_TRUE : GL_FALSE;
- break;
default:
UNREACHABLE();
break;
@@ -1764,11 +1730,6 @@ void State::getIntegerv(const ContextState &data, GLenum pname, GLint *params)
*params =
getSamplerTextureId(static_cast<unsigned int>(mActiveSampler), GL_TEXTURE_2D_ARRAY);
break;
- case GL_TEXTURE_BINDING_EXTERNAL_OES:
- ASSERT(mActiveSampler < mMaxCombinedTextureImageUnits);
- *params = getSamplerTextureId(static_cast<unsigned int>(mActiveSampler),
- GL_TEXTURE_EXTERNAL_OES);
- break;
case GL_UNIFORM_BUFFER_BINDING:
*params = mGenericUniformBuffer.id();
break;
diff --git a/gfx/angle/src/libANGLE/State.h b/gfx/angle/src/libANGLE/State.h
index 160a7abd8..e91affe53 100755
--- a/gfx/angle/src/libANGLE/State.h
+++ b/gfx/angle/src/libANGLE/State.h
@@ -21,7 +21,6 @@
#include "libANGLE/Sampler.h"
#include "libANGLE/Texture.h"
#include "libANGLE/TransformFeedback.h"
-#include "libANGLE/Version.h"
#include "libANGLE/VertexAttribute.h"
#include "libANGLE/angletypes.h"
@@ -42,9 +41,8 @@ class State : angle::NonCopyable
void initialize(const Caps &caps,
const Extensions &extensions,
- const Version &clientVersion,
- bool debug,
- bool bindGeneratesResource);
+ GLuint clientVersion,
+ bool debug);
void reset();
// State chunk getters
@@ -149,9 +147,6 @@ class State : angle::NonCopyable
void setGenerateMipmapHint(GLenum hint);
void setFragmentShaderDerivativeHint(GLenum hint);
- // GL_CHROMIUM_bind_generates_resource
- bool isBindGeneratesResourceEnabled() const;
-
// Viewport state setter/getter
void setViewportParams(GLint x, GLint y, GLsizei width, GLsizei height);
const Rectangle &getViewport() const;
@@ -291,10 +286,6 @@ class State : angle::NonCopyable
GLint getPathStencilRef() const;
GLuint getPathStencilMask() const;
- // GL_EXT_sRGB_write_control
- void setFramebufferSRGB(bool sRGB);
- bool getFramebufferSRGB() const;
-
// State query functions
void getBooleanv(GLenum pname, GLboolean *params);
void getFloatv(GLenum pname, GLfloat *params);
@@ -368,7 +359,6 @@ class State : angle::NonCopyable
DIRTY_BIT_PATH_RENDERING_MATRIX_MV, // CHROMIUM_path_rendering path model view matrix
DIRTY_BIT_PATH_RENDERING_MATRIX_PROJ, // CHROMIUM_path_rendering path projection matrix
DIRTY_BIT_PATH_RENDERING_STENCIL_STATE,
- DIRTY_BIT_FRAMEBUFFER_SRGB, // GL_EXT_sRGB_write_control
DIRTY_BIT_CURRENT_VALUE_0,
DIRTY_BIT_CURRENT_VALUE_MAX = DIRTY_BIT_CURRENT_VALUE_0 + MAX_VERTEX_ATTRIBS,
DIRTY_BIT_INVALID = DIRTY_BIT_CURRENT_VALUE_MAX,
@@ -428,8 +418,6 @@ class State : angle::NonCopyable
GLenum mGenerateMipmapHint;
GLenum mFragmentShaderDerivativeHint;
- bool mBindGeneratesResource;
-
Rectangle mViewport;
float mNearZ;
float mFarZ;
@@ -485,9 +473,6 @@ class State : angle::NonCopyable
GLint mPathStencilRef;
GLuint mPathStencilMask;
- // GL_EXT_sRGB_write_control
- bool mFramebufferSRGB;
-
DirtyBits mDirtyBits;
DirtyObjects mDirtyObjects;
};
diff --git a/gfx/angle/src/libANGLE/Surface.cpp b/gfx/angle/src/libANGLE/Surface.cpp
index 43e71df31..6028b7f67 100755
--- a/gfx/angle/src/libANGLE/Surface.cpp
+++ b/gfx/angle/src/libANGLE/Surface.cpp
@@ -138,11 +138,6 @@ Error Surface::swap()
return mImplementation->swap();
}
-Error Surface::swapWithDamage(EGLint *rects, EGLint n_rects)
-{
- return mImplementation->swapWithDamage(rects, n_rects);
-}
-
Error Surface::postSubBuffer(EGLint x, EGLint y, EGLint width, EGLint height)
{
return mImplementation->postSubBuffer(x, y, width, height);
@@ -211,23 +206,19 @@ EGLint Surface::getHeight() const
Error Surface::bindTexImage(gl::Texture *texture, EGLint buffer)
{
ASSERT(!mTexture.get());
- ANGLE_TRY(mImplementation->bindTexImage(texture, buffer));
texture->bindTexImageFromSurface(this);
mTexture.set(texture);
-
- return Error(EGL_SUCCESS);
+ return mImplementation->bindTexImage(texture, buffer);
}
Error Surface::releaseTexImage(EGLint buffer)
{
- ANGLE_TRY(mImplementation->releaseTexImage(buffer));
-
ASSERT(mTexture.get());
mTexture->releaseTexImageFromSurface();
mTexture.set(nullptr);
- return Error(EGL_SUCCESS);
+ return mImplementation->releaseTexImage(buffer);
}
void Surface::releaseTexImageFromTexture()
@@ -307,13 +298,12 @@ PbufferSurface::PbufferSurface(rx::EGLImplFactory *implFactory,
PbufferSurface::PbufferSurface(rx::EGLImplFactory *implFactory,
const Config *config,
- EGLenum buftype,
- EGLClientBuffer clientBuffer,
+ EGLClientBuffer shareHandle,
const AttributeMap &attribs)
: Surface(EGL_PBUFFER_BIT, config, attribs)
{
mImplementation =
- implFactory->createPbufferFromClientBuffer(mState, config, buftype, clientBuffer, attribs);
+ implFactory->createPbufferFromClientBuffer(mState, config, shareHandle, attribs);
}
PbufferSurface::~PbufferSurface()
diff --git a/gfx/angle/src/libANGLE/Surface.h b/gfx/angle/src/libANGLE/Surface.h
index fc6cc6ae7..4e60771af 100755
--- a/gfx/angle/src/libANGLE/Surface.h
+++ b/gfx/angle/src/libANGLE/Surface.h
@@ -55,7 +55,6 @@ class Surface : public gl::FramebufferAttachmentObject
Error initialize();
Error swap();
- Error swapWithDamage(EGLint *rects, EGLint n_rects);
Error postSubBuffer(EGLint x, EGLint y, EGLint width, EGLint height);
Error querySurfacePointerANGLE(EGLint attribute, void **value);
Error bindTexImage(gl::Texture *texture, EGLint buffer);
@@ -162,8 +161,7 @@ class PbufferSurface final : public Surface
const AttributeMap &attribs);
PbufferSurface(rx::EGLImplFactory *implFactory,
const Config *config,
- EGLenum buftype,
- EGLClientBuffer clientBuffer,
+ EGLClientBuffer shareHandle,
const AttributeMap &attribs);
~PbufferSurface() override;
};
diff --git a/gfx/angle/src/libANGLE/Surface_unittest.cpp b/gfx/angle/src/libANGLE/Surface_unittest.cpp
index 7f361eedd..e4fe782ee 100755
--- a/gfx/angle/src/libANGLE/Surface_unittest.cpp
+++ b/gfx/angle/src/libANGLE/Surface_unittest.cpp
@@ -31,7 +31,6 @@ class MockSurfaceImpl : public rx::SurfaceImpl
MOCK_METHOD0(initialize, egl::Error());
MOCK_METHOD1(createDefaultFramebuffer, rx::FramebufferImpl *(const gl::FramebufferState &data));
MOCK_METHOD0(swap, egl::Error());
- MOCK_METHOD2(swapWithDamage, egl::Error(EGLint *, EGLint));
MOCK_METHOD4(postSubBuffer, egl::Error(EGLint, EGLint, EGLint, EGLint));
MOCK_METHOD2(querySurfacePointerANGLE, egl::Error(EGLint, void**));
MOCK_METHOD2(bindTexImage, egl::Error(gl::Texture*, EGLint));
diff --git a/gfx/angle/src/libANGLE/Texture.cpp b/gfx/angle/src/libANGLE/Texture.cpp
index edba11bd4..ae46973d0 100755
--- a/gfx/angle/src/libANGLE/Texture.cpp
+++ b/gfx/angle/src/libANGLE/Texture.cpp
@@ -301,13 +301,9 @@ bool TextureState::computeSamplerCompleteness(const SamplerState &samplerState,
// depth and stencil format (see table 3.13), the value of TEXTURE_COMPARE_-
// MODE is NONE, and either the magnification filter is not NEAREST or the mini-
// fication filter is neither NEAREST nor NEAREST_MIPMAP_NEAREST.
- if (baseImageDesc.format.info->depthBits > 0 && data.getClientMajorVersion() >= 3)
+ if (baseImageDesc.format.info->depthBits > 0 && data.getClientMajorVersion() > 2)
{
- // Note: we restrict this validation to sized types. For the OES_depth_textures
- // extension, due to some underspecification problems, we must allow linear filtering
- // for legacy compatibility with WebGL 1.
- // See http://crbug.com/649200
- if (samplerState.compareMode == GL_NONE && baseImageDesc.format.sized)
+ if (samplerState.compareMode == GL_NONE)
{
if ((samplerState.minFilter != GL_NEAREST &&
samplerState.minFilter != GL_NEAREST_MIPMAP_NEAREST) ||
@@ -516,7 +512,6 @@ Texture::~Texture()
void Texture::setLabel(const std::string &label)
{
mLabel = label;
- mDirtyBits.set(DIRTY_BIT_LABEL);
}
const std::string &Texture::getLabel() const
@@ -532,7 +527,6 @@ GLenum Texture::getTarget() const
void Texture::setSwizzleRed(GLenum swizzleRed)
{
mState.mSwizzleState.swizzleRed = swizzleRed;
- mDirtyBits.set(DIRTY_BIT_SWIZZLE_RED);
}
GLenum Texture::getSwizzleRed() const
@@ -543,7 +537,6 @@ GLenum Texture::getSwizzleRed() const
void Texture::setSwizzleGreen(GLenum swizzleGreen)
{
mState.mSwizzleState.swizzleGreen = swizzleGreen;
- mDirtyBits.set(DIRTY_BIT_SWIZZLE_GREEN);
}
GLenum Texture::getSwizzleGreen() const
@@ -554,7 +547,6 @@ GLenum Texture::getSwizzleGreen() const
void Texture::setSwizzleBlue(GLenum swizzleBlue)
{
mState.mSwizzleState.swizzleBlue = swizzleBlue;
- mDirtyBits.set(DIRTY_BIT_SWIZZLE_BLUE);
}
GLenum Texture::getSwizzleBlue() const
@@ -565,7 +557,6 @@ GLenum Texture::getSwizzleBlue() const
void Texture::setSwizzleAlpha(GLenum swizzleAlpha)
{
mState.mSwizzleState.swizzleAlpha = swizzleAlpha;
- mDirtyBits.set(DIRTY_BIT_SWIZZLE_ALPHA);
}
GLenum Texture::getSwizzleAlpha() const
@@ -576,7 +567,6 @@ GLenum Texture::getSwizzleAlpha() const
void Texture::setMinFilter(GLenum minFilter)
{
mState.mSamplerState.minFilter = minFilter;
- mDirtyBits.set(DIRTY_BIT_MIN_FILTER);
}
GLenum Texture::getMinFilter() const
@@ -587,7 +577,6 @@ GLenum Texture::getMinFilter() const
void Texture::setMagFilter(GLenum magFilter)
{
mState.mSamplerState.magFilter = magFilter;
- mDirtyBits.set(DIRTY_BIT_MAG_FILTER);
}
GLenum Texture::getMagFilter() const
@@ -598,7 +587,6 @@ GLenum Texture::getMagFilter() const
void Texture::setWrapS(GLenum wrapS)
{
mState.mSamplerState.wrapS = wrapS;
- mDirtyBits.set(DIRTY_BIT_WRAP_S);
}
GLenum Texture::getWrapS() const
@@ -609,7 +597,6 @@ GLenum Texture::getWrapS() const
void Texture::setWrapT(GLenum wrapT)
{
mState.mSamplerState.wrapT = wrapT;
- mDirtyBits.set(DIRTY_BIT_WRAP_T);
}
GLenum Texture::getWrapT() const
@@ -620,7 +607,6 @@ GLenum Texture::getWrapT() const
void Texture::setWrapR(GLenum wrapR)
{
mState.mSamplerState.wrapR = wrapR;
- mDirtyBits.set(DIRTY_BIT_WRAP_R);
}
GLenum Texture::getWrapR() const
@@ -631,7 +617,6 @@ GLenum Texture::getWrapR() const
void Texture::setMaxAnisotropy(float maxAnisotropy)
{
mState.mSamplerState.maxAnisotropy = maxAnisotropy;
- mDirtyBits.set(DIRTY_BIT_MAX_ANISOTROPY);
}
float Texture::getMaxAnisotropy() const
@@ -642,7 +627,6 @@ float Texture::getMaxAnisotropy() const
void Texture::setMinLod(GLfloat minLod)
{
mState.mSamplerState.minLod = minLod;
- mDirtyBits.set(DIRTY_BIT_MIN_LOD);
}
GLfloat Texture::getMinLod() const
@@ -653,7 +637,6 @@ GLfloat Texture::getMinLod() const
void Texture::setMaxLod(GLfloat maxLod)
{
mState.mSamplerState.maxLod = maxLod;
- mDirtyBits.set(DIRTY_BIT_MAX_LOD);
}
GLfloat Texture::getMaxLod() const
@@ -664,7 +647,6 @@ GLfloat Texture::getMaxLod() const
void Texture::setCompareMode(GLenum compareMode)
{
mState.mSamplerState.compareMode = compareMode;
- mDirtyBits.set(DIRTY_BIT_COMPARE_MODE);
}
GLenum Texture::getCompareMode() const
@@ -675,7 +657,6 @@ GLenum Texture::getCompareMode() const
void Texture::setCompareFunc(GLenum compareFunc)
{
mState.mSamplerState.compareFunc = compareFunc;
- mDirtyBits.set(DIRTY_BIT_COMPARE_FUNC);
}
GLenum Texture::getCompareFunc() const
@@ -683,17 +664,6 @@ GLenum Texture::getCompareFunc() const
return mState.mSamplerState.compareFunc;
}
-void Texture::setSRGBDecode(GLenum sRGBDecode)
-{
- mState.mSamplerState.sRGBDecode = sRGBDecode;
- mDirtyBits.set(DIRTY_BIT_SRGB_DECODE);
-}
-
-GLenum Texture::getSRGBDecode() const
-{
- return mState.mSamplerState.sRGBDecode;
-}
-
const SamplerState &Texture::getSamplerState() const
{
return mState.mSamplerState;
@@ -704,7 +674,6 @@ void Texture::setBaseLevel(GLuint baseLevel)
if (mState.setBaseLevel(baseLevel))
{
mTexture->setBaseLevel(mState.getEffectiveBaseLevel());
- mDirtyBits.set(DIRTY_BIT_BASE_LEVEL);
}
}
@@ -716,7 +685,6 @@ GLuint Texture::getBaseLevel() const
void Texture::setMaxLevel(GLuint maxLevel)
{
mState.setMaxLevel(maxLevel);
- mDirtyBits.set(DIRTY_BIT_MAX_LEVEL);
}
GLuint Texture::getMaxLevel() const
@@ -737,7 +705,6 @@ GLuint Texture::getImmutableLevels() const
void Texture::setUsage(GLenum usage)
{
mState.mUsage = usage;
- mDirtyBits.set(DIRTY_BIT_USAGE);
}
GLenum Texture::getUsage() const
@@ -932,21 +899,6 @@ Error Texture::copySubTexture(const Offset &destOffset,
unpackUnmultiplyAlpha, source);
}
-Error Texture::copyCompressedTexture(const Texture *source)
-{
- // Release from previous calls to eglBindTexImage, to avoid calling the Impl after
- releaseTexImageInternal();
- orphanImages();
-
- ANGLE_TRY(mTexture->copyCompressedTexture(source));
-
- ASSERT(source->getTarget() != GL_TEXTURE_CUBE_MAP && getTarget() != GL_TEXTURE_CUBE_MAP);
- const auto &sourceDesc = source->mState.getImageDesc(source->getTarget(), 0);
- mState.setImageDesc(getTarget(), 0, sourceDesc);
-
- return NoError();
-}
-
Error Texture::setStorage(GLenum target, GLsizei levels, GLenum internalFormat, const Extents &size)
{
ASSERT(target == mState.mTarget);
@@ -961,14 +913,6 @@ Error Texture::setStorage(GLenum target, GLsizei levels, GLenum internalFormat,
mState.mImmutableLevels = static_cast<GLuint>(levels);
mState.clearImageDescs();
mState.setImageDescChain(0, static_cast<GLuint>(levels - 1), size, Format(internalFormat));
-
- // Changing the texture to immutable can trigger a change in the base and max levels:
- // GLES 3.0.4 section 3.8.10 pg 158:
- // "For immutable-format textures, levelbase is clamped to the range[0;levels],levelmax is then
- // clamped to the range[levelbase;levels].
- mDirtyBits.set(DIRTY_BIT_BASE_LEVEL);
- mDirtyBits.set(DIRTY_BIT_MAX_LEVEL);
-
mDirtyChannel.signal();
return NoError();
@@ -991,7 +935,6 @@ Error Texture::generateMipmap()
if (maxLevel > baseLevel)
{
- syncImplState();
ANGLE_TRY(mTexture->generateMipmap());
const ImageDesc &baseImageInfo =
@@ -1140,12 +1083,6 @@ GLuint Texture::getId() const
return id();
}
-void Texture::syncImplState()
-{
- mTexture->syncState(mDirtyBits);
- mDirtyBits.reset();
-}
-
rx::FramebufferAttachmentObjectImpl *Texture::getAttachmentImpl() const
{
return mTexture;
diff --git a/gfx/angle/src/libANGLE/Texture.h b/gfx/angle/src/libANGLE/Texture.h
index 583a69a7b..36cef52cd 100755
--- a/gfx/angle/src/libANGLE/Texture.h
+++ b/gfx/angle/src/libANGLE/Texture.h
@@ -217,9 +217,6 @@ class Texture final : public egl::ImageSibling,
void setCompareFunc(GLenum compareFunc);
GLenum getCompareFunc() const;
- void setSRGBDecode(GLenum sRGBDecode);
- GLenum getSRGBDecode() const;
-
const SamplerState &getSamplerState() const;
void setBaseLevel(GLuint baseLevel);
@@ -298,7 +295,6 @@ class Texture final : public egl::ImageSibling,
bool unpackPremultiplyAlpha,
bool unpackUnmultiplyAlpha,
const Texture *source);
- Error copyCompressedTexture(const Texture *source);
Error setStorage(GLenum target, GLsizei levels, GLenum internalFormat, const Extents &size);
@@ -309,7 +305,8 @@ class Texture final : public egl::ImageSibling,
egl::Surface *getBoundSurface() const;
egl::Stream *getBoundStream() const;
- rx::TextureImpl *getImplementation() const { return mTexture; }
+ rx::TextureImpl *getImplementation() { return mTexture; }
+ const rx::TextureImpl *getImplementation() const { return mTexture; }
// FramebufferAttachmentObject implementation
Extents getAttachmentSize(const FramebufferAttachment::Target &target) const override;
@@ -320,40 +317,6 @@ class Texture final : public egl::ImageSibling,
void onDetach() override;
GLuint getId() const override;
- enum DirtyBitType
- {
- // Sampler state
- DIRTY_BIT_MIN_FILTER,
- DIRTY_BIT_MAG_FILTER,
- DIRTY_BIT_WRAP_S,
- DIRTY_BIT_WRAP_T,
- DIRTY_BIT_WRAP_R,
- DIRTY_BIT_MAX_ANISOTROPY,
- DIRTY_BIT_MIN_LOD,
- DIRTY_BIT_MAX_LOD,
- DIRTY_BIT_COMPARE_MODE,
- DIRTY_BIT_COMPARE_FUNC,
- DIRTY_BIT_SRGB_DECODE,
-
- // Texture state
- DIRTY_BIT_SWIZZLE_RED,
- DIRTY_BIT_SWIZZLE_GREEN,
- DIRTY_BIT_SWIZZLE_BLUE,
- DIRTY_BIT_SWIZZLE_ALPHA,
- DIRTY_BIT_BASE_LEVEL,
- DIRTY_BIT_MAX_LEVEL,
-
- // Misc
- DIRTY_BIT_LABEL,
- DIRTY_BIT_USAGE,
-
- DIRTY_BIT_COUNT,
- };
- using DirtyBits = std::bitset<DIRTY_BIT_COUNT>;
-
- void syncImplState();
- bool hasAnyDirtyBit() const { return mDirtyBits.any(); }
-
private:
rx::FramebufferAttachmentObjectImpl *getAttachmentImpl() const override;
@@ -370,7 +333,6 @@ class Texture final : public egl::ImageSibling,
void releaseImageFromStream();
TextureState mState;
- DirtyBits mDirtyBits;
rx::TextureImpl *mTexture;
std::string mLabel;
diff --git a/gfx/angle/src/libANGLE/Thread.cpp b/gfx/angle/src/libANGLE/Thread.cpp
deleted file mode 100644
index 1abf449ce..000000000
--- a/gfx/angle/src/libANGLE/Thread.cpp
+++ /dev/null
@@ -1,88 +0,0 @@
-//
-// Copyright(c) 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-
-// Thread.cpp : Defines the Thread class which represents a global EGL thread.
-
-#include "libANGLE/Thread.h"
-
-#include "libANGLE/Context.h"
-#include "libANGLE/Error.h"
-
-namespace egl
-{
-Thread::Thread()
- : mError(EGL_SUCCESS),
- mAPI(EGL_OPENGL_ES_API),
- mDisplay(static_cast<egl::Display *>(EGL_NO_DISPLAY)),
- mDrawSurface(static_cast<egl::Surface *>(EGL_NO_SURFACE)),
- mReadSurface(static_cast<egl::Surface *>(EGL_NO_SURFACE)),
- mContext(static_cast<gl::Context *>(EGL_NO_CONTEXT))
-{
-}
-
-void Thread::setError(const Error &error)
-{
- mError = error.getCode();
-}
-
-EGLint Thread::getError() const
-{
- return mError;
-}
-
-void Thread::setAPI(EGLenum api)
-{
- mAPI = api;
-}
-
-EGLenum Thread::getAPI() const
-{
- return mAPI;
-}
-
-void Thread::setCurrent(Display *display,
- Surface *drawSurface,
- Surface *readSurface,
- gl::Context *context)
-{
- mDisplay = display;
- mDrawSurface = drawSurface;
- mReadSurface = readSurface;
- mContext = context;
-}
-
-Display *Thread::getDisplay() const
-{
- return mDisplay;
-}
-
-Surface *Thread::getDrawSurface() const
-{
- return mDrawSurface;
-}
-
-Surface *Thread::getReadSurface() const
-{
- return mReadSurface;
-}
-
-gl::Context *Thread::getContext() const
-{
- return mContext;
-}
-
-gl::Context *Thread::getValidContext() const
-{
- if (mContext && mContext->isContextLost())
- {
- mContext->handleError(gl::Error(GL_OUT_OF_MEMORY, "Context has been lost."));
- return nullptr;
- }
-
- return mContext;
-}
-
-} // namespace egl
diff --git a/gfx/angle/src/libANGLE/Thread.h b/gfx/angle/src/libANGLE/Thread.h
deleted file mode 100644
index 7a67dc62b..000000000
--- a/gfx/angle/src/libANGLE/Thread.h
+++ /dev/null
@@ -1,57 +0,0 @@
-//
-// Copyright(c) 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-
-// Thread.h : Defines the Thread class which represents a global EGL thread.
-
-#ifndef LIBANGLE_THREAD_H_
-#define LIBANGLE_THREAD_H_
-
-#include <EGL/egl.h>
-
-namespace gl
-{
-class Context;
-} // namespace gl
-
-namespace egl
-{
-class Error;
-class Display;
-class Surface;
-
-class Thread
-{
- public:
- Thread();
-
- void setError(const Error &error);
- EGLint getError() const;
-
- void setAPI(EGLenum api);
- EGLenum getAPI() const;
-
- void setCurrent(Display *display,
- Surface *drawSurface,
- Surface *readSurface,
- gl::Context *context);
- Display *getDisplay() const;
- Surface *getDrawSurface() const;
- Surface *getReadSurface() const;
- gl::Context *getContext() const;
- gl::Context *getValidContext() const;
-
- private:
- EGLint mError;
- EGLenum mAPI;
- egl::Display *mDisplay;
- egl::Surface *mDrawSurface;
- egl::Surface *mReadSurface;
- gl::Context *mContext;
-};
-
-} // namespace egl
-
-#endif // LIBANGLE_THREAD_H_
diff --git a/gfx/angle/src/libANGLE/TransformFeedback_unittest.cpp b/gfx/angle/src/libANGLE/TransformFeedback_unittest.cpp
index aa464d105..07a0959e2 100755
--- a/gfx/angle/src/libANGLE/TransformFeedback_unittest.cpp
+++ b/gfx/angle/src/libANGLE/TransformFeedback_unittest.cpp
@@ -101,16 +101,9 @@ TEST_F(TransformFeedbackTest, SideEffectsOfPauseAndResume)
TEST_F(TransformFeedbackTest, BufferBinding)
{
rx::MockBufferImpl *bufferImpl = new rx::MockBufferImpl;
+ gl::Buffer *buffer = new gl::Buffer(bufferImpl, 1);
EXPECT_CALL(*bufferImpl, destructor()).Times(1).RetiresOnSaturation();
- rx::MockGLFactory mockGLFactory;
- EXPECT_CALL(mockGLFactory, createBuffer(_))
- .Times(1)
- .WillOnce(Return(bufferImpl))
- .RetiresOnSaturation();
-
- gl::Buffer *buffer = new gl::Buffer(&mockGLFactory, 1);
-
static const size_t bindIndex = 0;
EXPECT_EQ(mFeedback->getIndexedBufferCount(), mCaps.maxTransformFeedbackSeparateAttributes);
diff --git a/gfx/angle/src/libANGLE/Uniform.cpp b/gfx/angle/src/libANGLE/Uniform.cpp
index 3caa3f5e2..9b4b47aa2 100755
--- a/gfx/angle/src/libANGLE/Uniform.cpp
+++ b/gfx/angle/src/libANGLE/Uniform.cpp
@@ -109,11 +109,6 @@ size_t LinkedUniform::getElementSize() const
return VariableExternalSize(type);
}
-size_t LinkedUniform::getElementComponents() const
-{
- return VariableComponentCount(type);
-}
-
uint8_t *LinkedUniform::getDataPtrToElement(size_t elementIndex)
{
ASSERT((!isArray() && elementIndex == 0) || (isArray() && elementIndex < arraySize));
diff --git a/gfx/angle/src/libANGLE/Uniform.h b/gfx/angle/src/libANGLE/Uniform.h
index 3b822e52b..4d7d24e3b 100755
--- a/gfx/angle/src/libANGLE/Uniform.h
+++ b/gfx/angle/src/libANGLE/Uniform.h
@@ -36,7 +36,6 @@ struct LinkedUniform : public sh::Uniform
bool isInDefaultBlock() const;
bool isField() const;
size_t getElementSize() const;
- size_t getElementComponents() const;
uint8_t *getDataPtrToElement(size_t elementIndex);
const uint8_t *getDataPtrToElement(size_t elementIndex) const;
diff --git a/gfx/angle/src/libANGLE/Version.h b/gfx/angle/src/libANGLE/Version.h
index 4c9730c7b..62985d0da 100755
--- a/gfx/angle/src/libANGLE/Version.h
+++ b/gfx/angle/src/libANGLE/Version.h
@@ -16,8 +16,8 @@ namespace gl
struct Version
{
- constexpr Version();
- constexpr Version(GLuint major, GLuint minor);
+ Version();
+ Version(GLuint major, GLuint minor);
GLuint major;
GLuint minor;
@@ -26,9 +26,8 @@ struct Version
bool operator==(const Version &a, const Version &b);
bool operator!=(const Version &a, const Version &b);
bool operator>=(const Version &a, const Version &b);
-bool operator<=(const Version &a, const Version &b);
bool operator<(const Version &a, const Version &b);
-bool operator>(const Version &a, const Version &b);
+
}
#include "Version.inl"
diff --git a/gfx/angle/src/libANGLE/Version.inl b/gfx/angle/src/libANGLE/Version.inl
index 495209720..427f6ca17 100755
--- a/gfx/angle/src/libANGLE/Version.inl
+++ b/gfx/angle/src/libANGLE/Version.inl
@@ -6,54 +6,38 @@
// Version.inl: Encapsulation of a GL version.
-#include <tuple>
-
namespace gl
{
-constexpr Version::Version()
+inline Version::Version()
: Version(0, 0)
{
}
-// Avoid conflicts with linux system defines
-#undef major
-#undef minor
-
-constexpr Version::Version(GLuint major_, GLuint minor_)
- : major(major_),
- minor(minor_)
+inline Version::Version(GLuint major_, GLuint minor_)
{
+ major = major_;
+ minor = minor_;
}
inline bool operator==(const Version &a, const Version &b)
{
- return std::tie(a.major, a.minor) == std::tie(b.major, b.minor);
+ return a.major == b.major && a.minor == b.minor;
}
inline bool operator!=(const Version &a, const Version &b)
{
- return std::tie(a.major, a.minor) != std::tie(b.major, b.minor);
+ return !(a == b);
}
inline bool operator>=(const Version &a, const Version &b)
{
- return std::tie(a.major, a.minor) >= std::tie(b.major, b.minor);
-}
-
-inline bool operator<=(const Version &a, const Version &b)
-{
- return std::tie(a.major, a.minor) <= std::tie(b.major, b.minor);
+ return a.major > b.major || (a.major == b.major && a.minor >= b.minor);
}
inline bool operator<(const Version &a, const Version &b)
{
- return std::tie(a.major, a.minor) < std::tie(b.major, b.minor);
-}
-
-inline bool operator>(const Version &a, const Version &b)
-{
- return std::tie(a.major, a.minor) > std::tie(b.major, b.minor);
+ return !(a >= b);
}
}
diff --git a/gfx/angle/src/libANGLE/VertexArray.h b/gfx/angle/src/libANGLE/VertexArray.h
index 65c62f1ba..da660e040 100755
--- a/gfx/angle/src/libANGLE/VertexArray.h
+++ b/gfx/angle/src/libANGLE/VertexArray.h
@@ -87,7 +87,8 @@ class VertexArray final : public LabeledObject
return mState.getVertexAttributes();
}
- rx::VertexArrayImpl *getImplementation() const { return mVertexArray; }
+ rx::VertexArrayImpl *getImplementation() { return mVertexArray; }
+ const rx::VertexArrayImpl *getImplementation() const { return mVertexArray; }
size_t getMaxEnabledAttribute() const { return mState.getMaxEnabledAttribute(); }
diff --git a/gfx/angle/src/libANGLE/VertexAttribute.h b/gfx/angle/src/libANGLE/VertexAttribute.h
index a8cc8573b..d1ee1b47a 100755
--- a/gfx/angle/src/libANGLE/VertexAttribute.h
+++ b/gfx/angle/src/libANGLE/VertexAttribute.h
@@ -39,6 +39,9 @@ struct VertexAttribute
bool operator==(const VertexAttribute &a, const VertexAttribute &b);
bool operator!=(const VertexAttribute &a, const VertexAttribute &b);
+template <typename T>
+T QuerySingleVertexAttributeParameter(const VertexAttribute& attrib, GLenum pname);
+
size_t ComputeVertexAttributeTypeSize(const VertexAttribute& attrib);
size_t ComputeVertexAttributeStride(const VertexAttribute& attrib);
size_t ComputeVertexAttributeElementCount(const VertexAttribute &attrib,
diff --git a/gfx/angle/src/libANGLE/VertexAttribute.inl b/gfx/angle/src/libANGLE/VertexAttribute.inl
index a1f88f317..0cd31f676 100755
--- a/gfx/angle/src/libANGLE/VertexAttribute.inl
+++ b/gfx/angle/src/libANGLE/VertexAttribute.inl
@@ -27,6 +27,33 @@ inline bool operator!=(const VertexAttribute &a, const VertexAttribute &b)
return !(a == b);
}
+template <typename T>
+T QuerySingleVertexAttributeParameter(const VertexAttribute& attrib, GLenum pname)
+{
+ switch (pname)
+ {
+ case GL_VERTEX_ATTRIB_ARRAY_ENABLED:
+ return static_cast<T>(attrib.enabled ? GL_TRUE : GL_FALSE);
+ case GL_VERTEX_ATTRIB_ARRAY_SIZE:
+ return static_cast<T>(attrib.size);
+ case GL_VERTEX_ATTRIB_ARRAY_STRIDE:
+ return static_cast<T>(attrib.stride);
+ case GL_VERTEX_ATTRIB_ARRAY_TYPE:
+ return static_cast<T>(attrib.type);
+ case GL_VERTEX_ATTRIB_ARRAY_NORMALIZED:
+ return static_cast<T>(attrib.normalized ? GL_TRUE : GL_FALSE);
+ case GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING:
+ return static_cast<T>(attrib.buffer.id());
+ case GL_VERTEX_ATTRIB_ARRAY_DIVISOR:
+ return static_cast<T>(attrib.divisor);
+ case GL_VERTEX_ATTRIB_ARRAY_INTEGER:
+ return static_cast<T>(attrib.pureInteger ? GL_TRUE : GL_FALSE);
+ default:
+ UNREACHABLE();
+ return static_cast<T>(0);
+ }
+}
+
inline VertexAttribCurrentValueData::VertexAttribCurrentValueData()
: Type(GL_FLOAT)
{
diff --git a/gfx/angle/src/libANGLE/Workarounds.h b/gfx/angle/src/libANGLE/Workarounds.h
deleted file mode 100644
index c5533c1c8..000000000
--- a/gfx/angle/src/libANGLE/Workarounds.h
+++ /dev/null
@@ -1,25 +0,0 @@
-//
-// Copyright (c) 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-
-// Workarounds.h: Workarounds for driver bugs and other behaviors seen
-// on all platforms.
-
-#ifndef LIBANGLE_WORKAROUNDS_H_
-#define LIBANGLE_WORKAROUNDS_H_
-
-namespace gl
-{
-
-struct Workarounds
-{
- // Force the context to be lost (via KHR_robustness) if a GL_OUT_OF_MEMORY error occurs. The
- // driver may be in an inconsistent state if this happens, and some users of ANGLE rely on this
- // notification to prevent further execution.
- bool loseContextOnOutOfMemory = false;
-};
-} // namespace gl
-
-#endif // LIBANGLE_WORKAROUNDS_H_
diff --git a/gfx/angle/src/libANGLE/angletypes.cpp b/gfx/angle/src/libANGLE/angletypes.cpp
index 70a3ae645..0cd69963e 100755
--- a/gfx/angle/src/libANGLE/angletypes.cpp
+++ b/gfx/angle/src/libANGLE/angletypes.cpp
@@ -49,8 +49,7 @@ SamplerState::SamplerState()
minLod(-1000.0f),
maxLod(1000.0f),
compareMode(GL_NONE),
- compareFunc(GL_LEQUAL),
- sRGBDecode(GL_DECODE_EXT)
+ compareFunc(GL_LEQUAL)
{
}
diff --git a/gfx/angle/src/libANGLE/angletypes.h b/gfx/angle/src/libANGLE/angletypes.h
index 4c345c3d0..e6923c8ad 100755
--- a/gfx/angle/src/libANGLE/angletypes.h
+++ b/gfx/angle/src/libANGLE/angletypes.h
@@ -192,46 +192,64 @@ struct SamplerState
GLenum compareMode;
GLenum compareFunc;
-
- GLenum sRGBDecode;
};
bool operator==(const SamplerState &a, const SamplerState &b);
bool operator!=(const SamplerState &a, const SamplerState &b);
-struct PixelStoreStateBase
+struct PixelUnpackState
{
BindingPointer<Buffer> pixelBuffer;
- GLint alignment = 4;
- GLint rowLength = 0;
- GLint skipRows = 0;
- GLint skipPixels = 0;
- GLint imageHeight = 0;
- GLint skipImages = 0;
-};
-
-struct PixelUnpackState : PixelStoreStateBase
-{
- PixelUnpackState() {}
+ GLint alignment;
+ GLint rowLength;
+ GLint skipRows;
+ GLint skipPixels;
+ GLint imageHeight;
+ GLint skipImages;
+
+ PixelUnpackState()
+ : alignment(4),
+ rowLength(0),
+ skipRows(0),
+ skipPixels(0),
+ imageHeight(0),
+ skipImages(0)
+ {}
PixelUnpackState(GLint alignmentIn, GLint rowLengthIn)
- {
- alignment = alignmentIn;
- rowLength = rowLengthIn;
- }
+ : alignment(alignmentIn),
+ rowLength(rowLengthIn),
+ skipRows(0),
+ skipPixels(0),
+ imageHeight(0),
+ skipImages(0)
+ {}
};
-struct PixelPackState : PixelStoreStateBase
+struct PixelPackState
{
- PixelPackState() {}
-
- PixelPackState(GLint alignmentIn, bool reverseRowOrderIn)
- : reverseRowOrder(reverseRowOrderIn)
- {
- alignment = alignmentIn;
- }
-
- bool reverseRowOrder = false;
+ BindingPointer<Buffer> pixelBuffer;
+ GLint alignment;
+ bool reverseRowOrder;
+ GLint rowLength;
+ GLint skipRows;
+ GLint skipPixels;
+
+ PixelPackState()
+ : alignment(4),
+ reverseRowOrder(false),
+ rowLength(0),
+ skipRows(0),
+ skipPixels(0)
+ {}
+
+ explicit PixelPackState(GLint alignmentIn, bool reverseRowOrderIn)
+ : alignment(alignmentIn),
+ reverseRowOrder(reverseRowOrderIn),
+ rowLength(0),
+ skipRows(0),
+ skipPixels(0)
+ {}
};
// Used in Program and VertexArray.
@@ -248,6 +266,17 @@ using ResourceMap = std::unordered_map<GLuint, ResourceT *>;
namespace rx
{
+enum VendorID : uint32_t
+{
+ VENDOR_ID_UNKNOWN = 0x0,
+ VENDOR_ID_AMD = 0x1002,
+ VENDOR_ID_INTEL = 0x8086,
+ VENDOR_ID_NVIDIA = 0x10DE,
+ // This is Qualcomm PCI Vendor ID.
+ // Android doesn't have a PCI bus, but all we need is a unique id.
+ VENDOR_ID_QUALCOMM = 0x5143,
+};
+
// A macro that determines whether an object has a given runtime type.
#if defined(__clang__)
#if __has_feature(cxx_rtti)
@@ -288,6 +317,12 @@ inline DestT *GetImplAs(SrcT *src)
return GetAs<DestT>(src->getImplementation());
}
+template <typename DestT, typename SrcT>
+inline const DestT *GetImplAs(const SrcT *src)
+{
+ return GetAs<const DestT>(src->getImplementation());
+}
+
}
#include "angletypes.inl"
diff --git a/gfx/angle/src/libANGLE/es3_copy_conversion_formats.json b/gfx/angle/src/libANGLE/es3_copy_conversion_formats.json
deleted file mode 100644
index 39b71fd93..000000000
--- a/gfx/angle/src/libANGLE/es3_copy_conversion_formats.json
+++ /dev/null
@@ -1,44 +0,0 @@
-{
- "From ES 3.0.1 spec, table 3.15":
- [
- [ "GL_ALPHA", "GL_RGBA" ],
- [ "GL_LUMINANCE", "GL_RED" ],
- [ "GL_LUMINANCE", "GL_RG" ],
- [ "GL_LUMINANCE", "GL_RGB" ],
- [ "GL_LUMINANCE", "GL_RGBA" ],
- [ "GL_LUMINANCE_ALPHA", "GL_RGBA" ],
- [ "GL_RED", "GL_RED" ],
- [ "GL_RED", "GL_RG" ],
- [ "GL_RED", "GL_RGB" ],
- [ "GL_RED", "GL_RGBA" ],
- [ "GL_RG", "GL_RG" ],
- [ "GL_RG", "GL_RGB" ],
- [ "GL_RG", "GL_RGBA" ],
- [ "GL_RGB", "GL_RGB" ],
- [ "GL_RGB", "GL_RGBA" ],
- [ "GL_RGBA", "GL_RGBA" ]
- ],
-
- "Necessary for ANGLE back-buffers":
- [
- [ "GL_ALPHA", "GL_BGRA_EXT" ],
- [ "GL_LUMINANCE", "GL_BGRA_EXT" ],
- [ "GL_LUMINANCE_ALPHA", "GL_BGRA_EXT" ],
- [ "GL_RED", "GL_BGRA_EXT" ],
- [ "GL_RG", "GL_BGRA_EXT" ],
- [ "GL_RGB", "GL_BGRA_EXT" ],
- [ "GL_RGBA", "GL_BGRA_EXT" ],
- [ "GL_BGRA_EXT", "GL_BGRA_EXT" ],
-
- [ "GL_RED_INTEGER", "GL_RED_INTEGER" ],
- [ "GL_RED_INTEGER", "GL_RG_INTEGER" ],
- [ "GL_RED_INTEGER", "GL_RGB_INTEGER" ],
- [ "GL_RED_INTEGER", "GL_RGBA_INTEGER" ],
- [ "GL_RG_INTEGER", "GL_RG_INTEGER" ],
- [ "GL_RG_INTEGER", "GL_RGB_INTEGER" ],
- [ "GL_RG_INTEGER", "GL_RGBA_INTEGER" ],
- [ "GL_RGB_INTEGER", "GL_RGB_INTEGER" ],
- [ "GL_RGB_INTEGER", "GL_RGBA_INTEGER" ],
- [ "GL_RGBA_INTEGER", "GL_RGBA_INTEGER" ]
- ]
-}
diff --git a/gfx/angle/src/libANGLE/es3_copy_conversion_table_autogen.cpp b/gfx/angle/src/libANGLE/es3_copy_conversion_table_autogen.cpp
deleted file mode 100644
index 3647445c5..000000000
--- a/gfx/angle/src/libANGLE/es3_copy_conversion_table_autogen.cpp
+++ /dev/null
@@ -1,171 +0,0 @@
-// GENERATED FILE - DO NOT EDIT.
-// Generated by gen_copy_conversion_table.py using data from es3_copy_conversion_formats.json.
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// format_map:
-// Determining the sized internal format from a (format,type) pair.
-// Also check es3 format combinations for validity.
-
-#include "angle_gl.h"
-#include "common/debug.h"
-
-namespace gl
-{
-
-bool ValidES3CopyConversion(GLenum textureFormat, GLenum framebufferFormat)
-{
- switch (textureFormat)
- {
- case GL_ALPHA:
- switch (framebufferFormat)
- {
- case GL_BGRA_EXT:
- case GL_RGBA:
- return true;
- default:
- break;
- }
- break;
-
- case GL_BGRA_EXT:
- switch (framebufferFormat)
- {
- case GL_BGRA_EXT:
- return true;
- default:
- break;
- }
- break;
-
- case GL_LUMINANCE:
- switch (framebufferFormat)
- {
- case GL_BGRA_EXT:
- case GL_RED:
- case GL_RG:
- case GL_RGB:
- case GL_RGBA:
- return true;
- default:
- break;
- }
- break;
-
- case GL_LUMINANCE_ALPHA:
- switch (framebufferFormat)
- {
- case GL_BGRA_EXT:
- case GL_RGBA:
- return true;
- default:
- break;
- }
- break;
-
- case GL_RED:
- switch (framebufferFormat)
- {
- case GL_BGRA_EXT:
- case GL_RED:
- case GL_RG:
- case GL_RGB:
- case GL_RGBA:
- return true;
- default:
- break;
- }
- break;
-
- case GL_RED_INTEGER:
- switch (framebufferFormat)
- {
- case GL_RED_INTEGER:
- case GL_RGBA_INTEGER:
- case GL_RGB_INTEGER:
- case GL_RG_INTEGER:
- return true;
- default:
- break;
- }
- break;
-
- case GL_RG:
- switch (framebufferFormat)
- {
- case GL_BGRA_EXT:
- case GL_RG:
- case GL_RGB:
- case GL_RGBA:
- return true;
- default:
- break;
- }
- break;
-
- case GL_RGB:
- switch (framebufferFormat)
- {
- case GL_BGRA_EXT:
- case GL_RGB:
- case GL_RGBA:
- return true;
- default:
- break;
- }
- break;
-
- case GL_RGBA:
- switch (framebufferFormat)
- {
- case GL_BGRA_EXT:
- case GL_RGBA:
- return true;
- default:
- break;
- }
- break;
-
- case GL_RGBA_INTEGER:
- switch (framebufferFormat)
- {
- case GL_RGBA_INTEGER:
- return true;
- default:
- break;
- }
- break;
-
- case GL_RGB_INTEGER:
- switch (framebufferFormat)
- {
- case GL_RGBA_INTEGER:
- case GL_RGB_INTEGER:
- return true;
- default:
- break;
- }
- break;
-
- case GL_RG_INTEGER:
- switch (framebufferFormat)
- {
- case GL_RGBA_INTEGER:
- case GL_RGB_INTEGER:
- case GL_RG_INTEGER:
- return true;
- default:
- break;
- }
- break;
-
- default:
- break;
- }
-
- return false;
-}
-
-} // namespace gl
diff --git a/gfx/angle/src/libANGLE/es3_format_type_combinations.json b/gfx/angle/src/libANGLE/es3_format_type_combinations.json
deleted file mode 100644
index fb12242e7..000000000
--- a/gfx/angle/src/libANGLE/es3_format_type_combinations.json
+++ /dev/null
@@ -1,171 +0,0 @@
-{
- "Format combinations from ES 3.0.1 spec, table 3.2":
- [
- [ "GL_RGBA8", "GL_RGBA", "GL_UNSIGNED_BYTE" ],
- [ "GL_RGB5_A1", "GL_RGBA", "GL_UNSIGNED_BYTE" ],
- [ "GL_RGBA4", "GL_RGBA", "GL_UNSIGNED_BYTE" ],
- [ "GL_SRGB8_ALPHA8", "GL_RGBA", "GL_UNSIGNED_BYTE" ],
- [ "GL_RGBA8_SNORM", "GL_RGBA", "GL_BYTE" ],
- [ "GL_RGBA4", "GL_RGBA", "GL_UNSIGNED_SHORT_4_4_4_4" ],
- [ "GL_RGB10_A2", "GL_RGBA", "GL_UNSIGNED_INT_2_10_10_10_REV" ],
- [ "GL_RGB5_A1", "GL_RGBA", "GL_UNSIGNED_INT_2_10_10_10_REV" ],
- [ "GL_RGB5_A1", "GL_RGBA", "GL_UNSIGNED_SHORT_5_5_5_1" ],
- [ "GL_RGBA16F", "GL_RGBA", "GL_HALF_FLOAT" ],
- [ "GL_RGBA16F", "GL_RGBA", "GL_HALF_FLOAT_OES" ],
- [ "GL_RGBA32F", "GL_RGBA", "GL_FLOAT" ],
- [ "GL_RGBA16F", "GL_RGBA", "GL_FLOAT" ],
- [ "GL_RGBA8UI", "GL_RGBA_INTEGER", "GL_UNSIGNED_BYTE" ],
- [ "GL_RGBA8I", "GL_RGBA_INTEGER", "GL_BYTE" ],
- [ "GL_RGBA16UI", "GL_RGBA_INTEGER", "GL_UNSIGNED_SHORT" ],
- [ "GL_RGBA16I", "GL_RGBA_INTEGER", "GL_SHORT" ],
- [ "GL_RGBA32UI", "GL_RGBA_INTEGER", "GL_UNSIGNED_INT" ],
- [ "GL_RGBA32I", "GL_RGBA_INTEGER", "GL_INT" ],
- [ "GL_RGB10_A2UI", "GL_RGBA_INTEGER", "GL_UNSIGNED_INT_2_10_10_10_REV" ],
- [ "GL_RGB8", "GL_RGB", "GL_UNSIGNED_BYTE" ],
- [ "GL_RGB565", "GL_RGB", "GL_UNSIGNED_BYTE" ],
- [ "GL_SRGB8", "GL_RGB", "GL_UNSIGNED_BYTE" ],
- [ "GL_RGB8_SNORM", "GL_RGB", "GL_BYTE" ],
- [ "GL_RGB565", "GL_RGB", "GL_UNSIGNED_SHORT_5_6_5" ],
- [ "GL_R11F_G11F_B10F", "GL_RGB", "GL_UNSIGNED_INT_10F_11F_11F_REV" ],
- [ "GL_RGB9_E5", "GL_RGB", "GL_UNSIGNED_INT_5_9_9_9_REV" ],
- [ "GL_RGB16F", "GL_RGB", "GL_HALF_FLOAT" ],
- [ "GL_RGB16F", "GL_RGB", "GL_HALF_FLOAT_OES" ],
- [ "GL_R11F_G11F_B10F", "GL_RGB", "GL_HALF_FLOAT" ],
- [ "GL_R11F_G11F_B10F", "GL_RGB", "GL_HALF_FLOAT_OES" ],
- [ "GL_RGB9_E5", "GL_RGB", "GL_HALF_FLOAT" ],
- [ "GL_RGB9_E5", "GL_RGB", "GL_HALF_FLOAT_OES" ],
- [ "GL_RGB32F", "GL_RGB", "GL_FLOAT" ],
- [ "GL_RGB16F", "GL_RGB", "GL_FLOAT" ],
- [ "GL_R11F_G11F_B10F", "GL_RGB", "GL_FLOAT" ],
- [ "GL_RGB9_E5", "GL_RGB", "GL_FLOAT" ],
- [ "GL_RGB8UI", "GL_RGB_INTEGER", "GL_UNSIGNED_BYTE" ],
- [ "GL_RGB8I", "GL_RGB_INTEGER", "GL_BYTE" ],
- [ "GL_RGB16UI", "GL_RGB_INTEGER", "GL_UNSIGNED_SHORT" ],
- [ "GL_RGB16I", "GL_RGB_INTEGER", "GL_SHORT" ],
- [ "GL_RGB32UI", "GL_RGB_INTEGER", "GL_UNSIGNED_INT" ],
- [ "GL_RGB32I", "GL_RGB_INTEGER", "GL_INT" ],
- [ "GL_RG8", "GL_RG", "GL_UNSIGNED_BYTE" ],
- [ "GL_RG8_SNORM", "GL_RG", "GL_BYTE" ],
- [ "GL_RG16F", "GL_RG", "GL_HALF_FLOAT" ],
- [ "GL_RG16F", "GL_RG", "GL_HALF_FLOAT_OES" ],
- [ "GL_RG32F", "GL_RG", "GL_FLOAT" ],
- [ "GL_RG16F", "GL_RG", "GL_FLOAT" ],
- [ "GL_RG8UI", "GL_RG_INTEGER", "GL_UNSIGNED_BYTE" ],
- [ "GL_RG8I", "GL_RG_INTEGER", "GL_BYTE" ],
- [ "GL_RG16UI", "GL_RG_INTEGER", "GL_UNSIGNED_SHORT" ],
- [ "GL_RG16I", "GL_RG_INTEGER", "GL_SHORT" ],
- [ "GL_RG32UI", "GL_RG_INTEGER", "GL_UNSIGNED_INT" ],
- [ "GL_RG32I", "GL_RG_INTEGER", "GL_INT" ],
- [ "GL_R8", "GL_RED", "GL_UNSIGNED_BYTE" ],
- [ "GL_R8_SNORM", "GL_RED", "GL_BYTE" ],
- [ "GL_R16F", "GL_RED", "GL_HALF_FLOAT" ],
- [ "GL_R16F", "GL_RED", "GL_HALF_FLOAT_OES" ],
- [ "GL_R32F", "GL_RED", "GL_FLOAT" ],
- [ "GL_R16F", "GL_RED", "GL_FLOAT" ],
- [ "GL_R8UI", "GL_RED_INTEGER", "GL_UNSIGNED_BYTE" ],
- [ "GL_R8I", "GL_RED_INTEGER", "GL_BYTE" ],
- [ "GL_R16UI", "GL_RED_INTEGER", "GL_UNSIGNED_SHORT" ],
- [ "GL_R16I", "GL_RED_INTEGER", "GL_SHORT" ],
- [ "GL_R32UI", "GL_RED_INTEGER", "GL_UNSIGNED_INT" ],
- [ "GL_R32I", "GL_RED_INTEGER", "GL_INT" ]
- ],
- "Unsized formats":
- [
- [ "GL_RGBA", "GL_RGBA", "GL_UNSIGNED_BYTE" ],
- [ "GL_RGBA", "GL_RGBA", "GL_UNSIGNED_SHORT_4_4_4_4" ],
- [ "GL_RGBA", "GL_RGBA", "GL_UNSIGNED_SHORT_5_5_5_1" ],
- [ "GL_RGB", "GL_RGB", "GL_UNSIGNED_BYTE" ],
- [ "GL_RGB", "GL_RGB", "GL_UNSIGNED_SHORT_5_6_5" ],
- [ "GL_LUMINANCE_ALPHA", "GL_LUMINANCE_ALPHA", "GL_UNSIGNED_BYTE" ],
- [ "GL_LUMINANCE", "GL_LUMINANCE", "GL_UNSIGNED_BYTE" ],
- [ "GL_ALPHA", "GL_ALPHA", "GL_UNSIGNED_BYTE" ],
- [ "GL_SRGB_ALPHA_EXT", "GL_SRGB_ALPHA_EXT", "GL_UNSIGNED_BYTE" ],
- [ "GL_SRGB_EXT", "GL_SRGB_EXT", "GL_UNSIGNED_BYTE" ],
- [ "GL_RG", "GL_RG", "GL_UNSIGNED_BYTE" ],
- [ "GL_RG", "GL_RG", "GL_FLOAT" ],
- [ "GL_RG", "GL_RG", "GL_HALF_FLOAT" ],
- [ "GL_RG", "GL_RG", "GL_HALF_FLOAT_OES" ],
- [ "GL_RED", "GL_RED", "GL_UNSIGNED_BYTE" ],
- [ "GL_RED", "GL_RED", "GL_FLOAT" ],
- [ "GL_RED", "GL_RED", "GL_HALF_FLOAT" ],
- [ "GL_RED", "GL_RED", "GL_HALF_FLOAT_OES" ],
- [ "GL_DEPTH_STENCIL", "GL_DEPTH_STENCIL", "GL_UNSIGNED_INT_24_8" ]
- ],
- "Depth stencil formats":
- [
- [ "GL_DEPTH_COMPONENT16", "GL_DEPTH_COMPONENT", "GL_UNSIGNED_SHORT" ],
- [ "GL_DEPTH_COMPONENT24", "GL_DEPTH_COMPONENT", "GL_UNSIGNED_INT" ],
- [ "GL_DEPTH_COMPONENT16", "GL_DEPTH_COMPONENT", "GL_UNSIGNED_INT" ],
- [ "GL_DEPTH_COMPONENT32F", "GL_DEPTH_COMPONENT", "GL_FLOAT" ],
- [ "GL_DEPTH24_STENCIL8", "GL_DEPTH_STENCIL", "GL_UNSIGNED_INT_24_8" ],
- [ "GL_DEPTH32F_STENCIL8", "GL_DEPTH_STENCIL", "GL_FLOAT_32_UNSIGNED_INT_24_8_REV" ]
- ],
- "From GL_EXT_sRGB":
- [
- [ "GL_SRGB8_ALPHA8_EXT", "GL_SRGB_ALPHA_EXT", "GL_UNSIGNED_BYTE" ],
- [ "GL_SRGB8", "GL_SRGB_EXT", "GL_UNSIGNED_BYTE" ]
- ],
- "From GL_OES_texture_float":
- [
- [ "GL_RGBA", "GL_RGBA", "GL_FLOAT" ],
- [ "GL_RGB", "GL_RGB", "GL_FLOAT" ],
- [ "GL_LUMINANCE_ALPHA", "GL_LUMINANCE_ALPHA", "GL_FLOAT" ],
- [ "GL_LUMINANCE", "GL_LUMINANCE", "GL_FLOAT" ],
- [ "GL_ALPHA", "GL_ALPHA", "GL_FLOAT" ]
- ],
- "From GL_OES_texture_half_float":
- [
- [ "GL_RGBA", "GL_RGBA", "GL_HALF_FLOAT_OES" ],
- [ "GL_RGB", "GL_RGB", "GL_HALF_FLOAT_OES" ],
- [ "GL_LUMINANCE_ALPHA", "GL_LUMINANCE_ALPHA", "GL_HALF_FLOAT" ],
- [ "GL_LUMINANCE_ALPHA", "GL_LUMINANCE_ALPHA", "GL_HALF_FLOAT_OES" ],
- [ "GL_LUMINANCE", "GL_LUMINANCE", "GL_HALF_FLOAT" ],
- [ "GL_LUMINANCE", "GL_LUMINANCE", "GL_HALF_FLOAT_OES" ],
- [ "GL_ALPHA", "GL_ALPHA", "GL_HALF_FLOAT" ],
- [ "GL_ALPHA", "GL_ALPHA", "GL_HALF_FLOAT_OES" ]
- ],
- "From GL_EXT_texture_format_BGRA8888":
- [
- [ "GL_BGRA_EXT", "GL_BGRA_EXT", "GL_UNSIGNED_BYTE" ]
- ],
- "From GL_EXT_texture_storage":
- [
- [ "GL_ALPHA8_EXT", "GL_ALPHA", "GL_UNSIGNED_BYTE" ],
- [ "GL_LUMINANCE8_EXT", "GL_LUMINANCE", "GL_UNSIGNED_BYTE" ],
- [ "GL_LUMINANCE8_ALPHA8_EXT", "GL_LUMINANCE_ALPHA", "GL_UNSIGNED_BYTE" ],
- [ "GL_ALPHA32F_EXT", "GL_ALPHA", "GL_FLOAT" ],
- [ "GL_LUMINANCE32F_EXT", "GL_LUMINANCE", "GL_FLOAT" ],
- [ "GL_LUMINANCE_ALPHA32F_EXT", "GL_LUMINANCE_ALPHA", "GL_FLOAT" ],
- [ "GL_ALPHA16F_EXT", "GL_ALPHA", "GL_HALF_FLOAT" ],
- [ "GL_ALPHA16F_EXT", "GL_ALPHA", "GL_HALF_FLOAT_OES" ],
- [ "GL_LUMINANCE16F_EXT", "GL_LUMINANCE", "GL_HALF_FLOAT" ],
- [ "GL_LUMINANCE16F_EXT", "GL_LUMINANCE", "GL_HALF_FLOAT_OES" ],
- [ "GL_LUMINANCE_ALPHA16F_EXT", "GL_LUMINANCE_ALPHA", "GL_HALF_FLOAT" ],
- [ "GL_LUMINANCE_ALPHA16F_EXT", "GL_LUMINANCE_ALPHA", "GL_HALF_FLOAT_OES" ]
- ],
- "From GL_EXT_texture_storage and GL_EXT_texture_format_BGRA8888":
- [
- [ "GL_BGRA8_EXT", "GL_BGRA_EXT", "GL_UNSIGNED_BYTE" ],
- [ "GL_BGRA4_ANGLEX", "GL_BGRA_EXT", "GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT" ],
- [ "GL_BGRA4_ANGLEX", "GL_BGRA_EXT", "GL_UNSIGNED_BYTE" ],
- [ "GL_BGR5_A1_ANGLEX", "GL_BGRA_EXT", "GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT" ],
- [ "GL_BGR5_A1_ANGLEX", "GL_BGRA_EXT", "GL_UNSIGNED_BYTE" ]
- ],
- "From GL_ANGLE_depth_texture and OES_depth_texture":
- [
- [ "GL_DEPTH_COMPONENT32_OES", "GL_DEPTH_COMPONENT", "GL_UNSIGNED_INT_24_8" ],
- [ "GL_DEPTH_COMPONENT", "GL_DEPTH_COMPONENT", "GL_UNSIGNED_SHORT" ],
- [ "GL_DEPTH_COMPONENT", "GL_DEPTH_COMPONENT", "GL_UNSIGNED_INT" ]
- ],
- "From GL_EXT_texture_norm16":
- [
- [ "GL_R16_EXT", "GL_RED", "GL_UNSIGNED_SHORT" ],
- [ "GL_RG16_EXT", "GL_RG", "GL_UNSIGNED_SHORT" ],
- [ "GL_RGB16_EXT", "GL_RGB", "GL_UNSIGNED_SHORT" ],
- [ "GL_RGBA16_EXT", "GL_RGBA", "GL_UNSIGNED_SHORT" ],
- [ "GL_R16_SNORM_EXT", "GL_RED", "GL_SHORT" ],
- [ "GL_RG16_SNORM_EXT", "GL_RG", "GL_SHORT" ],
- [ "GL_RGB16_SNORM_EXT", "GL_RGB", "GL_SHORT" ],
- [ "GL_RGBA16_SNORM_EXT", "GL_RGBA", "GL_SHORT" ]
- ]
-}
diff --git a/gfx/angle/src/libANGLE/format_map_autogen.cpp b/gfx/angle/src/libANGLE/format_map_autogen.cpp
deleted file mode 100644
index 707d38426..000000000
--- a/gfx/angle/src/libANGLE/format_map_autogen.cpp
+++ /dev/null
@@ -1,1530 +0,0 @@
-// GENERATED FILE - DO NOT EDIT.
-// Generated by gen_format_map.py using data from format_map_data.json.
-// ES3 format info from es3_format_type_combinations.json.
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// format_map:
-// Determining the sized internal format from a (format,type) pair.
-// Also check es3 format combinations for validity.
-
-#include "angle_gl.h"
-#include "common/debug.h"
-
-namespace gl
-{
-
-GLenum GetSizedFormatInternal(GLenum format, GLenum type)
-{
- switch (format)
- {
- case GL_ALPHA:
- switch (type)
- {
- case GL_FLOAT:
- return GL_ALPHA32F_EXT;
- case GL_HALF_FLOAT:
- return GL_ALPHA16F_EXT;
- case GL_HALF_FLOAT_OES:
- return GL_ALPHA16F_EXT;
- case GL_UNSIGNED_BYTE:
- return GL_ALPHA8_EXT;
- default:
- break;
- }
- break;
-
- case GL_BGRA_EXT:
- switch (type)
- {
- case GL_UNSIGNED_BYTE:
- return GL_BGRA8_EXT;
- case GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT:
- return GL_BGR5_A1_ANGLEX;
- case GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT:
- return GL_BGRA4_ANGLEX;
- case GL_UNSIGNED_SHORT_5_6_5:
- return GL_BGR565_ANGLEX;
- default:
- break;
- }
- break;
-
- case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
- switch (type)
- {
- case GL_UNSIGNED_BYTE:
- return GL_COMPRESSED_RGBA_S3TC_DXT1_EXT;
- default:
- break;
- }
- break;
-
- case GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE:
- switch (type)
- {
- case GL_UNSIGNED_BYTE:
- return GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE;
- default:
- break;
- }
- break;
-
- case GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE:
- switch (type)
- {
- case GL_UNSIGNED_BYTE:
- return GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE;
- default:
- break;
- }
- break;
-
- case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
- switch (type)
- {
- case GL_UNSIGNED_BYTE:
- return GL_COMPRESSED_RGB_S3TC_DXT1_EXT;
- default:
- break;
- }
- break;
-
- case GL_DEPTH_COMPONENT:
- switch (type)
- {
- case GL_FLOAT:
- return GL_DEPTH_COMPONENT32F;
- case GL_UNSIGNED_INT:
- return GL_DEPTH_COMPONENT32_OES;
- case GL_UNSIGNED_SHORT:
- return GL_DEPTH_COMPONENT16;
- default:
- break;
- }
- break;
-
- case GL_DEPTH_STENCIL:
- switch (type)
- {
- case GL_FLOAT_32_UNSIGNED_INT_24_8_REV:
- return GL_DEPTH32F_STENCIL8;
- case GL_UNSIGNED_INT_24_8:
- return GL_DEPTH24_STENCIL8;
- default:
- break;
- }
- break;
-
- case GL_LUMINANCE:
- switch (type)
- {
- case GL_FLOAT:
- return GL_LUMINANCE32F_EXT;
- case GL_HALF_FLOAT:
- return GL_LUMINANCE16F_EXT;
- case GL_HALF_FLOAT_OES:
- return GL_LUMINANCE16F_EXT;
- case GL_UNSIGNED_BYTE:
- return GL_LUMINANCE8_EXT;
- default:
- break;
- }
- break;
-
- case GL_LUMINANCE_ALPHA:
- switch (type)
- {
- case GL_FLOAT:
- return GL_LUMINANCE_ALPHA32F_EXT;
- case GL_HALF_FLOAT:
- return GL_LUMINANCE_ALPHA16F_EXT;
- case GL_HALF_FLOAT_OES:
- return GL_LUMINANCE_ALPHA16F_EXT;
- case GL_UNSIGNED_BYTE:
- return GL_LUMINANCE8_ALPHA8_EXT;
- default:
- break;
- }
- break;
-
- case GL_RED:
- switch (type)
- {
- case GL_BYTE:
- return GL_R8_SNORM;
- case GL_FLOAT:
- return GL_R32F;
- case GL_HALF_FLOAT:
- return GL_R16F;
- case GL_HALF_FLOAT_OES:
- return GL_R16F;
- case GL_SHORT:
- return GL_R16_SNORM_EXT;
- case GL_UNSIGNED_BYTE:
- return GL_R8;
- case GL_UNSIGNED_SHORT:
- return GL_R16_EXT;
- default:
- break;
- }
- break;
-
- case GL_RED_INTEGER:
- switch (type)
- {
- case GL_BYTE:
- return GL_R8I;
- case GL_INT:
- return GL_R32I;
- case GL_SHORT:
- return GL_R16I;
- case GL_UNSIGNED_BYTE:
- return GL_R8UI;
- case GL_UNSIGNED_INT:
- return GL_R32UI;
- case GL_UNSIGNED_SHORT:
- return GL_R16UI;
- default:
- break;
- }
- break;
-
- case GL_RG:
- switch (type)
- {
- case GL_BYTE:
- return GL_RG8_SNORM;
- case GL_FLOAT:
- return GL_RG32F;
- case GL_HALF_FLOAT:
- return GL_RG16F;
- case GL_HALF_FLOAT_OES:
- return GL_RG16F;
- case GL_SHORT:
- return GL_RG16_SNORM_EXT;
- case GL_UNSIGNED_BYTE:
- return GL_RG8;
- case GL_UNSIGNED_SHORT:
- return GL_RG16_EXT;
- default:
- break;
- }
- break;
-
- case GL_RGB:
- switch (type)
- {
- case GL_BYTE:
- return GL_RGB8_SNORM;
- case GL_FLOAT:
- return GL_RGB32F;
- case GL_HALF_FLOAT:
- return GL_RGB16F;
- case GL_HALF_FLOAT_OES:
- return GL_RGB16F;
- case GL_SHORT:
- return GL_RGB16_SNORM_EXT;
- case GL_UNSIGNED_BYTE:
- return GL_RGB8;
- case GL_UNSIGNED_INT_10F_11F_11F_REV:
- return GL_R11F_G11F_B10F;
- case GL_UNSIGNED_INT_5_9_9_9_REV:
- return GL_RGB9_E5;
- case GL_UNSIGNED_SHORT:
- return GL_RGB16_EXT;
- case GL_UNSIGNED_SHORT_5_6_5:
- return GL_RGB565;
- default:
- break;
- }
- break;
-
- case GL_RGBA:
- switch (type)
- {
- case GL_BYTE:
- return GL_RGBA8_SNORM;
- case GL_FLOAT:
- return GL_RGBA32F;
- case GL_HALF_FLOAT:
- return GL_RGBA16F;
- case GL_HALF_FLOAT_OES:
- return GL_RGBA16F;
- case GL_SHORT:
- return GL_RGBA16_SNORM_EXT;
- case GL_UNSIGNED_BYTE:
- return GL_RGBA8;
- case GL_UNSIGNED_INT_2_10_10_10_REV:
- return GL_RGB10_A2;
- case GL_UNSIGNED_SHORT:
- return GL_RGBA16_EXT;
- case GL_UNSIGNED_SHORT_4_4_4_4:
- return GL_RGBA4;
- case GL_UNSIGNED_SHORT_5_5_5_1:
- return GL_RGB5_A1;
- default:
- break;
- }
- break;
-
- case GL_RGBA_INTEGER:
- switch (type)
- {
- case GL_BYTE:
- return GL_RGBA8I;
- case GL_INT:
- return GL_RGBA32I;
- case GL_SHORT:
- return GL_RGBA16I;
- case GL_UNSIGNED_BYTE:
- return GL_RGBA8UI;
- case GL_UNSIGNED_INT:
- return GL_RGBA32UI;
- case GL_UNSIGNED_INT_2_10_10_10_REV:
- return GL_RGB10_A2UI;
- case GL_UNSIGNED_SHORT:
- return GL_RGBA16UI;
- default:
- break;
- }
- break;
-
- case GL_RGB_INTEGER:
- switch (type)
- {
- case GL_BYTE:
- return GL_RGB8I;
- case GL_INT:
- return GL_RGB32I;
- case GL_SHORT:
- return GL_RGB16I;
- case GL_UNSIGNED_BYTE:
- return GL_RGB8UI;
- case GL_UNSIGNED_INT:
- return GL_RGB32UI;
- case GL_UNSIGNED_SHORT:
- return GL_RGB16UI;
- default:
- break;
- }
- break;
-
- case GL_RG_INTEGER:
- switch (type)
- {
- case GL_BYTE:
- return GL_RG8I;
- case GL_INT:
- return GL_RG32I;
- case GL_SHORT:
- return GL_RG16I;
- case GL_UNSIGNED_BYTE:
- return GL_RG8UI;
- case GL_UNSIGNED_INT:
- return GL_RG32UI;
- case GL_UNSIGNED_SHORT:
- return GL_RG16UI;
- default:
- break;
- }
- break;
-
- case GL_SRGB_ALPHA_EXT:
- switch (type)
- {
- case GL_UNSIGNED_BYTE:
- return GL_SRGB8_ALPHA8;
- default:
- break;
- }
- break;
-
- case GL_SRGB_EXT:
- switch (type)
- {
- case GL_UNSIGNED_BYTE:
- return GL_SRGB8;
- default:
- break;
- }
- break;
-
- case GL_STENCIL:
- switch (type)
- {
- case GL_UNSIGNED_BYTE:
- return GL_STENCIL_INDEX8;
- default:
- break;
- }
- break;
-
- case GL_NONE:
- return GL_NONE;
-
- default:
- break;
- }
-
- return GL_NONE;
-}
-
-bool ValidES3Format(GLenum format)
-{
- switch (format)
- {
- case GL_ALPHA:
- case GL_BGRA_EXT:
- case GL_DEPTH_COMPONENT:
- case GL_DEPTH_STENCIL:
- case GL_LUMINANCE:
- case GL_LUMINANCE_ALPHA:
- case GL_RED:
- case GL_RED_INTEGER:
- case GL_RG:
- case GL_RGB:
- case GL_RGBA:
- case GL_RGBA_INTEGER:
- case GL_RGB_INTEGER:
- case GL_RG_INTEGER:
- case GL_SRGB_ALPHA_EXT:
- case GL_SRGB_EXT:
- return true;
-
- default:
- return false;
- }
-}
-
-bool ValidES3Type(GLenum type)
-{
- switch (type)
- {
- case GL_BYTE:
- case GL_FLOAT:
- case GL_FLOAT_32_UNSIGNED_INT_24_8_REV:
- case GL_HALF_FLOAT:
- case GL_HALF_FLOAT_OES:
- case GL_INT:
- case GL_SHORT:
- case GL_UNSIGNED_BYTE:
- case GL_UNSIGNED_INT:
- case GL_UNSIGNED_INT_10F_11F_11F_REV:
- case GL_UNSIGNED_INT_24_8:
- case GL_UNSIGNED_INT_2_10_10_10_REV:
- case GL_UNSIGNED_INT_5_9_9_9_REV:
- case GL_UNSIGNED_SHORT:
- case GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT:
- case GL_UNSIGNED_SHORT_4_4_4_4:
- case GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT:
- case GL_UNSIGNED_SHORT_5_5_5_1:
- case GL_UNSIGNED_SHORT_5_6_5:
- return true;
-
- default:
- return false;
- }
-}
-
-bool ValidES3FormatCombination(GLenum format, GLenum type, GLenum internalFormat)
-{
- ASSERT(ValidES3Format(format) && ValidES3Type(type));
-
- switch (format)
- {
- case GL_RGB_INTEGER:
- switch (type)
- {
- case GL_INT:
- {
- switch (internalFormat)
- {
- case GL_RGB32I:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_UNSIGNED_SHORT:
- {
- switch (internalFormat)
- {
- case GL_RGB16UI:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_SHORT:
- {
- switch (internalFormat)
- {
- case GL_RGB16I:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_UNSIGNED_BYTE:
- {
- switch (internalFormat)
- {
- case GL_RGB8UI:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_BYTE:
- {
- switch (internalFormat)
- {
- case GL_RGB8I:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_UNSIGNED_INT:
- {
- switch (internalFormat)
- {
- case GL_RGB32UI:
- return true;
- default:
- break;
- }
- break;
- }
- default:
- break;
- }
- break;
-
- case GL_RGBA_INTEGER:
- switch (type)
- {
- case GL_INT:
- {
- switch (internalFormat)
- {
- case GL_RGBA32I:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_UNSIGNED_SHORT:
- {
- switch (internalFormat)
- {
- case GL_RGBA16UI:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_UNSIGNED_INT_2_10_10_10_REV:
- {
- switch (internalFormat)
- {
- case GL_RGB10_A2UI:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_SHORT:
- {
- switch (internalFormat)
- {
- case GL_RGBA16I:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_UNSIGNED_BYTE:
- {
- switch (internalFormat)
- {
- case GL_RGBA8UI:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_BYTE:
- {
- switch (internalFormat)
- {
- case GL_RGBA8I:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_UNSIGNED_INT:
- {
- switch (internalFormat)
- {
- case GL_RGBA32UI:
- return true;
- default:
- break;
- }
- break;
- }
- default:
- break;
- }
- break;
-
- case GL_RGB:
- switch (type)
- {
- case GL_UNSIGNED_INT_10F_11F_11F_REV:
- {
- switch (internalFormat)
- {
- case GL_R11F_G11F_B10F:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_UNSIGNED_SHORT:
- {
- switch (internalFormat)
- {
- case GL_RGB16_EXT:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_SHORT:
- {
- switch (internalFormat)
- {
- case GL_RGB16_SNORM_EXT:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_UNSIGNED_BYTE:
- {
- switch (internalFormat)
- {
- case GL_RGB:
- case GL_RGB8:
- case GL_RGB565:
- case GL_SRGB8:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_UNSIGNED_SHORT_5_6_5:
- {
- switch (internalFormat)
- {
- case GL_RGB:
- case GL_RGB565:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_HALF_FLOAT_OES:
- {
- switch (internalFormat)
- {
- case GL_RGB:
- case GL_RGB16F:
- case GL_R11F_G11F_B10F:
- case GL_RGB9_E5:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_HALF_FLOAT:
- {
- switch (internalFormat)
- {
- case GL_RGB16F:
- case GL_R11F_G11F_B10F:
- case GL_RGB9_E5:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_FLOAT:
- {
- switch (internalFormat)
- {
- case GL_RGB:
- case GL_RGB32F:
- case GL_RGB16F:
- case GL_R11F_G11F_B10F:
- case GL_RGB9_E5:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_BYTE:
- {
- switch (internalFormat)
- {
- case GL_RGB8_SNORM:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_UNSIGNED_INT_5_9_9_9_REV:
- {
- switch (internalFormat)
- {
- case GL_RGB9_E5:
- return true;
- default:
- break;
- }
- break;
- }
- default:
- break;
- }
- break;
-
- case GL_LUMINANCE_ALPHA:
- switch (type)
- {
- case GL_HALF_FLOAT:
- {
- switch (internalFormat)
- {
- case GL_LUMINANCE_ALPHA:
- case GL_LUMINANCE_ALPHA16F_EXT:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_FLOAT:
- {
- switch (internalFormat)
- {
- case GL_LUMINANCE_ALPHA:
- case GL_LUMINANCE_ALPHA32F_EXT:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_UNSIGNED_BYTE:
- {
- switch (internalFormat)
- {
- case GL_LUMINANCE_ALPHA:
- case GL_LUMINANCE8_ALPHA8_EXT:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_HALF_FLOAT_OES:
- {
- switch (internalFormat)
- {
- case GL_LUMINANCE_ALPHA:
- case GL_LUMINANCE_ALPHA16F_EXT:
- return true;
- default:
- break;
- }
- break;
- }
- default:
- break;
- }
- break;
-
- case GL_ALPHA:
- switch (type)
- {
- case GL_HALF_FLOAT:
- {
- switch (internalFormat)
- {
- case GL_ALPHA:
- case GL_ALPHA16F_EXT:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_FLOAT:
- {
- switch (internalFormat)
- {
- case GL_ALPHA:
- case GL_ALPHA32F_EXT:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_UNSIGNED_BYTE:
- {
- switch (internalFormat)
- {
- case GL_ALPHA:
- case GL_ALPHA8_EXT:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_HALF_FLOAT_OES:
- {
- switch (internalFormat)
- {
- case GL_ALPHA:
- case GL_ALPHA16F_EXT:
- return true;
- default:
- break;
- }
- break;
- }
- default:
- break;
- }
- break;
-
- case GL_RGBA:
- switch (type)
- {
- case GL_UNSIGNED_SHORT:
- {
- switch (internalFormat)
- {
- case GL_RGBA16_EXT:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_UNSIGNED_INT_2_10_10_10_REV:
- {
- switch (internalFormat)
- {
- case GL_RGB10_A2:
- case GL_RGB5_A1:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_SHORT:
- {
- switch (internalFormat)
- {
- case GL_RGBA16_SNORM_EXT:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_UNSIGNED_SHORT_4_4_4_4:
- {
- switch (internalFormat)
- {
- case GL_RGBA:
- case GL_RGBA4:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_UNSIGNED_BYTE:
- {
- switch (internalFormat)
- {
- case GL_RGBA:
- case GL_RGBA8:
- case GL_RGB5_A1:
- case GL_RGBA4:
- case GL_SRGB8_ALPHA8:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_HALF_FLOAT_OES:
- {
- switch (internalFormat)
- {
- case GL_RGBA:
- case GL_RGBA16F:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_HALF_FLOAT:
- {
- switch (internalFormat)
- {
- case GL_RGBA16F:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_FLOAT:
- {
- switch (internalFormat)
- {
- case GL_RGBA:
- case GL_RGBA32F:
- case GL_RGBA16F:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_BYTE:
- {
- switch (internalFormat)
- {
- case GL_RGBA8_SNORM:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_UNSIGNED_SHORT_5_5_5_1:
- {
- switch (internalFormat)
- {
- case GL_RGBA:
- case GL_RGB5_A1:
- return true;
- default:
- break;
- }
- break;
- }
- default:
- break;
- }
- break;
-
- case GL_LUMINANCE:
- switch (type)
- {
- case GL_HALF_FLOAT:
- {
- switch (internalFormat)
- {
- case GL_LUMINANCE:
- case GL_LUMINANCE16F_EXT:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_FLOAT:
- {
- switch (internalFormat)
- {
- case GL_LUMINANCE:
- case GL_LUMINANCE32F_EXT:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_UNSIGNED_BYTE:
- {
- switch (internalFormat)
- {
- case GL_LUMINANCE:
- case GL_LUMINANCE8_EXT:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_HALF_FLOAT_OES:
- {
- switch (internalFormat)
- {
- case GL_LUMINANCE:
- case GL_LUMINANCE16F_EXT:
- return true;
- default:
- break;
- }
- break;
- }
- default:
- break;
- }
- break;
-
- case GL_RG_INTEGER:
- switch (type)
- {
- case GL_INT:
- {
- switch (internalFormat)
- {
- case GL_RG32I:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_UNSIGNED_SHORT:
- {
- switch (internalFormat)
- {
- case GL_RG16UI:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_SHORT:
- {
- switch (internalFormat)
- {
- case GL_RG16I:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_UNSIGNED_BYTE:
- {
- switch (internalFormat)
- {
- case GL_RG8UI:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_BYTE:
- {
- switch (internalFormat)
- {
- case GL_RG8I:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_UNSIGNED_INT:
- {
- switch (internalFormat)
- {
- case GL_RG32UI:
- return true;
- default:
- break;
- }
- break;
- }
- default:
- break;
- }
- break;
-
- case GL_RED_INTEGER:
- switch (type)
- {
- case GL_INT:
- {
- switch (internalFormat)
- {
- case GL_R32I:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_UNSIGNED_SHORT:
- {
- switch (internalFormat)
- {
- case GL_R16UI:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_SHORT:
- {
- switch (internalFormat)
- {
- case GL_R16I:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_UNSIGNED_BYTE:
- {
- switch (internalFormat)
- {
- case GL_R8UI:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_BYTE:
- {
- switch (internalFormat)
- {
- case GL_R8I:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_UNSIGNED_INT:
- {
- switch (internalFormat)
- {
- case GL_R32UI:
- return true;
- default:
- break;
- }
- break;
- }
- default:
- break;
- }
- break;
-
- case GL_RED:
- switch (type)
- {
- case GL_UNSIGNED_SHORT:
- {
- switch (internalFormat)
- {
- case GL_R16_EXT:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_SHORT:
- {
- switch (internalFormat)
- {
- case GL_R16_SNORM_EXT:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_FLOAT:
- {
- switch (internalFormat)
- {
- case GL_RED:
- case GL_R32F:
- case GL_R16F:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_HALF_FLOAT_OES:
- {
- switch (internalFormat)
- {
- case GL_RED:
- case GL_R16F:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_HALF_FLOAT:
- {
- switch (internalFormat)
- {
- case GL_RED:
- case GL_R16F:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_UNSIGNED_BYTE:
- {
- switch (internalFormat)
- {
- case GL_RED:
- case GL_R8:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_BYTE:
- {
- switch (internalFormat)
- {
- case GL_R8_SNORM:
- return true;
- default:
- break;
- }
- break;
- }
- default:
- break;
- }
- break;
-
- case GL_DEPTH_COMPONENT:
- switch (type)
- {
- case GL_UNSIGNED_INT:
- {
- switch (internalFormat)
- {
- case GL_DEPTH_COMPONENT:
- case GL_DEPTH_COMPONENT24:
- case GL_DEPTH_COMPONENT16:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_UNSIGNED_INT_24_8:
- {
- switch (internalFormat)
- {
- case GL_DEPTH_COMPONENT32_OES:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_FLOAT:
- {
- switch (internalFormat)
- {
- case GL_DEPTH_COMPONENT32F:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_UNSIGNED_SHORT:
- {
- switch (internalFormat)
- {
- case GL_DEPTH_COMPONENT:
- case GL_DEPTH_COMPONENT16:
- return true;
- default:
- break;
- }
- break;
- }
- default:
- break;
- }
- break;
-
- case GL_DEPTH_STENCIL:
- switch (type)
- {
- case GL_UNSIGNED_INT_24_8:
- {
- switch (internalFormat)
- {
- case GL_DEPTH_STENCIL:
- case GL_DEPTH24_STENCIL8:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_FLOAT_32_UNSIGNED_INT_24_8_REV:
- {
- switch (internalFormat)
- {
- case GL_DEPTH32F_STENCIL8:
- return true;
- default:
- break;
- }
- break;
- }
- default:
- break;
- }
- break;
-
- case GL_SRGB_EXT:
- switch (type)
- {
- case GL_UNSIGNED_BYTE:
- {
- switch (internalFormat)
- {
- case GL_SRGB_EXT:
- case GL_SRGB8:
- return true;
- default:
- break;
- }
- break;
- }
- default:
- break;
- }
- break;
-
- case GL_SRGB_ALPHA_EXT:
- switch (type)
- {
- case GL_UNSIGNED_BYTE:
- {
- switch (internalFormat)
- {
- case GL_SRGB_ALPHA_EXT:
- case GL_SRGB8_ALPHA8_EXT:
- return true;
- default:
- break;
- }
- break;
- }
- default:
- break;
- }
- break;
-
- case GL_RG:
- switch (type)
- {
- case GL_UNSIGNED_SHORT:
- {
- switch (internalFormat)
- {
- case GL_RG16_EXT:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_SHORT:
- {
- switch (internalFormat)
- {
- case GL_RG16_SNORM_EXT:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_FLOAT:
- {
- switch (internalFormat)
- {
- case GL_RG:
- case GL_RG32F:
- case GL_RG16F:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_HALF_FLOAT_OES:
- {
- switch (internalFormat)
- {
- case GL_RG:
- case GL_RG16F:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_HALF_FLOAT:
- {
- switch (internalFormat)
- {
- case GL_RG:
- case GL_RG16F:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_UNSIGNED_BYTE:
- {
- switch (internalFormat)
- {
- case GL_RG:
- case GL_RG8:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_BYTE:
- {
- switch (internalFormat)
- {
- case GL_RG8_SNORM:
- return true;
- default:
- break;
- }
- break;
- }
- default:
- break;
- }
- break;
-
- case GL_BGRA_EXT:
- switch (type)
- {
- case GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT:
- {
- switch (internalFormat)
- {
- case GL_BGRA4_ANGLEX:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_UNSIGNED_BYTE:
- {
- switch (internalFormat)
- {
- case GL_BGRA8_EXT:
- case GL_BGRA4_ANGLEX:
- case GL_BGR5_A1_ANGLEX:
- case GL_BGRA_EXT:
- return true;
- default:
- break;
- }
- break;
- }
- case GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT:
- {
- switch (internalFormat)
- {
- case GL_BGR5_A1_ANGLEX:
- return true;
- default:
- break;
- }
- break;
- }
- default:
- break;
- }
- break;
-
- default:
- UNREACHABLE();
- break;
- }
-
- return false;
-}
-
-} // namespace gl
diff --git a/gfx/angle/src/libANGLE/format_map_data.json b/gfx/angle/src/libANGLE/format_map_data.json
deleted file mode 100644
index 3d6ad6c3c..000000000
--- a/gfx/angle/src/libANGLE/format_map_data.json
+++ /dev/null
@@ -1,130 +0,0 @@
-{
- "GL_RGBA": {
- "GL_UNSIGNED_BYTE": "GL_RGBA8",
- "GL_UNSIGNED_SHORT": "GL_RGBA16_EXT",
- "GL_BYTE": "GL_RGBA8_SNORM",
- "GL_SHORT": "GL_RGBA16_SNORM_EXT",
- "GL_UNSIGNED_SHORT_4_4_4_4": "GL_RGBA4",
- "GL_UNSIGNED_SHORT_5_5_5_1": "GL_RGB5_A1",
- "GL_UNSIGNED_INT_2_10_10_10_REV": "GL_RGB10_A2",
- "GL_FLOAT": "GL_RGBA32F",
- "GL_HALF_FLOAT": "GL_RGBA16F",
- "GL_HALF_FLOAT_OES": "GL_RGBA16F"
- },
- "GL_RGBA_INTEGER": {
- "GL_UNSIGNED_BYTE": "GL_RGBA8UI",
- "GL_BYTE": "GL_RGBA8I",
- "GL_UNSIGNED_SHORT": "GL_RGBA16UI",
- "GL_SHORT": "GL_RGBA16I",
- "GL_UNSIGNED_INT": "GL_RGBA32UI",
- "GL_INT": "GL_RGBA32I",
- "GL_UNSIGNED_INT_2_10_10_10_REV": "GL_RGB10_A2UI"
- },
- "GL_RGB": {
- "GL_UNSIGNED_BYTE": "GL_RGB8",
- "GL_UNSIGNED_SHORT": "GL_RGB16_EXT",
- "GL_BYTE": "GL_RGB8_SNORM",
- "GL_SHORT": "GL_RGB16_SNORM_EXT",
- "GL_UNSIGNED_SHORT_5_6_5": "GL_RGB565",
- "GL_UNSIGNED_INT_10F_11F_11F_REV": "GL_R11F_G11F_B10F",
- "GL_UNSIGNED_INT_5_9_9_9_REV": "GL_RGB9_E5",
- "GL_FLOAT": "GL_RGB32F",
- "GL_HALF_FLOAT": "GL_RGB16F",
- "GL_HALF_FLOAT_OES": "GL_RGB16F"
- },
- "GL_RGB_INTEGER": {
- "GL_UNSIGNED_BYTE": "GL_RGB8UI",
- "GL_BYTE": "GL_RGB8I", "GL_UNSIGNED_SHORT": "GL_RGB16UI",
- "GL_SHORT": "GL_RGB16I",
- "GL_UNSIGNED_INT": "GL_RGB32UI",
- "GL_INT": "GL_RGB32I"
- },
- "GL_RG": {
- "GL_UNSIGNED_BYTE": "GL_RG8",
- "GL_UNSIGNED_SHORT": "GL_RG16_EXT",
- "GL_BYTE": "GL_RG8_SNORM",
- "GL_SHORT": "GL_RG16_SNORM_EXT",
- "GL_FLOAT": "GL_RG32F",
- "GL_HALF_FLOAT": "GL_RG16F",
- "GL_HALF_FLOAT_OES": "GL_RG16F"
- },
- "GL_RG_INTEGER": {
- "GL_UNSIGNED_BYTE": "GL_RG8UI",
- "GL_BYTE": "GL_RG8I",
- "GL_UNSIGNED_SHORT": "GL_RG16UI",
- "GL_SHORT": "GL_RG16I",
- "GL_UNSIGNED_INT": "GL_RG32UI",
- "GL_INT": "GL_RG32I"
- },
- "GL_RED": {
- "GL_UNSIGNED_BYTE": "GL_R8",
- "GL_UNSIGNED_SHORT": "GL_R16_EXT",
- "GL_BYTE": "GL_R8_SNORM",
- "GL_SHORT": "GL_R16_SNORM_EXT",
- "GL_FLOAT": "GL_R32F",
- "GL_HALF_FLOAT": "GL_R16F",
- "GL_HALF_FLOAT_OES": "GL_R16F"
- },
- "GL_RED_INTEGER": {
- "GL_UNSIGNED_BYTE": "GL_R8UI",
- "GL_BYTE": "GL_R8I",
- "GL_UNSIGNED_SHORT": "GL_R16UI",
- "GL_SHORT": "GL_R16I",
- "GL_UNSIGNED_INT": "GL_R32UI",
- "GL_INT": "GL_R32I"
- },
- "GL_LUMINANCE_ALPHA": {
- "GL_UNSIGNED_BYTE": "GL_LUMINANCE8_ALPHA8_EXT",
- "GL_FLOAT": "GL_LUMINANCE_ALPHA32F_EXT",
- "GL_HALF_FLOAT": "GL_LUMINANCE_ALPHA16F_EXT",
- "GL_HALF_FLOAT_OES": "GL_LUMINANCE_ALPHA16F_EXT"
- },
- "GL_LUMINANCE": {
- "GL_UNSIGNED_BYTE": "GL_LUMINANCE8_EXT",
- "GL_FLOAT": "GL_LUMINANCE32F_EXT",
- "GL_HALF_FLOAT": "GL_LUMINANCE16F_EXT",
- "GL_HALF_FLOAT_OES": "GL_LUMINANCE16F_EXT"
- },
- "GL_ALPHA": {
- "GL_UNSIGNED_BYTE": "GL_ALPHA8_EXT",
- "GL_FLOAT": "GL_ALPHA32F_EXT",
- "GL_HALF_FLOAT": "GL_ALPHA16F_EXT",
- "GL_HALF_FLOAT_OES": "GL_ALPHA16F_EXT"
- },
- "GL_BGRA_EXT": {
- "GL_UNSIGNED_BYTE": "GL_BGRA8_EXT",
- "GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT": "GL_BGRA4_ANGLEX",
- "GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT": "GL_BGR5_A1_ANGLEX",
- "GL_UNSIGNED_SHORT_5_6_5": "GL_BGR565_ANGLEX"
- },
- "GL_SRGB_EXT": {
- "GL_UNSIGNED_BYTE": "GL_SRGB8"
- },
- "GL_SRGB_ALPHA_EXT": {
- "GL_UNSIGNED_BYTE": "GL_SRGB8_ALPHA8"
- },
- "GL_COMPRESSED_RGB_S3TC_DXT1_EXT": {
- "GL_UNSIGNED_BYTE": "GL_COMPRESSED_RGB_S3TC_DXT1_EXT"
- },
- "GL_COMPRESSED_RGBA_S3TC_DXT1_EXT": {
- "GL_UNSIGNED_BYTE": "GL_COMPRESSED_RGBA_S3TC_DXT1_EXT"
- },
- "GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE": {
- "GL_UNSIGNED_BYTE": "GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE"
- },
- "GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE": {
- "GL_UNSIGNED_BYTE": "GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE"
- },
- "GL_DEPTH_COMPONENT": {
- "GL_UNSIGNED_SHORT": "GL_DEPTH_COMPONENT16",
- "GL_UNSIGNED_INT": "GL_DEPTH_COMPONENT32_OES",
- "GL_FLOAT": "GL_DEPTH_COMPONENT32F"
- },
- "GL_STENCIL": {
- "GL_UNSIGNED_BYTE": "GL_STENCIL_INDEX8"
- },
- "GL_DEPTH_STENCIL": {
- "GL_UNSIGNED_INT_24_8": "GL_DEPTH24_STENCIL8",
- "GL_FLOAT_32_UNSIGNED_INT_24_8_REV": "GL_DEPTH32F_STENCIL8"
- }
-}
diff --git a/gfx/angle/src/libANGLE/formatutils.cpp b/gfx/angle/src/libANGLE/formatutils.cpp
index 2aa2e75d4..9a8c1b790 100755
--- a/gfx/angle/src/libANGLE/formatutils.cpp
+++ b/gfx/angle/src/libANGLE/formatutils.cpp
@@ -16,13 +16,154 @@ using namespace angle;
namespace gl
{
+namespace
+{
// ES2 requires that format is equal to internal format at all glTex*Image2D entry points and the implementation
// can decide the true, sized, internal format. The ES2FormatMap determines the internal format for all valid
// format and type combinations.
-GLenum GetSizedFormatInternal(GLenum format, GLenum type);
-namespace
+typedef std::pair<FormatType, GLenum> FormatPair;
+typedef std::map<FormatType, GLenum> FormatMap;
+
+// A helper function to insert data into the format map with fewer characters.
+void InsertFormatMapping(FormatMap *map, GLenum format, GLenum type, GLenum internalFormat)
+{
+ map->insert(FormatPair(FormatType(format, type), internalFormat));
+}
+
+FormatMap BuildFormatMap()
+{
+ FormatMap map;
+
+ // clang-format off
+ // | Format | Type | Internal format |
+ InsertFormatMapping(&map, GL_RGBA, GL_UNSIGNED_BYTE, GL_RGBA8);
+ InsertFormatMapping(&map, GL_RGBA, GL_BYTE, GL_RGBA8_SNORM);
+ InsertFormatMapping(&map, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4);
+ InsertFormatMapping(&map, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1, GL_RGB5_A1);
+ InsertFormatMapping(&map, GL_RGBA, GL_UNSIGNED_INT_2_10_10_10_REV, GL_RGB10_A2);
+ InsertFormatMapping(&map, GL_RGBA, GL_FLOAT, GL_RGBA32F);
+ InsertFormatMapping(&map, GL_RGBA, GL_HALF_FLOAT, GL_RGBA16F);
+ InsertFormatMapping(&map, GL_RGBA, GL_HALF_FLOAT_OES, GL_RGBA16F);
+
+ InsertFormatMapping(&map, GL_RGBA_INTEGER, GL_UNSIGNED_BYTE, GL_RGBA8UI);
+ InsertFormatMapping(&map, GL_RGBA_INTEGER, GL_BYTE, GL_RGBA8I);
+ InsertFormatMapping(&map, GL_RGBA_INTEGER, GL_UNSIGNED_SHORT, GL_RGBA16UI);
+ InsertFormatMapping(&map, GL_RGBA_INTEGER, GL_SHORT, GL_RGBA16I);
+ InsertFormatMapping(&map, GL_RGBA_INTEGER, GL_UNSIGNED_INT, GL_RGBA32UI);
+ InsertFormatMapping(&map, GL_RGBA_INTEGER, GL_INT, GL_RGBA32I);
+ InsertFormatMapping(&map, GL_RGBA_INTEGER, GL_UNSIGNED_INT_2_10_10_10_REV, GL_RGB10_A2UI);
+
+ InsertFormatMapping(&map, GL_RGB, GL_UNSIGNED_BYTE, GL_RGB8);
+ InsertFormatMapping(&map, GL_RGB, GL_BYTE, GL_RGB8_SNORM);
+ InsertFormatMapping(&map, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, GL_RGB565);
+ InsertFormatMapping(&map, GL_RGB, GL_UNSIGNED_INT_10F_11F_11F_REV, GL_R11F_G11F_B10F);
+ InsertFormatMapping(&map, GL_RGB, GL_UNSIGNED_INT_5_9_9_9_REV, GL_RGB9_E5);
+ InsertFormatMapping(&map, GL_RGB, GL_FLOAT, GL_RGB32F);
+ InsertFormatMapping(&map, GL_RGB, GL_HALF_FLOAT, GL_RGB16F);
+ InsertFormatMapping(&map, GL_RGB, GL_HALF_FLOAT_OES, GL_RGB16F);
+
+ InsertFormatMapping(&map, GL_RGB_INTEGER, GL_UNSIGNED_BYTE, GL_RGB8UI);
+ InsertFormatMapping(&map, GL_RGB_INTEGER, GL_BYTE, GL_RGB8I);
+ InsertFormatMapping(&map, GL_RGB_INTEGER, GL_UNSIGNED_SHORT, GL_RGB16UI);
+ InsertFormatMapping(&map, GL_RGB_INTEGER, GL_SHORT, GL_RGB16I);
+ InsertFormatMapping(&map, GL_RGB_INTEGER, GL_UNSIGNED_INT, GL_RGB32UI);
+ InsertFormatMapping(&map, GL_RGB_INTEGER, GL_INT, GL_RGB32I);
+
+ InsertFormatMapping(&map, GL_RG, GL_UNSIGNED_BYTE, GL_RG8);
+ InsertFormatMapping(&map, GL_RG, GL_BYTE, GL_RG8_SNORM);
+ InsertFormatMapping(&map, GL_RG, GL_FLOAT, GL_RG32F);
+ InsertFormatMapping(&map, GL_RG, GL_HALF_FLOAT, GL_RG16F);
+ InsertFormatMapping(&map, GL_RG, GL_HALF_FLOAT_OES, GL_RG16F);
+
+ InsertFormatMapping(&map, GL_RG_INTEGER, GL_UNSIGNED_BYTE, GL_RG8UI);
+ InsertFormatMapping(&map, GL_RG_INTEGER, GL_BYTE, GL_RG8I);
+ InsertFormatMapping(&map, GL_RG_INTEGER, GL_UNSIGNED_SHORT, GL_RG16UI);
+ InsertFormatMapping(&map, GL_RG_INTEGER, GL_SHORT, GL_RG16I);
+ InsertFormatMapping(&map, GL_RG_INTEGER, GL_UNSIGNED_INT, GL_RG32UI);
+ InsertFormatMapping(&map, GL_RG_INTEGER, GL_INT, GL_RG32I);
+
+ InsertFormatMapping(&map, GL_RED, GL_UNSIGNED_BYTE, GL_R8);
+ InsertFormatMapping(&map, GL_RED, GL_BYTE, GL_R8_SNORM);
+ InsertFormatMapping(&map, GL_RED, GL_FLOAT, GL_R32F);
+ InsertFormatMapping(&map, GL_RED, GL_HALF_FLOAT, GL_R16F);
+ InsertFormatMapping(&map, GL_RED, GL_HALF_FLOAT_OES, GL_R16F);
+
+ InsertFormatMapping(&map, GL_RED_INTEGER, GL_UNSIGNED_BYTE, GL_R8UI);
+ InsertFormatMapping(&map, GL_RED_INTEGER, GL_BYTE, GL_R8I);
+ InsertFormatMapping(&map, GL_RED_INTEGER, GL_UNSIGNED_SHORT, GL_R16UI);
+ InsertFormatMapping(&map, GL_RED_INTEGER, GL_SHORT, GL_R16I);
+ InsertFormatMapping(&map, GL_RED_INTEGER, GL_UNSIGNED_INT, GL_R32UI);
+ InsertFormatMapping(&map, GL_RED_INTEGER, GL_INT, GL_R32I);
+
+ InsertFormatMapping(&map, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, GL_LUMINANCE8_ALPHA8_EXT);
+ InsertFormatMapping(&map, GL_LUMINANCE, GL_UNSIGNED_BYTE, GL_LUMINANCE8_EXT);
+ InsertFormatMapping(&map, GL_ALPHA, GL_UNSIGNED_BYTE, GL_ALPHA8_EXT);
+ InsertFormatMapping(&map, GL_LUMINANCE_ALPHA, GL_FLOAT, GL_LUMINANCE_ALPHA32F_EXT);
+ InsertFormatMapping(&map, GL_LUMINANCE, GL_FLOAT, GL_LUMINANCE32F_EXT);
+ InsertFormatMapping(&map, GL_ALPHA, GL_FLOAT, GL_ALPHA32F_EXT);
+ InsertFormatMapping(&map, GL_LUMINANCE_ALPHA, GL_HALF_FLOAT, GL_LUMINANCE_ALPHA16F_EXT);
+ InsertFormatMapping(&map, GL_LUMINANCE_ALPHA, GL_HALF_FLOAT_OES, GL_LUMINANCE_ALPHA16F_EXT);
+ InsertFormatMapping(&map, GL_LUMINANCE, GL_HALF_FLOAT, GL_LUMINANCE16F_EXT);
+ InsertFormatMapping(&map, GL_LUMINANCE, GL_HALF_FLOAT_OES, GL_LUMINANCE16F_EXT);
+ InsertFormatMapping(&map, GL_ALPHA, GL_HALF_FLOAT, GL_ALPHA16F_EXT);
+ InsertFormatMapping(&map, GL_ALPHA, GL_HALF_FLOAT_OES, GL_ALPHA16F_EXT);
+
+ InsertFormatMapping(&map, GL_BGRA_EXT, GL_UNSIGNED_BYTE, GL_BGRA8_EXT);
+ InsertFormatMapping(&map, GL_BGRA_EXT, GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT, GL_BGRA4_ANGLEX);
+ InsertFormatMapping(&map, GL_BGRA_EXT, GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT, GL_BGR5_A1_ANGLEX);
+
+ InsertFormatMapping(&map, GL_SRGB_EXT, GL_UNSIGNED_BYTE, GL_SRGB8);
+ InsertFormatMapping(&map, GL_SRGB_ALPHA_EXT, GL_UNSIGNED_BYTE, GL_SRGB8_ALPHA8);
+
+ InsertFormatMapping(&map, GL_COMPRESSED_RGB_S3TC_DXT1_EXT, GL_UNSIGNED_BYTE, GL_COMPRESSED_RGB_S3TC_DXT1_EXT);
+ InsertFormatMapping(&map, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, GL_UNSIGNED_BYTE, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT);
+ InsertFormatMapping(&map, GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE, GL_UNSIGNED_BYTE, GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE);
+ InsertFormatMapping(&map, GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE, GL_UNSIGNED_BYTE, GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE);
+
+ InsertFormatMapping(&map, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT, GL_DEPTH_COMPONENT16);
+ InsertFormatMapping(&map, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, GL_DEPTH_COMPONENT32_OES);
+ InsertFormatMapping(&map, GL_DEPTH_COMPONENT, GL_FLOAT, GL_DEPTH_COMPONENT32F);
+
+ InsertFormatMapping(&map, GL_STENCIL, GL_UNSIGNED_BYTE, GL_STENCIL_INDEX8);
+
+ InsertFormatMapping(&map, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, GL_DEPTH24_STENCIL8);
+ InsertFormatMapping(&map, GL_DEPTH_STENCIL, GL_FLOAT_32_UNSIGNED_INT_24_8_REV, GL_DEPTH32F_STENCIL8);
+
+ // From GL_EXT_texture_norm16
+ InsertFormatMapping(&map, GL_RED, GL_UNSIGNED_SHORT, GL_R16_EXT);
+ InsertFormatMapping(&map, GL_RED, GL_SHORT, GL_R16_SNORM_EXT);
+ InsertFormatMapping(&map, GL_RG, GL_UNSIGNED_SHORT, GL_RG16_EXT);
+ InsertFormatMapping(&map, GL_RG, GL_SHORT, GL_RG16_SNORM_EXT);
+ InsertFormatMapping(&map, GL_RGB, GL_UNSIGNED_SHORT, GL_RGB16_EXT);
+ InsertFormatMapping(&map, GL_RGB, GL_SHORT, GL_RGB16_SNORM_EXT);
+ InsertFormatMapping(&map, GL_RGBA, GL_UNSIGNED_SHORT, GL_RGBA16_EXT);
+ InsertFormatMapping(&map, GL_RGBA, GL_SHORT, GL_RGBA16_SNORM_EXT);
+ // clang-format on
+
+ return map;
+}
+
+GLenum GetSizedFormatInternal(GLenum format, GLenum type)
{
+ static const FormatMap formatMap = BuildFormatMap();
+ auto iter = formatMap.find(FormatType(format, type));
+ if (iter != formatMap.end())
+ {
+ return iter->second;
+ }
+
+ // TODO(jmadill): Fix this hack.
+ if (format == GL_BGRA_EXT && type == GL_UNSIGNED_SHORT_5_6_5)
+ return GL_BGR565_ANGLEX;
+
+ if (format == GL_NONE)
+ return GL_NONE;
+
+ UNREACHABLE();
+ return GL_NONE;
+}
+
typedef std::pair<GLenum, InternalFormat> InternalFormatInfoPair;
typedef std::map<GLenum, InternalFormat> InternalFormatInfoMap;
@@ -71,20 +212,20 @@ bool operator<(const Type& a, const Type& b)
}
// Information about internal formats
-static bool AlwaysSupported(const Version &, const Extensions &)
+static bool AlwaysSupported(GLuint, const Extensions &)
{
return true;
}
-static bool NeverSupported(const Version &, const Extensions &)
+static bool NeverSupported(GLuint, const Extensions &)
{
return false;
}
-template <GLuint minCoreGLMajorVersion, GLuint minCoreGLMinorVersion>
-static bool RequireES(const Version &clientVersion, const Extensions &)
+template <GLuint minCoreGLVersion>
+static bool RequireES(GLuint clientVersion, const Extensions &)
{
- return clientVersion >= Version(minCoreGLMajorVersion, minCoreGLMinorVersion);
+ return clientVersion >= minCoreGLVersion;
}
// Pointer to a boolean memeber of the Extensions struct
@@ -92,101 +233,92 @@ typedef bool(Extensions::*ExtensionBool);
// Check support for a single extension
template <ExtensionBool bool1>
-static bool RequireExt(const Version &, const Extensions &extensions)
+static bool RequireExt(GLuint, const Extensions & extensions)
{
return extensions.*bool1;
}
// Check for a minimum client version or a single extension
-template <GLuint minCoreGLMajorVersion, GLuint minCoreGLMinorVersion, ExtensionBool bool1>
-static bool RequireESOrExt(const Version &clientVersion, const Extensions &extensions)
+template <GLuint minCoreGLVersion, ExtensionBool bool1>
+static bool RequireESOrExt(GLuint clientVersion, const Extensions &extensions)
{
- return clientVersion >= Version(minCoreGLMajorVersion, minCoreGLMinorVersion) ||
- extensions.*bool1;
+ return clientVersion >= minCoreGLVersion || extensions.*bool1;
}
// Check for a minimum client version or two extensions
-template <GLuint minCoreGLMajorVersion,
- GLuint minCoreGLMinorVersion,
- ExtensionBool bool1,
- ExtensionBool bool2>
-static bool RequireESOrExtAndExt(const Version &clientVersion, const Extensions &extensions)
+template <GLuint minCoreGLVersion, ExtensionBool bool1, ExtensionBool bool2>
+static bool RequireESOrExtAndExt(GLuint clientVersion, const Extensions &extensions)
{
- return clientVersion >= Version(minCoreGLMajorVersion, minCoreGLMinorVersion) ||
- (extensions.*bool1 && extensions.*bool2);
+ return clientVersion >= minCoreGLVersion || (extensions.*bool1 && extensions.*bool2);
}
// Check for a minimum client version or at least one of two extensions
-template <GLuint minCoreGLMajorVersion,
- GLuint minCoreGLMinorVersion,
- ExtensionBool bool1,
- ExtensionBool bool2>
-static bool RequireESOrExtOrExt(const Version &clientVersion, const Extensions &extensions)
+template <GLuint minCoreGLVersion, ExtensionBool bool1, ExtensionBool bool2>
+static bool RequireESOrExtOrExt(GLuint clientVersion, const Extensions &extensions)
{
- return clientVersion >= Version(minCoreGLMajorVersion, minCoreGLMinorVersion) ||
- extensions.*bool1 || extensions.*bool2;
+ return clientVersion >= minCoreGLVersion || extensions.*bool1 || extensions.*bool2;
}
// Check support for two extensions
template <ExtensionBool bool1, ExtensionBool bool2>
-static bool RequireExtAndExt(const Version &, const Extensions &extensions)
+static bool RequireExtAndExt(GLuint, const Extensions &extensions)
{
return extensions.*bool1 && extensions.*bool2;
}
// Check support for either of two extensions
template <ExtensionBool bool1, ExtensionBool bool2>
-static bool RequireExtOrExt(const Version &, const Extensions &extensions)
+static bool RequireExtOrExt(GLuint, const Extensions &extensions)
{
return extensions.*bool1 || extensions.*bool2;
}
// Special function for half float formats with three or four channels.
-static bool HalfFloatSupport(const Version &clientVersion, const Extensions &extensions)
+static bool HalfFloatSupport(GLuint clientVersion, const Extensions &extensions)
{
- return clientVersion >= Version(3, 0) || extensions.textureHalfFloat;
+ return clientVersion >= 3 || extensions.textureHalfFloat;
}
-static bool HalfFloatRenderableSupport(const Version &clientVersion, const Extensions &extensions)
+static bool HalfFloatRenderableSupport(GLuint clientVersion, const Extensions &extensions)
{
return HalfFloatSupport(clientVersion, extensions) && extensions.colorBufferHalfFloat;
}
// Special function for half float formats with one or two channels.
-static bool HalfFloatSupportRG(const Version &clientVersion, const Extensions &extensions)
+static bool HalfFloatSupportRG(GLuint clientVersion, const Extensions &extensions)
{
- return clientVersion >= Version(3, 0) || (extensions.textureHalfFloat && extensions.textureRG);
+ return clientVersion >= 3 || (extensions.textureHalfFloat && extensions.textureRG);
}
-static bool HalfFloatRenderableSupportRG(const Version &clientVersion, const Extensions &extensions)
+static bool HalfFloatRenderableSupportRG(GLuint clientVersion, const Extensions &extensions)
{
return HalfFloatSupportRG(clientVersion, extensions) && extensions.colorBufferHalfFloat;
}
// Special function for float formats with three or four channels.
-static bool FloatSupport(const Version &clientVersion, const Extensions &extensions)
+static bool FloatSupport(GLuint clientVersion, const Extensions &extensions)
{
- return clientVersion >= Version(3, 0) || extensions.textureFloat;
+ return clientVersion >= 3 || extensions.textureFloat;
}
-static bool FloatRenderableSupport(const Version &clientVersion, const Extensions &extensions)
+static bool FloatRenderableSupport(GLuint clientVersion, const Extensions &extensions)
{
// We don't expose colorBufferFloat in ES2, but we silently support rendering to float.
return FloatSupport(clientVersion, extensions) &&
- (extensions.colorBufferFloat || clientVersion == Version(2, 0));
+ (extensions.colorBufferFloat || clientVersion == 2);
}
// Special function for float formats with one or two channels.
-static bool FloatSupportRG(const Version &clientVersion, const Extensions &extensions)
+static bool FloatSupportRG(GLuint clientVersion, const Extensions &extensions)
{
- return clientVersion >= Version(3, 0) || (extensions.textureFloat && extensions.textureRG);
+ return clientVersion >= 3 || (extensions.textureFloat && extensions.textureRG);
}
-static bool FloatRenderableSupportRG(const Version &clientVersion, const Extensions &extensions)
+static bool FloatRenderableSupportRG(GLuint clientVersion, const Extensions &extensions)
{
// We don't expose colorBufferFloat in ES2, but we silently support rendering to float.
return FloatSupportRG(clientVersion, extensions) &&
- (extensions.colorBufferFloat || clientVersion == Version(2, 0));
+ (extensions.colorBufferFloat || clientVersion == 2);
}
InternalFormat::InternalFormat()
@@ -220,26 +352,6 @@ bool InternalFormat::isLUMA() const
(luminanceBits + alphaBits) > 0);
}
-GLenum InternalFormat::getReadPixelsFormat() const
-{
- return format;
-}
-
-GLenum InternalFormat::getReadPixelsType() const
-{
- switch (type)
- {
- case GL_HALF_FLOAT:
- // The internal format may have a type of GL_HALF_FLOAT but when exposing this type as
- // the IMPLEMENTATION_READ_TYPE, only HALF_FLOAT_OES is allowed by
- // OES_texture_half_float
- return GL_HALF_FLOAT_OES;
-
- default:
- return type;
- }
-}
-
Format::Format(GLenum internalFormat) : Format(GetInternalFormatInfo(internalFormat))
{
}
@@ -434,48 +546,48 @@ static InternalFormatInfoMap BuildInternalFormatInfoMap()
// clang-format off
- // | Internal format | R | G | B | A |S | Format | Type | Component type | SRGB | Texture supported | Renderable | Filterable |
- AddRGBAFormat(&map, GL_R8, 8, 0, 0, 0, 0, GL_RED, GL_UNSIGNED_BYTE, GL_UNSIGNED_NORMALIZED, false, RequireESOrExt<3, 0, &Extensions::textureRG>, RequireESOrExt<3, 0, &Extensions::textureRG>, AlwaysSupported);
- AddRGBAFormat(&map, GL_R8_SNORM, 8, 0, 0, 0, 0, GL_RED, GL_BYTE, GL_SIGNED_NORMALIZED, false, RequireES<3, 0>, NeverSupported, AlwaysSupported);
- AddRGBAFormat(&map, GL_RG8, 8, 8, 0, 0, 0, GL_RG, GL_UNSIGNED_BYTE, GL_UNSIGNED_NORMALIZED, false, RequireESOrExt<3, 0, &Extensions::textureRG>, RequireESOrExt<3, 0, &Extensions::textureRG>, AlwaysSupported);
- AddRGBAFormat(&map, GL_RG8_SNORM, 8, 8, 0, 0, 0, GL_RG, GL_BYTE, GL_SIGNED_NORMALIZED, false, RequireES<3, 0>, NeverSupported, AlwaysSupported);
- AddRGBAFormat(&map, GL_RGB8, 8, 8, 8, 0, 0, GL_RGB, GL_UNSIGNED_BYTE, GL_UNSIGNED_NORMALIZED, false, RequireESOrExt<3, 0, &Extensions::rgb8rgba8>, RequireESOrExt<3, 0, &Extensions::rgb8rgba8>, AlwaysSupported);
- AddRGBAFormat(&map, GL_RGB8_SNORM, 8, 8, 8, 0, 0, GL_RGB, GL_BYTE, GL_SIGNED_NORMALIZED, false, RequireES<3, 0>, NeverSupported, AlwaysSupported);
- AddRGBAFormat(&map, GL_RGB565, 5, 6, 5, 0, 0, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, GL_UNSIGNED_NORMALIZED, false, RequireES<2, 0>, RequireES<2, 0>, AlwaysSupported);
- AddRGBAFormat(&map, GL_RGBA4, 4, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, GL_UNSIGNED_NORMALIZED, false, RequireES<2, 0>, RequireES<2, 0>, AlwaysSupported);
- AddRGBAFormat(&map, GL_RGB5_A1, 5, 5, 5, 1, 0, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1, GL_UNSIGNED_NORMALIZED, false, RequireES<2, 0>, RequireES<2, 0>, AlwaysSupported);
- AddRGBAFormat(&map, GL_RGBA8, 8, 8, 8, 8, 0, GL_RGBA, GL_UNSIGNED_BYTE, GL_UNSIGNED_NORMALIZED, false, RequireESOrExt<3, 0, &Extensions::rgb8rgba8>, RequireESOrExt<3, 0, &Extensions::rgb8rgba8>, AlwaysSupported);
- AddRGBAFormat(&map, GL_RGBA8_SNORM, 8, 8, 8, 8, 0, GL_RGBA, GL_BYTE, GL_SIGNED_NORMALIZED, false, RequireES<3, 0>, NeverSupported, AlwaysSupported);
- AddRGBAFormat(&map, GL_RGB10_A2, 10, 10, 10, 2, 0, GL_RGBA, GL_UNSIGNED_INT_2_10_10_10_REV, GL_UNSIGNED_NORMALIZED, false, RequireES<3, 0>, RequireES<3, 0>, AlwaysSupported);
- AddRGBAFormat(&map, GL_RGB10_A2UI, 10, 10, 10, 2, 0, GL_RGBA_INTEGER, GL_UNSIGNED_INT_2_10_10_10_REV, GL_UNSIGNED_INT, false, RequireES<3, 0>, RequireES<3, 0>, NeverSupported);
- AddRGBAFormat(&map, GL_SRGB8, 8, 8, 8, 0, 0, GL_RGB, GL_UNSIGNED_BYTE, GL_UNSIGNED_NORMALIZED, true, RequireESOrExt<3, 0, &Extensions::sRGB>, NeverSupported, AlwaysSupported);
- AddRGBAFormat(&map, GL_SRGB8_ALPHA8, 8, 8, 8, 8, 0, GL_RGBA, GL_UNSIGNED_BYTE, GL_UNSIGNED_NORMALIZED, true, RequireESOrExt<3, 0, &Extensions::sRGB>, RequireESOrExt<3, 0, &Extensions::sRGB>, AlwaysSupported);
- AddRGBAFormat(&map, GL_RGB9_E5, 9, 9, 9, 0, 5, GL_RGB, GL_UNSIGNED_INT_5_9_9_9_REV, GL_FLOAT, false, RequireES<3, 0>, NeverSupported, AlwaysSupported);
- AddRGBAFormat(&map, GL_R8I, 8, 0, 0, 0, 0, GL_RED_INTEGER, GL_BYTE, GL_INT, false, RequireES<3, 0>, RequireES<3, 0>, NeverSupported);
- AddRGBAFormat(&map, GL_R8UI, 8, 0, 0, 0, 0, GL_RED_INTEGER, GL_UNSIGNED_BYTE, GL_UNSIGNED_INT, false, RequireES<3, 0>, RequireES<3, 0>, NeverSupported);
- AddRGBAFormat(&map, GL_R16I, 16, 0, 0, 0, 0, GL_RED_INTEGER, GL_SHORT, GL_INT, false, RequireES<3, 0>, RequireES<3, 0>, NeverSupported);
- AddRGBAFormat(&map, GL_R16UI, 16, 0, 0, 0, 0, GL_RED_INTEGER, GL_UNSIGNED_SHORT, GL_UNSIGNED_INT, false, RequireES<3, 0>, RequireES<3, 0>, NeverSupported);
- AddRGBAFormat(&map, GL_R32I, 32, 0, 0, 0, 0, GL_RED_INTEGER, GL_INT, GL_INT, false, RequireES<3, 0>, RequireES<3, 0>, NeverSupported);
- AddRGBAFormat(&map, GL_R32UI, 32, 0, 0, 0, 0, GL_RED_INTEGER, GL_UNSIGNED_INT, GL_UNSIGNED_INT, false, RequireES<3, 0>, RequireES<3, 0>, NeverSupported);
- AddRGBAFormat(&map, GL_RG8I, 8, 8, 0, 0, 0, GL_RG_INTEGER, GL_BYTE, GL_INT, false, RequireES<3, 0>, RequireES<3, 0>, NeverSupported);
- AddRGBAFormat(&map, GL_RG8UI, 8, 8, 0, 0, 0, GL_RG_INTEGER, GL_UNSIGNED_BYTE, GL_UNSIGNED_INT, false, RequireES<3, 0>, RequireES<3, 0>, NeverSupported);
- AddRGBAFormat(&map, GL_RG16I, 16, 16, 0, 0, 0, GL_RG_INTEGER, GL_SHORT, GL_INT, false, RequireES<3, 0>, RequireES<3, 0>, NeverSupported);
- AddRGBAFormat(&map, GL_RG16UI, 16, 16, 0, 0, 0, GL_RG_INTEGER, GL_UNSIGNED_SHORT, GL_UNSIGNED_INT, false, RequireES<3, 0>, RequireES<3, 0>, NeverSupported);
- AddRGBAFormat(&map, GL_RG32I, 32, 32, 0, 0, 0, GL_RG_INTEGER, GL_INT, GL_INT, false, RequireES<3, 0>, RequireES<3, 0>, NeverSupported);
- AddRGBAFormat(&map, GL_R11F_G11F_B10F, 11, 11, 10, 0, 0, GL_RGB, GL_UNSIGNED_INT_10F_11F_11F_REV, GL_FLOAT, false, RequireES<3, 0>, RequireExt<&Extensions::colorBufferFloat>, AlwaysSupported);
- AddRGBAFormat(&map, GL_RG32UI, 32, 32, 0, 0, 0, GL_RG_INTEGER, GL_UNSIGNED_INT, GL_UNSIGNED_INT, false, RequireES<3, 0>, RequireES<3, 0>, NeverSupported);
- AddRGBAFormat(&map, GL_RGB8I, 8, 8, 8, 0, 0, GL_RGB_INTEGER, GL_BYTE, GL_INT, false, RequireES<3, 0>, NeverSupported, NeverSupported);
- AddRGBAFormat(&map, GL_RGB8UI, 8, 8, 8, 0, 0, GL_RGB_INTEGER, GL_UNSIGNED_BYTE, GL_UNSIGNED_INT, false, RequireES<3, 0>, NeverSupported, NeverSupported);
- AddRGBAFormat(&map, GL_RGB16I, 16, 16, 16, 0, 0, GL_RGB_INTEGER, GL_SHORT, GL_INT, false, RequireES<3, 0>, NeverSupported, NeverSupported);
- AddRGBAFormat(&map, GL_RGB16UI, 16, 16, 16, 0, 0, GL_RGB_INTEGER, GL_UNSIGNED_SHORT, GL_UNSIGNED_INT, false, RequireES<3, 0>, NeverSupported, NeverSupported);
- AddRGBAFormat(&map, GL_RGB32I, 32, 32, 32, 0, 0, GL_RGB_INTEGER, GL_INT, GL_INT, false, RequireES<3, 0>, NeverSupported, NeverSupported);
- AddRGBAFormat(&map, GL_RGB32UI, 32, 32, 32, 0, 0, GL_RGB_INTEGER, GL_UNSIGNED_INT, GL_UNSIGNED_INT, false, RequireES<3, 0>, NeverSupported, NeverSupported);
- AddRGBAFormat(&map, GL_RGBA8I, 8, 8, 8, 8, 0, GL_RGBA_INTEGER, GL_BYTE, GL_INT, false, RequireES<3, 0>, RequireES<3, 0>, NeverSupported);
- AddRGBAFormat(&map, GL_RGBA8UI, 8, 8, 8, 8, 0, GL_RGBA_INTEGER, GL_UNSIGNED_BYTE, GL_UNSIGNED_INT, false, RequireES<3, 0>, RequireES<3, 0>, NeverSupported);
- AddRGBAFormat(&map, GL_RGBA16I, 16, 16, 16, 16, 0, GL_RGBA_INTEGER, GL_SHORT, GL_INT, false, RequireES<3, 0>, RequireES<3, 0>, NeverSupported);
- AddRGBAFormat(&map, GL_RGBA16UI, 16, 16, 16, 16, 0, GL_RGBA_INTEGER, GL_UNSIGNED_SHORT, GL_UNSIGNED_INT, false, RequireES<3, 0>, RequireES<3, 0>, NeverSupported);
- AddRGBAFormat(&map, GL_RGBA32I, 32, 32, 32, 32, 0, GL_RGBA_INTEGER, GL_INT, GL_INT, false, RequireES<3, 0>, RequireES<3, 0>, NeverSupported);
- AddRGBAFormat(&map, GL_RGBA32UI, 32, 32, 32, 32, 0, GL_RGBA_INTEGER, GL_UNSIGNED_INT, GL_UNSIGNED_INT, false, RequireES<3, 0>, RequireES<3, 0>, NeverSupported);
+ // | Internal format | R | G | B | A |S | Format | Type | Component type | SRGB | Texture supported | Renderable | Filterable |
+ AddRGBAFormat(&map, GL_R8, 8, 0, 0, 0, 0, GL_RED, GL_UNSIGNED_BYTE, GL_UNSIGNED_NORMALIZED, false, RequireESOrExt<3, &Extensions::textureRG>, RequireESOrExt<3, &Extensions::textureRG>, AlwaysSupported);
+ AddRGBAFormat(&map, GL_R8_SNORM, 8, 0, 0, 0, 0, GL_RED, GL_BYTE, GL_SIGNED_NORMALIZED, false, RequireES<3>, NeverSupported, AlwaysSupported);
+ AddRGBAFormat(&map, GL_RG8, 8, 8, 0, 0, 0, GL_RG, GL_UNSIGNED_BYTE, GL_UNSIGNED_NORMALIZED, false, RequireESOrExt<3, &Extensions::textureRG>, RequireESOrExt<3, &Extensions::textureRG>, AlwaysSupported);
+ AddRGBAFormat(&map, GL_RG8_SNORM, 8, 8, 0, 0, 0, GL_RG, GL_BYTE, GL_SIGNED_NORMALIZED, false, RequireES<3>, NeverSupported, AlwaysSupported);
+ AddRGBAFormat(&map, GL_RGB8, 8, 8, 8, 0, 0, GL_RGB, GL_UNSIGNED_BYTE, GL_UNSIGNED_NORMALIZED, false, RequireESOrExt<3, &Extensions::rgb8rgba8>, RequireESOrExt<3, &Extensions::rgb8rgba8>, AlwaysSupported);
+ AddRGBAFormat(&map, GL_RGB8_SNORM, 8, 8, 8, 0, 0, GL_RGB, GL_BYTE, GL_SIGNED_NORMALIZED, false, RequireES<3>, NeverSupported, AlwaysSupported);
+ AddRGBAFormat(&map, GL_RGB565, 5, 6, 5, 0, 0, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, GL_UNSIGNED_NORMALIZED, false, RequireES<2>, RequireES<2>, AlwaysSupported);
+ AddRGBAFormat(&map, GL_RGBA4, 4, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, GL_UNSIGNED_NORMALIZED, false, RequireES<2>, RequireES<2>, AlwaysSupported);
+ AddRGBAFormat(&map, GL_RGB5_A1, 5, 5, 5, 1, 0, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1, GL_UNSIGNED_NORMALIZED, false, RequireES<2>, RequireES<2>, AlwaysSupported);
+ AddRGBAFormat(&map, GL_RGBA8, 8, 8, 8, 8, 0, GL_RGBA, GL_UNSIGNED_BYTE, GL_UNSIGNED_NORMALIZED, false, RequireESOrExt<3, &Extensions::rgb8rgba8>, RequireESOrExt<3, &Extensions::rgb8rgba8>, AlwaysSupported);
+ AddRGBAFormat(&map, GL_RGBA8_SNORM, 8, 8, 8, 8, 0, GL_RGBA, GL_BYTE, GL_SIGNED_NORMALIZED, false, RequireES<3>, NeverSupported, AlwaysSupported);
+ AddRGBAFormat(&map, GL_RGB10_A2, 10, 10, 10, 2, 0, GL_RGBA, GL_UNSIGNED_INT_2_10_10_10_REV, GL_UNSIGNED_NORMALIZED, false, RequireES<3>, RequireES<3>, AlwaysSupported);
+ AddRGBAFormat(&map, GL_RGB10_A2UI, 10, 10, 10, 2, 0, GL_RGBA_INTEGER, GL_UNSIGNED_INT_2_10_10_10_REV, GL_UNSIGNED_INT, false, RequireES<3>, RequireES<3>, NeverSupported);
+ AddRGBAFormat(&map, GL_SRGB8, 8, 8, 8, 0, 0, GL_RGB, GL_UNSIGNED_BYTE, GL_UNSIGNED_NORMALIZED, true, RequireESOrExt<3, &Extensions::sRGB>, NeverSupported, AlwaysSupported);
+ AddRGBAFormat(&map, GL_SRGB8_ALPHA8, 8, 8, 8, 8, 0, GL_RGBA, GL_UNSIGNED_BYTE, GL_UNSIGNED_NORMALIZED, true, RequireESOrExt<3, &Extensions::sRGB>, RequireESOrExt<3, &Extensions::sRGB>, AlwaysSupported);
+ AddRGBAFormat(&map, GL_RGB9_E5, 9, 9, 9, 0, 5, GL_RGB, GL_UNSIGNED_INT_5_9_9_9_REV, GL_FLOAT, false, RequireES<3>, NeverSupported, AlwaysSupported);
+ AddRGBAFormat(&map, GL_R8I, 8, 0, 0, 0, 0, GL_RED_INTEGER, GL_BYTE, GL_INT, false, RequireES<3>, RequireES<3>, NeverSupported);
+ AddRGBAFormat(&map, GL_R8UI, 8, 0, 0, 0, 0, GL_RED_INTEGER, GL_UNSIGNED_BYTE, GL_UNSIGNED_INT, false, RequireES<3>, RequireES<3>, NeverSupported);
+ AddRGBAFormat(&map, GL_R16I, 16, 0, 0, 0, 0, GL_RED_INTEGER, GL_SHORT, GL_INT, false, RequireES<3>, RequireES<3>, NeverSupported);
+ AddRGBAFormat(&map, GL_R16UI, 16, 0, 0, 0, 0, GL_RED_INTEGER, GL_UNSIGNED_SHORT, GL_UNSIGNED_INT, false, RequireES<3>, RequireES<3>, NeverSupported);
+ AddRGBAFormat(&map, GL_R32I, 32, 0, 0, 0, 0, GL_RED_INTEGER, GL_INT, GL_INT, false, RequireES<3>, RequireES<3>, NeverSupported);
+ AddRGBAFormat(&map, GL_R32UI, 32, 0, 0, 0, 0, GL_RED_INTEGER, GL_UNSIGNED_INT, GL_UNSIGNED_INT, false, RequireES<3>, RequireES<3>, NeverSupported);
+ AddRGBAFormat(&map, GL_RG8I, 8, 8, 0, 0, 0, GL_RG_INTEGER, GL_BYTE, GL_INT, false, RequireES<3>, RequireES<3>, NeverSupported);
+ AddRGBAFormat(&map, GL_RG8UI, 8, 8, 0, 0, 0, GL_RG_INTEGER, GL_UNSIGNED_BYTE, GL_UNSIGNED_INT, false, RequireES<3>, RequireES<3>, NeverSupported);
+ AddRGBAFormat(&map, GL_RG16I, 16, 16, 0, 0, 0, GL_RG_INTEGER, GL_SHORT, GL_INT, false, RequireES<3>, RequireES<3>, NeverSupported);
+ AddRGBAFormat(&map, GL_RG16UI, 16, 16, 0, 0, 0, GL_RG_INTEGER, GL_UNSIGNED_SHORT, GL_UNSIGNED_INT, false, RequireES<3>, RequireES<3>, NeverSupported);
+ AddRGBAFormat(&map, GL_RG32I, 32, 32, 0, 0, 0, GL_RG_INTEGER, GL_INT, GL_INT, false, RequireES<3>, RequireES<3>, NeverSupported);
+ AddRGBAFormat(&map, GL_R11F_G11F_B10F, 11, 11, 10, 0, 0, GL_RGB, GL_UNSIGNED_INT_10F_11F_11F_REV, GL_FLOAT, false, RequireES<3>, RequireExt<&Extensions::colorBufferFloat>, AlwaysSupported);
+ AddRGBAFormat(&map, GL_RG32UI, 32, 32, 0, 0, 0, GL_RG_INTEGER, GL_UNSIGNED_INT, GL_UNSIGNED_INT, false, RequireES<3>, RequireES<3>, NeverSupported);
+ AddRGBAFormat(&map, GL_RGB8I, 8, 8, 8, 0, 0, GL_RGB_INTEGER, GL_BYTE, GL_INT, false, RequireES<3>, NeverSupported, NeverSupported);
+ AddRGBAFormat(&map, GL_RGB8UI, 8, 8, 8, 0, 0, GL_RGB_INTEGER, GL_UNSIGNED_BYTE, GL_UNSIGNED_INT, false, RequireES<3>, NeverSupported, NeverSupported);
+ AddRGBAFormat(&map, GL_RGB16I, 16, 16, 16, 0, 0, GL_RGB_INTEGER, GL_SHORT, GL_INT, false, RequireES<3>, NeverSupported, NeverSupported);
+ AddRGBAFormat(&map, GL_RGB16UI, 16, 16, 16, 0, 0, GL_RGB_INTEGER, GL_UNSIGNED_SHORT, GL_UNSIGNED_INT, false, RequireES<3>, NeverSupported, NeverSupported);
+ AddRGBAFormat(&map, GL_RGB32I, 32, 32, 32, 0, 0, GL_RGB_INTEGER, GL_INT, GL_INT, false, RequireES<3>, NeverSupported, NeverSupported);
+ AddRGBAFormat(&map, GL_RGB32UI, 32, 32, 32, 0, 0, GL_RGB_INTEGER, GL_UNSIGNED_INT, GL_UNSIGNED_INT, false, RequireES<3>, NeverSupported, NeverSupported);
+ AddRGBAFormat(&map, GL_RGBA8I, 8, 8, 8, 8, 0, GL_RGBA_INTEGER, GL_BYTE, GL_INT, false, RequireES<3>, RequireES<3>, NeverSupported);
+ AddRGBAFormat(&map, GL_RGBA8UI, 8, 8, 8, 8, 0, GL_RGBA_INTEGER, GL_UNSIGNED_BYTE, GL_UNSIGNED_INT, false, RequireES<3>, RequireES<3>, NeverSupported);
+ AddRGBAFormat(&map, GL_RGBA16I, 16, 16, 16, 16, 0, GL_RGBA_INTEGER, GL_SHORT, GL_INT, false, RequireES<3>, RequireES<3>, NeverSupported);
+ AddRGBAFormat(&map, GL_RGBA16UI, 16, 16, 16, 16, 0, GL_RGBA_INTEGER, GL_UNSIGNED_SHORT, GL_UNSIGNED_INT, false, RequireES<3>, RequireES<3>, NeverSupported);
+ AddRGBAFormat(&map, GL_RGBA32I, 32, 32, 32, 32, 0, GL_RGBA_INTEGER, GL_INT, GL_INT, false, RequireES<3>, RequireES<3>, NeverSupported);
+ AddRGBAFormat(&map, GL_RGBA32UI, 32, 32, 32, 32, 0, GL_RGBA_INTEGER, GL_UNSIGNED_INT, GL_UNSIGNED_INT, false, RequireES<3>, RequireES<3>, NeverSupported);
AddRGBAFormat(&map, GL_BGRA8_EXT, 8, 8, 8, 8, 0, GL_BGRA_EXT, GL_UNSIGNED_BYTE, GL_UNSIGNED_NORMALIZED, false, RequireExt<&Extensions::textureFormatBGRA8888>, RequireExt<&Extensions::textureFormatBGRA8888>, AlwaysSupported);
AddRGBAFormat(&map, GL_BGRA4_ANGLEX, 4, 4, 4, 4, 0, GL_BGRA_EXT, GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT, GL_UNSIGNED_NORMALIZED, false, RequireExt<&Extensions::textureFormatBGRA8888>, RequireExt<&Extensions::textureFormatBGRA8888>, AlwaysSupported);
@@ -497,13 +609,13 @@ static InternalFormatInfoMap BuildInternalFormatInfoMap()
AddRGBAFormat(&map, GL_RGBA32F, 32, 32, 32, 32, 0, GL_RGBA, GL_FLOAT, GL_FLOAT, false, FloatSupport, FloatRenderableSupport, RequireExt<&Extensions::textureFloatLinear> );
// Depth stencil formats
- // | Internal format | D |S | X | Format | Type | Component type | Supported | Renderable | Filterable |
- AddDepthStencilFormat(&map, GL_DEPTH_COMPONENT16, 16, 0, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT, GL_UNSIGNED_NORMALIZED, RequireES<2, 0>, RequireES<2, 0>, RequireESOrExt<3, 0, &Extensions::depthTextures>);
- AddDepthStencilFormat(&map, GL_DEPTH_COMPONENT24, 24, 0, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, GL_UNSIGNED_NORMALIZED, RequireES<3, 0>, RequireES<3, 0>, RequireESOrExt<3, 0, &Extensions::depthTextures>);
- AddDepthStencilFormat(&map, GL_DEPTH_COMPONENT32F, 32, 0, 0, GL_DEPTH_COMPONENT, GL_FLOAT, GL_FLOAT, RequireES<3, 0>, RequireES<3, 0>, RequireESOrExt<3, 0, &Extensions::depthTextures>);
- AddDepthStencilFormat(&map, GL_DEPTH_COMPONENT32_OES, 32, 0, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, GL_UNSIGNED_NORMALIZED, RequireExtOrExt<&Extensions::depthTextures, &Extensions::depth32>, RequireExtOrExt<&Extensions::depthTextures, &Extensions::depth32>, AlwaysSupported );
- AddDepthStencilFormat(&map, GL_DEPTH24_STENCIL8, 24, 8, 0, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, GL_UNSIGNED_NORMALIZED, RequireESOrExt<3, 0, &Extensions::depthTextures>, RequireESOrExtOrExt<3, 0, &Extensions::depthTextures, &Extensions::packedDepthStencil>, AlwaysSupported );
- AddDepthStencilFormat(&map, GL_DEPTH32F_STENCIL8, 32, 8, 24, GL_DEPTH_STENCIL, GL_FLOAT_32_UNSIGNED_INT_24_8_REV, GL_FLOAT, RequireES<3, 0>, RequireES<3, 0>, AlwaysSupported );
+ // | Internal format | D |S | X | Format | Type | Component type | Supported | Renderable | Filterable |
+ AddDepthStencilFormat(&map, GL_DEPTH_COMPONENT16, 16, 0, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT, GL_UNSIGNED_NORMALIZED, RequireES<2>, RequireES<2>, RequireESOrExt<3, &Extensions::depthTextures>);
+ AddDepthStencilFormat(&map, GL_DEPTH_COMPONENT24, 24, 0, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, GL_UNSIGNED_NORMALIZED, RequireES<3>, RequireES<3>, RequireESOrExt<3, &Extensions::depthTextures>);
+ AddDepthStencilFormat(&map, GL_DEPTH_COMPONENT32F, 32, 0, 0, GL_DEPTH_COMPONENT, GL_FLOAT, GL_FLOAT, RequireES<3>, RequireES<3>, RequireESOrExt<3, &Extensions::depthTextures>);
+ AddDepthStencilFormat(&map, GL_DEPTH_COMPONENT32_OES, 32, 0, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, GL_UNSIGNED_NORMALIZED, RequireExtOrExt<&Extensions::depthTextures, &Extensions::depth32>, RequireExtOrExt<&Extensions::depthTextures, &Extensions::depth32>, AlwaysSupported );
+ AddDepthStencilFormat(&map, GL_DEPTH24_STENCIL8, 24, 8, 0, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, GL_UNSIGNED_NORMALIZED, RequireESOrExt<3, &Extensions::depthTextures>, RequireESOrExtOrExt<3, &Extensions::depthTextures, &Extensions::packedDepthStencil>, AlwaysSupported );
+ AddDepthStencilFormat(&map, GL_DEPTH32F_STENCIL8, 32, 8, 24, GL_DEPTH_STENCIL, GL_FLOAT_32_UNSIGNED_INT_24_8_REV, GL_FLOAT, RequireES<3>, RequireES<3>, AlwaysSupported );
// STENCIL_INDEX8 is special-cased, see around the bottom of the list.
// Luminance alpha formats
@@ -519,36 +631,36 @@ static InternalFormatInfoMap BuildInternalFormatInfoMap()
map.insert(InternalFormatInfoPair(GL_LUMINANCE_ALPHA16F_EXT, LUMAFormat(16, 16, GL_LUMINANCE_ALPHA, GL_HALF_FLOAT, GL_FLOAT, RequireExtAndExt<&Extensions::textureStorage, &Extensions::textureHalfFloat>, NeverSupported, AlwaysSupported)));
// Unsized formats
- // | Internal format | Format | Supported | Renderable | Filterable |
- AddUnsizedFormat(&map, GL_ALPHA, GL_ALPHA, RequireES<2, 0>, NeverSupported, AlwaysSupported);
- AddUnsizedFormat(&map, GL_LUMINANCE, GL_LUMINANCE, RequireES<2, 0>, NeverSupported, AlwaysSupported);
- AddUnsizedFormat(&map, GL_LUMINANCE_ALPHA, GL_LUMINANCE_ALPHA, RequireES<2, 0>, NeverSupported, AlwaysSupported);
- AddUnsizedFormat(&map, GL_RED, GL_RED, RequireESOrExt<3, 0, &Extensions::textureRG>, NeverSupported, AlwaysSupported);
- AddUnsizedFormat(&map, GL_RG, GL_RG, RequireESOrExt<3, 0, &Extensions::textureRG>, NeverSupported, AlwaysSupported);
- AddUnsizedFormat(&map, GL_RGB, GL_RGB, RequireES<2, 0>, RequireES<2, 0>, AlwaysSupported);
- AddUnsizedFormat(&map, GL_RGBA, GL_RGBA, RequireES<2, 0>, RequireES<2, 0>, AlwaysSupported);
- AddUnsizedFormat(&map, GL_RED_INTEGER, GL_RED_INTEGER, RequireES<3, 0>, NeverSupported, NeverSupported );
- AddUnsizedFormat(&map, GL_RG_INTEGER, GL_RG_INTEGER, RequireES<3, 0>, NeverSupported, NeverSupported );
- AddUnsizedFormat(&map, GL_RGB_INTEGER, GL_RGB_INTEGER, RequireES<3, 0>, NeverSupported, NeverSupported );
- AddUnsizedFormat(&map, GL_RGBA_INTEGER, GL_RGBA_INTEGER, RequireES<3, 0>, NeverSupported, NeverSupported );
- AddUnsizedFormat(&map, GL_BGRA_EXT, GL_BGRA_EXT, RequireExt<&Extensions::textureFormatBGRA8888>, RequireExt<&Extensions::textureFormatBGRA8888>, AlwaysSupported);
- AddUnsizedFormat(&map, GL_DEPTH_COMPONENT, GL_DEPTH_COMPONENT, RequireES<2, 0>, RequireES<2, 0>, AlwaysSupported);
- AddUnsizedFormat(&map, GL_DEPTH_STENCIL, GL_DEPTH_STENCIL, RequireESOrExt<3, 0, &Extensions::packedDepthStencil>, RequireESOrExt<3, 0, &Extensions::packedDepthStencil>, AlwaysSupported);
- AddUnsizedFormat(&map, GL_SRGB_EXT, GL_RGB, RequireESOrExt<3, 0, &Extensions::sRGB>, NeverSupported, AlwaysSupported);
- AddUnsizedFormat(&map, GL_SRGB_ALPHA_EXT, GL_RGBA, RequireESOrExt<3, 0, &Extensions::sRGB>, RequireESOrExt<3, 0, &Extensions::sRGB>, AlwaysSupported);
+ // | Internal format | Format | Supported | Renderable | Filterable |
+ AddUnsizedFormat(&map, GL_ALPHA, GL_ALPHA, RequireES<2>, NeverSupported, AlwaysSupported);
+ AddUnsizedFormat(&map, GL_LUMINANCE, GL_LUMINANCE, RequireES<2>, NeverSupported, AlwaysSupported);
+ AddUnsizedFormat(&map, GL_LUMINANCE_ALPHA, GL_LUMINANCE_ALPHA, RequireES<2>, NeverSupported, AlwaysSupported);
+ AddUnsizedFormat(&map, GL_RED, GL_RED, RequireESOrExt<3, &Extensions::textureRG>, NeverSupported, AlwaysSupported);
+ AddUnsizedFormat(&map, GL_RG, GL_RG, RequireESOrExt<3, &Extensions::textureRG>, NeverSupported, AlwaysSupported);
+ AddUnsizedFormat(&map, GL_RGB, GL_RGB, RequireES<2>, RequireES<2>, AlwaysSupported);
+ AddUnsizedFormat(&map, GL_RGBA, GL_RGBA, RequireES<2>, RequireES<2>, AlwaysSupported);
+ AddUnsizedFormat(&map, GL_RED_INTEGER, GL_RED_INTEGER, RequireES<3>, NeverSupported, NeverSupported );
+ AddUnsizedFormat(&map, GL_RG_INTEGER, GL_RG_INTEGER, RequireES<3>, NeverSupported, NeverSupported );
+ AddUnsizedFormat(&map, GL_RGB_INTEGER, GL_RGB_INTEGER, RequireES<3>, NeverSupported, NeverSupported );
+ AddUnsizedFormat(&map, GL_RGBA_INTEGER, GL_RGBA_INTEGER, RequireES<3>, NeverSupported, NeverSupported );
+ AddUnsizedFormat(&map, GL_BGRA_EXT, GL_BGRA_EXT, RequireExt<&Extensions::textureFormatBGRA8888>, RequireExt<&Extensions::textureFormatBGRA8888>, AlwaysSupported);
+ AddUnsizedFormat(&map, GL_DEPTH_COMPONENT, GL_DEPTH_COMPONENT, RequireES<2>, RequireES<2>, AlwaysSupported);
+ AddUnsizedFormat(&map, GL_DEPTH_STENCIL, GL_DEPTH_STENCIL, RequireESOrExt<3, &Extensions::packedDepthStencil>, RequireESOrExt<3, &Extensions::packedDepthStencil>, AlwaysSupported);
+ AddUnsizedFormat(&map, GL_SRGB_EXT, GL_RGB, RequireESOrExt<3, &Extensions::sRGB>, NeverSupported, AlwaysSupported);
+ AddUnsizedFormat(&map, GL_SRGB_ALPHA_EXT, GL_RGBA, RequireESOrExt<3, &Extensions::sRGB>, RequireESOrExt<3, &Extensions::sRGB>, AlwaysSupported);
// Compressed formats, From ES 3.0.1 spec, table 3.16
- // | Internal format | |W |H | BS |CC| Format | Type | SRGB | Supported | Renderable | Filterable |
- map.insert(InternalFormatInfoPair(GL_COMPRESSED_R11_EAC, CompressedFormat(4, 4, 64, 1, GL_COMPRESSED_R11_EAC, GL_UNSIGNED_BYTE, false, RequireES<3, 0>, NeverSupported, AlwaysSupported)));
- map.insert(InternalFormatInfoPair(GL_COMPRESSED_SIGNED_R11_EAC, CompressedFormat(4, 4, 64, 1, GL_COMPRESSED_SIGNED_R11_EAC, GL_UNSIGNED_BYTE, false, RequireES<3, 0>, NeverSupported, AlwaysSupported)));
- map.insert(InternalFormatInfoPair(GL_COMPRESSED_RG11_EAC, CompressedFormat(4, 4, 128, 2, GL_COMPRESSED_RG11_EAC, GL_UNSIGNED_BYTE, false, RequireES<3, 0>, NeverSupported, AlwaysSupported)));
- map.insert(InternalFormatInfoPair(GL_COMPRESSED_SIGNED_RG11_EAC, CompressedFormat(4, 4, 128, 2, GL_COMPRESSED_SIGNED_RG11_EAC, GL_UNSIGNED_BYTE, false, RequireES<3, 0>, NeverSupported, AlwaysSupported)));
- map.insert(InternalFormatInfoPair(GL_COMPRESSED_RGB8_ETC2, CompressedFormat(4, 4, 64, 3, GL_COMPRESSED_RGB8_ETC2, GL_UNSIGNED_BYTE, false, RequireES<3, 0>, NeverSupported, AlwaysSupported)));
- map.insert(InternalFormatInfoPair(GL_COMPRESSED_SRGB8_ETC2, CompressedFormat(4, 4, 64, 3, GL_COMPRESSED_SRGB8_ETC2, GL_UNSIGNED_BYTE, true, RequireES<3, 0>, NeverSupported, AlwaysSupported)));
- map.insert(InternalFormatInfoPair(GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, CompressedFormat(4, 4, 64, 3, GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, GL_UNSIGNED_BYTE, false, RequireES<3, 0>, NeverSupported, AlwaysSupported)));
- map.insert(InternalFormatInfoPair(GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, CompressedFormat(4, 4, 64, 3, GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, GL_UNSIGNED_BYTE, true, RequireES<3, 0>, NeverSupported, AlwaysSupported)));
- map.insert(InternalFormatInfoPair(GL_COMPRESSED_RGBA8_ETC2_EAC, CompressedFormat(4, 4, 128, 4, GL_COMPRESSED_RGBA8_ETC2_EAC, GL_UNSIGNED_BYTE, false, RequireES<3, 0>, NeverSupported, AlwaysSupported)));
- map.insert(InternalFormatInfoPair(GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, CompressedFormat(4, 4, 128, 4, GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, GL_UNSIGNED_BYTE, true, RequireES<3, 0>, NeverSupported, AlwaysSupported)));
+ // | Internal format | |W |H | BS |CC| Format | Type | SRGB | Supported | Renderable | Filterable |
+ map.insert(InternalFormatInfoPair(GL_COMPRESSED_R11_EAC, CompressedFormat(4, 4, 64, 1, GL_COMPRESSED_R11_EAC, GL_UNSIGNED_BYTE, false, RequireES<3>, NeverSupported, AlwaysSupported)));
+ map.insert(InternalFormatInfoPair(GL_COMPRESSED_SIGNED_R11_EAC, CompressedFormat(4, 4, 64, 1, GL_COMPRESSED_SIGNED_R11_EAC, GL_UNSIGNED_BYTE, false, RequireES<3>, NeverSupported, AlwaysSupported)));
+ map.insert(InternalFormatInfoPair(GL_COMPRESSED_RG11_EAC, CompressedFormat(4, 4, 128, 2, GL_COMPRESSED_RG11_EAC, GL_UNSIGNED_BYTE, false, RequireES<3>, NeverSupported, AlwaysSupported)));
+ map.insert(InternalFormatInfoPair(GL_COMPRESSED_SIGNED_RG11_EAC, CompressedFormat(4, 4, 128, 2, GL_COMPRESSED_SIGNED_RG11_EAC, GL_UNSIGNED_BYTE, false, RequireES<3>, NeverSupported, AlwaysSupported)));
+ map.insert(InternalFormatInfoPair(GL_COMPRESSED_RGB8_ETC2, CompressedFormat(4, 4, 64, 3, GL_COMPRESSED_RGB8_ETC2, GL_UNSIGNED_BYTE, false, RequireES<3>, NeverSupported, AlwaysSupported)));
+ map.insert(InternalFormatInfoPair(GL_COMPRESSED_SRGB8_ETC2, CompressedFormat(4, 4, 64, 3, GL_COMPRESSED_SRGB8_ETC2, GL_UNSIGNED_BYTE, true, RequireES<3>, NeverSupported, AlwaysSupported)));
+ map.insert(InternalFormatInfoPair(GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, CompressedFormat(4, 4, 64, 3, GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, GL_UNSIGNED_BYTE, false, RequireES<3>, NeverSupported, AlwaysSupported)));
+ map.insert(InternalFormatInfoPair(GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, CompressedFormat(4, 4, 64, 3, GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, GL_UNSIGNED_BYTE, true, RequireES<3>, NeverSupported, AlwaysSupported)));
+ map.insert(InternalFormatInfoPair(GL_COMPRESSED_RGBA8_ETC2_EAC, CompressedFormat(4, 4, 128, 4, GL_COMPRESSED_RGBA8_ETC2_EAC, GL_UNSIGNED_BYTE, false, RequireES<3>, NeverSupported, AlwaysSupported)));
+ map.insert(InternalFormatInfoPair(GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, CompressedFormat(4, 4, 128, 4, GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, GL_UNSIGNED_BYTE, true, RequireES<3>, NeverSupported, AlwaysSupported)));
// From GL_EXT_texture_compression_dxt1
// | Internal format | |W |H | BS |CC| Format | Type | SRGB | Supported | Renderable | Filterable |
@@ -600,11 +712,11 @@ static InternalFormatInfoMap BuildInternalFormatInfoMap()
// - Multisampled buffer are disallowed for non-normalized integer component types and we want to support it for STENCIL_INDEX8
// - All other stencil formats (all depth-stencil) are either float or normalized
// - It affects only validation of internalformat in RenderbufferStorageMultisample.
- // | Internal format |D |S |X | Format | Type | Component type | Supported | Renderable | Filterable |
- AddDepthStencilFormat(&map, GL_STENCIL_INDEX8, 0, 8, 0, GL_STENCIL, GL_UNSIGNED_BYTE, GL_UNSIGNED_NORMALIZED, RequireES<2, 0>, RequireES<2, 0>, NeverSupported);
+ // | Internal format |D |S |X | Format | Type | Component type | Supported | Renderable | Filterable |
+ AddDepthStencilFormat(&map, GL_STENCIL_INDEX8, 0, 8, 0, GL_STENCIL, GL_UNSIGNED_BYTE, GL_UNSIGNED_NORMALIZED, RequireES<2>, RequireES<2>, NeverSupported);
// From GL_ANGLE_lossy_etc_decode
- map.insert(InternalFormatInfoPair(GL_ETC1_RGB8_LOSSY_DECODE_ANGLE, CompressedFormat(4, 4, 64, 3, GL_ETC1_RGB8_LOSSY_DECODE_ANGLE, GL_UNSIGNED_BYTE, false, RequireExt<&Extensions::lossyETCDecode>, NeverSupported, AlwaysSupported)));
+ map.insert(InternalFormatInfoPair(GL_ETC1_RGB8_LOSSY_DECODE_ANGLE, CompressedFormat(4, 4, 64, 3, GL_ETC1_RGB8_OES, GL_UNSIGNED_BYTE, false, RequireExt<&Extensions::lossyETCDecode>, NeverSupported, AlwaysSupported)));
// From GL_EXT_texture_norm16
// | Internal format | R | G | B | A |S | Format | Type | Component type | SRGB | Texture supported | Renderable | Filterable |
@@ -714,23 +826,28 @@ const InternalFormat &GetInternalFormatInfo(GLenum internalFormat)
else
{
static const InternalFormat defaultInternalFormat;
+ UNREACHABLE();
return defaultInternalFormat;
}
}
-ErrorOrResult<GLuint> InternalFormat::computeRowPitch(GLsizei width,
- GLint alignment,
- GLint rowLength) const
+gl::ErrorOrResult<GLuint> InternalFormat::computeRowPitch(GLenum formatType,
+ GLsizei width,
+ GLint alignment,
+ GLint rowLength) const
{
// Compressed images do not use pack/unpack parameters.
if (compressed)
{
ASSERT(rowLength == 0);
- return computeCompressedImageSize(Extents(width, 1, 1));
+ return computeCompressedImageSize(formatType, gl::Extents(width, 1, 1));
}
+ const auto &typeInfo = GetTypeInfo(formatType);
+ CheckedNumeric<GLuint> checkedComponents(typeInfo.specialInterpretation ? 1u : componentCount);
+ CheckedNumeric<GLuint> checkedTypeBytes(typeInfo.bytes);
CheckedNumeric<GLuint> checkedWidth(rowLength > 0 ? rowLength : width);
- CheckedNumeric<GLuint> checkedRowBytes = checkedWidth * pixelBytes;
+ CheckedNumeric<GLuint> checkedRowBytes = checkedWidth * checkedComponents * checkedTypeBytes;
ASSERT(alignment > 0 && isPow2(alignment));
CheckedNumeric<GLuint> checkedAlignment(alignment);
@@ -739,31 +856,26 @@ ErrorOrResult<GLuint> InternalFormat::computeRowPitch(GLsizei width,
return aligned.ValueOrDie();
}
-ErrorOrResult<GLuint> InternalFormat::computeDepthPitch(GLsizei height,
- GLint imageHeight,
- GLuint rowPitch)
+gl::ErrorOrResult<GLuint> InternalFormat::computeDepthPitch(GLenum formatType,
+ GLsizei width,
+ GLsizei height,
+ GLint alignment,
+ GLint rowLength,
+ GLint imageHeight) const
{
GLuint rows =
(imageHeight > 0 ? static_cast<GLuint>(imageHeight) : static_cast<GLuint>(height));
- CheckedNumeric<GLuint> checkedRowPitch(rowPitch);
+ GLuint rowPitch = 0;
+ ANGLE_TRY_RESULT(computeRowPitch(formatType, width, alignment, rowLength), rowPitch);
+ CheckedNumeric<GLuint> checkedRowPitch(rowPitch);
auto depthPitch = checkedRowPitch * rows;
ANGLE_TRY_CHECKED_MATH(depthPitch);
return depthPitch.ValueOrDie();
}
-ErrorOrResult<GLuint> InternalFormat::computeDepthPitch(GLsizei width,
- GLsizei height,
- GLint alignment,
- GLint rowLength,
- GLint imageHeight) const
-{
- GLuint rowPitch = 0;
- ANGLE_TRY_RESULT(computeRowPitch(width, alignment, rowLength), rowPitch);
- return computeDepthPitch(height, imageHeight, rowPitch);
-}
-
-ErrorOrResult<GLuint> InternalFormat::computeCompressedImageSize(const Extents &size) const
+gl::ErrorOrResult<GLuint> InternalFormat::computeCompressedImageSize(GLenum formatType,
+ const gl::Extents &size) const
{
CheckedNumeric<GLuint> checkedWidth(size.width);
CheckedNumeric<GLuint> checkedHeight(size.height);
@@ -779,19 +891,21 @@ ErrorOrResult<GLuint> InternalFormat::computeCompressedImageSize(const Extents &
return bytes.ValueOrDie();
}
-ErrorOrResult<GLuint> InternalFormat::computeSkipBytes(GLuint rowPitch,
- GLuint depthPitch,
- const PixelStoreStateBase &state,
- bool is3D) const
+gl::ErrorOrResult<GLuint> InternalFormat::computeSkipBytes(GLuint rowPitch,
+ GLuint depthPitch,
+ GLint skipImages,
+ GLint skipRows,
+ GLint skipPixels,
+ bool applySkipImages) const
{
CheckedNumeric<GLuint> checkedRowPitch(rowPitch);
CheckedNumeric<GLuint> checkedDepthPitch(depthPitch);
- CheckedNumeric<GLuint> checkedSkipImages(static_cast<GLuint>(state.skipImages));
- CheckedNumeric<GLuint> checkedSkipRows(static_cast<GLuint>(state.skipRows));
- CheckedNumeric<GLuint> checkedSkipPixels(static_cast<GLuint>(state.skipPixels));
+ CheckedNumeric<GLuint> checkedSkipImages(static_cast<GLuint>(skipImages));
+ CheckedNumeric<GLuint> checkedSkipRows(static_cast<GLuint>(skipRows));
+ CheckedNumeric<GLuint> checkedSkipPixels(static_cast<GLuint>(skipPixels));
CheckedNumeric<GLuint> checkedPixelBytes(pixelBytes);
auto checkedSkipImagesBytes = checkedSkipImages * checkedDepthPitch;
- if (!is3D)
+ if (!applySkipImages)
{
checkedSkipImagesBytes = 0;
}
@@ -801,48 +915,34 @@ ErrorOrResult<GLuint> InternalFormat::computeSkipBytes(GLuint rowPitch,
return skipBytes.ValueOrDie();
}
-ErrorOrResult<GLuint> InternalFormat::computePackUnpackEndByte(const Extents &size,
- const PixelStoreStateBase &state,
- bool is3D) const
+gl::ErrorOrResult<GLuint> InternalFormat::computeUnpackSize(
+ GLenum formatType,
+ const gl::Extents &size,
+ const gl::PixelUnpackState &unpack) const
{
- GLuint rowPitch = 0;
- ANGLE_TRY_RESULT(computeRowPitch(size.width, state.alignment, state.rowLength),
- rowPitch);
-
- GLuint depthPitch = 0;
- if (is3D)
- {
- ANGLE_TRY_RESULT(computeDepthPitch(size.height, state.imageHeight, rowPitch), depthPitch);
- }
-
- CheckedNumeric<GLuint> checkedCopyBytes = 0;
+ // Compressed images do not use unpack parameters.
if (compressed)
{
- ANGLE_TRY_RESULT(computeCompressedImageSize(size), checkedCopyBytes);
+ return computeCompressedImageSize(formatType, size);
}
- else if (size.height != 0 && (!is3D || size.depth != 0))
- {
- CheckedNumeric<GLuint> bytes = pixelBytes;
- checkedCopyBytes += size.width * bytes;
- CheckedNumeric<GLuint> heightMinusOne = size.height - 1;
- checkedCopyBytes += heightMinusOne * rowPitch;
+ base::CheckedNumeric<GLuint> checkedGroups(unpack.rowLength > 0 ? unpack.rowLength
+ : size.width);
+ base::CheckedNumeric<GLuint> checkedRows(unpack.imageHeight > 0 ? unpack.imageHeight
+ : size.height);
- if (is3D)
- {
- CheckedNumeric<GLuint> depthMinusOne = size.depth - 1;
- checkedCopyBytes += depthMinusOne * depthPitch;
- }
- }
+ // Compute the groups of all the layers in (0,depth-1)
+ auto layerGroups = checkedGroups * checkedRows * (size.depth - 1);
+
+ // Compute the groups in the last layer (for non-3D textures, the only one)
+ auto lastLayerGroups = checkedGroups * (size.height - 1) + size.width;
- CheckedNumeric<GLuint> checkedSkipBytes = 0;
- ANGLE_TRY_RESULT(computeSkipBytes(rowPitch, depthPitch, state, is3D),
- checkedSkipBytes);
+ // The total size is the sum times the bytes per pixel.
+ auto totalSize = (layerGroups + lastLayerGroups) * pixelBytes;
- CheckedNumeric<GLuint> endByte = checkedCopyBytes + checkedSkipBytes;
+ ANGLE_TRY_CHECKED_MATH(totalSize);
- ANGLE_TRY_CHECKED_MATH(endByte);
- return endByte.ValueOrDie();
+ return totalSize.ValueOrDie();
}
GLenum GetSizedInternalFormat(GLenum internalFormat, GLenum type)
diff --git a/gfx/angle/src/libANGLE/formatutils.h b/gfx/angle/src/libANGLE/formatutils.h
index d6f9402d4..0ad5bd0ab 100755
--- a/gfx/angle/src/libANGLE/formatutils.h
+++ b/gfx/angle/src/libANGLE/formatutils.h
@@ -15,7 +15,6 @@
#include "angle_gl.h"
#include "libANGLE/Caps.h"
#include "libANGLE/Error.h"
-#include "libANGLE/Version.h"
#include "libANGLE/angletypes.h"
namespace gl
@@ -48,32 +47,29 @@ struct InternalFormat
{
InternalFormat();
- ErrorOrResult<GLuint> computeRowPitch(GLsizei width,
- GLint alignment,
- GLint rowLength) const;
- static ErrorOrResult<GLuint> computeDepthPitch(GLsizei height,
- GLint imageHeight,
- GLuint rowPitch);
- ErrorOrResult<GLuint> computeDepthPitch(GLsizei width,
- GLsizei height,
- GLint alignment,
- GLint rowLength,
- GLint imageHeight) const;
-
- ErrorOrResult<GLuint> computeCompressedImageSize(const Extents &size) const;
-
- ErrorOrResult<GLuint> computeSkipBytes(GLuint rowPitch,
- GLuint depthPitch,
- const PixelStoreStateBase &state,
- bool is3D) const;
-
- ErrorOrResult<GLuint> computePackUnpackEndByte(const Extents &size,
- const PixelStoreStateBase &state,
- bool is3D) const;
+ gl::ErrorOrResult<GLuint> computeRowPitch(GLenum formatType,
+ GLsizei width,
+ GLint alignment,
+ GLint rowLength) const;
+ gl::ErrorOrResult<GLuint> computeDepthPitch(GLenum formatType,
+ GLsizei width,
+ GLsizei height,
+ GLint alignment,
+ GLint rowLength,
+ GLint imageHeight) const;
+ gl::ErrorOrResult<GLuint> computeCompressedImageSize(GLenum formatType,
+ const gl::Extents &size) const;
+ gl::ErrorOrResult<GLuint> computeSkipBytes(GLuint rowPitch,
+ GLuint depthPitch,
+ GLint skipImages,
+ GLint skipRows,
+ GLint skipPixels,
+ bool applySkipImages) const;
+ gl::ErrorOrResult<GLuint> computeUnpackSize(GLenum formatType,
+ const gl::Extents &size,
+ const gl::PixelUnpackState &unpack) const;
bool isLUMA() const;
- GLenum getReadPixelsFormat() const;
- GLenum getReadPixelsType() const;
bool operator==(const InternalFormat &other) const;
bool operator!=(const InternalFormat &other) const;
@@ -106,7 +102,7 @@ struct InternalFormat
GLenum componentType;
GLenum colorEncoding;
- typedef bool (*SupportCheckFunction)(const Version &, const Extensions &);
+ typedef bool (*SupportCheckFunction)(GLuint, const Extensions &);
SupportCheckFunction textureSupport;
SupportCheckFunction renderSupport;
SupportCheckFunction filterSupport;
@@ -271,7 +267,7 @@ enum VertexFormatType
VERTEX_FORMAT_UINT210_INT,
};
-typedef std::vector<VertexFormatType> InputLayout;
+typedef std::vector<gl::VertexFormatType> InputLayout;
struct VertexFormat : angle::NonCopyable
{
@@ -288,14 +284,6 @@ VertexFormatType GetVertexFormatType(const VertexAttribute &attrib);
VertexFormatType GetVertexFormatType(const VertexAttribute &attrib, GLenum currentValueType);
const VertexFormat &GetVertexFormatFromType(VertexFormatType vertexFormatType);
-// Implemented in format_map_autogen.cpp
-bool ValidES3Format(GLenum format);
-bool ValidES3Type(GLenum type);
-bool ValidES3FormatCombination(GLenum format, GLenum type, GLenum internalFormat);
-
-// Implemented in es3_copy_conversion_table_autogen.cpp
-bool ValidES3CopyConversion(GLenum textureFormat, GLenum framebufferFormat);
-
} // namespace gl
#endif // LIBANGLE_FORMATUTILS_H_
diff --git a/gfx/angle/src/libANGLE/gen_copy_conversion_table.py b/gfx/angle/src/libANGLE/gen_copy_conversion_table.py
deleted file mode 100644
index f2c9603d5..000000000
--- a/gfx/angle/src/libANGLE/gen_copy_conversion_table.py
+++ /dev/null
@@ -1,91 +0,0 @@
-#!/usr/bin/python
-# Copyright 2016 The ANGLE Project Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-#
-# gen_copy_conversion_table.py:
-# Code generation for ES3 valid copy conversions table format map.
-
-from datetime import date
-import sys
-
-sys.path.append('renderer')
-import angle_format
-
-template_cpp = """// GENERATED FILE - DO NOT EDIT.
-// Generated by {script_name} using data from {data_source_name}.
-//
-// Copyright {copyright_year} The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// format_map:
-// Determining the sized internal format from a (format,type) pair.
-// Also check es3 format combinations for validity.
-
-#include "angle_gl.h"
-#include "common/debug.h"
-
-namespace gl
-{{
-
-bool ValidES3CopyConversion(GLenum textureFormat, GLenum framebufferFormat)
-{{
- switch (textureFormat)
- {{
-{texture_format_cases} default:
- break;
- }}
-
- return false;
-}}
-
-}} // namespace gl
-"""
-
-template_format_case = """ case {texture_format}:
- switch (framebufferFormat)
- {{
-{framebuffer_format_cases} return true;
- default:
- break;
- }}
- break;
-
-"""
-
-template_simple_case = """ case {key}:
-"""
-
-def parse_texture_format_case(texture_format, framebuffer_formats):
- framebuffer_format_cases = ""
- for framebuffer_format in sorted(framebuffer_formats):
- framebuffer_format_cases += template_simple_case.format(key = framebuffer_format)
- return template_format_case.format(
- texture_format = texture_format, framebuffer_format_cases = framebuffer_format_cases)
-
-data_source_name = 'es3_copy_conversion_formats.json'
-
-json_data = angle_format.load_json(data_source_name)
-
-format_map = {}
-
-for description, data in json_data.iteritems():
- for texture_format, framebuffer_format in data:
- if texture_format not in format_map:
- format_map[texture_format] = []
- format_map[texture_format] += [ framebuffer_format ]
-
-texture_format_cases = ""
-
-for texture_format, framebuffer_formats in sorted(format_map.iteritems()):
- texture_format_cases += parse_texture_format_case(texture_format, framebuffer_formats)
-
-with open('es3_copy_conversion_table_autogen.cpp', 'wt') as out_file:
- output_cpp = template_cpp.format(
- script_name = sys.argv[0],
- data_source_name = data_source_name,
- copyright_year = date.today().year,
- texture_format_cases = texture_format_cases)
- out_file.write(output_cpp)
- out_file.close()
diff --git a/gfx/angle/src/libANGLE/gen_format_map.py b/gfx/angle/src/libANGLE/gen_format_map.py
deleted file mode 100644
index b67f42784..000000000
--- a/gfx/angle/src/libANGLE/gen_format_map.py
+++ /dev/null
@@ -1,187 +0,0 @@
-#!/usr/bin/python
-# Copyright 2016 The ANGLE Project Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-#
-# gen_format_map.py:
-# Code generation for GL format map. The format map matches between
-# {format,type} and internal format.
-
-from datetime import date
-import sys
-
-sys.path.append('renderer')
-import angle_format
-
-template_cpp = """// GENERATED FILE - DO NOT EDIT.
-// Generated by {script_name} using data from {data_source_name}.
-// ES3 format info from {es3_data_source_name}.
-//
-// Copyright {copyright_year} The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// format_map:
-// Determining the sized internal format from a (format,type) pair.
-// Also check es3 format combinations for validity.
-
-#include "angle_gl.h"
-#include "common/debug.h"
-
-namespace gl
-{{
-
-GLenum GetSizedFormatInternal(GLenum format, GLenum type)
-{{
- switch (format)
- {{
-{format_cases} case GL_NONE:
- return GL_NONE;
-
- default:
- break;
- }}
-
- return GL_NONE;
-}}
-
-bool ValidES3Format(GLenum format)
-{{
- switch (format)
- {{
-{es3_format_cases} return true;
-
- default:
- return false;
- }}
-}}
-
-bool ValidES3Type(GLenum type)
-{{
- switch (type)
- {{
-{es3_type_cases} return true;
-
- default:
- return false;
- }}
-}}
-
-bool ValidES3FormatCombination(GLenum format, GLenum type, GLenum internalFormat)
-{{
- ASSERT(ValidES3Format(format) && ValidES3Type(type));
-
- switch (format)
- {{
-{es3_combo_cases} default:
- UNREACHABLE();
- break;
- }}
-
- return false;
-}}
-
-}} // namespace gl
-"""
-
-template_format_case = """ case {format}:
- switch (type)
- {{
-{type_cases} default:
- break;
- }}
- break;
-
-"""
-
-template_simple_case = """ case {key}:
- return {result};
-"""
-
-template_es3_combo_type_case = """ case {type}:
- {{
- switch (internalFormat)
- {{
-{internal_format_cases} return true;
- default:
- break;
- }}
- break;
- }}
-"""
-
-def parse_type_case(type, result):
- return template_simple_case.format(
- key = type, result = result)
-
-def parse_format_case(format, type_map):
- type_cases = ""
- for type, internal_format in sorted(type_map.iteritems()):
- type_cases += parse_type_case(type, internal_format)
- return template_format_case.format(
- format = format, type_cases = type_cases)
-
-input_script = 'format_map_data.json'
-
-format_map = angle_format.load_json(input_script)
-
-format_cases = ""
-
-for format, type_map in sorted(format_map.iteritems()):
- format_cases += parse_format_case(format, type_map)
-
-combo_data_file = 'es3_format_type_combinations.json'
-es3_combo_data = angle_format.load_json(combo_data_file)
-combo_data = [combo for sublist in es3_combo_data.values() for combo in sublist]
-
-types = set()
-formats = set()
-combos = {}
-
-for internal_format, format, type in combo_data:
- types.update([type])
- formats.update([format])
- if format not in combos:
- combos[format] = {}
- if type not in combos[format]:
- combos[format][type] = [internal_format]
- else:
- combos[format][type] += [internal_format]
-
-es3_format_cases = ""
-
-for format in sorted(formats):
- es3_format_cases += " case " + format + ":\n"
-
-es3_type_cases = ""
-
-for type in sorted(types):
- es3_type_cases += " case " + type + ":\n"
-
-es3_combo_cases = ""
-
-for format, type_combos in combos.iteritems():
- this_type_cases = ""
- for type, combos in type_combos.iteritems():
- internal_format_cases = ""
- for internal_format in combos:
- internal_format_cases += " case " + internal_format + ":\n"
-
- this_type_cases += template_es3_combo_type_case.format(
- type = type, internal_format_cases = internal_format_cases)
-
- es3_combo_cases += template_format_case.format(
- format = format, type_cases = this_type_cases)
-
-with open('format_map_autogen.cpp', 'wt') as out_file:
- output_cpp = template_cpp.format(
- script_name = sys.argv[0],
- data_source_name = input_script,
- es3_data_source_name = combo_data_file,
- copyright_year = date.today().year,
- format_cases = format_cases,
- es3_format_cases = es3_format_cases,
- es3_type_cases = es3_type_cases,
- es3_combo_cases = es3_combo_cases)
- out_file.write(output_cpp)
- out_file.close()
diff --git a/gfx/angle/src/libANGLE/moz.build b/gfx/angle/src/libANGLE/moz.build
index e127ccce1..7d12a1ca6 100755
--- a/gfx/angle/src/libANGLE/moz.build
+++ b/gfx/angle/src/libANGLE/moz.build
@@ -29,13 +29,11 @@ UNIFIED_SOURCES += [
'../compiler/preprocessor/Preprocessor.cpp',
'../compiler/preprocessor/Token.cpp',
'../compiler/preprocessor/Tokenizer.cpp',
- '../compiler/translator/AddAndTrueToLoopCondition.cpp',
'../compiler/translator/AddDefaultReturnStatements.cpp',
'../compiler/translator/ArrayReturnValueToOutParameter.cpp',
'../compiler/translator/ASTMetadataHLSL.cpp',
'../compiler/translator/blocklayout.cpp',
'../compiler/translator/blocklayoutHLSL.cpp',
- '../compiler/translator/BreakVariableAliasingInInnerLoops.cpp',
'../compiler/translator/BuiltInFunctionEmulator.cpp',
'../compiler/translator/BuiltInFunctionEmulatorGLSL.cpp',
'../compiler/translator/BuiltInFunctionEmulatorHLSL.cpp',
@@ -43,8 +41,11 @@ UNIFIED_SOURCES += [
'../compiler/translator/CallDAG.cpp',
'../compiler/translator/CodeGen.cpp',
'../compiler/translator/Compiler.cpp',
- '../compiler/translator/ConstantUnion.cpp',
'../compiler/translator/DeferGlobalInitializers.cpp',
+ '../compiler/translator/depgraph/DependencyGraph.cpp',
+ '../compiler/translator/depgraph/DependencyGraphBuilder.cpp',
+ '../compiler/translator/depgraph/DependencyGraphOutput.cpp',
+ '../compiler/translator/depgraph/DependencyGraphTraverse.cpp',
'../compiler/translator/Diagnostics.cpp',
'../compiler/translator/DirectiveHandler.cpp',
'../compiler/translator/EmulatePrecision.cpp',
@@ -71,27 +72,28 @@ UNIFIED_SOURCES += [
'../compiler/translator/ParseContext.cpp',
'../compiler/translator/PoolAlloc.cpp',
'../compiler/translator/PruneEmptyDeclarations.cpp',
- '../compiler/translator/QualifierTypes.cpp',
'../compiler/translator/RecordConstantPrecision.cpp',
'../compiler/translator/RegenerateStructNames.cpp',
'../compiler/translator/RemoveDynamicIndexing.cpp',
- '../compiler/translator/RemoveInvariantDeclaration.cpp',
'../compiler/translator/RemovePow.cpp',
'../compiler/translator/RemoveSwitchFallThrough.cpp',
'../compiler/translator/RewriteDoWhile.cpp',
'../compiler/translator/RewriteElseBlocks.cpp',
- '../compiler/translator/RewriteUnaryMinusOperatorInt.cpp',
+ '../compiler/translator/RewriteTexelFetchOffset.cpp',
'../compiler/translator/ScalarizeVecAndMatConstructorArgs.cpp',
'../compiler/translator/SearchSymbol.cpp',
'../compiler/translator/SeparateArrayInitialization.cpp',
'../compiler/translator/SeparateDeclarations.cpp',
'../compiler/translator/SeparateExpressionsReturningArrays.cpp',
+ '../compiler/translator/ShaderLang.cpp',
'../compiler/translator/ShaderVars.cpp',
'../compiler/translator/SimplifyLoopConditions.cpp',
'../compiler/translator/SplitSequenceOperator.cpp',
'../compiler/translator/StructureHLSL.cpp',
'../compiler/translator/SymbolTable.cpp',
'../compiler/translator/TextureFunctionHLSL.cpp',
+ '../compiler/translator/timing/RestrictFragmentShaderTiming.cpp',
+ '../compiler/translator/timing/RestrictVertexShaderTiming.cpp',
'../compiler/translator/TranslatorESSL.cpp',
'../compiler/translator/TranslatorGLSL.cpp',
'../compiler/translator/TranslatorHLSL.cpp',
@@ -99,7 +101,6 @@ UNIFIED_SOURCES += [
'../compiler/translator/UnfoldShortCircuitAST.cpp',
'../compiler/translator/UnfoldShortCircuitToIf.cpp',
'../compiler/translator/UniformHLSL.cpp',
- '../compiler/translator/UseInterfaceBlockFields.cpp',
'../compiler/translator/util.cpp',
'../compiler/translator/UtilsHLSL.cpp',
'../compiler/translator/ValidateGlobalInitializer.cpp',
@@ -128,9 +129,7 @@ UNIFIED_SOURCES += [
'Debug.cpp',
'Device.cpp',
'Error.cpp',
- 'es3_copy_conversion_table_autogen.cpp',
'Fence.cpp',
- 'format_map_autogen.cpp',
'formatutils.cpp',
'Framebuffer.cpp',
'FramebufferAttachment.cpp',
@@ -144,7 +143,6 @@ UNIFIED_SOURCES += [
'Program.cpp',
'Query.cpp',
'queryconversions.cpp',
- 'queryutils.cpp',
'Renderbuffer.cpp',
'renderer/ContextImpl.cpp',
'renderer/d3d/BufferD3D.cpp',
@@ -184,15 +182,14 @@ UNIFIED_SOURCES += [
'renderer/d3d/ShaderD3D.cpp',
'renderer/d3d/ShaderExecutableD3D.cpp',
'renderer/d3d/SurfaceD3D.cpp',
- 'renderer/d3d/SwapChainD3D.cpp',
'renderer/d3d/TextureD3D.cpp',
'renderer/d3d/VaryingPacking.cpp',
'renderer/d3d/VertexBuffer.cpp',
'renderer/d3d/VertexDataManager.cpp',
'renderer/DeviceImpl.cpp',
'renderer/DisplayImpl.cpp',
- 'renderer/driver_utils.cpp',
- 'renderer/Format_table_autogen.cpp',
+ 'renderer/Format.cpp',
+ 'renderer/Format_autogen.cpp',
'renderer/gl/BlitGL.cpp',
'renderer/gl/BufferGL.cpp',
'renderer/gl/CompilerGL.cpp',
@@ -216,7 +213,6 @@ UNIFIED_SOURCES += [
'renderer/gl/TextureGL.cpp',
'renderer/gl/TransformFeedbackGL.cpp',
'renderer/gl/VertexArrayGL.cpp',
- 'renderer/gl/wgl/D3DTextureSurfaceWGL.cpp',
'renderer/gl/wgl/DisplayWGL.cpp',
'renderer/gl/wgl/DXGISwapChainWindowSurfaceWGL.cpp',
'renderer/gl/wgl/FunctionsWGL.cpp',
@@ -224,25 +220,6 @@ UNIFIED_SOURCES += [
'renderer/gl/wgl/wgl_utils.cpp',
'renderer/gl/wgl/WindowSurfaceWGL.cpp',
'renderer/load_functions_table_autogen.cpp',
- 'renderer/null/BufferNULL.cpp',
- 'renderer/null/CompilerNULL.cpp',
- 'renderer/null/ContextNULL.cpp',
- 'renderer/null/DeviceNULL.cpp',
- 'renderer/null/DisplayNULL.cpp',
- 'renderer/null/FenceNVNULL.cpp',
- 'renderer/null/FenceSyncNULL.cpp',
- 'renderer/null/FramebufferNULL.cpp',
- 'renderer/null/ImageNULL.cpp',
- 'renderer/null/PathNULL.cpp',
- 'renderer/null/ProgramNULL.cpp',
- 'renderer/null/QueryNULL.cpp',
- 'renderer/null/RenderbufferNULL.cpp',
- 'renderer/null/SamplerNULL.cpp',
- 'renderer/null/ShaderNULL.cpp',
- 'renderer/null/SurfaceNULL.cpp',
- 'renderer/null/TextureNULL.cpp',
- 'renderer/null/TransformFeedbackNULL.cpp',
- 'renderer/null/VertexArrayNULL.cpp',
'renderer/renderer_utils.cpp',
'renderer/SurfaceImpl.cpp',
'renderer/TextureImpl.cpp',
@@ -273,7 +250,6 @@ UNIFIED_SOURCES += [
'Stream.cpp',
'Surface.cpp',
'Texture.cpp',
- 'Thread.cpp',
'TransformFeedback.cpp',
'Uniform.cpp',
'validationEGL.cpp',
@@ -288,8 +264,6 @@ SOURCES += [
'../compiler/translator/EmulateGLFragColorBroadcast.cpp',
'../compiler/translator/glslang_lex.cpp',
'../compiler/translator/glslang_tab.cpp',
- '../compiler/translator/RewriteTexelFetchOffset.cpp',
- '../compiler/translator/ShaderLang.cpp',
'Display.cpp',
'renderer/d3d/DisplayD3D.cpp',
'renderer/d3d/HLSLCompiler.cpp',
@@ -301,7 +275,6 @@ if CONFIG['MOZ_HAS_WINSDK_WITH_D3D']:
'renderer/d3d/d3d11/Clear11.cpp',
'renderer/d3d/d3d11/Context11.cpp',
'renderer/d3d/d3d11/DebugAnnotator11.cpp',
- 'renderer/d3d/d3d11/dxgi_format_map_autogen.cpp',
'renderer/d3d/d3d11/dxgi_support_table.cpp',
'renderer/d3d/d3d11/Fence11.cpp',
'renderer/d3d/d3d11/formatutils11.cpp',
@@ -332,7 +305,6 @@ if CONFIG['MOZ_HAS_WINSDK_WITH_D3D']:
'renderer/d3d/d3d11/win32/NativeWindow11Win32.cpp',
]
-CXXFLAGS += CONFIG['SSE2_FLAGS']
if CONFIG['GNU_CXX']:
CXXFLAGS += [
@@ -353,6 +325,9 @@ if CONFIG['GNU_CXX']:
'-Wno-shadow-local',
]
+if CONFIG['MOZ_DIRECTX_SDK_PATH'] and not CONFIG['MOZ_HAS_WINSDK_WITH_D3D']:
+ LOCAL_INCLUDES += ['%' + '%s/include/' % CONFIG['MOZ_DIRECTX_SDK_PATH']]
+
DEFINES['_CRT_SECURE_NO_DEPRECATE'] = True
DEFINES['_HAS_EXCEPTIONS'] = 0
@@ -385,6 +360,11 @@ DEFINES['ANGLE_DEFAULT_D3D11'] = "0"
if CONFIG['MOZ_HAS_WINSDK_WITH_D3D']:
OS_LIBS += [ 'd3d9', 'dxguid' ]
+else:
+ EXTRA_DSO_LDOPTS += [
+ '\'%s/lib/%s/d3d9.lib\'' % (CONFIG['MOZ_DIRECTX_SDK_PATH'], CONFIG['MOZ_D3D_CPU_SUFFIX']),
+ '\'%s/lib/%s/dxguid.lib\'' % (CONFIG['MOZ_DIRECTX_SDK_PATH'], CONFIG['MOZ_D3D_CPU_SUFFIX']),
+ ]
Library('libANGLE')
diff --git a/gfx/angle/src/libANGLE/queryconversions.cpp b/gfx/angle/src/libANGLE/queryconversions.cpp
index 611fbc4ba..83ee35f93 100755
--- a/gfx/angle/src/libANGLE/queryconversions.cpp
+++ b/gfx/angle/src/libANGLE/queryconversions.cpp
@@ -86,6 +86,17 @@ QueryT CastStateValue(GLenum pname, NativeT value)
} // anonymous namespace
+template <>
+GLenum GLTypeToGLenum<GLint>::value = GL_INT;
+template <>
+GLenum GLTypeToGLenum<GLuint>::value = GL_UNSIGNED_INT;
+template <>
+GLenum GLTypeToGLenum<GLboolean>::value = GL_BOOL;
+template <>
+GLenum GLTypeToGLenum<GLint64>::value = GL_INT_64_ANGLEX;
+template <>
+GLenum GLTypeToGLenum<GLfloat>::value = GL_FLOAT;
+
template <typename QueryT>
void CastStateValues(Context *context, GLenum nativeType, GLenum pname,
unsigned int numParams, QueryT *outParams)
diff --git a/gfx/angle/src/libANGLE/queryconversions.h b/gfx/angle/src/libANGLE/queryconversions.h
index 5b96a3e15..7b6be3592 100755
--- a/gfx/angle/src/libANGLE/queryconversions.h
+++ b/gfx/angle/src/libANGLE/queryconversions.h
@@ -23,33 +23,7 @@ class Context;
template <typename GLType>
struct GLTypeToGLenum
{
- // static constexpr GLenum value;
-};
-
-template <>
-struct GLTypeToGLenum<GLint>
-{
- static constexpr GLenum value = GL_INT;
-};
-template <>
-struct GLTypeToGLenum<GLuint>
-{
- static constexpr GLenum value = GL_UNSIGNED_INT;
-};
-template <>
-struct GLTypeToGLenum<GLboolean>
-{
- static constexpr GLenum value = GL_BOOL;
-};
-template <>
-struct GLTypeToGLenum<GLint64>
-{
- static constexpr GLenum value = GL_INT_64_ANGLEX;
-};
-template <>
-struct GLTypeToGLenum<GLfloat>
-{
- static constexpr GLenum value = GL_FLOAT;
+ static GLenum value;
};
// The GL state query API types are: bool, int, uint, float, int64
diff --git a/gfx/angle/src/libANGLE/queryutils.cpp b/gfx/angle/src/libANGLE/queryutils.cpp
deleted file mode 100644
index fdd2980e2..000000000
--- a/gfx/angle/src/libANGLE/queryutils.cpp
+++ /dev/null
@@ -1,772 +0,0 @@
-//
-// Copyright (c) 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-
-// queryutils.cpp: Utilities for querying values from GL objects
-
-#include "libANGLE/queryutils.h"
-
-#include "common/utilities.h"
-
-#include "libANGLE/Buffer.h"
-#include "libANGLE/Framebuffer.h"
-#include "libANGLE/Program.h"
-#include "libANGLE/Renderbuffer.h"
-#include "libANGLE/Sampler.h"
-#include "libANGLE/Shader.h"
-#include "libANGLE/Texture.h"
-#include "libANGLE/Uniform.h"
-#include "libANGLE/VertexAttribute.h"
-
-namespace gl
-{
-
-namespace
-{
-template <typename ParamType>
-void QueryTexParameterBase(const Texture *texture, GLenum pname, ParamType *params)
-{
- ASSERT(texture != nullptr);
-
- switch (pname)
- {
- case GL_TEXTURE_MAG_FILTER:
- *params = ConvertFromGLenum<ParamType>(texture->getMagFilter());
- break;
- case GL_TEXTURE_MIN_FILTER:
- *params = ConvertFromGLenum<ParamType>(texture->getMinFilter());
- break;
- case GL_TEXTURE_WRAP_S:
- *params = ConvertFromGLenum<ParamType>(texture->getWrapS());
- break;
- case GL_TEXTURE_WRAP_T:
- *params = ConvertFromGLenum<ParamType>(texture->getWrapT());
- break;
- case GL_TEXTURE_WRAP_R:
- *params = ConvertFromGLenum<ParamType>(texture->getWrapR());
- break;
- case GL_TEXTURE_IMMUTABLE_FORMAT:
- *params = ConvertFromGLboolean<ParamType>(texture->getImmutableFormat());
- break;
- case GL_TEXTURE_IMMUTABLE_LEVELS:
- *params = ConvertFromGLuint<ParamType>(texture->getImmutableLevels());
- break;
- case GL_TEXTURE_USAGE_ANGLE:
- *params = ConvertFromGLenum<ParamType>(texture->getUsage());
- break;
- case GL_TEXTURE_MAX_ANISOTROPY_EXT:
- *params = ConvertFromGLfloat<ParamType>(texture->getMaxAnisotropy());
- break;
- case GL_TEXTURE_SWIZZLE_R:
- *params = ConvertFromGLenum<ParamType>(texture->getSwizzleRed());
- break;
- case GL_TEXTURE_SWIZZLE_G:
- *params = ConvertFromGLenum<ParamType>(texture->getSwizzleGreen());
- break;
- case GL_TEXTURE_SWIZZLE_B:
- *params = ConvertFromGLenum<ParamType>(texture->getSwizzleBlue());
- break;
- case GL_TEXTURE_SWIZZLE_A:
- *params = ConvertFromGLenum<ParamType>(texture->getSwizzleAlpha());
- break;
- case GL_TEXTURE_BASE_LEVEL:
- *params = ConvertFromGLuint<ParamType>(texture->getBaseLevel());
- break;
- case GL_TEXTURE_MAX_LEVEL:
- *params = ConvertFromGLuint<ParamType>(texture->getMaxLevel());
- break;
- case GL_TEXTURE_MIN_LOD:
- *params = ConvertFromGLfloat<ParamType>(texture->getSamplerState().minLod);
- break;
- case GL_TEXTURE_MAX_LOD:
- *params = ConvertFromGLfloat<ParamType>(texture->getSamplerState().maxLod);
- break;
- case GL_TEXTURE_COMPARE_MODE:
- *params = ConvertFromGLenum<ParamType>(texture->getCompareMode());
- break;
- case GL_TEXTURE_COMPARE_FUNC:
- *params = ConvertFromGLenum<ParamType>(texture->getCompareFunc());
- break;
- case GL_TEXTURE_SRGB_DECODE_EXT:
- *params = ConvertFromGLenum<ParamType>(texture->getSRGBDecode());
- break;
- default:
- UNREACHABLE();
- break;
- }
-}
-
-template <typename ParamType>
-void SetTexParameterBase(Texture *texture, GLenum pname, const ParamType *params)
-{
- ASSERT(texture != nullptr);
-
- switch (pname)
- {
- case GL_TEXTURE_WRAP_S:
- texture->setWrapS(ConvertToGLenum(params[0]));
- break;
- case GL_TEXTURE_WRAP_T:
- texture->setWrapT(ConvertToGLenum(params[0]));
- break;
- case GL_TEXTURE_WRAP_R:
- texture->setWrapR(ConvertToGLenum(params[0]));
- break;
- case GL_TEXTURE_MIN_FILTER:
- texture->setMinFilter(ConvertToGLenum(params[0]));
- break;
- case GL_TEXTURE_MAG_FILTER:
- texture->setMagFilter(ConvertToGLenum(params[0]));
- break;
- case GL_TEXTURE_USAGE_ANGLE:
- texture->setUsage(ConvertToGLenum(params[0]));
- break;
- case GL_TEXTURE_MAX_ANISOTROPY_EXT:
- texture->setMaxAnisotropy(ConvertToGLfloat(params[0]));
- break;
- case GL_TEXTURE_COMPARE_MODE:
- texture->setCompareMode(ConvertToGLenum(params[0]));
- break;
- case GL_TEXTURE_COMPARE_FUNC:
- texture->setCompareFunc(ConvertToGLenum(params[0]));
- break;
- case GL_TEXTURE_SWIZZLE_R:
- texture->setSwizzleRed(ConvertToGLenum(params[0]));
- break;
- case GL_TEXTURE_SWIZZLE_G:
- texture->setSwizzleGreen(ConvertToGLenum(params[0]));
- break;
- case GL_TEXTURE_SWIZZLE_B:
- texture->setSwizzleBlue(ConvertToGLenum(params[0]));
- break;
- case GL_TEXTURE_SWIZZLE_A:
- texture->setSwizzleAlpha(ConvertToGLenum(params[0]));
- break;
- case GL_TEXTURE_BASE_LEVEL:
- texture->setBaseLevel(ConvertToGLuint(params[0]));
- break;
- case GL_TEXTURE_MAX_LEVEL:
- texture->setMaxLevel(ConvertToGLuint(params[0]));
- break;
- case GL_TEXTURE_MIN_LOD:
- texture->setMinLod(ConvertToGLfloat(params[0]));
- break;
- case GL_TEXTURE_MAX_LOD:
- texture->setMaxLod(ConvertToGLfloat(params[0]));
- break;
- case GL_TEXTURE_SRGB_DECODE_EXT:
- texture->setSRGBDecode(ConvertToGLenum(params[0]));
- break;
- default:
- UNREACHABLE();
- break;
- }
-}
-
-template <typename ParamType>
-void QuerySamplerParameterBase(const Sampler *sampler, GLenum pname, ParamType *params)
-{
- switch (pname)
- {
- case GL_TEXTURE_MIN_FILTER:
- *params = ConvertFromGLenum<ParamType>(sampler->getMinFilter());
- break;
- case GL_TEXTURE_MAG_FILTER:
- *params = ConvertFromGLenum<ParamType>(sampler->getMagFilter());
- break;
- case GL_TEXTURE_WRAP_S:
- *params = ConvertFromGLenum<ParamType>(sampler->getWrapS());
- break;
- case GL_TEXTURE_WRAP_T:
- *params = ConvertFromGLenum<ParamType>(sampler->getWrapT());
- break;
- case GL_TEXTURE_WRAP_R:
- *params = ConvertFromGLenum<ParamType>(sampler->getWrapR());
- break;
- case GL_TEXTURE_MAX_ANISOTROPY_EXT:
- *params = ConvertFromGLfloat<ParamType>(sampler->getMaxAnisotropy());
- break;
- case GL_TEXTURE_MIN_LOD:
- *params = ConvertFromGLfloat<ParamType>(sampler->getMinLod());
- break;
- case GL_TEXTURE_MAX_LOD:
- *params = ConvertFromGLfloat<ParamType>(sampler->getMaxLod());
- break;
- case GL_TEXTURE_COMPARE_MODE:
- *params = ConvertFromGLenum<ParamType>(sampler->getCompareMode());
- break;
- case GL_TEXTURE_COMPARE_FUNC:
- *params = ConvertFromGLenum<ParamType>(sampler->getCompareFunc());
- break;
- case GL_TEXTURE_SRGB_DECODE_EXT:
- *params = ConvertFromGLenum<ParamType>(sampler->getSRGBDecode());
- break;
- default:
- UNREACHABLE();
- break;
- }
-}
-
-template <typename ParamType>
-void SetSamplerParameterBase(Sampler *sampler, GLenum pname, const ParamType *params)
-{
- switch (pname)
- {
- case GL_TEXTURE_WRAP_S:
- sampler->setWrapS(ConvertToGLenum(params[0]));
- break;
- case GL_TEXTURE_WRAP_T:
- sampler->setWrapT(ConvertToGLenum(params[0]));
- break;
- case GL_TEXTURE_WRAP_R:
- sampler->setWrapR(ConvertToGLenum(params[0]));
- break;
- case GL_TEXTURE_MIN_FILTER:
- sampler->setMinFilter(ConvertToGLenum(params[0]));
- break;
- case GL_TEXTURE_MAG_FILTER:
- sampler->setMagFilter(ConvertToGLenum(params[0]));
- break;
- case GL_TEXTURE_MAX_ANISOTROPY_EXT:
- sampler->setMaxAnisotropy(ConvertToGLfloat(params[0]));
- break;
- case GL_TEXTURE_COMPARE_MODE:
- sampler->setCompareMode(ConvertToGLenum(params[0]));
- break;
- case GL_TEXTURE_COMPARE_FUNC:
- sampler->setCompareFunc(ConvertToGLenum(params[0]));
- break;
- case GL_TEXTURE_MIN_LOD:
- sampler->setMinLod(ConvertToGLfloat(params[0]));
- break;
- case GL_TEXTURE_MAX_LOD:
- sampler->setMaxLod(ConvertToGLfloat(params[0]));
- break;
- case GL_TEXTURE_SRGB_DECODE_EXT:
- sampler->setSRGBDecode(ConvertToGLenum(params[0]));
- break;
- default:
- UNREACHABLE();
- break;
- }
-}
-
-template <typename ParamType, typename CurrentDataType>
-ParamType ConvertCurrentValue(CurrentDataType currentValue)
-{
- return static_cast<ParamType>(currentValue);
-}
-
-template <>
-GLint ConvertCurrentValue(GLfloat currentValue)
-{
- return iround<GLint>(currentValue);
-}
-
-template <typename ParamType, typename CurrentDataType, size_t CurrentValueCount>
-void QueryVertexAttribBase(const VertexAttribute &attrib,
- const CurrentDataType (&currentValueData)[CurrentValueCount],
- GLenum pname,
- ParamType *params)
-{
- switch (pname)
- {
- case GL_CURRENT_VERTEX_ATTRIB:
- for (size_t i = 0; i < CurrentValueCount; ++i)
- {
- params[i] = ConvertCurrentValue<ParamType>(currentValueData[i]);
- }
- break;
- case GL_VERTEX_ATTRIB_ARRAY_ENABLED:
- *params = ConvertFromGLboolean<ParamType>(attrib.enabled);
- break;
- case GL_VERTEX_ATTRIB_ARRAY_SIZE:
- *params = ConvertFromGLuint<ParamType>(attrib.size);
- break;
- case GL_VERTEX_ATTRIB_ARRAY_STRIDE:
- *params = ConvertFromGLuint<ParamType>(attrib.stride);
- break;
- case GL_VERTEX_ATTRIB_ARRAY_TYPE:
- *params = ConvertFromGLenum<ParamType>(attrib.type);
- break;
- case GL_VERTEX_ATTRIB_ARRAY_NORMALIZED:
- *params = ConvertFromGLboolean<ParamType>(attrib.normalized);
- break;
- case GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING:
- *params = ConvertFromGLuint<ParamType>(attrib.buffer.id());
- break;
- case GL_VERTEX_ATTRIB_ARRAY_DIVISOR:
- *params = ConvertFromGLuint<ParamType>(attrib.divisor);
- break;
- case GL_VERTEX_ATTRIB_ARRAY_INTEGER:
- *params = ConvertFromGLboolean<ParamType>(attrib.pureInteger);
- break;
- default:
- UNREACHABLE();
- break;
- }
-}
-
-template <typename ParamType>
-void QueryBufferParameterBase(const Buffer *buffer, GLenum pname, ParamType *params)
-{
- ASSERT(buffer != nullptr);
-
- switch (pname)
- {
- case GL_BUFFER_USAGE:
- *params = ConvertFromGLenum<ParamType>(buffer->getUsage());
- break;
- case GL_BUFFER_SIZE:
- *params = ConvertFromGLint64<ParamType>(buffer->getSize());
- break;
- case GL_BUFFER_ACCESS_FLAGS:
- *params = ConvertFromGLuint<ParamType>(buffer->getAccessFlags());
- break;
- case GL_BUFFER_ACCESS_OES:
- *params = ConvertFromGLenum<ParamType>(buffer->getAccess());
- break;
- case GL_BUFFER_MAPPED:
- *params = ConvertFromGLboolean<ParamType>(buffer->isMapped());
- break;
- case GL_BUFFER_MAP_OFFSET:
- *params = ConvertFromGLint64<ParamType>(buffer->getMapOffset());
- break;
- case GL_BUFFER_MAP_LENGTH:
- *params = ConvertFromGLint64<ParamType>(buffer->getMapLength());
- break;
- default:
- UNREACHABLE();
- break;
- }
-}
-
-} // anonymous namespace
-
-void QueryFramebufferAttachmentParameteriv(const Framebuffer *framebuffer,
- GLenum attachment,
- GLenum pname,
- GLint *params)
-{
- ASSERT(framebuffer);
-
- const FramebufferAttachment *attachmentObject = framebuffer->getAttachment(attachment);
- if (attachmentObject == nullptr)
- {
- // ES 2.0.25 spec pg 127 states that if the value of FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE
- // is NONE, then querying any other pname will generate INVALID_ENUM.
-
- // ES 3.0.2 spec pg 235 states that if the attachment type is none,
- // GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME will return zero and be an
- // INVALID_OPERATION for all other pnames
-
- switch (pname)
- {
- case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE:
- *params = GL_NONE;
- break;
-
- case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME:
- *params = 0;
- break;
-
- default:
- UNREACHABLE();
- break;
- }
-
- return;
- }
-
- switch (pname)
- {
- case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE:
- *params = attachmentObject->type();
- break;
-
- case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME:
- *params = attachmentObject->id();
- break;
-
- case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL:
- *params = attachmentObject->mipLevel();
- break;
-
- case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE:
- *params = attachmentObject->cubeMapFace();
- break;
-
- case GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE:
- *params = attachmentObject->getRedSize();
- break;
-
- case GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE:
- *params = attachmentObject->getGreenSize();
- break;
-
- case GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE:
- *params = attachmentObject->getBlueSize();
- break;
-
- case GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE:
- *params = attachmentObject->getAlphaSize();
- break;
-
- case GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE:
- *params = attachmentObject->getDepthSize();
- break;
-
- case GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE:
- *params = attachmentObject->getStencilSize();
- break;
-
- case GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE:
- *params = attachmentObject->getComponentType();
- break;
-
- case GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING:
- *params = attachmentObject->getColorEncoding();
- break;
-
- case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER:
- *params = attachmentObject->layer();
- break;
-
- default:
- UNREACHABLE();
- break;
- }
-}
-
-void QueryBufferParameteriv(const Buffer *buffer, GLenum pname, GLint *params)
-{
- QueryBufferParameterBase(buffer, pname, params);
-}
-
-void QueryBufferParameteri64v(const Buffer *buffer, GLenum pname, GLint64 *params)
-{
- QueryBufferParameterBase(buffer, pname, params);
-}
-
-void QueryBufferPointerv(const Buffer *buffer, GLenum pname, void **params)
-{
- switch (pname)
- {
- case GL_BUFFER_MAP_POINTER:
- *params = buffer->getMapPointer();
- break;
-
- default:
- UNREACHABLE();
- break;
- }
-}
-
-void QueryProgramiv(const Program *program, GLenum pname, GLint *params)
-{
- ASSERT(program != nullptr);
-
- switch (pname)
- {
- case GL_DELETE_STATUS:
- *params = program->isFlaggedForDeletion();
- return;
- case GL_LINK_STATUS:
- *params = program->isLinked();
- return;
- case GL_VALIDATE_STATUS:
- *params = program->isValidated();
- return;
- case GL_INFO_LOG_LENGTH:
- *params = program->getInfoLogLength();
- return;
- case GL_ATTACHED_SHADERS:
- *params = program->getAttachedShadersCount();
- return;
- case GL_ACTIVE_ATTRIBUTES:
- *params = program->getActiveAttributeCount();
- return;
- case GL_ACTIVE_ATTRIBUTE_MAX_LENGTH:
- *params = program->getActiveAttributeMaxLength();
- return;
- case GL_ACTIVE_UNIFORMS:
- *params = program->getActiveUniformCount();
- return;
- case GL_ACTIVE_UNIFORM_MAX_LENGTH:
- *params = program->getActiveUniformMaxLength();
- return;
- case GL_PROGRAM_BINARY_LENGTH_OES:
- *params = program->getBinaryLength();
- return;
- case GL_ACTIVE_UNIFORM_BLOCKS:
- *params = program->getActiveUniformBlockCount();
- return;
- case GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH:
- *params = program->getActiveUniformBlockMaxLength();
- break;
- case GL_TRANSFORM_FEEDBACK_BUFFER_MODE:
- *params = program->getTransformFeedbackBufferMode();
- break;
- case GL_TRANSFORM_FEEDBACK_VARYINGS:
- *params = program->getTransformFeedbackVaryingCount();
- break;
- case GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH:
- *params = program->getTransformFeedbackVaryingMaxLength();
- break;
- case GL_PROGRAM_BINARY_RETRIEVABLE_HINT:
- *params = program->getBinaryRetrievableHint();
- break;
- default:
- UNREACHABLE();
- break;
- }
-}
-
-void QueryRenderbufferiv(const Renderbuffer *renderbuffer, GLenum pname, GLint *params)
-{
- ASSERT(renderbuffer != nullptr);
-
- switch (pname)
- {
- case GL_RENDERBUFFER_WIDTH:
- *params = renderbuffer->getWidth();
- break;
- case GL_RENDERBUFFER_HEIGHT:
- *params = renderbuffer->getHeight();
- break;
- case GL_RENDERBUFFER_INTERNAL_FORMAT:
- *params = renderbuffer->getFormat().info->internalFormat;
- break;
- case GL_RENDERBUFFER_RED_SIZE:
- *params = renderbuffer->getRedSize();
- break;
- case GL_RENDERBUFFER_GREEN_SIZE:
- *params = renderbuffer->getGreenSize();
- break;
- case GL_RENDERBUFFER_BLUE_SIZE:
- *params = renderbuffer->getBlueSize();
- break;
- case GL_RENDERBUFFER_ALPHA_SIZE:
- *params = renderbuffer->getAlphaSize();
- break;
- case GL_RENDERBUFFER_DEPTH_SIZE:
- *params = renderbuffer->getDepthSize();
- break;
- case GL_RENDERBUFFER_STENCIL_SIZE:
- *params = renderbuffer->getStencilSize();
- break;
- case GL_RENDERBUFFER_SAMPLES_ANGLE:
- *params = renderbuffer->getSamples();
- break;
- default:
- UNREACHABLE();
- break;
- }
-}
-
-void QueryShaderiv(const Shader *shader, GLenum pname, GLint *params)
-{
- ASSERT(shader != nullptr);
-
- switch (pname)
- {
- case GL_SHADER_TYPE:
- *params = shader->getType();
- return;
- case GL_DELETE_STATUS:
- *params = shader->isFlaggedForDeletion();
- return;
- case GL_COMPILE_STATUS:
- *params = shader->isCompiled() ? GL_TRUE : GL_FALSE;
- return;
- case GL_INFO_LOG_LENGTH:
- *params = shader->getInfoLogLength();
- return;
- case GL_SHADER_SOURCE_LENGTH:
- *params = shader->getSourceLength();
- return;
- case GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE:
- *params = shader->getTranslatedSourceWithDebugInfoLength();
- return;
- default:
- UNREACHABLE();
- break;
- }
-}
-
-void QueryTexParameterfv(const Texture *texture, GLenum pname, GLfloat *params)
-{
- QueryTexParameterBase(texture, pname, params);
-}
-
-void QueryTexParameteriv(const Texture *texture, GLenum pname, GLint *params)
-{
- QueryTexParameterBase(texture, pname, params);
-}
-
-void QuerySamplerParameterfv(const Sampler *sampler, GLenum pname, GLfloat *params)
-{
- QuerySamplerParameterBase(sampler, pname, params);
-}
-
-void QuerySamplerParameteriv(const Sampler *sampler, GLenum pname, GLint *params)
-{
- QuerySamplerParameterBase(sampler, pname, params);
-}
-
-void QueryVertexAttribfv(const VertexAttribute &attrib,
- const VertexAttribCurrentValueData &currentValueData,
- GLenum pname,
- GLfloat *params)
-{
- QueryVertexAttribBase(attrib, currentValueData.FloatValues, pname, params);
-}
-
-void QueryVertexAttribiv(const VertexAttribute &attrib,
- const VertexAttribCurrentValueData &currentValueData,
- GLenum pname,
- GLint *params)
-{
- QueryVertexAttribBase(attrib, currentValueData.FloatValues, pname, params);
-}
-
-void QueryVertexAttribPointerv(const VertexAttribute &attrib, GLenum pname, GLvoid **pointer)
-{
- switch (pname)
- {
- case GL_VERTEX_ATTRIB_ARRAY_POINTER:
- *pointer = const_cast<GLvoid *>(attrib.pointer);
- break;
-
- default:
- UNREACHABLE();
- break;
- }
-}
-
-void QueryVertexAttribIiv(const VertexAttribute &attrib,
- const VertexAttribCurrentValueData &currentValueData,
- GLenum pname,
- GLint *params)
-{
- QueryVertexAttribBase(attrib, currentValueData.IntValues, pname, params);
-}
-
-void QueryVertexAttribIuiv(const VertexAttribute &attrib,
- const VertexAttribCurrentValueData &currentValueData,
- GLenum pname,
- GLuint *params)
-{
- QueryVertexAttribBase(attrib, currentValueData.UnsignedIntValues, pname, params);
-}
-
-void QueryActiveUniformBlockiv(const Program *program,
- GLuint uniformBlockIndex,
- GLenum pname,
- GLint *params)
-{
- const UniformBlock &uniformBlock = program->getUniformBlockByIndex(uniformBlockIndex);
- switch (pname)
- {
- case GL_UNIFORM_BLOCK_BINDING:
- *params = ConvertToGLint(program->getUniformBlockBinding(uniformBlockIndex));
- break;
- case GL_UNIFORM_BLOCK_DATA_SIZE:
- *params = ConvertToGLint(uniformBlock.dataSize);
- break;
- case GL_UNIFORM_BLOCK_NAME_LENGTH:
- *params = ConvertToGLint(uniformBlock.nameWithArrayIndex().size() + 1);
- break;
- case GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS:
- *params = ConvertToGLint(uniformBlock.memberUniformIndexes.size());
- break;
- case GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES:
- for (size_t blockMemberIndex = 0;
- blockMemberIndex < uniformBlock.memberUniformIndexes.size(); blockMemberIndex++)
- {
- params[blockMemberIndex] =
- ConvertToGLint(uniformBlock.memberUniformIndexes[blockMemberIndex]);
- }
- break;
- case GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER:
- *params = ConvertToGLint(uniformBlock.vertexStaticUse);
- break;
- case GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER:
- *params = ConvertToGLint(uniformBlock.fragmentStaticUse);
- break;
- default:
- UNREACHABLE();
- break;
- }
-}
-
-void QueryInternalFormativ(const TextureCaps &format, GLenum pname, GLsizei bufSize, GLint *params)
-{
- switch (pname)
- {
- case GL_NUM_SAMPLE_COUNTS:
- if (bufSize != 0)
- {
- *params = static_cast<GLint>(format.sampleCounts.size());
- }
- break;
-
- case GL_SAMPLES:
- {
- size_t returnCount = std::min<size_t>(bufSize, format.sampleCounts.size());
- auto sampleReverseIt = format.sampleCounts.rbegin();
- for (size_t sampleIndex = 0; sampleIndex < returnCount; ++sampleIndex)
- {
- params[sampleIndex] = *sampleReverseIt++;
- }
- }
- break;
-
- default:
- UNREACHABLE();
- break;
- }
-}
-
-void SetTexParameterf(Texture *texture, GLenum pname, GLfloat param)
-{
- SetTexParameterBase(texture, pname, &param);
-}
-
-void SetTexParameterfv(Texture *texture, GLenum pname, const GLfloat *params)
-{
- SetTexParameterBase(texture, pname, params);
-}
-
-void SetTexParameteri(Texture *texture, GLenum pname, GLint param)
-{
- SetTexParameterBase(texture, pname, &param);
-}
-
-void SetTexParameteriv(Texture *texture, GLenum pname, const GLint *params)
-{
- SetTexParameterBase(texture, pname, params);
-}
-
-void SetSamplerParameterf(Sampler *sampler, GLenum pname, GLfloat param)
-{
- SetSamplerParameterBase(sampler, pname, &param);
-}
-
-void SetSamplerParameterfv(Sampler *sampler, GLenum pname, const GLfloat *params)
-{
- SetSamplerParameterBase(sampler, pname, params);
-}
-
-void SetSamplerParameteri(Sampler *sampler, GLenum pname, GLint param)
-{
- SetSamplerParameterBase(sampler, pname, &param);
-}
-
-void SetSamplerParameteriv(Sampler *sampler, GLenum pname, const GLint *params)
-{
- SetSamplerParameterBase(sampler, pname, params);
-}
-}
diff --git a/gfx/angle/src/libANGLE/queryutils.h b/gfx/angle/src/libANGLE/queryutils.h
deleted file mode 100644
index 28a84b3bd..000000000
--- a/gfx/angle/src/libANGLE/queryutils.h
+++ /dev/null
@@ -1,79 +0,0 @@
-//
-// Copyright (c) 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-
-// queryutils.h: Utilities for querying values from GL objects
-
-#ifndef LIBANGLE_QUERYUTILS_H_
-#define LIBANGLE_QUERYUTILS_H_
-
-#include "angle_gl.h"
-#include "common/angleutils.h"
-
-namespace gl
-{
-class Buffer;
-class Framebuffer;
-class Program;
-class Renderbuffer;
-class Sampler;
-class Shader;
-class Texture;
-struct TextureCaps;
-struct UniformBlock;
-struct VertexAttribute;
-struct VertexAttribCurrentValueData;
-
-void QueryFramebufferAttachmentParameteriv(const Framebuffer *framebuffer,
- GLenum attachment,
- GLenum pname,
- GLint *params);
-void QueryBufferParameteriv(const Buffer *buffer, GLenum pname, GLint *params);
-void QueryBufferParameteri64v(const Buffer *buffer, GLenum pname, GLint64 *params);
-void QueryBufferPointerv(const Buffer *buffer, GLenum pname, void **params);
-void QueryProgramiv(const Program *program, GLenum pname, GLint *params);
-void QueryRenderbufferiv(const Renderbuffer *renderbuffer, GLenum pname, GLint *params);
-void QueryShaderiv(const Shader *shader, GLenum pname, GLint *params);
-void QueryTexParameterfv(const Texture *texture, GLenum pname, GLfloat *params);
-void QueryTexParameteriv(const Texture *texture, GLenum pname, GLint *params);
-void QuerySamplerParameterfv(const Sampler *sampler, GLenum pname, GLfloat *params);
-void QuerySamplerParameteriv(const Sampler *sampler, GLenum pname, GLint *params);
-void QueryVertexAttribfv(const VertexAttribute &attrib,
- const VertexAttribCurrentValueData &currentValueData,
- GLenum pname,
- GLfloat *params);
-void QueryVertexAttribiv(const VertexAttribute &attrib,
- const VertexAttribCurrentValueData &currentValueData,
- GLenum pname,
- GLint *params);
-void QueryVertexAttribPointerv(const VertexAttribute &attrib, GLenum pname, GLvoid **pointer);
-void QueryVertexAttribIiv(const VertexAttribute &attrib,
- const VertexAttribCurrentValueData &currentValueData,
- GLenum pname,
- GLint *params);
-void QueryVertexAttribIuiv(const VertexAttribute &attrib,
- const VertexAttribCurrentValueData &currentValueData,
- GLenum pname,
- GLuint *params);
-
-void QueryActiveUniformBlockiv(const Program *program,
- GLuint uniformBlockIndex,
- GLenum pname,
- GLint *params);
-
-void QueryInternalFormativ(const TextureCaps &format, GLenum pname, GLsizei bufSize, GLint *params);
-
-void SetTexParameterf(Texture *texture, GLenum pname, GLfloat param);
-void SetTexParameterfv(Texture *texture, GLenum pname, const GLfloat *params);
-void SetTexParameteri(Texture *texture, GLenum pname, GLint param);
-void SetTexParameteriv(Texture *texture, GLenum pname, const GLint *params);
-
-void SetSamplerParameterf(Sampler *sampler, GLenum pname, GLfloat param);
-void SetSamplerParameterfv(Sampler *sampler, GLenum pname, const GLfloat *params);
-void SetSamplerParameteri(Sampler *sampler, GLenum pname, GLint param);
-void SetSamplerParameteriv(Sampler *sampler, GLenum pname, const GLint *params);
-}
-
-#endif // LIBANGLE_QUERYUTILS_H_
diff --git a/gfx/angle/src/libANGLE/renderer/BufferImpl.h b/gfx/angle/src/libANGLE/renderer/BufferImpl.h
index 10d371541..cdb3cfe88 100755
--- a/gfx/angle/src/libANGLE/renderer/BufferImpl.h
+++ b/gfx/angle/src/libANGLE/renderer/BufferImpl.h
@@ -15,22 +15,16 @@
#include <stdint.h>
-namespace gl
-{
-class BufferState;
-}
-
namespace rx
{
class BufferImpl : angle::NonCopyable
{
public:
- BufferImpl(const gl::BufferState &state) : mState(state) {}
virtual ~BufferImpl() { }
- virtual gl::Error setData(GLenum target, const void *data, size_t size, GLenum usage) = 0;
- virtual gl::Error setSubData(GLenum target, const void *data, size_t size, size_t offset) = 0;
+ virtual gl::Error setData(const void *data, size_t size, GLenum usage) = 0;
+ virtual gl::Error setSubData(const void *data, size_t size, size_t offset) = 0;
virtual gl::Error copySubData(BufferImpl *source,
GLintptr sourceOffset,
GLintptr destOffset,
@@ -44,9 +38,6 @@ class BufferImpl : angle::NonCopyable
size_t count,
bool primitiveRestartEnabled,
gl::IndexRange *outRange) = 0;
-
- protected:
- const gl::BufferState &mState;
};
}
diff --git a/gfx/angle/src/libANGLE/renderer/BufferImpl_mock.h b/gfx/angle/src/libANGLE/renderer/BufferImpl_mock.h
index 7e45c01b7..a6387661c 100755
--- a/gfx/angle/src/libANGLE/renderer/BufferImpl_mock.h
+++ b/gfx/angle/src/libANGLE/renderer/BufferImpl_mock.h
@@ -19,11 +19,10 @@ namespace rx
class MockBufferImpl : public BufferImpl
{
public:
- MockBufferImpl() : BufferImpl(mMockState) {}
~MockBufferImpl() { destructor(); }
- MOCK_METHOD4(setData, gl::Error(GLenum, const void *, size_t, GLenum));
- MOCK_METHOD4(setSubData, gl::Error(GLenum, const void *, size_t, size_t));
+ MOCK_METHOD3(setData, gl::Error(const void*, size_t, GLenum));
+ MOCK_METHOD3(setSubData, gl::Error(const void*, size_t, size_t));
MOCK_METHOD4(copySubData, gl::Error(BufferImpl *, GLintptr, GLintptr, GLsizeiptr));
MOCK_METHOD2(map, gl::Error(GLenum, GLvoid **));
MOCK_METHOD4(mapRange, gl::Error(size_t, size_t, GLbitfield, GLvoid **));
@@ -32,9 +31,6 @@ class MockBufferImpl : public BufferImpl
MOCK_METHOD5(getIndexRange, gl::Error(GLenum, size_t, size_t, bool, gl::IndexRange *));
MOCK_METHOD0(destructor, void());
-
- protected:
- gl::BufferState mMockState;
};
}
diff --git a/gfx/angle/src/libANGLE/renderer/DisplayImpl.cpp b/gfx/angle/src/libANGLE/renderer/DisplayImpl.cpp
index fc2f2c5ce..8061189f0 100755
--- a/gfx/angle/src/libANGLE/renderer/DisplayImpl.cpp
+++ b/gfx/angle/src/libANGLE/renderer/DisplayImpl.cpp
@@ -41,15 +41,6 @@ const egl::DisplayExtensions &DisplayImpl::getExtensions() const
return mExtensions;
}
-egl::Error DisplayImpl::validateClientBuffer(const egl::Config *configuration,
- EGLenum buftype,
- EGLClientBuffer clientBuffer,
- const egl::AttributeMap &attribs) const
-{
- UNREACHABLE();
- return egl::Error(EGL_BAD_DISPLAY, "DisplayImpl::validateClientBuffer unimplemented.");
-}
-
const egl::Caps &DisplayImpl::getCaps() const
{
if (!mCapsInitialized)
diff --git a/gfx/angle/src/libANGLE/renderer/DisplayImpl.h b/gfx/angle/src/libANGLE/renderer/DisplayImpl.h
index ec603e85b..652486edb 100755
--- a/gfx/angle/src/libANGLE/renderer/DisplayImpl.h
+++ b/gfx/angle/src/libANGLE/renderer/DisplayImpl.h
@@ -59,10 +59,6 @@ class DisplayImpl : public EGLImplFactory
virtual egl::Error restoreLostDevice() = 0;
virtual bool isValidNativeWindow(EGLNativeWindowType window) const = 0;
- virtual egl::Error validateClientBuffer(const egl::Config *configuration,
- EGLenum buftype,
- EGLClientBuffer clientBuffer,
- const egl::AttributeMap &attribs) const;
virtual std::string getVendorString() const = 0;
diff --git a/gfx/angle/src/libANGLE/renderer/EGLImplFactory.h b/gfx/angle/src/libANGLE/renderer/EGLImplFactory.h
index 2ddbb7625..b2c8771cc 100755
--- a/gfx/angle/src/libANGLE/renderer/EGLImplFactory.h
+++ b/gfx/angle/src/libANGLE/renderer/EGLImplFactory.h
@@ -47,8 +47,7 @@ class EGLImplFactory : angle::NonCopyable
const egl::AttributeMap &attribs) = 0;
virtual SurfaceImpl *createPbufferFromClientBuffer(const egl::SurfaceState &state,
const egl::Config *configuration,
- EGLenum buftype,
- EGLClientBuffer clientBuffer,
+ EGLClientBuffer shareHandle,
const egl::AttributeMap &attribs) = 0;
virtual SurfaceImpl *createPixmapSurface(const egl::SurfaceState &state,
const egl::Config *configuration,
diff --git a/gfx/angle/src/libANGLE/renderer/Format.cpp b/gfx/angle/src/libANGLE/renderer/Format.cpp
new file mode 100644
index 000000000..e8883c6f3
--- /dev/null
+++ b/gfx/angle/src/libANGLE/renderer/Format.cpp
@@ -0,0 +1,60 @@
+//
+// Copyright 2016 The ANGLE Project Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+// Format:
+// A universal description of texture storage. Across multiple
+// renderer back-ends, there are common formats and some distinct
+// permutations, this enum encapsulates them all.
+
+#include "libANGLE/renderer/Format.h"
+
+#include "image_util/copyimage.h"
+
+using namespace rx;
+
+namespace angle
+{
+
+namespace
+{
+
+const FastCopyFunctionMap &GetFastCopyFunctionsMap(Format::ID formatID)
+{
+ switch (formatID)
+ {
+ case Format::ID::B8G8R8A8_UNORM:
+ {
+ static FastCopyFunctionMap fastCopyMap;
+ if (fastCopyMap.empty())
+ {
+ fastCopyMap[gl::FormatType(GL_RGBA, GL_UNSIGNED_BYTE)] = CopyBGRA8ToRGBA8;
+ }
+ return fastCopyMap;
+ }
+ default:
+ {
+ static FastCopyFunctionMap emptyMap;
+ return emptyMap;
+ }
+ }
+}
+
+} // anonymous namespace
+
+Format::Format(ID id,
+ GLenum glFormat,
+ GLenum fboFormat,
+ MipGenerationFunction mipGen,
+ ColorReadFunction colorRead)
+ : id(id),
+ glInternalFormat(glFormat),
+ fboImplementationInternalFormat(fboFormat),
+ mipGenerationFunction(mipGen),
+ colorReadFunction(colorRead),
+ fastCopyFunctions(GetFastCopyFunctionsMap(id))
+{
+}
+
+} // namespace angle
diff --git a/gfx/angle/src/libANGLE/renderer/Format.h b/gfx/angle/src/libANGLE/renderer/Format.h
index 5c6e7e1fe..65608a7a6 100755
--- a/gfx/angle/src/libANGLE/renderer/Format.h
+++ b/gfx/angle/src/libANGLE/renderer/Format.h
@@ -22,19 +22,11 @@ struct Format final : angle::NonCopyable
{
enum class ID;
- constexpr Format(ID id,
- GLenum glFormat,
- GLenum fboFormat,
- rx::MipGenerationFunction mipGen,
- const rx::FastCopyFunctionMap &fastCopyFunctions,
- rx::ColorReadFunction colorRead,
- GLenum componentType,
- GLuint redBits,
- GLuint greenBits,
- GLuint blueBits,
- GLuint alphaBits,
- GLuint depthBits,
- GLuint stencilBits);
+ Format(ID id,
+ GLenum glFormat,
+ GLenum fboFormat,
+ rx::MipGenerationFunction mipGen,
+ rx::ColorReadFunction colorRead);
static const Format &Get(ID id);
@@ -53,47 +45,9 @@ struct Format final : angle::NonCopyable
rx::ColorReadFunction colorReadFunction;
// A map from a gl::FormatType to a fast pixel copy function for this format.
- const rx::FastCopyFunctionMap &fastCopyFunctions;
-
- GLenum componentType;
-
- GLuint redBits;
- GLuint greenBits;
- GLuint blueBits;
- GLuint alphaBits;
- GLuint depthBits;
- GLuint stencilBits;
+ rx::FastCopyFunctionMap fastCopyFunctions;
};
-constexpr Format::Format(ID id,
- GLenum glFormat,
- GLenum fboFormat,
- rx::MipGenerationFunction mipGen,
- const rx::FastCopyFunctionMap &fastCopyFunctions,
- rx::ColorReadFunction colorRead,
- GLenum componentType,
- GLuint redBits,
- GLuint greenBits,
- GLuint blueBits,
- GLuint alphaBits,
- GLuint depthBits,
- GLuint stencilBits)
- : id(id),
- glInternalFormat(glFormat),
- fboImplementationInternalFormat(fboFormat),
- mipGenerationFunction(mipGen),
- colorReadFunction(colorRead),
- fastCopyFunctions(fastCopyFunctions),
- componentType(componentType),
- redBits(redBits),
- greenBits(greenBits),
- blueBits(blueBits),
- alphaBits(alphaBits),
- depthBits(depthBits),
- stencilBits(stencilBits)
-{
-}
-
} // namespace angle
#include "libANGLE/renderer/Format_ID_autogen.inl"
diff --git a/gfx/angle/src/libANGLE/renderer/Format_autogen.cpp b/gfx/angle/src/libANGLE/renderer/Format_autogen.cpp
new file mode 100644
index 000000000..d6b6762e7
--- /dev/null
+++ b/gfx/angle/src/libANGLE/renderer/Format_autogen.cpp
@@ -0,0 +1,1126 @@
+// GENERATED FILE - DO NOT EDIT.
+// Generated by gen_angle_format_table.py using data from angle_format_data.json
+//
+// Copyright 2016 The ANGLE Project Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+// ANGLE Format table:
+// Queries for typed format information from the ANGLE format enum.
+
+#include "libANGLE/renderer/Format.h"
+
+#include "image_util/copyimage.h"
+#include "image_util/generatemip.h"
+#include "image_util/loadimage.h"
+
+namespace angle
+{
+
+// static
+const Format &Format::Get(ID id)
+{
+ // clang-format off
+ switch (id)
+ {
+ case ID::A16_FLOAT:
+ {
+ static const Format info(ID::A16_FLOAT,
+ GL_ALPHA16F_EXT,
+ GL_ALPHA16F_EXT,
+ GenerateMip<A16F>,
+ ReadColor<A16F, GLfloat>);
+ return info;
+ }
+ case ID::A32_FLOAT:
+ {
+ static const Format info(ID::A32_FLOAT,
+ GL_ALPHA32F_EXT,
+ GL_ALPHA32F_EXT,
+ GenerateMip<A32F>,
+ ReadColor<A32F, GLfloat>);
+ return info;
+ }
+ case ID::A8_UNORM:
+ {
+ static const Format info(ID::A8_UNORM,
+ GL_ALPHA8_EXT,
+ GL_ALPHA8_EXT,
+ GenerateMip<A8>,
+ ReadColor<A8, GLfloat>);
+ return info;
+ }
+ case ID::ASTC_10x10_SRGB_BLOCK:
+ {
+ static const Format info(ID::ASTC_10x10_SRGB_BLOCK,
+ GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR,
+ GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::ASTC_10x10_UNORM_BLOCK:
+ {
+ static const Format info(ID::ASTC_10x10_UNORM_BLOCK,
+ GL_COMPRESSED_RGBA_ASTC_10x10_KHR,
+ GL_COMPRESSED_RGBA_ASTC_10x10_KHR,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::ASTC_10x5_SRGB_BLOCK:
+ {
+ static const Format info(ID::ASTC_10x5_SRGB_BLOCK,
+ GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR,
+ GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::ASTC_10x5_UNORM_BLOCK:
+ {
+ static const Format info(ID::ASTC_10x5_UNORM_BLOCK,
+ GL_COMPRESSED_RGBA_ASTC_10x5_KHR,
+ GL_COMPRESSED_RGBA_ASTC_10x5_KHR,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::ASTC_10x6_SRGB_BLOCK:
+ {
+ static const Format info(ID::ASTC_10x6_SRGB_BLOCK,
+ GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR,
+ GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::ASTC_10x6_UNORM_BLOCK:
+ {
+ static const Format info(ID::ASTC_10x6_UNORM_BLOCK,
+ GL_COMPRESSED_RGBA_ASTC_10x6_KHR,
+ GL_COMPRESSED_RGBA_ASTC_10x6_KHR,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::ASTC_10x8_SRGB_BLOCK:
+ {
+ static const Format info(ID::ASTC_10x8_SRGB_BLOCK,
+ GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR,
+ GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::ASTC_10x8_UNORM_BLOCK:
+ {
+ static const Format info(ID::ASTC_10x8_UNORM_BLOCK,
+ GL_COMPRESSED_RGBA_ASTC_10x8_KHR,
+ GL_COMPRESSED_RGBA_ASTC_10x8_KHR,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::ASTC_12x10_SRGB_BLOCK:
+ {
+ static const Format info(ID::ASTC_12x10_SRGB_BLOCK,
+ GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR,
+ GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::ASTC_12x10_UNORM_BLOCK:
+ {
+ static const Format info(ID::ASTC_12x10_UNORM_BLOCK,
+ GL_COMPRESSED_RGBA_ASTC_12x10_KHR,
+ GL_COMPRESSED_RGBA_ASTC_12x10_KHR,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::ASTC_12x12_SRGB_BLOCK:
+ {
+ static const Format info(ID::ASTC_12x12_SRGB_BLOCK,
+ GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR,
+ GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::ASTC_12x12_UNORM_BLOCK:
+ {
+ static const Format info(ID::ASTC_12x12_UNORM_BLOCK,
+ GL_COMPRESSED_RGBA_ASTC_12x12_KHR,
+ GL_COMPRESSED_RGBA_ASTC_12x12_KHR,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::ASTC_4x4_SRGB_BLOCK:
+ {
+ static const Format info(ID::ASTC_4x4_SRGB_BLOCK,
+ GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR,
+ GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::ASTC_4x4_UNORM_BLOCK:
+ {
+ static const Format info(ID::ASTC_4x4_UNORM_BLOCK,
+ GL_COMPRESSED_RGBA_ASTC_4x4_KHR,
+ GL_COMPRESSED_RGBA_ASTC_4x4_KHR,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::ASTC_5x4_SRGB_BLOCK:
+ {
+ static const Format info(ID::ASTC_5x4_SRGB_BLOCK,
+ GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR,
+ GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::ASTC_5x4_UNORM_BLOCK:
+ {
+ static const Format info(ID::ASTC_5x4_UNORM_BLOCK,
+ GL_COMPRESSED_RGBA_ASTC_5x4_KHR,
+ GL_COMPRESSED_RGBA_ASTC_5x4_KHR,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::ASTC_5x5_SRGB_BLOCK:
+ {
+ static const Format info(ID::ASTC_5x5_SRGB_BLOCK,
+ GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR,
+ GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::ASTC_5x5_UNORM_BLOCK:
+ {
+ static const Format info(ID::ASTC_5x5_UNORM_BLOCK,
+ GL_COMPRESSED_RGBA_ASTC_5x5_KHR,
+ GL_COMPRESSED_RGBA_ASTC_5x5_KHR,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::ASTC_6x5_SRGB_BLOCK:
+ {
+ static const Format info(ID::ASTC_6x5_SRGB_BLOCK,
+ GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR,
+ GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::ASTC_6x5_UNORM_BLOCK:
+ {
+ static const Format info(ID::ASTC_6x5_UNORM_BLOCK,
+ GL_COMPRESSED_RGBA_ASTC_6x5_KHR,
+ GL_COMPRESSED_RGBA_ASTC_6x5_KHR,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::ASTC_6x6_SRGB_BLOCK:
+ {
+ static const Format info(ID::ASTC_6x6_SRGB_BLOCK,
+ GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR,
+ GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::ASTC_6x6_UNORM_BLOCK:
+ {
+ static const Format info(ID::ASTC_6x6_UNORM_BLOCK,
+ GL_COMPRESSED_RGBA_ASTC_6x6_KHR,
+ GL_COMPRESSED_RGBA_ASTC_6x6_KHR,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::ASTC_8x5_SRGB_BLOCK:
+ {
+ static const Format info(ID::ASTC_8x5_SRGB_BLOCK,
+ GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR,
+ GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::ASTC_8x5_UNORM_BLOCK:
+ {
+ static const Format info(ID::ASTC_8x5_UNORM_BLOCK,
+ GL_COMPRESSED_RGBA_ASTC_8x5_KHR,
+ GL_COMPRESSED_RGBA_ASTC_8x5_KHR,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::ASTC_8x6_SRGB_BLOCK:
+ {
+ static const Format info(ID::ASTC_8x6_SRGB_BLOCK,
+ GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR,
+ GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::ASTC_8x6_UNORM_BLOCK:
+ {
+ static const Format info(ID::ASTC_8x6_UNORM_BLOCK,
+ GL_COMPRESSED_RGBA_ASTC_8x6_KHR,
+ GL_COMPRESSED_RGBA_ASTC_8x6_KHR,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::ASTC_8x8_SRGB_BLOCK:
+ {
+ static const Format info(ID::ASTC_8x8_SRGB_BLOCK,
+ GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR,
+ GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::ASTC_8x8_UNORM_BLOCK:
+ {
+ static const Format info(ID::ASTC_8x8_UNORM_BLOCK,
+ GL_COMPRESSED_RGBA_ASTC_8x8_KHR,
+ GL_COMPRESSED_RGBA_ASTC_8x8_KHR,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::B4G4R4A4_UNORM:
+ {
+ static const Format info(ID::B4G4R4A4_UNORM,
+ GL_BGRA4_ANGLEX,
+ GL_RGBA4,
+ GenerateMip<A4R4G4B4>,
+ ReadColor<A4R4G4B4, GLfloat>);
+ return info;
+ }
+ case ID::B5G5R5A1_UNORM:
+ {
+ static const Format info(ID::B5G5R5A1_UNORM,
+ GL_BGR5_A1_ANGLEX,
+ GL_RGB5_A1,
+ GenerateMip<A1R5G5B5>,
+ ReadColor<A1R5G5B5, GLfloat>);
+ return info;
+ }
+ case ID::B5G6R5_UNORM:
+ {
+ static const Format info(ID::B5G6R5_UNORM,
+ GL_BGR565_ANGLEX,
+ GL_RGB565,
+ GenerateMip<B5G6R5>,
+ ReadColor<B5G6R5, GLfloat>);
+ return info;
+ }
+ case ID::B8G8R8A8_UNORM:
+ {
+ static const Format info(ID::B8G8R8A8_UNORM,
+ GL_BGRA8_EXT,
+ GL_BGRA8_EXT,
+ GenerateMip<B8G8R8A8>,
+ ReadColor<B8G8R8A8, GLfloat>);
+ return info;
+ }
+ case ID::B8G8R8X8_UNORM:
+ {
+ static const Format info(ID::B8G8R8X8_UNORM,
+ GL_BGRA8_EXT,
+ GL_BGRA8_EXT,
+ GenerateMip<B8G8R8X8>,
+ ReadColor<B8G8R8X8, GLfloat>);
+ return info;
+ }
+ case ID::BC1_RGBA_UNORM_BLOCK:
+ {
+ static const Format info(ID::BC1_RGBA_UNORM_BLOCK,
+ GL_COMPRESSED_RGBA_S3TC_DXT1_EXT,
+ GL_COMPRESSED_RGBA_S3TC_DXT1_EXT,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::BC1_RGB_UNORM_BLOCK:
+ {
+ static const Format info(ID::BC1_RGB_UNORM_BLOCK,
+ GL_COMPRESSED_RGB_S3TC_DXT1_EXT,
+ GL_COMPRESSED_RGB_S3TC_DXT1_EXT,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::BC2_RGBA_UNORM_BLOCK:
+ {
+ static const Format info(ID::BC2_RGBA_UNORM_BLOCK,
+ GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE,
+ GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::BC3_RGBA_UNORM_BLOCK:
+ {
+ static const Format info(ID::BC3_RGBA_UNORM_BLOCK,
+ GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE,
+ GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::D16_UNORM:
+ {
+ static const Format info(ID::D16_UNORM,
+ GL_DEPTH_COMPONENT16,
+ GL_DEPTH_COMPONENT16,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::D24_UNORM:
+ {
+ static const Format info(ID::D24_UNORM,
+ GL_DEPTH_COMPONENT24,
+ GL_DEPTH_COMPONENT24,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::D24_UNORM_S8_UINT:
+ {
+ static const Format info(ID::D24_UNORM_S8_UINT,
+ GL_DEPTH24_STENCIL8,
+ GL_DEPTH24_STENCIL8,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::D32_FLOAT:
+ {
+ static const Format info(ID::D32_FLOAT,
+ GL_DEPTH_COMPONENT32F,
+ GL_DEPTH_COMPONENT32F,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::D32_FLOAT_S8X24_UINT:
+ {
+ static const Format info(ID::D32_FLOAT_S8X24_UINT,
+ GL_DEPTH32F_STENCIL8,
+ GL_DEPTH32F_STENCIL8,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::D32_UNORM:
+ {
+ static const Format info(ID::D32_UNORM,
+ GL_DEPTH_COMPONENT32_OES,
+ GL_DEPTH_COMPONENT32_OES,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::EAC_R11G11_SNORM_BLOCK:
+ {
+ static const Format info(ID::EAC_R11G11_SNORM_BLOCK,
+ GL_COMPRESSED_SIGNED_RG11_EAC,
+ GL_COMPRESSED_SIGNED_RG11_EAC,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::EAC_R11G11_UNORM_BLOCK:
+ {
+ static const Format info(ID::EAC_R11G11_UNORM_BLOCK,
+ GL_COMPRESSED_RG11_EAC,
+ GL_COMPRESSED_RG11_EAC,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::EAC_R11_SNORM_BLOCK:
+ {
+ static const Format info(ID::EAC_R11_SNORM_BLOCK,
+ GL_COMPRESSED_SIGNED_R11_EAC,
+ GL_COMPRESSED_SIGNED_R11_EAC,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::EAC_R11_UNORM_BLOCK:
+ {
+ static const Format info(ID::EAC_R11_UNORM_BLOCK,
+ GL_COMPRESSED_R11_EAC,
+ GL_COMPRESSED_R11_EAC,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::ETC2_R8G8B8A1_SRGB_BLOCK:
+ {
+ static const Format info(ID::ETC2_R8G8B8A1_SRGB_BLOCK,
+ GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2,
+ GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::ETC2_R8G8B8A1_UNORM_BLOCK:
+ {
+ static const Format info(ID::ETC2_R8G8B8A1_UNORM_BLOCK,
+ GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2,
+ GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::ETC2_R8G8B8A8_SRGB_BLOCK:
+ {
+ static const Format info(ID::ETC2_R8G8B8A8_SRGB_BLOCK,
+ GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC,
+ GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::ETC2_R8G8B8A8_UNORM_BLOCK:
+ {
+ static const Format info(ID::ETC2_R8G8B8A8_UNORM_BLOCK,
+ GL_COMPRESSED_RGBA8_ETC2_EAC,
+ GL_COMPRESSED_RGBA8_ETC2_EAC,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::ETC2_R8G8B8_SRGB_BLOCK:
+ {
+ static const Format info(ID::ETC2_R8G8B8_SRGB_BLOCK,
+ GL_COMPRESSED_SRGB8_ETC2,
+ GL_COMPRESSED_SRGB8_ETC2,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::ETC2_R8G8B8_UNORM_BLOCK:
+ {
+ static const Format info(ID::ETC2_R8G8B8_UNORM_BLOCK,
+ GL_COMPRESSED_RGB8_ETC2,
+ GL_COMPRESSED_RGB8_ETC2,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::L16A16_FLOAT:
+ {
+ static const Format info(ID::L16A16_FLOAT,
+ GL_LUMINANCE_ALPHA16F_EXT,
+ GL_LUMINANCE_ALPHA16F_EXT,
+ GenerateMip<L16A16F>,
+ ReadColor<L16A16F, GLfloat>);
+ return info;
+ }
+ case ID::L16_FLOAT:
+ {
+ static const Format info(ID::L16_FLOAT,
+ GL_LUMINANCE16F_EXT,
+ GL_LUMINANCE16F_EXT,
+ GenerateMip<L16F>,
+ ReadColor<L16F, GLfloat>);
+ return info;
+ }
+ case ID::L32A32_FLOAT:
+ {
+ static const Format info(ID::L32A32_FLOAT,
+ GL_LUMINANCE_ALPHA32F_EXT,
+ GL_LUMINANCE_ALPHA32F_EXT,
+ GenerateMip<L32A32F>,
+ ReadColor<L32A32F, GLfloat>);
+ return info;
+ }
+ case ID::L32_FLOAT:
+ {
+ static const Format info(ID::L32_FLOAT,
+ GL_LUMINANCE32F_EXT,
+ GL_LUMINANCE32F_EXT,
+ GenerateMip<L32F>,
+ ReadColor<L32F, GLfloat>);
+ return info;
+ }
+ case ID::L8A8_UNORM:
+ {
+ static const Format info(ID::L8A8_UNORM,
+ GL_LUMINANCE8_ALPHA8_EXT,
+ GL_LUMINANCE8_ALPHA8_EXT,
+ GenerateMip<L8A8>,
+ ReadColor<L8A8, GLfloat>);
+ return info;
+ }
+ case ID::L8_UNORM:
+ {
+ static const Format info(ID::L8_UNORM,
+ GL_LUMINANCE8_EXT,
+ GL_LUMINANCE8_EXT,
+ GenerateMip<L8>,
+ ReadColor<L8, GLfloat>);
+ return info;
+ }
+ case ID::NONE:
+ {
+ static const Format info(ID::NONE,
+ GL_NONE,
+ GL_NONE,
+ nullptr,
+ nullptr);
+ return info;
+ }
+ case ID::R10G10B10A2_UINT:
+ {
+ static const Format info(ID::R10G10B10A2_UINT,
+ GL_RGB10_A2UI,
+ GL_RGB10_A2UI,
+ GenerateMip<R10G10B10A2>,
+ ReadColor<R10G10B10A2, GLuint>);
+ return info;
+ }
+ case ID::R10G10B10A2_UNORM:
+ {
+ static const Format info(ID::R10G10B10A2_UNORM,
+ GL_RGB10_A2,
+ GL_RGB10_A2,
+ GenerateMip<R10G10B10A2>,
+ ReadColor<R10G10B10A2, GLfloat>);
+ return info;
+ }
+ case ID::R11G11B10_FLOAT:
+ {
+ static const Format info(ID::R11G11B10_FLOAT,
+ GL_R11F_G11F_B10F,
+ GL_R11F_G11F_B10F,
+ GenerateMip<R11G11B10F>,
+ ReadColor<R11G11B10F, GLfloat>);
+ return info;
+ }
+ case ID::R16G16B16A16_FLOAT:
+ {
+ static const Format info(ID::R16G16B16A16_FLOAT,
+ GL_RGBA16F,
+ GL_RGBA16F,
+ GenerateMip<R16G16B16A16F>,
+ ReadColor<R16G16B16A16F, GLfloat>);
+ return info;
+ }
+ case ID::R16G16B16A16_SINT:
+ {
+ static const Format info(ID::R16G16B16A16_SINT,
+ GL_RGBA16I,
+ GL_RGBA16I,
+ GenerateMip<R16G16B16A16S>,
+ ReadColor<R16G16B16A16S, GLint>);
+ return info;
+ }
+ case ID::R16G16B16A16_SNORM:
+ {
+ static const Format info(ID::R16G16B16A16_SNORM,
+ GL_RGBA16_SNORM_EXT,
+ GL_RGBA16_SNORM_EXT,
+ GenerateMip<R16G16B16A16S>,
+ ReadColor<R16G16B16A16S, GLfloat>);
+ return info;
+ }
+ case ID::R16G16B16A16_UINT:
+ {
+ static const Format info(ID::R16G16B16A16_UINT,
+ GL_RGBA16UI,
+ GL_RGBA16UI,
+ GenerateMip<R16G16B16A16>,
+ ReadColor<R16G16B16A16, GLuint>);
+ return info;
+ }
+ case ID::R16G16B16A16_UNORM:
+ {
+ static const Format info(ID::R16G16B16A16_UNORM,
+ GL_RGBA16_EXT,
+ GL_RGBA16_EXT,
+ GenerateMip<R16G16B16A16>,
+ ReadColor<R16G16B16A16, GLfloat>);
+ return info;
+ }
+ case ID::R16G16B16_FLOAT:
+ {
+ static const Format info(ID::R16G16B16_FLOAT,
+ GL_RGB16F,
+ GL_RGB16F,
+ GenerateMip<R16G16B16F>,
+ ReadColor<R16G16B16F, GLfloat>);
+ return info;
+ }
+ case ID::R16G16B16_SINT:
+ {
+ static const Format info(ID::R16G16B16_SINT,
+ GL_RGB16I,
+ GL_RGB16I,
+ GenerateMip<R16G16B16S>,
+ ReadColor<R16G16B16S, GLint>);
+ return info;
+ }
+ case ID::R16G16B16_SNORM:
+ {
+ static const Format info(ID::R16G16B16_SNORM,
+ GL_RGB16_SNORM_EXT,
+ GL_RGB16_SNORM_EXT,
+ GenerateMip<R16G16B16S>,
+ ReadColor<R16G16B16S, GLfloat>);
+ return info;
+ }
+ case ID::R16G16B16_UINT:
+ {
+ static const Format info(ID::R16G16B16_UINT,
+ GL_RGB16UI,
+ GL_RGB16UI,
+ GenerateMip<R16G16B16>,
+ ReadColor<R16G16B16, GLuint>);
+ return info;
+ }
+ case ID::R16G16B16_UNORM:
+ {
+ static const Format info(ID::R16G16B16_UNORM,
+ GL_RGB16_EXT,
+ GL_RGB16_EXT,
+ GenerateMip<R16G16B16>,
+ ReadColor<R16G16B16, GLfloat>);
+ return info;
+ }
+ case ID::R16G16_FLOAT:
+ {
+ static const Format info(ID::R16G16_FLOAT,
+ GL_RG16F,
+ GL_RG16F,
+ GenerateMip<R16G16F>,
+ ReadColor<R16G16F, GLfloat>);
+ return info;
+ }
+ case ID::R16G16_SINT:
+ {
+ static const Format info(ID::R16G16_SINT,
+ GL_RG16I,
+ GL_RG16I,
+ GenerateMip<R16G16S>,
+ ReadColor<R16G16S, GLint>);
+ return info;
+ }
+ case ID::R16G16_SNORM:
+ {
+ static const Format info(ID::R16G16_SNORM,
+ GL_RG16_SNORM_EXT,
+ GL_RG16_SNORM_EXT,
+ GenerateMip<R16G16S>,
+ ReadColor<R16G16S, GLfloat>);
+ return info;
+ }
+ case ID::R16G16_UINT:
+ {
+ static const Format info(ID::R16G16_UINT,
+ GL_RG16UI,
+ GL_RG16UI,
+ GenerateMip<R16G16>,
+ ReadColor<R16G16, GLuint>);
+ return info;
+ }
+ case ID::R16G16_UNORM:
+ {
+ static const Format info(ID::R16G16_UNORM,
+ GL_RG16_EXT,
+ GL_RG16_EXT,
+ GenerateMip<R16G16>,
+ ReadColor<R16G16, GLfloat>);
+ return info;
+ }
+ case ID::R16_FLOAT:
+ {
+ static const Format info(ID::R16_FLOAT,
+ GL_R16F,
+ GL_R16F,
+ GenerateMip<R16F>,
+ ReadColor<R16F, GLfloat>);
+ return info;
+ }
+ case ID::R16_SINT:
+ {
+ static const Format info(ID::R16_SINT,
+ GL_R16I,
+ GL_R16I,
+ GenerateMip<R16S>,
+ ReadColor<R16S, GLint>);
+ return info;
+ }
+ case ID::R16_SNORM:
+ {
+ static const Format info(ID::R16_SNORM,
+ GL_R16_SNORM_EXT,
+ GL_R16_SNORM_EXT,
+ GenerateMip<R16S>,
+ ReadColor<R16S, GLfloat>);
+ return info;
+ }
+ case ID::R16_UINT:
+ {
+ static const Format info(ID::R16_UINT,
+ GL_R16UI,
+ GL_R16UI,
+ GenerateMip<R16>,
+ ReadColor<R16, GLuint>);
+ return info;
+ }
+ case ID::R16_UNORM:
+ {
+ static const Format info(ID::R16_UNORM,
+ GL_R16_EXT,
+ GL_R16_EXT,
+ GenerateMip<R16>,
+ ReadColor<R16, GLfloat>);
+ return info;
+ }
+ case ID::R32G32B32A32_FLOAT:
+ {
+ static const Format info(ID::R32G32B32A32_FLOAT,
+ GL_RGBA32F,
+ GL_RGBA32F,
+ GenerateMip<R32G32B32A32F>,
+ ReadColor<R32G32B32A32F, GLfloat>);
+ return info;
+ }
+ case ID::R32G32B32A32_SINT:
+ {
+ static const Format info(ID::R32G32B32A32_SINT,
+ GL_RGBA32I,
+ GL_RGBA32I,
+ GenerateMip<R32G32B32A32S>,
+ ReadColor<R32G32B32A32S, GLint>);
+ return info;
+ }
+ case ID::R32G32B32A32_UINT:
+ {
+ static const Format info(ID::R32G32B32A32_UINT,
+ GL_RGBA32UI,
+ GL_RGBA32UI,
+ GenerateMip<R32G32B32A32>,
+ ReadColor<R32G32B32A32, GLuint>);
+ return info;
+ }
+ case ID::R32G32B32_FLOAT:
+ {
+ static const Format info(ID::R32G32B32_FLOAT,
+ GL_RGB32F,
+ GL_RGB32F,
+ GenerateMip<R32G32B32F>,
+ ReadColor<R32G32B32F, GLfloat>);
+ return info;
+ }
+ case ID::R32G32B32_SINT:
+ {
+ static const Format info(ID::R32G32B32_SINT,
+ GL_RGB32I,
+ GL_RGB32I,
+ GenerateMip<R32G32B32S>,
+ ReadColor<R32G32B32S, GLint>);
+ return info;
+ }
+ case ID::R32G32B32_UINT:
+ {
+ static const Format info(ID::R32G32B32_UINT,
+ GL_RGB32UI,
+ GL_RGB32UI,
+ GenerateMip<R32G32B32>,
+ ReadColor<R32G32B32, GLuint>);
+ return info;
+ }
+ case ID::R32G32_FLOAT:
+ {
+ static const Format info(ID::R32G32_FLOAT,
+ GL_RG32F,
+ GL_RG32F,
+ GenerateMip<R32G32F>,
+ ReadColor<R32G32F, GLfloat>);
+ return info;
+ }
+ case ID::R32G32_SINT:
+ {
+ static const Format info(ID::R32G32_SINT,
+ GL_RG32I,
+ GL_RG32I,
+ GenerateMip<R32G32S>,
+ ReadColor<R32G32S, GLint>);
+ return info;
+ }
+ case ID::R32G32_UINT:
+ {
+ static const Format info(ID::R32G32_UINT,
+ GL_RG32UI,
+ GL_RG32UI,
+ GenerateMip<R32G32>,
+ ReadColor<R32G32, GLuint>);
+ return info;
+ }
+ case ID::R32_FLOAT:
+ {
+ static const Format info(ID::R32_FLOAT,
+ GL_R32F,
+ GL_R32F,
+ GenerateMip<R32F>,
+ ReadColor<R32F, GLfloat>);
+ return info;
+ }
+ case ID::R32_SINT:
+ {
+ static const Format info(ID::R32_SINT,
+ GL_R32I,
+ GL_R32I,
+ GenerateMip<R32S>,
+ ReadColor<R32S, GLint>);
+ return info;
+ }
+ case ID::R32_UINT:
+ {
+ static const Format info(ID::R32_UINT,
+ GL_R32UI,
+ GL_R32UI,
+ GenerateMip<R32>,
+ ReadColor<R32, GLuint>);
+ return info;
+ }
+ case ID::R4G4B4A4_UNORM:
+ {
+ static const Format info(ID::R4G4B4A4_UNORM,
+ GL_RGBA4,
+ GL_RGBA4,
+ GenerateMip<R4G4B4A4>,
+ ReadColor<R4G4B4A4, GLfloat>);
+ return info;
+ }
+ case ID::R5G5B5A1_UNORM:
+ {
+ static const Format info(ID::R5G5B5A1_UNORM,
+ GL_RGB5_A1,
+ GL_RGB5_A1,
+ GenerateMip<R5G5B5A1>,
+ ReadColor<R5G5B5A1, GLfloat>);
+ return info;
+ }
+ case ID::R5G6B5_UNORM:
+ {
+ static const Format info(ID::R5G6B5_UNORM,
+ GL_RGB565,
+ GL_RGB565,
+ GenerateMip<R5G6B5>,
+ ReadColor<R5G6B5, GLfloat>);
+ return info;
+ }
+ case ID::R8G8B8A8_SINT:
+ {
+ static const Format info(ID::R8G8B8A8_SINT,
+ GL_RGBA8I,
+ GL_RGBA8I,
+ GenerateMip<R8G8B8A8S>,
+ ReadColor<R8G8B8A8S, GLint>);
+ return info;
+ }
+ case ID::R8G8B8A8_SNORM:
+ {
+ static const Format info(ID::R8G8B8A8_SNORM,
+ GL_RGBA8_SNORM,
+ GL_RGBA8_SNORM,
+ GenerateMip<R8G8B8A8S>,
+ ReadColor<R8G8B8A8S, GLfloat>);
+ return info;
+ }
+ case ID::R8G8B8A8_UINT:
+ {
+ static const Format info(ID::R8G8B8A8_UINT,
+ GL_RGBA8UI,
+ GL_RGBA8UI,
+ GenerateMip<R8G8B8A8>,
+ ReadColor<R8G8B8A8, GLuint>);
+ return info;
+ }
+ case ID::R8G8B8A8_UNORM:
+ {
+ static const Format info(ID::R8G8B8A8_UNORM,
+ GL_RGBA8,
+ GL_RGBA8,
+ GenerateMip<R8G8B8A8>,
+ ReadColor<R8G8B8A8, GLfloat>);
+ return info;
+ }
+ case ID::R8G8B8A8_UNORM_SRGB:
+ {
+ static const Format info(ID::R8G8B8A8_UNORM_SRGB,
+ GL_SRGB8_ALPHA8,
+ GL_SRGB8_ALPHA8,
+ GenerateMip<R8G8B8A8>,
+ ReadColor<R8G8B8A8, GLfloat>);
+ return info;
+ }
+ case ID::R8G8B8_SINT:
+ {
+ static const Format info(ID::R8G8B8_SINT,
+ GL_RGB8I,
+ GL_RGB8I,
+ GenerateMip<R8G8B8S>,
+ ReadColor<R8G8B8S, GLint>);
+ return info;
+ }
+ case ID::R8G8B8_SNORM:
+ {
+ static const Format info(ID::R8G8B8_SNORM,
+ GL_RGB8_SNORM,
+ GL_RGB8_SNORM,
+ GenerateMip<R8G8B8S>,
+ ReadColor<R8G8B8S, GLfloat>);
+ return info;
+ }
+ case ID::R8G8B8_UINT:
+ {
+ static const Format info(ID::R8G8B8_UINT,
+ GL_RGB8UI,
+ GL_RGB8UI,
+ GenerateMip<R8G8B8>,
+ ReadColor<R8G8B8, GLuint>);
+ return info;
+ }
+ case ID::R8G8B8_UNORM:
+ {
+ static const Format info(ID::R8G8B8_UNORM,
+ GL_RGB8,
+ GL_RGB8,
+ GenerateMip<R8G8B8>,
+ ReadColor<R8G8B8, GLfloat>);
+ return info;
+ }
+ case ID::R8G8B8_UNORM_SRGB:
+ {
+ static const Format info(ID::R8G8B8_UNORM_SRGB,
+ GL_SRGB8,
+ GL_SRGB8,
+ GenerateMip<R8G8B8>,
+ ReadColor<R8G8B8, GLfloat>);
+ return info;
+ }
+ case ID::R8G8_SINT:
+ {
+ static const Format info(ID::R8G8_SINT,
+ GL_RG8I,
+ GL_RG8I,
+ GenerateMip<R8G8S>,
+ ReadColor<R8G8S, GLint>);
+ return info;
+ }
+ case ID::R8G8_SNORM:
+ {
+ static const Format info(ID::R8G8_SNORM,
+ GL_RG8_SNORM,
+ GL_RG8_SNORM,
+ GenerateMip<R8G8S>,
+ ReadColor<R8G8S, GLfloat>);
+ return info;
+ }
+ case ID::R8G8_UINT:
+ {
+ static const Format info(ID::R8G8_UINT,
+ GL_RG8UI,
+ GL_RG8UI,
+ GenerateMip<R8G8>,
+ ReadColor<R8G8, GLuint>);
+ return info;
+ }
+ case ID::R8G8_UNORM:
+ {
+ static const Format info(ID::R8G8_UNORM,
+ GL_RG8,
+ GL_RG8,
+ GenerateMip<R8G8>,
+ ReadColor<R8G8, GLfloat>);
+ return info;
+ }
+ case ID::R8_SINT:
+ {
+ static const Format info(ID::R8_SINT,
+ GL_R8I,
+ GL_R8I,
+ GenerateMip<R8S>,
+ ReadColor<R8S, GLint>);
+ return info;
+ }
+ case ID::R8_SNORM:
+ {
+ static const Format info(ID::R8_SNORM,
+ GL_R8_SNORM,
+ GL_R8_SNORM,
+ GenerateMip<R8S>,
+ ReadColor<R8S, GLfloat>);
+ return info;
+ }
+ case ID::R8_UINT:
+ {
+ static const Format info(ID::R8_UINT,
+ GL_R8UI,
+ GL_R8UI,
+ GenerateMip<R8>,
+ ReadColor<R8, GLuint>);
+ return info;
+ }
+ case ID::R8_UNORM:
+ {
+ static const Format info(ID::R8_UNORM,
+ GL_R8,
+ GL_R8,
+ GenerateMip<R8>,
+ ReadColor<R8, GLfloat>);
+ return info;
+ }
+ case ID::R9G9B9E5_SHAREDEXP:
+ {
+ static const Format info(ID::R9G9B9E5_SHAREDEXP,
+ GL_RGB9_E5,
+ GL_RGB9_E5,
+ GenerateMip<R9G9B9E5>,
+ ReadColor<R9G9B9E5, GLfloat>);
+ return info;
+ }
+ case ID::S8_UINT:
+ {
+ static const Format info(ID::S8_UINT,
+ GL_STENCIL_INDEX8,
+ GL_STENCIL_INDEX8,
+ nullptr,
+ nullptr);
+ return info;
+ }
+
+ default:
+ UNREACHABLE();
+ break;
+ }
+ // clang-format on
+
+ static const Format noneInfo(ID::NONE, GL_NONE, GL_NONE, nullptr, nullptr);
+ return noneInfo;
+}
+
+} // namespace angle
diff --git a/gfx/angle/src/libANGLE/renderer/Format_table_autogen.cpp b/gfx/angle/src/libANGLE/renderer/Format_table_autogen.cpp
deleted file mode 100644
index 507827ff1..000000000
--- a/gfx/angle/src/libANGLE/renderer/Format_table_autogen.cpp
+++ /dev/null
@@ -1,157 +0,0 @@
-// GENERATED FILE - DO NOT EDIT.
-// Generated by gen_angle_format_table.py using data from angle_format_data.json
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// ANGLE Format table:
-// Queries for typed format information from the ANGLE format enum.
-
-#include "libANGLE/renderer/Format.h"
-
-#include "image_util/copyimage.h"
-#include "image_util/generatemip.h"
-#include "image_util/loadimage.h"
-
-namespace angle
-{
-
-static constexpr rx::FastCopyFunctionMap::Entry BGRAEntry = {GL_RGBA, GL_UNSIGNED_BYTE,
- CopyBGRA8ToRGBA8};
-static constexpr rx::FastCopyFunctionMap BGRACopyFunctions = {&BGRAEntry, 1};
-static constexpr rx::FastCopyFunctionMap NoCopyFunctions;
-
-constexpr Format g_formatInfoTable[] = {
- // clang-format off
- { Format::ID::NONE, GL_NONE, GL_NONE, nullptr, NoCopyFunctions, nullptr, GL_NONE, 0, 0, 0, 0, 0, 0 },
- { Format::ID::A16_FLOAT, GL_ALPHA16F_EXT, GL_ALPHA16F_EXT, GenerateMip<A16F>, NoCopyFunctions, ReadColor<A16F, GLfloat>, GL_FLOAT, 0, 0, 0, 16, 0, 0 },
- { Format::ID::A32_FLOAT, GL_ALPHA32F_EXT, GL_ALPHA32F_EXT, GenerateMip<A32F>, NoCopyFunctions, ReadColor<A32F, GLfloat>, GL_FLOAT, 0, 0, 0, 32, 0, 0 },
- { Format::ID::A8_UNORM, GL_ALPHA8_EXT, GL_ALPHA8_EXT, GenerateMip<A8>, NoCopyFunctions, ReadColor<A8, GLfloat>, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 8, 0, 0 },
- { Format::ID::ASTC_10x10_SRGB_BLOCK, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR, nullptr, NoCopyFunctions, nullptr, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 0, 0 },
- { Format::ID::ASTC_10x10_UNORM_BLOCK, GL_COMPRESSED_RGBA_ASTC_10x10_KHR, GL_COMPRESSED_RGBA_ASTC_10x10_KHR, nullptr, NoCopyFunctions, nullptr, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 0, 0 },
- { Format::ID::ASTC_10x5_SRGB_BLOCK, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR, nullptr, NoCopyFunctions, nullptr, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 0, 0 },
- { Format::ID::ASTC_10x5_UNORM_BLOCK, GL_COMPRESSED_RGBA_ASTC_10x5_KHR, GL_COMPRESSED_RGBA_ASTC_10x5_KHR, nullptr, NoCopyFunctions, nullptr, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 0, 0 },
- { Format::ID::ASTC_10x6_SRGB_BLOCK, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR, nullptr, NoCopyFunctions, nullptr, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 0, 0 },
- { Format::ID::ASTC_10x6_UNORM_BLOCK, GL_COMPRESSED_RGBA_ASTC_10x6_KHR, GL_COMPRESSED_RGBA_ASTC_10x6_KHR, nullptr, NoCopyFunctions, nullptr, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 0, 0 },
- { Format::ID::ASTC_10x8_SRGB_BLOCK, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR, nullptr, NoCopyFunctions, nullptr, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 0, 0 },
- { Format::ID::ASTC_10x8_UNORM_BLOCK, GL_COMPRESSED_RGBA_ASTC_10x8_KHR, GL_COMPRESSED_RGBA_ASTC_10x8_KHR, nullptr, NoCopyFunctions, nullptr, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 0, 0 },
- { Format::ID::ASTC_12x10_SRGB_BLOCK, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR, nullptr, NoCopyFunctions, nullptr, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 0, 0 },
- { Format::ID::ASTC_12x10_UNORM_BLOCK, GL_COMPRESSED_RGBA_ASTC_12x10_KHR, GL_COMPRESSED_RGBA_ASTC_12x10_KHR, nullptr, NoCopyFunctions, nullptr, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 0, 0 },
- { Format::ID::ASTC_12x12_SRGB_BLOCK, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR, nullptr, NoCopyFunctions, nullptr, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 0, 0 },
- { Format::ID::ASTC_12x12_UNORM_BLOCK, GL_COMPRESSED_RGBA_ASTC_12x12_KHR, GL_COMPRESSED_RGBA_ASTC_12x12_KHR, nullptr, NoCopyFunctions, nullptr, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 0, 0 },
- { Format::ID::ASTC_4x4_SRGB_BLOCK, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR, nullptr, NoCopyFunctions, nullptr, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 0, 0 },
- { Format::ID::ASTC_4x4_UNORM_BLOCK, GL_COMPRESSED_RGBA_ASTC_4x4_KHR, GL_COMPRESSED_RGBA_ASTC_4x4_KHR, nullptr, NoCopyFunctions, nullptr, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 0, 0 },
- { Format::ID::ASTC_5x4_SRGB_BLOCK, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR, nullptr, NoCopyFunctions, nullptr, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 0, 0 },
- { Format::ID::ASTC_5x4_UNORM_BLOCK, GL_COMPRESSED_RGBA_ASTC_5x4_KHR, GL_COMPRESSED_RGBA_ASTC_5x4_KHR, nullptr, NoCopyFunctions, nullptr, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 0, 0 },
- { Format::ID::ASTC_5x5_SRGB_BLOCK, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR, nullptr, NoCopyFunctions, nullptr, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 0, 0 },
- { Format::ID::ASTC_5x5_UNORM_BLOCK, GL_COMPRESSED_RGBA_ASTC_5x5_KHR, GL_COMPRESSED_RGBA_ASTC_5x5_KHR, nullptr, NoCopyFunctions, nullptr, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 0, 0 },
- { Format::ID::ASTC_6x5_SRGB_BLOCK, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR, nullptr, NoCopyFunctions, nullptr, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 0, 0 },
- { Format::ID::ASTC_6x5_UNORM_BLOCK, GL_COMPRESSED_RGBA_ASTC_6x5_KHR, GL_COMPRESSED_RGBA_ASTC_6x5_KHR, nullptr, NoCopyFunctions, nullptr, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 0, 0 },
- { Format::ID::ASTC_6x6_SRGB_BLOCK, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR, nullptr, NoCopyFunctions, nullptr, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 0, 0 },
- { Format::ID::ASTC_6x6_UNORM_BLOCK, GL_COMPRESSED_RGBA_ASTC_6x6_KHR, GL_COMPRESSED_RGBA_ASTC_6x6_KHR, nullptr, NoCopyFunctions, nullptr, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 0, 0 },
- { Format::ID::ASTC_8x5_SRGB_BLOCK, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR, nullptr, NoCopyFunctions, nullptr, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 0, 0 },
- { Format::ID::ASTC_8x5_UNORM_BLOCK, GL_COMPRESSED_RGBA_ASTC_8x5_KHR, GL_COMPRESSED_RGBA_ASTC_8x5_KHR, nullptr, NoCopyFunctions, nullptr, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 0, 0 },
- { Format::ID::ASTC_8x6_SRGB_BLOCK, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR, nullptr, NoCopyFunctions, nullptr, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 0, 0 },
- { Format::ID::ASTC_8x6_UNORM_BLOCK, GL_COMPRESSED_RGBA_ASTC_8x6_KHR, GL_COMPRESSED_RGBA_ASTC_8x6_KHR, nullptr, NoCopyFunctions, nullptr, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 0, 0 },
- { Format::ID::ASTC_8x8_SRGB_BLOCK, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR, nullptr, NoCopyFunctions, nullptr, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 0, 0 },
- { Format::ID::ASTC_8x8_UNORM_BLOCK, GL_COMPRESSED_RGBA_ASTC_8x8_KHR, GL_COMPRESSED_RGBA_ASTC_8x8_KHR, nullptr, NoCopyFunctions, nullptr, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 0, 0 },
- { Format::ID::B4G4R4A4_UNORM, GL_BGRA4_ANGLEX, GL_RGBA4, GenerateMip<A4R4G4B4>, NoCopyFunctions, ReadColor<A4R4G4B4, GLfloat>, GL_UNSIGNED_NORMALIZED, 4, 4, 4, 4, 0, 0 },
- { Format::ID::B5G5R5A1_UNORM, GL_BGR5_A1_ANGLEX, GL_RGB5_A1, GenerateMip<A1R5G5B5>, NoCopyFunctions, ReadColor<A1R5G5B5, GLfloat>, GL_UNSIGNED_NORMALIZED, 5, 5, 5, 1, 0, 0 },
- { Format::ID::B5G6R5_UNORM, GL_BGR565_ANGLEX, GL_RGB565, GenerateMip<B5G6R5>, NoCopyFunctions, ReadColor<B5G6R5, GLfloat>, GL_UNSIGNED_NORMALIZED, 5, 6, 5, 0, 0, 0 },
- { Format::ID::B8G8R8A8_UNORM, GL_BGRA8_EXT, GL_BGRA8_EXT, GenerateMip<B8G8R8A8>, BGRACopyFunctions, ReadColor<B8G8R8A8, GLfloat>, GL_UNSIGNED_NORMALIZED, 8, 8, 8, 8, 0, 0 },
- { Format::ID::B8G8R8X8_UNORM, GL_BGRA8_EXT, GL_BGRA8_EXT, GenerateMip<B8G8R8X8>, NoCopyFunctions, ReadColor<B8G8R8X8, GLfloat>, GL_UNSIGNED_NORMALIZED, 8, 8, 8, 0, 0, 0 },
- { Format::ID::BC1_RGBA_UNORM_BLOCK, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, nullptr, NoCopyFunctions, nullptr, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 0, 0 },
- { Format::ID::BC1_RGB_UNORM_BLOCK, GL_COMPRESSED_RGB_S3TC_DXT1_EXT, GL_COMPRESSED_RGB_S3TC_DXT1_EXT, nullptr, NoCopyFunctions, nullptr, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 0, 0 },
- { Format::ID::BC2_RGBA_UNORM_BLOCK, GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE, GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE, nullptr, NoCopyFunctions, nullptr, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 0, 0 },
- { Format::ID::BC3_RGBA_UNORM_BLOCK, GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE, GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE, nullptr, NoCopyFunctions, nullptr, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 0, 0 },
- { Format::ID::D16_UNORM, GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT16, nullptr, NoCopyFunctions, nullptr, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 16, 0 },
- { Format::ID::D24_UNORM, GL_DEPTH_COMPONENT24, GL_DEPTH_COMPONENT24, nullptr, NoCopyFunctions, nullptr, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 24, 0 },
- { Format::ID::D24_UNORM_S8_UINT, GL_DEPTH24_STENCIL8, GL_DEPTH24_STENCIL8, nullptr, NoCopyFunctions, nullptr, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 24, 8 },
- { Format::ID::D32_FLOAT, GL_DEPTH_COMPONENT32F, GL_DEPTH_COMPONENT32F, nullptr, NoCopyFunctions, nullptr, GL_FLOAT, 0, 0, 0, 0, 32, 0 },
- { Format::ID::D32_FLOAT_S8X24_UINT, GL_DEPTH32F_STENCIL8, GL_DEPTH32F_STENCIL8, nullptr, NoCopyFunctions, nullptr, GL_FLOAT, 0, 0, 0, 0, 32, 8 },
- { Format::ID::D32_UNORM, GL_DEPTH_COMPONENT32_OES, GL_DEPTH_COMPONENT32_OES, nullptr, NoCopyFunctions, nullptr, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 32, 0 },
- { Format::ID::EAC_R11G11_SNORM_BLOCK, GL_COMPRESSED_SIGNED_RG11_EAC, GL_COMPRESSED_SIGNED_RG11_EAC, nullptr, NoCopyFunctions, nullptr, GL_SIGNED_NORMALIZED, 11, 11, 0, 0, 0, 0 },
- { Format::ID::EAC_R11G11_UNORM_BLOCK, GL_COMPRESSED_RG11_EAC, GL_COMPRESSED_RG11_EAC, nullptr, NoCopyFunctions, nullptr, GL_UNSIGNED_NORMALIZED, 11, 11, 0, 0, 0, 0 },
- { Format::ID::EAC_R11_SNORM_BLOCK, GL_COMPRESSED_SIGNED_R11_EAC, GL_COMPRESSED_SIGNED_R11_EAC, nullptr, NoCopyFunctions, nullptr, GL_SIGNED_NORMALIZED, 11, 0, 0, 0, 0, 0 },
- { Format::ID::EAC_R11_UNORM_BLOCK, GL_COMPRESSED_R11_EAC, GL_COMPRESSED_R11_EAC, nullptr, NoCopyFunctions, nullptr, GL_UNSIGNED_NORMALIZED, 11, 0, 0, 0, 0, 0 },
- { Format::ID::ETC2_R8G8B8A1_SRGB_BLOCK, GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, nullptr, NoCopyFunctions, nullptr, GL_UNSIGNED_NORMALIZED, 8, 8, 8, 1, 0, 0 },
- { Format::ID::ETC2_R8G8B8A1_UNORM_BLOCK, GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, nullptr, NoCopyFunctions, nullptr, GL_UNSIGNED_NORMALIZED, 8, 8, 8, 1, 0, 0 },
- { Format::ID::ETC2_R8G8B8A8_SRGB_BLOCK, GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, nullptr, NoCopyFunctions, nullptr, GL_UNSIGNED_NORMALIZED, 8, 8, 8, 8, 0, 0 },
- { Format::ID::ETC2_R8G8B8A8_UNORM_BLOCK, GL_COMPRESSED_RGBA8_ETC2_EAC, GL_COMPRESSED_RGBA8_ETC2_EAC, nullptr, NoCopyFunctions, nullptr, GL_UNSIGNED_NORMALIZED, 8, 8, 8, 8, 0, 0 },
- { Format::ID::ETC2_R8G8B8_SRGB_BLOCK, GL_COMPRESSED_SRGB8_ETC2, GL_COMPRESSED_SRGB8_ETC2, nullptr, NoCopyFunctions, nullptr, GL_UNSIGNED_NORMALIZED, 8, 8, 8, 0, 0, 0 },
- { Format::ID::ETC2_R8G8B8_UNORM_BLOCK, GL_COMPRESSED_RGB8_ETC2, GL_COMPRESSED_RGB8_ETC2, nullptr, NoCopyFunctions, nullptr, GL_UNSIGNED_NORMALIZED, 8, 8, 8, 0, 0, 0 },
- { Format::ID::L16A16_FLOAT, GL_LUMINANCE_ALPHA16F_EXT, GL_LUMINANCE_ALPHA16F_EXT, GenerateMip<L16A16F>, NoCopyFunctions, ReadColor<L16A16F, GLfloat>, GL_FLOAT, 0, 0, 0, 16, 0, 0 },
- { Format::ID::L16_FLOAT, GL_LUMINANCE16F_EXT, GL_LUMINANCE16F_EXT, GenerateMip<L16F>, NoCopyFunctions, ReadColor<L16F, GLfloat>, GL_FLOAT, 0, 0, 0, 0, 0, 0 },
- { Format::ID::L32A32_FLOAT, GL_LUMINANCE_ALPHA32F_EXT, GL_LUMINANCE_ALPHA32F_EXT, GenerateMip<L32A32F>, NoCopyFunctions, ReadColor<L32A32F, GLfloat>, GL_FLOAT, 0, 0, 0, 32, 0, 0 },
- { Format::ID::L32_FLOAT, GL_LUMINANCE32F_EXT, GL_LUMINANCE32F_EXT, GenerateMip<L32F>, NoCopyFunctions, ReadColor<L32F, GLfloat>, GL_FLOAT, 0, 0, 0, 0, 0, 0 },
- { Format::ID::L8A8_UNORM, GL_LUMINANCE8_ALPHA8_EXT, GL_LUMINANCE8_ALPHA8_EXT, GenerateMip<L8A8>, NoCopyFunctions, ReadColor<L8A8, GLfloat>, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 8, 0, 0 },
- { Format::ID::L8_UNORM, GL_LUMINANCE8_EXT, GL_LUMINANCE8_EXT, GenerateMip<L8>, NoCopyFunctions, ReadColor<L8, GLfloat>, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, 0, 0 },
- { Format::ID::R10G10B10A2_UINT, GL_RGB10_A2UI, GL_RGB10_A2UI, GenerateMip<R10G10B10A2>, NoCopyFunctions, ReadColor<R10G10B10A2, GLuint>, GL_UNSIGNED_INT, 10, 10, 10, 2, 0, 0 },
- { Format::ID::R10G10B10A2_UNORM, GL_RGB10_A2, GL_RGB10_A2, GenerateMip<R10G10B10A2>, NoCopyFunctions, ReadColor<R10G10B10A2, GLfloat>, GL_UNSIGNED_NORMALIZED, 10, 10, 10, 2, 0, 0 },
- { Format::ID::R11G11B10_FLOAT, GL_R11F_G11F_B10F, GL_R11F_G11F_B10F, GenerateMip<R11G11B10F>, NoCopyFunctions, ReadColor<R11G11B10F, GLfloat>, GL_FLOAT, 11, 11, 10, 0, 0, 0 },
- { Format::ID::R16G16B16A16_FLOAT, GL_RGBA16F, GL_RGBA16F, GenerateMip<R16G16B16A16F>, NoCopyFunctions, ReadColor<R16G16B16A16F, GLfloat>, GL_FLOAT, 16, 16, 16, 16, 0, 0 },
- { Format::ID::R16G16B16A16_SINT, GL_RGBA16I, GL_RGBA16I, GenerateMip<R16G16B16A16S>, NoCopyFunctions, ReadColor<R16G16B16A16S, GLint>, GL_INT, 16, 16, 16, 16, 0, 0 },
- { Format::ID::R16G16B16A16_SNORM, GL_RGBA16_SNORM_EXT, GL_RGBA16_SNORM_EXT, GenerateMip<R16G16B16A16S>, NoCopyFunctions, ReadColor<R16G16B16A16S, GLfloat>, GL_SIGNED_NORMALIZED, 16, 16, 16, 16, 0, 0 },
- { Format::ID::R16G16B16A16_UINT, GL_RGBA16UI, GL_RGBA16UI, GenerateMip<R16G16B16A16>, NoCopyFunctions, ReadColor<R16G16B16A16, GLuint>, GL_UNSIGNED_INT, 16, 16, 16, 16, 0, 0 },
- { Format::ID::R16G16B16A16_UNORM, GL_RGBA16_EXT, GL_RGBA16_EXT, GenerateMip<R16G16B16A16>, NoCopyFunctions, ReadColor<R16G16B16A16, GLfloat>, GL_UNSIGNED_NORMALIZED, 16, 16, 16, 16, 0, 0 },
- { Format::ID::R16G16B16_FLOAT, GL_RGB16F, GL_RGB16F, GenerateMip<R16G16B16F>, NoCopyFunctions, ReadColor<R16G16B16F, GLfloat>, GL_FLOAT, 16, 16, 16, 0, 0, 0 },
- { Format::ID::R16G16B16_SINT, GL_RGB16I, GL_RGB16I, GenerateMip<R16G16B16S>, NoCopyFunctions, ReadColor<R16G16B16S, GLint>, GL_INT, 16, 16, 16, 0, 0, 0 },
- { Format::ID::R16G16B16_SNORM, GL_RGB16_SNORM_EXT, GL_RGB16_SNORM_EXT, GenerateMip<R16G16B16S>, NoCopyFunctions, ReadColor<R16G16B16S, GLfloat>, GL_SIGNED_NORMALIZED, 16, 16, 16, 0, 0, 0 },
- { Format::ID::R16G16B16_UINT, GL_RGB16UI, GL_RGB16UI, GenerateMip<R16G16B16>, NoCopyFunctions, ReadColor<R16G16B16, GLuint>, GL_UNSIGNED_INT, 16, 16, 16, 0, 0, 0 },
- { Format::ID::R16G16B16_UNORM, GL_RGB16_EXT, GL_RGB16_EXT, GenerateMip<R16G16B16>, NoCopyFunctions, ReadColor<R16G16B16, GLfloat>, GL_UNSIGNED_NORMALIZED, 16, 16, 16, 0, 0, 0 },
- { Format::ID::R16G16_FLOAT, GL_RG16F, GL_RG16F, GenerateMip<R16G16F>, NoCopyFunctions, ReadColor<R16G16F, GLfloat>, GL_FLOAT, 16, 16, 0, 0, 0, 0 },
- { Format::ID::R16G16_SINT, GL_RG16I, GL_RG16I, GenerateMip<R16G16S>, NoCopyFunctions, ReadColor<R16G16S, GLint>, GL_INT, 16, 16, 0, 0, 0, 0 },
- { Format::ID::R16G16_SNORM, GL_RG16_SNORM_EXT, GL_RG16_SNORM_EXT, GenerateMip<R16G16S>, NoCopyFunctions, ReadColor<R16G16S, GLfloat>, GL_SIGNED_NORMALIZED, 16, 16, 0, 0, 0, 0 },
- { Format::ID::R16G16_UINT, GL_RG16UI, GL_RG16UI, GenerateMip<R16G16>, NoCopyFunctions, ReadColor<R16G16, GLuint>, GL_UNSIGNED_INT, 16, 16, 0, 0, 0, 0 },
- { Format::ID::R16G16_UNORM, GL_RG16_EXT, GL_RG16_EXT, GenerateMip<R16G16>, NoCopyFunctions, ReadColor<R16G16, GLfloat>, GL_UNSIGNED_NORMALIZED, 16, 16, 0, 0, 0, 0 },
- { Format::ID::R16_FLOAT, GL_R16F, GL_R16F, GenerateMip<R16F>, NoCopyFunctions, ReadColor<R16F, GLfloat>, GL_FLOAT, 16, 0, 0, 0, 0, 0 },
- { Format::ID::R16_SINT, GL_R16I, GL_R16I, GenerateMip<R16S>, NoCopyFunctions, ReadColor<R16S, GLint>, GL_INT, 16, 0, 0, 0, 0, 0 },
- { Format::ID::R16_SNORM, GL_R16_SNORM_EXT, GL_R16_SNORM_EXT, GenerateMip<R16S>, NoCopyFunctions, ReadColor<R16S, GLfloat>, GL_SIGNED_NORMALIZED, 16, 0, 0, 0, 0, 0 },
- { Format::ID::R16_UINT, GL_R16UI, GL_R16UI, GenerateMip<R16>, NoCopyFunctions, ReadColor<R16, GLuint>, GL_UNSIGNED_INT, 16, 0, 0, 0, 0, 0 },
- { Format::ID::R16_UNORM, GL_R16_EXT, GL_R16_EXT, GenerateMip<R16>, NoCopyFunctions, ReadColor<R16, GLfloat>, GL_UNSIGNED_NORMALIZED, 16, 0, 0, 0, 0, 0 },
- { Format::ID::R32G32B32A32_FLOAT, GL_RGBA32F, GL_RGBA32F, GenerateMip<R32G32B32A32F>, NoCopyFunctions, ReadColor<R32G32B32A32F, GLfloat>, GL_FLOAT, 32, 32, 32, 32, 0, 0 },
- { Format::ID::R32G32B32A32_SINT, GL_RGBA32I, GL_RGBA32I, GenerateMip<R32G32B32A32S>, NoCopyFunctions, ReadColor<R32G32B32A32S, GLint>, GL_INT, 32, 32, 32, 32, 0, 0 },
- { Format::ID::R32G32B32A32_UINT, GL_RGBA32UI, GL_RGBA32UI, GenerateMip<R32G32B32A32>, NoCopyFunctions, ReadColor<R32G32B32A32, GLuint>, GL_UNSIGNED_INT, 32, 32, 32, 32, 0, 0 },
- { Format::ID::R32G32B32_FLOAT, GL_RGB32F, GL_RGB32F, GenerateMip<R32G32B32F>, NoCopyFunctions, ReadColor<R32G32B32F, GLfloat>, GL_FLOAT, 32, 32, 32, 0, 0, 0 },
- { Format::ID::R32G32B32_SINT, GL_RGB32I, GL_RGB32I, GenerateMip<R32G32B32S>, NoCopyFunctions, ReadColor<R32G32B32S, GLint>, GL_INT, 32, 32, 32, 0, 0, 0 },
- { Format::ID::R32G32B32_UINT, GL_RGB32UI, GL_RGB32UI, GenerateMip<R32G32B32>, NoCopyFunctions, ReadColor<R32G32B32, GLuint>, GL_UNSIGNED_INT, 32, 32, 32, 0, 0, 0 },
- { Format::ID::R32G32_FLOAT, GL_RG32F, GL_RG32F, GenerateMip<R32G32F>, NoCopyFunctions, ReadColor<R32G32F, GLfloat>, GL_FLOAT, 32, 32, 0, 0, 0, 0 },
- { Format::ID::R32G32_SINT, GL_RG32I, GL_RG32I, GenerateMip<R32G32S>, NoCopyFunctions, ReadColor<R32G32S, GLint>, GL_INT, 32, 32, 0, 0, 0, 0 },
- { Format::ID::R32G32_UINT, GL_RG32UI, GL_RG32UI, GenerateMip<R32G32>, NoCopyFunctions, ReadColor<R32G32, GLuint>, GL_UNSIGNED_INT, 32, 32, 0, 0, 0, 0 },
- { Format::ID::R32_FLOAT, GL_R32F, GL_R32F, GenerateMip<R32F>, NoCopyFunctions, ReadColor<R32F, GLfloat>, GL_FLOAT, 32, 0, 0, 0, 0, 0 },
- { Format::ID::R32_SINT, GL_R32I, GL_R32I, GenerateMip<R32S>, NoCopyFunctions, ReadColor<R32S, GLint>, GL_INT, 32, 0, 0, 0, 0, 0 },
- { Format::ID::R32_UINT, GL_R32UI, GL_R32UI, GenerateMip<R32>, NoCopyFunctions, ReadColor<R32, GLuint>, GL_UNSIGNED_INT, 32, 0, 0, 0, 0, 0 },
- { Format::ID::R4G4B4A4_UNORM, GL_RGBA4, GL_RGBA4, GenerateMip<R4G4B4A4>, NoCopyFunctions, ReadColor<R4G4B4A4, GLfloat>, GL_UNSIGNED_NORMALIZED, 4, 4, 4, 4, 0, 0 },
- { Format::ID::R5G5B5A1_UNORM, GL_RGB5_A1, GL_RGB5_A1, GenerateMip<R5G5B5A1>, NoCopyFunctions, ReadColor<R5G5B5A1, GLfloat>, GL_UNSIGNED_NORMALIZED, 5, 5, 5, 1, 0, 0 },
- { Format::ID::R5G6B5_UNORM, GL_RGB565, GL_RGB565, GenerateMip<R5G6B5>, NoCopyFunctions, ReadColor<R5G6B5, GLfloat>, GL_UNSIGNED_NORMALIZED, 5, 6, 5, 0, 0, 0 },
- { Format::ID::R8G8B8A8_SINT, GL_RGBA8I, GL_RGBA8I, GenerateMip<R8G8B8A8S>, NoCopyFunctions, ReadColor<R8G8B8A8S, GLint>, GL_INT, 8, 8, 8, 8, 0, 0 },
- { Format::ID::R8G8B8A8_SNORM, GL_RGBA8_SNORM, GL_RGBA8_SNORM, GenerateMip<R8G8B8A8S>, NoCopyFunctions, ReadColor<R8G8B8A8S, GLfloat>, GL_SIGNED_NORMALIZED, 8, 8, 8, 8, 0, 0 },
- { Format::ID::R8G8B8A8_UINT, GL_RGBA8UI, GL_RGBA8UI, GenerateMip<R8G8B8A8>, NoCopyFunctions, ReadColor<R8G8B8A8, GLuint>, GL_UNSIGNED_INT, 8, 8, 8, 8, 0, 0 },
- { Format::ID::R8G8B8A8_UNORM, GL_RGBA8, GL_RGBA8, GenerateMip<R8G8B8A8>, NoCopyFunctions, ReadColor<R8G8B8A8, GLfloat>, GL_UNSIGNED_NORMALIZED, 8, 8, 8, 8, 0, 0 },
- { Format::ID::R8G8B8A8_UNORM_SRGB, GL_SRGB8_ALPHA8, GL_SRGB8_ALPHA8, GenerateMip<R8G8B8A8>, NoCopyFunctions, ReadColor<R8G8B8A8, GLfloat>, GL_UNSIGNED_NORMALIZED, 8, 8, 8, 8, 0, 0 },
- { Format::ID::R8G8B8_SINT, GL_RGB8I, GL_RGB8I, GenerateMip<R8G8B8S>, NoCopyFunctions, ReadColor<R8G8B8S, GLint>, GL_INT, 8, 8, 8, 0, 0, 0 },
- { Format::ID::R8G8B8_SNORM, GL_RGB8_SNORM, GL_RGB8_SNORM, GenerateMip<R8G8B8S>, NoCopyFunctions, ReadColor<R8G8B8S, GLfloat>, GL_SIGNED_NORMALIZED, 8, 8, 8, 0, 0, 0 },
- { Format::ID::R8G8B8_UINT, GL_RGB8UI, GL_RGB8UI, GenerateMip<R8G8B8>, NoCopyFunctions, ReadColor<R8G8B8, GLuint>, GL_UNSIGNED_INT, 8, 8, 8, 0, 0, 0 },
- { Format::ID::R8G8B8_UNORM, GL_RGB8, GL_RGB8, GenerateMip<R8G8B8>, NoCopyFunctions, ReadColor<R8G8B8, GLfloat>, GL_UNSIGNED_NORMALIZED, 8, 8, 8, 0, 0, 0 },
- { Format::ID::R8G8B8_UNORM_SRGB, GL_SRGB8, GL_SRGB8, GenerateMip<R8G8B8>, NoCopyFunctions, ReadColor<R8G8B8, GLfloat>, GL_UNSIGNED_NORMALIZED, 8, 8, 8, 0, 0, 0 },
- { Format::ID::R8G8_SINT, GL_RG8I, GL_RG8I, GenerateMip<R8G8S>, NoCopyFunctions, ReadColor<R8G8S, GLint>, GL_INT, 8, 8, 0, 0, 0, 0 },
- { Format::ID::R8G8_SNORM, GL_RG8_SNORM, GL_RG8_SNORM, GenerateMip<R8G8S>, NoCopyFunctions, ReadColor<R8G8S, GLfloat>, GL_SIGNED_NORMALIZED, 8, 8, 0, 0, 0, 0 },
- { Format::ID::R8G8_UINT, GL_RG8UI, GL_RG8UI, GenerateMip<R8G8>, NoCopyFunctions, ReadColor<R8G8, GLuint>, GL_UNSIGNED_INT, 8, 8, 0, 0, 0, 0 },
- { Format::ID::R8G8_UNORM, GL_RG8, GL_RG8, GenerateMip<R8G8>, NoCopyFunctions, ReadColor<R8G8, GLfloat>, GL_UNSIGNED_NORMALIZED, 8, 8, 0, 0, 0, 0 },
- { Format::ID::R8_SINT, GL_R8I, GL_R8I, GenerateMip<R8S>, NoCopyFunctions, ReadColor<R8S, GLint>, GL_INT, 8, 0, 0, 0, 0, 0 },
- { Format::ID::R8_SNORM, GL_R8_SNORM, GL_R8_SNORM, GenerateMip<R8S>, NoCopyFunctions, ReadColor<R8S, GLfloat>, GL_SIGNED_NORMALIZED, 8, 0, 0, 0, 0, 0 },
- { Format::ID::R8_UINT, GL_R8UI, GL_R8UI, GenerateMip<R8>, NoCopyFunctions, ReadColor<R8, GLuint>, GL_UNSIGNED_INT, 8, 0, 0, 0, 0, 0 },
- { Format::ID::R8_UNORM, GL_R8, GL_R8, GenerateMip<R8>, NoCopyFunctions, ReadColor<R8, GLfloat>, GL_UNSIGNED_NORMALIZED, 8, 0, 0, 0, 0, 0 },
- { Format::ID::R9G9B9E5_SHAREDEXP, GL_RGB9_E5, GL_RGB9_E5, GenerateMip<R9G9B9E5>, NoCopyFunctions, ReadColor<R9G9B9E5, GLfloat>, GL_FLOAT, 9, 9, 9, 0, 0, 0 },
- { Format::ID::S8_UINT, GL_STENCIL_INDEX8, GL_STENCIL_INDEX8, nullptr, NoCopyFunctions, nullptr, GL_UNSIGNED_INT, 0, 0, 0, 0, 0, 8 },
- // clang-format on
-};
-
-// static
-const Format &Format::Get(ID id)
-{
- return g_formatInfoTable[static_cast<size_t>(id)];
-}
-
-} // namespace angle
diff --git a/gfx/angle/src/libANGLE/renderer/FramebufferAttachmentObjectImpl.h b/gfx/angle/src/libANGLE/renderer/FramebufferAttachmentObjectImpl.h
index 5139ee5fd..a5aa65e55 100755
--- a/gfx/angle/src/libANGLE/renderer/FramebufferAttachmentObjectImpl.h
+++ b/gfx/angle/src/libANGLE/renderer/FramebufferAttachmentObjectImpl.h
@@ -23,11 +23,7 @@ class FramebufferAttachmentObjectImpl : angle::NonCopyable
virtual ~FramebufferAttachmentObjectImpl() {}
virtual gl::Error getAttachmentRenderTarget(const gl::FramebufferAttachment::Target &target,
- FramebufferAttachmentRenderTarget **rtOut)
- {
- UNIMPLEMENTED();
- return gl::Error(GL_OUT_OF_MEMORY, "getAttachmentRenderTarget not supported.");
- }
+ FramebufferAttachmentRenderTarget **rtOut) = 0;
};
} // namespace rx
diff --git a/gfx/angle/src/libANGLE/renderer/GLImplFactory.h b/gfx/angle/src/libANGLE/renderer/GLImplFactory.h
index 20a48fc72..09f14d727 100755
--- a/gfx/angle/src/libANGLE/renderer/GLImplFactory.h
+++ b/gfx/angle/src/libANGLE/renderer/GLImplFactory.h
@@ -63,7 +63,7 @@ class GLImplFactory : angle::NonCopyable
virtual RenderbufferImpl *createRenderbuffer() = 0;
// Buffer creation
- virtual BufferImpl *createBuffer(const gl::BufferState &state) = 0;
+ virtual BufferImpl *createBuffer() = 0;
// Vertex Array creation
virtual VertexArrayImpl *createVertexArray(const gl::VertexArrayState &data) = 0;
diff --git a/gfx/angle/src/libANGLE/renderer/ProgramImpl.h b/gfx/angle/src/libANGLE/renderer/ProgramImpl.h
index 065f6a338..e62623a8d 100755
--- a/gfx/angle/src/libANGLE/renderer/ProgramImpl.h
+++ b/gfx/angle/src/libANGLE/renderer/ProgramImpl.h
@@ -24,7 +24,14 @@ struct BlockMemberInfo;
namespace rx
{
-using LinkResult = gl::ErrorOrResult<bool>;
+
+struct LinkResult
+{
+ LinkResult(bool linkSuccess, const gl::Error &error) : linkSuccess(linkSuccess), error(error) {}
+
+ bool linkSuccess;
+ gl::Error error;
+};
class ProgramImpl : angle::NonCopyable
{
@@ -79,6 +86,10 @@ class ProgramImpl : angle::NonCopyable
GLint components,
const GLfloat *coeffs) = 0;
+ virtual void assignUniformBlockRegisters()
+ {
+ }
+
protected:
const gl::ProgramState &mState;
};
diff --git a/gfx/angle/src/libANGLE/renderer/ShaderImpl.h b/gfx/angle/src/libANGLE/renderer/ShaderImpl.h
index 77e02d023..2ade19a06 100755
--- a/gfx/angle/src/libANGLE/renderer/ShaderImpl.h
+++ b/gfx/angle/src/libANGLE/renderer/ShaderImpl.h
@@ -21,9 +21,9 @@ class ShaderImpl : angle::NonCopyable
ShaderImpl(const gl::ShaderState &data) : mData(data) {}
virtual ~ShaderImpl() { }
- // Returns additional sh::Compile options.
- virtual ShCompileOptions prepareSourceAndReturnOptions(std::stringstream *sourceStream,
- std::string *sourcePath) = 0;
+ // Returns additional ShCompile options.
+ virtual int prepareSourceAndReturnOptions(std::stringstream *sourceStream,
+ std::string *sourcePath) = 0;
// Returns success for compiling on the driver. Returns success.
virtual bool postTranslateCompile(gl::Compiler *compiler, std::string *infoLog) = 0;
diff --git a/gfx/angle/src/libANGLE/renderer/SurfaceImpl.cpp b/gfx/angle/src/libANGLE/renderer/SurfaceImpl.cpp
index e4b3d7c8b..517214b36 100755
--- a/gfx/angle/src/libANGLE/renderer/SurfaceImpl.cpp
+++ b/gfx/angle/src/libANGLE/renderer/SurfaceImpl.cpp
@@ -19,10 +19,4 @@ SurfaceImpl::~SurfaceImpl()
{
}
-egl::Error SurfaceImpl::swapWithDamage(EGLint *rects, EGLint n_rects)
-{
- UNREACHABLE();
- return egl::Error(EGL_BAD_SURFACE, "swapWithDamage implementation missing.");
-}
-
} // namespace rx
diff --git a/gfx/angle/src/libANGLE/renderer/SurfaceImpl.h b/gfx/angle/src/libANGLE/renderer/SurfaceImpl.h
index 177e788d8..5efe2fc87 100755
--- a/gfx/angle/src/libANGLE/renderer/SurfaceImpl.h
+++ b/gfx/angle/src/libANGLE/renderer/SurfaceImpl.h
@@ -39,7 +39,6 @@ class SurfaceImpl : public FramebufferAttachmentObjectImpl
virtual egl::Error initialize() = 0;
virtual FramebufferImpl *createDefaultFramebuffer(const gl::FramebufferState &state) = 0;
virtual egl::Error swap() = 0;
- virtual egl::Error swapWithDamage(EGLint *rects, EGLint n_rects);
virtual egl::Error postSubBuffer(EGLint x, EGLint y, EGLint width, EGLint height) = 0;
virtual egl::Error querySurfacePointerANGLE(EGLint attribute, void **value) = 0;
virtual egl::Error bindTexImage(gl::Texture *texture, EGLint buffer) = 0;
diff --git a/gfx/angle/src/libANGLE/renderer/TextureImpl.cpp b/gfx/angle/src/libANGLE/renderer/TextureImpl.cpp
index af4796371..465d4e3e7 100755
--- a/gfx/angle/src/libANGLE/renderer/TextureImpl.cpp
+++ b/gfx/angle/src/libANGLE/renderer/TextureImpl.cpp
@@ -40,11 +40,4 @@ gl::Error TextureImpl::copySubTexture(const gl::Offset &destOffset,
UNREACHABLE();
return gl::Error(GL_INVALID_OPERATION, "CHROMIUM_copy_texture exposed but not implemented.");
}
-
-gl::Error TextureImpl::copyCompressedTexture(const gl::Texture *source)
-{
- UNREACHABLE();
- return gl::Error(GL_INVALID_OPERATION,
- "CHROMIUM_copy_compressed_texture exposed but not implemented.");
-}
}
diff --git a/gfx/angle/src/libANGLE/renderer/TextureImpl.h b/gfx/angle/src/libANGLE/renderer/TextureImpl.h
index 7d0ebe2f1..45c230729 100755
--- a/gfx/angle/src/libANGLE/renderer/TextureImpl.h
+++ b/gfx/angle/src/libANGLE/renderer/TextureImpl.h
@@ -16,7 +16,6 @@
#include "libANGLE/Error.h"
#include "libANGLE/ImageIndex.h"
#include "libANGLE/Stream.h"
-#include "libANGLE/Texture.h"
#include "libANGLE/renderer/FramebufferAttachmentObjectImpl.h"
namespace egl
@@ -73,8 +72,6 @@ class TextureImpl : public FramebufferAttachmentObjectImpl
bool unpackUnmultiplyAlpha,
const gl::Texture *source);
- virtual gl::Error copyCompressedTexture(const gl::Texture *source);
-
virtual gl::Error setStorage(GLenum target, size_t levels, GLenum internalFormat, const gl::Extents &size) = 0;
virtual gl::Error setEGLImageTarget(GLenum target, egl::Image *image) = 0;
@@ -90,8 +87,6 @@ class TextureImpl : public FramebufferAttachmentObjectImpl
virtual void bindTexImage(egl::Surface *surface) = 0;
virtual void releaseTexImage() = 0;
- virtual void syncState(const gl::Texture::DirtyBits &dirtyBits) = 0;
-
protected:
const gl::TextureState &mState;
};
diff --git a/gfx/angle/src/libANGLE/renderer/TextureImpl_mock.h b/gfx/angle/src/libANGLE/renderer/TextureImpl_mock.h
index c8d05d202..8b8f397ac 100755
--- a/gfx/angle/src/libANGLE/renderer/TextureImpl_mock.h
+++ b/gfx/angle/src/libANGLE/renderer/TextureImpl_mock.h
@@ -19,7 +19,7 @@ namespace rx
class MockTextureImpl : public TextureImpl
{
public:
- MockTextureImpl() : TextureImpl(mMockState), mMockState(GL_TEXTURE_2D) {}
+ MockTextureImpl() : TextureImpl(gl::TextureState(GL_TEXTURE_2D)) {}
virtual ~MockTextureImpl() { destructor(); }
MOCK_METHOD8(setImage, gl::Error(GLenum, size_t, GLenum, const gl::Extents &, GLenum, GLenum, const gl::PixelUnpackState &, const uint8_t *));
MOCK_METHOD7(setSubImage, gl::Error(GLenum, size_t, const gl::Box &, GLenum, GLenum, const gl::PixelUnpackState &, const uint8_t *));
@@ -35,7 +35,6 @@ class MockTextureImpl : public TextureImpl
bool,
bool,
const gl::Texture *));
- MOCK_METHOD1(copyCompressedTexture, gl::Error(const gl::Texture *source));
MOCK_METHOD4(setStorage, gl::Error(GLenum, size_t, GLenum, const gl::Extents &));
MOCK_METHOD3(setImageExternal,
gl::Error(GLenum, egl::Stream *, const egl::Stream::GLTextureDescription &));
@@ -48,12 +47,7 @@ class MockTextureImpl : public TextureImpl
MOCK_METHOD1(setBaseLevel, void(GLuint));
- MOCK_METHOD1(syncState, void(const gl::Texture::DirtyBits &));
-
MOCK_METHOD0(destructor, void());
-
- protected:
- gl::TextureState mMockState;
};
}
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/BufferD3D.cpp b/gfx/angle/src/libANGLE/renderer/d3d/BufferD3D.cpp
index 250162726..5e89c5bf4 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/BufferD3D.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/BufferD3D.cpp
@@ -19,8 +19,8 @@ namespace rx
unsigned int BufferD3D::mNextSerial = 1;
-BufferD3D::BufferD3D(const gl::BufferState &state, BufferFactoryD3D *factory)
- : BufferImpl(state),
+BufferD3D::BufferD3D(BufferFactoryD3D *factory)
+ : BufferImpl(),
mFactory(factory),
mStaticIndexBuffer(nullptr),
mStaticBufferCacheTotalSize(0),
@@ -179,7 +179,11 @@ gl::Error BufferD3D::getIndexRange(GLenum type,
gl::IndexRange *outRange)
{
const uint8_t *data = nullptr;
- ANGLE_TRY(getData(&data));
+ gl::Error error = getData(&data);
+ if (error.isError())
+ {
+ return error;
+ }
*outRange = gl::ComputeIndexRange(type, data + offset, count, primitiveRestartEnabled);
return gl::Error(GL_NO_ERROR);
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/BufferD3D.h b/gfx/angle/src/libANGLE/renderer/d3d/BufferD3D.h
index fdabe7b7e..3c43c0164 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/BufferD3D.h
+++ b/gfx/angle/src/libANGLE/renderer/d3d/BufferD3D.h
@@ -30,7 +30,7 @@ enum class D3DBufferUsage
class BufferD3D : public BufferImpl
{
public:
- BufferD3D(const gl::BufferState &state, BufferFactoryD3D *factory);
+ BufferD3D(BufferFactoryD3D *factory);
virtual ~BufferD3D();
unsigned int getSerial() const { return mSerial; }
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/DisplayD3D.cpp b/gfx/angle/src/libANGLE/renderer/d3d/DisplayD3D.cpp
index 474a08c65..f5cc97e95 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/DisplayD3D.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/DisplayD3D.cpp
@@ -29,6 +29,10 @@
# include "libANGLE/renderer/d3d/d3d11/Renderer11.h"
#endif // ANGLE_ENABLE_D3D11
+#if defined (ANGLE_TEST_CONFIG)
+# define ANGLE_DEFAULT_D3D11 1
+#endif
+
#if !defined(ANGLE_DEFAULT_D3D11)
// Enables use of the Direct3D 11 API for a default display, when available
# define ANGLE_DEFAULT_D3D11 1
@@ -172,18 +176,16 @@ SurfaceImpl *DisplayD3D::createPbufferSurface(const egl::SurfaceState &state,
const egl::AttributeMap &attribs)
{
ASSERT(mRenderer != nullptr);
- return new PbufferSurfaceD3D(state, mRenderer, mDisplay, configuration, 0, nullptr, attribs);
+ return new PbufferSurfaceD3D(state, mRenderer, mDisplay, configuration, nullptr, attribs);
}
SurfaceImpl *DisplayD3D::createPbufferFromClientBuffer(const egl::SurfaceState &state,
const egl::Config *configuration,
- EGLenum buftype,
- EGLClientBuffer clientBuffer,
+ EGLClientBuffer shareHandle,
const egl::AttributeMap &attribs)
{
ASSERT(mRenderer != nullptr);
- return new PbufferSurfaceD3D(state, mRenderer, mDisplay, configuration, buftype, clientBuffer,
- attribs);
+ return new PbufferSurfaceD3D(state, mRenderer, mDisplay, configuration, shareHandle, attribs);
}
SurfaceImpl *DisplayD3D::createPixmapSurface(const egl::SurfaceState &state,
@@ -289,26 +291,6 @@ bool DisplayD3D::isValidNativeWindow(EGLNativeWindowType window) const
return mRenderer->isValidNativeWindow(window);
}
-egl::Error DisplayD3D::validateClientBuffer(const egl::Config *configuration,
- EGLenum buftype,
- EGLClientBuffer clientBuffer,
- const egl::AttributeMap &attribs) const
-{
- switch (buftype)
- {
- case EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE:
- return mRenderer->validateShareHandle(configuration, static_cast<HANDLE>(clientBuffer),
- attribs);
-
- case EGL_D3D_TEXTURE_ANGLE:
- return mRenderer->getD3DTextureInfo(static_cast<IUnknown *>(clientBuffer), nullptr,
- nullptr, nullptr);
-
- default:
- return DisplayImpl::validateClientBuffer(configuration, buftype, clientBuffer, attribs);
- }
-}
-
void DisplayD3D::generateExtensions(egl::DisplayExtensions *outExtensions) const
{
mRenderer->generateDisplayExtensions(outExtensions);
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/DisplayD3D.h b/gfx/angle/src/libANGLE/renderer/d3d/DisplayD3D.h
index 3801a8eb1..1bd6f1160 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/DisplayD3D.h
+++ b/gfx/angle/src/libANGLE/renderer/d3d/DisplayD3D.h
@@ -34,8 +34,7 @@ class DisplayD3D : public DisplayImpl
const egl::AttributeMap &attribs) override;
SurfaceImpl *createPbufferFromClientBuffer(const egl::SurfaceState &state,
const egl::Config *configuration,
- EGLenum buftype,
- EGLClientBuffer clientBuffer,
+ EGLClientBuffer shareHandle,
const egl::AttributeMap &attribs) override;
SurfaceImpl *createPixmapSurface(const egl::SurfaceState &state,
const egl::Config *configuration,
@@ -60,10 +59,6 @@ class DisplayD3D : public DisplayImpl
egl::Error restoreLostDevice() override;
bool isValidNativeWindow(EGLNativeWindowType window) const override;
- egl::Error validateClientBuffer(const egl::Config *configuration,
- EGLenum buftype,
- EGLClientBuffer clientBuffer,
- const egl::AttributeMap &attribs) const override;
egl::Error getDevice(DeviceImpl **device) override;
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/DynamicHLSL.cpp b/gfx/angle/src/libANGLE/renderer/d3d/DynamicHLSL.cpp
index 1946585c1..cb3e582d1 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/DynamicHLSL.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/DynamicHLSL.cpp
@@ -117,8 +117,8 @@ void WriteArrayString(std::stringstream &strstr, unsigned int i)
strstr << "]";
}
-constexpr const char *VERTEX_ATTRIBUTE_STUB_STRING = "@@ VERTEX ATTRIBUTES @@";
-constexpr const char *PIXEL_OUTPUT_STUB_STRING = "@@ PIXEL OUTPUT @@";
+const std::string VERTEX_ATTRIBUTE_STUB_STRING = "@@ VERTEX ATTRIBUTES @@";
+const std::string PIXEL_OUTPUT_STUB_STRING = "@@ PIXEL OUTPUT @@";
} // anonymous namespace
std::string GetVaryingSemantic(int majorShaderModel, bool programUsesPointSize)
@@ -295,7 +295,7 @@ std::string DynamicHLSL::generateVertexShaderForInputLayout(
std::string vertexHLSL(sourceShader);
size_t copyInsertionPos = vertexHLSL.find(VERTEX_ATTRIBUTE_STUB_STRING);
- vertexHLSL.replace(copyInsertionPos, strlen(VERTEX_ATTRIBUTE_STUB_STRING), structStream.str());
+ vertexHLSL.replace(copyInsertionPos, VERTEX_ATTRIBUTE_STUB_STRING.length(), structStream.str());
return vertexHLSL;
}
@@ -360,7 +360,7 @@ std::string DynamicHLSL::generatePixelShaderForOutputSignature(
std::string pixelHLSL(sourceShader);
size_t outputInsertionPos = pixelHLSL.find(PIXEL_OUTPUT_STUB_STRING);
- pixelHLSL.replace(outputInsertionPos, strlen(PIXEL_OUTPUT_STUB_STRING),
+ pixelHLSL.replace(outputInsertionPos, PIXEL_OUTPUT_STUB_STRING.length(),
declarationStream.str());
return pixelHLSL;
@@ -440,7 +440,7 @@ bool DynamicHLSL::generateShaderLinkHLSL(const gl::ContextState &data,
}
// Add stub string to be replaced when shader is dynamically defined by its layout
- vertexStream << "\n" << std::string(VERTEX_ATTRIBUTE_STUB_STRING) << "\n";
+ vertexStream << "\n" << VERTEX_ATTRIBUTE_STUB_STRING + "\n";
// Write the HLSL input/output declarations
vertexStream << "struct VS_OUTPUT\n";
@@ -597,7 +597,7 @@ bool DynamicHLSL::generateShaderLinkHLSL(const gl::ContextState &data,
generateVaryingLinkHLSL(SHADER_PIXEL, varyingPacking, pixelStream);
pixelStream << "\n";
- pixelStream << std::string(PIXEL_OUTPUT_STUB_STRING) << "\n";
+ pixelStream << PIXEL_OUTPUT_STUB_STRING + "\n";
if (fragmentShader->usesFrontFacing())
{
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/FramebufferD3D.cpp b/gfx/angle/src/libANGLE/renderer/d3d/FramebufferD3D.cpp
index cc8bb0ea7..a45c94538 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/FramebufferD3D.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/FramebufferD3D.cpp
@@ -207,7 +207,7 @@ GLenum FramebufferD3D::getImplementationColorReadFormat() const
GLenum implementationFormat = getRenderTargetImplementationFormat(attachmentRenderTarget);
const gl::InternalFormat &implementationFormatInfo = gl::GetInternalFormatInfo(implementationFormat);
- return implementationFormatInfo.getReadPixelsFormat();
+ return implementationFormatInfo.format;
}
GLenum FramebufferD3D::getImplementationColorReadType() const
@@ -229,7 +229,7 @@ GLenum FramebufferD3D::getImplementationColorReadType() const
GLenum implementationFormat = getRenderTargetImplementationFormat(attachmentRenderTarget);
const gl::InternalFormat &implementationFormatInfo = gl::GetInternalFormatInfo(implementationFormat);
- return implementationFormatInfo.getReadPixelsType();
+ return implementationFormatInfo.type;
}
gl::Error FramebufferD3D::readPixels(ContextImpl *context,
@@ -240,13 +240,15 @@ gl::Error FramebufferD3D::readPixels(ContextImpl *context,
{
const gl::PixelPackState &packState = context->getGLState().getPackState();
- const gl::InternalFormat &formatInfo = gl::GetInternalFormatInfo(gl::GetSizedInternalFormat(format, type));
-
- GLuint outputPitch = 0;
- ANGLE_TRY_RESULT(formatInfo.computeRowPitch(area.width, packState.alignment, packState.rowLength),
- outputPitch);
+ GLenum sizedInternalFormat = gl::GetSizedInternalFormat(format, type);
+ const gl::InternalFormat &sizedFormatInfo = gl::GetInternalFormatInfo(sizedInternalFormat);
+ GLuint outputPitch = 0;
+ ANGLE_TRY_RESULT(
+ sizedFormatInfo.computeRowPitch(type, area.width, packState.alignment, packState.rowLength),
+ outputPitch);
GLuint outputSkipBytes = 0;
- ANGLE_TRY_RESULT(formatInfo.computeSkipBytes(outputPitch, 0, packState, false),
+ ANGLE_TRY_RESULT(sizedFormatInfo.computeSkipBytes(outputPitch, 0, 0, packState.skipRows,
+ packState.skipPixels, false),
outputSkipBytes);
return readPixelsImpl(area, format, type, outputPitch, packState,
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/HLSLCompiler.cpp b/gfx/angle/src/libANGLE/renderer/d3d/HLSLCompiler.cpp
index 305b6c4e4..e8b1af312 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/HLSLCompiler.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/HLSLCompiler.cpp
@@ -136,8 +136,7 @@ gl::Error HLSLCompiler::initialize()
if (!mD3DCompilerModule)
{
- ERR("D3D compiler module not found.");
- return gl::Error(GL_OUT_OF_MEMORY, "D3D compiler module not found.");
+ return gl::Error(GL_INVALID_OPERATION, "No D3D compiler module found - aborting!\n");
}
mD3DCompileFunc = reinterpret_cast<pD3DCompile>(GetProcAddress(mD3DCompilerModule, "D3DCompile"));
@@ -156,7 +155,7 @@ gl::Error HLSLCompiler::initialize()
if (mD3DCompileFunc == nullptr)
{
- return gl::Error(GL_OUT_OF_MEMORY, "Error finding D3DCompile entry point.");
+ return gl::Error(GL_INVALID_OPERATION, "Error finding D3DCompile entry point");
}
mInitialized = true;
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/ImageD3D.cpp b/gfx/angle/src/libANGLE/renderer/d3d/ImageD3D.cpp
index c9581ccaa..ead5db645 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/ImageD3D.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/ImageD3D.cpp
@@ -10,7 +10,6 @@
#include "libANGLE/renderer/d3d/ImageD3D.h"
-#include "libANGLE/formatutils.h"
#include "libANGLE/Framebuffer.h"
#include "libANGLE/FramebufferAttachment.h"
#include "libANGLE/renderer/d3d/FramebufferD3D.h"
@@ -30,13 +29,4 @@ ImageD3D::ImageD3D()
{
}
-GLenum
-ImageD3D::getSizedInputFormat(GLenum inputType) const
-{
- const auto &internalFormat = gl::GetInternalFormatInfo(mInternalFormat);
- const auto &unsizedInternalFormat = internalFormat.format;
- const auto &sizedInputFormat = gl::GetSizedInternalFormat(unsizedInternalFormat, inputType);
- return sizedInputFormat;
-}
-
} // namespace rx
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/ImageD3D.h b/gfx/angle/src/libANGLE/renderer/d3d/ImageD3D.h
index 79840c15b..947a8328f 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/ImageD3D.h
+++ b/gfx/angle/src/libANGLE/renderer/d3d/ImageD3D.h
@@ -51,8 +51,6 @@ class ImageD3D : angle::NonCopyable
virtual bool redefine(GLenum target, GLenum internalformat, const gl::Extents &size, bool forceRelease) = 0;
- GLenum getSizedInputFormat(GLenum inputType) const;
-
virtual gl::Error loadData(const gl::Box &area,
const gl::PixelUnpackState &unpack,
GLenum type,
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/ProgramD3D.cpp b/gfx/angle/src/libANGLE/renderer/d3d/ProgramD3D.cpp
index d00a8738e..3ac82d941 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/ProgramD3D.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/ProgramD3D.cpp
@@ -739,14 +739,14 @@ LinkResult ProgramD3D::load(gl::InfoLog &infoLog, gl::BinaryInputStream *stream)
if (memcmp(&identifier, &binaryDeviceIdentifier, sizeof(DeviceIdentifier)) != 0)
{
infoLog << "Invalid program binary, device configuration has changed.";
- return false;
+ return LinkResult(false, gl::Error(GL_NO_ERROR));
}
int compileFlags = stream->readInt<int>();
if (compileFlags != ANGLE_COMPILE_OPTIMIZATION_LEVEL)
{
infoLog << "Mismatched compilation flags.";
- return false;
+ return LinkResult(false, gl::Error(GL_NO_ERROR));
}
for (int &index : mAttribLocationToD3DSemantic)
@@ -780,7 +780,7 @@ LinkResult ProgramD3D::load(gl::InfoLog &infoLog, gl::BinaryInputStream *stream)
if (stream->error())
{
infoLog << "Invalid program binary.";
- return false;
+ return LinkResult(false, gl::Error(GL_NO_ERROR));
}
const auto &linkedUniforms = mState.getUniforms();
@@ -804,7 +804,7 @@ LinkResult ProgramD3D::load(gl::InfoLog &infoLog, gl::BinaryInputStream *stream)
if (stream->error())
{
infoLog << "Invalid program binary.";
- return false;
+ return LinkResult(false, gl::Error(GL_NO_ERROR));
}
ASSERT(mD3DUniformBlocks.empty());
@@ -853,8 +853,6 @@ LinkResult ProgramD3D::load(gl::InfoLog &infoLog, gl::BinaryInputStream *stream)
const unsigned char *binary = reinterpret_cast<const unsigned char *>(stream->data());
- bool separateAttribs = (mState.getTransformFeedbackBufferMode() == GL_SEPARATE_ATTRIBS);
-
const unsigned int vertexShaderCount = stream->readInt<unsigned int>();
for (unsigned int vertexShaderIndex = 0; vertexShaderIndex < vertexShaderCount;
vertexShaderIndex++)
@@ -872,14 +870,18 @@ LinkResult ProgramD3D::load(gl::InfoLog &infoLog, gl::BinaryInputStream *stream)
ShaderExecutableD3D *shaderExecutable = nullptr;
- ANGLE_TRY(mRenderer->loadExecutable(vertexShaderFunction, vertexShaderSize, SHADER_VERTEX,
- mStreamOutVaryings, separateAttribs,
- &shaderExecutable));
+ gl::Error error = mRenderer->loadExecutable(
+ vertexShaderFunction, vertexShaderSize, SHADER_VERTEX, mStreamOutVaryings,
+ (mState.getTransformFeedbackBufferMode() == GL_SEPARATE_ATTRIBS), &shaderExecutable);
+ if (error.isError())
+ {
+ return LinkResult(false, error);
+ }
if (!shaderExecutable)
{
infoLog << "Could not create vertex shader.";
- return false;
+ return LinkResult(false, gl::Error(GL_NO_ERROR));
}
// generated converted input layout
@@ -907,14 +909,18 @@ LinkResult ProgramD3D::load(gl::InfoLog &infoLog, gl::BinaryInputStream *stream)
const unsigned char *pixelShaderFunction = binary + stream->offset();
ShaderExecutableD3D *shaderExecutable = nullptr;
- ANGLE_TRY(mRenderer->loadExecutable(pixelShaderFunction, pixelShaderSize, SHADER_PIXEL,
- mStreamOutVaryings, separateAttribs,
- &shaderExecutable));
+ gl::Error error = mRenderer->loadExecutable(
+ pixelShaderFunction, pixelShaderSize, SHADER_PIXEL, mStreamOutVaryings,
+ (mState.getTransformFeedbackBufferMode() == GL_SEPARATE_ATTRIBS), &shaderExecutable);
+ if (error.isError())
+ {
+ return LinkResult(false, error);
+ }
if (!shaderExecutable)
{
infoLog << "Could not create pixel shader.";
- return false;
+ return LinkResult(false, gl::Error(GL_NO_ERROR));
}
// add new binary
@@ -934,22 +940,27 @@ LinkResult ProgramD3D::load(gl::InfoLog &infoLog, gl::BinaryInputStream *stream)
}
const unsigned char *geometryShaderFunction = binary + stream->offset();
+ bool splitAttribs = (mState.getTransformFeedbackBufferMode() == GL_SEPARATE_ATTRIBS);
- ANGLE_TRY(mRenderer->loadExecutable(geometryShaderFunction, geometryShaderSize,
- SHADER_GEOMETRY, mStreamOutVaryings, separateAttribs,
- &mGeometryExecutables[geometryExeIndex]));
+ gl::Error error = mRenderer->loadExecutable(
+ geometryShaderFunction, geometryShaderSize, SHADER_GEOMETRY, mStreamOutVaryings,
+ splitAttribs, &mGeometryExecutables[geometryExeIndex]);
+ if (error.isError())
+ {
+ return LinkResult(false, error);
+ }
if (!mGeometryExecutables[geometryExeIndex])
{
infoLog << "Could not create geometry shader.";
- return false;
+ return LinkResult(false, gl::Error(GL_NO_ERROR));
}
stream->skip(geometryShaderSize);
}
initializeUniformStorage();
- return true;
+ return LinkResult(true, gl::Error(GL_NO_ERROR));
}
gl::Error ProgramD3D::save(gl::BinaryOutputStream *stream)
@@ -1278,14 +1289,22 @@ LinkResult ProgramD3D::compileProgramExecutables(const gl::ContextState &data, g
{
const gl::InputLayout &defaultInputLayout =
GetDefaultInputLayoutFromShader(mState.getAttachedVertexShader());
- ShaderExecutableD3D *defaultVertexExecutable = nullptr;
- ANGLE_TRY(
- getVertexExecutableForInputLayout(defaultInputLayout, &defaultVertexExecutable, &infoLog));
+ ShaderExecutableD3D *defaultVertexExecutable = NULL;
+ gl::Error error =
+ getVertexExecutableForInputLayout(defaultInputLayout, &defaultVertexExecutable, &infoLog);
+ if (error.isError())
+ {
+ return LinkResult(false, error);
+ }
std::vector<GLenum> defaultPixelOutput = GetDefaultOutputLayoutFromShader(getPixelShaderKey());
- ShaderExecutableD3D *defaultPixelExecutable = nullptr;
- ANGLE_TRY(
- getPixelExecutableForOutputLayout(defaultPixelOutput, &defaultPixelExecutable, &infoLog));
+ ShaderExecutableD3D *defaultPixelExecutable = NULL;
+ error =
+ getPixelExecutableForOutputLayout(defaultPixelOutput, &defaultPixelExecutable, &infoLog);
+ if (error.isError())
+ {
+ return LinkResult(false, error);
+ }
// Auto-generate the geometry shader here, if we expect to be using point rendering in D3D11.
ShaderExecutableD3D *pointGS = nullptr;
@@ -1318,8 +1337,9 @@ LinkResult ProgramD3D::compileProgramExecutables(const gl::ContextState &data, g
fragmentShaderD3D->appendDebugInfo(defaultPixelExecutable->getDebugInfo());
}
- return (defaultVertexExecutable && defaultPixelExecutable &&
- (!usesGeometryShader(GL_POINTS) || pointGS));
+ bool linkSuccess = (defaultVertexExecutable && defaultPixelExecutable &&
+ (!usesGeometryShader(GL_POINTS) || pointGS));
+ return LinkResult(linkSuccess, gl::Error(GL_NO_ERROR));
}
LinkResult ProgramD3D::link(const gl::ContextState &data, gl::InfoLog &infoLog)
@@ -1343,7 +1363,7 @@ LinkResult ProgramD3D::link(const gl::ContextState &data, gl::InfoLog &infoLog)
if (fragmentShaderD3D->usesFrontFacing())
{
infoLog << "The current renderer doesn't support gl_FrontFacing";
- return false;
+ return LinkResult(false, gl::Error(GL_NO_ERROR));
}
}
@@ -1355,7 +1375,7 @@ LinkResult ProgramD3D::link(const gl::ContextState &data, gl::InfoLog &infoLog)
if (!varyingPacking.packVaryings(infoLog, packedVaryings,
mState.getTransformFeedbackVaryingNames()))
{
- return false;
+ return LinkResult(false, gl::Error(GL_NO_ERROR));
}
ProgramD3DMetadata metadata(mRenderer, vertexShaderD3D, fragmentShaderD3D);
@@ -1366,7 +1386,7 @@ LinkResult ProgramD3D::link(const gl::ContextState &data, gl::InfoLog &infoLog)
if (static_cast<GLuint>(varyingPacking.getRegisterCount()) > data.getCaps().maxVaryingVectors)
{
infoLog << "No varying registers left to support gl_FragCoord/gl_PointCoord";
- return false;
+ return LinkResult(false, gl::Error(GL_NO_ERROR));
}
// TODO(jmadill): Implement more sophisticated component packing in D3D9.
@@ -1376,13 +1396,13 @@ LinkResult ProgramD3D::link(const gl::ContextState &data, gl::InfoLog &infoLog)
varyingPacking.getMaxSemanticIndex() > data.getCaps().maxVaryingVectors)
{
infoLog << "Cannot pack these varyings on D3D9.";
- return false;
+ return LinkResult(false, gl::Error(GL_NO_ERROR));
}
if (!mDynamicHLSL->generateShaderLinkHLSL(data, mState, metadata, varyingPacking, &mPixelHLSL,
&mVertexHLSL))
{
- return false;
+ return LinkResult(false, gl::Error(GL_NO_ERROR));
}
mUsesPointSize = vertexShaderD3D->usesPointSize();
@@ -1413,12 +1433,7 @@ LinkResult ProgramD3D::link(const gl::ContextState &data, gl::InfoLog &infoLog)
gatherTransformFeedbackVaryings(varyingPacking);
LinkResult result = compileProgramExecutables(data, infoLog);
- if (result.isError())
- {
- infoLog << result.getError().getMessage();
- return result;
- }
- else if (!result.getResult())
+ if (result.error.isError() || !result.linkSuccess)
{
infoLog << "Failed to create D3D shaders.";
return result;
@@ -1426,7 +1441,7 @@ LinkResult ProgramD3D::link(const gl::ContextState &data, gl::InfoLog &infoLog)
initUniformBlockInfo();
- return true;
+ return LinkResult(true, gl::Error(GL_NO_ERROR));
}
GLboolean ProgramD3D::validate(const gl::Caps & /*caps*/, gl::InfoLog * /*infoLog*/)
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/ProgramD3D.h b/gfx/angle/src/libANGLE/renderer/d3d/ProgramD3D.h
index 88fe4020d..01f3973c5 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/ProgramD3D.h
+++ b/gfx/angle/src/libANGLE/renderer/d3d/ProgramD3D.h
@@ -231,6 +231,7 @@ class ProgramD3D : public ProgramImpl
const GLfloat *value);
void setUniformBlockBinding(GLuint uniformBlockIndex, GLuint uniformBlockBinding) override;
+ void assignUniformBlockRegisters() override;
const UniformStorageD3D &getVertexUniformStorage() const { return *mVertexUniformStorage; }
const UniformStorageD3D &getFragmentUniformStorage() const { return *mFragmentUniformStorage; }
@@ -350,7 +351,6 @@ class ProgramD3D : public ProgramImpl
void initAttribLocationsToD3DSemantic();
void reset();
- void assignUniformBlockRegisters();
void initUniformBlockInfo();
size_t getUniformBlockInfo(const sh::InterfaceBlock &interfaceBlock);
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/RendererD3D.h b/gfx/angle/src/libANGLE/renderer/d3d/RendererD3D.h
index b63aba8a9..9378b68b3 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/RendererD3D.h
+++ b/gfx/angle/src/libANGLE/renderer/d3d/RendererD3D.h
@@ -127,17 +127,9 @@ class RendererD3D : public BufferFactoryD3D
virtual SwapChainD3D *createSwapChain(NativeWindowD3D *nativeWindow,
HANDLE shareHandle,
- IUnknown *d3dTexture,
GLenum backBufferFormat,
GLenum depthBufferFormat,
EGLint orientation) = 0;
- virtual egl::Error getD3DTextureInfo(IUnknown *d3dTexture,
- EGLint *width,
- EGLint *height,
- GLenum *fboFormat) const = 0;
- virtual egl::Error validateShareHandle(const egl::Config *config,
- HANDLE shareHandle,
- const egl::AttributeMap &attribs) const = 0;
virtual gl::Error setSamplerState(gl::SamplerType type, int index, gl::Texture *texture, const gl::SamplerState &sampler) = 0;
virtual gl::Error setTexture(gl::SamplerType type, int index, gl::Texture *texture) = 0;
@@ -177,10 +169,6 @@ class RendererD3D : public BufferFactoryD3D
bool unpackFlipY,
bool unpackPremultiplyAlpha,
bool unpackUnmultiplyAlpha) = 0;
- virtual gl::Error copyCompressedTexture(const gl::Texture *source,
- GLint sourceLevel,
- TextureStorage *storage,
- GLint destLevel) = 0;
// RenderTarget creation
virtual gl::Error createRenderTarget(int width, int height, GLenum format, GLsizei samples, RenderTargetD3D **outRT) = 0;
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/ShaderD3D.cpp b/gfx/angle/src/libANGLE/renderer/d3d/ShaderD3D.cpp
index fd7b13abb..326c198d7 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/ShaderD3D.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/ShaderD3D.cpp
@@ -59,14 +59,6 @@ ShaderD3D::ShaderD3D(const gl::ShaderState &data, const WorkaroundsD3D &workarou
{
mAdditionalOptions |= SH_REWRITE_TEXELFETCHOFFSET_TO_TEXELFETCH;
}
- if (workarounds.rewriteUnaryMinusOperator)
- {
- mAdditionalOptions |= SH_REWRITE_INTEGER_UNARY_MINUS_OPERATOR;
- }
- if (workarounds.emulateIsnanFloat)
- {
- mAdditionalOptions |= SH_EMULATE_ISNAN_FLOAT_FUNCTION;
- }
}
ShaderD3D::~ShaderD3D()
@@ -141,12 +133,12 @@ ShShaderOutput ShaderD3D::getCompilerOutputType() const
return mCompilerOutputType;
}
-ShCompileOptions ShaderD3D::prepareSourceAndReturnOptions(std::stringstream *shaderSourceStream,
- std::string *sourcePath)
+int ShaderD3D::prepareSourceAndReturnOptions(std::stringstream *shaderSourceStream,
+ std::string *sourcePath)
{
uncompile();
- ShCompileOptions additionalOptions = 0;
+ int additionalOptions = 0;
const std::string &source = mData.getSource();
@@ -201,7 +193,7 @@ bool ShaderD3D::postTranslateCompile(gl::Compiler *compiler, std::string *infoLo
ShHandle compilerHandle = compiler->getCompilerHandle(mData.getShaderType());
- mUniformRegisterMap = GetUniformRegisterMap(sh::GetUniformRegisterMap(compilerHandle));
+ mUniformRegisterMap = GetUniformRegisterMap(ShGetUniformRegisterMap(compilerHandle));
for (const sh::InterfaceBlock &interfaceBlock : mData.getInterfaceBlocks())
{
@@ -209,7 +201,8 @@ bool ShaderD3D::postTranslateCompile(gl::Compiler *compiler, std::string *infoLo
{
unsigned int index = static_cast<unsigned int>(-1);
bool blockRegisterResult =
- sh::GetInterfaceBlockRegister(compilerHandle, interfaceBlock.name, &index);
+ ShGetInterfaceBlockRegister(compilerHandle, interfaceBlock.name, &index);
+ UNUSED_ASSERTION_VARIABLE(blockRegisterResult);
ASSERT(blockRegisterResult);
mInterfaceBlockRegisterMap[interfaceBlock.name] = index;
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/ShaderD3D.h b/gfx/angle/src/libANGLE/renderer/d3d/ShaderD3D.h
index 587c12173..bf6215872 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/ShaderD3D.h
+++ b/gfx/angle/src/libANGLE/renderer/d3d/ShaderD3D.h
@@ -28,8 +28,8 @@ class ShaderD3D : public ShaderImpl
virtual ~ShaderD3D();
// ShaderImpl implementation
- ShCompileOptions prepareSourceAndReturnOptions(std::stringstream *sourceStream,
- std::string *sourcePath) override;
+ int prepareSourceAndReturnOptions(std::stringstream *sourceStream,
+ std::string *sourcePath) override;
bool postTranslateCompile(gl::Compiler *compiler, std::string *infoLog) override;
std::string getDebugInfo() const override;
@@ -77,7 +77,7 @@ class ShaderD3D : public ShaderImpl
mutable std::string mDebugInfo;
std::map<std::string, unsigned int> mUniformRegisterMap;
std::map<std::string, unsigned int> mInterfaceBlockRegisterMap;
- ShCompileOptions mAdditionalOptions;
+ int mAdditionalOptions;
};
} // namespace rx
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/SurfaceD3D.cpp b/gfx/angle/src/libANGLE/renderer/d3d/SurfaceD3D.cpp
index 8696ab0d7..3c02c4a68 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/SurfaceD3D.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/SurfaceD3D.cpp
@@ -26,8 +26,7 @@ SurfaceD3D::SurfaceD3D(const egl::SurfaceState &state,
egl::Display *display,
const egl::Config *config,
EGLNativeWindowType window,
- EGLenum buftype,
- EGLClientBuffer clientBuffer,
+ EGLClientBuffer shareHandle,
const egl::AttributeMap &attribs)
: SurfaceImpl(state),
mRenderer(renderer),
@@ -42,39 +41,19 @@ SurfaceD3D::SurfaceD3D(const egl::SurfaceState &state,
mWidth(static_cast<EGLint>(attribs.get(EGL_WIDTH, 0))),
mHeight(static_cast<EGLint>(attribs.get(EGL_HEIGHT, 0))),
mSwapInterval(1),
- mShareHandle(0),
- mD3DTexture(nullptr)
+ mShareHandle(reinterpret_cast<HANDLE *>(shareHandle))
{
if (window != nullptr && !mFixedSize)
{
mWidth = -1;
mHeight = -1;
}
-
- switch (buftype)
- {
- case EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE:
- mShareHandle = static_cast<HANDLE>(clientBuffer);
- break;
-
- case EGL_D3D_TEXTURE_ANGLE:
- mD3DTexture = static_cast<IUnknown *>(clientBuffer);
- ASSERT(mD3DTexture != nullptr);
- mD3DTexture->AddRef();
- mRenderer->getD3DTextureInfo(mD3DTexture, &mWidth, &mHeight, &mRenderTargetFormat);
- mDepthStencilFormat = GL_NONE;
- break;
-
- default:
- break;
- }
}
SurfaceD3D::~SurfaceD3D()
{
releaseSwapChain();
SafeDelete(mNativeWindow);
- SafeRelease(mD3DTexture);
}
void SurfaceD3D::releaseSwapChain()
@@ -143,8 +122,8 @@ egl::Error SurfaceD3D::resetSwapChain()
height = mHeight;
}
- mSwapChain = mRenderer->createSwapChain(mNativeWindow, mShareHandle, mD3DTexture,
- mRenderTargetFormat, mDepthStencilFormat, mOrientation);
+ mSwapChain = mRenderer->createSwapChain(mNativeWindow, mShareHandle, mRenderTargetFormat,
+ mDepthStencilFormat, mOrientation);
if (!mSwapChain)
{
return egl::Error(EGL_BAD_ALLOC);
@@ -362,14 +341,7 @@ WindowSurfaceD3D::WindowSurfaceD3D(const egl::SurfaceState &state,
const egl::Config *config,
EGLNativeWindowType window,
const egl::AttributeMap &attribs)
- : SurfaceD3D(state,
- renderer,
- display,
- config,
- window,
- 0,
- static_cast<EGLClientBuffer>(0),
- attribs)
+ : SurfaceD3D(state, renderer, display, config, window, static_cast<EGLClientBuffer>(0), attribs)
{
}
@@ -381,16 +353,14 @@ PbufferSurfaceD3D::PbufferSurfaceD3D(const egl::SurfaceState &state,
RendererD3D *renderer,
egl::Display *display,
const egl::Config *config,
- EGLenum buftype,
- EGLClientBuffer clientBuffer,
+ EGLClientBuffer shareHandle,
const egl::AttributeMap &attribs)
: SurfaceD3D(state,
renderer,
display,
config,
static_cast<EGLNativeWindowType>(0),
- buftype,
- clientBuffer,
+ shareHandle,
attribs)
{
}
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/SurfaceD3D.h b/gfx/angle/src/libANGLE/renderer/d3d/SurfaceD3D.h
index 768c60bd0..614b8f979 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/SurfaceD3D.h
+++ b/gfx/angle/src/libANGLE/renderer/d3d/SurfaceD3D.h
@@ -61,8 +61,7 @@ class SurfaceD3D : public SurfaceImpl
egl::Display *display,
const egl::Config *config,
EGLNativeWindowType window,
- EGLenum buftype,
- EGLClientBuffer clientBuffer,
+ EGLClientBuffer shareHandle,
const egl::AttributeMap &attribs);
egl::Error swapRect(EGLint x, EGLint y, EGLint width, EGLint height);
@@ -88,7 +87,6 @@ class SurfaceD3D : public SurfaceImpl
EGLint mSwapInterval;
HANDLE mShareHandle;
- IUnknown *mD3DTexture;
};
class WindowSurfaceD3D : public SurfaceD3D
@@ -110,8 +108,7 @@ class PbufferSurfaceD3D : public SurfaceD3D
RendererD3D *renderer,
egl::Display *display,
const egl::Config *config,
- EGLenum buftype,
- EGLClientBuffer clientBuffer,
+ EGLClientBuffer shareHandle,
const egl::AttributeMap &attribs);
~PbufferSurfaceD3D() override;
};
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/SwapChainD3D.cpp b/gfx/angle/src/libANGLE/renderer/d3d/SwapChainD3D.cpp
deleted file mode 100644
index de8534c3d..000000000
--- a/gfx/angle/src/libANGLE/renderer/d3d/SwapChainD3D.cpp
+++ /dev/null
@@ -1,34 +0,0 @@
-//
-// Copyright (c) 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-
-// SwapChainD3D.cpp: Defines a back-end specific class that hides the details of the
-// implementation-specific swapchain.
-
-#include "libANGLE/renderer/d3d/SwapChainD3D.h"
-
-namespace rx
-{
-
-SwapChainD3D::SwapChainD3D(HANDLE shareHandle,
- IUnknown *d3dTexture,
- GLenum backBufferFormat,
- GLenum depthBufferFormat)
- : mOffscreenRenderTargetFormat(backBufferFormat),
- mDepthBufferFormat(depthBufferFormat),
- mShareHandle(shareHandle),
- mD3DTexture(d3dTexture)
-{
- if (mD3DTexture)
- {
- mD3DTexture->AddRef();
- }
-}
-
-SwapChainD3D::~SwapChainD3D()
-{
- SafeRelease(mD3DTexture);
-}
-} // namespace rx
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/SwapChainD3D.h b/gfx/angle/src/libANGLE/renderer/d3d/SwapChainD3D.h
index f49204527..992c68bc5 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/SwapChainD3D.h
+++ b/gfx/angle/src/libANGLE/renderer/d3d/SwapChainD3D.h
@@ -27,11 +27,14 @@ class RenderTargetD3D;
class SwapChainD3D : angle::NonCopyable
{
public:
- SwapChainD3D(HANDLE shareHandle,
- IUnknown *d3dTexture,
- GLenum backBufferFormat,
- GLenum depthBufferFormat);
- virtual ~SwapChainD3D();
+ SwapChainD3D(HANDLE shareHandle, GLenum backBufferFormat, GLenum depthBufferFormat)
+ : mOffscreenRenderTargetFormat(backBufferFormat),
+ mDepthBufferFormat(depthBufferFormat),
+ mShareHandle(shareHandle)
+ {
+ }
+
+ virtual ~SwapChainD3D() {};
virtual EGLint resize(EGLint backbufferWidth, EGLint backbufferSize) = 0;
virtual EGLint reset(EGLint backbufferWidth, EGLint backbufferHeight, EGLint swapInterval) = 0;
@@ -52,8 +55,7 @@ class SwapChainD3D : angle::NonCopyable
const GLenum mDepthBufferFormat;
HANDLE mShareHandle;
- IUnknown *mD3DTexture;
};
-} // namespace rx
+}
#endif // LIBANGLE_RENDERER_D3D_SWAPCHAIND3D_H_
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/TextureD3D.cpp b/gfx/angle/src/libANGLE/renderer/d3d/TextureD3D.cpp
index 287700264..96e8e20ff 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/TextureD3D.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/TextureD3D.cpp
@@ -46,7 +46,12 @@ gl::Error GetUnpackPointer(const gl::PixelUnpackState &unpack, const uint8_t *pi
BufferD3D *bufferD3D = GetImplAs<BufferD3D>(pixelBuffer);
ASSERT(bufferD3D);
const uint8_t *bufferData = NULL;
- ANGLE_TRY(bufferD3D->getData(&bufferData));
+ gl::Error error = bufferD3D->getData(&bufferData);
+ if (error.isError())
+ {
+ return error;
+ }
+
*pointerOut = bufferData + offset;
}
else
@@ -87,17 +92,25 @@ TextureD3D::~TextureD3D()
gl::Error TextureD3D::getNativeTexture(TextureStorage **outStorage)
{
// ensure the underlying texture is created
- ANGLE_TRY(initializeStorage(false));
+ gl::Error error = initializeStorage(false);
+ if (error.isError())
+ {
+ return error;
+ }
if (mTexStorage)
{
- ANGLE_TRY(updateStorage());
+ error = updateStorage();
+ if (error.isError())
+ {
+ return error;
+ }
}
ASSERT(outStorage);
*outStorage = mTexStorage;
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
GLint TextureD3D::getLevelZeroWidth() const
@@ -182,24 +195,33 @@ gl::Error TextureD3D::setImageImpl(const gl::ImageIndex &index,
// We no longer need the "GLenum format" parameter to TexImage to determine what data format "pixels" contains.
// From our image internal format we know how many channels to expect, and "type" gives the format of pixel's components.
const uint8_t *pixelData = NULL;
- ANGLE_TRY(GetUnpackPointer(unpack, pixels, layerOffset, &pixelData));
+ gl::Error error = GetUnpackPointer(unpack, pixels, layerOffset, &pixelData);
+ if (error.isError())
+ {
+ return error;
+ }
if (pixelData != nullptr)
{
if (shouldUseSetData(image))
{
- ANGLE_TRY(mTexStorage->setData(index, image, NULL, type, unpack, pixelData));
+ error = mTexStorage->setData(index, image, NULL, type, unpack, pixelData);
}
else
{
gl::Box fullImageArea(0, 0, 0, image->getWidth(), image->getHeight(), image->getDepth());
- ANGLE_TRY(image->loadData(fullImageArea, unpack, type, pixelData, index.is3D()));
+ error = image->loadData(fullImageArea, unpack, type, pixelData, index.is3D());
+ }
+
+ if (error.isError())
+ {
+ return error;
}
mDirtyImages = true;
}
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
gl::Error TextureD3D::subImage(const gl::ImageIndex &index, const gl::Box &area, GLenum format, GLenum type,
@@ -207,7 +229,11 @@ gl::Error TextureD3D::subImage(const gl::ImageIndex &index, const gl::Box &area,
{
// CPU readback & copy where direct GPU copy is not supported
const uint8_t *pixelData = NULL;
- ANGLE_TRY(GetUnpackPointer(unpack, pixels, layerOffset, &pixelData));
+ gl::Error error = GetUnpackPointer(unpack, pixels, layerOffset, &pixelData);
+ if (error.isError())
+ {
+ return error;
+ }
if (pixelData != NULL)
{
@@ -219,8 +245,18 @@ gl::Error TextureD3D::subImage(const gl::ImageIndex &index, const gl::Box &area,
return mTexStorage->setData(index, image, &area, type, unpack, pixelData);
}
- ANGLE_TRY(image->loadData(area, unpack, type, pixelData, index.is3D()));
- ANGLE_TRY(commitRegion(index, area));
+ error = image->loadData(area, unpack, type, pixelData, index.is3D());
+ if (error.isError())
+ {
+ return error;
+ }
+
+ error = commitRegion(index, area);
+ if (error.isError())
+ {
+ return error;
+ }
+
mDirtyImages = true;
}
@@ -243,12 +279,20 @@ gl::Error TextureD3D::setCompressedImageImpl(const gl::ImageIndex &index,
// We no longer need the "GLenum format" parameter to TexImage to determine what data format "pixels" contains.
// From our image internal format we know how many channels to expect, and "type" gives the format of pixel's components.
const uint8_t *pixelData = NULL;
- ANGLE_TRY(GetUnpackPointer(unpack, pixels, layerOffset, &pixelData));
+ gl::Error error = GetUnpackPointer(unpack, pixels, layerOffset, &pixelData);
+ if (error.isError())
+ {
+ return error;
+ }
if (pixelData != NULL)
{
gl::Box fullImageArea(0, 0, 0, image->getWidth(), image->getHeight(), image->getDepth());
- ANGLE_TRY(image->loadCompressedData(fullImageArea, pixelData));
+ error = image->loadCompressedData(fullImageArea, pixelData);
+ if (error.isError())
+ {
+ return error;
+ }
mDirtyImages = true;
}
@@ -261,14 +305,22 @@ gl::Error TextureD3D::subImageCompressed(const gl::ImageIndex &index, const gl::
ptrdiff_t layerOffset)
{
const uint8_t *pixelData = NULL;
- ANGLE_TRY(GetUnpackPointer(unpack, pixels, layerOffset, &pixelData));
+ gl::Error error = GetUnpackPointer(unpack, pixels, layerOffset, &pixelData);
+ if (error.isError())
+ {
+ return error;
+ }
if (pixelData != NULL)
{
ImageD3D *image = getImage(index);
ASSERT(image);
- ANGLE_TRY(image->loadCompressedData(area, pixelData));
+ error = image->loadCompressedData(area, pixelData);
+ if (error.isError())
+ {
+ return error;
+ }
mDirtyImages = true;
}
@@ -305,11 +357,13 @@ gl::Error TextureD3D::fastUnpackPixels(const gl::PixelUnpackState &unpack, const
uintptr_t offset = reinterpret_cast<uintptr_t>(pixels);
- ANGLE_TRY(mRenderer->fastCopyBufferToTexture(unpack, static_cast<unsigned int>(offset),
- destRenderTarget, sizedInternalFormat, type,
- destArea));
+ gl::Error error = mRenderer->fastCopyBufferToTexture(unpack, static_cast<unsigned int>(offset), destRenderTarget, sizedInternalFormat, type, destArea);
+ if (error.isError())
+ {
+ return error;
+ }
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
GLint TextureD3D::creationLevels(GLsizei width, GLsizei height, GLsizei depth) const
@@ -356,13 +410,23 @@ gl::Error TextureD3D::generateMipmap()
const GLuint baseLevel = mState.getEffectiveBaseLevel();
const GLuint maxLevel = mState.getMipmapMaxLevel();
ASSERT(maxLevel > baseLevel); // Should be checked before calling this.
+ UNUSED_ASSERTION_VARIABLE(baseLevel);
if (mTexStorage && mRenderer->getWorkarounds().zeroMaxLodWorkaround)
{
// Switch to using the mipmapped texture.
TextureStorage *textureStorage = NULL;
- ANGLE_TRY(getNativeTexture(&textureStorage));
- ANGLE_TRY(textureStorage->useLevelZeroWorkaroundTexture(false));
+ gl::Error error = getNativeTexture(&textureStorage);
+ if (error.isError())
+ {
+ return error;
+ }
+
+ error = textureStorage->useLevelZeroWorkaroundTexture(false);
+ if (error.isError())
+ {
+ return error;
+ }
}
// Set up proper mipmap chain in our Image array.
@@ -370,15 +434,27 @@ gl::Error TextureD3D::generateMipmap()
if (mTexStorage && mTexStorage->supportsNativeMipmapFunction())
{
- ANGLE_TRY(updateStorage());
+ gl::Error error = updateStorage();
+ if (error.isError())
+ {
+ return error;
+ }
// Generate the mipmap chain using the ad-hoc DirectX function.
- ANGLE_TRY(mRenderer->generateMipmapUsingD3D(mTexStorage, mState));
+ error = mRenderer->generateMipmapUsingD3D(mTexStorage, mState);
+ if (error.isError())
+ {
+ return error;
+ }
}
else
{
// Generate the mipmap chain, one level at a time.
- ANGLE_TRY(generateMipmapUsingImages(maxLevel));
+ gl::Error error = generateMipmapUsingImages(maxLevel);
+ if (error.isError())
+ {
+ return error;
+ }
}
return gl::Error(GL_NO_ERROR);
@@ -402,12 +478,20 @@ gl::Error TextureD3D::generateMipmapUsingImages(const GLuint maxLevel)
gl::ImageIndex srcIndex = getImageIndex(mBaseLevel, layer);
ImageD3D *image = getImage(srcIndex);
- ANGLE_TRY(image->copyFromTexStorage(srcIndex, mTexStorage));
+ gl::Error error = image->copyFromTexStorage(srcIndex, mTexStorage);
+ if (error.isError())
+ {
+ return error;
+ }
}
}
else
{
- ANGLE_TRY(updateStorage());
+ gl::Error error = updateStorage();
+ if (error.isError())
+ {
+ return error;
+ }
}
}
@@ -430,12 +514,20 @@ gl::Error TextureD3D::generateMipmapUsingImages(const GLuint maxLevel)
if (renderableStorage)
{
// GPU-side mipmapping
- ANGLE_TRY(mTexStorage->generateMipmap(sourceIndex, destIndex));
+ gl::Error error = mTexStorage->generateMipmap(sourceIndex, destIndex);
+ if (error.isError())
+ {
+ return error;
+ }
}
else
{
// CPU-side mipmapping
- ANGLE_TRY(mRenderer->generateMipmap(getImage(destIndex), getImage(sourceIndex)));
+ gl::Error error = mRenderer->generateMipmap(getImage(destIndex), getImage(sourceIndex));
+ if (error.isError())
+ {
+ return error;
+ }
}
}
}
@@ -445,7 +537,7 @@ gl::Error TextureD3D::generateMipmapUsingImages(const GLuint maxLevel)
updateStorage();
}
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
bool TextureD3D::isBaseImageZeroSize() const
@@ -477,7 +569,11 @@ bool TextureD3D::isBaseImageZeroSize() const
gl::Error TextureD3D::ensureRenderTarget()
{
- ANGLE_TRY(initializeStorage(true));
+ gl::Error error = initializeStorage(true);
+ if (error.isError())
+ {
+ return error;
+ }
if (!isBaseImageZeroSize())
{
@@ -485,9 +581,13 @@ gl::Error TextureD3D::ensureRenderTarget()
if (!mTexStorage->isRenderTarget())
{
TextureStorage *newRenderTargetStorage = NULL;
- ANGLE_TRY(createCompleteStorage(true, &newRenderTargetStorage));
+ error = createCompleteStorage(true, &newRenderTargetStorage);
+ if (error.isError())
+ {
+ return error;
+ }
- gl::Error error = mTexStorage->copyToStorage(newRenderTargetStorage);
+ error = mTexStorage->copyToStorage(newRenderTargetStorage);
if (error.isError())
{
SafeDelete(newRenderTargetStorage);
@@ -503,7 +603,7 @@ gl::Error TextureD3D::ensureRenderTarget()
}
}
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
bool TextureD3D::canCreateRenderTargetForImage(const gl::ImageIndex &index) const
@@ -519,11 +619,16 @@ gl::Error TextureD3D::commitRegion(const gl::ImageIndex &index, const gl::Box &r
{
ASSERT(isValidIndex(index));
ImageD3D *image = getImage(index);
- ANGLE_TRY(image->copyToStorage(mTexStorage, index, region));
+ gl::Error error = image->copyToStorage(mTexStorage, index, region);
+ if (error.isError())
+ {
+ return error;
+ }
+
image->markClean();
}
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
gl::Error TextureD3D::getAttachmentRenderTarget(const gl::FramebufferAttachment::Target &target,
@@ -558,11 +663,6 @@ void TextureD3D::setBaseLevel(GLuint baseLevel)
}
}
-void TextureD3D::syncState(const gl::Texture::DirtyBits &dirtyBits)
-{
- // TODO(geofflang): Use dirty bits
-}
-
TextureD3D_2D::TextureD3D_2D(const gl::TextureState &state, RendererD3D *renderer)
: TextureD3D(state, renderer)
{
@@ -679,7 +779,7 @@ gl::Error TextureD3D_2D::setImage(GLenum target,
ANGLE_TRY(setImageImpl(index, type, unpack, pixels, 0));
}
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
gl::Error TextureD3D_2D::setSubImage(GLenum target,
@@ -868,26 +968,6 @@ gl::Error TextureD3D_2D::copySubTexture(const gl::Offset &destOffset,
return gl::NoError();
}
-gl::Error TextureD3D_2D::copyCompressedTexture(const gl::Texture *source)
-{
- GLenum sourceTarget = source->getTarget();
- GLint sourceLevel = 0;
-
- GLint destLevel = 0;
-
- GLenum sizedInternalFormat = source->getFormat(sourceTarget, sourceLevel).asSized();
- gl::Extents size(static_cast<int>(source->getWidth(sourceTarget, sourceLevel)),
- static_cast<int>(source->getHeight(sourceTarget, sourceLevel)), 1);
- redefineImage(destLevel, sizedInternalFormat, size, false);
-
- ANGLE_TRY(initializeStorage(false));
- ASSERT(mTexStorage);
-
- ANGLE_TRY(mRenderer->copyCompressedTexture(source, sourceLevel, mTexStorage, destLevel));
-
- return gl::NoError();
-}
-
gl::Error TextureD3D_2D::setStorage(GLenum target, size_t levels, GLenum internalFormat, const gl::Extents &size)
{
ASSERT(GL_TEXTURE_2D && size.depth == 1);
@@ -917,11 +997,16 @@ gl::Error TextureD3D_2D::setStorage(GLenum target, size_t levels, GLenum interna
return error;
}
- ANGLE_TRY(updateStorage());
+ error = updateStorage();
+
+ if (error.isError())
+ {
+ return error;
+ }
mImmutable = true;
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
void TextureD3D_2D::bindTexImage(egl::Surface *surface)
@@ -1006,8 +1091,17 @@ gl::Error TextureD3D_2D::getRenderTarget(const gl::ImageIndex &index, RenderTarg
ASSERT(!index.hasLayer());
// ensure the underlying texture is created
- ANGLE_TRY(ensureRenderTarget());
- ANGLE_TRY(updateStorageLevel(index.mipIndex));
+ gl::Error error = ensureRenderTarget();
+ if (error.isError())
+ {
+ return error;
+ }
+
+ error = updateStorageLevel(index.mipIndex);
+ if (error.isError())
+ {
+ return error;
+ }
return mTexStorage->getRenderTarget(index, outRT);
}
@@ -1082,9 +1176,13 @@ gl::Error TextureD3D_2D::initializeStorage(bool renderTarget)
bool createRenderTarget = (renderTarget || IsRenderTargetUsage(mState.getUsage()));
TextureStorage *storage = NULL;
- ANGLE_TRY(createCompleteStorage(createRenderTarget, &storage));
+ gl::Error error = createCompleteStorage(createRenderTarget, &storage);
+ if (error.isError())
+ {
+ return error;
+ }
- gl::Error error = setCompleteTexStorage(storage);
+ error = setCompleteTexStorage(storage);
if (error.isError())
{
SafeDelete(storage);
@@ -1094,7 +1192,11 @@ gl::Error TextureD3D_2D::initializeStorage(bool renderTarget)
ASSERT(mTexStorage);
// flush image data to the storage
- ANGLE_TRY(updateStorage());
+ error = updateStorage();
+ if (error.isError())
+ {
+ return error;
+ }
return gl::Error(GL_NO_ERROR);
}
@@ -1134,7 +1236,11 @@ gl::Error TextureD3D_2D::setCompleteTexStorage(TextureStorage *newCompleteTexSto
{
for (int level = 0; level < newCompleteTexStorage->getLevelCount(); level++)
{
- ANGLE_TRY(mImageArray[level]->setManagedSurface2D(newCompleteTexStorage, level));
+ gl::Error error = mImageArray[level]->setManagedSurface2D(newCompleteTexStorage, level);
+ if (error.isError())
+ {
+ return error;
+ }
}
}
@@ -1143,7 +1249,7 @@ gl::Error TextureD3D_2D::setCompleteTexStorage(TextureStorage *newCompleteTexSto
mDirtyImages = true;
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
gl::Error TextureD3D_2D::updateStorage()
@@ -1154,11 +1260,15 @@ gl::Error TextureD3D_2D::updateStorage()
{
if (mImageArray[level]->isDirty() && isLevelComplete(level))
{
- ANGLE_TRY(updateStorageLevel(level));
+ gl::Error error = updateStorageLevel(level);
+ if (error.isError())
+ {
+ return error;
+ }
}
}
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
gl::Error TextureD3D_2D::updateStorageLevel(int level)
@@ -1170,10 +1280,14 @@ gl::Error TextureD3D_2D::updateStorageLevel(int level)
{
gl::ImageIndex index = gl::ImageIndex::Make2D(level);
gl::Box region(0, 0, 0, getWidth(level), getHeight(level), 1);
- ANGLE_TRY(commitRegion(index, region));
+ gl::Error error = commitRegion(index, region);
+ if (error.isError())
+ {
+ return error;
+ }
}
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
void TextureD3D_2D::redefineImage(size_t level,
@@ -1352,7 +1466,12 @@ gl::Error TextureD3D_Cube::setCompressedSubImage(GLenum target, size_t level, co
gl::ImageIndex index = gl::ImageIndex::MakeCube(target, static_cast<GLint>(level));
- ANGLE_TRY(TextureD3D::subImageCompressed(index, area, format, unpack, pixels, 0));
+ gl::Error error = TextureD3D::subImageCompressed(index, area, format, unpack, pixels, 0);
+ if (error.isError())
+ {
+ return error;
+ }
+
return commitRegion(index, area);
}
@@ -1377,21 +1496,34 @@ gl::Error TextureD3D_Cube::copyImage(GLenum target,
// so we should use the non-rendering copy path.
if (!canCreateRenderTargetForImage(index) || mRenderer->getWorkarounds().zeroMaxLodWorkaround)
{
- ANGLE_TRY(
- mImageArray[faceIndex][level]->copyFromFramebuffer(destOffset, sourceArea, source));
+ gl::Error error =
+ mImageArray[faceIndex][level]->copyFromFramebuffer(destOffset, sourceArea, source);
+ if (error.isError())
+ {
+ return error;
+ }
+
mDirtyImages = true;
}
else
{
- ANGLE_TRY(ensureRenderTarget());
+ gl::Error error = ensureRenderTarget();
+ if (error.isError())
+ {
+ return error;
+ }
+
mImageArray[faceIndex][level]->markClean();
ASSERT(size.width == size.height);
if (size.width > 0 && isValidFaceLevel(faceIndex, level))
{
- ANGLE_TRY(mRenderer->copyImageCube(source, sourceArea, internalFormat, destOffset,
- mTexStorage, target, level));
+ error = mRenderer->copyImageCube(source, sourceArea, internalFormat, destOffset, mTexStorage, target, level);
+ if (error.isError())
+ {
+ return error;
+ }
}
}
@@ -1424,13 +1556,26 @@ gl::Error TextureD3D_Cube::copySubImage(GLenum target,
}
else
{
- ANGLE_TRY(ensureRenderTarget());
+ gl::Error error = ensureRenderTarget();
+ if (error.isError())
+ {
+ return error;
+ }
+
if (isValidFaceLevel(faceIndex, level))
{
- ANGLE_TRY(updateStorageFaceLevel(faceIndex, level));
- ANGLE_TRY(mRenderer->copyImageCube(
- source, sourceArea, gl::GetInternalFormatInfo(getBaseLevelInternalFormat()).format,
- destOffset, mTexStorage, target, level));
+ error = updateStorageFaceLevel(faceIndex, level);
+ if (error.isError())
+ {
+ return error;
+ }
+
+ error = mRenderer->copyImageCube(source, sourceArea, gl::GetInternalFormatInfo(getBaseLevelInternalFormat()).format,
+ destOffset, mTexStorage, target, level);
+ if (error.isError())
+ {
+ return error;
+ }
}
}
@@ -1472,11 +1617,16 @@ gl::Error TextureD3D_Cube::setStorage(GLenum target, size_t levels, GLenum inter
return error;
}
- ANGLE_TRY(updateStorage());
+ error = updateStorage();
+
+ if (error.isError())
+ {
+ return error;
+ }
mImmutable = true;
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
// Tests for cube texture completeness. [OpenGL ES 2.0.24] section 3.7.10 page 81.
@@ -1539,8 +1689,17 @@ gl::Error TextureD3D_Cube::getRenderTarget(const gl::ImageIndex &index, RenderTa
ASSERT(gl::IsCubeMapTextureTarget(index.type));
// ensure the underlying texture is created
- ANGLE_TRY(ensureRenderTarget());
- ANGLE_TRY(updateStorageFaceLevel(index.layerIndex, index.mipIndex));
+ gl::Error error = ensureRenderTarget();
+ if (error.isError())
+ {
+ return error;
+ }
+
+ error = updateStorageFaceLevel(index.layerIndex, index.mipIndex);
+ if (error.isError())
+ {
+ return error;
+ }
return mTexStorage->getRenderTarget(index, outRT);
}
@@ -1550,21 +1709,25 @@ gl::Error TextureD3D_Cube::initializeStorage(bool renderTarget)
// Only initialize the first time this texture is used as a render target or shader resource
if (mTexStorage)
{
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
// do not attempt to create storage for nonexistant data
if (!isFaceLevelComplete(0, getBaseLevel()))
{
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
bool createRenderTarget = (renderTarget || IsRenderTargetUsage(mState.getUsage()));
TextureStorage *storage = NULL;
- ANGLE_TRY(createCompleteStorage(createRenderTarget, &storage));
+ gl::Error error = createCompleteStorage(createRenderTarget, &storage);
+ if (error.isError())
+ {
+ return error;
+ }
- gl::Error error = setCompleteTexStorage(storage);
+ error = setCompleteTexStorage(storage);
if (error.isError())
{
SafeDelete(storage);
@@ -1574,9 +1737,13 @@ gl::Error TextureD3D_Cube::initializeStorage(bool renderTarget)
ASSERT(mTexStorage);
// flush image data to the storage
- ANGLE_TRY(updateStorage());
+ error = updateStorage();
+ if (error.isError())
+ {
+ return error;
+ }
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
gl::Error TextureD3D_Cube::createCompleteStorage(bool renderTarget, TextureStorage **outTexStorage) const
@@ -1617,8 +1784,11 @@ gl::Error TextureD3D_Cube::setCompleteTexStorage(TextureStorage *newCompleteTexS
{
for (int level = 0; level < newCompleteTexStorage->getLevelCount(); level++)
{
- ANGLE_TRY(mImageArray[faceIndex][level]->setManagedSurfaceCube(
- newCompleteTexStorage, faceIndex, level));
+ gl::Error error = mImageArray[faceIndex][level]->setManagedSurfaceCube(newCompleteTexStorage, faceIndex, level);
+ if (error.isError())
+ {
+ return error;
+ }
}
}
}
@@ -1640,12 +1810,16 @@ gl::Error TextureD3D_Cube::updateStorage()
{
if (mImageArray[face][level]->isDirty() && isFaceLevelComplete(face, level))
{
- ANGLE_TRY(updateStorageFaceLevel(face, level));
+ gl::Error error = updateStorageFaceLevel(face, level);
+ if (error.isError())
+ {
+ return error;
+ }
}
}
}
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
bool TextureD3D_Cube::isValidFaceLevel(int faceIndex, int level) const
@@ -1713,10 +1887,14 @@ gl::Error TextureD3D_Cube::updateStorageFaceLevel(int faceIndex, int level)
GLenum faceTarget = gl::LayerIndexToCubeMapTextureTarget(faceIndex);
gl::ImageIndex index = gl::ImageIndex::MakeCube(faceTarget, level);
gl::Box region(0, 0, 0, image->getWidth(), image->getHeight(), 1);
- ANGLE_TRY(commitRegion(index, region));
+ gl::Error error = commitRegion(index, region);
+ if (error.isError())
+ {
+ return error;
+ }
}
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
void TextureD3D_Cube::redefineImage(int faceIndex, GLint level, GLenum internalformat, const gl::Extents &size)
@@ -1882,12 +2060,19 @@ gl::Error TextureD3D_3D::setImage(GLenum target,
{
// Will try to create RT storage if it does not exist
RenderTargetD3D *destRenderTarget = NULL;
- ANGLE_TRY(getRenderTarget(index, &destRenderTarget));
+ gl::Error error = getRenderTarget(index, &destRenderTarget);
+ if (error.isError())
+ {
+ return error;
+ }
gl::Box destArea(0, 0, 0, getWidth(level), getHeight(level), getDepth(level));
- ANGLE_TRY(fastUnpackPixels(unpack, pixels, destArea, sizedInternalFormat, type,
- destRenderTarget));
+ error = fastUnpackPixels(unpack, pixels, destArea, sizedInternalFormat, type, destRenderTarget);
+ if (error.isError())
+ {
+ return error;
+ }
// Ensure we don't overwrite our newly initialized data
mImageArray[level]->markClean();
@@ -1897,7 +2082,11 @@ gl::Error TextureD3D_3D::setImage(GLenum target,
if (!fastUnpacked)
{
- ANGLE_TRY(setImageImpl(index, type, unpack, pixels, 0));
+ gl::Error error = setImageImpl(index, type, unpack, pixels, 0);
+ if (error.isError())
+ {
+ return error;
+ }
}
return gl::Error(GL_NO_ERROR);
@@ -1920,7 +2109,12 @@ gl::Error TextureD3D_3D::setSubImage(GLenum target,
if (isFastUnpackable(unpack, getInternalFormat(level)) && isLevelComplete(level))
{
RenderTargetD3D *destRenderTarget = NULL;
- ANGLE_TRY(getRenderTarget(index, &destRenderTarget));
+ gl::Error error = getRenderTarget(index, &destRenderTarget);
+ if (error.isError())
+ {
+ return error;
+ }
+
ASSERT(!mImageArray[level]->isDirty());
return fastUnpackPixels(unpack, pixels, area, getInternalFormat(level), type, destRenderTarget);
@@ -1955,7 +2149,12 @@ gl::Error TextureD3D_3D::setCompressedSubImage(GLenum target, size_t level, cons
ASSERT(target == GL_TEXTURE_3D);
gl::ImageIndex index = gl::ImageIndex::Make3D(static_cast<GLint>(level));
- ANGLE_TRY(TextureD3D::subImageCompressed(index, area, format, unpack, pixels, 0));
+ gl::Error error = TextureD3D::subImageCompressed(index, area, format, unpack, pixels, 0);
+ if (error.isError())
+ {
+ return error;
+ }
+
return commitRegion(index, area);
}
@@ -1979,18 +2178,37 @@ gl::Error TextureD3D_3D::copySubImage(GLenum target,
if (canCreateRenderTargetForImage(index))
{
- ANGLE_TRY(mImageArray[level]->copyFromFramebuffer(destOffset, sourceArea, source));
+ gl::Error error = mImageArray[level]->copyFromFramebuffer(destOffset, sourceArea, source);
+ if (error.isError())
+ {
+ return error;
+ }
+
mDirtyImages = true;
}
else
{
- ANGLE_TRY(ensureRenderTarget());
+ gl::Error error = ensureRenderTarget();
+ if (error.isError())
+ {
+ return error;
+ }
+
if (isValidLevel(level))
{
- ANGLE_TRY(updateStorageLevel(level));
- ANGLE_TRY(mRenderer->copyImage3D(
- source, sourceArea, gl::GetInternalFormatInfo(getBaseLevelInternalFormat()).format,
- destOffset, mTexStorage, level));
+ error = updateStorageLevel(level);
+ if (error.isError())
+ {
+ return error;
+ }
+
+ error = mRenderer->copyImage3D(source, sourceArea,
+ gl::GetInternalFormatInfo(getBaseLevelInternalFormat()).format,
+ destOffset, mTexStorage, level);
+ if (error.isError())
+ {
+ return error;
+ }
}
}
@@ -2027,11 +2245,16 @@ gl::Error TextureD3D_3D::setStorage(GLenum target, size_t levels, GLenum interna
return error;
}
- ANGLE_TRY(updateStorage());
+ error = updateStorage();
+
+ if (error.isError())
+ {
+ return error;
+ }
mImmutable = true;
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
void TextureD3D_3D::bindTexImage(egl::Surface *surface)
@@ -2062,15 +2285,27 @@ void TextureD3D_3D::initMipmapImages()
gl::Error TextureD3D_3D::getRenderTarget(const gl::ImageIndex &index, RenderTargetD3D **outRT)
{
// ensure the underlying texture is created
- ANGLE_TRY(ensureRenderTarget());
+ gl::Error error = ensureRenderTarget();
+ if (error.isError())
+ {
+ return error;
+ }
if (index.hasLayer())
{
- ANGLE_TRY(updateStorage());
+ error = updateStorage();
+ if (error.isError())
+ {
+ return error;
+ }
}
else
{
- ANGLE_TRY(updateStorageLevel(index.mipIndex));
+ error = updateStorageLevel(index.mipIndex);
+ if (error.isError())
+ {
+ return error;
+ }
}
return mTexStorage->getRenderTarget(index, outRT);
@@ -2093,9 +2328,13 @@ gl::Error TextureD3D_3D::initializeStorage(bool renderTarget)
bool createRenderTarget = (renderTarget || IsRenderTargetUsage(mState.getUsage()));
TextureStorage *storage = NULL;
- ANGLE_TRY(createCompleteStorage(createRenderTarget, &storage));
+ gl::Error error = createCompleteStorage(createRenderTarget, &storage);
+ if (error.isError())
+ {
+ return error;
+ }
- gl::Error error = setCompleteTexStorage(storage);
+ error = setCompleteTexStorage(storage);
if (error.isError())
{
SafeDelete(storage);
@@ -2105,9 +2344,13 @@ gl::Error TextureD3D_3D::initializeStorage(bool renderTarget)
ASSERT(mTexStorage);
// flush image data to the storage
- ANGLE_TRY(updateStorage());
+ error = updateStorage();
+ if (error.isError())
+ {
+ return error;
+ }
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
gl::Error TextureD3D_3D::createCompleteStorage(bool renderTarget, TextureStorage **outStorage) const
@@ -2137,7 +2380,7 @@ gl::Error TextureD3D_3D::setCompleteTexStorage(TextureStorage *newCompleteTexSto
// We do not support managed 3D storage, as that is D3D9/ES2-only
ASSERT(!mTexStorage->isManaged());
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
gl::Error TextureD3D_3D::updateStorage()
@@ -2148,11 +2391,15 @@ gl::Error TextureD3D_3D::updateStorage()
{
if (mImageArray[level]->isDirty() && isLevelComplete(level))
{
- ANGLE_TRY(updateStorageLevel(level));
+ gl::Error error = updateStorageLevel(level);
+ if (error.isError())
+ {
+ return error;
+ }
}
}
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
bool TextureD3D_3D::isValidLevel(int level) const
@@ -2222,10 +2469,14 @@ gl::Error TextureD3D_3D::updateStorageLevel(int level)
{
gl::ImageIndex index = gl::ImageIndex::Make3D(level);
gl::Box region(0, 0, 0, getWidth(level), getHeight(level), getDepth(level));
- ANGLE_TRY(commitRegion(index, region));
+ gl::Error error = commitRegion(index, region);
+ if (error.isError())
+ {
+ return error;
+ }
}
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
void TextureD3D_3D::redefineImage(GLint level, GLenum internalformat, const gl::Extents &size)
@@ -2234,12 +2485,12 @@ void TextureD3D_3D::redefineImage(GLint level, GLenum internalformat, const gl::
const int storageWidth = std::max(1, getLevelZeroWidth() >> level);
const int storageHeight = std::max(1, getLevelZeroHeight() >> level);
const int storageDepth = std::max(1, getLevelZeroDepth() >> level);
- const GLenum storageFormat = getBaseLevelInternalFormat();
mImageArray[level]->redefine(GL_TEXTURE_3D, internalformat, size, false);
if (mTexStorage)
{
+ const GLenum storageFormat = getBaseLevelInternalFormat();
const int storageLevels = mTexStorage->getLevelCount();
if ((level >= storageLevels && storageLevels != 0) ||
@@ -2366,25 +2617,29 @@ gl::Error TextureD3D_2DArray::setImage(GLenum target,
{
ASSERT(target == GL_TEXTURE_2D_ARRAY);
- GLint level = static_cast<GLint>(imageLevel);
GLenum sizedInternalFormat = gl::GetSizedInternalFormat(internalFormat, type);
+
+ GLint level = static_cast<GLint>(imageLevel);
redefineImage(level, sizedInternalFormat, size);
- const auto sizedInputFormat = gl::GetSizedInternalFormat(format, type);
- const gl::InternalFormat &inputFormat = gl::GetInternalFormatInfo(sizedInputFormat);
- GLsizei inputDepthPitch = 0;
- ANGLE_TRY_RESULT(inputFormat.computeDepthPitch(size.width, size.height, unpack.alignment,
- unpack.rowLength, unpack.imageHeight),
+ const gl::InternalFormat &formatInfo = gl::GetInternalFormatInfo(sizedInternalFormat);
+ GLsizei inputDepthPitch = 0;
+ ANGLE_TRY_RESULT(formatInfo.computeDepthPitch(type, size.width, size.height, unpack.alignment,
+ unpack.rowLength, unpack.imageHeight),
inputDepthPitch);
for (int i = 0; i < size.depth; i++)
{
const ptrdiff_t layerOffset = (inputDepthPitch * i);
gl::ImageIndex index = gl::ImageIndex::Make2DArray(level, i);
- ANGLE_TRY(setImageImpl(index, type, unpack, pixels, layerOffset));
+ gl::Error error = setImageImpl(index, type, unpack, pixels, layerOffset);
+ if (error.isError())
+ {
+ return error;
+ }
}
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
gl::Error TextureD3D_2DArray::setSubImage(GLenum target,
@@ -2396,12 +2651,11 @@ gl::Error TextureD3D_2DArray::setSubImage(GLenum target,
const uint8_t *pixels)
{
ASSERT(target == GL_TEXTURE_2D_ARRAY);
- GLint level = static_cast<GLint>(imageLevel);
- const auto sizedInputFormat = gl::GetSizedInternalFormat(format, type);
- const gl::InternalFormat &inputFormat = gl::GetInternalFormatInfo(sizedInputFormat);
- GLsizei inputDepthPitch = 0;
- ANGLE_TRY_RESULT(inputFormat.computeDepthPitch(area.width, area.height, unpack.alignment,
- unpack.rowLength, unpack.imageHeight),
+ GLint level = static_cast<GLint>(imageLevel);
+ const gl::InternalFormat &formatInfo = gl::GetInternalFormatInfo(getInternalFormat(level));
+ GLsizei inputDepthPitch = 0;
+ ANGLE_TRY_RESULT(formatInfo.computeDepthPitch(type, area.width, area.height, unpack.alignment,
+ unpack.rowLength, unpack.imageHeight),
inputDepthPitch);
for (int i = 0; i < area.depth; i++)
@@ -2412,11 +2666,14 @@ gl::Error TextureD3D_2DArray::setSubImage(GLenum target,
gl::Box layerArea(area.x, area.y, 0, area.width, area.height, 1);
gl::ImageIndex index = gl::ImageIndex::Make2DArray(level, layer);
- ANGLE_TRY(
- TextureD3D::subImage(index, layerArea, format, type, unpack, pixels, layerOffset));
+ gl::Error error = TextureD3D::subImage(index, layerArea, format, type, unpack, pixels, layerOffset);
+ if (error.isError())
+ {
+ return error;
+ }
}
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
gl::Error TextureD3D_2DArray::setCompressedImage(GLenum target,
@@ -2436,7 +2693,7 @@ gl::Error TextureD3D_2DArray::setCompressedImage(GLenum target,
const gl::InternalFormat &formatInfo = gl::GetInternalFormatInfo(internalFormat);
GLsizei inputDepthPitch = 0;
ANGLE_TRY_RESULT(
- formatInfo.computeDepthPitch(size.width, size.height, 1, 0, 0),
+ formatInfo.computeDepthPitch(GL_UNSIGNED_BYTE, size.width, size.height, 1, 0, 0),
inputDepthPitch);
for (int i = 0; i < size.depth; i++)
@@ -2444,10 +2701,14 @@ gl::Error TextureD3D_2DArray::setCompressedImage(GLenum target,
const ptrdiff_t layerOffset = (inputDepthPitch * i);
gl::ImageIndex index = gl::ImageIndex::Make2DArray(level, i);
- ANGLE_TRY(setCompressedImageImpl(index, unpack, pixels, layerOffset));
+ gl::Error error = setCompressedImageImpl(index, unpack, pixels, layerOffset);
+ if (error.isError())
+ {
+ return error;
+ }
}
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
gl::Error TextureD3D_2DArray::setCompressedSubImage(GLenum target, size_t level, const gl::Box &area, GLenum format,
@@ -2458,7 +2719,7 @@ gl::Error TextureD3D_2DArray::setCompressedSubImage(GLenum target, size_t level,
const gl::InternalFormat &formatInfo = gl::GetInternalFormatInfo(format);
GLsizei inputDepthPitch = 0;
ANGLE_TRY_RESULT(
- formatInfo.computeDepthPitch(area.width, area.height, 1, 0, 0),
+ formatInfo.computeDepthPitch(GL_UNSIGNED_BYTE, area.width, area.height, 1, 0, 0),
inputDepthPitch);
for (int i = 0; i < area.depth; i++)
@@ -2469,9 +2730,17 @@ gl::Error TextureD3D_2DArray::setCompressedSubImage(GLenum target, size_t level,
gl::Box layerArea(area.x, area.y, 0, area.width, area.height, 1);
gl::ImageIndex index = gl::ImageIndex::Make2DArray(static_cast<GLint>(level), layer);
- ANGLE_TRY(
- TextureD3D::subImageCompressed(index, layerArea, format, unpack, pixels, layerOffset));
- ANGLE_TRY(commitRegion(index, layerArea));
+ gl::Error error = TextureD3D::subImageCompressed(index, layerArea, format, unpack, pixels, layerOffset);
+ if (error.isError())
+ {
+ return error;
+ }
+
+ error = commitRegion(index, layerArea);
+ if (error.isError())
+ {
+ return error;
+ }
}
return gl::Error(GL_NO_ERROR);
@@ -2498,21 +2767,39 @@ gl::Error TextureD3D_2DArray::copySubImage(GLenum target,
if (canCreateRenderTargetForImage(index))
{
gl::Offset destLayerOffset(destOffset.x, destOffset.y, 0);
- ANGLE_TRY(mImageArray[level][destOffset.z]->copyFromFramebuffer(destLayerOffset, sourceArea,
- source));
+ gl::Error error = mImageArray[level][destOffset.z]->copyFromFramebuffer(destLayerOffset,
+ sourceArea, source);
+ if (error.isError())
+ {
+ return error;
+ }
+
mDirtyImages = true;
}
else
{
- ANGLE_TRY(ensureRenderTarget());
+ gl::Error error = ensureRenderTarget();
+ if (error.isError())
+ {
+ return error;
+ }
if (isValidLevel(level))
{
- ANGLE_TRY(updateStorageLevel(level));
- ANGLE_TRY(mRenderer->copyImage2DArray(
+ error = updateStorageLevel(level);
+ if (error.isError())
+ {
+ return error;
+ }
+
+ error = mRenderer->copyImage2DArray(
source, sourceArea,
gl::GetInternalFormatInfo(getInternalFormat(getBaseLevel())).format, destOffset,
- mTexStorage, level));
+ mTexStorage, level);
+ if (error.isError())
+ {
+ return error;
+ }
}
}
return gl::Error(GL_NO_ERROR);
@@ -2558,11 +2845,16 @@ gl::Error TextureD3D_2DArray::setStorage(GLenum target, size_t levels, GLenum in
return error;
}
- ANGLE_TRY(updateStorage());
+ error = updateStorage();
+
+ if (error.isError())
+ {
+ return error;
+ }
mImmutable = true;
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
void TextureD3D_2DArray::bindTexImage(egl::Surface *surface)
@@ -2599,8 +2891,18 @@ void TextureD3D_2DArray::initMipmapImages()
gl::Error TextureD3D_2DArray::getRenderTarget(const gl::ImageIndex &index, RenderTargetD3D **outRT)
{
// ensure the underlying texture is created
- ANGLE_TRY(ensureRenderTarget());
- ANGLE_TRY(updateStorageLevel(index.mipIndex));
+ gl::Error error = ensureRenderTarget();
+ if (error.isError())
+ {
+ return error;
+ }
+
+ error = updateStorageLevel(index.mipIndex);
+ if (error.isError())
+ {
+ return error;
+ }
+
return mTexStorage->getRenderTarget(index, outRT);
}
@@ -2609,21 +2911,25 @@ gl::Error TextureD3D_2DArray::initializeStorage(bool renderTarget)
// Only initialize the first time this texture is used as a render target or shader resource
if (mTexStorage)
{
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
// do not attempt to create storage for nonexistant data
if (!isLevelComplete(getBaseLevel()))
{
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
bool createRenderTarget = (renderTarget || IsRenderTargetUsage(mState.getUsage()));
- TextureStorage *storage = nullptr;
- ANGLE_TRY(createCompleteStorage(createRenderTarget, &storage));
+ TextureStorage *storage = NULL;
+ gl::Error error = createCompleteStorage(createRenderTarget, &storage);
+ if (error.isError())
+ {
+ return error;
+ }
- gl::Error error = setCompleteTexStorage(storage);
+ error = setCompleteTexStorage(storage);
if (error.isError())
{
SafeDelete(storage);
@@ -2633,9 +2939,13 @@ gl::Error TextureD3D_2DArray::initializeStorage(bool renderTarget)
ASSERT(mTexStorage);
// flush image data to the storage
- ANGLE_TRY(updateStorage());
+ error = updateStorage();
+ if (error.isError())
+ {
+ return error;
+ }
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
gl::Error TextureD3D_2DArray::createCompleteStorage(bool renderTarget, TextureStorage **outStorage) const
@@ -2653,7 +2963,7 @@ gl::Error TextureD3D_2DArray::createCompleteStorage(bool renderTarget, TextureSt
// TODO(geofflang): Verify storage creation succeeds
*outStorage = mRenderer->createTextureStorage2DArray(internalFormat, renderTarget, width, height, depth, levels);
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
gl::Error TextureD3D_2DArray::setCompleteTexStorage(TextureStorage *newCompleteTexStorage)
@@ -2665,7 +2975,7 @@ gl::Error TextureD3D_2DArray::setCompleteTexStorage(TextureStorage *newCompleteT
// We do not support managed 2D array storage, as managed storage is ES2/D3D9 only
ASSERT(!mTexStorage->isManaged());
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
gl::Error TextureD3D_2DArray::updateStorage()
@@ -2676,11 +2986,15 @@ gl::Error TextureD3D_2DArray::updateStorage()
{
if (isLevelComplete(level))
{
- ANGLE_TRY(updateStorageLevel(level));
+ gl::Error error = updateStorageLevel(level);
+ if (error.isError())
+ {
+ return error;
+ }
}
}
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
bool TextureD3D_2DArray::isValidLevel(int level) const
@@ -2759,7 +3073,11 @@ gl::Error TextureD3D_2DArray::updateStorageLevel(int level)
{
gl::ImageIndex index = gl::ImageIndex::Make2DArray(level, layer);
gl::Box region(0, 0, 0, getWidth(level), getHeight(level), 1);
- ANGLE_TRY(commitRegion(index, region));
+ gl::Error error = commitRegion(index, region);
+ if (error.isError())
+ {
+ return error;
+ }
}
}
@@ -3083,4 +3401,4 @@ void TextureD3D_External::markAllImagesDirty()
{
UNREACHABLE();
}
-} // namespace rx
+}
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/TextureD3D.h b/gfx/angle/src/libANGLE/renderer/d3d/TextureD3D.h
index 99343632a..7a8cad980 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/TextureD3D.h
+++ b/gfx/angle/src/libANGLE/renderer/d3d/TextureD3D.h
@@ -69,8 +69,6 @@ class TextureD3D : public TextureImpl
void setBaseLevel(GLuint baseLevel) override;
- void syncState(const gl::Texture::DirtyBits &dirtyBits) override;
-
protected:
gl::Error setImageImpl(const gl::ImageIndex &index,
GLenum type,
@@ -172,7 +170,6 @@ class TextureD3D_2D : public TextureD3D
bool unpackPremultiplyAlpha,
bool unpackUnmultiplyAlpha,
const gl::Texture *source) override;
- gl::Error copyCompressedTexture(const gl::Texture *source) override;
gl::Error setStorage(GLenum target, size_t levels, GLenum internalFormat, const gl::Extents &size) override;
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/VaryingPacking.cpp b/gfx/angle/src/libANGLE/renderer/d3d/VaryingPacking.cpp
index eea85fea7..0bd783414 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/VaryingPacking.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/VaryingPacking.cpp
@@ -271,37 +271,33 @@ bool VaryingPacking::packVaryings(gl::InfoLog &infoLog,
continue;
}
- bool found = false;
for (const PackedVarying &packedVarying : packedVaryings)
{
const auto &varying = *packedVarying.varying;
// Make sure transform feedback varyings aren't optimized out.
- if (uniqueVaryingNames.count(transformFeedbackVaryingName) > 0)
+ if (uniqueVaryingNames.count(transformFeedbackVaryingName) == 0)
{
- found = true;
- break;
- }
-
- if (transformFeedbackVaryingName == varying.name)
- {
- if (!packVarying(packedVarying))
+ bool found = false;
+ if (transformFeedbackVaryingName == varying.name)
+ {
+ if (!packVarying(packedVarying))
+ {
+ infoLog << "Could not pack varying " << varying.name;
+ return false;
+ }
+
+ found = true;
+ break;
+ }
+ if (!found)
{
- infoLog << "Could not pack varying " << varying.name;
+ infoLog << "Transform feedback varying " << transformFeedbackVaryingName
+ << " does not exist in the vertex shader.";
return false;
}
-
- found = true;
- break;
}
}
-
- if (!found)
- {
- infoLog << "Transform feedback varying " << transformFeedbackVaryingName
- << " does not exist in the vertex shader.";
- return false;
- }
}
// Sort the packed register list
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/VertexDataManager.cpp b/gfx/angle/src/libANGLE/renderer/d3d/VertexDataManager.cpp
index 89dd4faf2..fff16e63a 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/VertexDataManager.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/VertexDataManager.cpp
@@ -431,6 +431,7 @@ gl::Error VertexDataManager::reserveSpaceForAttrib(const TranslatedAttribute &tr
gl::Buffer *buffer = attrib.buffer.get();
BufferD3D *bufferD3D = buffer ? GetImplAs<BufferD3D>(buffer) : nullptr;
ASSERT(!bufferD3D || bufferD3D->getStaticVertexBuffer(attrib) == nullptr);
+ UNUSED_ASSERTION_VARIABLE(bufferD3D);
size_t totalCount = ComputeVertexAttributeElementCount(attrib, count, instances);
ASSERT(!bufferD3D ||
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/WorkaroundsD3D.h b/gfx/angle/src/libANGLE/renderer/d3d/WorkaroundsD3D.h
index ede929ce8..a2faf71d9 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/WorkaroundsD3D.h
+++ b/gfx/angle/src/libANGLE/renderer/d3d/WorkaroundsD3D.h
@@ -67,43 +67,19 @@ struct WorkaroundsD3D
// Some drivers (NVIDIA) do not take into account the base level of the texture in the results
// of the HLSL GetDimensions builtin.
bool getDimensionsIgnoresBaseLevel = false;
+
+ // In the Intel driver, data with format DXGI_FORMAT_B5G6R5_UNORM will be parsed incorrectly.
+ // This workaroud will disable B5G6R5 support when it's Intel's driver. By default, we will
+ // use R8G8B8A8 as format.
+ bool disableB5G6R5Support = false;
// On some Intel drivers, HLSL's function texture.Load returns 0 when the parameter Location
// is negative, even if the sum of Offset and Location is in range. This may cause errors when
// translating GLSL's function texelFetchOffset into texture.Load, as it is valid for
// texelFetchOffset to use negative texture coordinates as its parameter P when the sum of P
- // and Offset is in range. To work around this, we translate texelFetchOffset into texelFetch
+ // and Offset is in range. To work around this, we translatie texelFetchOffset into texelFetch
// by adding Offset directly to Location before reading the texture.
bool preAddTexelFetchOffsets = false;
-
- // On some AMD drivers, 1x1 and 2x2 mips of depth/stencil textures aren't sampled correctly.
- // We can work around this bug by doing an internal blit to a temporary single-channel texture
- // before we sample.
- bool emulateTinyStencilTextures = false;
-
- // In Intel driver, the data with format DXGI_FORMAT_B5G6R5_UNORM will be parsed incorrectly.
- // This workaroud will disable B5G6R5 support when it's Intel driver. By default, it will use
- // R8G8B8A8 format.
- bool disableB5G6R5Support = false;
-
- // On some Intel drivers, evaluating unary minus operator on integer may get wrong answer in
- // vertex shaders. To work around this bug, we translate -(int) into ~(int)+1.
- bool rewriteUnaryMinusOperator = false;
-
- // On some Intel drivers, using isnan() on highp float will get wrong answer. To work around
- // this bug, we use an expression to emulate function isnan(). Tracking bug:
- // https://crbug.com/650547
- bool emulateIsnanFloat = false;
-
- // On some Intel drivers, using clear() may not take effect. To work around this bug, we call
- // clear() twice on these platforms. Tracking bug: https://crbug.com/655534
- bool callClearTwice = false;
-
- // On some Intel drivers, copying from staging storage to constant buffer storage does not
- // seem to work. Work around this by keeping system memory storage as a canonical reference
- // for buffer data.
- // D3D11-only workaround. See http://crbug.com/593024.
- bool useSystemMemoryForConstantBuffers = false;
};
} // namespace rx
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Blit11.cpp b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Blit11.cpp
index f8a0ac597..d1e6a13f2 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Blit11.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Blit11.cpp
@@ -274,93 +274,6 @@ void CopyDepthStencil(const gl::Box &sourceArea,
}
}
-void Depth32FStencil8ToDepth32F(const float *source, float *dest)
-{
- *dest = *source;
-}
-
-void Depth24Stencil8ToDepth32F(const uint32_t *source, float *dest)
-{
- uint32_t normDepth = source[0] & 0x00FFFFFF;
- float floatDepth = gl::normalizedToFloat<24>(normDepth);
- *dest = floatDepth;
-}
-
-void BlitD24S8ToD32F(const gl::Box &sourceArea,
- const gl::Box &destArea,
- const gl::Rectangle &clippedDestArea,
- const gl::Extents &sourceSize,
- unsigned int sourceRowPitch,
- unsigned int destRowPitch,
- ptrdiff_t readOffset,
- ptrdiff_t writeOffset,
- size_t copySize,
- size_t srcPixelStride,
- size_t destPixelStride,
- const uint8_t *sourceData,
- uint8_t *destData)
-{
- // No stretching or subregions are supported, only full blits.
- ASSERT(sourceArea == destArea);
- ASSERT(sourceSize.width == sourceArea.width && sourceSize.height == sourceArea.height &&
- sourceSize.depth == 1);
- ASSERT(clippedDestArea.width == sourceSize.width &&
- clippedDestArea.height == sourceSize.height);
- ASSERT(readOffset == 0 && writeOffset == 0);
- ASSERT(destArea.x == 0 && destArea.y == 0);
-
- for (int row = 0; row < destArea.height; ++row)
- {
- for (int column = 0; column < destArea.width; ++column)
- {
- ptrdiff_t offset = row * sourceRowPitch + column * srcPixelStride;
- const uint32_t *sourcePixel = reinterpret_cast<const uint32_t *>(sourceData + offset);
-
- float *destPixel =
- reinterpret_cast<float *>(destData + row * destRowPitch + column * destPixelStride);
-
- Depth24Stencil8ToDepth32F(sourcePixel, destPixel);
- }
- }
-}
-
-void BlitD32FS8ToD32F(const gl::Box &sourceArea,
- const gl::Box &destArea,
- const gl::Rectangle &clippedDestArea,
- const gl::Extents &sourceSize,
- unsigned int sourceRowPitch,
- unsigned int destRowPitch,
- ptrdiff_t readOffset,
- ptrdiff_t writeOffset,
- size_t copySize,
- size_t srcPixelStride,
- size_t destPixelStride,
- const uint8_t *sourceData,
- uint8_t *destData)
-{
- // No stretching or subregions are supported, only full blits.
- ASSERT(sourceArea == destArea);
- ASSERT(sourceSize.width == sourceArea.width && sourceSize.height == sourceArea.height &&
- sourceSize.depth == 1);
- ASSERT(clippedDestArea.width == sourceSize.width &&
- clippedDestArea.height == sourceSize.height);
- ASSERT(readOffset == 0 && writeOffset == 0);
- ASSERT(destArea.x == 0 && destArea.y == 0);
-
- for (int row = 0; row < destArea.height; ++row)
- {
- for (int column = 0; column < destArea.width; ++column)
- {
- ptrdiff_t offset = row * sourceRowPitch + column * srcPixelStride;
- const float *sourcePixel = reinterpret_cast<const float *>(sourceData + offset);
- float *destPixel =
- reinterpret_cast<float *>(destData + row * destRowPitch + column * destPixelStride);
-
- Depth32FStencil8ToDepth32F(sourcePixel, destPixel);
- }
- }
-}
-
Blit11::BlitConvertFunction *GetCopyDepthStencilFunction(GLenum internalFormat)
{
switch (internalFormat)
@@ -1022,7 +935,8 @@ gl::Error Blit11::swizzleTexture(ID3D11ShaderResourceView *source,
D3D11_SHADER_RESOURCE_VIEW_DESC sourceSRVDesc;
source->GetDesc(&sourceSRVDesc);
- GLenum componentType = d3d11::GetComponentType(sourceSRVDesc.Format);
+ const d3d11::DXGIFormat &dxgiFormatInfo = d3d11::GetDXGIFormatInfo(sourceSRVDesc.Format);
+ GLenum componentType = dxgiFormatInfo.componentType;
if (componentType == GL_NONE)
{
// We're swizzling the depth component of a depth-stencil texture.
@@ -1182,7 +1096,8 @@ gl::Error Blit11::copyTexture(ID3D11ShaderResourceView *source,
D3D11_SHADER_RESOURCE_VIEW_DESC sourceSRVDesc;
source->GetDesc(&sourceSRVDesc);
- GLenum componentType = d3d11::GetComponentType(sourceSRVDesc.Format);
+ const d3d11::DXGIFormat &dxgiFormatInfo = d3d11::GetDXGIFormatInfo(sourceSRVDesc.Format);
+ GLenum componentType = dxgiFormatInfo.componentType;
ASSERT(componentType != GL_NONE);
ASSERT(componentType != GL_SIGNED_NORMALIZED);
@@ -1457,26 +1372,26 @@ gl::Error Blit11::copyDepthStencilImpl(const TextureHelper11 &source,
const gl::Rectangle *scissor,
bool stencilOnly)
{
- auto srcDXGIFormat = source.getFormat();
- const auto &srcSizeInfo = d3d11::GetDXGIFormatSizeInfo(srcDXGIFormat);
+ auto srcFormat = source.getFormat();
+ const auto &srcSizeInfo = d3d11::GetDXGIFormatSizeInfo(srcFormat);
unsigned int srcPixelSize = srcSizeInfo.pixelBytes;
- unsigned int copyOffset = 0;
+ unsigned int copyOffset = 0;
unsigned int copySize = srcPixelSize;
- auto destDXGIFormat = dest.getFormat();
- const auto &destSizeInfo = d3d11::GetDXGIFormatSizeInfo(destDXGIFormat);
+ auto destFormat = dest.getFormat();
+ const auto &destSizeInfo = d3d11::GetDXGIFormatSizeInfo(destFormat);
unsigned int destPixelSize = destSizeInfo.pixelBytes;
- ASSERT(srcDXGIFormat == destDXGIFormat || destDXGIFormat == DXGI_FORMAT_R32_TYPELESS);
+ ASSERT(srcFormat == destFormat);
if (stencilOnly)
{
- const auto &srcFormat = source.getFormatSet().format();
+ const d3d11::DXGIFormat &srcDXGIFormat = d3d11::GetDXGIFormatInfo(srcFormat);
// Stencil channel should be right after the depth channel. Some views to depth/stencil
// resources have red channel for depth, in which case the depth channel bit width is in
// redBits.
- ASSERT((srcFormat.redBits != 0) != (srcFormat.depthBits != 0));
- GLuint depthBits = srcFormat.redBits + srcFormat.depthBits;
+ ASSERT((srcDXGIFormat.redBits != 0) != (srcDXGIFormat.depthBits != 0));
+ GLuint depthBits = srcDXGIFormat.redBits + srcDXGIFormat.depthBits;
// Known formats have either 24 or 32 bits of depth.
ASSERT(depthBits == 24 || depthBits == 32);
copyOffset = depthBits / 8;
@@ -1485,22 +1400,6 @@ gl::Error Blit11::copyDepthStencilImpl(const TextureHelper11 &source,
copySize = 1;
}
- if (srcDXGIFormat != destDXGIFormat)
- {
- if (srcDXGIFormat == DXGI_FORMAT_R24G8_TYPELESS)
- {
- ASSERT(sourceArea == destArea && sourceSize == destSize && scissor == nullptr);
- return copyAndConvert(source, sourceSubresource, sourceArea, sourceSize, dest,
- destSubresource, destArea, destSize, scissor, copyOffset,
- copyOffset, copySize, srcPixelSize, destPixelSize,
- BlitD24S8ToD32F);
- }
- ASSERT(srcDXGIFormat == DXGI_FORMAT_R32G8X24_TYPELESS);
- return copyAndConvert(source, sourceSubresource, sourceArea, sourceSize, dest,
- destSubresource, destArea, destSize, scissor, copyOffset, copyOffset,
- copySize, srcPixelSize, destPixelSize, BlitD32FS8ToD32F);
- }
-
return copyAndConvert(source, sourceSubresource, sourceArea, sourceSize, dest, destSubresource,
destArea, destSize, scissor, copyOffset, copyOffset, copySize,
srcPixelSize, destPixelSize, StretchedBlitNearest);
@@ -2000,14 +1899,6 @@ gl::Error Blit11::getSwizzleShader(GLenum type,
gl::ErrorOrResult<TextureHelper11> Blit11::resolveDepth(RenderTarget11 *depth)
{
- // Multisampled depth stencil SRVs are not available in feature level 10.0
- if (mRenderer->getRenderer11DeviceCaps().featureLevel <= D3D_FEATURE_LEVEL_10_0)
- {
- return gl::Error(GL_INVALID_OPERATION,
- "Resolving multisampled depth stencil textures is not supported in "
- "feature level 10.0.");
- }
-
const auto &extents = depth->getExtents();
ID3D11Device *device = mRenderer->getDevice();
ID3D11DeviceContext *context = mRenderer->getDeviceContext();
@@ -2136,14 +2027,6 @@ gl::Error Blit11::initResolveDepthStencil(const gl::Extents &extents)
gl::ErrorOrResult<TextureHelper11> Blit11::resolveStencil(RenderTarget11 *depthStencil,
bool alsoDepth)
{
- // Multisampled depth stencil SRVs are not available in feature level 10.0
- if (mRenderer->getRenderer11DeviceCaps().featureLevel <= D3D_FEATURE_LEVEL_10_0)
- {
- return gl::Error(GL_INVALID_OPERATION,
- "Resolving multisampled depth stencil textures is not supported in "
- "feature level 10.0.");
- }
-
const auto &extents = depthStencil->getExtents();
ANGLE_TRY(initResolveDepthStencil(extents));
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Buffer11.cpp b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Buffer11.cpp
index 90668b759..107a577e4 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Buffer11.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Buffer11.cpp
@@ -38,34 +38,12 @@ enum class CopyResult
NOT_RECREATED,
};
-void CalculateConstantBufferParams(GLintptr offset,
- GLsizeiptr size,
- UINT *outFirstConstant,
- UINT *outNumConstants)
-{
- // The offset must be aligned to 256 bytes (should have been enforced by glBindBufferRange).
- ASSERT(offset % 256 == 0);
-
- // firstConstant and numConstants are expressed in constants of 16-bytes. Furthermore they must
- // be a multiple of 16 constants.
- *outFirstConstant = static_cast<UINT>(offset / 16);
-
- // The GL size is not required to be aligned to a 256 bytes boundary.
- // Round the size up to a 256 bytes boundary then express the results in constants of 16-bytes.
- *outNumConstants = static_cast<UINT>(rx::roundUp(size, static_cast<GLsizeiptr>(256)) / 16);
-
- // Since the size is rounded up, firstConstant + numConstants may be bigger than the actual size
- // of the buffer. This behaviour is explictly allowed according to the documentation on
- // ID3D11DeviceContext1::PSSetConstantBuffers1
- // https://msdn.microsoft.com/en-us/library/windows/desktop/hh404649%28v=vs.85%29.aspx
-}
-
} // anonymous namespace
namespace gl_d3d11
{
-D3D11_MAP GetD3DMapTypeFromBits(BufferUsage usage, GLbitfield access)
+D3D11_MAP GetD3DMapTypeFromBits(GLbitfield access)
{
bool readBit = ((access & GL_MAP_READ_BIT) != 0);
bool writeBit = ((access & GL_MAP_WRITE_BIT) != 0);
@@ -81,8 +59,7 @@ D3D11_MAP GetD3DMapTypeFromBits(BufferUsage usage, GLbitfield access)
}
else if (writeBit && !readBit)
{
- // Special case for uniform storage - we only allow full buffer updates.
- return usage == BUFFER_USAGE_UNIFORM ? D3D11_MAP_WRITE_DISCARD : D3D11_MAP_WRITE;
+ return D3D11_MAP_WRITE;
}
else if (writeBit && readBit)
{
@@ -111,7 +88,7 @@ class Buffer11::BufferStorage : angle::NonCopyable
size_t getSize() const { return mBufferSize; }
void setDataRevision(DataRevision rev) { mRevision = rev; }
- virtual bool isMappable(GLbitfield access) const = 0;
+ virtual bool isMappable() const = 0;
virtual gl::ErrorOrResult<CopyResult> copyFromStorage(BufferStorage *source,
size_t sourceOffset,
@@ -146,7 +123,7 @@ class Buffer11::NativeStorage : public Buffer11::BufferStorage
const angle::BroadcastChannel *onStorageChanged);
~NativeStorage() override;
- bool isMappable(GLbitfield access) const override;
+ bool isMappable() const override { return mUsage == BUFFER_USAGE_STAGING; }
ID3D11Buffer *getNativeStorage() const { return mNativeStorage; }
gl::ErrorOrResult<CopyResult> copyFromStorage(BufferStorage *source,
@@ -161,18 +138,14 @@ class Buffer11::NativeStorage : public Buffer11::BufferStorage
uint8_t **mapPointerOut) override;
void unmap() override;
- gl::ErrorOrResult<ID3D11ShaderResourceView *> getSRVForFormat(DXGI_FORMAT srvFormat);
-
private:
- static void FillBufferDesc(D3D11_BUFFER_DESC *bufferDesc,
+ static void fillBufferDesc(D3D11_BUFFER_DESC *bufferDesc,
Renderer11 *renderer,
BufferUsage usage,
unsigned int bufferSize);
- void clearSRVs();
ID3D11Buffer *mNativeStorage;
const angle::BroadcastChannel *mOnStorageChanged;
- std::map<DXGI_FORMAT, ID3D11ShaderResourceView *> mBufferResourceViews;
};
// A emulated indexed buffer storage represents an underlying D3D11 buffer for data
@@ -184,7 +157,7 @@ class Buffer11::EmulatedIndexedStorage : public Buffer11::BufferStorage
EmulatedIndexedStorage(Renderer11 *renderer);
~EmulatedIndexedStorage() override;
- bool isMappable(GLbitfield access) const override { return true; }
+ bool isMappable() const override { return true; }
gl::ErrorOrResult<ID3D11Buffer *> getNativeStorage(SourceIndexData *indexInfo,
const TranslatedAttribute &attribute,
@@ -217,7 +190,7 @@ class Buffer11::PackStorage : public Buffer11::BufferStorage
explicit PackStorage(Renderer11 *renderer);
~PackStorage() override;
- bool isMappable(GLbitfield access) const override { return true; }
+ bool isMappable() const override { return true; }
gl::ErrorOrResult<CopyResult> copyFromStorage(BufferStorage *source,
size_t sourceOffset,
size_t size,
@@ -252,7 +225,7 @@ class Buffer11::SystemMemoryStorage : public Buffer11::BufferStorage
explicit SystemMemoryStorage(Renderer11 *renderer);
~SystemMemoryStorage() override {}
- bool isMappable(GLbitfield access) const override { return true; }
+ bool isMappable() const override { return true; }
gl::ErrorOrResult<CopyResult> copyFromStorage(BufferStorage *source,
size_t sourceOffset,
size_t size,
@@ -271,16 +244,16 @@ class Buffer11::SystemMemoryStorage : public Buffer11::BufferStorage
MemoryBuffer mSystemCopy;
};
-Buffer11::Buffer11(const gl::BufferState &state, Renderer11 *renderer)
- : BufferD3D(state, renderer),
+Buffer11::Buffer11(Renderer11 *renderer)
+ : BufferD3D(renderer),
mRenderer(renderer),
mSize(0),
mMappedStorage(nullptr),
- mBufferStorages({}),
- mDeallocThresholds({}),
- mIdleness({}),
+ mBufferStorages(BUFFER_USAGE_COUNT, nullptr),
mConstantBufferStorageAdditionalSize(0),
- mMaxConstantBufferLruCount(0)
+ mMaxConstantBufferLruCount(0),
+ mReadUsageCount(0),
+ mSystemMemoryDeallocThreshold(0)
{
}
@@ -299,10 +272,10 @@ Buffer11::~Buffer11()
mRenderer->onBufferDelete(this);
}
-gl::Error Buffer11::setData(GLenum target, const void *data, size_t size, GLenum usage)
+gl::Error Buffer11::setData(const void *data, size_t size, GLenum usage)
{
updateD3DBufferUsage(usage);
- ANGLE_TRY(setSubData(target, data, size, 0));
+ ANGLE_TRY(setSubData(data, size, 0));
return gl::NoError();
}
@@ -311,6 +284,8 @@ gl::Error Buffer11::getData(const uint8_t **outData)
SystemMemoryStorage *systemMemoryStorage = nullptr;
ANGLE_TRY_RESULT(getSystemMemoryStorage(), systemMemoryStorage);
+ mReadUsageCount = 0;
+
ASSERT(systemMemoryStorage->getSize() >= mSize);
*outData = systemMemoryStorage->getSystemCopy()->data();
@@ -324,34 +299,16 @@ gl::ErrorOrResult<Buffer11::SystemMemoryStorage *> Buffer11::getSystemMemoryStor
return GetAs<SystemMemoryStorage>(storage);
}
-gl::Error Buffer11::setSubData(GLenum target, const void *data, size_t size, size_t offset)
+gl::Error Buffer11::setSubData(const void *data, size_t size, size_t offset)
{
size_t requiredSize = size + offset;
if (data && size > 0)
{
// Use system memory storage for dynamic buffers.
- // Try using a constant storage for constant buffers
+
BufferStorage *writeBuffer = nullptr;
- if (target == GL_UNIFORM_BUFFER)
- {
- // If we are a very large uniform buffer, keep system memory storage around so that we
- // aren't forced to read back from a constant buffer. We also check the workaround for
- // Intel - this requires us to use system memory so we don't end up having to copy from
- // a constant buffer to a staging buffer.
- // TODO(jmadill): Use Context caps.
- if (offset == 0 && size >= mSize &&
- size <= static_cast<UINT>(mRenderer->getNativeCaps().maxUniformBlockSize) &&
- !mRenderer->getWorkarounds().useSystemMemoryForConstantBuffers)
- {
- ANGLE_TRY_RESULT(getBufferStorage(BUFFER_USAGE_UNIFORM), writeBuffer);
- }
- else
- {
- ANGLE_TRY_RESULT(getSystemMemoryStorage(), writeBuffer);
- }
- }
- else if (supportsDirectBinding())
+ if (supportsDirectBinding())
{
ANGLE_TRY_RESULT(getStagingStorage(), writeBuffer);
}
@@ -406,12 +363,11 @@ gl::Error Buffer11::copySubData(BufferImpl *source,
// If copying to/from a pixel pack buffer, we must have a staging or
// pack buffer partner, because other native buffers can't be mapped
- if (copyDest->getUsage() == BUFFER_USAGE_PIXEL_PACK && !copySource->isMappable(GL_MAP_READ_BIT))
+ if (copyDest->getUsage() == BUFFER_USAGE_PIXEL_PACK && !copySource->isMappable())
{
ANGLE_TRY_RESULT(sourceBuffer->getStagingStorage(), copySource);
}
- else if (copySource->getUsage() == BUFFER_USAGE_PIXEL_PACK &&
- !copyDest->isMappable(GL_MAP_WRITE_BIT))
+ else if (copySource->getUsage() == BUFFER_USAGE_PIXEL_PACK && !copyDest->isMappable())
{
ANGLE_TRY_RESULT(getStagingStorage(), copyDest);
}
@@ -518,81 +474,50 @@ gl::Error Buffer11::markTransformFeedbackUsage()
return gl::NoError();
}
-void Buffer11::updateDeallocThreshold(BufferUsage usage)
+void Buffer11::updateSystemMemoryDeallocThreshold()
{
// The following strategy was tuned on the Oort online benchmark (http://oortonline.gl/)
// as well as a custom microbenchmark (IndexConversionPerfTest.Run/index_range_d3d11)
- // First readback: 8 unmodified uses before we free buffer memory.
+ // First readback: 8 unmodified uses before we free system memory.
// After that, double the threshold each time until we reach the max.
- if (mDeallocThresholds[usage] == 0)
+ if (mSystemMemoryDeallocThreshold == 0)
{
- mDeallocThresholds[usage] = 8;
+ mSystemMemoryDeallocThreshold = 8;
}
- else if (mDeallocThresholds[usage] < std::numeric_limits<unsigned int>::max() / 2u)
+ else if (mSystemMemoryDeallocThreshold < std::numeric_limits<unsigned int>::max() / 2u)
{
- mDeallocThresholds[usage] *= 2u;
+ mSystemMemoryDeallocThreshold *= 2u;
}
else
{
- mDeallocThresholds[usage] = std::numeric_limits<unsigned int>::max();
+ mSystemMemoryDeallocThreshold = std::numeric_limits<unsigned int>::max();
}
}
-// Free the storage if we decide it isn't being used very often.
-gl::Error Buffer11::checkForDeallocation(BufferUsage usage)
+gl::Error Buffer11::markBufferUsage()
{
- mIdleness[usage]++;
+ mReadUsageCount++;
- BufferStorage *&storage = mBufferStorages[usage];
- if (storage != nullptr && mIdleness[usage] > mDeallocThresholds[usage])
+ // Free the system memory storage if we decide it isn't being used very often.
+ BufferStorage *&sysMemStorage = mBufferStorages[BUFFER_USAGE_SYSTEM_MEMORY];
+ if (sysMemStorage != nullptr && mReadUsageCount > mSystemMemoryDeallocThreshold)
{
BufferStorage *latestStorage = nullptr;
ANGLE_TRY_RESULT(getLatestBufferStorage(), latestStorage);
- if (latestStorage != storage)
+ if (latestStorage != sysMemStorage)
{
- SafeDelete(storage);
+ SafeDelete(sysMemStorage);
}
}
return gl::NoError();
}
-// Keep system memory when we are using it for the canonical version of data.
-bool Buffer11::canDeallocateSystemMemory() const
-{
- // Must keep system memory on Intel.
- if (mRenderer->getWorkarounds().useSystemMemoryForConstantBuffers)
- {
- return false;
- }
-
- return (!mBufferStorages[BUFFER_USAGE_UNIFORM] ||
- mSize <= mRenderer->getNativeCaps().maxUniformBlockSize);
-}
-
-void Buffer11::markBufferUsage(BufferUsage usage)
-{
- mIdleness[usage] = 0;
-}
-
-gl::Error Buffer11::garbageCollection(BufferUsage currentUsage)
-{
- if (currentUsage != BUFFER_USAGE_SYSTEM_MEMORY && canDeallocateSystemMemory())
- {
- ANGLE_TRY(checkForDeallocation(BUFFER_USAGE_SYSTEM_MEMORY));
- }
-
- if (currentUsage != BUFFER_USAGE_STAGING)
- {
- ANGLE_TRY(checkForDeallocation(BUFFER_USAGE_STAGING));
- }
-
- return gl::NoError();
-}
-
gl::ErrorOrResult<ID3D11Buffer *> Buffer11::getBuffer(BufferUsage usage)
{
+ ANGLE_TRY(markBufferUsage());
+
BufferStorage *storage = nullptr;
ANGLE_TRY_RESULT(getBufferStorage(usage), storage);
return GetAs<NativeStorage>(storage)->getNativeStorage();
@@ -605,6 +530,8 @@ gl::ErrorOrResult<ID3D11Buffer *> Buffer11::getEmulatedIndexedBuffer(
{
ASSERT(indexInfo);
+ ANGLE_TRY(markBufferUsage());
+
BufferStorage *untypedStorage = nullptr;
ANGLE_TRY_RESULT(getBufferStorage(BUFFER_USAGE_EMULATED_INDEXED_VERTEX), untypedStorage);
@@ -617,37 +544,64 @@ gl::ErrorOrResult<ID3D11Buffer *> Buffer11::getEmulatedIndexedBuffer(
return nativeStorage;
}
-gl::Error Buffer11::getConstantBufferRange(GLintptr offset,
- GLsizeiptr size,
- ID3D11Buffer **bufferOut,
- UINT *firstConstantOut,
- UINT *numConstantsOut)
+gl::ErrorOrResult<ID3D11Buffer *> Buffer11::getConstantBufferRange(GLintptr offset, GLsizeiptr size)
{
+ ANGLE_TRY(markBufferUsage());
+
BufferStorage *bufferStorage = nullptr;
if (offset == 0 || mRenderer->getRenderer11DeviceCaps().supportsConstantBufferOffsets)
{
ANGLE_TRY_RESULT(getBufferStorage(BUFFER_USAGE_UNIFORM), bufferStorage);
- CalculateConstantBufferParams(offset, size, firstConstantOut, numConstantsOut);
}
else
{
ANGLE_TRY_RESULT(getConstantBufferRangeStorage(offset, size), bufferStorage);
- *firstConstantOut = 0;
- *numConstantsOut = 0;
}
- *bufferOut = GetAs<NativeStorage>(bufferStorage)->getNativeStorage();
-
- return gl::NoError();
+ return GetAs<NativeStorage>(bufferStorage)->getNativeStorage();
}
gl::ErrorOrResult<ID3D11ShaderResourceView *> Buffer11::getSRV(DXGI_FORMAT srvFormat)
{
BufferStorage *storage = nullptr;
ANGLE_TRY_RESULT(getBufferStorage(BUFFER_USAGE_PIXEL_UNPACK), storage);
- NativeStorage *nativeStorage = GetAs<NativeStorage>(storage);
- return nativeStorage->getSRVForFormat(srvFormat);
+ ID3D11Buffer *buffer = GetAs<NativeStorage>(storage)->getNativeStorage();
+
+ auto bufferSRVIt = mBufferResourceViews.find(srvFormat);
+
+ if (bufferSRVIt != mBufferResourceViews.end())
+ {
+ if (bufferSRVIt->second.first == buffer)
+ {
+ return bufferSRVIt->second.second;
+ }
+ else
+ {
+ // The underlying buffer has changed since the SRV was created: recreate the SRV.
+ SafeRelease(bufferSRVIt->second.second);
+ }
+ }
+
+ ID3D11Device *device = mRenderer->getDevice();
+ ID3D11ShaderResourceView *bufferSRV = nullptr;
+
+ const d3d11::DXGIFormatSize &dxgiFormatInfo = d3d11::GetDXGIFormatSizeInfo(srvFormat);
+
+ D3D11_SHADER_RESOURCE_VIEW_DESC bufferSRVDesc;
+ bufferSRVDesc.Buffer.ElementOffset = 0;
+ bufferSRVDesc.Buffer.ElementWidth =
+ static_cast<unsigned int>(mSize) / dxgiFormatInfo.pixelBytes;
+ bufferSRVDesc.ViewDimension = D3D11_SRV_DIMENSION_BUFFER;
+ bufferSRVDesc.Format = srvFormat;
+
+ HRESULT result = device->CreateShaderResourceView(buffer, &bufferSRVDesc, &bufferSRV);
+ UNUSED_ASSERTION_VARIABLE(result);
+ ASSERT(SUCCEEDED(result));
+
+ mBufferResourceViews[srvFormat] = BufferSRVPair(buffer, bufferSRV);
+
+ return bufferSRV;
}
gl::Error Buffer11::packPixels(const gl::FramebufferAttachment &readAttachment,
@@ -689,31 +643,28 @@ gl::ErrorOrResult<Buffer11::BufferStorage *> Buffer11::getBufferStorage(BufferUs
newStorage = allocateStorage(usage);
}
- markBufferUsage(usage);
-
// resize buffer
if (newStorage->getSize() < mSize)
{
ANGLE_TRY(newStorage->resize(mSize, true));
}
- ASSERT(newStorage);
-
ANGLE_TRY(updateBufferStorage(newStorage, 0, mSize));
- ANGLE_TRY(garbageCollection(usage));
return newStorage;
}
Buffer11::BufferStorage *Buffer11::allocateStorage(BufferUsage usage)
{
- updateDeallocThreshold(usage);
switch (usage)
{
case BUFFER_USAGE_PIXEL_PACK:
return new PackStorage(mRenderer);
case BUFFER_USAGE_SYSTEM_MEMORY:
+ {
+ updateSystemMemoryDeallocThreshold();
return new SystemMemoryStorage(mRenderer);
+ }
case BUFFER_USAGE_EMULATED_INDEXED_VERTEX:
return new EmulatedIndexedStorage(mRenderer);
case BUFFER_USAGE_VERTEX_OR_TRANSFORM_FEEDBACK:
@@ -744,8 +695,6 @@ gl::ErrorOrResult<Buffer11::BufferStorage *> Buffer11::getConstantBufferRangeSto
newStorage = cacheEntry->storage;
}
- markBufferUsage(BUFFER_USAGE_UNIFORM);
-
if (newStorage->getSize() < static_cast<size_t>(size))
{
size_t maximumAllowedAdditionalSize = 2 * getSize();
@@ -780,7 +729,6 @@ gl::ErrorOrResult<Buffer11::BufferStorage *> Buffer11::getConstantBufferRangeSto
}
ANGLE_TRY(updateBufferStorage(newStorage, offset, size));
- ANGLE_TRY(garbageCollection(BUFFER_USAGE_UNIFORM));
return newStorage;
}
@@ -791,8 +739,6 @@ gl::Error Buffer11::updateBufferStorage(BufferStorage *storage,
BufferStorage *latestBuffer = nullptr;
ANGLE_TRY_RESULT(getLatestBufferStorage(), latestBuffer);
- ASSERT(storage);
-
if (latestBuffer && latestBuffer->getDataRevision() > storage->getDataRevision())
{
// Copy through a staging buffer if we're copying from or to a non-staging, mappable
@@ -800,7 +746,7 @@ gl::Error Buffer11::updateBufferStorage(BufferStorage *storage,
// data directly. If we're already using a staging buffer we're fine.
if (latestBuffer->getUsage() != BUFFER_USAGE_STAGING &&
storage->getUsage() != BUFFER_USAGE_STAGING &&
- (!latestBuffer->isMappable(GL_MAP_READ_BIT) || !storage->isMappable(GL_MAP_WRITE_BIT)))
+ (!latestBuffer->isMappable() || !storage->isMappable()))
{
NativeStorage *stagingBuffer = nullptr;
ANGLE_TRY_RESULT(getStagingStorage(), stagingBuffer);
@@ -899,8 +845,6 @@ angle::BroadcastChannel *Buffer11::getDirectBroadcastChannel()
return &mDirectBroadcastChannel;
}
-// Buffer11::BufferStorage implementation
-
Buffer11::BufferStorage::BufferStorage(Renderer11 *renderer, BufferUsage usage)
: mRenderer(renderer), mRevision(0), mUsage(usage), mBufferSize(0)
{
@@ -908,24 +852,18 @@ Buffer11::BufferStorage::BufferStorage(Renderer11 *renderer, BufferUsage usage)
gl::Error Buffer11::BufferStorage::setData(const uint8_t *data, size_t offset, size_t size)
{
- ASSERT(isMappable(GL_MAP_WRITE_BIT));
-
- // Uniform storage can have a different internal size than the buffer size. Ensure we don't
- // overflow.
- size_t mapSize = std::min(size, mBufferSize - offset);
+ ASSERT(isMappable());
uint8_t *writePointer = nullptr;
- ANGLE_TRY(map(offset, mapSize, GL_MAP_WRITE_BIT, &writePointer));
+ ANGLE_TRY(map(offset, size, GL_MAP_WRITE_BIT, &writePointer));
- memcpy(writePointer, data, mapSize);
+ memcpy(writePointer, data, size);
unmap();
return gl::NoError();
}
-// Buffer11::NativeStorage implementation
-
Buffer11::NativeStorage::NativeStorage(Renderer11 *renderer,
BufferUsage usage,
const angle::BroadcastChannel *onStorageChanged)
@@ -936,18 +874,6 @@ Buffer11::NativeStorage::NativeStorage(Renderer11 *renderer,
Buffer11::NativeStorage::~NativeStorage()
{
SafeRelease(mNativeStorage);
- clearSRVs();
-}
-
-bool Buffer11::NativeStorage::isMappable(GLbitfield access) const
-{
- if ((access & GL_MAP_READ_BIT) != 0)
- {
- // Read is more exclusive than write mappability.
- return (mUsage == BUFFER_USAGE_STAGING);
- }
- ASSERT((access & GL_MAP_WRITE_BIT) != 0);
- return (mUsage == BUFFER_USAGE_STAGING || mUsage == BUFFER_USAGE_UNIFORM);
}
// Returns true if it recreates the direct buffer
@@ -962,38 +888,45 @@ gl::ErrorOrResult<CopyResult> Buffer11::NativeStorage::copyFromStorage(BufferSto
bool createBuffer = !mNativeStorage || mBufferSize < requiredSize;
// (Re)initialize D3D buffer if needed
- bool preserveData = (destOffset > 0);
if (createBuffer)
{
+ bool preserveData = (destOffset > 0);
resize(requiredSize, preserveData);
}
- size_t clampedSize = size;
- if (mUsage == BUFFER_USAGE_UNIFORM)
- {
- clampedSize = std::min(clampedSize, mBufferSize - destOffset);
- }
-
if (source->getUsage() == BUFFER_USAGE_PIXEL_PACK ||
source->getUsage() == BUFFER_USAGE_SYSTEM_MEMORY)
{
- ASSERT(source->isMappable(GL_MAP_READ_BIT) && isMappable(GL_MAP_WRITE_BIT));
-
- // Uniform buffers must be mapped with write/discard.
- ASSERT(!(preserveData && mUsage == BUFFER_USAGE_UNIFORM));
+ ASSERT(source->isMappable());
uint8_t *sourcePointer = nullptr;
- ANGLE_TRY(source->map(sourceOffset, clampedSize, GL_MAP_READ_BIT, &sourcePointer));
+ ANGLE_TRY(source->map(sourceOffset, size, GL_MAP_READ_BIT, &sourcePointer));
+
+ D3D11_MAPPED_SUBRESOURCE mappedResource;
+ HRESULT hr = context->Map(mNativeStorage, 0, D3D11_MAP_WRITE, 0, &mappedResource);
+ ASSERT(SUCCEEDED(hr));
+ if (FAILED(hr))
+ {
+ source->unmap();
+ return gl::Error(
+ GL_OUT_OF_MEMORY,
+ "Failed to map native storage in Buffer11::NativeStorage::copyFromStorage");
+ }
+
+ uint8_t *destPointer = static_cast<uint8_t *>(mappedResource.pData) + destOffset;
- setData(sourcePointer, destOffset, clampedSize);
+ // Offset bounds are validated at the API layer
+ ASSERT(sourceOffset + size <= destOffset + mBufferSize);
+ memcpy(destPointer, sourcePointer, size);
+ context->Unmap(mNativeStorage, 0);
source->unmap();
}
else
{
D3D11_BOX srcBox;
srcBox.left = static_cast<unsigned int>(sourceOffset);
- srcBox.right = static_cast<unsigned int>(sourceOffset + clampedSize);
+ srcBox.right = static_cast<unsigned int>(sourceOffset + size);
srcBox.top = 0;
srcBox.bottom = 1;
srcBox.front = 0;
@@ -1014,7 +947,7 @@ gl::Error Buffer11::NativeStorage::resize(size_t size, bool preserveData)
ID3D11DeviceContext *context = mRenderer->getDeviceContext();
D3D11_BUFFER_DESC bufferDesc;
- FillBufferDesc(&bufferDesc, mRenderer, mUsage, static_cast<unsigned int>(size));
+ fillBufferDesc(&bufferDesc, mRenderer, mUsage, static_cast<unsigned int>(size));
ID3D11Buffer *newBuffer;
HRESULT result = device->CreateBuffer(&bufferDesc, nullptr, &newBuffer);
@@ -1049,9 +982,6 @@ gl::Error Buffer11::NativeStorage::resize(size_t size, bool preserveData)
mBufferSize = bufferDesc.ByteWidth;
- // Free the SRVs.
- clearSRVs();
-
// Notify that the storage has changed.
if (mOnStorageChanged)
{
@@ -1061,8 +991,7 @@ gl::Error Buffer11::NativeStorage::resize(size_t size, bool preserveData)
return gl::NoError();
}
-// static
-void Buffer11::NativeStorage::FillBufferDesc(D3D11_BUFFER_DESC *bufferDesc,
+void Buffer11::NativeStorage::fillBufferDesc(D3D11_BUFFER_DESC *bufferDesc,
Renderer11 *renderer,
BufferUsage usage,
unsigned int bufferSize)
@@ -1111,9 +1040,6 @@ void Buffer11::NativeStorage::FillBufferDesc(D3D11_BUFFER_DESC *bufferDesc,
// Constant buffers must be of a limited size, and aligned to 16 byte boundaries
// For our purposes we ignore any buffer data past the maximum constant buffer size
bufferDesc->ByteWidth = roundUp(bufferDesc->ByteWidth, 16u);
-
- // Note: it seems that D3D11 allows larger buffers on some platforms, but not all.
- // (Windows 10 seems to allow larger constant buffers, but not Windows 7)
bufferDesc->ByteWidth =
std::min<UINT>(bufferDesc->ByteWidth,
static_cast<UINT>(renderer->getNativeCaps().maxUniformBlockSize));
@@ -1129,11 +1055,11 @@ gl::Error Buffer11::NativeStorage::map(size_t offset,
GLbitfield access,
uint8_t **mapPointerOut)
{
- ASSERT(isMappable(access));
+ ASSERT(mUsage == BUFFER_USAGE_STAGING);
D3D11_MAPPED_SUBRESOURCE mappedResource;
ID3D11DeviceContext *context = mRenderer->getDeviceContext();
- D3D11_MAP d3dMapType = gl_d3d11::GetD3DMapTypeFromBits(mUsage, access);
+ D3D11_MAP d3dMapType = gl_d3d11::GetD3DMapTypeFromBits(access);
UINT d3dMapFlag = ((access & GL_MAP_UNSYNCHRONIZED_BIT) != 0 ? D3D11_MAP_FLAG_DO_NOT_WAIT : 0);
HRESULT result = context->Map(mNativeStorage, 0, d3dMapType, d3dMapFlag, &mappedResource);
@@ -1150,56 +1076,11 @@ gl::Error Buffer11::NativeStorage::map(size_t offset,
void Buffer11::NativeStorage::unmap()
{
- ASSERT(isMappable(GL_MAP_WRITE_BIT) || isMappable(GL_MAP_READ_BIT));
+ ASSERT(mUsage == BUFFER_USAGE_STAGING);
ID3D11DeviceContext *context = mRenderer->getDeviceContext();
context->Unmap(mNativeStorage, 0);
}
-gl::ErrorOrResult<ID3D11ShaderResourceView *> Buffer11::NativeStorage::getSRVForFormat(
- DXGI_FORMAT srvFormat)
-{
- auto bufferSRVIt = mBufferResourceViews.find(srvFormat);
-
- if (bufferSRVIt != mBufferResourceViews.end())
- {
- return bufferSRVIt->second;
- }
-
- ID3D11Device *device = mRenderer->getDevice();
- ID3D11ShaderResourceView *bufferSRV = nullptr;
-
- const d3d11::DXGIFormatSize &dxgiFormatInfo = d3d11::GetDXGIFormatSizeInfo(srvFormat);
-
- D3D11_SHADER_RESOURCE_VIEW_DESC bufferSRVDesc;
- bufferSRVDesc.Buffer.ElementOffset = 0;
- bufferSRVDesc.Buffer.ElementWidth = static_cast<UINT>(mBufferSize) / dxgiFormatInfo.pixelBytes;
- bufferSRVDesc.ViewDimension = D3D11_SRV_DIMENSION_BUFFER;
- bufferSRVDesc.Format = srvFormat;
-
- HRESULT result = device->CreateShaderResourceView(mNativeStorage, &bufferSRVDesc, &bufferSRV);
- ASSERT(SUCCEEDED(result));
- if (FAILED(result))
- {
- return gl::Error(GL_OUT_OF_MEMORY,
- "Error creating buffer SRV in Buffer11::NativeStorage::getSRVForFormat");
- }
-
- mBufferResourceViews[srvFormat] = bufferSRV;
-
- return bufferSRV;
-}
-
-void Buffer11::NativeStorage::clearSRVs()
-{
- for (auto &srv : mBufferResourceViews)
- {
- SafeRelease(srv.second);
- }
- mBufferResourceViews.clear();
-}
-
-// Buffer11::EmulatedIndexStorage implementation
-
Buffer11::EmulatedIndexedStorage::EmulatedIndexedStorage(Renderer11 *renderer)
: BufferStorage(renderer, BUFFER_USAGE_EMULATED_INDEXED_VERTEX), mNativeStorage(nullptr)
{
@@ -1334,7 +1215,7 @@ gl::ErrorOrResult<CopyResult> Buffer11::EmulatedIndexedStorage::copyFromStorage(
size_t size,
size_t destOffset)
{
- ASSERT(source->isMappable(GL_MAP_READ_BIT));
+ ASSERT(source->isMappable());
uint8_t *sourceData = nullptr;
ANGLE_TRY(source->map(sourceOffset, size, GL_MAP_READ_BIT, &sourceData));
ASSERT(destOffset + size <= mMemoryBuffer.size());
@@ -1372,8 +1253,6 @@ void Buffer11::EmulatedIndexedStorage::unmap()
// No-op
}
-// Buffer11::PackStorage implementation
-
Buffer11::PackStorage::PackStorage(Renderer11 *renderer)
: BufferStorage(renderer, BUFFER_USAGE_PIXEL_PACK), mStagingTexture(), mDataModified(false)
{
@@ -1390,8 +1269,9 @@ gl::ErrorOrResult<CopyResult> Buffer11::PackStorage::copyFromStorage(BufferStora
{
ANGLE_TRY(flushQueuedPackCommand());
- // For all use cases of pack buffers, we must copy through a readable buffer.
- ASSERT(source->isMappable(GL_MAP_READ_BIT));
+ // We copy through a staging buffer when drawing with a pack buffer, or for other cases where we
+ // access the pack buffer
+ ASSERT(source->isMappable() && source->getUsage() == BUFFER_USAGE_STAGING);
uint8_t *sourceData = nullptr;
ANGLE_TRY(source->map(sourceOffset, size, GL_MAP_READ_BIT, &sourceData));
ASSERT(destOffset + size <= mMemoryBuffer.size());
@@ -1504,8 +1384,6 @@ gl::Error Buffer11::PackStorage::flushQueuedPackCommand()
return gl::NoError();
}
-// Buffer11::SystemMemoryStorage implementation
-
Buffer11::SystemMemoryStorage::SystemMemoryStorage(Renderer11 *renderer)
: Buffer11::BufferStorage(renderer, BUFFER_USAGE_SYSTEM_MEMORY)
{
@@ -1516,7 +1394,7 @@ gl::ErrorOrResult<CopyResult> Buffer11::SystemMemoryStorage::copyFromStorage(Buf
size_t size,
size_t destOffset)
{
- ASSERT(source->isMappable(GL_MAP_READ_BIT));
+ ASSERT(source->isMappable());
uint8_t *sourceData = nullptr;
ANGLE_TRY(source->map(sourceOffset, size, GL_MAP_READ_BIT, &sourceData));
ASSERT(destOffset + size <= mSystemCopy.size());
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Buffer11.h b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Buffer11.h
index 3210f05bc..6d56501d8 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Buffer11.h
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Buffer11.h
@@ -9,7 +9,6 @@
#ifndef LIBANGLE_RENDERER_D3D_D3D11_BUFFER11_H_
#define LIBANGLE_RENDERER_D3D_D3D11_BUFFER11_H_
-#include <array>
#include <map>
#include "libANGLE/angletypes.h"
@@ -28,16 +27,15 @@ class Renderer11;
struct SourceIndexData;
struct TranslatedAttribute;
-// The order of this enum governs priority of 'getLatestBufferStorage'.
enum BufferUsage
{
- BUFFER_USAGE_SYSTEM_MEMORY,
BUFFER_USAGE_STAGING,
BUFFER_USAGE_VERTEX_OR_TRANSFORM_FEEDBACK,
BUFFER_USAGE_INDEX,
BUFFER_USAGE_PIXEL_UNPACK,
BUFFER_USAGE_PIXEL_PACK,
BUFFER_USAGE_UNIFORM,
+ BUFFER_USAGE_SYSTEM_MEMORY,
BUFFER_USAGE_EMULATED_INDEXED_VERTEX,
BUFFER_USAGE_COUNT,
@@ -48,18 +46,14 @@ typedef size_t DataRevision;
class Buffer11 : public BufferD3D
{
public:
- Buffer11(const gl::BufferState &state, Renderer11 *renderer);
+ Buffer11(Renderer11 *renderer);
virtual ~Buffer11();
gl::ErrorOrResult<ID3D11Buffer *> getBuffer(BufferUsage usage);
gl::ErrorOrResult<ID3D11Buffer *> getEmulatedIndexedBuffer(SourceIndexData *indexInfo,
const TranslatedAttribute &attribute,
GLint startVertex);
- gl::Error getConstantBufferRange(GLintptr offset,
- GLsizeiptr size,
- ID3D11Buffer **bufferOut,
- UINT *firstConstantOut,
- UINT *numConstantsOut);
+ gl::ErrorOrResult<ID3D11Buffer *> getConstantBufferRange(GLintptr offset, GLsizeiptr size);
gl::ErrorOrResult<ID3D11ShaderResourceView *> getSRV(DXGI_FORMAT srvFormat);
bool isMapped() const { return mMappedStorage != nullptr; }
gl::Error packPixels(const gl::FramebufferAttachment &readAttachment,
@@ -74,8 +68,8 @@ class Buffer11 : public BufferD3D
void invalidateStaticData() override;
// BufferImpl implementation
- gl::Error setData(GLenum target, const void *data, size_t size, GLenum usage) override;
- gl::Error setSubData(GLenum target, const void *data, size_t size, size_t offset) override;
+ gl::Error setData(const void *data, size_t size, GLenum usage) override;
+ gl::Error setSubData(const void *data, size_t size, size_t offset) override;
gl::Error copySubData(BufferImpl *source,
GLintptr sourceOffset,
GLintptr destOffset,
@@ -106,8 +100,7 @@ class Buffer11 : public BufferD3D
unsigned int lruCount;
};
- void markBufferUsage(BufferUsage usage);
- gl::Error garbageCollection(BufferUsage currentUsage);
+ gl::Error markBufferUsage();
gl::ErrorOrResult<NativeStorage *> getStagingStorage();
gl::ErrorOrResult<PackStorage *> getPackStorage();
gl::ErrorOrResult<SystemMemoryStorage *> getSystemMemoryStorage();
@@ -120,24 +113,14 @@ class Buffer11 : public BufferD3D
GLsizeiptr size);
BufferStorage *allocateStorage(BufferUsage usage);
- void updateDeallocThreshold(BufferUsage usage);
-
- // Free the storage if we decide it isn't being used very often.
- gl::Error checkForDeallocation(BufferUsage usage);
-
- // For some cases of uniform buffer storage, we can't deallocate system memory storage.
- bool canDeallocateSystemMemory() const;
+ void updateSystemMemoryDeallocThreshold();
Renderer11 *mRenderer;
size_t mSize;
BufferStorage *mMappedStorage;
- std::array<BufferStorage *, BUFFER_USAGE_COUNT> mBufferStorages;
-
- // These two arrays are used to track when to free unused storage.
- std::array<unsigned int, BUFFER_USAGE_COUNT> mDeallocThresholds;
- std::array<unsigned int, BUFFER_USAGE_COUNT> mIdleness;
+ std::vector<BufferStorage *> mBufferStorages;
// Cache of D3D11 constant buffer for specific ranges of buffer data.
// This is used to emulate UBO ranges on 11.0 devices.
@@ -147,6 +130,12 @@ class Buffer11 : public BufferD3D
size_t mConstantBufferStorageAdditionalSize;
unsigned int mMaxConstantBufferLruCount;
+ typedef std::pair<ID3D11Buffer *, ID3D11ShaderResourceView *> BufferSRVPair;
+ std::map<DXGI_FORMAT, BufferSRVPair> mBufferResourceViews;
+
+ unsigned int mReadUsageCount;
+ unsigned int mSystemMemoryDeallocThreshold;
+
angle::BroadcastChannel mStaticBroadcastChannel;
angle::BroadcastChannel mDirectBroadcastChannel;
};
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Clear11.cpp b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Clear11.cpp
index f42a59ced..d2d813895 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Clear11.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Clear11.cpp
@@ -34,40 +34,29 @@ namespace rx
{
template <typename T>
-static void ApplyVertices(const gl::Extents &framebufferSize,
- const gl::Rectangle *scissor,
- const gl::Color<T> &color,
- float depth,
- void *buffer)
+static void ApplyVertices(const gl::Extents &framebufferSize, const gl::Rectangle *scissor, const gl::Color<T> &color, float depth, void *buffer)
{
- d3d11::PositionDepthColorVertex<T> *vertices =
- reinterpret_cast<d3d11::PositionDepthColorVertex<T> *>(buffer);
+ d3d11::PositionDepthColorVertex<T> *vertices = reinterpret_cast<d3d11::PositionDepthColorVertex<T>*>(buffer);
float depthClear = gl::clamp01(depth);
- float left = -1.0f;
- float right = 1.0f;
- float top = -1.0f;
- float bottom = 1.0f;
+ float left = -1.0f;
+ float right = 1.0f;
+ float top = -1.0f;
+ float bottom = 1.0f;
// Clip the quad coordinates to the scissor if needed
if (scissor != nullptr)
{
- left = std::max(left, (scissor->x / float(framebufferSize.width)) * 2.0f - 1.0f);
- right = std::min(
- right, ((scissor->x + scissor->width) / float(framebufferSize.width)) * 2.0f - 1.0f);
- top = std::max(top, ((framebufferSize.height - scissor->y - scissor->height) /
- float(framebufferSize.height)) *
- 2.0f -
- 1.0f);
- bottom = std::min(
- bottom,
- ((framebufferSize.height - scissor->y) / float(framebufferSize.height)) * 2.0f - 1.0f);
+ left = std::max(left, (scissor->x / float(framebufferSize.width)) * 2.0f - 1.0f);
+ right = std::min(right, ((scissor->x + scissor->width) / float(framebufferSize.width)) * 2.0f - 1.0f);
+ top = std::max(top, ((framebufferSize.height - scissor->y - scissor->height) / float(framebufferSize.height)) * 2.0f - 1.0f);
+ bottom = std::min(bottom, ((framebufferSize.height - scissor->y) / float(framebufferSize.height)) * 2.0f - 1.0f);
}
- d3d11::SetPositionDepthColorVertex<T>(vertices + 0, left, bottom, depthClear, color);
- d3d11::SetPositionDepthColorVertex<T>(vertices + 1, left, top, depthClear, color);
+ d3d11::SetPositionDepthColorVertex<T>(vertices + 0, left, bottom, depthClear, color);
+ d3d11::SetPositionDepthColorVertex<T>(vertices + 1, left, top, depthClear, color);
d3d11::SetPositionDepthColorVertex<T>(vertices + 2, right, bottom, depthClear, color);
- d3d11::SetPositionDepthColorVertex<T>(vertices + 3, right, top, depthClear, color);
+ d3d11::SetPositionDepthColorVertex<T>(vertices + 3, right, top, depthClear, color);
}
Clear11::ClearShader::ClearShader(DXGI_FORMAT colorType,
@@ -82,9 +71,10 @@ Clear11::ClearShader::ClearShader(DXGI_FORMAT colorType,
vertexShader(vsByteCode, vsSize, vsDebugName),
pixelShader(psByteCode, psSize, psDebugName)
{
- D3D11_INPUT_ELEMENT_DESC quadLayout[] = {
- {"POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0},
- {"COLOR", 0, colorType, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0},
+ D3D11_INPUT_ELEMENT_DESC quadLayout[] =
+ {
+ { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 },
+ { "COLOR", 0, colorType, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 },
};
inputLayout = new d3d11::LazyInputLayout(quadLayout, 2, vsByteCode, vsSize, inputLayoutName);
@@ -113,11 +103,11 @@ Clear11::Clear11(Renderer11 *renderer)
ID3D11Device *device = renderer->getDevice();
D3D11_BUFFER_DESC vbDesc;
- vbDesc.ByteWidth = sizeof(d3d11::PositionDepthColorVertex<float>) * 4;
- vbDesc.Usage = D3D11_USAGE_DYNAMIC;
- vbDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
- vbDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
- vbDesc.MiscFlags = 0;
+ vbDesc.ByteWidth = sizeof(d3d11::PositionDepthColorVertex<float>) * 4;
+ vbDesc.Usage = D3D11_USAGE_DYNAMIC;
+ vbDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
+ vbDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
+ vbDesc.MiscFlags = 0;
vbDesc.StructureByteStride = 0;
result = device->CreateBuffer(&vbDesc, nullptr, &mVertexBuffer);
@@ -125,15 +115,15 @@ Clear11::Clear11(Renderer11 *renderer)
d3d11::SetDebugName(mVertexBuffer, "Clear11 masked clear vertex buffer");
D3D11_RASTERIZER_DESC rsDesc;
- rsDesc.FillMode = D3D11_FILL_SOLID;
- rsDesc.CullMode = D3D11_CULL_NONE;
+ rsDesc.FillMode = D3D11_FILL_SOLID;
+ rsDesc.CullMode = D3D11_CULL_NONE;
rsDesc.FrontCounterClockwise = FALSE;
- rsDesc.DepthBias = 0;
- rsDesc.DepthBiasClamp = 0.0f;
- rsDesc.SlopeScaledDepthBias = 0.0f;
- rsDesc.DepthClipEnable = TRUE;
- rsDesc.ScissorEnable = FALSE;
- rsDesc.MultisampleEnable = FALSE;
+ rsDesc.DepthBias = 0;
+ rsDesc.DepthBiasClamp = 0.0f;
+ rsDesc.SlopeScaledDepthBias = 0.0f;
+ rsDesc.DepthClipEnable = TRUE;
+ rsDesc.ScissorEnable = FALSE;
+ rsDesc.MultisampleEnable = FALSE;
rsDesc.AntialiasedLineEnable = FALSE;
result = device->CreateRasterizerState(&rsDesc, &mRasterizerState);
@@ -142,36 +132,51 @@ Clear11::Clear11(Renderer11 *renderer)
if (mRenderer->getRenderer11DeviceCaps().featureLevel <= D3D_FEATURE_LEVEL_9_3)
{
- mFloatClearShader =
- new ClearShader(DXGI_FORMAT_R32G32B32A32_FLOAT, "Clear11 Float IL", g_VS_ClearFloat,
- ArraySize(g_VS_ClearFloat), "Clear11 Float VS", g_PS_ClearFloat_FL9,
- ArraySize(g_PS_ClearFloat_FL9), "Clear11 Float PS");
+ mFloatClearShader = new ClearShader(DXGI_FORMAT_R32G32B32A32_FLOAT,
+ "Clear11 Float IL",
+ g_VS_ClearFloat,
+ ArraySize(g_VS_ClearFloat),
+ "Clear11 Float VS",
+ g_PS_ClearFloat_FL9,
+ ArraySize(g_PS_ClearFloat_FL9),
+ "Clear11 Float PS");
}
else
{
- mFloatClearShader =
- new ClearShader(DXGI_FORMAT_R32G32B32A32_FLOAT, "Clear11 Float IL", g_VS_ClearFloat,
- ArraySize(g_VS_ClearFloat), "Clear11 Float VS", g_PS_ClearFloat,
- ArraySize(g_PS_ClearFloat), "Clear11 Float PS");
+ mFloatClearShader = new ClearShader(DXGI_FORMAT_R32G32B32A32_FLOAT,
+ "Clear11 Float IL",
+ g_VS_ClearFloat,
+ ArraySize(g_VS_ClearFloat),
+ "Clear11 Float VS",
+ g_PS_ClearFloat,
+ ArraySize(g_PS_ClearFloat),
+ "Clear11 Float PS");
}
if (renderer->isES3Capable())
{
- mUintClearShader =
- new ClearShader(DXGI_FORMAT_R32G32B32A32_UINT, "Clear11 UINT IL", g_VS_ClearUint,
- ArraySize(g_VS_ClearUint), "Clear11 UINT VS", g_PS_ClearUint,
- ArraySize(g_PS_ClearUint), "Clear11 UINT PS");
- mIntClearShader =
- new ClearShader(DXGI_FORMAT_R32G32B32A32_UINT, "Clear11 SINT IL", g_VS_ClearSint,
- ArraySize(g_VS_ClearSint), "Clear11 SINT VS", g_PS_ClearSint,
- ArraySize(g_PS_ClearSint), "Clear11 SINT PS");
+ mUintClearShader = new ClearShader(DXGI_FORMAT_R32G32B32A32_UINT,
+ "Clear11 UINT IL",
+ g_VS_ClearUint,
+ ArraySize(g_VS_ClearUint),
+ "Clear11 UINT VS",
+ g_PS_ClearUint,
+ ArraySize(g_PS_ClearUint),
+ "Clear11 UINT PS");
+ mIntClearShader = new ClearShader(DXGI_FORMAT_R32G32B32A32_UINT,
+ "Clear11 SINT IL",
+ g_VS_ClearSint,
+ ArraySize(g_VS_ClearSint),
+ "Clear11 SINT VS",
+ g_PS_ClearSint,
+ ArraySize(g_PS_ClearSint),
+ "Clear11 SINT PS");
}
}
Clear11::~Clear11()
{
- for (ClearBlendStateMap::iterator i = mClearBlendStates.begin(); i != mClearBlendStates.end();
- i++)
+ for (ClearBlendStateMap::iterator i = mClearBlendStates.begin(); i != mClearBlendStates.end(); i++)
{
SafeRelease(i->second);
}
@@ -181,8 +186,7 @@ Clear11::~Clear11()
SafeDelete(mUintClearShader);
SafeDelete(mIntClearShader);
- for (ClearDepthStencilStateMap::iterator i = mClearDepthStencilStates.begin();
- i != mClearDepthStencilStates.end(); i++)
+ for (ClearDepthStencilStateMap::iterator i = mClearDepthStencilStates.begin(); i != mClearDepthStencilStates.end(); i++)
{
SafeRelease(i->second);
}
@@ -195,9 +199,9 @@ Clear11::~Clear11()
gl::Error Clear11::clearFramebuffer(const ClearParameters &clearParams,
const gl::FramebufferState &fboData)
{
- const auto &colorAttachments = fboData.getColorAttachments();
- const auto &drawBufferStates = fboData.getDrawBufferStates();
- const auto *depthAttachment = fboData.getDepthAttachment();
+ const auto &colorAttachments = fboData.getColorAttachments();
+ const auto &drawBufferStates = fboData.getDrawBufferStates();
+ const auto *depthAttachment = fboData.getDepthAttachment();
const auto *stencilAttachment = fboData.getStencilAttachment();
ASSERT(colorAttachments.size() == drawBufferStates.size());
@@ -205,24 +209,20 @@ gl::Error Clear11::clearFramebuffer(const ClearParameters &clearParams,
// Iterate over the color buffers which require clearing and determine if they can be
// cleared with ID3D11DeviceContext::ClearRenderTargetView or ID3D11DeviceContext1::ClearView.
// This requires:
- // 1) The render target is being cleared to a float value (will be cast to integer when clearing
- // integer
+ // 1) The render target is being cleared to a float value (will be cast to integer when clearing integer
// render targets as expected but does not work the other way around)
// 2) The format of the render target has no color channels that are currently masked out.
- // Clear the easy-to-clear buffers on the spot and accumulate the ones that require special
- // work.
+ // Clear the easy-to-clear buffers on the spot and accumulate the ones that require special work.
//
// If these conditions are met, and:
// - No scissored clear is needed, then clear using ID3D11DeviceContext::ClearRenderTargetView.
// - A scissored clear is needed then clear using ID3D11DeviceContext1::ClearView if available.
// Otherwise draw a quad.
//
- // Also determine if the depth stencil can be cleared with
- // ID3D11DeviceContext::ClearDepthStencilView
+ // Also determine if the depth stencil can be cleared with ID3D11DeviceContext::ClearDepthStencilView
// by checking if the stencil write mask covers the entire stencil.
//
- // To clear the remaining buffers, quads must be drawn containing an int, uint or float vertex
- // color
+ // To clear the remaining buffers, quads must be drawn containing an int, uint or float vertex color
// attribute.
gl::Extents framebufferSize;
@@ -246,7 +246,7 @@ gl::Error Clear11::clearFramebuffer(const ClearParameters &clearParams,
return gl::Error(GL_INVALID_OPERATION);
}
- if (clearParams.scissorEnabled && (clearParams.scissor.x >= framebufferSize.width ||
+ if (clearParams.scissorEnabled && (clearParams.scissor.x >= framebufferSize.width ||
clearParams.scissor.y >= framebufferSize.height ||
clearParams.scissor.x + clearParams.scissor.width <= 0 ||
clearParams.scissor.y + clearParams.scissor.height <= 0))
@@ -255,18 +255,16 @@ gl::Error Clear11::clearFramebuffer(const ClearParameters &clearParams,
return gl::Error(GL_NO_ERROR);
}
- bool needScissoredClear =
- clearParams.scissorEnabled &&
- (clearParams.scissor.x > 0 || clearParams.scissor.y > 0 ||
- clearParams.scissor.x + clearParams.scissor.width < framebufferSize.width ||
- clearParams.scissor.y + clearParams.scissor.height < framebufferSize.height);
+ bool needScissoredClear = clearParams.scissorEnabled && (clearParams.scissor.x > 0 || clearParams.scissor.y > 0 ||
+ clearParams.scissor.x + clearParams.scissor.width < framebufferSize.width ||
+ clearParams.scissor.y + clearParams.scissor.height < framebufferSize.height);
std::vector<MaskedRenderTarget> maskedClearRenderTargets;
- RenderTarget11 *maskedClearDepthStencil = nullptr;
+ RenderTarget11* maskedClearDepthStencil = nullptr;
- ID3D11DeviceContext *deviceContext = mRenderer->getDeviceContext();
+ ID3D11DeviceContext *deviceContext = mRenderer->getDeviceContext();
ID3D11DeviceContext1 *deviceContext1 = mRenderer->getDeviceContext1IfSupported();
- ID3D11Device *device = mRenderer->getDevice();
+ ID3D11Device *device = mRenderer->getDevice();
for (size_t colorAttachmentIndex = 0; colorAttachmentIndex < colorAttachments.size();
colorAttachmentIndex++)
@@ -277,7 +275,11 @@ gl::Error Clear11::clearFramebuffer(const ClearParameters &clearParams,
drawBufferStates[colorAttachmentIndex] != GL_NONE)
{
RenderTarget11 *renderTarget = nullptr;
- ANGLE_TRY(attachment.getRenderTarget(&renderTarget));
+ gl::Error error = attachment.getRenderTarget(&renderTarget);
+ if (error.isError())
+ {
+ return error;
+ }
const gl::InternalFormat &formatInfo = *attachment.getFormat().info;
@@ -309,8 +311,7 @@ gl::Error Clear11::clearFramebuffer(const ClearParameters &clearParams,
(formatInfo.blueBits > 0 && !clearParams.colorMaskBlue) ||
(formatInfo.alphaBits > 0 && !clearParams.colorMaskAlpha))
{
- // A masked clear is required, or a scissored clear is required and
- // ID3D11DeviceContext1::ClearView is unavailable
+ // A masked clear is required, or a scissored clear is required and ID3D11DeviceContext1::ClearView is unavailable
MaskedRenderTarget maskAndRt;
bool clearColor = clearParams.clearColor[colorAttachmentIndex];
maskAndRt.colorMask[0] = (clearColor && clearParams.colorMaskRed);
@@ -322,40 +323,39 @@ gl::Error Clear11::clearFramebuffer(const ClearParameters &clearParams,
}
else
{
- // ID3D11DeviceContext::ClearRenderTargetView or ID3D11DeviceContext1::ClearView is
- // possible
+ // ID3D11DeviceContext::ClearRenderTargetView or ID3D11DeviceContext1::ClearView is possible
ID3D11RenderTargetView *framebufferRTV = renderTarget->getRenderTargetView();
if (!framebufferRTV)
{
- return gl::Error(GL_OUT_OF_MEMORY,
- "Internal render target view pointer unexpectedly null.");
+ return gl::Error(GL_OUT_OF_MEMORY, "Internal render target view pointer unexpectedly null.");
}
- const auto &nativeFormat = renderTarget->getFormatSet().format();
+ const auto &dxgiFormatInfo =
+ d3d11::GetDXGIFormatInfo(renderTarget->getFormatSet().rtvFormat);
- // Check if the actual format has a channel that the internal format does not and
- // set them to the default values
+ // Check if the actual format has a channel that the internal format does not and set them to the
+ // default values
float clearValues[4] = {
- ((formatInfo.redBits == 0 && nativeFormat.redBits > 0)
+ ((formatInfo.redBits == 0 && dxgiFormatInfo.redBits > 0)
? 0.0f
: clearParams.colorFClearValue.red),
- ((formatInfo.greenBits == 0 && nativeFormat.greenBits > 0)
+ ((formatInfo.greenBits == 0 && dxgiFormatInfo.greenBits > 0)
? 0.0f
: clearParams.colorFClearValue.green),
- ((formatInfo.blueBits == 0 && nativeFormat.blueBits > 0)
+ ((formatInfo.blueBits == 0 && dxgiFormatInfo.blueBits > 0)
? 0.0f
: clearParams.colorFClearValue.blue),
- ((formatInfo.alphaBits == 0 && nativeFormat.alphaBits > 0)
+ ((formatInfo.alphaBits == 0 && dxgiFormatInfo.alphaBits > 0)
? 1.0f
: clearParams.colorFClearValue.alpha),
};
- if (formatInfo.alphaBits == 1)
+ if (dxgiFormatInfo.alphaBits == 1)
{
- // Some drivers do not correctly handle calling Clear() on a format with 1-bit
- // alpha. They can incorrectly round all non-zero values up to 1.0f. Note that
- // WARP does not do this. We should handle the rounding for them instead.
+ // Some drivers do not correctly handle calling Clear() on a format with 1-bit alpha.
+ // They can incorrectly round all non-zero values up to 1.0f. Note that WARP does not do this.
+ // We should handle the rounding for them instead.
clearValues[3] = (clearParams.colorFClearValue.alpha >= 0.5f) ? 1.0f : 0.0f;
}
@@ -365,26 +365,16 @@ gl::Error Clear11::clearFramebuffer(const ClearParameters &clearParams,
ASSERT(deviceContext1);
D3D11_RECT rect;
- rect.left = clearParams.scissor.x;
- rect.right = clearParams.scissor.x + clearParams.scissor.width;
- rect.top = clearParams.scissor.y;
+ rect.left = clearParams.scissor.x;
+ rect.right = clearParams.scissor.x + clearParams.scissor.width;
+ rect.top = clearParams.scissor.y;
rect.bottom = clearParams.scissor.y + clearParams.scissor.height;
deviceContext1->ClearView(framebufferRTV, clearValues, &rect, 1);
-
- if (mRenderer->getWorkarounds().callClearTwice)
- {
- deviceContext1->ClearView(framebufferRTV, clearValues, &rect, 1);
- }
}
else
{
deviceContext->ClearRenderTargetView(framebufferRTV, clearValues);
-
- if (mRenderer->getWorkarounds().callClearTwice)
- {
- deviceContext->ClearRenderTargetView(framebufferRTV, clearValues);
- }
}
}
}
@@ -392,20 +382,21 @@ gl::Error Clear11::clearFramebuffer(const ClearParameters &clearParams,
if (clearParams.clearDepth || clearParams.clearStencil)
{
- const gl::FramebufferAttachment *attachment =
- (depthAttachment != nullptr) ? depthAttachment : stencilAttachment;
+ const gl::FramebufferAttachment *attachment = (depthAttachment != nullptr) ? depthAttachment : stencilAttachment;
ASSERT(attachment != nullptr);
RenderTarget11 *renderTarget = nullptr;
- ANGLE_TRY(attachment->getRenderTarget(&renderTarget));
+ gl::Error error = attachment->getRenderTarget(&renderTarget);
+ if (error.isError())
+ {
+ return error;
+ }
- const auto &nativeFormat = renderTarget->getFormatSet().format();
+ const auto &dxgiFormatInfo =
+ d3d11::GetDXGIFormatInfo(renderTarget->getFormatSet().dsvFormat);
- unsigned int stencilUnmasked =
- (stencilAttachment != nullptr) ? (1 << nativeFormat.stencilBits) - 1 : 0;
- bool needMaskedStencilClear =
- clearParams.clearStencil &&
- (clearParams.stencilWriteMask & stencilUnmasked) != stencilUnmasked;
+ unsigned int stencilUnmasked = (stencilAttachment != nullptr) ? (1 << dxgiFormatInfo.stencilBits) - 1 : 0;
+ bool needMaskedStencilClear = clearParams.clearStencil && (clearParams.stencilWriteMask & stencilUnmasked) != stencilUnmasked;
if (needScissoredClear || needMaskedStencilClear)
{
@@ -416,156 +407,144 @@ gl::Error Clear11::clearFramebuffer(const ClearParameters &clearParams,
ID3D11DepthStencilView *framebufferDSV = renderTarget->getDepthStencilView();
if (!framebufferDSV)
{
- return gl::Error(GL_OUT_OF_MEMORY,
- "Internal depth stencil view pointer unexpectedly null.");
+ return gl::Error(GL_OUT_OF_MEMORY, "Internal depth stencil view pointer unexpectedly null.");
}
- UINT clearFlags = (clearParams.clearDepth ? D3D11_CLEAR_DEPTH : 0) |
- (clearParams.clearStencil ? D3D11_CLEAR_STENCIL : 0);
- FLOAT depthClear = gl::clamp01(clearParams.depthClearValue);
+ UINT clearFlags = (clearParams.clearDepth ? D3D11_CLEAR_DEPTH : 0) |
+ (clearParams.clearStencil ? D3D11_CLEAR_STENCIL : 0);
+ FLOAT depthClear = gl::clamp01(clearParams.depthClearValue);
UINT8 stencilClear = clearParams.stencilClearValue & 0xFF;
- deviceContext->ClearDepthStencilView(framebufferDSV, clearFlags, depthClear,
- stencilClear);
+ deviceContext->ClearDepthStencilView(framebufferDSV, clearFlags, depthClear, stencilClear);
}
}
- if (maskedClearRenderTargets.empty() && !maskedClearDepthStencil)
+ if (maskedClearRenderTargets.size() > 0 || maskedClearDepthStencil)
{
- return gl::NoError();
- }
+ // To clear the render targets and depth stencil in one pass:
+ //
+ // Render a quad clipped to the scissor rectangle which draws the clear color and a blend
+ // state that will perform the required color masking.
+ //
+ // The quad's depth is equal to the depth clear value with a depth stencil state that
+ // will enable or disable depth test/writes if the depth buffer should be cleared or not.
+ //
+ // The rasterizer state's stencil is set to always pass or fail based on if the stencil
+ // should be cleared or not with a stencil write mask of the stencil clear value.
+ //
+ // ======================================================================================
+ //
+ // Luckily, the gl spec (ES 3.0.2 pg 183) states that the results of clearing a render-
+ // buffer that is not normalized fixed point or floating point with floating point values
+ // are undefined so we can just write floats to them and D3D11 will bit cast them to
+ // integers.
+ //
+ // Also, we don't have to worry about attempting to clear a normalized fixed/floating point
+ // buffer with integer values because there is no gl API call which would allow it,
+ // glClearBuffer* calls only clear a single renderbuffer at a time which is verified to
+ // be a compatible clear type.
+
+ // Bind all the render targets which need clearing
+ ASSERT(maskedClearRenderTargets.size() <= mRenderer->getNativeCaps().maxDrawBuffers);
+ std::vector<ID3D11RenderTargetView*> rtvs(maskedClearRenderTargets.size());
+ for (unsigned int i = 0; i < maskedClearRenderTargets.size(); i++)
+ {
+ RenderTarget11 *renderTarget = maskedClearRenderTargets[i].renderTarget;
+ ID3D11RenderTargetView *rtv = renderTarget->getRenderTargetView();
+ if (!rtv)
+ {
+ return gl::Error(GL_OUT_OF_MEMORY, "Internal render target view pointer unexpectedly null.");
+ }
- // To clear the render targets and depth stencil in one pass:
- //
- // Render a quad clipped to the scissor rectangle which draws the clear color and a blend
- // state that will perform the required color masking.
- //
- // The quad's depth is equal to the depth clear value with a depth stencil state that
- // will enable or disable depth test/writes if the depth buffer should be cleared or not.
- //
- // The rasterizer state's stencil is set to always pass or fail based on if the stencil
- // should be cleared or not with a stencil write mask of the stencil clear value.
- //
- // ======================================================================================
- //
- // Luckily, the gl spec (ES 3.0.2 pg 183) states that the results of clearing a render-
- // buffer that is not normalized fixed point or floating point with floating point values
- // are undefined so we can just write floats to them and D3D11 will bit cast them to
- // integers.
- //
- // Also, we don't have to worry about attempting to clear a normalized fixed/floating point
- // buffer with integer values because there is no gl API call which would allow it,
- // glClearBuffer* calls only clear a single renderbuffer at a time which is verified to
- // be a compatible clear type.
-
- // Bind all the render targets which need clearing
- ASSERT(maskedClearRenderTargets.size() <= mRenderer->getNativeCaps().maxDrawBuffers);
- std::vector<ID3D11RenderTargetView *> rtvs(maskedClearRenderTargets.size());
- for (unsigned int i = 0; i < maskedClearRenderTargets.size(); i++)
- {
- RenderTarget11 *renderTarget = maskedClearRenderTargets[i].renderTarget;
- ID3D11RenderTargetView *rtv = renderTarget->getRenderTargetView();
- if (!rtv)
+ rtvs[i] = rtv;
+ }
+ ID3D11DepthStencilView *dsv = maskedClearDepthStencil ? maskedClearDepthStencil->getDepthStencilView() : nullptr;
+
+ ID3D11BlendState *blendState = getBlendState(maskedClearRenderTargets);
+ const FLOAT blendFactors[4] = { 1.0f, 1.0f, 1.0f, 1.0f };
+ const UINT sampleMask = 0xFFFFFFFF;
+
+ ID3D11DepthStencilState *dsState = getDepthStencilState(clearParams);
+ const UINT stencilClear = clearParams.stencilClearValue & 0xFF;
+
+ // Set the vertices
+ UINT vertexStride = 0;
+ const UINT startIdx = 0;
+ ClearShader *shader = nullptr;
+ D3D11_MAPPED_SUBRESOURCE mappedResource;
+ HRESULT result = deviceContext->Map(mVertexBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource);
+ if (FAILED(result))
{
- return gl::Error(GL_OUT_OF_MEMORY,
- "Internal render target view pointer unexpectedly null.");
+ return gl::Error(GL_OUT_OF_MEMORY, "Failed to map internal masked clear vertex buffer, HRESULT: 0x%X.", result);
}
- rtvs[i] = rtv;
- }
- ID3D11DepthStencilView *dsv =
- maskedClearDepthStencil ? maskedClearDepthStencil->getDepthStencilView() : nullptr;
-
- ID3D11BlendState *blendState = getBlendState(maskedClearRenderTargets);
- const FLOAT blendFactors[4] = {1.0f, 1.0f, 1.0f, 1.0f};
- const UINT sampleMask = 0xFFFFFFFF;
-
- ID3D11DepthStencilState *dsState = getDepthStencilState(clearParams);
- const UINT stencilClear = clearParams.stencilClearValue & 0xFF;
-
- // Set the vertices
- UINT vertexStride = 0;
- const UINT startIdx = 0;
- ClearShader *shader = nullptr;
- D3D11_MAPPED_SUBRESOURCE mappedResource;
- HRESULT result =
- deviceContext->Map(mVertexBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource);
- if (FAILED(result))
- {
- return gl::Error(GL_OUT_OF_MEMORY,
- "Failed to map internal masked clear vertex buffer, HRESULT: 0x%X.",
- result);
- }
-
- const gl::Rectangle *scissorPtr = clearParams.scissorEnabled ? &clearParams.scissor : nullptr;
- switch (clearParams.colorClearType)
- {
- case GL_FLOAT:
- ApplyVertices(framebufferSize, scissorPtr, clearParams.colorFClearValue,
- clearParams.depthClearValue, mappedResource.pData);
+ const gl::Rectangle *scissorPtr = clearParams.scissorEnabled ? &clearParams.scissor : nullptr;
+ switch (clearParams.colorClearType)
+ {
+ case GL_FLOAT:
+ ApplyVertices(framebufferSize, scissorPtr, clearParams.colorFClearValue, clearParams.depthClearValue, mappedResource.pData);
vertexStride = sizeof(d3d11::PositionDepthColorVertex<float>);
- shader = mFloatClearShader;
+ shader = mFloatClearShader;
break;
- case GL_UNSIGNED_INT:
- ApplyVertices(framebufferSize, scissorPtr, clearParams.colorUIClearValue,
- clearParams.depthClearValue, mappedResource.pData);
+ case GL_UNSIGNED_INT:
+ ApplyVertices(framebufferSize, scissorPtr, clearParams.colorUIClearValue, clearParams.depthClearValue, mappedResource.pData);
vertexStride = sizeof(d3d11::PositionDepthColorVertex<unsigned int>);
- shader = mUintClearShader;
+ shader = mUintClearShader;
break;
- case GL_INT:
- ApplyVertices(framebufferSize, scissorPtr, clearParams.colorIClearValue,
- clearParams.depthClearValue, mappedResource.pData);
+ case GL_INT:
+ ApplyVertices(framebufferSize, scissorPtr, clearParams.colorIClearValue, clearParams.depthClearValue, mappedResource.pData);
vertexStride = sizeof(d3d11::PositionDepthColorVertex<int>);
- shader = mIntClearShader;
+ shader = mIntClearShader;
break;
- default:
+ default:
UNREACHABLE();
break;
- }
-
- deviceContext->Unmap(mVertexBuffer, 0);
-
- // Set the viewport to be the same size as the framebuffer
- D3D11_VIEWPORT viewport;
- viewport.TopLeftX = 0;
- viewport.TopLeftY = 0;
- viewport.Width = static_cast<FLOAT>(framebufferSize.width);
- viewport.Height = static_cast<FLOAT>(framebufferSize.height);
- viewport.MinDepth = 0;
- viewport.MaxDepth = 1;
- deviceContext->RSSetViewports(1, &viewport);
-
- // Apply state
- deviceContext->OMSetBlendState(blendState, blendFactors, sampleMask);
- deviceContext->OMSetDepthStencilState(dsState, stencilClear);
- deviceContext->RSSetState(mRasterizerState);
-
- // Apply shaders
- deviceContext->IASetInputLayout(shader->inputLayout->resolve(device));
- deviceContext->VSSetShader(shader->vertexShader.resolve(device), nullptr, 0);
- deviceContext->PSSetShader(shader->pixelShader.resolve(device), nullptr, 0);
- deviceContext->GSSetShader(nullptr, nullptr, 0);
-
- // Apply vertex buffer
- deviceContext->IASetVertexBuffers(0, 1, &mVertexBuffer, &vertexStride, &startIdx);
- deviceContext->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
-
- // Apply render targets
- mRenderer->getStateManager()->setOneTimeRenderTargets(rtvs, dsv);
-
- // Draw the clear quad
- deviceContext->Draw(4, 0);
+ }
- // Clean up
- mRenderer->markAllStateDirty();
+ deviceContext->Unmap(mVertexBuffer, 0);
+
+ // Set the viewport to be the same size as the framebuffer
+ D3D11_VIEWPORT viewport;
+ viewport.TopLeftX = 0;
+ viewport.TopLeftY = 0;
+ viewport.Width = static_cast<FLOAT>(framebufferSize.width);
+ viewport.Height = static_cast<FLOAT>(framebufferSize.height);
+ viewport.MinDepth = 0;
+ viewport.MaxDepth = 1;
+ deviceContext->RSSetViewports(1, &viewport);
+
+ // Apply state
+ deviceContext->OMSetBlendState(blendState, blendFactors, sampleMask);
+ deviceContext->OMSetDepthStencilState(dsState, stencilClear);
+ deviceContext->RSSetState(mRasterizerState);
+
+ // Apply shaders
+ deviceContext->IASetInputLayout(shader->inputLayout->resolve(device));
+ deviceContext->VSSetShader(shader->vertexShader.resolve(device), nullptr, 0);
+ deviceContext->PSSetShader(shader->pixelShader.resolve(device), nullptr, 0);
+ deviceContext->GSSetShader(nullptr, nullptr, 0);
+
+ // Apply vertex buffer
+ deviceContext->IASetVertexBuffers(0, 1, &mVertexBuffer, &vertexStride, &startIdx);
+ deviceContext->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
+
+ // Apply render targets
+ mRenderer->getStateManager()->setOneTimeRenderTargets(rtvs, dsv);
+
+ // Draw the clear quad
+ deviceContext->Draw(4, 0);
+
+ // Clean up
+ mRenderer->markAllStateDirty();
+ }
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
-ID3D11BlendState *Clear11::getBlendState(const std::vector<MaskedRenderTarget> &rts)
+ID3D11BlendState *Clear11::getBlendState(const std::vector<MaskedRenderTarget>& rts)
{
ClearBlendInfo blendKey = {};
for (unsigned int i = 0; i < D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT; i++)
@@ -573,12 +552,11 @@ ID3D11BlendState *Clear11::getBlendState(const std::vector<MaskedRenderTarget> &
if (i < rts.size())
{
RenderTarget11 *rt = rts[i].renderTarget;
- const gl::InternalFormat &formatInfo =
- gl::GetInternalFormatInfo(rt->getInternalFormat());
+ const gl::InternalFormat &formatInfo = gl::GetInternalFormatInfo(rt->getInternalFormat());
- blendKey.maskChannels[i][0] = (rts[i].colorMask[0] && formatInfo.redBits > 0);
+ blendKey.maskChannels[i][0] = (rts[i].colorMask[0] && formatInfo.redBits > 0);
blendKey.maskChannels[i][1] = (rts[i].colorMask[1] && formatInfo.greenBits > 0);
- blendKey.maskChannels[i][2] = (rts[i].colorMask[2] && formatInfo.blueBits > 0);
+ blendKey.maskChannels[i][2] = (rts[i].colorMask[2] && formatInfo.blueBits > 0);
blendKey.maskChannels[i][3] = (rts[i].colorMask[3] && formatInfo.alphaBits > 0);
}
else
@@ -597,21 +575,22 @@ ID3D11BlendState *Clear11::getBlendState(const std::vector<MaskedRenderTarget> &
}
else
{
- D3D11_BLEND_DESC blendDesc = {0};
- blendDesc.AlphaToCoverageEnable = FALSE;
+ D3D11_BLEND_DESC blendDesc = { 0 };
+ blendDesc.AlphaToCoverageEnable = FALSE;
blendDesc.IndependentBlendEnable = (rts.size() > 1) ? TRUE : FALSE;
for (unsigned int j = 0; j < D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT; j++)
{
- blendDesc.RenderTarget[j].BlendEnable = FALSE;
- blendDesc.RenderTarget[j].RenderTargetWriteMask = gl_d3d11::ConvertColorMask(
- blendKey.maskChannels[j][0], blendKey.maskChannels[j][1],
- blendKey.maskChannels[j][2], blendKey.maskChannels[j][3]);
+ blendDesc.RenderTarget[j].BlendEnable = FALSE;
+ blendDesc.RenderTarget[j].RenderTargetWriteMask = gl_d3d11::ConvertColorMask(blendKey.maskChannels[j][0],
+ blendKey.maskChannels[j][1],
+ blendKey.maskChannels[j][2],
+ blendKey.maskChannels[j][3]);
}
- ID3D11Device *device = mRenderer->getDevice();
- ID3D11BlendState *blendState = nullptr;
- HRESULT result = device->CreateBlendState(&blendDesc, &blendState);
+ ID3D11Device *device = mRenderer->getDevice();
+ ID3D11BlendState* blendState = nullptr;
+ HRESULT result = device->CreateBlendState(&blendDesc, &blendState);
if (FAILED(result) || !blendState)
{
ERR("Unable to create a ID3D11BlendState, HRESULT: 0x%X.", result);
@@ -626,10 +605,10 @@ ID3D11BlendState *Clear11::getBlendState(const std::vector<MaskedRenderTarget> &
ID3D11DepthStencilState *Clear11::getDepthStencilState(const ClearParameters &clearParams)
{
- ClearDepthStencilInfo dsKey = {0};
- dsKey.clearDepth = clearParams.clearDepth;
- dsKey.clearStencil = clearParams.clearStencil;
- dsKey.stencilWriteMask = clearParams.stencilWriteMask & 0xFF;
+ ClearDepthStencilInfo dsKey = { 0 };
+ dsKey.clearDepth = clearParams.clearDepth;
+ dsKey.clearStencil = clearParams.clearStencil;
+ dsKey.stencilWriteMask = clearParams.stencilWriteMask & 0xFF;
ClearDepthStencilStateMap::const_iterator i = mClearDepthStencilStates.find(dsKey);
if (i != mClearDepthStencilStates.end())
@@ -638,26 +617,25 @@ ID3D11DepthStencilState *Clear11::getDepthStencilState(const ClearParameters &cl
}
else
{
- D3D11_DEPTH_STENCIL_DESC dsDesc = {0};
- dsDesc.DepthEnable = dsKey.clearDepth ? TRUE : FALSE;
- dsDesc.DepthWriteMask =
- dsKey.clearDepth ? D3D11_DEPTH_WRITE_MASK_ALL : D3D11_DEPTH_WRITE_MASK_ZERO;
- dsDesc.DepthFunc = D3D11_COMPARISON_ALWAYS;
- dsDesc.StencilEnable = dsKey.clearStencil ? TRUE : FALSE;
- dsDesc.StencilReadMask = 0;
- dsDesc.StencilWriteMask = dsKey.stencilWriteMask;
- dsDesc.FrontFace.StencilFailOp = D3D11_STENCIL_OP_REPLACE;
+ D3D11_DEPTH_STENCIL_DESC dsDesc = { 0 };
+ dsDesc.DepthEnable = dsKey.clearDepth ? TRUE : FALSE;
+ dsDesc.DepthWriteMask = dsKey.clearDepth ? D3D11_DEPTH_WRITE_MASK_ALL : D3D11_DEPTH_WRITE_MASK_ZERO;
+ dsDesc.DepthFunc = D3D11_COMPARISON_ALWAYS;
+ dsDesc.StencilEnable = dsKey.clearStencil ? TRUE : FALSE;
+ dsDesc.StencilReadMask = 0;
+ dsDesc.StencilWriteMask = dsKey.stencilWriteMask;
+ dsDesc.FrontFace.StencilFailOp = D3D11_STENCIL_OP_REPLACE;
dsDesc.FrontFace.StencilDepthFailOp = D3D11_STENCIL_OP_REPLACE;
- dsDesc.FrontFace.StencilPassOp = D3D11_STENCIL_OP_REPLACE;
- dsDesc.FrontFace.StencilFunc = D3D11_COMPARISON_ALWAYS;
- dsDesc.BackFace.StencilFailOp = D3D11_STENCIL_OP_REPLACE;
- dsDesc.BackFace.StencilDepthFailOp = D3D11_STENCIL_OP_REPLACE;
- dsDesc.BackFace.StencilPassOp = D3D11_STENCIL_OP_REPLACE;
- dsDesc.BackFace.StencilFunc = D3D11_COMPARISON_ALWAYS;
-
- ID3D11Device *device = mRenderer->getDevice();
- ID3D11DepthStencilState *dsState = nullptr;
- HRESULT result = device->CreateDepthStencilState(&dsDesc, &dsState);
+ dsDesc.FrontFace.StencilPassOp = D3D11_STENCIL_OP_REPLACE;
+ dsDesc.FrontFace.StencilFunc = D3D11_COMPARISON_ALWAYS;
+ dsDesc.BackFace.StencilFailOp = D3D11_STENCIL_OP_REPLACE;
+ dsDesc.BackFace.StencilDepthFailOp = D3D11_STENCIL_OP_REPLACE;
+ dsDesc.BackFace.StencilPassOp = D3D11_STENCIL_OP_REPLACE;
+ dsDesc.BackFace.StencilFunc = D3D11_COMPARISON_ALWAYS;
+
+ ID3D11Device *device = mRenderer->getDevice();
+ ID3D11DepthStencilState* dsState = nullptr;
+ HRESULT result = device->CreateDepthStencilState(&dsDesc, &dsState);
if (FAILED(result) || !dsState)
{
ERR("Unable to create a ID3D11DepthStencilState, HRESULT: 0x%X.", result);
@@ -669,4 +647,5 @@ ID3D11DepthStencilState *Clear11::getDepthStencilState(const ClearParameters &cl
return dsState;
}
}
+
}
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Context11.cpp b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Context11.cpp
index 05da453f0..304bbe8cb 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Context11.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Context11.cpp
@@ -94,9 +94,9 @@ RenderbufferImpl *Context11::createRenderbuffer()
return new RenderbufferD3D(mRenderer);
}
-BufferImpl *Context11::createBuffer(const gl::BufferState &state)
+BufferImpl *Context11::createBuffer()
{
- Buffer11 *buffer = new Buffer11(state, mRenderer);
+ Buffer11 *buffer = new Buffer11(mRenderer);
mRenderer->onBufferCreate(buffer);
return buffer;
}
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Context11.h b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Context11.h
index e36a6e978..debf2f9be 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Context11.h
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Context11.h
@@ -39,7 +39,7 @@ class Context11 : public ContextImpl
RenderbufferImpl *createRenderbuffer() override;
// Buffer creation
- BufferImpl *createBuffer(const gl::BufferState &state) override;
+ BufferImpl *createBuffer() override;
// Vertex Array creation
VertexArrayImpl *createVertexArray(const gl::VertexArrayState &data) override;
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Fence11.cpp b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Fence11.cpp
index 1f0eedb6e..fb3a18336 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Fence11.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Fence11.cpp
@@ -4,8 +4,7 @@
// found in the LICENSE file.
//
-// Fence11.cpp: Defines the rx::FenceNV11 and rx::FenceSync11 classes which implement
-// rx::FenceNVImpl and rx::FenceSyncImpl.
+// Fence11.cpp: Defines the rx::FenceNV11 and rx::FenceSync11 classes which implement rx::FenceNVImpl and rx::FenceSyncImpl.
#include "libANGLE/renderer/d3d/d3d11/Fence11.h"
#include "libANGLE/renderer/d3d/d3d11/Renderer11.h"
@@ -21,20 +20,19 @@ static const int kDeviceLostCheckPeriod = 64;
// Template helpers for set and test operations.
//
-template <class FenceClass>
+template<class FenceClass>
gl::Error FenceSetHelper(FenceClass *fence)
{
if (!fence->mQuery)
{
D3D11_QUERY_DESC queryDesc;
- queryDesc.Query = D3D11_QUERY_EVENT;
+ queryDesc.Query = D3D11_QUERY_EVENT;
queryDesc.MiscFlags = 0;
HRESULT result = fence->mRenderer->getDevice()->CreateQuery(&queryDesc, &fence->mQuery);
if (FAILED(result))
{
- return gl::Error(GL_OUT_OF_MEMORY, "Failed to create event query, result: 0x%X.",
- result);
+ return gl::Error(GL_OUT_OF_MEMORY, "Failed to create event query, result: 0x%X.", result);
}
}
@@ -48,8 +46,7 @@ gl::Error FenceTestHelper(FenceClass *fence, bool flushCommandBuffer, GLboolean
ASSERT(fence->mQuery);
UINT getDataFlags = (flushCommandBuffer ? 0 : D3D11_ASYNC_GETDATA_DONOTFLUSH);
- HRESULT result =
- fence->mRenderer->getDeviceContext()->GetData(fence->mQuery, NULL, 0, getDataFlags);
+ HRESULT result = fence->mRenderer->getDeviceContext()->GetData(fence->mQuery, NULL, 0, getDataFlags);
if (FAILED(result))
{
@@ -65,7 +62,10 @@ gl::Error FenceTestHelper(FenceClass *fence, bool flushCommandBuffer, GLboolean
// FenceNV11
//
-FenceNV11::FenceNV11(Renderer11 *renderer) : FenceNVImpl(), mRenderer(renderer), mQuery(NULL)
+FenceNV11::FenceNV11(Renderer11 *renderer)
+ : FenceNVImpl(),
+ mRenderer(renderer),
+ mQuery(NULL)
{
}
@@ -92,7 +92,11 @@ gl::Error FenceNV11::finish()
while (finished != GL_TRUE)
{
loopCount++;
- ANGLE_TRY(FenceTestHelper(this, true, &finished));
+ gl::Error error = FenceTestHelper(this, true, &finished);
+ if (error.isError())
+ {
+ return error;
+ }
if (loopCount % kDeviceLostCheckPeriod == 0 && mRenderer->testDeviceLost())
{
@@ -103,7 +107,7 @@ gl::Error FenceNV11::finish()
ScheduleYield();
}
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
//
@@ -121,10 +125,14 @@ gl::Error FenceNV11::finish()
// We still opt to use QPC. In the present and moving forward, most newer systems will not suffer
// from buggy implementations.
-FenceSync11::FenceSync11(Renderer11 *renderer) : FenceSyncImpl(), mRenderer(renderer), mQuery(NULL)
+FenceSync11::FenceSync11(Renderer11 *renderer)
+ : FenceSyncImpl(),
+ mRenderer(renderer),
+ mQuery(NULL)
{
LARGE_INTEGER counterFreqency = {};
- BOOL success = QueryPerformanceFrequency(&counterFreqency);
+ BOOL success = QueryPerformanceFrequency(&counterFreqency);
+ UNUSED_ASSERTION_VARIABLE(success);
ASSERT(success);
mCounterFrequency = counterFreqency.QuadPart;
@@ -148,7 +156,7 @@ gl::Error FenceSync11::clientWait(GLbitfield flags, GLuint64 timeout, GLenum *ou
bool flushCommandBuffer = ((flags & GL_SYNC_FLUSH_COMMANDS_BIT) != 0);
GLboolean result = GL_FALSE;
- gl::Error error = FenceTestHelper(this, flushCommandBuffer, &result);
+ gl::Error error = FenceTestHelper(this, flushCommandBuffer, &result);
if (error.isError())
{
*outResult = GL_WAIT_FAILED;
@@ -168,11 +176,12 @@ gl::Error FenceSync11::clientWait(GLbitfield flags, GLuint64 timeout, GLenum *ou
}
LARGE_INTEGER currentCounter = {};
- BOOL success = QueryPerformanceCounter(&currentCounter);
+ BOOL success = QueryPerformanceCounter(&currentCounter);
+ UNUSED_ASSERTION_VARIABLE(success);
ASSERT(success);
LONGLONG timeoutInSeconds = static_cast<LONGLONG>(timeout) * static_cast<LONGLONG>(1000000ll);
- LONGLONG endCounter = currentCounter.QuadPart + mCounterFrequency * timeoutInSeconds;
+ LONGLONG endCounter = currentCounter.QuadPart + mCounterFrequency * timeoutInSeconds;
int loopCount = 0;
while (currentCounter.QuadPart < endCounter && !result)
@@ -180,6 +189,7 @@ gl::Error FenceSync11::clientWait(GLbitfield flags, GLuint64 timeout, GLenum *ou
loopCount++;
ScheduleYield();
success = QueryPerformanceCounter(&currentCounter);
+ UNUSED_ASSERTION_VARIABLE(success);
ASSERT(success);
error = FenceTestHelper(this, flushCommandBuffer, &result);
@@ -212,19 +222,19 @@ gl::Error FenceSync11::clientWait(GLbitfield flags, GLuint64 timeout, GLenum *ou
gl::Error FenceSync11::serverWait(GLbitfield flags, GLuint64 timeout)
{
// Because our API is currently designed to be called from a single thread, we don't need to do
- // extra work for a server-side fence. GPU commands issued after the fence is created will
- // always be processed after the fence is signaled.
+ // extra work for a server-side fence. GPU commands issued after the fence is created will always
+ // be processed after the fence is signaled.
return gl::Error(GL_NO_ERROR);
}
gl::Error FenceSync11::getStatus(GLint *outResult)
{
GLboolean result = GL_FALSE;
- gl::Error error = FenceTestHelper(this, false, &result);
+ gl::Error error = FenceTestHelper(this, false, &result);
if (error.isError())
{
- // The spec does not specify any way to report errors during the status test (e.g. device
- // lost) so we report the fence is unblocked in case of error or signaled.
+ // The spec does not specify any way to report errors during the status test (e.g. device lost)
+ // so we report the fence is unblocked in case of error or signaled.
*outResult = GL_SIGNALED;
return error;
@@ -234,4 +244,4 @@ gl::Error FenceSync11::getStatus(GLint *outResult)
return gl::Error(GL_NO_ERROR);
}
-} // namespace rx
+} // namespace rx
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Framebuffer11.cpp b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Framebuffer11.cpp
index 90922914a..4e67fa1ef 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Framebuffer11.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Framebuffer11.cpp
@@ -29,7 +29,7 @@ namespace rx
namespace
{
-gl::Error MarkAttachmentsDirty(const gl::FramebufferAttachment *attachment)
+gl::Error InvalidateAttachmentSwizzles(const gl::FramebufferAttachment *attachment)
{
if (attachment && attachment->type() == GL_TEXTURE)
{
@@ -45,7 +45,7 @@ gl::Error MarkAttachmentsDirty(const gl::FramebufferAttachment *attachment)
TextureStorage11 *texStorage11 = GetAs<TextureStorage11>(texStorage);
ASSERT(texStorage11);
- texStorage11->markLevelDirty(attachment->mipLevel());
+ texStorage11->invalidateSwizzleCacheLevel(attachment->mipLevel());
}
}
@@ -89,18 +89,18 @@ Framebuffer11::~Framebuffer11()
{
}
-gl::Error Framebuffer11::markAttachmentsDirty() const
+gl::Error Framebuffer11::invalidateSwizzles() const
{
for (const auto &colorAttachment : mState.getColorAttachments())
{
if (colorAttachment.isAttached())
{
- ANGLE_TRY(MarkAttachmentsDirty(&colorAttachment));
+ ANGLE_TRY(InvalidateAttachmentSwizzles(&colorAttachment));
}
}
- ANGLE_TRY(MarkAttachmentsDirty(mState.getDepthAttachment()));
- ANGLE_TRY(MarkAttachmentsDirty(mState.getStencilAttachment()));
+ ANGLE_TRY(InvalidateAttachmentSwizzles(mState.getDepthAttachment()));
+ ANGLE_TRY(InvalidateAttachmentSwizzles(mState.getStencilAttachment()));
return gl::NoError();
}
@@ -128,7 +128,7 @@ gl::Error Framebuffer11::clearImpl(ContextImpl *context, const ClearParameters &
ANGLE_TRY(clearer->clearFramebuffer(clearParams, mState));
}
- ANGLE_TRY(markAttachmentsDirty());
+ ANGLE_TRY(invalidateSwizzles());
return gl::NoError();
}
@@ -182,10 +182,7 @@ gl::Error Framebuffer11::invalidateBase(size_t count, const GLenum *attachments,
size_t colorIndex =
(attachments[i] == GL_COLOR ? 0u : (attachments[i] - GL_COLOR_ATTACHMENT0));
auto colorAttachment = mState.getColorAttachment(colorIndex);
- if (colorAttachment)
- {
- ANGLE_TRY(invalidateAttachment(colorAttachment));
- }
+ ANGLE_TRY(invalidateAttachment(colorAttachment));
break;
}
}
@@ -354,14 +351,14 @@ gl::Error Framebuffer11::blitImpl(const gl::Rectangle &sourceArea,
blitDepth, blitStencil));
}
- ANGLE_TRY(markAttachmentsDirty());
+ ANGLE_TRY(invalidateSwizzles());
return gl::NoError();
}
GLenum Framebuffer11::getRenderTargetImplementationFormat(RenderTargetD3D *renderTarget) const
{
RenderTarget11 *renderTarget11 = GetAs<RenderTarget11>(renderTarget);
- return renderTarget11->getFormatSet().format().fboImplementationInternalFormat;
+ return renderTarget11->getFormatSet().format.fboImplementationInternalFormat;
}
void Framebuffer11::updateColorRenderTarget(size_t colorIndex)
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Framebuffer11.h b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Framebuffer11.h
index b1683a206..813e0f32f 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Framebuffer11.h
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Framebuffer11.h
@@ -28,7 +28,7 @@ class Framebuffer11 : public FramebufferD3D, public angle::SignalReceiver
gl::Error invalidateSub(size_t count, const GLenum *attachments, const gl::Rectangle &area) override;
// Invalidate the cached swizzles of all bound texture attachments.
- gl::Error markAttachmentsDirty() const;
+ gl::Error invalidateSwizzles() const;
void syncState(const gl::Framebuffer::DirtyBits &dirtyBits) override;
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Image11.cpp b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Image11.cpp
index 3c797f820..d27a8d53a 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Image11.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Image11.cpp
@@ -50,21 +50,25 @@ gl::Error Image11::generateMipmap(Image11 *dest,
ASSERT(src->getHeight() == 1 || src->getHeight() / 2 == dest->getHeight());
D3D11_MAPPED_SUBRESOURCE destMapped;
- ANGLE_TRY(dest->map(D3D11_MAP_WRITE, &destMapped));
+ gl::Error error = dest->map(D3D11_MAP_WRITE, &destMapped);
+ if (error.isError())
+ {
+ return error;
+ }
D3D11_MAPPED_SUBRESOURCE srcMapped;
- gl::Error error = src->map(D3D11_MAP_READ, &srcMapped);
+ error = src->map(D3D11_MAP_READ, &srcMapped);
if (error.isError())
{
dest->unmap();
return error;
}
- const uint8_t *sourceData = reinterpret_cast<const uint8_t *>(srcMapped.pData);
- uint8_t *destData = reinterpret_cast<uint8_t *>(destMapped.pData);
+ const uint8_t *sourceData = reinterpret_cast<const uint8_t*>(srcMapped.pData);
+ uint8_t *destData = reinterpret_cast<uint8_t*>(destMapped.pData);
auto mipGenerationFunction =
- d3d11::Format::Get(src->getInternalFormat(), rendererCaps).format().mipGenerationFunction;
+ d3d11::Format::Get(src->getInternalFormat(), rendererCaps).format.mipGenerationFunction;
mipGenerationFunction(src->getWidth(), src->getHeight(), src->getDepth(), sourceData,
srcMapped.RowPitch, srcMapped.DepthPitch, destData, destMapped.RowPitch,
destMapped.DepthPitch);
@@ -74,14 +78,15 @@ gl::Error Image11::generateMipmap(Image11 *dest,
dest->markDirty();
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
bool Image11::isDirty() const
{
- // If mDirty is true AND mStagingTexture doesn't exist AND mStagingTexture doesn't need to be
- // recovered from TextureStorage AND the texture doesn't require init data (i.e. a blank new
- // texture will suffice) then isDirty should still return false.
+ // If mDirty is true
+ // AND mStagingTexture doesn't exist AND mStagingTexture doesn't need to be recovered from TextureStorage
+ // AND the texture doesn't require init data (i.e. a blank new texture will suffice)
+ // then isDirty should still return false.
if (mDirty && !mStagingTexture && !mRecoverFromStorage)
{
const Renderer11DeviceCaps &deviceCaps = mRenderer->getRenderer11DeviceCaps();
@@ -95,45 +100,54 @@ bool Image11::isDirty() const
return mDirty;
}
-gl::Error Image11::copyToStorage(TextureStorage *storage,
- const gl::ImageIndex &index,
- const gl::Box &region)
+gl::Error Image11::copyToStorage(TextureStorage *storage, const gl::ImageIndex &index, const gl::Box &region)
{
TextureStorage11 *storage11 = GetAs<TextureStorage11>(storage);
- // If an app's behavior results in an Image11 copying its data to/from to a TextureStorage
- // multiple times, then we should just keep the staging texture around to prevent the copying
- // from impacting perf. We allow the Image11 to copy its data to/from TextureStorage once. This
- // accounts for an app making a late call to glGenerateMipmap.
+ // If an app's behavior results in an Image11 copying its data to/from to a TextureStorage multiple times,
+ // then we should just keep the staging texture around to prevent the copying from impacting perf.
+ // We allow the Image11 to copy its data to/from TextureStorage once.
+ // This accounts for an app making a late call to glGenerateMipmap.
bool attemptToReleaseStagingTexture = (mRecoveredFromStorageCount < 2);
if (attemptToReleaseStagingTexture)
{
- // If another image is relying on this Storage for its data, then we must let it recover its
- // data before we overwrite it.
- ANGLE_TRY(storage11->releaseAssociatedImage(index, this));
+ // If another image is relying on this Storage for its data, then we must let it recover its data before we overwrite it.
+ gl::Error error = storage11->releaseAssociatedImage(index, this);
+ if (error.isError())
+ {
+ return error;
+ }
}
- ID3D11Resource *stagingTexture = NULL;
+ ID3D11Resource *stagingTexture = NULL;
unsigned int stagingSubresourceIndex = 0;
- ANGLE_TRY(getStagingTexture(&stagingTexture, &stagingSubresourceIndex));
- ANGLE_TRY(
- storage11->updateSubresourceLevel(stagingTexture, stagingSubresourceIndex, index, region));
+ gl::Error error = getStagingTexture(&stagingTexture, &stagingSubresourceIndex);
+ if (error.isError())
+ {
+ return error;
+ }
+
+ error = storage11->updateSubresourceLevel(stagingTexture, stagingSubresourceIndex, index, region);
+ if (error.isError())
+ {
+ return error;
+ }
// Once the image data has been copied into the Storage, we can release it locally.
if (attemptToReleaseStagingTexture)
{
storage11->associateImage(this, index);
releaseStagingTexture();
- mRecoverFromStorage = true;
- mAssociatedStorage = storage11;
+ mRecoverFromStorage = true;
+ mAssociatedStorage = storage11;
mAssociatedImageIndex = index;
}
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
-bool Image11::isAssociatedStorageValid(TextureStorage11 *textureStorage) const
+bool Image11::isAssociatedStorageValid(TextureStorage11* textureStorage) const
{
return (mAssociatedStorage == textureStorage);
}
@@ -142,22 +156,28 @@ gl::Error Image11::recoverFromAssociatedStorage()
{
if (mRecoverFromStorage)
{
- ANGLE_TRY(createStagingTexture());
+ gl::Error error = createStagingTexture();
+ if (error.isError())
+ {
+ return error;
+ }
- bool textureStorageCorrect =
- mAssociatedStorage->isAssociatedImageValid(mAssociatedImageIndex, this);
+ bool textureStorageCorrect = mAssociatedStorage->isAssociatedImageValid(mAssociatedImageIndex, this);
- // This means that the cached TextureStorage has been modified after this Image11 released
- // its copy of its data. This should not have happened. The TextureStorage should have told
- // this Image11 to recover its data before it was overwritten.
+ // This means that the cached TextureStorage has been modified after this Image11 released its copy of its data.
+ // This should not have happened. The TextureStorage should have told this Image11 to recover its data before it was overwritten.
ASSERT(textureStorageCorrect);
if (textureStorageCorrect)
{
// CopySubResource from the Storage to the Staging texture
gl::Box region(0, 0, 0, mWidth, mHeight, mDepth);
- ANGLE_TRY(mAssociatedStorage->copySubresourceLevel(mStagingTexture, mStagingSubresource,
- mAssociatedImageIndex, region));
+ error = mAssociatedStorage->copySubresourceLevel(mStagingTexture, mStagingSubresource, mAssociatedImageIndex, region);
+ if (error.isError())
+ {
+ return error;
+ }
+
mRecoveredFromStorageCount += 1;
}
@@ -165,7 +185,7 @@ gl::Error Image11::recoverFromAssociatedStorage()
disassociateStorage();
}
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
void Image11::disassociateStorage()
@@ -175,18 +195,17 @@ void Image11::disassociateStorage()
// Make the texturestorage release the Image11 too
mAssociatedStorage->disassociateImage(mAssociatedImageIndex, this);
- mRecoverFromStorage = false;
- mAssociatedStorage = NULL;
+ mRecoverFromStorage = false;
+ mAssociatedStorage = NULL;
mAssociatedImageIndex = gl::ImageIndex::MakeInvalid();
}
}
-bool Image11::redefine(GLenum target,
- GLenum internalformat,
- const gl::Extents &size,
- bool forceRelease)
+bool Image11::redefine(GLenum target, GLenum internalformat, const gl::Extents &size, bool forceRelease)
{
- if (mWidth != size.width || mHeight != size.height || mInternalFormat != internalformat ||
+ if (mWidth != size.width ||
+ mHeight != size.height ||
+ mInternalFormat != internalformat ||
forceRelease)
{
// End the association with the TextureStorage, since that data will be out of date.
@@ -194,11 +213,11 @@ bool Image11::redefine(GLenum target,
disassociateStorage();
mRecoveredFromStorageCount = 0;
- mWidth = size.width;
- mHeight = size.height;
- mDepth = size.depth;
+ mWidth = size.width;
+ mHeight = size.height;
+ mDepth = size.depth;
mInternalFormat = internalformat;
- mTarget = target;
+ mTarget = target;
// compute the d3d format that will be used
const d3d11::Format &formatInfo =
@@ -224,87 +243,93 @@ DXGI_FORMAT Image11::getDXGIFormat() const
return mDXGIFormat;
}
-// Store the pixel rectangle designated by xoffset,yoffset,width,height with pixels stored as
-// format/type at input
+// Store the pixel rectangle designated by xoffset,yoffset,width,height with pixels stored as format/type at input
// into the target pixel rectangle.
gl::Error Image11::loadData(const gl::Box &area,
const gl::PixelUnpackState &unpack,
- GLenum inputType,
+ GLenum type,
const void *input,
bool applySkipImages)
{
- const auto sizedInputFormat = getSizedInputFormat(inputType);
- const gl::InternalFormat &inputFormat = gl::GetInternalFormatInfo(sizedInputFormat);
+ const gl::InternalFormat &formatInfo = gl::GetInternalFormatInfo(mInternalFormat);
GLuint inputRowPitch = 0;
ANGLE_TRY_RESULT(
- inputFormat.computeRowPitch(area.width, unpack.alignment, unpack.rowLength),
+ formatInfo.computeRowPitch(type, area.width, unpack.alignment, unpack.rowLength),
inputRowPitch);
GLuint inputDepthPitch = 0;
- ANGLE_TRY_RESULT(gl::InternalFormat::computeDepthPitch(area.height, unpack.imageHeight, inputRowPitch),
+ ANGLE_TRY_RESULT(formatInfo.computeDepthPitch(type, area.width, area.height, unpack.alignment,
+ unpack.rowLength, unpack.imageHeight),
inputDepthPitch);
GLuint inputSkipBytes = 0;
ANGLE_TRY_RESULT(
- inputFormat.computeSkipBytes(inputRowPitch, inputDepthPitch, unpack, applySkipImages),
+ formatInfo.computeSkipBytes(inputRowPitch, inputDepthPitch, unpack.skipImages,
+ unpack.skipRows, unpack.skipPixels, applySkipImages),
inputSkipBytes);
const d3d11::DXGIFormatSize &dxgiFormatInfo = d3d11::GetDXGIFormatSizeInfo(mDXGIFormat);
- GLuint outputPixelSize = dxgiFormatInfo.pixelBytes;
+ GLuint outputPixelSize = dxgiFormatInfo.pixelBytes;
const d3d11::Format &d3dFormatInfo =
d3d11::Format::Get(mInternalFormat, mRenderer->getRenderer11DeviceCaps());
- LoadImageFunction loadFunction = d3dFormatInfo.getLoadFunctions()(inputType).loadFunction;
+ LoadImageFunction loadFunction = d3dFormatInfo.loadFunctions(type).loadFunction;
D3D11_MAPPED_SUBRESOURCE mappedImage;
- ANGLE_TRY(map(D3D11_MAP_WRITE, &mappedImage));
+ gl::Error error = map(D3D11_MAP_WRITE, &mappedImage);
+ if (error.isError())
+ {
+ return error;
+ }
- uint8_t *offsetMappedData = (reinterpret_cast<uint8_t *>(mappedImage.pData) +
- (area.y * mappedImage.RowPitch + area.x * outputPixelSize +
- area.z * mappedImage.DepthPitch));
+ uint8_t *offsetMappedData = (reinterpret_cast<uint8_t*>(mappedImage.pData) + (area.y * mappedImage.RowPitch + area.x * outputPixelSize + area.z * mappedImage.DepthPitch));
loadFunction(area.width, area.height, area.depth,
reinterpret_cast<const uint8_t *>(input) + inputSkipBytes, inputRowPitch,
inputDepthPitch, offsetMappedData, mappedImage.RowPitch, mappedImage.DepthPitch);
unmap();
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
gl::Error Image11::loadCompressedData(const gl::Box &area, const void *input)
{
const gl::InternalFormat &formatInfo = gl::GetInternalFormatInfo(mInternalFormat);
GLsizei inputRowPitch = 0;
- ANGLE_TRY_RESULT(formatInfo.computeRowPitch(area.width, 1, 0), inputRowPitch);
+ ANGLE_TRY_RESULT(formatInfo.computeRowPitch(GL_UNSIGNED_BYTE, area.width, 1, 0), inputRowPitch);
GLsizei inputDepthPitch = 0;
- ANGLE_TRY_RESULT(gl::InternalFormat::computeDepthPitch(area.height, 0, inputRowPitch), inputDepthPitch);
+ ANGLE_TRY_RESULT(
+ formatInfo.computeDepthPitch(GL_UNSIGNED_BYTE, area.width, area.height, 1, 0, 0),
+ inputDepthPitch);
const d3d11::DXGIFormatSize &dxgiFormatInfo = d3d11::GetDXGIFormatSizeInfo(mDXGIFormat);
- GLuint outputPixelSize = dxgiFormatInfo.pixelBytes;
- GLuint outputBlockWidth = dxgiFormatInfo.blockWidth;
- GLuint outputBlockHeight = dxgiFormatInfo.blockHeight;
+ GLuint outputPixelSize = dxgiFormatInfo.pixelBytes;
+ GLuint outputBlockWidth = dxgiFormatInfo.blockWidth;
+ GLuint outputBlockHeight = dxgiFormatInfo.blockHeight;
ASSERT(area.x % outputBlockWidth == 0);
ASSERT(area.y % outputBlockHeight == 0);
const d3d11::Format &d3dFormatInfo =
d3d11::Format::Get(mInternalFormat, mRenderer->getRenderer11DeviceCaps());
- LoadImageFunction loadFunction =
- d3dFormatInfo.getLoadFunctions()(GL_UNSIGNED_BYTE).loadFunction;
+ LoadImageFunction loadFunction = d3dFormatInfo.loadFunctions(GL_UNSIGNED_BYTE).loadFunction;
D3D11_MAPPED_SUBRESOURCE mappedImage;
- ANGLE_TRY(map(D3D11_MAP_WRITE, &mappedImage));
+ gl::Error error = map(D3D11_MAP_WRITE, &mappedImage);
+ if (error.isError())
+ {
+ return error;
+ }
- uint8_t *offsetMappedData =
- reinterpret_cast<uint8_t *>(mappedImage.pData) +
- ((area.y / outputBlockHeight) * mappedImage.RowPitch +
- (area.x / outputBlockWidth) * outputPixelSize + area.z * mappedImage.DepthPitch);
+ uint8_t* offsetMappedData = reinterpret_cast<uint8_t*>(mappedImage.pData) + ((area.y / outputBlockHeight) * mappedImage.RowPitch +
+ (area.x / outputBlockWidth) * outputPixelSize +
+ area.z * mappedImage.DepthPitch);
- loadFunction(area.width, area.height, area.depth, reinterpret_cast<const uint8_t *>(input),
- inputRowPitch, inputDepthPitch, offsetMappedData, mappedImage.RowPitch,
- mappedImage.DepthPitch);
+ loadFunction(area.width, area.height, area.depth,
+ reinterpret_cast<const uint8_t*>(input), inputRowPitch, inputDepthPitch,
+ offsetMappedData, mappedImage.RowPitch, mappedImage.DepthPitch);
unmap();
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
gl::Error Image11::copyFromTexStorage(const gl::ImageIndex &imageIndex, TextureStorage *source)
@@ -312,9 +337,13 @@ gl::Error Image11::copyFromTexStorage(const gl::ImageIndex &imageIndex, TextureS
TextureStorage11 *storage11 = GetAs<TextureStorage11>(source);
ID3D11Resource *resource = nullptr;
- ANGLE_TRY(storage11->getResource(&resource));
+ gl::Error error = storage11->getResource(&resource);
+ if (error.isError())
+ {
+ return error;
+ }
- UINT subresourceIndex = storage11->getSubresourceIndex(imageIndex);
+ UINT subresourceIndex = storage11->getSubresourceIndex(imageIndex);
TextureHelper11 textureHelper =
TextureHelper11::MakeAndReference(resource, storage11->getFormatSet());
@@ -336,7 +365,11 @@ gl::Error Image11::copyFromFramebuffer(const gl::Offset &destOffset,
if (d3d11Format.texFormat == mDXGIFormat && sourceInternalFormat == mInternalFormat)
{
RenderTargetD3D *renderTarget = nullptr;
- ANGLE_TRY(srcAttachment->getRenderTarget(&renderTarget));
+ gl::Error error = srcAttachment->getRenderTarget(&renderTarget);
+ if (error.isError())
+ {
+ return error;
+ }
RenderTarget11 *rt11 = GetAs<RenderTarget11>(renderTarget);
ASSERT(rt11->getTexture());
@@ -352,7 +385,11 @@ gl::Error Image11::copyFromFramebuffer(const gl::Offset &destOffset,
// This format requires conversion, so we must copy the texture to staging and manually convert
// via readPixels
D3D11_MAPPED_SUBRESOURCE mappedImage;
- ANGLE_TRY(map(D3D11_MAP_WRITE, &mappedImage));
+ gl::Error error = map(D3D11_MAP_WRITE, &mappedImage);
+ if (error.isError())
+ {
+ return error;
+ }
// determine the offset coordinate into the destination buffer
const auto &dxgiFormatInfo = d3d11::GetDXGIFormatSizeInfo(mDXGIFormat);
@@ -366,8 +403,7 @@ gl::Error Image11::copyFromFramebuffer(const gl::Offset &destOffset,
const auto &destD3D11Format =
d3d11::Format::Get(mInternalFormat, mRenderer->getRenderer11DeviceCaps());
- auto loadFunction = destD3D11Format.getLoadFunctions()(destFormatInfo.type);
- gl::Error error = gl::NoError();
+ auto loadFunction = destD3D11Format.loadFunctions(destFormatInfo.type);
if (loadFunction.requiresConversion)
{
size_t bufferSize = destFormatInfo.pixelBytes * sourceArea.width * sourceArea.height;
@@ -404,7 +440,11 @@ gl::Error Image11::copyWithoutConversion(const gl::Offset &destOffset,
// No conversion needed-- use copyback fastpath
ID3D11Resource *stagingTexture = nullptr;
unsigned int stagingSubresourceIndex = 0;
- ANGLE_TRY(getStagingTexture(&stagingTexture, &stagingSubresourceIndex));
+ gl::Error error = getStagingTexture(&stagingTexture, &stagingSubresourceIndex);
+ if (error.isError())
+ {
+ return error;
+ }
ID3D11Device *device = mRenderer->getDevice();
ID3D11DeviceContext *deviceContext = mRenderer->getDeviceContext();
@@ -433,7 +473,7 @@ gl::Error Image11::copyWithoutConversion(const gl::Offset &destOffset,
resolveDesc.MiscFlags = 0;
ID3D11Texture2D *srcTex2D = NULL;
- HRESULT result = device->CreateTexture2D(&resolveDesc, NULL, &srcTex2D);
+ HRESULT result = device->CreateTexture2D(&resolveDesc, NULL, &srcTex2D);
if (FAILED(result))
{
return gl::Error(GL_OUT_OF_MEMORY,
@@ -469,17 +509,20 @@ gl::Error Image11::copyWithoutConversion(const gl::Offset &destOffset,
}
mDirty = true;
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
-gl::Error Image11::getStagingTexture(ID3D11Resource **outStagingTexture,
- unsigned int *outSubresourceIndex)
+gl::Error Image11::getStagingTexture(ID3D11Resource **outStagingTexture, unsigned int *outSubresourceIndex)
{
- ANGLE_TRY(createStagingTexture());
+ gl::Error error = createStagingTexture();
+ if (error.isError())
+ {
+ return error;
+ }
- *outStagingTexture = mStagingTexture;
+ *outStagingTexture = mStagingTexture;
*outSubresourceIndex = mStagingSubresource;
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
void Image11::releaseStagingTexture()
@@ -501,8 +544,8 @@ gl::Error Image11::createStagingTexture()
ID3D11Device *device = mRenderer->getDevice();
HRESULT result;
- int lodOffset = 1;
- GLsizei width = mWidth;
+ int lodOffset = 1;
+ GLsizei width = mWidth;
GLsizei height = mHeight;
// adjust size if needed for compressed textures
@@ -513,24 +556,23 @@ gl::Error Image11::createStagingTexture()
ID3D11Texture3D *newTexture = NULL;
D3D11_TEXTURE3D_DESC desc;
- desc.Width = width;
- desc.Height = height;
- desc.Depth = mDepth;
- desc.MipLevels = lodOffset + 1;
- desc.Format = dxgiFormat;
- desc.Usage = D3D11_USAGE_STAGING;
- desc.BindFlags = 0;
+ desc.Width = width;
+ desc.Height = height;
+ desc.Depth = mDepth;
+ desc.MipLevels = lodOffset + 1;
+ desc.Format = dxgiFormat;
+ desc.Usage = D3D11_USAGE_STAGING;
+ desc.BindFlags = 0;
desc.CPUAccessFlags = D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE;
- desc.MiscFlags = 0;
+ desc.MiscFlags = 0;
if (d3d11::Format::Get(mInternalFormat, mRenderer->getRenderer11DeviceCaps())
.dataInitializerFunction != NULL)
{
std::vector<D3D11_SUBRESOURCE_DATA> initialData;
std::vector<std::vector<BYTE>> textureData;
- d3d11::GenerateInitialTextureData(mInternalFormat, mRenderer->getRenderer11DeviceCaps(),
- width, height, mDepth, lodOffset + 1, &initialData,
- &textureData);
+ d3d11::GenerateInitialTextureData(mInternalFormat, mRenderer->getRenderer11DeviceCaps(), width, height, mDepth,
+ lodOffset + 1, &initialData, &textureData);
result = device->CreateTexture3D(&desc, initialData.data(), &newTexture);
}
@@ -542,39 +584,36 @@ gl::Error Image11::createStagingTexture()
if (FAILED(result))
{
ASSERT(result == E_OUTOFMEMORY);
- return gl::Error(GL_OUT_OF_MEMORY, "Failed to create staging texture, result: 0x%X.",
- result);
+ return gl::Error(GL_OUT_OF_MEMORY, "Failed to create staging texture, result: 0x%X.", result);
}
- mStagingTexture = newTexture;
+ mStagingTexture = newTexture;
mStagingSubresource = D3D11CalcSubresource(lodOffset, 0, lodOffset + 1);
}
- else if (mTarget == GL_TEXTURE_2D || mTarget == GL_TEXTURE_2D_ARRAY ||
- mTarget == GL_TEXTURE_CUBE_MAP)
+ else if (mTarget == GL_TEXTURE_2D || mTarget == GL_TEXTURE_2D_ARRAY || mTarget == GL_TEXTURE_CUBE_MAP)
{
ID3D11Texture2D *newTexture = NULL;
D3D11_TEXTURE2D_DESC desc;
- desc.Width = width;
- desc.Height = height;
- desc.MipLevels = lodOffset + 1;
- desc.ArraySize = 1;
- desc.Format = dxgiFormat;
- desc.SampleDesc.Count = 1;
+ desc.Width = width;
+ desc.Height = height;
+ desc.MipLevels = lodOffset + 1;
+ desc.ArraySize = 1;
+ desc.Format = dxgiFormat;
+ desc.SampleDesc.Count = 1;
desc.SampleDesc.Quality = 0;
- desc.Usage = D3D11_USAGE_STAGING;
- desc.BindFlags = 0;
- desc.CPUAccessFlags = D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE;
- desc.MiscFlags = 0;
+ desc.Usage = D3D11_USAGE_STAGING;
+ desc.BindFlags = 0;
+ desc.CPUAccessFlags = D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE;
+ desc.MiscFlags = 0;
if (d3d11::Format::Get(mInternalFormat, mRenderer->getRenderer11DeviceCaps())
.dataInitializerFunction != NULL)
{
std::vector<D3D11_SUBRESOURCE_DATA> initialData;
std::vector<std::vector<BYTE>> textureData;
- d3d11::GenerateInitialTextureData(mInternalFormat, mRenderer->getRenderer11DeviceCaps(),
- width, height, 1, lodOffset + 1, &initialData,
- &textureData);
+ d3d11::GenerateInitialTextureData(mInternalFormat, mRenderer->getRenderer11DeviceCaps(), width, height, 1,
+ lodOffset + 1, &initialData, &textureData);
result = device->CreateTexture2D(&desc, initialData.data(), &newTexture);
}
@@ -586,11 +625,10 @@ gl::Error Image11::createStagingTexture()
if (FAILED(result))
{
ASSERT(result == E_OUTOFMEMORY);
- return gl::Error(GL_OUT_OF_MEMORY, "Failed to create staging texture, result: 0x%X.",
- result);
+ return gl::Error(GL_OUT_OF_MEMORY, "Failed to create staging texture, result: 0x%X.", result);
}
- mStagingTexture = newTexture;
+ mStagingTexture = newTexture;
mStagingSubresource = D3D11CalcSubresource(lodOffset, 0, lodOffset + 1);
}
else
@@ -605,11 +643,19 @@ gl::Error Image11::createStagingTexture()
gl::Error Image11::map(D3D11_MAP mapType, D3D11_MAPPED_SUBRESOURCE *map)
{
// We must recover from the TextureStorage if necessary, even for D3D11_MAP_WRITE.
- ANGLE_TRY(recoverFromAssociatedStorage());
+ gl::Error error = recoverFromAssociatedStorage();
+ if (error.isError())
+ {
+ return error;
+ }
ID3D11Resource *stagingTexture = NULL;
- unsigned int subresourceIndex = 0;
- ANGLE_TRY(getStagingTexture(&stagingTexture, &subresourceIndex));
+ unsigned int subresourceIndex = 0;
+ error = getStagingTexture(&stagingTexture, &subresourceIndex);
+ if (error.isError())
+ {
+ return error;
+ }
ID3D11DeviceContext *deviceContext = mRenderer->getDeviceContext();
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Query11.cpp b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Query11.cpp
index 58b18ded5..b256cd51c 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Query11.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Query11.cpp
@@ -96,11 +96,17 @@ template <typename T>
gl::Error Query11::getResultBase(T *params)
{
ASSERT(mActiveQuery->query == nullptr);
- ANGLE_TRY(flush(true));
+
+ gl::Error error = flush(true);
+ if (error.isError())
+ {
+ return error;
+ }
+
ASSERT(mPendingQueries.empty());
*params = static_cast<T>(mResultSum);
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
gl::Error Query11::getResult(GLint *params)
@@ -125,10 +131,14 @@ gl::Error Query11::getResult(GLuint64 *params)
gl::Error Query11::isResultAvailable(bool *available)
{
- ANGLE_TRY(flush(false));
+ gl::Error error = flush(false);
+ if (error.isError())
+ {
+ return error;
+ }
*available = mPendingQueries.empty();
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
gl::Error Query11::pause()
@@ -157,7 +167,11 @@ gl::Error Query11::resume()
{
if (mActiveQuery->query == nullptr)
{
- ANGLE_TRY(flush(false));
+ gl::Error error = flush(false);
+ if (error.isError())
+ {
+ return error;
+ }
GLenum queryType = getType();
D3D11_QUERY d3dQueryType = gl_d3d11::ConvertQueryType(queryType);
@@ -181,7 +195,7 @@ gl::Error Query11::resume()
D3D11_QUERY_DESC desc;
desc.Query = D3D11_QUERY_TIMESTAMP;
desc.MiscFlags = 0;
- result = device->CreateQuery(&desc, &mActiveQuery->beginTimestamp);
+ result = device->CreateQuery(&desc, &mActiveQuery->beginTimestamp);
if (FAILED(result))
{
return gl::Error(GL_OUT_OF_MEMORY, "Internal query creation failed, result: 0x%X.",
@@ -220,7 +234,11 @@ gl::Error Query11::flush(bool force)
do
{
- ANGLE_TRY(testQuery(query));
+ gl::Error error = testQuery(query);
+ if (error.isError())
+ {
+ return error;
+ }
if (!query->finished && !force)
{
return gl::Error(GL_NO_ERROR);
@@ -231,7 +249,7 @@ gl::Error Query11::flush(bool force)
mPendingQueries.pop_front();
}
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
gl::Error Query11::testQuery(QueryState *queryState)
@@ -241,8 +259,8 @@ gl::Error Query11::testQuery(QueryState *queryState)
ID3D11DeviceContext *context = mRenderer->getDeviceContext();
switch (getType())
{
- case GL_ANY_SAMPLES_PASSED_EXT:
- case GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT:
+ case GL_ANY_SAMPLES_PASSED_EXT:
+ case GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT:
{
ASSERT(queryState->query);
UINT64 numPixels = 0;
@@ -250,35 +268,31 @@ gl::Error Query11::testQuery(QueryState *queryState)
context->GetData(queryState->query, &numPixels, sizeof(numPixels), 0);
if (FAILED(result))
{
- return gl::Error(GL_OUT_OF_MEMORY,
- "Failed to get the data of an internal query, result: 0x%X.",
- result);
+ return gl::Error(GL_OUT_OF_MEMORY, "Failed to get the data of an internal query, result: 0x%X.", result);
}
if (result == S_OK)
{
queryState->finished = true;
- mResult = (numPixels > 0) ? GL_TRUE : GL_FALSE;
+ mResult = (numPixels > 0) ? GL_TRUE : GL_FALSE;
}
}
break;
- case GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:
+ case GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:
{
ASSERT(queryState->query);
- D3D11_QUERY_DATA_SO_STATISTICS soStats = {0};
+ D3D11_QUERY_DATA_SO_STATISTICS soStats = { 0 };
HRESULT result = context->GetData(queryState->query, &soStats, sizeof(soStats), 0);
if (FAILED(result))
{
- return gl::Error(GL_OUT_OF_MEMORY,
- "Failed to get the data of an internal query, result: 0x%X.",
- result);
+ return gl::Error(GL_OUT_OF_MEMORY, "Failed to get the data of an internal query, result: 0x%X.", result);
}
if (result == S_OK)
{
queryState->finished = true;
- mResult = static_cast<GLuint64>(soStats.NumPrimitivesWritten);
+ mResult = static_cast<GLuint64>(soStats.NumPrimitivesWritten);
}
}
break;
@@ -355,7 +369,7 @@ gl::Error Query11::testQuery(QueryState *queryState)
// to have any sort of continuity outside of a disjoint timestamp query block, which
// GL depends on
ASSERT(queryState->query == nullptr);
- mResult = 0;
+ mResult = 0;
queryState->finished = true;
}
break;
@@ -382,9 +396,9 @@ gl::Error Query11::testQuery(QueryState *queryState)
}
break;
- default:
- UNREACHABLE();
- break;
+ default:
+ UNREACHABLE();
+ break;
}
if (!queryState->finished && mRenderer->testDeviceLost())
@@ -394,7 +408,7 @@ gl::Error Query11::testQuery(QueryState *queryState)
}
}
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
-} // namespace rx
+}
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/RenderStateCache.cpp b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/RenderStateCache.cpp
index bd870bcbd..2ee25cfb6 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/RenderStateCache.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/RenderStateCache.cpp
@@ -436,8 +436,7 @@ gl::Error RenderStateCache::getSamplerState(const gl::SamplerState &samplerState
samplerDesc.AddressV = gl_d3d11::ConvertTextureWrap(samplerState.wrapT);
samplerDesc.AddressW = gl_d3d11::ConvertTextureWrap(samplerState.wrapR);
samplerDesc.MipLODBias = 0;
- samplerDesc.MaxAnisotropy =
- gl_d3d11::ConvertMaxAnisotropy(samplerState.maxAnisotropy, mDevice->GetFeatureLevel());
+ samplerDesc.MaxAnisotropy = static_cast<UINT>(samplerState.maxAnisotropy);
samplerDesc.ComparisonFunc = gl_d3d11::ConvertComparison(samplerState.compareFunc);
samplerDesc.BorderColor[0] = 0.0f;
samplerDesc.BorderColor[1] = 0.0f;
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/RenderTarget11.cpp b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/RenderTarget11.cpp
index a042f447d..6449c9e6a 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/RenderTarget11.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/RenderTarget11.cpp
@@ -258,7 +258,7 @@ TextureRenderTarget11::TextureRenderTarget11(ID3D11RenderTargetView *rtv,
{
mSubresourceIndex = GetRTVSubresourceIndex(mTexture, mRenderTarget);
}
- ASSERT(mFormatSet.formatID != angle::Format::ID::NONE || mWidth == 0 || mHeight == 0);
+ ASSERT(mFormatSet.format.id != angle::Format::ID::NONE || mWidth == 0 || mHeight == 0);
}
TextureRenderTarget11::TextureRenderTarget11(ID3D11DepthStencilView *dsv,
@@ -302,7 +302,7 @@ TextureRenderTarget11::TextureRenderTarget11(ID3D11DepthStencilView *dsv,
{
mSubresourceIndex = GetDSVSubresourceIndex(mTexture, mDepthStencil);
}
- ASSERT(mFormatSet.formatID != angle::Format::ID::NONE || mWidth == 0 || mHeight == 0);
+ ASSERT(mFormatSet.format.id != angle::Format::ID::NONE || mWidth == 0 || mHeight == 0);
}
TextureRenderTarget11::~TextureRenderTarget11()
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp
index 8b4abaf9c..d03347d25 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp
@@ -98,6 +98,23 @@ enum
MAX_TEXTURE_IMAGE_UNITS_VTF_SM4 = 16
};
+void CalculateConstantBufferParams(GLintptr offset, GLsizeiptr size, UINT *outFirstConstant, UINT *outNumConstants)
+{
+ // The offset must be aligned to 256 bytes (should have been enforced by glBindBufferRange).
+ ASSERT(offset % 256 == 0);
+
+ // firstConstant and numConstants are expressed in constants of 16-bytes. Furthermore they must be a multiple of 16 constants.
+ *outFirstConstant = static_cast<UINT>(offset / 16);
+
+ // The GL size is not required to be aligned to a 256 bytes boundary.
+ // Round the size up to a 256 bytes boundary then express the results in constants of 16-bytes.
+ *outNumConstants = static_cast<UINT>(rx::roundUp(size, static_cast<GLsizeiptr>(256)) / 16);
+
+ // Since the size is rounded up, firstConstant + numConstants may be bigger than the actual size of the buffer.
+ // This behaviour is explictly allowed according to the documentation on ID3D11DeviceContext1::PSSetConstantBuffers1
+ // https://msdn.microsoft.com/en-us/library/windows/desktop/hh404649%28v=vs.85%29.aspx
+}
+
enum ANGLEFeatureLevel
{
ANGLE_FEATURE_LEVEL_INVALID,
@@ -113,20 +130,14 @@ ANGLEFeatureLevel GetANGLEFeatureLevel(D3D_FEATURE_LEVEL d3dFeatureLevel)
{
switch (d3dFeatureLevel)
{
- case D3D_FEATURE_LEVEL_9_3:
- return ANGLE_FEATURE_LEVEL_9_3;
- case D3D_FEATURE_LEVEL_10_0:
- return ANGLE_FEATURE_LEVEL_10_0;
- case D3D_FEATURE_LEVEL_10_1:
- return ANGLE_FEATURE_LEVEL_10_1;
- case D3D_FEATURE_LEVEL_11_0:
- return ANGLE_FEATURE_LEVEL_11_0;
- // Note: we don't ever request a 11_1 device, because this gives
- // an E_INVALIDARG error on systems that don't have the platform update.
- case D3D_FEATURE_LEVEL_11_1:
- return ANGLE_FEATURE_LEVEL_11_1;
- default:
- return ANGLE_FEATURE_LEVEL_INVALID;
+ case D3D_FEATURE_LEVEL_9_3: return ANGLE_FEATURE_LEVEL_9_3;
+ case D3D_FEATURE_LEVEL_10_0: return ANGLE_FEATURE_LEVEL_10_0;
+ case D3D_FEATURE_LEVEL_10_1: return ANGLE_FEATURE_LEVEL_10_1;
+ case D3D_FEATURE_LEVEL_11_0: return ANGLE_FEATURE_LEVEL_11_0;
+ // Note: we don't ever request a 11_1 device, because this gives
+ // an E_INVALIDARG error on systems that don't have the platform update.
+ case D3D_FEATURE_LEVEL_11_1: return ANGLE_FEATURE_LEVEL_11_1;
+ default: return ANGLE_FEATURE_LEVEL_INVALID;
}
}
@@ -394,13 +405,13 @@ Renderer11::Renderer11(egl::Display *display)
mAnnotator(nullptr)
{
mVertexDataManager = NULL;
- mIndexDataManager = NULL;
+ mIndexDataManager = NULL;
- mLineLoopIB = NULL;
- mTriangleFanIB = NULL;
+ mLineLoopIB = NULL;
+ mTriangleFanIB = NULL;
mAppliedIBChanged = false;
- mBlit = NULL;
+ mBlit = NULL;
mPixelTransfer = NULL;
mClear = NULL;
@@ -409,31 +420,31 @@ Renderer11::Renderer11(egl::Display *display)
mSyncQuery = NULL;
- mRenderer11DeviceCaps.supportsClearView = false;
+ mRenderer11DeviceCaps.supportsClearView = false;
mRenderer11DeviceCaps.supportsConstantBufferOffsets = false;
- mRenderer11DeviceCaps.supportsDXGI1_2 = false;
- mRenderer11DeviceCaps.B5G6R5support = 0;
- mRenderer11DeviceCaps.B4G4R4A4support = 0;
- mRenderer11DeviceCaps.B5G5R5A1support = 0;
+ mRenderer11DeviceCaps.supportsDXGI1_2 = false;
+ mRenderer11DeviceCaps.B5G6R5support = 0;
+ mRenderer11DeviceCaps.B4G4R4A4support = 0;
+ mRenderer11DeviceCaps.B5G5R5A1support = 0;
- mD3d11Module = NULL;
- mDxgiModule = NULL;
+ mD3d11Module = NULL;
+ mDxgiModule = NULL;
mDCompModule = NULL;
mCreatedWithDeviceEXT = false;
mEGLDevice = nullptr;
- mDevice = NULL;
- mDeviceContext = NULL;
+ mDevice = NULL;
+ mDeviceContext = NULL;
mDeviceContext1 = NULL;
- mDxgiAdapter = NULL;
- mDxgiFactory = NULL;
+ mDxgiAdapter = NULL;
+ mDxgiFactory = NULL;
mDriverConstantBufferVS = NULL;
mDriverConstantBufferPS = NULL;
- mAppliedVertexShader = NULL;
+ mAppliedVertexShader = NULL;
mAppliedGeometryShader = NULL;
- mAppliedPixelShader = NULL;
+ mAppliedPixelShader = NULL;
mAppliedTFObject = angle::DirtyPointer;
@@ -509,7 +520,7 @@ Renderer11::Renderer11(egl::Display *display)
// Also set EGL_PLATFORM_ANGLE_ANGLE variables, in case they're used elsewhere in ANGLE
// mAvailableFeatureLevels defaults to empty
- mRequestedDriverType = D3D_DRIVER_TYPE_UNKNOWN;
+ mRequestedDriverType = D3D_DRIVER_TYPE_UNKNOWN;
mPresentPathFastEnabled = false;
}
@@ -540,17 +551,20 @@ egl::Error Renderer11::initialize()
{
HRESULT result = S_OK;
- ANGLE_TRY(initializeD3DDevice());
+ egl::Error error = initializeD3DDevice();
+ if (error.isError())
+ {
+ return error;
+ }
#if !defined(ANGLE_ENABLE_WINDOWS_STORE)
#if !ANGLE_SKIP_DXGI_1_2_CHECK
{
TRACE_EVENT0("gpu.angle", "Renderer11::initialize (DXGICheck)");
- // In order to create a swap chain for an HWND owned by another process, DXGI 1.2 is
- // required.
+ // In order to create a swap chain for an HWND owned by another process, DXGI 1.2 is required.
// The easiest way to check is to query for a IDXGIDevice2.
bool requireDXGI1_2 = false;
- HWND hwnd = WindowFromDC(mDisplay->getNativeDisplayId());
+ HWND hwnd = WindowFromDC(mDisplay->getNativeDisplayId());
if (hwnd)
{
DWORD currentProcessId = GetCurrentProcessId();
@@ -566,12 +580,12 @@ egl::Error Renderer11::initialize()
if (requireDXGI1_2)
{
IDXGIDevice2 *dxgiDevice2 = NULL;
- result = mDevice->QueryInterface(__uuidof(IDXGIDevice2), (void **)&dxgiDevice2);
+ result = mDevice->QueryInterface(__uuidof(IDXGIDevice2), (void**)&dxgiDevice2);
if (FAILED(result))
{
- return egl::Error(
- EGL_NOT_INITIALIZED, D3D11_INIT_INCOMPATIBLE_DXGI,
- "DXGI 1.2 required to present to HWNDs owned by another process.");
+ return egl::Error(EGL_NOT_INITIALIZED,
+ D3D11_INIT_INCOMPATIBLE_DXGI,
+ "DXGI 1.2 required to present to HWNDs owned by another process.");
}
SafeRelease(dxgiDevice2);
}
@@ -587,19 +601,21 @@ egl::Error Renderer11::initialize()
mDeviceContext1 = d3d11::DynamicCastComObject<ID3D11DeviceContext1>(mDeviceContext);
IDXGIDevice *dxgiDevice = NULL;
- result = mDevice->QueryInterface(__uuidof(IDXGIDevice), (void **)&dxgiDevice);
+ result = mDevice->QueryInterface(__uuidof(IDXGIDevice), (void**)&dxgiDevice);
if (FAILED(result))
{
- return egl::Error(EGL_NOT_INITIALIZED, D3D11_INIT_OTHER_ERROR,
+ return egl::Error(EGL_NOT_INITIALIZED,
+ D3D11_INIT_OTHER_ERROR,
"Could not query DXGI device.");
}
- result = dxgiDevice->GetParent(__uuidof(IDXGIAdapter), (void **)&mDxgiAdapter);
+ result = dxgiDevice->GetParent(__uuidof(IDXGIAdapter), (void**)&mDxgiAdapter);
if (FAILED(result))
{
- return egl::Error(EGL_NOT_INITIALIZED, D3D11_INIT_OTHER_ERROR,
+ return egl::Error(EGL_NOT_INITIALIZED,
+ D3D11_INIT_OTHER_ERROR,
"Could not retrieve DXGI adapter");
}
@@ -607,28 +623,24 @@ egl::Error Renderer11::initialize()
IDXGIAdapter2 *dxgiAdapter2 = d3d11::DynamicCastComObject<IDXGIAdapter2>(mDxgiAdapter);
- // On D3D_FEATURE_LEVEL_9_*, IDXGIAdapter::GetDesc returns "Software Adapter" for the
- // description string.
- // If DXGI1.2 is available then IDXGIAdapter2::GetDesc2 can be used to get the actual
- // hardware values.
+ // On D3D_FEATURE_LEVEL_9_*, IDXGIAdapter::GetDesc returns "Software Adapter" for the description string.
+ // If DXGI1.2 is available then IDXGIAdapter2::GetDesc2 can be used to get the actual hardware values.
if (mRenderer11DeviceCaps.featureLevel <= D3D_FEATURE_LEVEL_9_3 && dxgiAdapter2 != NULL)
{
DXGI_ADAPTER_DESC2 adapterDesc2 = {};
- result = dxgiAdapter2->GetDesc2(&adapterDesc2);
+ result = dxgiAdapter2->GetDesc2(&adapterDesc2);
if (SUCCEEDED(result))
{
- // Copy the contents of the DXGI_ADAPTER_DESC2 into mAdapterDescription (a
- // DXGI_ADAPTER_DESC).
- memcpy(mAdapterDescription.Description, adapterDesc2.Description,
- sizeof(mAdapterDescription.Description));
- mAdapterDescription.VendorId = adapterDesc2.VendorId;
- mAdapterDescription.DeviceId = adapterDesc2.DeviceId;
- mAdapterDescription.SubSysId = adapterDesc2.SubSysId;
- mAdapterDescription.Revision = adapterDesc2.Revision;
- mAdapterDescription.DedicatedVideoMemory = adapterDesc2.DedicatedVideoMemory;
+ // Copy the contents of the DXGI_ADAPTER_DESC2 into mAdapterDescription (a DXGI_ADAPTER_DESC).
+ memcpy(mAdapterDescription.Description, adapterDesc2.Description, sizeof(mAdapterDescription.Description));
+ mAdapterDescription.VendorId = adapterDesc2.VendorId;
+ mAdapterDescription.DeviceId = adapterDesc2.DeviceId;
+ mAdapterDescription.SubSysId = adapterDesc2.SubSysId;
+ mAdapterDescription.Revision = adapterDesc2.Revision;
+ mAdapterDescription.DedicatedVideoMemory = adapterDesc2.DedicatedVideoMemory;
mAdapterDescription.DedicatedSystemMemory = adapterDesc2.DedicatedSystemMemory;
- mAdapterDescription.SharedSystemMemory = adapterDesc2.SharedSystemMemory;
- mAdapterDescription.AdapterLuid = adapterDesc2.AdapterLuid;
+ mAdapterDescription.SharedSystemMemory = adapterDesc2.SharedSystemMemory;
+ mAdapterDescription.AdapterLuid = adapterDesc2.AdapterLuid;
}
}
else
@@ -640,23 +652,25 @@ egl::Error Renderer11::initialize()
if (FAILED(result))
{
- return egl::Error(EGL_NOT_INITIALIZED, D3D11_INIT_OTHER_ERROR,
+ return egl::Error(EGL_NOT_INITIALIZED,
+ D3D11_INIT_OTHER_ERROR,
"Could not read DXGI adaptor description.");
}
memset(mDescription, 0, sizeof(mDescription));
wcstombs(mDescription, mAdapterDescription.Description, sizeof(mDescription) - 1);
- result = mDxgiAdapter->GetParent(__uuidof(IDXGIFactory), (void **)&mDxgiFactory);
+ result = mDxgiAdapter->GetParent(__uuidof(IDXGIFactory), (void**)&mDxgiFactory);
if (!mDxgiFactory || FAILED(result))
{
- return egl::Error(EGL_NOT_INITIALIZED, D3D11_INIT_OTHER_ERROR,
+ return egl::Error(EGL_NOT_INITIALIZED,
+ D3D11_INIT_OTHER_ERROR,
"Could not create DXGI factory.");
}
}
-// Disable some spurious D3D11 debug warnings to prevent them from flooding the output log
+ // Disable some spurious D3D11 debug warnings to prevent them from flooding the output log
#if defined(ANGLE_SUPPRESS_D3D11_HAZARD_WARNINGS) && defined(_DEBUG)
{
TRACE_EVENT0("gpu.angle", "Renderer11::initialize (HideWarnings)");
@@ -665,12 +679,14 @@ egl::Error Renderer11::initialize()
if (SUCCEEDED(result))
{
- D3D11_MESSAGE_ID hideMessages[] = {
- D3D11_MESSAGE_ID_DEVICE_DRAW_RENDERTARGETVIEW_NOT_SET};
+ D3D11_MESSAGE_ID hideMessages[] =
+ {
+ D3D11_MESSAGE_ID_DEVICE_DRAW_RENDERTARGETVIEW_NOT_SET
+ };
D3D11_INFO_QUEUE_FILTER filter = {};
filter.DenyList.NumIDs = static_cast<unsigned int>(ArraySize(hideMessages));
- filter.DenyList.pIDList = hideMessages;
+ filter.DenyList.pIDList = hideMessages;
infoQueue->AddStorageFilterEntries(&filter);
SafeRelease(infoQueue);
@@ -760,8 +776,12 @@ egl::Error Renderer11::initializeD3DDevice()
else
{
// We should use the inputted D3D11 device instead
- void *device = nullptr;
- ANGLE_TRY(mEGLDevice->getDevice(&device));
+ void *device = nullptr;
+ egl::Error error = mEGLDevice->getDevice(&device);
+ if (error.isError())
+ {
+ return error;
+ }
ID3D11Device *d3dDevice = reinterpret_cast<ID3D11Device *>(device);
if (FAILED(d3dDevice->GetDeviceRemovedReason()))
@@ -802,7 +822,7 @@ void Renderer11::initializeDevice()
ASSERT(!mVertexDataManager && !mIndexDataManager);
mVertexDataManager = new VertexDataManager(this);
- mIndexDataManager = new IndexDataManager(this, getRendererClass());
+ mIndexDataManager = new IndexDataManager(this, getRendererClass());
ASSERT(!mBlit);
mBlit = new Blit11(this);
@@ -856,7 +876,8 @@ void Renderer11::initializeDevice()
angleFeatureLevel = ANGLE_FEATURE_LEVEL_11_1;
}
- ANGLE_HISTOGRAM_ENUMERATION("GPU.ANGLE.D3D11FeatureLevel", angleFeatureLevel,
+ ANGLE_HISTOGRAM_ENUMERATION("GPU.ANGLE.D3D11FeatureLevel",
+ angleFeatureLevel,
NUM_ANGLE_FEATURE_LEVELS);
}
@@ -864,28 +885,14 @@ void Renderer11::populateRenderer11DeviceCaps()
{
HRESULT hr = S_OK;
- LARGE_INTEGER version;
- hr = mDxgiAdapter->CheckInterfaceSupport(__uuidof(IDXGIDevice), &version);
- if (FAILED(hr))
- {
- mRenderer11DeviceCaps.driverVersion.reset();
- ERR("Error querying driver version from DXGI Adapter.");
- }
- else
- {
- mRenderer11DeviceCaps.driverVersion = version;
- }
-
if (mDeviceContext1)
{
D3D11_FEATURE_DATA_D3D11_OPTIONS d3d11Options;
- HRESULT result = mDevice->CheckFeatureSupport(D3D11_FEATURE_D3D11_OPTIONS, &d3d11Options,
- sizeof(D3D11_FEATURE_DATA_D3D11_OPTIONS));
+ HRESULT result = mDevice->CheckFeatureSupport(D3D11_FEATURE_D3D11_OPTIONS, &d3d11Options, sizeof(D3D11_FEATURE_DATA_D3D11_OPTIONS));
if (SUCCEEDED(result))
{
mRenderer11DeviceCaps.supportsClearView = (d3d11Options.ClearView != FALSE);
- mRenderer11DeviceCaps.supportsConstantBufferOffsets =
- (d3d11Options.ConstantBufferOffsetting != FALSE);
+ mRenderer11DeviceCaps.supportsConstantBufferOffsets = (d3d11Options.ConstantBufferOffsetting != FALSE);
}
}
@@ -903,15 +910,13 @@ void Renderer11::populateRenderer11DeviceCaps()
}
}
- hr = mDevice->CheckFormatSupport(DXGI_FORMAT_B4G4R4A4_UNORM,
- &(mRenderer11DeviceCaps.B4G4R4A4support));
+ hr = mDevice->CheckFormatSupport(DXGI_FORMAT_B4G4R4A4_UNORM, &(mRenderer11DeviceCaps.B4G4R4A4support));
if (FAILED(hr))
{
mRenderer11DeviceCaps.B4G4R4A4support = 0;
}
- hr = mDevice->CheckFormatSupport(DXGI_FORMAT_B5G5R5A1_UNORM,
- &(mRenderer11DeviceCaps.B5G5R5A1support));
+ hr = mDevice->CheckFormatSupport(DXGI_FORMAT_B5G5R5A1_UNORM, &(mRenderer11DeviceCaps.B5G5R5A1support));
if (FAILED(hr))
{
mRenderer11DeviceCaps.B5G5R5A1support = 0;
@@ -920,6 +925,18 @@ void Renderer11::populateRenderer11DeviceCaps()
IDXGIAdapter2 *dxgiAdapter2 = d3d11::DynamicCastComObject<IDXGIAdapter2>(mDxgiAdapter);
mRenderer11DeviceCaps.supportsDXGI1_2 = (dxgiAdapter2 != nullptr);
SafeRelease(dxgiAdapter2);
+
+ LARGE_INTEGER version;
+ hr = mDxgiAdapter->CheckInterfaceSupport(__uuidof(IDXGIDevice), &version);
+ if (FAILED(hr))
+ {
+ mRenderer11DeviceCaps.driverVersion.reset();
+ ERR("Error querying driver version from DXGI Adapter.");
+ }
+ else
+ {
+ mRenderer11DeviceCaps.driverVersion = version;
+ }
}
egl::ConfigSet Renderer11::generateConfigs()
@@ -943,8 +960,11 @@ egl::ConfigSet Renderer11::generateConfigs()
colorBufferFormats.push_back(GL_RGB565);
}
- static const GLenum depthStencilBufferFormats[] = {
- GL_NONE, GL_DEPTH24_STENCIL8_OES, GL_DEPTH_COMPONENT16,
+ static const GLenum depthStencilBufferFormats[] =
+ {
+ GL_NONE,
+ GL_DEPTH24_STENCIL8_OES,
+ GL_DEPTH_COMPONENT16,
};
const gl::Caps &rendererCaps = getNativeCaps();
@@ -956,8 +976,7 @@ egl::ConfigSet Renderer11::generateConfigs()
egl::ConfigSet configs;
for (GLenum colorBufferInternalFormat : colorBufferFormats)
{
- const gl::TextureCaps &colorBufferFormatCaps =
- rendererTextureCaps.get(colorBufferInternalFormat);
+ const gl::TextureCaps &colorBufferFormatCaps = rendererTextureCaps.get(colorBufferInternalFormat);
if (!colorBufferFormatCaps.renderable)
{
continue;
@@ -977,7 +996,6 @@ egl::ConfigSet Renderer11::generateConfigs()
gl::GetInternalFormatInfo(colorBufferInternalFormat);
const gl::InternalFormat &depthStencilBufferFormatInfo =
gl::GetInternalFormatInfo(depthStencilBufferInternalFormat);
- const gl::Version &maxVersion = getMaxSupportedESVersion();
egl::Config config;
config.renderTargetFormat = colorBufferInternalFormat;
@@ -990,27 +1008,20 @@ egl::ConfigSet Renderer11::generateConfigs()
config.alphaSize = colorBufferFormatInfo.alphaBits;
config.alphaMaskSize = 0;
config.bindToTextureRGB = (colorBufferFormatInfo.format == GL_RGB);
- config.bindToTextureRGBA = (colorBufferFormatInfo.format == GL_RGBA ||
+ config.bindToTextureRGBA = (colorBufferFormatInfo.format == GL_RGBA ||
colorBufferFormatInfo.format == GL_BGRA_EXT);
config.colorBufferType = EGL_RGB_BUFFER;
config.configCaveat = EGL_NONE;
config.configID = static_cast<EGLint>(configs.size() + 1);
+ // Can only support a conformant ES2 with feature level greater than 10.0.
+ config.conformant = (mRenderer11DeviceCaps.featureLevel >= D3D_FEATURE_LEVEL_10_0)
+ ? (EGL_OPENGL_ES2_BIT | EGL_OPENGL_ES3_BIT_KHR)
+ : 0;
// PresentPathFast may not be conformant
- config.conformant = 0;
- if (!mPresentPathFastEnabled)
+ if (mPresentPathFastEnabled)
{
- // Can only support a conformant ES2 with feature level greater than 10.0.
- if (mRenderer11DeviceCaps.featureLevel >= D3D_FEATURE_LEVEL_10_0)
- {
- config.conformant |= EGL_OPENGL_ES2_BIT;
- }
-
- // We can only support conformant ES3 on FL 10.1+
- if (maxVersion.major >= 3)
- {
- config.conformant |= EGL_OPENGL_ES3_BIT_KHR;
- }
+ config.conformant = 0;
}
config.depthSize = depthStencilBufferFormatInfo.depthBits;
@@ -1018,24 +1029,21 @@ egl::ConfigSet Renderer11::generateConfigs()
config.matchNativePixmap = EGL_NONE;
config.maxPBufferWidth = rendererCaps.max2DTextureSize;
config.maxPBufferHeight = rendererCaps.max2DTextureSize;
- config.maxPBufferPixels = rendererCaps.max2DTextureSize * rendererCaps.max2DTextureSize;
- config.maxSwapInterval = 4;
- config.minSwapInterval = 0;
- config.nativeRenderable = EGL_FALSE;
- config.nativeVisualID = 0;
- config.nativeVisualType = EGL_NONE;
-
- // Can't support ES3 at all without feature level 10.1
- config.renderableType = EGL_OPENGL_ES2_BIT;
- if (maxVersion.major >= 3)
- {
- config.renderableType |= EGL_OPENGL_ES3_BIT_KHR;
- }
-
- config.sampleBuffers = 0; // FIXME: enumerate multi-sampling
- config.samples = 0;
- config.stencilSize = depthStencilBufferFormatInfo.stencilBits;
- config.surfaceType = EGL_PBUFFER_BIT | EGL_WINDOW_BIT | EGL_SWAP_BEHAVIOR_PRESERVED_BIT;
+ config.maxPBufferPixels = rendererCaps.max2DTextureSize * rendererCaps.max2DTextureSize;
+ config.maxSwapInterval = 4;
+ config.minSwapInterval = 0;
+ config.nativeRenderable = EGL_FALSE;
+ config.nativeVisualID = 0;
+ config.nativeVisualType = EGL_NONE;
+ // Can't support ES3 at all without feature level 10.0
+ config.renderableType =
+ EGL_OPENGL_ES2_BIT | ((mRenderer11DeviceCaps.featureLevel >= D3D_FEATURE_LEVEL_10_0)
+ ? EGL_OPENGL_ES3_BIT_KHR
+ : 0);
+ config.sampleBuffers = 0; // FIXME: enumerate multi-sampling
+ config.samples = 0;
+ config.stencilSize = depthStencilBufferFormatInfo.stencilBits;
+ config.surfaceType = EGL_PBUFFER_BIT | EGL_WINDOW_BIT | EGL_SWAP_BEHAVIOR_PRESERVED_BIT;
config.transparentType = EGL_NONE;
config.transparentRedValue = 0;
config.transparentGreenValue = 0;
@@ -1059,9 +1067,8 @@ void Renderer11::generateDisplayExtensions(egl::DisplayExtensions *outExtensions
outExtensions->d3dShareHandleClientBuffer = true;
outExtensions->surfaceD3DTexture2DShareHandle = true;
}
- outExtensions->d3dTextureClientBuffer = true;
- outExtensions->keyedMutex = true;
+ outExtensions->keyedMutex = true;
outExtensions->querySurfacePointer = true;
outExtensions->windowFixedSize = true;
@@ -1105,15 +1112,14 @@ gl::Error Renderer11::finish()
if (!mSyncQuery)
{
D3D11_QUERY_DESC queryDesc;
- queryDesc.Query = D3D11_QUERY_EVENT;
+ queryDesc.Query = D3D11_QUERY_EVENT;
queryDesc.MiscFlags = 0;
result = mDevice->CreateQuery(&queryDesc, &mSyncQuery);
ASSERT(SUCCEEDED(result));
if (FAILED(result))
{
- return gl::Error(GL_OUT_OF_MEMORY, "Failed to create event query, result: 0x%X.",
- result);
+ return gl::Error(GL_OUT_OF_MEMORY, "Failed to create event query, result: 0x%X.", result);
}
}
@@ -1129,8 +1135,7 @@ gl::Error Renderer11::finish()
result = mDeviceContext->GetData(mSyncQuery, NULL, 0, flags);
if (FAILED(result))
{
- return gl::Error(GL_OUT_OF_MEMORY, "Failed to get event query data, result: 0x%X.",
- result);
+ return gl::Error(GL_OUT_OF_MEMORY, "Failed to get event query data, result: 0x%X.", result);
}
// Keep polling, but allow other threads to do something useful first
@@ -1141,7 +1146,8 @@ gl::Error Renderer11::finish()
mDisplay->notifyDeviceLost();
return gl::Error(GL_OUT_OF_MEMORY, "Device was lost while waiting for sync.");
}
- } while (result == S_FALSE);
+ }
+ while (result == S_FALSE);
return gl::Error(GL_NO_ERROR);
}
@@ -1169,124 +1175,19 @@ NativeWindowD3D *Renderer11::createNativeWindow(EGLNativeWindowType window,
#endif
}
-egl::Error Renderer11::getD3DTextureInfo(IUnknown *d3dTexture,
- EGLint *width,
- EGLint *height,
- GLenum *fboFormat) const
-{
- ID3D11Texture2D *texture = d3d11::DynamicCastComObject<ID3D11Texture2D>(d3dTexture);
- if (texture == nullptr)
- {
- return egl::Error(EGL_BAD_PARAMETER, "client buffer is not a ID3D11Texture2D");
- }
-
- ID3D11Device *textureDevice = nullptr;
- texture->GetDevice(&textureDevice);
- if (textureDevice != mDevice)
- {
- SafeRelease(texture);
- return egl::Error(EGL_BAD_PARAMETER, "Texture's device does not match.");
- }
- SafeRelease(textureDevice);
-
- D3D11_TEXTURE2D_DESC desc = {0};
- texture->GetDesc(&desc);
- SafeRelease(texture);
-
- if (width)
- {
- *width = static_cast<EGLint>(desc.Width);
- }
- if (height)
- {
- *height = static_cast<EGLint>(desc.Height);
- }
-
- // From table egl.restrictions in EGL_ANGLE_d3d_texture_client_buffer.
- switch (desc.Format)
- {
- case DXGI_FORMAT_R8G8B8A8_UNORM:
- case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB:
- case DXGI_FORMAT_B8G8R8A8_UNORM:
- case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB:
- case DXGI_FORMAT_R16G16B16A16_FLOAT:
- case DXGI_FORMAT_R32G32B32A32_FLOAT:
- break;
-
- default:
- return egl::Error(EGL_BAD_PARAMETER, "Unknown client buffer texture format: %u.",
- desc.Format);
- }
-
- if (fboFormat)
- {
- const angle::Format &angleFormat = d3d11_angle::GetFormat(desc.Format);
- *fboFormat = angleFormat.fboImplementationInternalFormat;
- }
-
- return egl::Error(EGL_SUCCESS);
-}
-
-egl::Error Renderer11::validateShareHandle(const egl::Config *config,
- HANDLE shareHandle,
- const egl::AttributeMap &attribs) const
-{
- if (shareHandle == nullptr)
- {
- return egl::Error(EGL_BAD_PARAMETER, "NULL share handle.");
- }
-
- ID3D11Resource *tempResource11 = nullptr;
- HRESULT result = mDevice->OpenSharedResource(shareHandle, __uuidof(ID3D11Resource),
- (void **)&tempResource11);
- if (FAILED(result))
- {
- return egl::Error(EGL_BAD_PARAMETER, "Failed to open share handle, result: 0x%X.", result);
- }
-
- ID3D11Texture2D *texture2D = d3d11::DynamicCastComObject<ID3D11Texture2D>(tempResource11);
- SafeRelease(tempResource11);
-
- if (texture2D == nullptr)
- {
- return egl::Error(EGL_BAD_PARAMETER,
- "Failed to query ID3D11Texture2D object from share handle.");
- }
-
- D3D11_TEXTURE2D_DESC desc = {0};
- texture2D->GetDesc(&desc);
- SafeRelease(texture2D);
-
- EGLint width = attribs.getAsInt(EGL_WIDTH, 0);
- EGLint height = attribs.getAsInt(EGL_HEIGHT, 0);
- ASSERT(width != 0 && height != 0);
-
- const d3d11::Format &backbufferFormatInfo =
- d3d11::Format::Get(config->renderTargetFormat, getRenderer11DeviceCaps());
-
- if (desc.Width != static_cast<UINT>(width) || desc.Height != static_cast<UINT>(height) ||
- desc.Format != backbufferFormatInfo.texFormat || desc.MipLevels != 1 || desc.ArraySize != 1)
- {
- return egl::Error(EGL_BAD_PARAMETER, "Invalid texture parameters in share handle texture.");
- }
-
- return egl::Error(EGL_SUCCESS);
-}
-
SwapChainD3D *Renderer11::createSwapChain(NativeWindowD3D *nativeWindow,
HANDLE shareHandle,
- IUnknown *d3dTexture,
GLenum backBufferFormat,
GLenum depthBufferFormat,
EGLint orientation)
{
- return new SwapChain11(this, GetAs<NativeWindow11>(nativeWindow), shareHandle, d3dTexture,
- backBufferFormat, depthBufferFormat, orientation);
+ return new SwapChain11(this, GetAs<NativeWindow11>(nativeWindow), shareHandle, backBufferFormat,
+ depthBufferFormat, orientation);
}
void *Renderer11::getD3DDevice()
{
- return reinterpret_cast<void *>(mDevice);
+ return reinterpret_cast<void*>(mDevice);
}
gl::Error Renderer11::generateSwizzle(gl::Texture *texture)
@@ -1297,13 +1198,21 @@ gl::Error Renderer11::generateSwizzle(gl::Texture *texture)
ASSERT(textureD3D);
TextureStorage *texStorage = nullptr;
- ANGLE_TRY(textureD3D->getNativeTexture(&texStorage));
+ gl::Error error = textureD3D->getNativeTexture(&texStorage);
+ if (error.isError())
+ {
+ return error;
+ }
if (texStorage)
{
- TextureStorage11 *storage11 = GetAs<TextureStorage11>(texStorage);
+ TextureStorage11 *storage11 = GetAs<TextureStorage11>(texStorage);
const gl::TextureState &textureState = texture->getTextureState();
- ANGLE_TRY(storage11->generateSwizzles(textureState.getSwizzleState()));
+ error = storage11->generateSwizzles(textureState.getSwizzleState());
+ if (error.isError())
+ {
+ return error;
+ }
}
}
@@ -1349,7 +1258,11 @@ gl::Error Renderer11::setSamplerState(gl::SamplerType type,
TextureD3D *textureD3D = GetImplAs<TextureD3D>(texture);
TextureStorage *storage = nullptr;
- ANGLE_TRY(textureD3D->getNativeTexture(&storage));
+ gl::Error error = textureD3D->getNativeTexture(&storage);
+ if (error.isError())
+ {
+ return error;
+ }
// Storage should exist, texture should be complete
ASSERT(storage);
@@ -1367,7 +1280,11 @@ gl::Error Renderer11::setSamplerState(gl::SamplerType type,
memcmp(&samplerState, &mCurPixelSamplerStates[index], sizeof(gl::SamplerState)) != 0)
{
ID3D11SamplerState *dxSamplerState = NULL;
- ANGLE_TRY(mStateCache.getSamplerState(samplerState, &dxSamplerState));
+ error = mStateCache.getSamplerState(samplerState, &dxSamplerState);
+ if (error.isError())
+ {
+ return error;
+ }
ASSERT(dxSamplerState != NULL);
mDeviceContext->PSSetSamplers(index, 1, &dxSamplerState);
@@ -1387,7 +1304,11 @@ gl::Error Renderer11::setSamplerState(gl::SamplerType type,
memcmp(&samplerState, &mCurVertexSamplerStates[index], sizeof(gl::SamplerState)) != 0)
{
ID3D11SamplerState *dxSamplerState = NULL;
- ANGLE_TRY(mStateCache.getSamplerState(samplerState, &dxSamplerState));
+ error = mStateCache.getSamplerState(samplerState, &dxSamplerState);
+ if (error.isError())
+ {
+ return error;
+ }
ASSERT(dxSamplerState != NULL);
mDeviceContext->VSSetSamplers(index, 1, &dxSamplerState);
@@ -1399,13 +1320,12 @@ gl::Error Renderer11::setSamplerState(gl::SamplerType type,
metadata = &mSamplerMetadataVS;
}
- else
- UNREACHABLE();
+ else UNREACHABLE();
ASSERT(metadata != nullptr);
metadata->update(index, *texture);
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
gl::Error Renderer11::setTexture(gl::SamplerType type, int index, gl::Texture *texture)
@@ -1417,7 +1337,11 @@ gl::Error Renderer11::setTexture(gl::SamplerType type, int index, gl::Texture *t
TextureD3D *textureImpl = GetImplAs<TextureD3D>(texture);
TextureStorage *texStorage = nullptr;
- ANGLE_TRY(textureImpl->getNativeTexture(&texStorage));
+ gl::Error error = textureImpl->getNativeTexture(&texStorage);
+ if (error.isError())
+ {
+ return error;
+ }
// Texture should be complete and have a storage
ASSERT(texStorage);
@@ -1426,8 +1350,8 @@ gl::Error Renderer11::setTexture(gl::SamplerType type, int index, gl::Texture *t
ANGLE_TRY(storage11->getSRV(texture->getTextureState(), &textureSRV));
- // If we get NULL back from getSRV here, something went wrong in the texture class and we're
- // unexpectedly missing the shader resource view
+ // If we get NULL back from getSRV here, something went wrong in the texture class and we're unexpectedly
+ // missing the shader resource view
ASSERT(textureSRV != NULL);
textureImpl->resetDirty();
@@ -1447,8 +1371,7 @@ gl::Error Renderer11::setUniformBuffers(const gl::ContextState &data,
const std::vector<GLint> &vertexUniformBuffers,
const std::vector<GLint> &fragmentUniformBuffers)
{
- for (size_t uniformBufferIndex = 0; uniformBufferIndex < vertexUniformBuffers.size();
- uniformBufferIndex++)
+ for (size_t uniformBufferIndex = 0; uniformBufferIndex < vertexUniformBuffers.size(); uniformBufferIndex++)
{
GLint binding = vertexUniformBuffers[uniformBufferIndex];
@@ -1469,12 +1392,10 @@ gl::Error Renderer11::setUniformBuffers(const gl::ContextState &data,
Buffer11 *bufferStorage = GetImplAs<Buffer11>(uniformBuffer.get());
ID3D11Buffer *constantBuffer = nullptr;
- UINT firstConstant = 0;
- UINT numConstants = 0;
- ANGLE_TRY(bufferStorage->getConstantBufferRange(uniformBufferOffset, uniformBufferSize,
- &constantBuffer, &firstConstant,
- &numConstants));
+ ANGLE_TRY_RESULT(
+ bufferStorage->getConstantBufferRange(uniformBufferOffset, uniformBufferSize),
+ constantBuffer);
if (!constantBuffer)
{
@@ -1485,9 +1406,11 @@ gl::Error Renderer11::setUniformBuffers(const gl::ContextState &data,
mCurrentConstantBufferVSOffset[uniformBufferIndex] != uniformBufferOffset ||
mCurrentConstantBufferVSSize[uniformBufferIndex] != uniformBufferSize)
{
- if (firstConstant != 0 && uniformBufferSize != 0)
+ if (mRenderer11DeviceCaps.supportsConstantBufferOffsets && uniformBufferSize != 0)
{
- ASSERT(numConstants != 0);
+ UINT firstConstant = 0, numConstants = 0;
+ CalculateConstantBufferParams(uniformBufferOffset, uniformBufferSize,
+ &firstConstant, &numConstants);
mDeviceContext1->VSSetConstantBuffers1(
getReservedVertexUniformBuffers() +
static_cast<unsigned int>(uniformBufferIndex),
@@ -1507,8 +1430,7 @@ gl::Error Renderer11::setUniformBuffers(const gl::ContextState &data,
}
}
- for (size_t uniformBufferIndex = 0; uniformBufferIndex < fragmentUniformBuffers.size();
- uniformBufferIndex++)
+ for (size_t uniformBufferIndex = 0; uniformBufferIndex < fragmentUniformBuffers.size(); uniformBufferIndex++)
{
GLint binding = fragmentUniformBuffers[uniformBufferIndex];
@@ -1529,12 +1451,10 @@ gl::Error Renderer11::setUniformBuffers(const gl::ContextState &data,
Buffer11 *bufferStorage = GetImplAs<Buffer11>(uniformBuffer.get());
ID3D11Buffer *constantBuffer = nullptr;
- UINT firstConstant = 0;
- UINT numConstants = 0;
- ANGLE_TRY(bufferStorage->getConstantBufferRange(uniformBufferOffset, uniformBufferSize,
- &constantBuffer, &firstConstant,
- &numConstants));
+ ANGLE_TRY_RESULT(
+ bufferStorage->getConstantBufferRange(uniformBufferOffset, uniformBufferSize),
+ constantBuffer);
if (!constantBuffer)
{
@@ -1545,8 +1465,11 @@ gl::Error Renderer11::setUniformBuffers(const gl::ContextState &data,
mCurrentConstantBufferPSOffset[uniformBufferIndex] != uniformBufferOffset ||
mCurrentConstantBufferPSSize[uniformBufferIndex] != uniformBufferSize)
{
- if (firstConstant != 0 && uniformBufferSize != 0)
+ if (mRenderer11DeviceCaps.supportsConstantBufferOffsets && uniformBufferSize != 0)
{
+ UINT firstConstant = 0, numConstants = 0;
+ CalculateConstantBufferParams(uniformBufferOffset, uniformBufferSize,
+ &firstConstant, &numConstants);
mDeviceContext1->PSSetConstantBuffers1(
getReservedFragmentUniformBuffers() +
static_cast<unsigned int>(uniformBufferIndex),
@@ -1592,17 +1515,7 @@ gl::Error Renderer11::updateState(const gl::ContextState &data, GLenum drawMode)
mStateManager.setScissorRectangle(glState.getScissor(), glState.isScissorTestEnabled());
// Applying rasterizer state to D3D11 device
- // Since framebuffer->getSamples will return the original samples which may be different with
- // the sample counts that we set in render target view, here we use renderTarget->getSamples to
- // get the actual samples.
- GLsizei samples = 0;
- if (firstColorAttachment)
- {
- ASSERT(firstColorAttachment->isAttached());
- RenderTarget11 *renderTarget = nullptr;
- ANGLE_TRY(firstColorAttachment->getRenderTarget(&renderTarget));
- samples = renderTarget->getSamples();
- }
+ int samples = framebuffer->getSamples(data);
gl::RasterizerState rasterizer = glState.getRasterizerState();
rasterizer.pointDrawMode = (drawMode == GL_POINTS);
rasterizer.multiSample = (samples != 0);
@@ -1628,44 +1541,22 @@ bool Renderer11::applyPrimitiveType(GLenum mode, GLsizei count, bool usesPointSi
switch (mode)
{
- case GL_POINTS:
- primitiveTopology = D3D11_PRIMITIVE_TOPOLOGY_POINTLIST;
- minCount = 1;
- break;
- case GL_LINES:
- primitiveTopology = D3D_PRIMITIVE_TOPOLOGY_LINELIST;
- minCount = 2;
- break;
- case GL_LINE_LOOP:
- primitiveTopology = D3D_PRIMITIVE_TOPOLOGY_LINESTRIP;
- minCount = 2;
- break;
- case GL_LINE_STRIP:
- primitiveTopology = D3D_PRIMITIVE_TOPOLOGY_LINESTRIP;
- minCount = 2;
- break;
- case GL_TRIANGLES:
- primitiveTopology = D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST;
- minCount = 3;
- break;
- case GL_TRIANGLE_STRIP:
- primitiveTopology = D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP;
- minCount = 3;
- break;
- // emulate fans via rewriting index buffer
- case GL_TRIANGLE_FAN:
- primitiveTopology = D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST;
- minCount = 3;
- break;
- default:
- UNREACHABLE();
- return false;
+ case GL_POINTS: primitiveTopology = D3D11_PRIMITIVE_TOPOLOGY_POINTLIST; minCount = 1; break;
+ case GL_LINES: primitiveTopology = D3D_PRIMITIVE_TOPOLOGY_LINELIST; minCount = 2; break;
+ case GL_LINE_LOOP: primitiveTopology = D3D_PRIMITIVE_TOPOLOGY_LINESTRIP; minCount = 2; break;
+ case GL_LINE_STRIP: primitiveTopology = D3D_PRIMITIVE_TOPOLOGY_LINESTRIP; minCount = 2; break;
+ case GL_TRIANGLES: primitiveTopology = D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST; minCount = 3; break;
+ case GL_TRIANGLE_STRIP: primitiveTopology = D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP; minCount = 3; break;
+ // emulate fans via rewriting index buffer
+ case GL_TRIANGLE_FAN: primitiveTopology = D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST; minCount = 3; break;
+ default:
+ UNREACHABLE();
+ return false;
}
// If instanced pointsprite emulation is being used and If gl_PointSize is used in the shader,
// GL_POINTS mode is expected to render pointsprites.
- // Instanced PointSprite emulation requires that the topology to be
- // D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST.
+ // Instanced PointSprite emulation requires that the topology to be D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST.
if (mode == GL_POINTS && usesPointSize && getWorkarounds().useInstancedPointSpriteEmulation)
{
primitiveTopology = D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST;
@@ -1695,10 +1586,18 @@ gl::Error Renderer11::applyVertexBuffer(const gl::State &state,
const auto &vertexArray = state.getVertexArray();
auto *vertexArray11 = GetImplAs<VertexArray11>(vertexArray);
- ANGLE_TRY(vertexArray11->updateDirtyAndDynamicAttribs(mVertexDataManager, state, first, count,
- instances));
+ gl::Error error = vertexArray11->updateDirtyAndDynamicAttribs(mVertexDataManager, state, first,
+ count, instances);
+ if (error.isError())
+ {
+ return error;
+ }
- ANGLE_TRY(mStateManager.updateCurrentValueAttribs(state, mVertexDataManager));
+ error = mStateManager.updateCurrentValueAttribs(state, mVertexDataManager);
+ if (error.isError())
+ {
+ return error;
+ }
// If index information is passed, mark it with the current changed status.
if (indexInfo)
@@ -1742,8 +1641,7 @@ gl::Error Renderer11::applyIndexBuffer(const gl::ContextState &data,
indexInfo, glState.isPrimitiveRestartEnabled()));
ID3D11Buffer *buffer = nullptr;
- DXGI_FORMAT bufferFormat =
- (indexInfo->indexType == GL_UNSIGNED_INT) ? DXGI_FORMAT_R32_UINT : DXGI_FORMAT_R16_UINT;
+ DXGI_FORMAT bufferFormat = (indexInfo->indexType == GL_UNSIGNED_INT) ? DXGI_FORMAT_R32_UINT : DXGI_FORMAT_R16_UINT;
if (indexInfo->storage)
{
@@ -1752,19 +1650,18 @@ gl::Error Renderer11::applyIndexBuffer(const gl::ContextState &data,
}
else
{
- IndexBuffer11 *indexBuffer = GetAs<IndexBuffer11>(indexInfo->indexBuffer);
- buffer = indexBuffer->getBuffer();
+ IndexBuffer11* indexBuffer = GetAs<IndexBuffer11>(indexInfo->indexBuffer);
+ buffer = indexBuffer->getBuffer();
}
mAppliedIBChanged = false;
- if (buffer != mAppliedIB || bufferFormat != mAppliedIBFormat ||
- indexInfo->startOffset != mAppliedIBOffset)
+ if (buffer != mAppliedIB || bufferFormat != mAppliedIBFormat || indexInfo->startOffset != mAppliedIBOffset)
{
mDeviceContext->IASetIndexBuffer(buffer, bufferFormat, indexInfo->startOffset);
- mAppliedIB = buffer;
- mAppliedIBFormat = bufferFormat;
- mAppliedIBOffset = indexInfo->startOffset;
+ mAppliedIB = buffer;
+ mAppliedIBFormat = bufferFormat;
+ mAppliedIBOffset = indexInfo->startOffset;
mAppliedIBChanged = true;
}
@@ -1834,8 +1731,12 @@ gl::Error Renderer11::drawArraysImpl(const gl::ContextState &data,
}
rx::ShaderExecutableD3D *pixelExe = nullptr;
- ANGLE_TRY(
- programD3D->getPixelExecutableForFramebuffer(glState.getDrawFramebuffer(), &pixelExe));
+ gl::Error error =
+ programD3D->getPixelExecutableForFramebuffer(glState.getDrawFramebuffer(), &pixelExe);
+ if (error.isError())
+ {
+ return error;
+ }
// Skip the draw call if rasterizer discard is enabled (or no fragment shader).
if (!pixelExe || glState.getRasterizerState().rasterizerDiscard)
@@ -1849,8 +1750,12 @@ gl::Error Renderer11::drawArraysImpl(const gl::ContextState &data,
// Retrieve the geometry shader.
rx::ShaderExecutableD3D *geometryExe = nullptr;
- ANGLE_TRY(
- programD3D->getGeometryExecutableForPrimitiveType(data, mode, &geometryExe, nullptr));
+ error =
+ programD3D->getGeometryExecutableForPrimitiveType(data, mode, &geometryExe, nullptr);
+ if (error.isError())
+ {
+ return error;
+ }
ID3D11GeometryShader *geometryShader =
(geometryExe ? GetAs<ShaderExecutable11>(geometryExe)->getGeometryShader() : NULL);
@@ -2009,10 +1914,14 @@ gl::Error Renderer11::drawLineLoop(const gl::ContextState &data,
if (type != GL_NONE && elementArrayBuffer)
{
BufferD3D *storage = GetImplAs<BufferD3D>(elementArrayBuffer);
- intptr_t offset = reinterpret_cast<intptr_t>(indices);
+ intptr_t offset = reinterpret_cast<intptr_t>(indices);
const uint8_t *bufferData = NULL;
- ANGLE_TRY(storage->getData(&bufferData));
+ gl::Error error = storage->getData(&bufferData);
+ if (error.isError())
+ {
+ return error;
+ }
indices = bufferData + offset;
}
@@ -2020,8 +1929,7 @@ gl::Error Renderer11::drawLineLoop(const gl::ContextState &data,
if (!mLineLoopIB)
{
mLineLoopIB = new StreamingIndexBufferInterface(this);
- gl::Error error =
- mLineLoopIB->reserveBufferSpace(INITIAL_INDEX_BUFFER_SIZE, GL_UNSIGNED_INT);
+ gl::Error error = mLineLoopIB->reserveBufferSpace(INITIAL_INDEX_BUFFER_SIZE, GL_UNSIGNED_INT);
if (error.isError())
{
SafeDelete(mLineLoopIB);
@@ -2032,12 +1940,9 @@ gl::Error Renderer11::drawLineLoop(const gl::ContextState &data,
// Checked by Renderer11::applyPrimitiveType
ASSERT(count >= 0);
- if (static_cast<unsigned int>(count) + 1 >
- (std::numeric_limits<unsigned int>::max() / sizeof(unsigned int)))
+ if (static_cast<unsigned int>(count) + 1 > (std::numeric_limits<unsigned int>::max() / sizeof(unsigned int)))
{
- return gl::Error(GL_OUT_OF_MEMORY,
- "Failed to create a 32-bit looping index buffer for GL_LINE_LOOP, too "
- "many indices required.");
+ return gl::Error(GL_OUT_OF_MEMORY, "Failed to create a 32-bit looping index buffer for GL_LINE_LOOP, too many indices required.");
}
GetLineLoopIndices(indices, type, static_cast<GLuint>(count),
@@ -2045,33 +1950,45 @@ gl::Error Renderer11::drawLineLoop(const gl::ContextState &data,
unsigned int spaceNeeded =
static_cast<unsigned int>(sizeof(GLuint) * mScratchIndexDataBuffer.size());
- ANGLE_TRY(mLineLoopIB->reserveBufferSpace(spaceNeeded, GL_UNSIGNED_INT));
+ gl::Error error = mLineLoopIB->reserveBufferSpace(spaceNeeded, GL_UNSIGNED_INT);
+ if (error.isError())
+ {
+ return error;
+ }
- void *mappedMemory = NULL;
+ void* mappedMemory = NULL;
unsigned int offset;
- ANGLE_TRY(mLineLoopIB->mapBuffer(spaceNeeded, &mappedMemory, &offset));
+ error = mLineLoopIB->mapBuffer(spaceNeeded, &mappedMemory, &offset);
+ if (error.isError())
+ {
+ return error;
+ }
// Copy over the converted index data.
memcpy(mappedMemory, &mScratchIndexDataBuffer[0],
sizeof(GLuint) * mScratchIndexDataBuffer.size());
- ANGLE_TRY(mLineLoopIB->unmapBuffer());
+ error = mLineLoopIB->unmapBuffer();
+ if (error.isError())
+ {
+ return error;
+ }
- IndexBuffer11 *indexBuffer = GetAs<IndexBuffer11>(mLineLoopIB->getIndexBuffer());
+ IndexBuffer11 *indexBuffer = GetAs<IndexBuffer11>(mLineLoopIB->getIndexBuffer());
ID3D11Buffer *d3dIndexBuffer = indexBuffer->getBuffer();
- DXGI_FORMAT indexFormat = indexBuffer->getIndexFormat();
+ DXGI_FORMAT indexFormat = indexBuffer->getIndexFormat();
if (mAppliedIB != d3dIndexBuffer || mAppliedIBFormat != indexFormat ||
mAppliedIBOffset != offset)
{
mDeviceContext->IASetIndexBuffer(d3dIndexBuffer, indexFormat, offset);
- mAppliedIB = d3dIndexBuffer;
+ mAppliedIB = d3dIndexBuffer;
mAppliedIBFormat = indexFormat;
mAppliedIBOffset = offset;
}
INT baseVertexLocation = (indexInfo ? -static_cast<int>(indexInfo->indexRange.start) : 0);
- UINT indexCount = static_cast<UINT>(mScratchIndexDataBuffer.size());
+ UINT indexCount = static_cast<UINT>(mScratchIndexDataBuffer.size());
if (instances > 0)
{
@@ -2082,7 +1999,7 @@ gl::Error Renderer11::drawLineLoop(const gl::ContextState &data,
mDeviceContext->DrawIndexed(indexCount, 0, baseVertexLocation);
}
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
gl::Error Renderer11::drawTriangleFan(const gl::ContextState &data,
@@ -2101,10 +2018,14 @@ gl::Error Renderer11::drawTriangleFan(const gl::ContextState &data,
if (type != GL_NONE && elementArrayBuffer)
{
BufferD3D *storage = GetImplAs<BufferD3D>(elementArrayBuffer);
- intptr_t offset = reinterpret_cast<intptr_t>(indices);
+ intptr_t offset = reinterpret_cast<intptr_t>(indices);
const uint8_t *bufferData = NULL;
- ANGLE_TRY(storage->getData(&bufferData));
+ gl::Error error = storage->getData(&bufferData);
+ if (error.isError())
+ {
+ return error;
+ }
indexPointer = bufferData + offset;
}
@@ -2112,8 +2033,7 @@ gl::Error Renderer11::drawTriangleFan(const gl::ContextState &data,
if (!mTriangleFanIB)
{
mTriangleFanIB = new StreamingIndexBufferInterface(this);
- gl::Error error =
- mTriangleFanIB->reserveBufferSpace(INITIAL_INDEX_BUFFER_SIZE, GL_UNSIGNED_INT);
+ gl::Error error = mTriangleFanIB->reserveBufferSpace(INITIAL_INDEX_BUFFER_SIZE, GL_UNSIGNED_INT);
if (error.isError())
{
SafeDelete(mTriangleFanIB);
@@ -2128,9 +2048,7 @@ gl::Error Renderer11::drawTriangleFan(const gl::ContextState &data,
if (numTris > (std::numeric_limits<unsigned int>::max() / (sizeof(unsigned int) * 3)))
{
- return gl::Error(GL_OUT_OF_MEMORY,
- "Failed to create a scratch index buffer for GL_TRIANGLE_FAN, too many "
- "indices required.");
+ return gl::Error(GL_OUT_OF_MEMORY, "Failed to create a scratch index buffer for GL_TRIANGLE_FAN, too many indices required.");
}
GetTriFanIndices(indexPointer, type, count, data.getState().isPrimitiveRestartEnabled(),
@@ -2138,25 +2056,37 @@ gl::Error Renderer11::drawTriangleFan(const gl::ContextState &data,
const unsigned int spaceNeeded =
static_cast<unsigned int>(mScratchIndexDataBuffer.size() * sizeof(unsigned int));
- ANGLE_TRY(mTriangleFanIB->reserveBufferSpace(spaceNeeded, GL_UNSIGNED_INT));
+ gl::Error error = mTriangleFanIB->reserveBufferSpace(spaceNeeded, GL_UNSIGNED_INT);
+ if (error.isError())
+ {
+ return error;
+ }
void *mappedMemory = nullptr;
unsigned int offset;
- ANGLE_TRY(mTriangleFanIB->mapBuffer(spaceNeeded, &mappedMemory, &offset));
+ error = mTriangleFanIB->mapBuffer(spaceNeeded, &mappedMemory, &offset);
+ if (error.isError())
+ {
+ return error;
+ }
memcpy(mappedMemory, &mScratchIndexDataBuffer[0], spaceNeeded);
- ANGLE_TRY(mTriangleFanIB->unmapBuffer());
+ error = mTriangleFanIB->unmapBuffer();
+ if (error.isError())
+ {
+ return error;
+ }
- IndexBuffer11 *indexBuffer = GetAs<IndexBuffer11>(mTriangleFanIB->getIndexBuffer());
+ IndexBuffer11 *indexBuffer = GetAs<IndexBuffer11>(mTriangleFanIB->getIndexBuffer());
ID3D11Buffer *d3dIndexBuffer = indexBuffer->getBuffer();
- DXGI_FORMAT indexFormat = indexBuffer->getIndexFormat();
+ DXGI_FORMAT indexFormat = indexBuffer->getIndexFormat();
if (mAppliedIB != d3dIndexBuffer || mAppliedIBFormat != indexFormat ||
mAppliedIBOffset != offset)
{
mDeviceContext->IASetIndexBuffer(d3dIndexBuffer, indexFormat, offset);
- mAppliedIB = d3dIndexBuffer;
+ mAppliedIB = d3dIndexBuffer;
mAppliedIBFormat = indexFormat;
mAppliedIBOffset = offset;
}
@@ -2172,7 +2102,7 @@ gl::Error Renderer11::drawTriangleFan(const gl::ContextState &data,
mDeviceContext->DrawIndexed(indexCount, 0, -minIndex);
}
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
gl::Error Renderer11::applyShaders(const gl::ContextState &data, GLenum drawMode)
@@ -2224,21 +2154,21 @@ gl::Error Renderer11::applyShaders(const gl::ContextState &data, GLenum drawMode
{
mDeviceContext->VSSetShader(vertexShader, nullptr, 0);
mAppliedVertexShader = reinterpret_cast<uintptr_t>(vertexShader);
- dirtyUniforms = true;
+ dirtyUniforms = true;
}
if (reinterpret_cast<uintptr_t>(geometryShader) != mAppliedGeometryShader)
{
mDeviceContext->GSSetShader(geometryShader, nullptr, 0);
mAppliedGeometryShader = reinterpret_cast<uintptr_t>(geometryShader);
- dirtyUniforms = true;
+ dirtyUniforms = true;
}
if (reinterpret_cast<uintptr_t>(pixelShader) != mAppliedPixelShader)
{
mDeviceContext->PSSetShader(pixelShader, nullptr, 0);
mAppliedPixelShader = reinterpret_cast<uintptr_t>(pixelShader);
- dirtyUniforms = true;
+ dirtyUniforms = true;
}
if (dirtyUniforms)
@@ -2257,7 +2187,7 @@ gl::Error Renderer11::applyUniforms(const ProgramD3D &programD3D,
unsigned int totalRegisterCountPS = 0;
bool vertexUniformsDirty = false;
- bool pixelUniformsDirty = false;
+ bool pixelUniformsDirty = false;
for (const D3DUniform *uniform : uniformArray)
{
@@ -2282,16 +2212,16 @@ gl::Error Renderer11::applyUniforms(const ProgramD3D &programD3D,
ASSERT(fragmentUniformStorage);
ID3D11Buffer *vertexConstantBuffer = vertexUniformStorage->getConstantBuffer();
- ID3D11Buffer *pixelConstantBuffer = fragmentUniformStorage->getConstantBuffer();
+ ID3D11Buffer *pixelConstantBuffer = fragmentUniformStorage->getConstantBuffer();
- float(*mapVS)[4] = NULL;
- float(*mapPS)[4] = NULL;
+ float (*mapVS)[4] = NULL;
+ float (*mapPS)[4] = NULL;
if (totalRegisterCountVS > 0 && vertexUniformsDirty)
{
D3D11_MAPPED_SUBRESOURCE map = {0};
- HRESULT result =
- mDeviceContext->Map(vertexConstantBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &map);
+ HRESULT result = mDeviceContext->Map(vertexConstantBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &map);
+ UNUSED_ASSERTION_VARIABLE(result);
ASSERT(SUCCEEDED(result));
mapVS = (float(*)[4])map.pData;
}
@@ -2299,8 +2229,8 @@ gl::Error Renderer11::applyUniforms(const ProgramD3D &programD3D,
if (totalRegisterCountPS > 0 && pixelUniformsDirty)
{
D3D11_MAPPED_SUBRESOURCE map = {0};
- HRESULT result =
- mDeviceContext->Map(pixelConstantBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &map);
+ HRESULT result = mDeviceContext->Map(pixelConstantBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &map);
+ UNUSED_ASSERTION_VARIABLE(result);
ASSERT(SUCCEEDED(result));
mapPS = (float(*)[4])map.pData;
}
@@ -2363,9 +2293,7 @@ gl::Error Renderer11::applyUniforms(const ProgramD3D &programD3D,
ASSERT(SUCCEEDED(result));
if (FAILED(result))
{
- return gl::Error(GL_OUT_OF_MEMORY,
- "Failed to create vertex shader constant buffer, result: 0x%X.",
- result);
+ return gl::Error(GL_OUT_OF_MEMORY, "Failed to create vertex shader constant buffer, result: 0x%X.", result);
}
mDeviceContext->VSSetConstantBuffers(d3d11::RESERVED_CONSTANT_BUFFER_SLOT_DRIVER, 1,
&mDriverConstantBufferVS);
@@ -2380,9 +2308,7 @@ gl::Error Renderer11::applyUniforms(const ProgramD3D &programD3D,
ASSERT(SUCCEEDED(result));
if (FAILED(result))
{
- return gl::Error(GL_OUT_OF_MEMORY,
- "Failed to create pixel shader constant buffer, result: 0x%X.",
- result);
+ return gl::Error(GL_OUT_OF_MEMORY, "Failed to create pixel shader constant buffer, result: 0x%X.", result);
}
mDeviceContext->PSSetConstantBuffers(d3d11::RESERVED_CONSTANT_BUFFER_SLOT_DRIVER, 1,
&mDriverConstantBufferPS);
@@ -2391,13 +2317,13 @@ gl::Error Renderer11::applyUniforms(const ProgramD3D &programD3D,
// Sampler metadata and driver constants need to coexist in the same constant buffer to conserve
// constant buffer slots. We update both in the constant buffer if needed.
const dx_VertexConstants11 &vertexConstants = mStateManager.getVertexConstants();
- size_t samplerMetadataReferencedBytesVS = sizeof(SamplerMetadataD3D11::dx_SamplerMetadata) *
+ size_t samplerMetadataReferencedBytesVS = sizeof(SamplerMetadataD3D11::dx_SamplerMetadata) *
programD3D.getUsedSamplerRange(gl::SAMPLER_VERTEX);
applyDriverConstantsIfNeeded(&mAppliedVertexConstants, vertexConstants, &mSamplerMetadataVS,
samplerMetadataReferencedBytesVS, mDriverConstantBufferVS);
const dx_PixelConstants11 &pixelConstants = mStateManager.getPixelConstants();
- size_t samplerMetadataReferencedBytesPS = sizeof(SamplerMetadataD3D11::dx_SamplerMetadata) *
+ size_t samplerMetadataReferencedBytesPS = sizeof(SamplerMetadataD3D11::dx_SamplerMetadata) *
programD3D.getUsedSamplerRange(gl::SAMPLER_PIXEL);
applyDriverConstantsIfNeeded(&mAppliedPixelConstants, pixelConstants, &mSamplerMetadataPS,
samplerMetadataReferencedBytesPS, mDriverConstantBufferPS);
@@ -2469,7 +2395,7 @@ void Renderer11::SamplerMetadataD3D11::update(unsigned int samplerIndex, const g
case GL_R16I:
case GL_R16UI:
needIntegerTextureMetadata = true;
- internalFormatBits = 16;
+ internalFormatBits = 16;
break;
case GL_RGBA8I:
case GL_RGBA8UI:
@@ -2480,11 +2406,11 @@ void Renderer11::SamplerMetadataD3D11::update(unsigned int samplerIndex, const g
case GL_R8I:
case GL_R8UI:
needIntegerTextureMetadata = true;
- internalFormatBits = 8;
+ internalFormatBits = 8;
break;
case GL_RGB10_A2UI:
needIntegerTextureMetadata = true;
- internalFormatBits = 10;
+ internalFormatBits = 10;
break;
default:
break;
@@ -2538,6 +2464,7 @@ void Renderer11::applyDriverConstantsIfNeeded(TShaderConstants *appliedConstants
HRESULT result =
mDeviceContext->Map(driverConstantBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &mapping);
ASSERT(SUCCEEDED(result));
+ UNUSED_ASSERTION_VARIABLE(result);
memcpy(mapping.pData, appliedConstants, sizeof(TShaderConstants));
// Previous buffer contents were discarded, so we need to refresh also the area of the
// buffer that isn't used by this program.
@@ -2578,7 +2505,7 @@ void Renderer11::markAllStateDirty()
mStateManager.invalidateEverything();
- mAppliedIB = NULL;
+ mAppliedIB = NULL;
mAppliedIBFormat = DXGI_FORMAT_UNKNOWN;
mAppliedIBOffset = 0;
@@ -2595,16 +2522,16 @@ void Renderer11::markAllStateDirty()
for (unsigned int i = 0; i < gl::IMPLEMENTATION_MAX_VERTEX_SHADER_UNIFORM_BUFFERS; i++)
{
- mCurrentConstantBufferVS[i] = static_cast<unsigned int>(-1);
+ mCurrentConstantBufferVS[i] = static_cast<unsigned int>(-1);
mCurrentConstantBufferVSOffset[i] = 0;
- mCurrentConstantBufferVSSize[i] = 0;
- mCurrentConstantBufferPS[i] = static_cast<unsigned int>(-1);
+ mCurrentConstantBufferVSSize[i] = 0;
+ mCurrentConstantBufferPS[i] = static_cast<unsigned int>(-1);
mCurrentConstantBufferPSOffset[i] = 0;
- mCurrentConstantBufferPSSize[i] = 0;
+ mCurrentConstantBufferPSSize[i] = 0;
}
- mCurrentVertexConstantBuffer = NULL;
- mCurrentPixelConstantBuffer = NULL;
+ mCurrentVertexConstantBuffer = NULL;
+ mCurrentPixelConstantBuffer = NULL;
mCurrentGeometryConstantBuffer = NULL;
mCurrentPrimitiveTopology = D3D_PRIMITIVE_TOPOLOGY_UNDEFINED;
@@ -2635,14 +2562,13 @@ bool Renderer11::testDeviceLost()
{
bool isLost = false;
- if (!mDevice)
- {
+ if (!mDevice) {
return true;
}
// GetRemovedReason is used to test if the device is removed
HRESULT result = mDevice->GetDeviceRemovedReason();
- isLost = d3d11::isDeviceLostError(result);
+ isLost = d3d11::isDeviceLostError(result);
if (isLost)
{
@@ -2655,26 +2581,25 @@ bool Renderer11::testDeviceLost()
bool Renderer11::testDeviceResettable()
{
// determine if the device is resettable by creating a dummy device
- PFN_D3D11_CREATE_DEVICE D3D11CreateDevice =
- (PFN_D3D11_CREATE_DEVICE)GetProcAddress(mD3d11Module, "D3D11CreateDevice");
+ PFN_D3D11_CREATE_DEVICE D3D11CreateDevice = (PFN_D3D11_CREATE_DEVICE)GetProcAddress(mD3d11Module, "D3D11CreateDevice");
if (D3D11CreateDevice == NULL)
{
return false;
}
- ID3D11Device *dummyDevice;
+ ID3D11Device* dummyDevice;
D3D_FEATURE_LEVEL dummyFeatureLevel;
- ID3D11DeviceContext *dummyContext;
+ ID3D11DeviceContext* dummyContext;
ASSERT(mRequestedDriverType != D3D_DRIVER_TYPE_UNKNOWN);
HRESULT result = D3D11CreateDevice(
NULL, mRequestedDriverType, NULL,
-#if defined(_DEBUG)
+ #if defined(_DEBUG)
D3D11_CREATE_DEVICE_DEBUG,
-#else
+ #else
0,
-#endif
+ #endif
mAvailableFeatureLevels.data(), static_cast<unsigned int>(mAvailableFeatureLevels.size()),
D3D11_SDK_VERSION, &dummyDevice, &dummyFeatureLevel, &dummyContext);
@@ -2763,6 +2688,11 @@ bool Renderer11::resetDevice()
return true;
}
+VendorID Renderer11::getVendorId() const
+{
+ return static_cast<VendorID>(mAdapterDescription.VendorId);
+}
+
SIZE_T Renderer11::getMaxResourceSize() const
{
// This formula comes from http://msdn.microsoft.com/en-us/library/windows/desktop/ff819065%28v=vs.85%29.aspx
@@ -2776,10 +2706,8 @@ std::string Renderer11::getRendererDescription() const
rendererString << mDescription;
rendererString << " Direct3D11";
- rendererString << " vs_" << getMajorShaderModel() << "_" << getMinorShaderModel()
- << getShaderModelSuffix();
- rendererString << " ps_" << getMajorShaderModel() << "_" << getMinorShaderModel()
- << getShaderModelSuffix();
+ rendererString << " vs_" << getMajorShaderModel() << "_" << getMinorShaderModel() << getShaderModelSuffix();
+ rendererString << " ps_" << getMajorShaderModel() << "_" << getMinorShaderModel() << getShaderModelSuffix();
return rendererString.str();
}
@@ -2787,12 +2715,12 @@ std::string Renderer11::getRendererDescription() const
DeviceIdentifier Renderer11::getAdapterIdentifier() const
{
// Don't use the AdapterLuid here, since that doesn't persist across reboot.
- DeviceIdentifier deviceIdentifier = {0};
- deviceIdentifier.VendorId = mAdapterDescription.VendorId;
- deviceIdentifier.DeviceId = mAdapterDescription.DeviceId;
- deviceIdentifier.SubSysId = mAdapterDescription.SubSysId;
- deviceIdentifier.Revision = mAdapterDescription.Revision;
- deviceIdentifier.FeatureLevel = static_cast<UINT>(mRenderer11DeviceCaps.featureLevel);
+ DeviceIdentifier deviceIdentifier = { 0 };
+ deviceIdentifier.VendorId = mAdapterDescription.VendorId;
+ deviceIdentifier.DeviceId = mAdapterDescription.DeviceId;
+ deviceIdentifier.SubSysId = mAdapterDescription.SubSysId;
+ deviceIdentifier.Revision = mAdapterDescription.Revision;
+ deviceIdentifier.FeatureLevel = static_cast<UINT>(mRenderer11DeviceCaps.featureLevel);
return deviceIdentifier;
}
@@ -2865,8 +2793,7 @@ bool Renderer11::getShareHandleSupport() const
return false;
}
- // Also disable share handles on Feature Level 9_3, since it doesn't support share handles on
- // RGBA8 textures/swapchains.
+ // Also disable share handles on Feature Level 9_3, since it doesn't support share handles on RGBA8 textures/swapchains.
if (mRenderer11DeviceCaps.featureLevel <= D3D_FEATURE_LEVEL_9_3)
{
mSupportsShareHandles = false;
@@ -2929,17 +2856,11 @@ int Renderer11::getMajorShaderModel() const
{
switch (mRenderer11DeviceCaps.featureLevel)
{
- case D3D_FEATURE_LEVEL_11_0:
- return D3D11_SHADER_MAJOR_VERSION; // 5
- case D3D_FEATURE_LEVEL_10_1:
- return D3D10_1_SHADER_MAJOR_VERSION; // 4
- case D3D_FEATURE_LEVEL_10_0:
- return D3D10_SHADER_MAJOR_VERSION; // 4
- case D3D_FEATURE_LEVEL_9_3:
- return D3D10_SHADER_MAJOR_VERSION; // 4
- default:
- UNREACHABLE();
- return 0;
+ case D3D_FEATURE_LEVEL_11_0: return D3D11_SHADER_MAJOR_VERSION; // 5
+ case D3D_FEATURE_LEVEL_10_1: return D3D10_1_SHADER_MAJOR_VERSION; // 4
+ case D3D_FEATURE_LEVEL_10_0: return D3D10_SHADER_MAJOR_VERSION; // 4
+ case D3D_FEATURE_LEVEL_9_3: return D3D10_SHADER_MAJOR_VERSION; // 4
+ default: UNREACHABLE(); return 0;
}
}
@@ -2947,17 +2868,11 @@ int Renderer11::getMinorShaderModel() const
{
switch (mRenderer11DeviceCaps.featureLevel)
{
- case D3D_FEATURE_LEVEL_11_0:
- return D3D11_SHADER_MINOR_VERSION; // 0
- case D3D_FEATURE_LEVEL_10_1:
- return D3D10_1_SHADER_MINOR_VERSION; // 1
- case D3D_FEATURE_LEVEL_10_0:
- return D3D10_SHADER_MINOR_VERSION; // 0
- case D3D_FEATURE_LEVEL_9_3:
- return D3D10_SHADER_MINOR_VERSION; // 0
- default:
- UNREACHABLE();
- return 0;
+ case D3D_FEATURE_LEVEL_11_0: return D3D11_SHADER_MINOR_VERSION; // 0
+ case D3D_FEATURE_LEVEL_10_1: return D3D10_1_SHADER_MINOR_VERSION; // 1
+ case D3D_FEATURE_LEVEL_10_0: return D3D10_SHADER_MINOR_VERSION; // 0
+ case D3D_FEATURE_LEVEL_9_3: return D3D10_SHADER_MINOR_VERSION; // 0
+ default: UNREACHABLE(); return 0;
}
}
@@ -2965,17 +2880,11 @@ std::string Renderer11::getShaderModelSuffix() const
{
switch (mRenderer11DeviceCaps.featureLevel)
{
- case D3D_FEATURE_LEVEL_11_0:
- return "";
- case D3D_FEATURE_LEVEL_10_1:
- return "";
- case D3D_FEATURE_LEVEL_10_0:
- return "";
- case D3D_FEATURE_LEVEL_9_3:
- return "_level_9_3";
- default:
- UNREACHABLE();
- return "";
+ case D3D_FEATURE_LEVEL_11_0: return "";
+ case D3D_FEATURE_LEVEL_10_1: return "";
+ case D3D_FEATURE_LEVEL_10_0: return "";
+ case D3D_FEATURE_LEVEL_9_3: return "_level_9_3";
+ default: UNREACHABLE(); return "";
}
}
@@ -3048,73 +2957,60 @@ gl::Error Renderer11::copyImage2D(const gl::Framebuffer *framebuffer,
ANGLE_TRY(copyImageInternal(framebuffer, sourceRect, destFormat, destOffset, destRenderTarget));
- storage11->markLevelDirty(level);
+ storage11->invalidateSwizzleCacheLevel(level);
return gl::NoError();
}
-gl::Error Renderer11::copyImageCube(const gl::Framebuffer *framebuffer,
- const gl::Rectangle &sourceRect,
- GLenum destFormat,
- const gl::Offset &destOffset,
- TextureStorage *storage,
- GLenum target,
- GLint level)
+gl::Error Renderer11::copyImageCube(const gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat,
+ const gl::Offset &destOffset, TextureStorage *storage, GLenum target, GLint level)
{
TextureStorage11_Cube *storage11 = GetAs<TextureStorage11_Cube>(storage);
ASSERT(storage11);
- gl::ImageIndex index = gl::ImageIndex::MakeCube(target, level);
+ gl::ImageIndex index = gl::ImageIndex::MakeCube(target, level);
RenderTargetD3D *destRenderTarget = nullptr;
ANGLE_TRY(storage11->getRenderTarget(index, &destRenderTarget));
ASSERT(destRenderTarget);
ANGLE_TRY(copyImageInternal(framebuffer, sourceRect, destFormat, destOffset, destRenderTarget));
- storage11->markLevelDirty(level);
+ storage11->invalidateSwizzleCacheLevel(level);
return gl::NoError();
}
-gl::Error Renderer11::copyImage3D(const gl::Framebuffer *framebuffer,
- const gl::Rectangle &sourceRect,
- GLenum destFormat,
- const gl::Offset &destOffset,
- TextureStorage *storage,
- GLint level)
+gl::Error Renderer11::copyImage3D(const gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat,
+ const gl::Offset &destOffset, TextureStorage *storage, GLint level)
{
TextureStorage11_3D *storage11 = GetAs<TextureStorage11_3D>(storage);
ASSERT(storage11);
- gl::ImageIndex index = gl::ImageIndex::Make3D(level, destOffset.z);
+ gl::ImageIndex index = gl::ImageIndex::Make3D(level, destOffset.z);
RenderTargetD3D *destRenderTarget = nullptr;
ANGLE_TRY(storage11->getRenderTarget(index, &destRenderTarget));
ASSERT(destRenderTarget);
ANGLE_TRY(copyImageInternal(framebuffer, sourceRect, destFormat, destOffset, destRenderTarget));
- storage11->markLevelDirty(level);
+ storage11->invalidateSwizzleCacheLevel(level);
return gl::NoError();
}
-gl::Error Renderer11::copyImage2DArray(const gl::Framebuffer *framebuffer,
- const gl::Rectangle &sourceRect,
- GLenum destFormat,
- const gl::Offset &destOffset,
- TextureStorage *storage,
- GLint level)
+gl::Error Renderer11::copyImage2DArray(const gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat,
+ const gl::Offset &destOffset, TextureStorage *storage, GLint level)
{
TextureStorage11_2DArray *storage11 = GetAs<TextureStorage11_2DArray>(storage);
ASSERT(storage11);
- gl::ImageIndex index = gl::ImageIndex::Make2DArray(level, destOffset.z);
+ gl::ImageIndex index = gl::ImageIndex::Make2DArray(level, destOffset.z);
RenderTargetD3D *destRenderTarget = nullptr;
ANGLE_TRY(storage11->getRenderTarget(index, &destRenderTarget));
ASSERT(destRenderTarget);
ANGLE_TRY(copyImageInternal(framebuffer, sourceRect, destFormat, destOffset, destRenderTarget));
- storage11->markLevelDirty(level);
+ storage11->invalidateSwizzleCacheLevel(level);
return gl::NoError();
}
@@ -3204,44 +3100,9 @@ gl::Error Renderer11::copyTexture(const gl::Texture *source,
unpackUnmultiplyAlpha));
}
- destStorage11->markLevelDirty(destLevel);
-
- return gl::NoError();
-}
-
-gl::Error Renderer11::copyCompressedTexture(const gl::Texture *source,
- GLint sourceLevel,
- TextureStorage *storage,
- GLint destLevel)
-{
- TextureStorage11_2D *destStorage11 = GetAs<TextureStorage11_2D>(storage);
- ASSERT(destStorage11);
-
- ID3D11Resource *destResource = nullptr;
- ANGLE_TRY(destStorage11->getResource(&destResource));
-
- gl::ImageIndex destIndex = gl::ImageIndex::Make2D(destLevel);
- UINT destSubresource = destStorage11->getSubresourceIndex(destIndex);
-
- TextureD3D *sourceD3D = GetImplAs<TextureD3D>(source);
- ASSERT(sourceD3D);
+ destStorage11->invalidateSwizzleCacheLevel(destLevel);
- TextureStorage *sourceStorage = nullptr;
- ANGLE_TRY(sourceD3D->getNativeTexture(&sourceStorage));
-
- TextureStorage11_2D *sourceStorage11 = GetAs<TextureStorage11_2D>(sourceStorage);
- ASSERT(sourceStorage11);
-
- ID3D11Resource *sourceResource = nullptr;
- ANGLE_TRY(sourceStorage11->getResource(&sourceResource));
-
- gl::ImageIndex sourceIndex = gl::ImageIndex::Make2D(sourceLevel);
- UINT sourceSubresource = sourceStorage11->getSubresourceIndex(sourceIndex);
-
- mDeviceContext->CopySubresourceRegion(destResource, destSubresource, 0, 0, 0, sourceResource,
- sourceSubresource, nullptr);
-
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
UINT64 EstimateSize(D3D11_TEXTURE2D_DESC &desc)
@@ -3253,31 +3114,27 @@ UINT64 EstimateSize(D3D11_TEXTURE2D_DESC &desc)
return total;
}
-gl::Error Renderer11::createRenderTarget(int width,
- int height,
- GLenum format,
- GLsizei samples,
- RenderTargetD3D **outRT)
+gl::Error Renderer11::createRenderTarget(int width, int height, GLenum format, GLsizei samples, RenderTargetD3D **outRT)
{
const d3d11::Format &formatInfo = d3d11::Format::Get(format, mRenderer11DeviceCaps);
const gl::TextureCaps &textureCaps = getNativeTextureCaps().get(format);
- GLuint supportedSamples = textureCaps.getNearestSamples(samples);
+ GLuint supportedSamples = textureCaps.getNearestSamples(samples);
if (width > 0 && height > 0)
{
// Create texture resource
D3D11_TEXTURE2D_DESC desc;
- desc.Width = width;
- desc.Height = height;
- desc.MipLevels = 1;
- desc.ArraySize = 1;
+ desc.Width = width;
+ desc.Height = height;
+ desc.MipLevels = 1;
+ desc.ArraySize = 1;
desc.Format = formatInfo.texFormat;
- desc.SampleDesc.Count = (supportedSamples == 0) ? 1 : supportedSamples;
+ desc.SampleDesc.Count = (supportedSamples == 0) ? 1 : supportedSamples;
desc.SampleDesc.Quality = 0;
- desc.Usage = D3D11_USAGE_DEFAULT;
- desc.CPUAccessFlags = 0;
- desc.MiscFlags = 0;
+ desc.Usage = D3D11_USAGE_DEFAULT;
+ desc.CPUAccessFlags = 0;
+ desc.MiscFlags = 0;
// If a rendertarget or depthstencil format exists for this texture format,
// we'll flag it to allow binding that way. Shader resource views are a little
@@ -3287,18 +3144,8 @@ gl::Error Renderer11::createRenderTarget(int width,
bindDSV = (formatInfo.dsvFormat != DXGI_FORMAT_UNKNOWN);
bindSRV = (formatInfo.srvFormat != DXGI_FORMAT_UNKNOWN);
- // D3D feature level 10.0 no longer allows creation of textures with both the bind SRV and
- // DSV flags when multisampled. crbug.com/656989
- bool supportsMultisampledDepthStencilSRVs =
- mRenderer11DeviceCaps.featureLevel > D3D_FEATURE_LEVEL_10_0;
- bool isMultisampledDepthStencil = bindDSV && desc.SampleDesc.Count > 1;
- if (isMultisampledDepthStencil && !supportsMultisampledDepthStencilSRVs)
- {
- bindSRV = false;
- }
-
- desc.BindFlags = (bindRTV ? D3D11_BIND_RENDER_TARGET : 0) |
- (bindDSV ? D3D11_BIND_DEPTH_STENCIL : 0) |
+ desc.BindFlags = (bindRTV ? D3D11_BIND_RENDER_TARGET : 0) |
+ (bindDSV ? D3D11_BIND_DEPTH_STENCIL : 0) |
(bindSRV ? D3D11_BIND_SHADER_RESOURCE : 0);
// The format must be either an RTV or a DSV
@@ -3320,8 +3167,7 @@ gl::Error Renderer11::createRenderTarget(int width,
if (FAILED(result))
{
ASSERT(result == E_OUTOFMEMORY);
- return gl::Error(GL_OUT_OF_MEMORY,
- "Failed to create render target texture, result: 0x%X.", result);
+ return gl::Error(GL_OUT_OF_MEMORY, "Failed to create render target texture, result: 0x%X.", result);
}
ID3D11ShaderResourceView *srv = nullptr;
@@ -3329,20 +3175,17 @@ gl::Error Renderer11::createRenderTarget(int width,
if (bindSRV)
{
D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc;
- srvDesc.Format = formatInfo.srvFormat;
- srvDesc.ViewDimension = (supportedSamples == 0) ? D3D11_SRV_DIMENSION_TEXTURE2D
- : D3D11_SRV_DIMENSION_TEXTURE2DMS;
+ srvDesc.Format = formatInfo.srvFormat;
+ srvDesc.ViewDimension = (supportedSamples == 0) ? D3D11_SRV_DIMENSION_TEXTURE2D : D3D11_SRV_DIMENSION_TEXTURE2DMS;
srvDesc.Texture2D.MostDetailedMip = 0;
- srvDesc.Texture2D.MipLevels = 1;
+ srvDesc.Texture2D.MipLevels = 1;
result = mDevice->CreateShaderResourceView(texture, &srvDesc, &srv);
if (FAILED(result))
{
ASSERT(result == E_OUTOFMEMORY);
SafeRelease(texture);
- return gl::Error(
- GL_OUT_OF_MEMORY,
- "Failed to create render target shader resource view, result: 0x%X.", result);
+ return gl::Error(GL_OUT_OF_MEMORY, "Failed to create render target shader resource view, result: 0x%X.", result);
}
if (formatInfo.blitSRVFormat != formatInfo.srvFormat)
@@ -3377,23 +3220,20 @@ gl::Error Renderer11::createRenderTarget(int width,
if (bindDSV)
{
D3D11_DEPTH_STENCIL_VIEW_DESC dsvDesc;
- dsvDesc.Format = formatInfo.dsvFormat;
- dsvDesc.ViewDimension = (supportedSamples == 0) ? D3D11_DSV_DIMENSION_TEXTURE2D
- : D3D11_DSV_DIMENSION_TEXTURE2DMS;
+ dsvDesc.Format = formatInfo.dsvFormat;
+ dsvDesc.ViewDimension = (supportedSamples == 0) ? D3D11_DSV_DIMENSION_TEXTURE2D : D3D11_DSV_DIMENSION_TEXTURE2DMS;
dsvDesc.Texture2D.MipSlice = 0;
- dsvDesc.Flags = 0;
+ dsvDesc.Flags = 0;
ID3D11DepthStencilView *dsv = NULL;
- result = mDevice->CreateDepthStencilView(texture, &dsvDesc, &dsv);
+ result = mDevice->CreateDepthStencilView(texture, &dsvDesc, &dsv);
if (FAILED(result))
{
ASSERT(result == E_OUTOFMEMORY);
SafeRelease(texture);
SafeRelease(srv);
SafeRelease(blitSRV);
- return gl::Error(GL_OUT_OF_MEMORY,
- "Failed to create render target depth stencil view, result: 0x%X.",
- result);
+ return gl::Error(GL_OUT_OF_MEMORY, "Failed to create render target depth stencil view, result: 0x%X.", result);
}
*outRT = new TextureRenderTarget11(dsv, texture, srv, format, formatInfo, width, height,
@@ -3404,27 +3244,24 @@ gl::Error Renderer11::createRenderTarget(int width,
else if (bindRTV)
{
D3D11_RENDER_TARGET_VIEW_DESC rtvDesc;
- rtvDesc.Format = formatInfo.rtvFormat;
- rtvDesc.ViewDimension = (supportedSamples == 0) ? D3D11_RTV_DIMENSION_TEXTURE2D
- : D3D11_RTV_DIMENSION_TEXTURE2DMS;
+ rtvDesc.Format = formatInfo.rtvFormat;
+ rtvDesc.ViewDimension = (supportedSamples == 0) ? D3D11_RTV_DIMENSION_TEXTURE2D : D3D11_RTV_DIMENSION_TEXTURE2DMS;
rtvDesc.Texture2D.MipSlice = 0;
ID3D11RenderTargetView *rtv = NULL;
- result = mDevice->CreateRenderTargetView(texture, &rtvDesc, &rtv);
+ result = mDevice->CreateRenderTargetView(texture, &rtvDesc, &rtv);
if (FAILED(result))
{
ASSERT(result == E_OUTOFMEMORY);
SafeRelease(texture);
SafeRelease(srv);
SafeRelease(blitSRV);
- return gl::Error(GL_OUT_OF_MEMORY,
- "Failed to create render target render target view, result: 0x%X.",
- result);
+ return gl::Error(GL_OUT_OF_MEMORY, "Failed to create render target render target view, result: 0x%X.", result);
}
if (formatInfo.dataInitializerFunction != NULL)
{
- const float clearValues[4] = {0.0f, 0.0f, 0.0f, 1.0f};
+ const float clearValues[4] = { 0.0f, 0.0f, 0.0f, 1.0f };
mDeviceContext->ClearRenderTargetView(rtv, clearValues);
}
@@ -3457,8 +3294,12 @@ gl::Error Renderer11::createRenderTargetCopy(RenderTargetD3D *source, RenderTarg
ASSERT(source != nullptr);
RenderTargetD3D *newRT = nullptr;
- ANGLE_TRY(createRenderTarget(source->getWidth(), source->getHeight(),
- source->getInternalFormat(), source->getSamples(), &newRT));
+ gl::Error error = createRenderTarget(source->getWidth(), source->getHeight(),
+ source->getInternalFormat(), source->getSamples(), &newRT);
+ if (error.isError())
+ {
+ return error;
+ }
RenderTarget11 *source11 = GetAs<RenderTarget11>(source);
RenderTarget11 *dest11 = GetAs<RenderTarget11>(newRT);
@@ -3479,17 +3320,16 @@ gl::Error Renderer11::loadExecutable(const void *function,
{
switch (type)
{
- case SHADER_VERTEX:
+ case SHADER_VERTEX:
{
- ID3D11VertexShader *vertexShader = NULL;
+ ID3D11VertexShader *vertexShader = NULL;
ID3D11GeometryShader *streamOutShader = NULL;
HRESULT result = mDevice->CreateVertexShader(function, length, NULL, &vertexShader);
ASSERT(SUCCEEDED(result));
if (FAILED(result))
{
- return gl::Error(GL_OUT_OF_MEMORY, "Failed to create vertex shader, result: 0x%X.",
- result);
+ return gl::Error(GL_OUT_OF_MEMORY, "Failed to create vertex shader, result: 0x%X.", result);
}
if (!streamOutVaryings.empty())
@@ -3504,8 +3344,8 @@ gl::Error Renderer11::loadExecutable(const void *function,
entry.SemanticName = streamOutVarying.semanticName.c_str();
entry.SemanticIndex = streamOutVarying.semanticIndex;
entry.StartComponent = 0;
- entry.ComponentCount = static_cast<BYTE>(streamOutVarying.componentCount);
- entry.OutputSlot = static_cast<BYTE>(
+ entry.ComponentCount = static_cast<BYTE>(streamOutVarying.componentCount);
+ entry.OutputSlot = static_cast<BYTE>(
(separatedOutputBuffers ? streamOutVarying.outputSlot : 0));
soDeclaration.push_back(entry);
}
@@ -3517,16 +3357,14 @@ gl::Error Renderer11::loadExecutable(const void *function,
ASSERT(SUCCEEDED(result));
if (FAILED(result))
{
- return gl::Error(GL_OUT_OF_MEMORY,
- "Failed to create steam output shader, result: 0x%X.", result);
+ return gl::Error(GL_OUT_OF_MEMORY, "Failed to create steam output shader, result: 0x%X.", result);
}
}
- *outExecutable =
- new ShaderExecutable11(function, length, vertexShader, streamOutShader);
+ *outExecutable = new ShaderExecutable11(function, length, vertexShader, streamOutShader);
}
break;
- case SHADER_PIXEL:
+ case SHADER_PIXEL:
{
ID3D11PixelShader *pixelShader = NULL;
@@ -3534,14 +3372,13 @@ gl::Error Renderer11::loadExecutable(const void *function,
ASSERT(SUCCEEDED(result));
if (FAILED(result))
{
- return gl::Error(GL_OUT_OF_MEMORY, "Failed to create pixel shader, result: 0x%X.",
- result);
+ return gl::Error(GL_OUT_OF_MEMORY, "Failed to create pixel shader, result: 0x%X.", result);
}
*outExecutable = new ShaderExecutable11(function, length, pixelShader);
}
break;
- case SHADER_GEOMETRY:
+ case SHADER_GEOMETRY:
{
ID3D11GeometryShader *geometryShader = NULL;
@@ -3549,16 +3386,15 @@ gl::Error Renderer11::loadExecutable(const void *function,
ASSERT(SUCCEEDED(result));
if (FAILED(result))
{
- return gl::Error(GL_OUT_OF_MEMORY,
- "Failed to create geometry shader, result: 0x%X.", result);
+ return gl::Error(GL_OUT_OF_MEMORY, "Failed to create geometry shader, result: 0x%X.", result);
}
*outExecutable = new ShaderExecutable11(function, length, geometryShader);
}
break;
- default:
- UNREACHABLE();
- return gl::Error(GL_INVALID_OPERATION);
+ default:
+ UNREACHABLE();
+ return gl::Error(GL_INVALID_OPERATION);
}
return gl::Error(GL_NO_ERROR);
@@ -3575,22 +3411,21 @@ gl::Error Renderer11::compileToExecutable(gl::InfoLog &infoLog,
const char *profileType = NULL;
switch (type)
{
- case SHADER_VERTEX:
- profileType = "vs";
- break;
- case SHADER_PIXEL:
- profileType = "ps";
- break;
- case SHADER_GEOMETRY:
- profileType = "gs";
- break;
- default:
- UNREACHABLE();
- return gl::Error(GL_INVALID_OPERATION);
+ case SHADER_VERTEX:
+ profileType = "vs";
+ break;
+ case SHADER_PIXEL:
+ profileType = "ps";
+ break;
+ case SHADER_GEOMETRY:
+ profileType = "gs";
+ break;
+ default:
+ UNREACHABLE();
+ return gl::Error(GL_INVALID_OPERATION);
}
- std::string profile = FormatString("%s_%d_%d%s", profileType, getMajorShaderModel(),
- getMinorShaderModel(), getShaderModelSuffix().c_str());
+ std::string profile = FormatString("%s_%d_%d%s", profileType, getMajorShaderModel(), getMinorShaderModel(), getShaderModelSuffix().c_str());
UINT flags = D3DCOMPILE_OPTIMIZATION_LEVEL2;
@@ -3606,12 +3441,11 @@ gl::Error Renderer11::compileToExecutable(gl::InfoLog &infoLog,
if (workarounds.enableIEEEStrictness)
flags |= D3DCOMPILE_IEEE_STRICTNESS;
- // Sometimes D3DCompile will fail with the default compilation flags for complicated shaders
- // when it would otherwise pass with alternative options.
+ // Sometimes D3DCompile will fail with the default compilation flags for complicated shaders when it would otherwise pass with alternative options.
// Try the default flags first and if compilation fails, try some alternatives.
std::vector<CompileConfig> configs;
- configs.push_back(CompileConfig(flags, "default"));
- configs.push_back(CompileConfig(flags | D3DCOMPILE_SKIP_VALIDATION, "skip validation"));
+ configs.push_back(CompileConfig(flags, "default" ));
+ configs.push_back(CompileConfig(flags | D3DCOMPILE_SKIP_VALIDATION, "skip validation" ));
configs.push_back(CompileConfig(flags | D3DCOMPILE_SKIP_OPTIMIZATION, "skip optimization"));
if (getMajorShaderModel() == 4 && getShaderModelSuffix() != "")
@@ -3623,24 +3457,26 @@ gl::Error Renderer11::compileToExecutable(gl::InfoLog &infoLog,
CompileConfig(flags | D3DCOMPILE_AVOID_FLOW_CONTROL, "avoid flow control"));
}
- D3D_SHADER_MACRO loopMacros[] = {{"ANGLE_ENABLE_LOOP_FLATTEN", "1"}, {0, 0}};
+ D3D_SHADER_MACRO loopMacros[] = { {"ANGLE_ENABLE_LOOP_FLATTEN", "1"}, {0, 0} };
ID3DBlob *binary = NULL;
std::string debugInfo;
- ANGLE_TRY(mCompiler.compileToBinary(infoLog, shaderHLSL, profile, configs, loopMacros, &binary,
- &debugInfo));
+ gl::Error error = mCompiler.compileToBinary(infoLog, shaderHLSL, profile, configs, loopMacros, &binary, &debugInfo);
+ if (error.isError())
+ {
+ return error;
+ }
- // It's possible that binary is NULL if the compiler failed in all configurations. Set the
- // executable to NULL and return GL_NO_ERROR to signify that there was a link error but the
- // internal state is still OK.
+ // It's possible that binary is NULL if the compiler failed in all configurations. Set the executable to NULL
+ // and return GL_NO_ERROR to signify that there was a link error but the internal state is still OK.
if (!binary)
{
*outExectuable = NULL;
return gl::Error(GL_NO_ERROR);
}
- gl::Error error = loadExecutable(binary->GetBufferPointer(), binary->GetBufferSize(), type,
- streamOutVaryings, separatedOutputBuffers, outExectuable);
+ error = loadExecutable(binary->GetBufferPointer(), binary->GetBufferSize(), type,
+ streamOutVaryings, separatedOutputBuffers, outExectuable);
SafeRelease(binary);
if (error.isError())
@@ -3653,7 +3489,7 @@ gl::Error Renderer11::compileToExecutable(gl::InfoLog &infoLog,
(*outExectuable)->appendDebugInfo(debugInfo);
}
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
UniformStorageD3D *Renderer11::createUniformStorage(size_t storageSize)
@@ -3705,19 +3541,14 @@ bool Renderer11::supportsFastCopyBufferToTexture(GLenum internalFormat) const
}
// We don't support formats which we can't represent without conversion
- if (d3d11FormatInfo.format().glInternalFormat != internalFormat)
+ if (d3d11FormatInfo.format.glInternalFormat != internalFormat)
{
return false;
}
- // Buffer SRV creation for this format was not working on Windows 10.
- if (d3d11FormatInfo.texFormat == DXGI_FORMAT_B5G5R5A1_UNORM)
- {
- return false;
- }
-
- // This format is not supported as a buffer SRV.
- if (d3d11FormatInfo.texFormat == DXGI_FORMAT_A8_UNORM)
+ // Buffer SRV creation in this format was not working on Windows 10, repro at least on Intel
+ // and NVIDIA.
+ if (internalFormat == GL_RGB5_A1)
{
return false;
}
@@ -3725,16 +3556,11 @@ bool Renderer11::supportsFastCopyBufferToTexture(GLenum internalFormat) const
return true;
}
-gl::Error Renderer11::fastCopyBufferToTexture(const gl::PixelUnpackState &unpack,
- unsigned int offset,
- RenderTargetD3D *destRenderTarget,
- GLenum destinationFormat,
- GLenum sourcePixelsType,
- const gl::Box &destArea)
+gl::Error Renderer11::fastCopyBufferToTexture(const gl::PixelUnpackState &unpack, unsigned int offset, RenderTargetD3D *destRenderTarget,
+ GLenum destinationFormat, GLenum sourcePixelsType, const gl::Box &destArea)
{
ASSERT(supportsFastCopyBufferToTexture(destinationFormat));
- return mPixelTransfer->copyBufferToTexture(unpack, offset, destRenderTarget, destinationFormat,
- sourcePixelsType, destArea);
+ return mPixelTransfer->copyBufferToTexture(unpack, offset, destRenderTarget, destinationFormat, sourcePixelsType, destArea);
}
ImageD3D *Renderer11::createImage()
@@ -3745,7 +3571,7 @@ ImageD3D *Renderer11::createImage()
gl::Error Renderer11::generateMipmap(ImageD3D *dest, ImageD3D *src)
{
Image11 *dest11 = GetAs<Image11>(dest);
- Image11 *src11 = GetAs<Image11>(src);
+ Image11 *src11 = GetAs<Image11>(src);
return Image11::generateMipmap(dest11, src11, mRenderer11DeviceCaps);
}
@@ -3758,12 +3584,16 @@ gl::Error Renderer11::generateMipmapUsingD3D(TextureStorage *storage,
ASSERT(storage11->supportsNativeMipmapFunction());
ID3D11ShaderResourceView *srv;
- ANGLE_TRY(storage11->getSRVLevels(textureState.getEffectiveBaseLevel(),
- textureState.getEffectiveMaxLevel(), &srv));
+ gl::Error error = storage11->getSRVLevels(textureState.getEffectiveBaseLevel(),
+ textureState.getEffectiveMaxLevel(), &srv);
+ if (error.isError())
+ {
+ return error;
+ }
mDeviceContext->GenerateMips(srv);
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
TextureStorage *Renderer11::createTextureStorage2D(SwapChainD3D *swapChain)
@@ -3785,47 +3615,24 @@ TextureStorage *Renderer11::createTextureStorageExternal(
return new TextureStorage11_External(this, stream, desc);
}
-TextureStorage *Renderer11::createTextureStorage2D(GLenum internalformat,
- bool renderTarget,
- GLsizei width,
- GLsizei height,
- int levels,
- bool hintLevelZeroOnly)
+TextureStorage *Renderer11::createTextureStorage2D(GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, int levels, bool hintLevelZeroOnly)
{
- return new TextureStorage11_2D(this, internalformat, renderTarget, width, height, levels,
- hintLevelZeroOnly);
+ return new TextureStorage11_2D(this, internalformat, renderTarget, width, height, levels, hintLevelZeroOnly);
}
-TextureStorage *Renderer11::createTextureStorageCube(GLenum internalformat,
- bool renderTarget,
- int size,
- int levels,
- bool hintLevelZeroOnly)
+TextureStorage *Renderer11::createTextureStorageCube(GLenum internalformat, bool renderTarget, int size, int levels, bool hintLevelZeroOnly)
{
- return new TextureStorage11_Cube(this, internalformat, renderTarget, size, levels,
- hintLevelZeroOnly);
+ return new TextureStorage11_Cube(this, internalformat, renderTarget, size, levels, hintLevelZeroOnly);
}
-TextureStorage *Renderer11::createTextureStorage3D(GLenum internalformat,
- bool renderTarget,
- GLsizei width,
- GLsizei height,
- GLsizei depth,
- int levels)
+TextureStorage *Renderer11::createTextureStorage3D(GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, GLsizei depth, int levels)
{
- return new TextureStorage11_3D(this, internalformat, renderTarget, width, height, depth,
- levels);
+ return new TextureStorage11_3D(this, internalformat, renderTarget, width, height, depth, levels);
}
-TextureStorage *Renderer11::createTextureStorage2DArray(GLenum internalformat,
- bool renderTarget,
- GLsizei width,
- GLsizei height,
- GLsizei depth,
- int levels)
+TextureStorage *Renderer11::createTextureStorage2DArray(GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, GLsizei depth, int levels)
{
- return new TextureStorage11_2DArray(this, internalformat, renderTarget, width, height, depth,
- levels);
+ return new TextureStorage11_2DArray(this, internalformat, renderTarget, width, height, depth, levels);
}
gl::Error Renderer11::readFromAttachment(const gl::FramebufferAttachment &srcAttachment,
@@ -3897,15 +3704,15 @@ gl::Error Renderer11::readFromAttachment(const gl::FramebufferAttachment &srcAtt
D3D11_TEXTURE2D_DESC resolveDesc;
resolveDesc.Width = static_cast<UINT>(texSize.width);
resolveDesc.Height = static_cast<UINT>(texSize.height);
- resolveDesc.MipLevels = 1;
- resolveDesc.ArraySize = 1;
+ resolveDesc.MipLevels = 1;
+ resolveDesc.ArraySize = 1;
resolveDesc.Format = textureHelper.getFormat();
- resolveDesc.SampleDesc.Count = 1;
+ resolveDesc.SampleDesc.Count = 1;
resolveDesc.SampleDesc.Quality = 0;
- resolveDesc.Usage = D3D11_USAGE_DEFAULT;
- resolveDesc.BindFlags = 0;
- resolveDesc.CPUAccessFlags = 0;
- resolveDesc.MiscFlags = 0;
+ resolveDesc.Usage = D3D11_USAGE_DEFAULT;
+ resolveDesc.BindFlags = 0;
+ resolveDesc.CPUAccessFlags = 0;
+ resolveDesc.MiscFlags = 0;
ID3D11Texture2D *resolveTex2D = nullptr;
HRESULT result = mDevice->CreateTexture2D(&resolveDesc, nullptr, &resolveTex2D);
@@ -3977,17 +3784,16 @@ gl::Error Renderer11::packPixels(const TextureHelper11 &textureHelper,
if (FAILED(hr))
{
ASSERT(hr == E_OUTOFMEMORY);
- return gl::Error(GL_OUT_OF_MEMORY,
- "Failed to map internal texture for reading, result: 0x%X.", hr);
+ return gl::Error(GL_OUT_OF_MEMORY, "Failed to map internal texture for reading, result: 0x%X.", hr);
}
uint8_t *source = static_cast<uint8_t *>(mapping.pData);
int inputPitch = static_cast<int>(mapping.RowPitch);
const auto &formatInfo = textureHelper.getFormatSet();
- ASSERT(formatInfo.format().glInternalFormat != GL_NONE);
+ ASSERT(formatInfo.format.glInternalFormat != GL_NONE);
- PackPixels(params, formatInfo.format(), inputPitch, source, pixelsOut);
+ PackPixels(params, formatInfo.format, inputPitch, source, pixelsOut);
mDeviceContext->Unmap(readResource, 0);
@@ -4012,27 +3818,23 @@ gl::Error Renderer11::blitRenderbufferRect(const gl::Rectangle &readRectIn,
RenderTarget11 *drawRenderTarget11 = GetAs<RenderTarget11>(drawRenderTarget);
if (!drawRenderTarget11)
{
- return gl::Error(
- GL_OUT_OF_MEMORY,
- "Failed to retrieve the internal draw render target from the draw framebuffer.");
+ return gl::Error(GL_OUT_OF_MEMORY, "Failed to retrieve the internal draw render target from the draw framebuffer.");
}
TextureHelper11 drawTexture = TextureHelper11::MakeAndReference(
drawRenderTarget11->getTexture(), drawRenderTarget11->getFormatSet());
- unsigned int drawSubresource = drawRenderTarget11->getSubresourceIndex();
+ unsigned int drawSubresource = drawRenderTarget11->getSubresourceIndex();
ID3D11RenderTargetView *drawRTV = drawRenderTarget11->getRenderTargetView();
ID3D11DepthStencilView *drawDSV = drawRenderTarget11->getDepthStencilView();
RenderTarget11 *readRenderTarget11 = GetAs<RenderTarget11>(readRenderTarget);
if (!readRenderTarget11)
{
- return gl::Error(
- GL_OUT_OF_MEMORY,
- "Failed to retrieve the internal read render target from the read framebuffer.");
+ return gl::Error(GL_OUT_OF_MEMORY, "Failed to retrieve the internal read render target from the read framebuffer.");
}
TextureHelper11 readTexture;
- unsigned int readSubresource = 0;
+ unsigned int readSubresource = 0;
ID3D11ShaderResourceView *readSRV = nullptr;
if (readRenderTarget->getSamples() > 1)
@@ -4066,7 +3868,7 @@ gl::Error Renderer11::blitRenderbufferRect(const gl::Rectangle &readRectIn,
readTexture = TextureHelper11::MakeAndReference(readRenderTarget11->getTexture(),
readRenderTarget11->getFormatSet());
readSubresource = readRenderTarget11->getSubresourceIndex();
- readSRV = readRenderTarget11->getBlitShaderResourceView();
+ readSRV = readRenderTarget11->getBlitShaderResourceView();
if (readSRV == nullptr)
{
ASSERT(depthBlit || stencilBlit);
@@ -4090,7 +3892,8 @@ gl::Error Renderer11::blitRenderbufferRect(const gl::Rectangle &readRectIn,
// by internally scaling the read and draw rectangles.
gl::Rectangle readRect = readRectIn;
gl::Rectangle drawRect = drawRectIn;
- auto readToDrawX = [&drawRectIn, &readRectIn](int readOffset) {
+ auto readToDrawX = [&drawRectIn, &readRectIn](int readOffset)
+ {
double readToDrawScale =
static_cast<double>(drawRectIn.width) / static_cast<double>(readRectIn.width);
return static_cast<int>(round(static_cast<double>(readOffset) * readToDrawScale));
@@ -4106,7 +3909,8 @@ gl::Error Renderer11::blitRenderbufferRect(const gl::Rectangle &readRectIn,
drawRect.width -= drawOffset;
}
- auto readToDrawY = [&drawRectIn, &readRectIn](int readOffset) {
+ auto readToDrawY = [&drawRectIn, &readRectIn](int readOffset)
+ {
double readToDrawScale =
static_cast<double>(drawRectIn.height) / static_cast<double>(readRectIn.height);
return static_cast<int>(round(static_cast<double>(readOffset) * readToDrawScale));
@@ -4145,20 +3949,21 @@ gl::Error Renderer11::blitRenderbufferRect(const gl::Rectangle &readRectIn,
const auto &destFormatInfo = gl::GetInternalFormatInfo(drawRenderTarget->getInternalFormat());
const auto &srcFormatInfo = gl::GetInternalFormatInfo(readRenderTarget->getInternalFormat());
const auto &formatSet = drawRenderTarget11->getFormatSet();
- const auto &nativeFormat = formatSet.format();
+ const DXGI_FORMAT drawDXGIFormat = colorBlit ? formatSet.rtvFormat : formatSet.dsvFormat;
+ const auto &dxgiFormatInfo = d3d11::GetDXGIFormatInfo(drawDXGIFormat);
// Some blits require masking off emulated texture channels. eg: from RGBA8 to RGB8, we
// emulate RGB8 with RGBA8, so we need to mask off the alpha channel when we copy.
gl::Color<bool> colorMask;
- colorMask.red =
- (srcFormatInfo.redBits > 0) && (destFormatInfo.redBits == 0) && (nativeFormat.redBits > 0);
+ colorMask.red = (srcFormatInfo.redBits > 0) && (destFormatInfo.redBits == 0) &&
+ (dxgiFormatInfo.redBits > 0);
colorMask.green = (srcFormatInfo.greenBits > 0) && (destFormatInfo.greenBits == 0) &&
- (nativeFormat.greenBits > 0);
+ (dxgiFormatInfo.greenBits > 0);
colorMask.blue = (srcFormatInfo.blueBits > 0) && (destFormatInfo.blueBits == 0) &&
- (nativeFormat.blueBits > 0);
+ (dxgiFormatInfo.blueBits > 0);
colorMask.alpha = (srcFormatInfo.alphaBits > 0) && (destFormatInfo.alphaBits == 0) &&
- (nativeFormat.alphaBits > 0);
+ (dxgiFormatInfo.alphaBits > 0);
// We only currently support masking off the alpha channel.
bool colorMaskingNeeded = colorMask.alpha;
@@ -4172,19 +3977,17 @@ gl::Error Renderer11::blitRenderbufferRect(const gl::Rectangle &readRectIn,
bool stretchRequired = readRect.width != drawRect.width || readRect.height != drawRect.height;
- bool flipRequired =
- readRect.width < 0 || readRect.height < 0 || drawRect.width < 0 || drawRect.height < 0;
+ bool flipRequired = readRect.width < 0 || readRect.height < 0 || drawRect.width < 0 || drawRect.height < 0;
bool outOfBounds = readRect.x < 0 || readRect.x + readRect.width > readSize.width ||
readRect.y < 0 || readRect.y + readRect.height > readSize.height ||
drawRect.x < 0 || drawRect.x + drawRect.width > drawSize.width ||
drawRect.y < 0 || drawRect.y + drawRect.height > drawSize.height;
- bool partialDSBlit =
- (nativeFormat.depthBits > 0 && depthBlit) != (nativeFormat.stencilBits > 0 && stencilBlit);
+ bool partialDSBlit = (dxgiFormatInfo.depthBits > 0 && depthBlit) != (dxgiFormatInfo.stencilBits > 0 && stencilBlit);
- if (readRenderTarget11->getFormatSet().formatID ==
- drawRenderTarget11->getFormatSet().formatID &&
+ if (readRenderTarget11->getFormatSet().format.id ==
+ drawRenderTarget11->getFormatSet().format.id &&
!stretchRequired && !outOfBounds && !flipRequired && !partialDSBlit &&
!colorMaskingNeeded && (!(depthBlit || stencilBlit) || wholeBufferCopy))
{
@@ -4192,17 +3995,16 @@ gl::Error Renderer11::blitRenderbufferRect(const gl::Rectangle &readRectIn,
UINT dstY = drawRect.y;
D3D11_BOX readBox;
- readBox.left = readRect.x;
- readBox.right = readRect.x + readRect.width;
- readBox.top = readRect.y;
+ readBox.left = readRect.x;
+ readBox.right = readRect.x + readRect.width;
+ readBox.top = readRect.y;
readBox.bottom = readRect.y + readRect.height;
- readBox.front = 0;
- readBox.back = 1;
+ readBox.front = 0;
+ readBox.back = 1;
if (scissorNeeded)
{
- // drawRect is guaranteed to have positive width and height because stretchRequired is
- // false.
+ // drawRect is guaranteed to have positive width and height because stretchRequired is false.
ASSERT(drawRect.width >= 0 || drawRect.height >= 0);
if (drawRect.x < scissor->x)
@@ -4282,7 +4084,7 @@ void Renderer11::onSwap()
// Send histogram updates every half hour
const double kHistogramUpdateInterval = 30 * 60;
- const double currentTime = ANGLEPlatformCurrent()->monotonicallyIncreasingTime();
+ const double currentTime = ANGLEPlatformCurrent()->monotonicallyIncreasingTime();
const double timeSinceLastUpdate = currentTime - mLastHistogramUpdateTime;
if (timeSinceLastUpdate > kHistogramUpdateInterval)
@@ -4363,7 +4165,7 @@ Renderer11::resolveMultisampledTexture(RenderTarget11 *renderTarget, bool depth,
bool Renderer11::getLUID(LUID *adapterLuid) const
{
adapterLuid->HighPart = 0;
- adapterLuid->LowPart = 0;
+ adapterLuid->LowPart = 0;
if (!mDxgiAdapter)
{
@@ -4380,18 +4182,14 @@ bool Renderer11::getLUID(LUID *adapterLuid) const
return true;
}
-VertexConversionType Renderer11::getVertexConversionType(
- gl::VertexFormatType vertexFormatType) const
+VertexConversionType Renderer11::getVertexConversionType(gl::VertexFormatType vertexFormatType) const
{
- return d3d11::GetVertexFormatInfo(vertexFormatType, mRenderer11DeviceCaps.featureLevel)
- .conversionType;
+ return d3d11::GetVertexFormatInfo(vertexFormatType, mRenderer11DeviceCaps.featureLevel).conversionType;
}
GLenum Renderer11::getVertexComponentType(gl::VertexFormatType vertexFormatType) const
{
- const auto &format =
- d3d11::GetVertexFormatInfo(vertexFormatType, mRenderer11DeviceCaps.featureLevel);
- return d3d11::GetComponentType(format.nativeFormat);
+ return d3d11::GetDXGIFormatInfo(d3d11::GetVertexFormatInfo(vertexFormatType, mRenderer11DeviceCaps.featureLevel).nativeFormat).componentType;
}
gl::ErrorOrResult<unsigned int> Renderer11::getVertexSpaceRequired(
@@ -4430,10 +4228,8 @@ gl::ErrorOrResult<unsigned int> Renderer11::getVertexSpaceRequired(
return elementSize * elementCount;
}
-void Renderer11::generateCaps(gl::Caps *outCaps,
- gl::TextureCapsMap *outTextureCaps,
- gl::Extensions *outExtensions,
- gl::Limitations *outLimitations) const
+void Renderer11::generateCaps(gl::Caps *outCaps, gl::TextureCapsMap *outTextureCaps,
+ gl::Extensions *outExtensions, gl::Limitations *outLimitations) const
{
d3d11_gl::GenerateCaps(mDevice, mDeviceContext, mRenderer11DeviceCaps, outCaps, outTextureCaps,
outExtensions, outLimitations);
@@ -4576,7 +4372,7 @@ gl::Error Renderer11::getScratchMemoryBuffer(size_t requestedSize, MemoryBuffer
if (mScratchMemoryBuffer.size() == requestedSize)
{
mScratchMemoryBufferResetCounter = ScratchMemoryBufferLifetime;
- *bufferOut = &mScratchMemoryBuffer;
+ *bufferOut = &mScratchMemoryBuffer;
return gl::NoError();
}
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.h b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.h
index 576fe3215..2f536bfd8 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.h
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.h
@@ -123,17 +123,9 @@ class Renderer11 : public RendererD3D
SwapChainD3D *createSwapChain(NativeWindowD3D *nativeWindow,
HANDLE shareHandle,
- IUnknown *d3dTexture,
GLenum backBufferFormat,
GLenum depthBufferFormat,
EGLint orientation) override;
- egl::Error getD3DTextureInfo(IUnknown *d3dTexture,
- EGLint *width,
- EGLint *height,
- GLenum *fboFormat) const override;
- egl::Error validateShareHandle(const egl::Config *config,
- HANDLE shareHandle,
- const egl::AttributeMap &attribs) const override;
gl::Error setSamplerState(gl::SamplerType type,
int index,
@@ -170,6 +162,7 @@ class Renderer11 : public RendererD3D
bool testDeviceLost() override;
bool testDeviceResettable() override;
+ VendorID getVendorId() const;
SIZE_T getMaxResourceSize() const;
std::string getRendererDescription() const;
DeviceIdentifier getAdapterIdentifier() const override;
@@ -224,10 +217,6 @@ class Renderer11 : public RendererD3D
bool unpackFlipY,
bool unpackPremultiplyAlpha,
bool unpackUnmultiplyAlpha) override;
- gl::Error copyCompressedTexture(const gl::Texture *source,
- GLint sourceLevel,
- TextureStorage *storage,
- GLint destLevel) override;
// RenderTarget creation
gl::Error createRenderTarget(int width,
@@ -343,7 +332,7 @@ class Renderer11 : public RendererD3D
bool colorBlit, bool depthBlit, bool stencilBlit);
bool isES3Capable() const;
- const Renderer11DeviceCaps &getRenderer11DeviceCaps() const { return mRenderer11DeviceCaps; };
+ const Renderer11DeviceCaps &getRenderer11DeviceCaps() { return mRenderer11DeviceCaps; };
RendererClass getRendererClass() const override { return RENDERER_D3D11; }
InputLayoutCache *getInputLayoutCache() { return &mInputLayoutCache; }
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/ShaderExecutable11.cpp b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/ShaderExecutable11.cpp
index e20b161ef..4da51afe4 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/ShaderExecutable11.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/ShaderExecutable11.cpp
@@ -85,6 +85,7 @@ UniformStorage11::UniformStorage11(Renderer11 *renderer, size_t initialSize)
constantBufferDescription.StructureByteStride = 0;
HRESULT result = d3d11Device->CreateBuffer(&constantBufferDescription, NULL, &mConstantBuffer);
+ UNUSED_ASSERTION_VARIABLE(result);
ASSERT(SUCCEEDED(result));
}
}
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/StateManager11.cpp b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/StateManager11.cpp
index 0e28c8c18..b8b0e45c4 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/StateManager11.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/StateManager11.cpp
@@ -492,11 +492,16 @@ gl::Error StateManager11::setBlendState(const gl::Framebuffer *framebuffer,
{
if (!mBlendStateIsDirty && sampleMask == mCurSampleMask)
{
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
ID3D11BlendState *dxBlendState = nullptr;
- ANGLE_TRY(mRenderer->getStateCache().getBlendState(framebuffer, blendState, &dxBlendState));
+ gl::Error error =
+ mRenderer->getStateCache().getBlendState(framebuffer, blendState, &dxBlendState);
+ if (error.isError())
+ {
+ return error;
+ }
ASSERT(dxBlendState != nullptr);
@@ -527,7 +532,7 @@ gl::Error StateManager11::setBlendState(const gl::Framebuffer *framebuffer,
mBlendStateIsDirty = false;
- return gl::NoError();
+ return error;
}
gl::Error StateManager11::setDepthStencilState(const gl::State &glState)
@@ -547,7 +552,7 @@ gl::Error StateManager11::setDepthStencilState(const gl::State &glState)
disableDepth == mCurDisableDepth.value() && mCurDisableStencil.valid() &&
disableStencil == mCurDisableStencil.value())
{
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
const auto &depthStencilState = glState.getDepthStencilState();
@@ -567,8 +572,12 @@ gl::Error StateManager11::setDepthStencilState(const gl::State &glState)
(depthStencilState.stencilBackMask & maxStencil));
ID3D11DepthStencilState *dxDepthStencilState = NULL;
- ANGLE_TRY(mRenderer->getStateCache().getDepthStencilState(
- depthStencilState, disableDepth, disableStencil, &dxDepthStencilState));
+ gl::Error error = mRenderer->getStateCache().getDepthStencilState(
+ depthStencilState, disableDepth, disableStencil, &dxDepthStencilState);
+ if (error.isError())
+ {
+ return error;
+ }
ASSERT(dxDepthStencilState);
@@ -592,7 +601,7 @@ gl::Error StateManager11::setDepthStencilState(const gl::State &glState)
mDepthStencilStateIsDirty = false;
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
gl::Error StateManager11::setRasterizerState(const gl::RasterizerState &rasterState)
@@ -601,10 +610,11 @@ gl::Error StateManager11::setRasterizerState(const gl::RasterizerState &rasterSt
if (!mRasterizerStateIsDirty && rasterState.pointDrawMode == mCurRasterState.pointDrawMode &&
rasterState.multiSample == mCurRasterState.multiSample)
{
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
ID3D11RasterizerState *dxRasterState = nullptr;
+ gl::Error error(GL_NO_ERROR);
if (mCurPresentPathFastEnabled)
{
@@ -623,13 +633,18 @@ gl::Error StateManager11::setRasterizerState(const gl::RasterizerState &rasterSt
modifiedRasterState.frontFace = GL_CCW;
}
- ANGLE_TRY(mRenderer->getStateCache().getRasterizerState(
- modifiedRasterState, mCurScissorEnabled, &dxRasterState));
+ error = mRenderer->getStateCache().getRasterizerState(modifiedRasterState,
+ mCurScissorEnabled, &dxRasterState);
}
else
{
- ANGLE_TRY(mRenderer->getStateCache().getRasterizerState(rasterState, mCurScissorEnabled,
- &dxRasterState));
+ error = mRenderer->getStateCache().getRasterizerState(rasterState, mCurScissorEnabled,
+ &dxRasterState);
+ }
+
+ if (error.isError())
+ {
+ return error;
}
mRenderer->getDeviceContext()->RSSetState(dxRasterState);
@@ -637,7 +652,7 @@ gl::Error StateManager11::setRasterizerState(const gl::RasterizerState &rasterSt
mCurRasterState = rasterState;
mRasterizerStateIsDirty = false;
- return gl::NoError();
+ return error;
}
void StateManager11::setScissorRectangle(const gl::Rectangle &scissor, bool enabled)
@@ -852,7 +867,7 @@ gl::Error StateManager11::onMakeCurrent(const gl::ContextState &data)
}
}
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
void StateManager11::setShaderResource(gl::SamplerType shaderType,
@@ -886,7 +901,7 @@ gl::Error StateManager11::clearTextures(gl::SamplerType samplerType,
{
if (rangeStart == rangeEnd)
{
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
auto &currentSRVs = (samplerType == gl::SAMPLER_VERTEX ? mCurVertexSRVs : mCurPixelSRVs);
@@ -896,7 +911,7 @@ gl::Error StateManager11::clearTextures(gl::SamplerType samplerType,
if (clearRange.empty())
{
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
auto deviceContext = mRenderer->getDeviceContext();
@@ -918,7 +933,7 @@ gl::Error StateManager11::clearTextures(gl::SamplerType samplerType,
currentSRVs.update(samplerIndex, nullptr);
}
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
void StateManager11::unsetConflictingSRVs(gl::SamplerType samplerType,
@@ -974,7 +989,11 @@ void StateManager11::deinitialize()
gl::Error StateManager11::syncFramebuffer(gl::Framebuffer *framebuffer)
{
Framebuffer11 *framebuffer11 = GetImplAs<Framebuffer11>(framebuffer);
- ANGLE_TRY(framebuffer11->markAttachmentsDirty());
+ gl::Error error = framebuffer11->invalidateSwizzles();
+ if (error.isError())
+ {
+ return error;
+ }
if (framebuffer11->hasAnyInternalDirtyBit())
{
@@ -984,7 +1003,7 @@ gl::Error StateManager11::syncFramebuffer(gl::Framebuffer *framebuffer)
if (!mRenderTargetIsDirty)
{
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
mRenderTargetIsDirty = false;
@@ -998,7 +1017,7 @@ gl::Error StateManager11::syncFramebuffer(gl::Framebuffer *framebuffer)
const gl::Extents &size = framebuffer->getFirstColorbuffer()->getSize();
if (size.width == 0 || size.height == 0)
{
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
}
@@ -1082,7 +1101,7 @@ gl::Error StateManager11::syncFramebuffer(gl::Framebuffer *framebuffer)
setViewportBounds(renderTargetWidth, renderTargetHeight);
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
gl::Error StateManager11::updateCurrentValueAttribs(const gl::State &state,
@@ -1105,11 +1124,15 @@ gl::Error StateManager11::updateCurrentValueAttribs(const gl::State &state,
currentValueAttrib->currentValueType = currentValue.Type;
currentValueAttrib->attribute = &vertexAttributes[attribIndex];
- ANGLE_TRY(vertexDataManager->storeCurrentValue(currentValue, currentValueAttrib,
- static_cast<size_t>(attribIndex)));
+ gl::Error error = vertexDataManager->storeCurrentValue(currentValue, currentValueAttrib,
+ static_cast<size_t>(attribIndex));
+ if (error.isError())
+ {
+ return error;
+ }
}
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
const std::vector<TranslatedAttribute> &StateManager11::getCurrentValueAttribs() const
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.cpp b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.cpp
index a410c425d..b12fd80d2 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.cpp
@@ -45,11 +45,10 @@ bool NeedsOffscreenTexture(Renderer11 *renderer, NativeWindow11 *nativeWindow, E
SwapChain11::SwapChain11(Renderer11 *renderer,
NativeWindow11 *nativeWindow,
HANDLE shareHandle,
- IUnknown *d3dTexture,
GLenum backBufferFormat,
GLenum depthBufferFormat,
EGLint orientation)
- : SwapChainD3D(shareHandle, d3dTexture, backBufferFormat, depthBufferFormat),
+ : SwapChainD3D(shareHandle, backBufferFormat, depthBufferFormat),
mRenderer(renderer),
mWidth(-1),
mHeight(-1),
@@ -181,29 +180,43 @@ EGLint SwapChain11::resetOffscreenColorBuffer(int backbufferWidth, int backbuffe
const d3d11::Format &backbufferFormatInfo =
d3d11::Format::Get(mOffscreenRenderTargetFormat, mRenderer->getRenderer11DeviceCaps());
- // If the app passed in a share handle or D3D texture, open the resource
- // See EGL_ANGLE_d3d_share_handle_client_buffer and EGL_ANGLE_d3d_texture_client_buffer
- if (mAppCreatedShareHandle || mD3DTexture != nullptr)
+ // If the app passed in a share handle, open the resource
+ // See EGL_ANGLE_d3d_share_handle_client_buffer
+ if (mAppCreatedShareHandle)
{
- if (mAppCreatedShareHandle)
- {
- ID3D11Resource *tempResource11;
- HRESULT result = device->OpenSharedResource(mShareHandle, __uuidof(ID3D11Resource),
- (void **)&tempResource11);
- ASSERT(SUCCEEDED(result));
+ ID3D11Resource *tempResource11;
+ HRESULT result = device->OpenSharedResource(mShareHandle, __uuidof(ID3D11Resource), (void**)&tempResource11);
- mOffscreenTexture = d3d11::DynamicCastComObject<ID3D11Texture2D>(tempResource11);
- SafeRelease(tempResource11);
+ if (FAILED(result))
+ {
+ ERR("Failed to open the swap chain pbuffer share handle: %08lX", result);
+ release();
+ return EGL_BAD_PARAMETER;
}
- else if (mD3DTexture != nullptr)
+
+ result = tempResource11->QueryInterface(__uuidof(ID3D11Texture2D), (void**)&mOffscreenTexture);
+ SafeRelease(tempResource11);
+
+ if (FAILED(result))
{
- mOffscreenTexture = d3d11::DynamicCastComObject<ID3D11Texture2D>(mD3DTexture);
+ ERR("Failed to query texture2d interface in pbuffer share handle: %08lX", result);
+ release();
+ return EGL_BAD_PARAMETER;
}
- else
+
+ // Validate offscreen texture parameters
+ D3D11_TEXTURE2D_DESC offscreenTextureDesc = {0};
+ mOffscreenTexture->GetDesc(&offscreenTextureDesc);
+
+ if (offscreenTextureDesc.Width != (UINT)backbufferWidth ||
+ offscreenTextureDesc.Height != (UINT)backbufferHeight ||
+ offscreenTextureDesc.Format != backbufferFormatInfo.texFormat ||
+ offscreenTextureDesc.MipLevels != 1 || offscreenTextureDesc.ArraySize != 1)
{
- UNREACHABLE();
+ ERR("Invalid texture parameters in the shared offscreen texture pbuffer");
+ release();
+ return EGL_BAD_PARAMETER;
}
- ASSERT(mOffscreenTexture != nullptr);
}
else
{
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.h b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.h
index 1d7e57b7c..1ea608054 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.h
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.h
@@ -24,7 +24,6 @@ class SwapChain11 final : public SwapChainD3D
SwapChain11(Renderer11 *renderer,
NativeWindow11 *nativeWindow,
HANDLE shareHandle,
- IUnknown *d3dTexture,
GLenum backBufferFormat,
GLenum depthBufferFormat,
EGLint orientation);
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/TextureStorage11.cpp b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/TextureStorage11.cpp
index 36c888dd3..738dae13f 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/TextureStorage11.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/TextureStorage11.cpp
@@ -31,15 +31,15 @@
namespace rx
{
-TextureStorage11::SRVKey::SRVKey(int baseLevel, int mipLevels, bool swizzle, bool dropStencil)
- : baseLevel(baseLevel), mipLevels(mipLevels), swizzle(swizzle), dropStencil(dropStencil)
+TextureStorage11::SRVKey::SRVKey(int baseLevel, int mipLevels, bool swizzle)
+ : baseLevel(baseLevel), mipLevels(mipLevels), swizzle(swizzle)
{
}
bool TextureStorage11::SRVKey::operator<(const SRVKey &rhs) const
{
- return std::tie(baseLevel, mipLevels, swizzle, dropStencil) <
- std::tie(rhs.baseLevel, rhs.mipLevels, rhs.swizzle, rhs.dropStencil);
+ return std::tie(baseLevel, mipLevels, swizzle) <
+ std::tie(rhs.baseLevel, rhs.mipLevels, rhs.swizzle);
}
TextureStorage11::TextureStorage11(Renderer11 *renderer,
@@ -53,7 +53,6 @@ TextureStorage11::TextureStorage11(Renderer11 *renderer,
mTextureWidth(0),
mTextureHeight(0),
mTextureDepth(0),
- mDropStencilTexture(nullptr),
mBindFlags(bindFlags),
mMiscFlags(miscFlags)
{
@@ -74,7 +73,6 @@ TextureStorage11::~TextureStorage11()
SafeRelease(i->second);
}
mSrvCache.clear();
- SafeRelease(mDropStencilTexture);
}
DWORD TextureStorage11::GetTextureBindFlags(GLenum internalFormat,
@@ -110,7 +108,9 @@ DWORD TextureStorage11::GetTextureMiscFlags(GLenum internalFormat,
const d3d11::Format &formatInfo = d3d11::Format::Get(internalFormat, renderer11DeviceCaps);
if (renderTarget && levels > 1)
{
- if (d3d11::SupportsMipGen(formatInfo.texFormat, renderer11DeviceCaps.featureLevel))
+ const d3d11::DXGIFormat &dxgiFormatInfo = d3d11::GetDXGIFormatInfo(formatInfo.texFormat);
+
+ if (dxgiFormatInfo.nativeMipmapSupport(renderer11DeviceCaps.featureLevel))
{
miscFlags |= D3D11_RESOURCE_MISC_GENERATE_MIPS;
}
@@ -185,8 +185,8 @@ gl::Error TextureStorage11::getSRV(const gl::TextureState &textureState,
{
// Make sure to add the level offset for our tiny compressed texture workaround
const GLuint effectiveBaseLevel = textureState.getEffectiveBaseLevel();
- bool swizzleRequired = textureState.swizzleRequired();
- bool mipmapping = gl::IsMipmapFiltered(textureState.getSamplerState());
+ bool swizzleRequired = textureState.swizzleRequired();
+ bool mipmapping = gl::IsMipmapFiltered(textureState.getSamplerState());
unsigned int mipLevels =
mipmapping ? (textureState.getEffectiveMaxLevel() - effectiveBaseLevel + 1) : 1;
@@ -203,7 +203,11 @@ gl::Error TextureStorage11::getSRV(const gl::TextureState &textureState,
if (mRenderer->getWorkarounds().zeroMaxLodWorkaround)
{
// We must ensure that the level zero texture is in sync with mipped texture.
- ANGLE_TRY(useLevelZeroWorkaroundTexture(mipLevels == 1));
+ gl::Error error = useLevelZeroWorkaroundTexture(mipLevels == 1);
+ if (error.isError())
+ {
+ return error;
+ }
}
if (swizzleRequired)
@@ -211,22 +215,7 @@ gl::Error TextureStorage11::getSRV(const gl::TextureState &textureState,
verifySwizzleExists(textureState.getSwizzleState());
}
- // We drop the stencil when sampling from the SRV if three conditions hold:
- // 1. the drop stencil workaround is enabled.
- bool workaround = mRenderer->getWorkarounds().emulateTinyStencilTextures;
- // 2. this is a stencil texture.
- bool hasStencil = (mFormatInfo.format().stencilBits > 0);
- // 3. the texture has a 1x1 or 2x2 mip.
- bool hasSmallMips = (getLevelWidth(mMipLevels - 1) <= 2 || getLevelHeight(mMipLevels - 1) <= 2);
-
- bool useDropStencil = (workaround && hasStencil && hasSmallMips);
- if (useDropStencil)
- {
- // Ensure drop texture gets re-created, if SRV is cached.
- ANGLE_TRY(createDropStencilTexture());
- }
-
- SRVKey key(effectiveBaseLevel, mipLevels, swizzleRequired, useDropStencil);
+ SRVKey key(effectiveBaseLevel, mipLevels, swizzleRequired);
ANGLE_TRY(getCachedOrCreateSRV(key, outSRV));
return gl::NoError();
@@ -243,30 +232,17 @@ gl::Error TextureStorage11::getCachedOrCreateSRV(const SRVKey &key,
}
ID3D11Resource *texture = nullptr;
- DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN;
-
if (key.swizzle)
{
- const auto &swizzleFormat =
- mFormatInfo.getSwizzleFormat(mRenderer->getRenderer11DeviceCaps());
- ASSERT(!key.dropStencil || swizzleFormat.format().stencilBits == 0);
ANGLE_TRY(getSwizzleTexture(&texture));
- format = swizzleFormat.srvFormat;
- }
- else if (key.dropStencil)
- {
- ASSERT(mDropStencilTexture);
- texture = mDropStencilTexture;
- format = DXGI_FORMAT_R32_FLOAT;
}
else
{
ANGLE_TRY(getResource(&texture));
- format = mFormatInfo.srvFormat;
}
ID3D11ShaderResourceView *srv = nullptr;
-
+ DXGI_FORMAT format = (key.swizzle ? mFormatInfo.swizzle.srvFormat : mFormatInfo.srvFormat);
ANGLE_TRY(createSRV(key.baseLevel, key.mipLevels, format, texture, &srv));
mSrvCache.insert(std::make_pair(key, srv));
@@ -295,17 +271,25 @@ gl::Error TextureStorage11::getSRVLevel(int mipLevel,
else
{
ID3D11Resource *resource = nullptr;
- ANGLE_TRY(getResource(&resource));
+ gl::Error error = getResource(&resource);
+ if (error.isError())
+ {
+ return error;
+ }
DXGI_FORMAT resourceFormat =
blitSRV ? mFormatInfo.blitSRVFormat : mFormatInfo.srvFormat;
- ANGLE_TRY(createSRV(mipLevel, 1, resourceFormat, resource, &levelSRVs[mipLevel]));
+ error = createSRV(mipLevel, 1, resourceFormat, resource, &levelSRVs[mipLevel]);
+ if (error.isError())
+ {
+ return error;
+ }
}
}
*outSRV = levelSRVs[mipLevel];
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
gl::Error TextureStorage11::getSRVLevels(GLint baseLevel,
@@ -326,12 +310,14 @@ gl::Error TextureStorage11::getSRVLevels(GLint baseLevel,
if (mRenderer->getWorkarounds().zeroMaxLodWorkaround)
{
// We must ensure that the level zero texture is in sync with mipped texture.
- ANGLE_TRY(useLevelZeroWorkaroundTexture(mipLevels == 1));
+ gl::Error error = useLevelZeroWorkaroundTexture(mipLevels == 1);
+ if (error.isError())
+ {
+ return error;
+ }
}
- // TODO(jmadill): Assert we don't need to drop stencil.
-
- SRVKey key(baseLevel, mipLevels, false, false);
+ SRVKey key(baseLevel, mipLevels, false);
ANGLE_TRY(getCachedOrCreateSRV(key, outSRV));
return gl::NoError();
@@ -351,25 +337,38 @@ gl::Error TextureStorage11::generateSwizzles(const gl::SwizzleState &swizzleTarg
{
// Need to re-render the swizzle for this level
ID3D11ShaderResourceView *sourceSRV = nullptr;
- ANGLE_TRY(getSRVLevel(level, true, &sourceSRV));
+ gl::Error error = getSRVLevel(level, true, &sourceSRV);
+
+ if (error.isError())
+ {
+ return error;
+ }
ID3D11RenderTargetView *destRTV = nullptr;
- ANGLE_TRY(getSwizzleRenderTarget(level, &destRTV));
+ error = getSwizzleRenderTarget(level, &destRTV);
+ if (error.isError())
+ {
+ return error;
+ }
gl::Extents size(getLevelWidth(level), getLevelHeight(level), getLevelDepth(level));
Blit11 *blitter = mRenderer->getBlitter();
- ANGLE_TRY(blitter->swizzleTexture(sourceSRV, destRTV, size, swizzleTarget));
+ error = blitter->swizzleTexture(sourceSRV, destRTV, size, swizzleTarget);
+ if (error.isError())
+ {
+ return error;
+ }
mSwizzleCache[level] = swizzleTarget;
}
}
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
-void TextureStorage11::markLevelDirty(int mipLevel)
+void TextureStorage11::invalidateSwizzleCacheLevel(int mipLevel)
{
if (mipLevel >= 0 && static_cast<unsigned int>(mipLevel) < ArraySize(mSwizzleCache))
{
@@ -377,15 +376,13 @@ void TextureStorage11::markLevelDirty(int mipLevel)
// not a valid swizzle combination
mSwizzleCache[mipLevel] = gl::SwizzleState();
}
-
- SafeRelease(mDropStencilTexture);
}
-void TextureStorage11::markDirty()
+void TextureStorage11::invalidateSwizzleCache()
{
for (unsigned int mipLevel = 0; mipLevel < ArraySize(mSwizzleCache); mipLevel++)
{
- markLevelDirty(mipLevel);
+ invalidateSwizzleCacheLevel(mipLevel);
}
}
@@ -398,7 +395,7 @@ gl::Error TextureStorage11::updateSubresourceLevel(ID3D11Resource *srcTexture,
const GLint level = index.mipIndex;
- markLevelDirty(level);
+ invalidateSwizzleCacheLevel(level);
gl::Extents texSize(getLevelWidth(level), getLevelHeight(level), getLevelDepth(level));
@@ -428,7 +425,7 @@ gl::Error TextureStorage11::updateSubresourceLevel(ID3D11Resource *srcTexture,
if (!fullCopy && mFormatInfo.dsvFormat != DXGI_FORMAT_UNKNOWN)
{
// CopySubresourceRegion cannot copy partial depth stencils, use the blitter instead
- Blit11 *blitter = mRenderer->getBlitter();
+ Blit11 *blitter = mRenderer->getBlitter();
TextureHelper11 source = TextureHelper11::MakeAndReference(srcTexture, getFormatSet());
TextureHelper11 dest = TextureHelper11::MakeAndReference(dstTexture, getFormatSet());
return blitter->copyDepthStencil(source, sourceSubresource, copyArea, texSize, dest,
@@ -460,16 +457,22 @@ gl::Error TextureStorage11::copySubresourceLevel(ID3D11Resource *dstTexture,
ASSERT(dstTexture);
ID3D11Resource *srcTexture = nullptr;
+ gl::Error error(GL_NO_ERROR);
// If the zero-LOD workaround is active and we want to update a level greater than zero, then we
// should update the mipmapped texture, even if mapmaps are currently disabled.
if (index.mipIndex > 0 && mRenderer->getWorkarounds().zeroMaxLodWorkaround)
{
- ANGLE_TRY(getMippedResource(&srcTexture));
+ error = getMippedResource(&srcTexture);
}
else
{
- ANGLE_TRY(getResource(&srcTexture));
+ error = getResource(&srcTexture);
+ }
+
+ if (error.isError())
+ {
+ return error;
}
ASSERT(srcTexture);
@@ -508,17 +511,25 @@ gl::Error TextureStorage11::generateMipmap(const gl::ImageIndex &sourceIndex,
{
ASSERT(sourceIndex.layerIndex == destIndex.layerIndex);
- markLevelDirty(destIndex.mipIndex);
+ invalidateSwizzleCacheLevel(destIndex.mipIndex);
RenderTargetD3D *source = nullptr;
- ANGLE_TRY(getRenderTarget(sourceIndex, &source));
+ gl::Error error = getRenderTarget(sourceIndex, &source);
+ if (error.isError())
+ {
+ return error;
+ }
RenderTargetD3D *dest = nullptr;
- ANGLE_TRY(getRenderTarget(destIndex, &dest));
+ error = getRenderTarget(destIndex, &dest);
+ if (error.isError())
+ {
+ return error;
+ }
ID3D11ShaderResourceView *sourceSRV =
GetAs<RenderTarget11>(source)->getBlitShaderResourceView();
- ID3D11RenderTargetView *destRTV = GetAs<RenderTarget11>(dest)->getRenderTargetView();
+ ID3D11RenderTargetView *destRTV = GetAs<RenderTarget11>(dest)->getRenderTargetView();
gl::Box sourceArea(0, 0, 0, source->getWidth(), source->getHeight(), source->getDepth());
gl::Extents sourceSize(source->getWidth(), source->getHeight(), source->getDepth());
@@ -543,7 +554,7 @@ void TextureStorage11::verifySwizzleExists(const gl::SwizzleState &swizzleState)
void TextureStorage11::clearSRVCache()
{
- markDirty();
+ invalidateSwizzleCache();
auto iter = mSrvCache.begin();
while (iter != mSrvCache.end())
@@ -571,64 +582,72 @@ gl::Error TextureStorage11::copyToStorage(TextureStorage *destStorage)
ASSERT(destStorage);
ID3D11Resource *sourceResouce = nullptr;
- ANGLE_TRY(getResource(&sourceResouce));
+ gl::Error error = getResource(&sourceResouce);
+ if (error.isError())
+ {
+ return error;
+ }
TextureStorage11 *dest11 = GetAs<TextureStorage11>(destStorage);
ID3D11Resource *destResource = nullptr;
- ANGLE_TRY(dest11->getResource(&destResource));
+ error = dest11->getResource(&destResource);
+ if (error.isError())
+ {
+ return error;
+ }
ID3D11DeviceContext *immediateContext = mRenderer->getDeviceContext();
immediateContext->CopyResource(destResource, sourceResouce);
- dest11->markDirty();
+ dest11->invalidateSwizzleCache();
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
gl::Error TextureStorage11::setData(const gl::ImageIndex &index,
ImageD3D *image,
const gl::Box *destBox,
- GLenum inputType,
+ GLenum type,
const gl::PixelUnpackState &unpack,
const uint8_t *pixelData)
{
ASSERT(!image->isDirty());
- markLevelDirty(index.mipIndex);
-
ID3D11Resource *resource = nullptr;
ANGLE_TRY(getResource(&resource));
ASSERT(resource);
UINT destSubresource = getSubresourceIndex(index);
- const auto sizedInputFormat = image->getSizedInputFormat(inputType);
- const gl::InternalFormat &inputFormat = gl::GetInternalFormatInfo(sizedInputFormat);
+ const gl::InternalFormat &internalFormatInfo =
+ gl::GetInternalFormatInfo(image->getInternalFormat());
gl::Box levelBox(0, 0, 0, getLevelWidth(index.mipIndex), getLevelHeight(index.mipIndex),
getLevelDepth(index.mipIndex));
bool fullUpdate = (destBox == nullptr || *destBox == levelBox);
- ASSERT(inputFormat.depthBits == 0 || fullUpdate);
+ ASSERT(internalFormatInfo.depthBits == 0 || fullUpdate);
// TODO(jmadill): Handle compressed formats
// Compressed formats have different load syntax, so we'll have to handle them with slightly
// different logic. Will implemnent this in a follow-up patch, and ensure we do not use SetData
// with compressed formats in the calling logic.
- ASSERT(!inputFormat.compressed);
+ ASSERT(!internalFormatInfo.compressed);
- const int width = destBox ? destBox->width : static_cast<int>(image->getWidth());
- const int height = destBox ? destBox->height : static_cast<int>(image->getHeight());
- const int depth = destBox ? destBox->depth : static_cast<int>(image->getDepth());
+ const int width = destBox ? destBox->width : static_cast<int>(image->getWidth());
+ const int height = destBox ? destBox->height : static_cast<int>(image->getHeight());
+ const int depth = destBox ? destBox->depth : static_cast<int>(image->getDepth());
GLuint srcRowPitch = 0;
ANGLE_TRY_RESULT(
- inputFormat.computeRowPitch(width, unpack.alignment, unpack.rowLength),
+ internalFormatInfo.computeRowPitch(type, width, unpack.alignment, unpack.rowLength),
srcRowPitch);
GLuint srcDepthPitch = 0;
- ANGLE_TRY_RESULT(gl::InternalFormat::computeDepthPitch(height, unpack.imageHeight, srcRowPitch),
+ ANGLE_TRY_RESULT(internalFormatInfo.computeDepthPitch(type, width, height, unpack.alignment,
+ unpack.rowLength, unpack.imageHeight),
srcDepthPitch);
GLuint srcSkipBytes = 0;
ANGLE_TRY_RESULT(
- inputFormat.computeSkipBytes(srcRowPitch, srcDepthPitch, unpack, index.is3D()),
+ internalFormatInfo.computeSkipBytes(srcRowPitch, srcDepthPitch, unpack.skipImages,
+ unpack.skipRows, unpack.skipPixels, index.is3D()),
srcSkipBytes);
const d3d11::Format &d3d11Format =
@@ -645,7 +664,7 @@ gl::Error TextureStorage11::setData(const gl::ImageIndex &index,
MemoryBuffer *conversionBuffer = nullptr;
const uint8_t *data = nullptr;
- LoadImageFunctionInfo loadFunctionInfo = d3d11Format.getLoadFunctions()(inputType);
+ LoadImageFunctionInfo loadFunctionInfo = d3d11Format.loadFunctions(type);
if (loadFunctionInfo.requiresConversion)
{
ANGLE_TRY(mRenderer->getScratchMemoryBuffer(neededSize, &conversionBuffer));
@@ -687,12 +706,6 @@ gl::Error TextureStorage11::setData(const gl::ImageIndex &index,
return gl::NoError();
}
-gl::Error TextureStorage11::createDropStencilTexture()
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION, "Drop stencil texture not implemented.");
-}
-
TextureStorage11_2D::TextureStorage11_2D(Renderer11 *renderer, SwapChain11 *swapchain)
: TextureStorage11(renderer,
D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE,
@@ -778,7 +791,6 @@ TextureStorage11_2D::~TextureStorage11_2D()
if (error.isError())
{
// TODO: Find a way to report this back to the context
- ERR("Error initialization texture storage: %x", error.getCode());
}
}
}
@@ -817,37 +829,63 @@ gl::Error TextureStorage11_2D::copyToStorage(TextureStorage *destStorage)
// corresponding textures in destStorage.
if (mTexture)
{
- ANGLE_TRY(dest11->useLevelZeroWorkaroundTexture(false));
+ gl::Error error = dest11->useLevelZeroWorkaroundTexture(false);
+ if (error.isError())
+ {
+ return error;
+ }
ID3D11Resource *destResource = nullptr;
- ANGLE_TRY(dest11->getResource(&destResource));
+ error = dest11->getResource(&destResource);
+ if (error.isError())
+ {
+ return error;
+ }
immediateContext->CopyResource(destResource, mTexture);
}
if (mLevelZeroTexture)
{
- ANGLE_TRY(dest11->useLevelZeroWorkaroundTexture(true));
+ gl::Error error = dest11->useLevelZeroWorkaroundTexture(true);
+ if (error.isError())
+ {
+ return error;
+ }
ID3D11Resource *destResource = nullptr;
- ANGLE_TRY(dest11->getResource(&destResource));
+ error = dest11->getResource(&destResource);
+ if (error.isError())
+ {
+ return error;
+ }
immediateContext->CopyResource(destResource, mLevelZeroTexture);
}
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
+ else
+ {
+ ID3D11Resource *sourceResouce = nullptr;
+ gl::Error error = getResource(&sourceResouce);
+ if (error.isError())
+ {
+ return error;
+ }
- ID3D11Resource *sourceResouce = nullptr;
- ANGLE_TRY(getResource(&sourceResouce));
-
- ID3D11Resource *destResource = nullptr;
- ANGLE_TRY(dest11->getResource(&destResource));
+ ID3D11Resource *destResource = nullptr;
+ error = dest11->getResource(&destResource);
+ if (error.isError())
+ {
+ return error;
+ }
- immediateContext->CopyResource(destResource, sourceResouce);
- dest11->markDirty();
+ immediateContext->CopyResource(destResource, sourceResouce);
+ dest11->invalidateSwizzleCache();
+ }
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
gl::Error TextureStorage11_2D::useLevelZeroWorkaroundTexture(bool useLevelZeroTexture)
@@ -858,7 +896,11 @@ gl::Error TextureStorage11_2D::useLevelZeroWorkaroundTexture(bool useLevelZeroTe
{
if (!mUseLevelZeroTexture && mTexture)
{
- ANGLE_TRY(ensureTextureExists(1));
+ gl::Error error = ensureTextureExists(1);
+ if (error.isError())
+ {
+ return error;
+ }
// Pull data back from the mipped texture if necessary.
ASSERT(mLevelZeroTexture);
@@ -872,7 +914,11 @@ gl::Error TextureStorage11_2D::useLevelZeroWorkaroundTexture(bool useLevelZeroTe
{
if (mUseLevelZeroTexture && mLevelZeroTexture)
{
- ANGLE_TRY(ensureTextureExists(mMipLevels));
+ gl::Error error = ensureTextureExists(mMipLevels);
+ if (error.isError())
+ {
+ return error;
+ }
// Pull data back from the level zero texture if necessary.
ASSERT(mTexture);
@@ -899,7 +945,7 @@ gl::Error TextureStorage11_2D::useLevelZeroWorkaroundTexture(bool useLevelZeroTe
}
}
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
void TextureStorage11_2D::associateImage(Image11 *image, const gl::ImageIndex &index)
@@ -972,28 +1018,42 @@ gl::Error TextureStorage11_2D::releaseAssociatedImage(const gl::ImageIndex &inde
{
// Force the image to recover from storage before its data is overwritten.
// This will reset mAssociatedImages[level] to nullptr too.
- ANGLE_TRY(mAssociatedImages[level]->recoverFromAssociatedStorage());
+ gl::Error error = mAssociatedImages[level]->recoverFromAssociatedStorage();
+ if (error.isError())
+ {
+ return error;
+ }
}
}
}
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
gl::Error TextureStorage11_2D::getResource(ID3D11Resource **outResource)
{
if (mUseLevelZeroTexture && mMipLevels > 1)
{
- ANGLE_TRY(ensureTextureExists(1));
+ gl::Error error = ensureTextureExists(1);
+ if (error.isError())
+ {
+ return error;
+ }
*outResource = mLevelZeroTexture;
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
+ else
+ {
+ gl::Error error = ensureTextureExists(mMipLevels);
+ if (error.isError())
+ {
+ return error;
+ }
- ANGLE_TRY(ensureTextureExists(mMipLevels));
-
- *outResource = mTexture;
- return gl::NoError();
+ *outResource = mTexture;
+ return gl::Error(GL_NO_ERROR);
+ }
}
gl::Error TextureStorage11_2D::getMippedResource(ID3D11Resource **outResource)
@@ -1001,10 +1061,14 @@ gl::Error TextureStorage11_2D::getMippedResource(ID3D11Resource **outResource)
// This shouldn't be called unless the zero max LOD workaround is active.
ASSERT(mRenderer->getWorkarounds().zeroMaxLodWorkaround);
- ANGLE_TRY(ensureTextureExists(mMipLevels));
+ gl::Error error = ensureTextureExists(mMipLevels);
+ if (error.isError())
+ {
+ return error;
+ }
*outResource = mTexture;
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
gl::Error TextureStorage11_2D::ensureTextureExists(int mipLevels)
@@ -1078,17 +1142,29 @@ gl::Error TextureStorage11_2D::getRenderTarget(const gl::ImageIndex &index, Rend
if (mRenderTarget[level])
{
*outRT = mRenderTarget[level];
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
ID3D11Resource *texture = nullptr;
- ANGLE_TRY(getResource(&texture));
+ gl::Error error = getResource(&texture);
+ if (error.isError())
+ {
+ return error;
+ }
ID3D11ShaderResourceView *srv = nullptr;
- ANGLE_TRY(getSRVLevel(level, false, &srv));
+ error = getSRVLevel(level, false, &srv);
+ if (error.isError())
+ {
+ return error;
+ }
ID3D11ShaderResourceView *blitSRV = nullptr;
- ANGLE_TRY(getSRVLevel(level, true, &blitSRV));
+ error = getSRVLevel(level, true, &blitSRV);
+ if (error.isError())
+ {
+ return error;
+ }
ID3D11Device *device = mRenderer->getDevice();
@@ -1122,7 +1198,7 @@ gl::Error TextureStorage11_2D::getRenderTarget(const gl::ImageIndex &index, Rend
}
*outRT = mLevelZeroRenderTarget;
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
if (mFormatInfo.rtvFormat != DXGI_FORMAT_UNKNOWN)
@@ -1183,7 +1259,7 @@ gl::Error TextureStorage11_2D::getRenderTarget(const gl::ImageIndex &index, Rend
SafeRelease(dsv);
*outRT = mRenderTarget[level];
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
gl::Error TextureStorage11_2D::createSRV(int baseLevel,
@@ -1251,7 +1327,7 @@ gl::Error TextureStorage11_2D::getSwizzleTexture(ID3D11Resource **outTexture)
desc.Height = mTextureHeight;
desc.MipLevels = mMipLevels;
desc.ArraySize = 1;
- desc.Format = mFormatInfo.getSwizzleFormat(mRenderer->getRenderer11DeviceCaps()).texFormat;
+ desc.Format = mFormatInfo.swizzle.texFormat;
desc.SampleDesc.Count = 1;
desc.SampleDesc.Quality = 0;
desc.Usage = D3D11_USAGE_DEFAULT;
@@ -1283,13 +1359,16 @@ gl::Error TextureStorage11_2D::getSwizzleRenderTarget(int mipLevel, ID3D11Render
if (!mSwizzleRenderTargets[mipLevel])
{
ID3D11Resource *swizzleTexture = nullptr;
- ANGLE_TRY(getSwizzleTexture(&swizzleTexture));
+ gl::Error error = getSwizzleTexture(&swizzleTexture);
+ if (error.isError())
+ {
+ return error;
+ }
ID3D11Device *device = mRenderer->getDevice();
D3D11_RENDER_TARGET_VIEW_DESC rtvDesc;
- rtvDesc.Format =
- mFormatInfo.getSwizzleFormat(mRenderer->getRenderer11DeviceCaps()).rtvFormat;
+ rtvDesc.Format = mFormatInfo.swizzle.rtvFormat;
rtvDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D;
rtvDesc.Texture2D.MipSlice = mTopLevel + mipLevel;
@@ -1306,41 +1385,7 @@ gl::Error TextureStorage11_2D::getSwizzleRenderTarget(int mipLevel, ID3D11Render
}
*outRTV = mSwizzleRenderTargets[mipLevel];
- return gl::NoError();
-}
-
-gl::Error TextureStorage11_2D::createDropStencilTexture()
-{
- if (mDropStencilTexture)
- {
- return gl::NoError();
- }
-
- D3D11_TEXTURE2D_DESC dropDesc = {};
- dropDesc.ArraySize = 1;
- dropDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_DEPTH_STENCIL;
- dropDesc.CPUAccessFlags = 0;
- dropDesc.Format = DXGI_FORMAT_R32_TYPELESS;
- dropDesc.Height = mTextureHeight;
- dropDesc.MipLevels = mMipLevels;
- dropDesc.MiscFlags = 0;
- dropDesc.SampleDesc.Count = 1;
- dropDesc.SampleDesc.Quality = 0;
- dropDesc.Usage = D3D11_USAGE_DEFAULT;
- dropDesc.Width = mTextureWidth;
-
- ID3D11Device *device = mRenderer->getDevice();
-
- HRESULT hr = device->CreateTexture2D(&dropDesc, nullptr, &mDropStencilTexture);
- if (FAILED(hr))
- {
- return gl::Error(GL_INVALID_OPERATION, "Error creating drop stencil texture.");
- }
- d3d11::SetDebugName(mDropStencilTexture, "TexStorage2D.DropStencil");
-
- ANGLE_TRY(initDropStencilTexture(gl::ImageIndexIterator::Make2D(0, mMipLevels)));
-
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
TextureStorage11_External::TextureStorage11_External(
@@ -1352,15 +1397,15 @@ TextureStorage11_External::TextureStorage11_External(
ASSERT(stream->getProducerType() == egl::Stream::ProducerType::D3D11TextureNV12);
StreamProducerNV12 *producer = static_cast<StreamProducerNV12 *>(stream->getImplementation());
mTexture = producer->getD3DTexture();
- mSubresourceIndex = producer->getArraySlice();
+ mSubresourceIndex = producer->getArraySlice();
mTexture->AddRef();
mMipLevels = 1;
D3D11_TEXTURE2D_DESC desc;
mTexture->GetDesc(&desc);
- mTextureWidth = desc.Width;
- mTextureHeight = desc.Height;
- mTextureDepth = 1;
+ mTextureWidth = desc.Width;
+ mTextureHeight = desc.Height;
+ mTextureDepth = 1;
mHasKeyedMutex = (desc.MiscFlags & D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX) != 0;
}
@@ -1504,10 +1549,10 @@ TextureStorage11_EGLImage::TextureStorage11_EGLImage(Renderer11 *renderer,
{
mCurrentRenderTarget = reinterpret_cast<uintptr_t>(renderTarget11);
- mMipLevels = 1;
- mTextureWidth = renderTarget11->getWidth();
- mTextureHeight = renderTarget11->getHeight();
- mTextureDepth = 1;
+ mMipLevels = 1;
+ mTextureWidth = renderTarget11->getWidth();
+ mTextureHeight = renderTarget11->getHeight();
+ mTextureDepth = 1;
}
TextureStorage11_EGLImage::~TextureStorage11_EGLImage()
@@ -1549,8 +1594,13 @@ gl::Error TextureStorage11_EGLImage::getRenderTarget(const gl::ImageIndex &index
{
ASSERT(!index.hasLayer());
ASSERT(index.mipIndex == 0);
+ UNUSED_ASSERTION_VARIABLE(index);
- ANGLE_TRY(checkForUpdatedRenderTarget());
+ gl::Error error = checkForUpdatedRenderTarget();
+ if (error.isError())
+ {
+ return error;
+ }
return mImage->getRenderTarget(outRT);
}
@@ -1558,19 +1608,27 @@ gl::Error TextureStorage11_EGLImage::getRenderTarget(const gl::ImageIndex &index
gl::Error TextureStorage11_EGLImage::copyToStorage(TextureStorage *destStorage)
{
ID3D11Resource *sourceResouce = nullptr;
- ANGLE_TRY(getResource(&sourceResouce));
+ gl::Error error = getResource(&sourceResouce);
+ if (error.isError())
+ {
+ return error;
+ }
ASSERT(destStorage);
TextureStorage11_2D *dest11 = GetAs<TextureStorage11_2D>(destStorage);
ID3D11Resource *destResource = nullptr;
- ANGLE_TRY(dest11->getResource(&destResource));
+ error = dest11->getResource(&destResource);
+ if (error.isError())
+ {
+ return error;
+ }
ID3D11DeviceContext *immediateContext = mRenderer->getDeviceContext();
immediateContext->CopyResource(destResource, sourceResouce);
- dest11->markDirty();
+ dest11->invalidateSwizzleCache();
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
void TextureStorage11_EGLImage::associateImage(Image11 *, const gl::ImageIndex &)
@@ -1610,7 +1668,7 @@ gl::Error TextureStorage11_EGLImage::getSwizzleTexture(ID3D11Resource **outTextu
desc.Height = mTextureHeight;
desc.MipLevels = mMipLevels;
desc.ArraySize = 1;
- desc.Format = mFormatInfo.getSwizzleFormat(mRenderer->getRenderer11DeviceCaps()).texFormat;
+ desc.Format = mFormatInfo.swizzle.texFormat;
desc.SampleDesc.Count = 1;
desc.SampleDesc.Quality = 0;
desc.Usage = D3D11_USAGE_DEFAULT;
@@ -1643,13 +1701,16 @@ gl::Error TextureStorage11_EGLImage::getSwizzleRenderTarget(int mipLevel,
if (!mSwizzleRenderTargets[mipLevel])
{
ID3D11Resource *swizzleTexture = nullptr;
- ANGLE_TRY(getSwizzleTexture(&swizzleTexture));
+ gl::Error error = getSwizzleTexture(&swizzleTexture);
+ if (error.isError())
+ {
+ return error;
+ }
ID3D11Device *device = mRenderer->getDevice();
D3D11_RENDER_TARGET_VIEW_DESC rtvDesc;
- rtvDesc.Format =
- mFormatInfo.getSwizzleFormat(mRenderer->getRenderer11DeviceCaps()).rtvFormat;
+ rtvDesc.Format = mFormatInfo.swizzle.rtvFormat;
rtvDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D;
rtvDesc.Texture2D.MipSlice = mTopLevel + mipLevel;
@@ -1666,7 +1727,7 @@ gl::Error TextureStorage11_EGLImage::getSwizzleRenderTarget(int mipLevel,
}
*outRTV = mSwizzleRenderTargets[mipLevel];
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
gl::Error TextureStorage11_EGLImage::checkForUpdatedRenderTarget()
@@ -1719,7 +1780,11 @@ gl::Error TextureStorage11_EGLImage::createSRV(int baseLevel,
else
{
RenderTarget11 *renderTarget = nullptr;
- ANGLE_TRY(getImageRenderTarget(&renderTarget));
+ gl::Error error = getImageRenderTarget(&renderTarget);
+ if (error.isError())
+ {
+ return error;
+ }
ASSERT(texture == renderTarget->getTexture());
@@ -1860,20 +1925,36 @@ gl::Error TextureStorage11_Cube::copyToStorage(TextureStorage *destStorage)
// corresponding textures in destStorage.
if (mTexture)
{
- ANGLE_TRY(dest11->useLevelZeroWorkaroundTexture(false));
+ gl::Error error = dest11->useLevelZeroWorkaroundTexture(false);
+ if (error.isError())
+ {
+ return error;
+ }
ID3D11Resource *destResource = nullptr;
- ANGLE_TRY(dest11->getResource(&destResource));
+ error = dest11->getResource(&destResource);
+ if (error.isError())
+ {
+ return error;
+ }
immediateContext->CopyResource(destResource, mTexture);
}
if (mLevelZeroTexture)
{
- ANGLE_TRY(dest11->useLevelZeroWorkaroundTexture(true));
+ gl::Error error = dest11->useLevelZeroWorkaroundTexture(true);
+ if (error.isError())
+ {
+ return error;
+ }
ID3D11Resource *destResource = nullptr;
- ANGLE_TRY(dest11->getResource(&destResource));
+ error = dest11->getResource(&destResource);
+ if (error.isError())
+ {
+ return error;
+ }
immediateContext->CopyResource(destResource, mLevelZeroTexture);
}
@@ -1881,18 +1962,26 @@ gl::Error TextureStorage11_Cube::copyToStorage(TextureStorage *destStorage)
else
{
ID3D11Resource *sourceResouce = nullptr;
- ANGLE_TRY(getResource(&sourceResouce));
+ gl::Error error = getResource(&sourceResouce);
+ if (error.isError())
+ {
+ return error;
+ }
ID3D11Resource *destResource = nullptr;
- ANGLE_TRY(dest11->getResource(&destResource));
+ error = dest11->getResource(&destResource);
+ if (error.isError())
+ {
+ return error;
+ }
ID3D11DeviceContext *immediateContext = mRenderer->getDeviceContext();
immediateContext->CopyResource(destResource, sourceResouce);
}
- dest11->markDirty();
+ dest11->invalidateSwizzleCache();
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
gl::Error TextureStorage11_Cube::useLevelZeroWorkaroundTexture(bool useLevelZeroTexture)
@@ -1901,7 +1990,11 @@ gl::Error TextureStorage11_Cube::useLevelZeroWorkaroundTexture(bool useLevelZero
{
if (!mUseLevelZeroTexture && mTexture)
{
- ANGLE_TRY(ensureTextureExists(1));
+ gl::Error error = ensureTextureExists(1);
+ if (error.isError())
+ {
+ return error;
+ }
// Pull data back from the mipped texture if necessary.
ASSERT(mLevelZeroTexture);
@@ -1920,7 +2013,11 @@ gl::Error TextureStorage11_Cube::useLevelZeroWorkaroundTexture(bool useLevelZero
{
if (mUseLevelZeroTexture && mLevelZeroTexture)
{
- ANGLE_TRY(ensureTextureExists(mMipLevels));
+ gl::Error error = ensureTextureExists(mMipLevels);
+ if (error.isError())
+ {
+ return error;
+ }
// Pull data back from the level zero texture if necessary.
ASSERT(mTexture);
@@ -1936,7 +2033,7 @@ gl::Error TextureStorage11_Cube::useLevelZeroWorkaroundTexture(bool useLevelZero
mUseLevelZeroTexture = false;
}
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
void TextureStorage11_Cube::associateImage(Image11 *image, const gl::ImageIndex &index)
@@ -2029,29 +2126,43 @@ gl::Error TextureStorage11_Cube::releaseAssociatedImage(const gl::ImageIndex &in
{
// Force the image to recover from storage before its data is overwritten.
// This will reset mAssociatedImages[level] to nullptr too.
- ANGLE_TRY(
- mAssociatedImages[layerTarget][level]->recoverFromAssociatedStorage());
+ gl::Error error =
+ mAssociatedImages[layerTarget][level]->recoverFromAssociatedStorage();
+ if (error.isError())
+ {
+ return error;
+ }
}
}
}
}
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
gl::Error TextureStorage11_Cube::getResource(ID3D11Resource **outResource)
{
if (mUseLevelZeroTexture && mMipLevels > 1)
{
- ANGLE_TRY(ensureTextureExists(1));
+ gl::Error error = ensureTextureExists(1);
+ if (error.isError())
+ {
+ return error;
+ }
+
*outResource = mLevelZeroTexture;
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
else
{
- ANGLE_TRY(ensureTextureExists(mMipLevels));
+ gl::Error error = ensureTextureExists(mMipLevels);
+ if (error.isError())
+ {
+ return error;
+ }
+
*outResource = mTexture;
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
}
@@ -2060,9 +2171,14 @@ gl::Error TextureStorage11_Cube::getMippedResource(ID3D11Resource **outResource)
// This shouldn't be called unless the zero max LOD workaround is active.
ASSERT(mRenderer->getWorkarounds().zeroMaxLodWorkaround);
- ANGLE_TRY(ensureTextureExists(mMipLevels));
+ gl::Error error = ensureTextureExists(mMipLevels);
+ if (error.isError())
+ {
+ return error;
+ }
+
*outResource = mTexture;
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
gl::Error TextureStorage11_Cube::ensureTextureExists(int mipLevels)
@@ -2113,7 +2229,7 @@ gl::Error TextureStorage11_Cube::ensureTextureExists(int mipLevels)
d3d11::SetDebugName(*outputTexture, "TexStorageCube.Texture");
}
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
gl::Error TextureStorage11_Cube::createRenderTargetSRV(ID3D11Resource *texture,
@@ -2167,7 +2283,11 @@ gl::Error TextureStorage11_Cube::getRenderTarget(const gl::ImageIndex &index,
HRESULT result;
ID3D11Resource *texture = nullptr;
- ANGLE_TRY(getResource(&texture));
+ gl::Error error = getResource(&texture);
+ if (error.isError())
+ {
+ return error;
+ }
if (mUseLevelZeroTexture)
{
@@ -2206,12 +2326,15 @@ gl::Error TextureStorage11_Cube::getRenderTarget(const gl::ImageIndex &index,
}
ID3D11ShaderResourceView *srv = nullptr;
- ANGLE_TRY(createRenderTargetSRV(texture, index, mFormatInfo.srvFormat, &srv));
+ error = createRenderTargetSRV(texture, index, mFormatInfo.srvFormat, &srv);
+ if (error.isError())
+ {
+ return error;
+ }
ID3D11ShaderResourceView *blitSRV = nullptr;
if (mFormatInfo.blitSRVFormat != mFormatInfo.srvFormat)
{
- gl::Error error =
- createRenderTargetSRV(texture, index, mFormatInfo.blitSRVFormat, &blitSRV);
+ error = createRenderTargetSRV(texture, index, mFormatInfo.blitSRVFormat, &blitSRV);
if (error.isError())
{
SafeRelease(srv);
@@ -2319,8 +2442,8 @@ gl::Error TextureStorage11_Cube::createSRV(int baseLevel,
// Unnormalized integer cube maps are not supported by DX11; we emulate them as an array of six
// 2D textures
- const GLenum componentType = d3d11::GetComponentType(format);
- if (componentType == GL_INT || componentType == GL_UNSIGNED_INT)
+ const d3d11::DXGIFormat &dxgiFormatInfo = d3d11::GetDXGIFormatInfo(format);
+ if (dxgiFormatInfo.componentType == GL_INT || dxgiFormatInfo.componentType == GL_UNSIGNED_INT)
{
srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2DARRAY;
srvDesc.Texture2DArray.MostDetailedMip = mTopLevel + baseLevel;
@@ -2386,7 +2509,7 @@ gl::Error TextureStorage11_Cube::getSwizzleTexture(ID3D11Resource **outTexture)
desc.Height = mTextureHeight;
desc.MipLevels = mMipLevels;
desc.ArraySize = CUBE_FACE_COUNT;
- desc.Format = mFormatInfo.getSwizzleFormat(mRenderer->getRenderer11DeviceCaps()).texFormat;
+ desc.Format = mFormatInfo.swizzle.texFormat;
desc.SampleDesc.Count = 1;
desc.SampleDesc.Quality = 0;
desc.Usage = D3D11_USAGE_DEFAULT;
@@ -2419,13 +2542,16 @@ gl::Error TextureStorage11_Cube::getSwizzleRenderTarget(int mipLevel,
if (!mSwizzleRenderTargets[mipLevel])
{
ID3D11Resource *swizzleTexture = nullptr;
- ANGLE_TRY(getSwizzleTexture(&swizzleTexture));
+ gl::Error error = getSwizzleTexture(&swizzleTexture);
+ if (error.isError())
+ {
+ return error;
+ }
ID3D11Device *device = mRenderer->getDevice();
D3D11_RENDER_TARGET_VIEW_DESC rtvDesc;
- rtvDesc.Format =
- mFormatInfo.getSwizzleFormat(mRenderer->getRenderer11DeviceCaps()).rtvFormat;
+ rtvDesc.Format = mFormatInfo.swizzle.rtvFormat;
rtvDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2DARRAY;
rtvDesc.Texture2DArray.MipSlice = mTopLevel + mipLevel;
rtvDesc.Texture2DArray.FirstArraySlice = 0;
@@ -2444,67 +2570,7 @@ gl::Error TextureStorage11_Cube::getSwizzleRenderTarget(int mipLevel,
}
*outRTV = mSwizzleRenderTargets[mipLevel];
- return gl::NoError();
-}
-
-gl::Error TextureStorage11::initDropStencilTexture(const gl::ImageIndexIterator &it)
-{
- ID3D11Resource *resource = nullptr;
- ANGLE_TRY(getResource(&resource));
- TextureHelper11 sourceTexture = TextureHelper11::MakeAndReference(resource, mFormatInfo);
- TextureHelper11 destTexture = TextureHelper11::MakeAndReference(
- mDropStencilTexture,
- d3d11::Format::Get(GL_DEPTH_COMPONENT32F, mRenderer->getRenderer11DeviceCaps()));
-
- gl::ImageIndexIterator itCopy = it;
-
- while (itCopy.hasNext())
- {
- gl::ImageIndex index = itCopy.next();
- gl::Box wholeArea(0, 0, 0, getLevelWidth(index.mipIndex), getLevelHeight(index.mipIndex),
- 1);
- gl::Extents wholeSize(wholeArea.width, wholeArea.height, 1);
- UINT subresource = getSubresourceIndex(index);
- ANGLE_TRY(mRenderer->getBlitter()->copyDepthStencil(sourceTexture, subresource, wholeArea,
- wholeSize, destTexture, subresource,
- wholeArea, wholeSize, nullptr));
- }
-
- return gl::NoError();
-}
-
-gl::Error TextureStorage11_Cube::createDropStencilTexture()
-{
- if (mDropStencilTexture)
- {
- return gl::NoError();
- }
-
- D3D11_TEXTURE2D_DESC dropDesc = {};
- dropDesc.ArraySize = 6;
- dropDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_DEPTH_STENCIL;
- dropDesc.CPUAccessFlags = 0;
- dropDesc.Format = DXGI_FORMAT_R32_TYPELESS;
- dropDesc.Height = mTextureHeight;
- dropDesc.MipLevels = mMipLevels;
- dropDesc.MiscFlags = D3D11_RESOURCE_MISC_TEXTURECUBE;
- dropDesc.SampleDesc.Count = 1;
- dropDesc.SampleDesc.Quality = 0;
- dropDesc.Usage = D3D11_USAGE_DEFAULT;
- dropDesc.Width = mTextureWidth;
-
- ID3D11Device *device = mRenderer->getDevice();
-
- HRESULT hr = device->CreateTexture2D(&dropDesc, nullptr, &mDropStencilTexture);
- if (FAILED(hr))
- {
- return gl::Error(GL_INVALID_OPERATION, "Error creating drop stencil texture.");
- }
- d3d11::SetDebugName(mDropStencilTexture, "TexStorageCube.DropStencil");
-
- ANGLE_TRY(initDropStencilTexture(gl::ImageIndexIterator::MakeCube(0, mMipLevels)));
-
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
TextureStorage11_3D::TextureStorage11_3D(Renderer11 *renderer,
@@ -2647,12 +2713,16 @@ gl::Error TextureStorage11_3D::releaseAssociatedImage(const gl::ImageIndex &inde
{
// Force the image to recover from storage before its data is overwritten.
// This will reset mAssociatedImages[level] to nullptr too.
- ANGLE_TRY(mAssociatedImages[level]->recoverFromAssociatedStorage());
+ gl::Error error = mAssociatedImages[level]->recoverFromAssociatedStorage();
+ if (error.isError())
+ {
+ return error;
+ }
}
}
}
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
gl::Error TextureStorage11_3D::getResource(ID3D11Resource **outResource)
@@ -2740,13 +2810,25 @@ gl::Error TextureStorage11_3D::getRenderTarget(const gl::ImageIndex &index, Rend
if (!mLevelRenderTargets[mipLevel])
{
ID3D11Resource *texture = nullptr;
- ANGLE_TRY(getResource(&texture));
+ gl::Error error = getResource(&texture);
+ if (error.isError())
+ {
+ return error;
+ }
ID3D11ShaderResourceView *srv = nullptr;
- ANGLE_TRY(getSRVLevel(mipLevel, false, &srv));
+ error = getSRVLevel(mipLevel, false, &srv);
+ if (error.isError())
+ {
+ return error;
+ }
ID3D11ShaderResourceView *blitSRV = nullptr;
- ANGLE_TRY(getSRVLevel(mipLevel, true, &blitSRV));
+ error = getSRVLevel(mipLevel, true, &blitSRV);
+ if (error.isError())
+ {
+ return error;
+ }
ID3D11Device *device = mRenderer->getDevice();
@@ -2796,10 +2878,14 @@ gl::Error TextureStorage11_3D::getRenderTarget(const gl::ImageIndex &index, Rend
HRESULT result;
ID3D11Resource *texture = nullptr;
- ANGLE_TRY(getResource(&texture));
+ gl::Error error = getResource(&texture);
+ if (error.isError())
+ {
+ return error;
+ }
// TODO, what kind of SRV is expected here?
- ID3D11ShaderResourceView *srv = nullptr;
+ ID3D11ShaderResourceView *srv = nullptr;
ID3D11ShaderResourceView *blitSRV = nullptr;
D3D11_RENDER_TARGET_VIEW_DESC rtvDesc;
@@ -2836,7 +2922,7 @@ gl::Error TextureStorage11_3D::getRenderTarget(const gl::ImageIndex &index, Rend
ASSERT(outRT);
*outRT = mLevelLayerRenderTargets[key];
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
}
@@ -2853,7 +2939,7 @@ gl::Error TextureStorage11_3D::getSwizzleTexture(ID3D11Resource **outTexture)
desc.Height = mTextureHeight;
desc.Depth = mTextureDepth;
desc.MipLevels = mMipLevels;
- desc.Format = mFormatInfo.getSwizzleFormat(mRenderer->getRenderer11DeviceCaps()).texFormat;
+ desc.Format = mFormatInfo.swizzle.texFormat;
desc.Usage = D3D11_USAGE_DEFAULT;
desc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET;
desc.CPUAccessFlags = 0;
@@ -2883,13 +2969,16 @@ gl::Error TextureStorage11_3D::getSwizzleRenderTarget(int mipLevel, ID3D11Render
if (!mSwizzleRenderTargets[mipLevel])
{
ID3D11Resource *swizzleTexture = nullptr;
- ANGLE_TRY(getSwizzleTexture(&swizzleTexture));
+ gl::Error error = getSwizzleTexture(&swizzleTexture);
+ if (error.isError())
+ {
+ return error;
+ }
ID3D11Device *device = mRenderer->getDevice();
D3D11_RENDER_TARGET_VIEW_DESC rtvDesc;
- rtvDesc.Format =
- mFormatInfo.getSwizzleFormat(mRenderer->getRenderer11DeviceCaps()).rtvFormat;
+ rtvDesc.Format = mFormatInfo.swizzle.rtvFormat;
rtvDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE3D;
rtvDesc.Texture3D.MipSlice = mTopLevel + mipLevel;
rtvDesc.Texture3D.FirstWSlice = 0;
@@ -3052,12 +3141,16 @@ gl::Error TextureStorage11_2DArray::releaseAssociatedImage(const gl::ImageIndex
{
// Force the image to recover from storage before its data is overwritten.
// This will reset mAssociatedImages[level] to nullptr too.
- ANGLE_TRY(mAssociatedImages[key]->recoverFromAssociatedStorage());
+ gl::Error error = mAssociatedImages[key]->recoverFromAssociatedStorage();
+ if (error.isError())
+ {
+ return error;
+ }
}
}
}
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
gl::Error TextureStorage11_2DArray::getResource(ID3D11Resource **outResource)
@@ -3180,14 +3273,21 @@ gl::Error TextureStorage11_2DArray::getRenderTarget(const gl::ImageIndex &index,
HRESULT result;
ID3D11Resource *texture = nullptr;
- ANGLE_TRY(getResource(&texture));
+ gl::Error error = getResource(&texture);
+ if (error.isError())
+ {
+ return error;
+ }
ID3D11ShaderResourceView *srv;
- ANGLE_TRY(createRenderTargetSRV(texture, index, mFormatInfo.srvFormat, &srv));
+ error = createRenderTargetSRV(texture, index, mFormatInfo.srvFormat, &srv);
+ if (error.isError())
+ {
+ return error;
+ }
ID3D11ShaderResourceView *blitSRV;
if (mFormatInfo.blitSRVFormat != mFormatInfo.srvFormat)
{
- gl::Error error =
- createRenderTargetSRV(texture, index, mFormatInfo.blitSRVFormat, &blitSRV);
+ error = createRenderTargetSRV(texture, index, mFormatInfo.blitSRVFormat, &blitSRV);
if (error.isError())
{
SafeRelease(srv);
@@ -3275,7 +3375,7 @@ gl::Error TextureStorage11_2DArray::getRenderTarget(const gl::ImageIndex &index,
ASSERT(outRT);
*outRT = mRenderTargets[key];
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
gl::Error TextureStorage11_2DArray::getSwizzleTexture(ID3D11Resource **outTexture)
@@ -3289,7 +3389,7 @@ gl::Error TextureStorage11_2DArray::getSwizzleTexture(ID3D11Resource **outTextur
desc.Height = mTextureHeight;
desc.MipLevels = mMipLevels;
desc.ArraySize = mTextureDepth;
- desc.Format = mFormatInfo.getSwizzleFormat(mRenderer->getRenderer11DeviceCaps()).texFormat;
+ desc.Format = mFormatInfo.swizzle.texFormat;
desc.SampleDesc.Count = 1;
desc.SampleDesc.Quality = 0;
desc.Usage = D3D11_USAGE_DEFAULT;
@@ -3322,13 +3422,16 @@ gl::Error TextureStorage11_2DArray::getSwizzleRenderTarget(int mipLevel,
if (!mSwizzleRenderTargets[mipLevel])
{
ID3D11Resource *swizzleTexture = nullptr;
- ANGLE_TRY(getSwizzleTexture(&swizzleTexture));
+ gl::Error error = getSwizzleTexture(&swizzleTexture);
+ if (error.isError())
+ {
+ return error;
+ }
ID3D11Device *device = mRenderer->getDevice();
D3D11_RENDER_TARGET_VIEW_DESC rtvDesc;
- rtvDesc.Format =
- mFormatInfo.getSwizzleFormat(mRenderer->getRenderer11DeviceCaps()).rtvFormat;
+ rtvDesc.Format = mFormatInfo.swizzle.rtvFormat;
rtvDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2DARRAY;
rtvDesc.Texture2DArray.MipSlice = mTopLevel + mipLevel;
rtvDesc.Texture2DArray.FirstArraySlice = 0;
@@ -3347,44 +3450,6 @@ gl::Error TextureStorage11_2DArray::getSwizzleRenderTarget(int mipLevel,
}
*outRTV = mSwizzleRenderTargets[mipLevel];
- return gl::NoError();
-}
-
-gl::Error TextureStorage11_2DArray::createDropStencilTexture()
-{
- if (mDropStencilTexture)
- {
- return gl::NoError();
- }
-
- D3D11_TEXTURE2D_DESC dropDesc = {};
- dropDesc.ArraySize = mTextureDepth;
- dropDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_DEPTH_STENCIL;
- dropDesc.CPUAccessFlags = 0;
- dropDesc.Format = DXGI_FORMAT_R32_TYPELESS;
- dropDesc.Height = mTextureHeight;
- dropDesc.MipLevels = mMipLevels;
- dropDesc.MiscFlags = 0;
- dropDesc.SampleDesc.Count = 1;
- dropDesc.SampleDesc.Quality = 0;
- dropDesc.Usage = D3D11_USAGE_DEFAULT;
- dropDesc.Width = mTextureWidth;
-
- ID3D11Device *device = mRenderer->getDevice();
-
- HRESULT hr = device->CreateTexture2D(&dropDesc, nullptr, &mDropStencilTexture);
- if (FAILED(hr))
- {
- return gl::Error(GL_INVALID_OPERATION, "Error creating drop stencil texture.");
- }
- d3d11::SetDebugName(mDropStencilTexture, "TexStorage2DArray.DropStencil");
-
- std::vector<GLsizei> layerCounts(mMipLevels, mTextureDepth);
-
- ANGLE_TRY(initDropStencilTexture(
- gl::ImageIndexIterator::Make2DArray(0, mMipLevels, layerCounts.data())));
-
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
-
} // namespace rx
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/TextureStorage11.h b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/TextureStorage11.h
index 46eb8458b..8d968adb0 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/TextureStorage11.h
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/TextureStorage11.h
@@ -59,8 +59,8 @@ class TextureStorage11 : public TextureStorage
virtual UINT getSubresourceIndex(const gl::ImageIndex &index) const;
gl::Error generateSwizzles(const gl::SwizzleState &swizzleTarget);
- void markLevelDirty(int mipLevel);
- void markDirty();
+ void invalidateSwizzleCacheLevel(int mipLevel);
+ void invalidateSwizzleCache();
gl::Error updateSubresourceLevel(ID3D11Resource *texture, unsigned int sourceSubresource,
const gl::ImageIndex &index, const gl::Box &copyArea);
@@ -94,10 +94,6 @@ class TextureStorage11 : public TextureStorage
virtual gl::Error getSwizzleRenderTarget(int mipLevel, ID3D11RenderTargetView **outRTV) = 0;
gl::Error getSRVLevel(int mipLevel, bool blitSRV, ID3D11ShaderResourceView **outSRV);
- // Get a version of a depth texture with only depth information, not stencil.
- virtual gl::Error createDropStencilTexture();
- gl::Error initDropStencilTexture(const gl::ImageIndexIterator &it);
-
// The baseLevel parameter should *not* have mTopLevel applied.
virtual gl::Error createSRV(int baseLevel, int mipLevels, DXGI_FORMAT format, ID3D11Resource *texture,
ID3D11ShaderResourceView **outSRV) const = 0;
@@ -117,7 +113,6 @@ class TextureStorage11 : public TextureStorage
unsigned int mTextureDepth;
gl::SwizzleState mSwizzleCache[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
- ID3D11Texture2D *mDropStencilTexture;
private:
const UINT mBindFlags;
@@ -125,14 +120,13 @@ class TextureStorage11 : public TextureStorage
struct SRVKey
{
- SRVKey(int baseLevel, int mipLevels, bool swizzle, bool dropStencil);
+ SRVKey(int baseLevel = 0, int mipLevels = 0, bool swizzle = false);
bool operator<(const SRVKey &rhs) const;
- int baseLevel = 0; // Without mTopLevel applied.
- int mipLevels = 0;
- bool swizzle = false;
- bool dropStencil = false;
+ int baseLevel; // Without mTopLevel applied.
+ int mipLevels;
+ bool swizzle;
};
typedef std::map<SRVKey, ID3D11ShaderResourceView *> SRVCache;
@@ -148,35 +142,30 @@ class TextureStorage11_2D : public TextureStorage11
public:
TextureStorage11_2D(Renderer11 *renderer, SwapChain11 *swapchain);
TextureStorage11_2D(Renderer11 *renderer, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, int levels, bool hintLevelZeroOnly = false);
- ~TextureStorage11_2D() override;
+ virtual ~TextureStorage11_2D();
- gl::Error getResource(ID3D11Resource **outResource) override;
- gl::Error getMippedResource(ID3D11Resource **outResource) override;
- gl::Error getRenderTarget(const gl::ImageIndex &index, RenderTargetD3D **outRT) override;
+ virtual gl::Error getResource(ID3D11Resource **outResource);
+ virtual gl::Error getMippedResource(ID3D11Resource **outResource);
+ virtual gl::Error getRenderTarget(const gl::ImageIndex &index, RenderTargetD3D **outRT);
- gl::Error copyToStorage(TextureStorage *destStorage) override;
+ virtual gl::Error copyToStorage(TextureStorage *destStorage);
- void associateImage(Image11 *image, const gl::ImageIndex &index) override;
- void disassociateImage(const gl::ImageIndex &index, Image11 *expectedImage) override;
- bool isAssociatedImageValid(const gl::ImageIndex &index, Image11 *expectedImage) override;
- gl::Error releaseAssociatedImage(const gl::ImageIndex &index, Image11 *incomingImage) override;
+ virtual void associateImage(Image11* image, const gl::ImageIndex &index);
+ virtual void disassociateImage(const gl::ImageIndex &index, Image11* expectedImage);
+ virtual bool isAssociatedImageValid(const gl::ImageIndex &index, Image11* expectedImage);
+ virtual gl::Error releaseAssociatedImage(const gl::ImageIndex &index, Image11* incomingImage);
- gl::Error useLevelZeroWorkaroundTexture(bool useLevelZeroTexture) override;
+ virtual gl::Error useLevelZeroWorkaroundTexture(bool useLevelZeroTexture);
protected:
- gl::Error getSwizzleTexture(ID3D11Resource **outTexture) override;
- gl::Error getSwizzleRenderTarget(int mipLevel, ID3D11RenderTargetView **outRTV) override;
-
- gl::Error createDropStencilTexture() override;
+ virtual gl::Error getSwizzleTexture(ID3D11Resource **outTexture);
+ virtual gl::Error getSwizzleRenderTarget(int mipLevel, ID3D11RenderTargetView **outRTV);
gl::Error ensureTextureExists(int mipLevels);
private:
- gl::Error createSRV(int baseLevel,
- int mipLevels,
- DXGI_FORMAT format,
- ID3D11Resource *texture,
- ID3D11ShaderResourceView **outSRV) const override;
+ virtual gl::Error createSRV(int baseLevel, int mipLevels, DXGI_FORMAT format, ID3D11Resource *texture,
+ ID3D11ShaderResourceView **outSRV) const;
ID3D11Texture2D *mTexture;
RenderTarget11 *mRenderTarget[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
@@ -312,8 +301,6 @@ class TextureStorage11_Cube : public TextureStorage11
virtual gl::Error getSwizzleTexture(ID3D11Resource **outTexture);
virtual gl::Error getSwizzleRenderTarget(int mipLevel, ID3D11RenderTargetView **outRTV);
- gl::Error createDropStencilTexture() override;
-
gl::Error ensureTextureExists(int mipLevels);
private:
@@ -397,8 +384,6 @@ class TextureStorage11_2DArray : public TextureStorage11
virtual gl::Error getSwizzleTexture(ID3D11Resource **outTexture);
virtual gl::Error getSwizzleRenderTarget(int mipLevel, ID3D11RenderTargetView **outRTV);
- gl::Error createDropStencilTexture() override;
-
private:
virtual gl::Error createSRV(int baseLevel, int mipLevels, DXGI_FORMAT format, ID3D11Resource *texture,
ID3D11ShaderResourceView **outSRV) const;
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/VertexArray11.cpp b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/VertexArray11.cpp
index e06a6b22b..8f0fe8496 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/VertexArray11.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/VertexArray11.cpp
@@ -182,8 +182,12 @@ gl::Error VertexArray11::updateDirtyAndDynamicAttribs(VertexDataManager *vertexD
break;
case VertexStorageType::STATIC:
{
- ANGLE_TRY(
- VertexDataManager::StoreStaticAttrib(translatedAttrib, count, instances));
+ auto error =
+ VertexDataManager::StoreStaticAttrib(translatedAttrib, count, instances);
+ if (error.isError())
+ {
+ return error;
+ }
break;
}
case VertexStorageType::CURRENT_VALUE:
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/VertexBuffer11.cpp b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/VertexBuffer11.cpp
index 6cd91bd35..8e2d119d2 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/VertexBuffer11.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/VertexBuffer11.cpp
@@ -21,9 +21,9 @@ namespace rx
VertexBuffer11::VertexBuffer11(Renderer11 *const renderer) : mRenderer(renderer)
{
- mBuffer = NULL;
- mBufferSize = 0;
- mDynamicUsage = false;
+ mBuffer = NULL;
+ mBufferSize = 0;
+ mDynamicUsage = false;
mMappedResourceData = NULL;
}
@@ -41,21 +41,20 @@ gl::Error VertexBuffer11::initialize(unsigned int size, bool dynamicUsage)
if (size > 0)
{
- ID3D11Device *dxDevice = mRenderer->getDevice();
+ ID3D11Device* dxDevice = mRenderer->getDevice();
D3D11_BUFFER_DESC bufferDesc;
- bufferDesc.ByteWidth = size;
- bufferDesc.Usage = D3D11_USAGE_DYNAMIC;
- bufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
- bufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
- bufferDesc.MiscFlags = 0;
+ bufferDesc.ByteWidth = size;
+ bufferDesc.Usage = D3D11_USAGE_DYNAMIC;
+ bufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
+ bufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
+ bufferDesc.MiscFlags = 0;
bufferDesc.StructureByteStride = 0;
HRESULT result = dxDevice->CreateBuffer(&bufferDesc, NULL, &mBuffer);
if (FAILED(result))
{
- return gl::Error(GL_OUT_OF_MEMORY,
- "Failed to allocate internal vertex buffer of size, %lu.", size);
+ return gl::Error(GL_OUT_OF_MEMORY, "Failed to allocate internal vertex buffer of size, %lu.", size);
}
if (dynamicUsage)
@@ -68,7 +67,7 @@ gl::Error VertexBuffer11::initialize(unsigned int size, bool dynamicUsage)
}
}
- mBufferSize = size;
+ mBufferSize = size;
mDynamicUsage = dynamicUsage;
return gl::Error(GL_NO_ERROR);
@@ -82,15 +81,13 @@ gl::Error VertexBuffer11::mapResource()
D3D11_MAPPED_SUBRESOURCE mappedResource;
- HRESULT result =
- dxContext->Map(mBuffer, 0, D3D11_MAP_WRITE_NO_OVERWRITE, 0, &mappedResource);
+ HRESULT result = dxContext->Map(mBuffer, 0, D3D11_MAP_WRITE_NO_OVERWRITE, 0, &mappedResource);
if (FAILED(result))
{
- return gl::Error(GL_OUT_OF_MEMORY,
- "Failed to map internal vertex buffer, HRESULT: 0x%08x.", result);
+ return gl::Error(GL_OUT_OF_MEMORY, "Failed to map internal vertex buffer, HRESULT: 0x%08x.", result);
}
- mMappedResourceData = reinterpret_cast<uint8_t *>(mappedResource.pData);
+ mMappedResourceData = reinterpret_cast<uint8_t*>(mappedResource.pData);
}
return gl::Error(GL_NO_ERROR);
@@ -123,7 +120,11 @@ gl::Error VertexBuffer11::storeVertexAttributes(const gl::VertexAttribute &attri
int inputStride = static_cast<int>(ComputeVertexAttributeStride(attrib));
// This will map the resource if it isn't already mapped.
- ANGLE_TRY(mapResource());
+ gl::Error error = mapResource();
+ if (error.isError())
+ {
+ return error;
+ }
uint8_t *output = mMappedResourceData + offset;
@@ -135,13 +136,12 @@ gl::Error VertexBuffer11::storeVertexAttributes(const gl::VertexAttribute &attri
}
gl::VertexFormatType vertexFormatType = gl::GetVertexFormatType(attrib, currentValueType);
- const D3D_FEATURE_LEVEL featureLevel = mRenderer->getRenderer11DeviceCaps().featureLevel;
- const d3d11::VertexFormat &vertexFormatInfo =
- d3d11::GetVertexFormatInfo(vertexFormatType, featureLevel);
+ const D3D_FEATURE_LEVEL featureLevel = mRenderer->getRenderer11DeviceCaps().featureLevel;
+ const d3d11::VertexFormat &vertexFormatInfo = d3d11::GetVertexFormatInfo(vertexFormatType, featureLevel);
ASSERT(vertexFormatInfo.copyFunction != NULL);
vertexFormatInfo.copyFunction(input, inputStride, count, output);
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
unsigned int VertexBuffer11::getBufferSize() const
@@ -174,8 +174,7 @@ gl::Error VertexBuffer11::discard()
HRESULT result = dxContext->Map(mBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource);
if (FAILED(result))
{
- return gl::Error(GL_OUT_OF_MEMORY,
- "Failed to map internal buffer for discarding, HRESULT: 0x%08x", result);
+ return gl::Error(GL_OUT_OF_MEMORY, "Failed to map internal buffer for discarding, HRESULT: 0x%08x", result);
}
dxContext->Unmap(mBuffer, 0);
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/dxgi_format_data.json b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/dxgi_format_data.json
deleted file mode 100644
index 5b8d73568..000000000
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/dxgi_format_data.json
+++ /dev/null
@@ -1,118 +0,0 @@
-{
- "UNKNOWN": "NONE",
- "R32G32B32A32_TYPELESS": "",
- "R32G32B32A32_FLOAT": "",
- "R32G32B32A32_UINT": "",
- "R32G32B32A32_SINT": "",
- "R32G32B32_TYPELESS": "",
- "R32G32B32_FLOAT": "",
- "R32G32B32_UINT": "",
- "R32G32B32_SINT": "",
- "R16G16B16A16_TYPELESS": "",
- "R16G16B16A16_FLOAT": "",
- "R16G16B16A16_UNORM": "",
- "R16G16B16A16_UINT": "",
- "R16G16B16A16_SNORM": "",
- "R16G16B16A16_SINT": "",
- "R32G32_TYPELESS": "",
- "R32G32_FLOAT": "",
- "R32G32_UINT": "",
- "R32G32_SINT": "",
- "R32G8X24_TYPELESS": "",
- "D32_FLOAT_S8X24_UINT": "",
- "R32_FLOAT_X8X24_TYPELESS": "",
- "X32_TYPELESS_G8X24_UINT": "",
- "R10G10B10A2_TYPELESS": "",
- "R10G10B10A2_UNORM": "",
- "R10G10B10A2_UINT": "",
- "R11G11B10_FLOAT": "",
- "R8G8B8A8_TYPELESS": "",
- "R8G8B8A8_UNORM": "",
- "R8G8B8A8_UNORM_SRGB": "",
- "R8G8B8A8_UINT": "",
- "R8G8B8A8_SNORM": "",
- "R8G8B8A8_SINT": "",
- "R16G16_TYPELESS": "",
- "R16G16_FLOAT": "",
- "R16G16_UNORM": "",
- "R16G16_UINT": "",
- "R16G16_SNORM": "",
- "R16G16_SINT": "",
- "R32_TYPELESS": "",
- "D32_FLOAT": "",
- "R32_FLOAT": "",
- "R32_UINT": "",
- "R32_SINT": "",
- "R24G8_TYPELESS": "",
- "D24_UNORM_S8_UINT": "",
- "R24_UNORM_X8_TYPELESS": "",
- "X24_TYPELESS_G8_UINT": "",
- "R8G8_TYPELESS": "",
- "R8G8_UNORM": "",
- "R8G8_UINT": "",
- "R8G8_SNORM": "",
- "R8G8_SINT": "",
- "R16_TYPELESS": "",
- "R16_FLOAT": "",
- "D16_UNORM": "",
- "R16_UNORM": "",
- "R16_UINT": "",
- "R16_SNORM": "",
- "R16_SINT": "",
- "R8_TYPELESS": "",
- "R8_UNORM": "",
- "R8_UINT": "",
- "R8_SNORM": "",
- "R8_SINT": "",
- "A8_UNORM": "",
- "R1_UNORM": "",
- "R9G9B9E5_SHAREDEXP": "",
- "R8G8_B8G8_UNORM": "",
- "G8R8_G8B8_UNORM": "",
- "BC1_TYPELESS": "",
- "BC1_UNORM": "BC1_RGBA_UNORM_BLOCK",
- "BC1_UNORM_SRGB": "",
- "BC2_TYPELESS": "",
- "BC2_UNORM": "BC2_RGBA_UNORM_BLOCK",
- "BC2_UNORM_SRGB": "",
- "BC3_TYPELESS": "",
- "BC3_UNORM": "BC3_RGBA_UNORM_BLOCK",
- "BC3_UNORM_SRGB": "",
- "BC4_TYPELESS": "",
- "BC4_UNORM": "",
- "BC4_SNORM": "",
- "BC5_TYPELESS": "",
- "BC5_UNORM": "",
- "BC5_SNORM": "",
- "B5G6R5_UNORM": "",
- "B5G5R5A1_UNORM": "",
- "B8G8R8A8_UNORM": "",
- "B8G8R8X8_UNORM": "",
- "R10G10B10_XR_BIAS_A2_UNORM": "",
- "B8G8R8A8_TYPELESS": "",
- "B8G8R8A8_UNORM_SRGB": "",
- "B8G8R8X8_TYPELESS": "",
- "B8G8R8X8_UNORM_SRGB": "",
- "BC6H_TYPELESS": "",
- "BC6H_UF16": "",
- "BC6H_SF16": "",
- "BC7_TYPELESS": "",
- "BC7_UNORM": "",
- "BC7_UNORM_SRGB": "",
- "AYUV": "",
- "Y410": "",
- "Y416": "",
- "NV12": "",
- "P010": "",
- "P016": "",
- "420_OPAQUE": "",
- "YUY2": "",
- "Y210": "",
- "Y216": "",
- "NV11": "",
- "AI44": "",
- "IA44": "",
- "P8": "",
- "A8P8": "",
- "B4G4R4A4_UNORM": ""
-}
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/dxgi_format_map_autogen.cpp b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/dxgi_format_map_autogen.cpp
deleted file mode 100644
index 66610cac9..000000000
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/dxgi_format_map_autogen.cpp
+++ /dev/null
@@ -1,516 +0,0 @@
-// GENERATED FILE - DO NOT EDIT.
-// Generated by gen_dxgi_format_table.py using data from dxgi_format_data.json.
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// DXGI format info:
-// Determining metadata about a DXGI format.
-
-#include "libANGLE/renderer/Format.h"
-
-using namespace angle;
-
-namespace rx
-{
-
-namespace d3d11
-{
-
-GLenum GetComponentType(DXGI_FORMAT dxgiFormat)
-{
- switch (dxgiFormat)
- {
- case DXGI_FORMAT_420_OPAQUE:
- break;
- case DXGI_FORMAT_A8P8:
- break;
- case DXGI_FORMAT_A8_UNORM:
- return GL_UNSIGNED_NORMALIZED;
- case DXGI_FORMAT_AI44:
- break;
- case DXGI_FORMAT_AYUV:
- break;
- case DXGI_FORMAT_B4G4R4A4_UNORM:
- return GL_UNSIGNED_NORMALIZED;
- case DXGI_FORMAT_B5G5R5A1_UNORM:
- return GL_UNSIGNED_NORMALIZED;
- case DXGI_FORMAT_B5G6R5_UNORM:
- return GL_UNSIGNED_NORMALIZED;
- case DXGI_FORMAT_B8G8R8A8_TYPELESS:
- break;
- case DXGI_FORMAT_B8G8R8A8_UNORM:
- return GL_UNSIGNED_NORMALIZED;
- case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB:
- return GL_UNSIGNED_NORMALIZED;
- case DXGI_FORMAT_B8G8R8X8_TYPELESS:
- break;
- case DXGI_FORMAT_B8G8R8X8_UNORM:
- return GL_UNSIGNED_NORMALIZED;
- case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB:
- return GL_UNSIGNED_NORMALIZED;
- case DXGI_FORMAT_BC1_TYPELESS:
- break;
- case DXGI_FORMAT_BC1_UNORM:
- return GL_UNSIGNED_NORMALIZED;
- case DXGI_FORMAT_BC1_UNORM_SRGB:
- return GL_UNSIGNED_NORMALIZED;
- case DXGI_FORMAT_BC2_TYPELESS:
- break;
- case DXGI_FORMAT_BC2_UNORM:
- return GL_UNSIGNED_NORMALIZED;
- case DXGI_FORMAT_BC2_UNORM_SRGB:
- return GL_UNSIGNED_NORMALIZED;
- case DXGI_FORMAT_BC3_TYPELESS:
- break;
- case DXGI_FORMAT_BC3_UNORM:
- return GL_UNSIGNED_NORMALIZED;
- case DXGI_FORMAT_BC3_UNORM_SRGB:
- return GL_UNSIGNED_NORMALIZED;
- case DXGI_FORMAT_BC4_SNORM:
- return GL_SIGNED_NORMALIZED;
- case DXGI_FORMAT_BC4_TYPELESS:
- break;
- case DXGI_FORMAT_BC4_UNORM:
- return GL_UNSIGNED_NORMALIZED;
- case DXGI_FORMAT_BC5_SNORM:
- return GL_SIGNED_NORMALIZED;
- case DXGI_FORMAT_BC5_TYPELESS:
- break;
- case DXGI_FORMAT_BC5_UNORM:
- return GL_UNSIGNED_NORMALIZED;
- case DXGI_FORMAT_BC6H_SF16:
- break;
- case DXGI_FORMAT_BC6H_TYPELESS:
- break;
- case DXGI_FORMAT_BC6H_UF16:
- break;
- case DXGI_FORMAT_BC7_TYPELESS:
- break;
- case DXGI_FORMAT_BC7_UNORM:
- return GL_UNSIGNED_NORMALIZED;
- case DXGI_FORMAT_BC7_UNORM_SRGB:
- return GL_UNSIGNED_NORMALIZED;
- case DXGI_FORMAT_D16_UNORM:
- return GL_UNSIGNED_NORMALIZED;
- case DXGI_FORMAT_D24_UNORM_S8_UINT:
- break;
- case DXGI_FORMAT_D32_FLOAT:
- return GL_FLOAT;
- case DXGI_FORMAT_D32_FLOAT_S8X24_UINT:
- break;
- case DXGI_FORMAT_G8R8_G8B8_UNORM:
- return GL_UNSIGNED_NORMALIZED;
- case DXGI_FORMAT_IA44:
- break;
- case DXGI_FORMAT_NV11:
- break;
- case DXGI_FORMAT_NV12:
- break;
- case DXGI_FORMAT_P010:
- break;
- case DXGI_FORMAT_P016:
- break;
- case DXGI_FORMAT_P8:
- break;
- case DXGI_FORMAT_R10G10B10A2_TYPELESS:
- break;
- case DXGI_FORMAT_R10G10B10A2_UINT:
- return GL_UNSIGNED_INT;
- case DXGI_FORMAT_R10G10B10A2_UNORM:
- return GL_UNSIGNED_NORMALIZED;
- case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM:
- return GL_UNSIGNED_NORMALIZED;
- case DXGI_FORMAT_R11G11B10_FLOAT:
- return GL_FLOAT;
- case DXGI_FORMAT_R16G16B16A16_FLOAT:
- return GL_FLOAT;
- case DXGI_FORMAT_R16G16B16A16_SINT:
- return GL_INT;
- case DXGI_FORMAT_R16G16B16A16_SNORM:
- return GL_SIGNED_NORMALIZED;
- case DXGI_FORMAT_R16G16B16A16_TYPELESS:
- break;
- case DXGI_FORMAT_R16G16B16A16_UINT:
- return GL_UNSIGNED_INT;
- case DXGI_FORMAT_R16G16B16A16_UNORM:
- return GL_UNSIGNED_NORMALIZED;
- case DXGI_FORMAT_R16G16_FLOAT:
- return GL_FLOAT;
- case DXGI_FORMAT_R16G16_SINT:
- return GL_INT;
- case DXGI_FORMAT_R16G16_SNORM:
- return GL_SIGNED_NORMALIZED;
- case DXGI_FORMAT_R16G16_TYPELESS:
- break;
- case DXGI_FORMAT_R16G16_UINT:
- return GL_UNSIGNED_INT;
- case DXGI_FORMAT_R16G16_UNORM:
- return GL_UNSIGNED_NORMALIZED;
- case DXGI_FORMAT_R16_FLOAT:
- return GL_FLOAT;
- case DXGI_FORMAT_R16_SINT:
- return GL_INT;
- case DXGI_FORMAT_R16_SNORM:
- return GL_SIGNED_NORMALIZED;
- case DXGI_FORMAT_R16_TYPELESS:
- break;
- case DXGI_FORMAT_R16_UINT:
- return GL_UNSIGNED_INT;
- case DXGI_FORMAT_R16_UNORM:
- return GL_UNSIGNED_NORMALIZED;
- case DXGI_FORMAT_R1_UNORM:
- return GL_UNSIGNED_NORMALIZED;
- case DXGI_FORMAT_R24G8_TYPELESS:
- break;
- case DXGI_FORMAT_R24_UNORM_X8_TYPELESS:
- return GL_UNSIGNED_NORMALIZED;
- case DXGI_FORMAT_R32G32B32A32_FLOAT:
- return GL_FLOAT;
- case DXGI_FORMAT_R32G32B32A32_SINT:
- return GL_INT;
- case DXGI_FORMAT_R32G32B32A32_TYPELESS:
- break;
- case DXGI_FORMAT_R32G32B32A32_UINT:
- return GL_UNSIGNED_INT;
- case DXGI_FORMAT_R32G32B32_FLOAT:
- return GL_FLOAT;
- case DXGI_FORMAT_R32G32B32_SINT:
- return GL_INT;
- case DXGI_FORMAT_R32G32B32_TYPELESS:
- break;
- case DXGI_FORMAT_R32G32B32_UINT:
- return GL_UNSIGNED_INT;
- case DXGI_FORMAT_R32G32_FLOAT:
- return GL_FLOAT;
- case DXGI_FORMAT_R32G32_SINT:
- return GL_INT;
- case DXGI_FORMAT_R32G32_TYPELESS:
- break;
- case DXGI_FORMAT_R32G32_UINT:
- return GL_UNSIGNED_INT;
- case DXGI_FORMAT_R32G8X24_TYPELESS:
- break;
- case DXGI_FORMAT_R32_FLOAT:
- return GL_FLOAT;
- case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS:
- return GL_FLOAT;
- case DXGI_FORMAT_R32_SINT:
- return GL_INT;
- case DXGI_FORMAT_R32_TYPELESS:
- break;
- case DXGI_FORMAT_R32_UINT:
- return GL_UNSIGNED_INT;
- case DXGI_FORMAT_R8G8B8A8_SINT:
- return GL_INT;
- case DXGI_FORMAT_R8G8B8A8_SNORM:
- return GL_SIGNED_NORMALIZED;
- case DXGI_FORMAT_R8G8B8A8_TYPELESS:
- break;
- case DXGI_FORMAT_R8G8B8A8_UINT:
- return GL_UNSIGNED_INT;
- case DXGI_FORMAT_R8G8B8A8_UNORM:
- return GL_UNSIGNED_NORMALIZED;
- case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB:
- return GL_UNSIGNED_NORMALIZED;
- case DXGI_FORMAT_R8G8_B8G8_UNORM:
- return GL_UNSIGNED_NORMALIZED;
- case DXGI_FORMAT_R8G8_SINT:
- return GL_INT;
- case DXGI_FORMAT_R8G8_SNORM:
- return GL_SIGNED_NORMALIZED;
- case DXGI_FORMAT_R8G8_TYPELESS:
- break;
- case DXGI_FORMAT_R8G8_UINT:
- return GL_UNSIGNED_INT;
- case DXGI_FORMAT_R8G8_UNORM:
- return GL_UNSIGNED_NORMALIZED;
- case DXGI_FORMAT_R8_SINT:
- return GL_INT;
- case DXGI_FORMAT_R8_SNORM:
- return GL_SIGNED_NORMALIZED;
- case DXGI_FORMAT_R8_TYPELESS:
- break;
- case DXGI_FORMAT_R8_UINT:
- return GL_UNSIGNED_INT;
- case DXGI_FORMAT_R8_UNORM:
- return GL_UNSIGNED_NORMALIZED;
- case DXGI_FORMAT_R9G9B9E5_SHAREDEXP:
- return GL_FLOAT;
- case DXGI_FORMAT_UNKNOWN:
- break;
- case DXGI_FORMAT_X24_TYPELESS_G8_UINT:
- return GL_UNSIGNED_INT;
- case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT:
- return GL_UNSIGNED_INT;
- case DXGI_FORMAT_Y210:
- break;
- case DXGI_FORMAT_Y216:
- break;
- case DXGI_FORMAT_Y410:
- break;
- case DXGI_FORMAT_Y416:
- break;
- case DXGI_FORMAT_YUY2:
- break;
- default:
- break;
- }
-
- UNREACHABLE();
- return GL_NONE;
-}
-
-} // namespace d3d11
-
-namespace d3d11_angle
-{
-
-const Format &GetFormat(DXGI_FORMAT dxgiFormat)
-{
- switch (dxgiFormat)
- {
- case DXGI_FORMAT_420_OPAQUE:
- break;
- case DXGI_FORMAT_A8P8:
- break;
- case DXGI_FORMAT_A8_UNORM:
- return Format::Get(Format::ID::A8_UNORM);
- case DXGI_FORMAT_AI44:
- break;
- case DXGI_FORMAT_AYUV:
- break;
- case DXGI_FORMAT_B4G4R4A4_UNORM:
- return Format::Get(Format::ID::B4G4R4A4_UNORM);
- case DXGI_FORMAT_B5G5R5A1_UNORM:
- return Format::Get(Format::ID::B5G5R5A1_UNORM);
- case DXGI_FORMAT_B5G6R5_UNORM:
- return Format::Get(Format::ID::B5G6R5_UNORM);
- case DXGI_FORMAT_B8G8R8A8_TYPELESS:
- break;
- case DXGI_FORMAT_B8G8R8A8_UNORM:
- return Format::Get(Format::ID::B8G8R8A8_UNORM);
- case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB:
- break;
- case DXGI_FORMAT_B8G8R8X8_TYPELESS:
- break;
- case DXGI_FORMAT_B8G8R8X8_UNORM:
- return Format::Get(Format::ID::B8G8R8X8_UNORM);
- case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB:
- break;
- case DXGI_FORMAT_BC1_TYPELESS:
- break;
- case DXGI_FORMAT_BC1_UNORM:
- return Format::Get(Format::ID::BC1_RGBA_UNORM_BLOCK);
- case DXGI_FORMAT_BC1_UNORM_SRGB:
- break;
- case DXGI_FORMAT_BC2_TYPELESS:
- break;
- case DXGI_FORMAT_BC2_UNORM:
- return Format::Get(Format::ID::BC2_RGBA_UNORM_BLOCK);
- case DXGI_FORMAT_BC2_UNORM_SRGB:
- break;
- case DXGI_FORMAT_BC3_TYPELESS:
- break;
- case DXGI_FORMAT_BC3_UNORM:
- return Format::Get(Format::ID::BC3_RGBA_UNORM_BLOCK);
- case DXGI_FORMAT_BC3_UNORM_SRGB:
- break;
- case DXGI_FORMAT_BC4_SNORM:
- break;
- case DXGI_FORMAT_BC4_TYPELESS:
- break;
- case DXGI_FORMAT_BC4_UNORM:
- break;
- case DXGI_FORMAT_BC5_SNORM:
- break;
- case DXGI_FORMAT_BC5_TYPELESS:
- break;
- case DXGI_FORMAT_BC5_UNORM:
- break;
- case DXGI_FORMAT_BC6H_SF16:
- break;
- case DXGI_FORMAT_BC6H_TYPELESS:
- break;
- case DXGI_FORMAT_BC6H_UF16:
- break;
- case DXGI_FORMAT_BC7_TYPELESS:
- break;
- case DXGI_FORMAT_BC7_UNORM:
- break;
- case DXGI_FORMAT_BC7_UNORM_SRGB:
- break;
- case DXGI_FORMAT_D16_UNORM:
- return Format::Get(Format::ID::D16_UNORM);
- case DXGI_FORMAT_D24_UNORM_S8_UINT:
- return Format::Get(Format::ID::D24_UNORM_S8_UINT);
- case DXGI_FORMAT_D32_FLOAT:
- return Format::Get(Format::ID::D32_FLOAT);
- case DXGI_FORMAT_D32_FLOAT_S8X24_UINT:
- return Format::Get(Format::ID::D32_FLOAT_S8X24_UINT);
- case DXGI_FORMAT_G8R8_G8B8_UNORM:
- break;
- case DXGI_FORMAT_IA44:
- break;
- case DXGI_FORMAT_NV11:
- break;
- case DXGI_FORMAT_NV12:
- break;
- case DXGI_FORMAT_P010:
- break;
- case DXGI_FORMAT_P016:
- break;
- case DXGI_FORMAT_P8:
- break;
- case DXGI_FORMAT_R10G10B10A2_TYPELESS:
- break;
- case DXGI_FORMAT_R10G10B10A2_UINT:
- return Format::Get(Format::ID::R10G10B10A2_UINT);
- case DXGI_FORMAT_R10G10B10A2_UNORM:
- return Format::Get(Format::ID::R10G10B10A2_UNORM);
- case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM:
- break;
- case DXGI_FORMAT_R11G11B10_FLOAT:
- return Format::Get(Format::ID::R11G11B10_FLOAT);
- case DXGI_FORMAT_R16G16B16A16_FLOAT:
- return Format::Get(Format::ID::R16G16B16A16_FLOAT);
- case DXGI_FORMAT_R16G16B16A16_SINT:
- return Format::Get(Format::ID::R16G16B16A16_SINT);
- case DXGI_FORMAT_R16G16B16A16_SNORM:
- return Format::Get(Format::ID::R16G16B16A16_SNORM);
- case DXGI_FORMAT_R16G16B16A16_TYPELESS:
- break;
- case DXGI_FORMAT_R16G16B16A16_UINT:
- return Format::Get(Format::ID::R16G16B16A16_UINT);
- case DXGI_FORMAT_R16G16B16A16_UNORM:
- return Format::Get(Format::ID::R16G16B16A16_UNORM);
- case DXGI_FORMAT_R16G16_FLOAT:
- return Format::Get(Format::ID::R16G16_FLOAT);
- case DXGI_FORMAT_R16G16_SINT:
- return Format::Get(Format::ID::R16G16_SINT);
- case DXGI_FORMAT_R16G16_SNORM:
- return Format::Get(Format::ID::R16G16_SNORM);
- case DXGI_FORMAT_R16G16_TYPELESS:
- break;
- case DXGI_FORMAT_R16G16_UINT:
- return Format::Get(Format::ID::R16G16_UINT);
- case DXGI_FORMAT_R16G16_UNORM:
- return Format::Get(Format::ID::R16G16_UNORM);
- case DXGI_FORMAT_R16_FLOAT:
- return Format::Get(Format::ID::R16_FLOAT);
- case DXGI_FORMAT_R16_SINT:
- return Format::Get(Format::ID::R16_SINT);
- case DXGI_FORMAT_R16_SNORM:
- return Format::Get(Format::ID::R16_SNORM);
- case DXGI_FORMAT_R16_TYPELESS:
- break;
- case DXGI_FORMAT_R16_UINT:
- return Format::Get(Format::ID::R16_UINT);
- case DXGI_FORMAT_R16_UNORM:
- return Format::Get(Format::ID::R16_UNORM);
- case DXGI_FORMAT_R1_UNORM:
- break;
- case DXGI_FORMAT_R24G8_TYPELESS:
- break;
- case DXGI_FORMAT_R24_UNORM_X8_TYPELESS:
- break;
- case DXGI_FORMAT_R32G32B32A32_FLOAT:
- return Format::Get(Format::ID::R32G32B32A32_FLOAT);
- case DXGI_FORMAT_R32G32B32A32_SINT:
- return Format::Get(Format::ID::R32G32B32A32_SINT);
- case DXGI_FORMAT_R32G32B32A32_TYPELESS:
- break;
- case DXGI_FORMAT_R32G32B32A32_UINT:
- return Format::Get(Format::ID::R32G32B32A32_UINT);
- case DXGI_FORMAT_R32G32B32_FLOAT:
- return Format::Get(Format::ID::R32G32B32_FLOAT);
- case DXGI_FORMAT_R32G32B32_SINT:
- return Format::Get(Format::ID::R32G32B32_SINT);
- case DXGI_FORMAT_R32G32B32_TYPELESS:
- break;
- case DXGI_FORMAT_R32G32B32_UINT:
- return Format::Get(Format::ID::R32G32B32_UINT);
- case DXGI_FORMAT_R32G32_FLOAT:
- return Format::Get(Format::ID::R32G32_FLOAT);
- case DXGI_FORMAT_R32G32_SINT:
- return Format::Get(Format::ID::R32G32_SINT);
- case DXGI_FORMAT_R32G32_TYPELESS:
- break;
- case DXGI_FORMAT_R32G32_UINT:
- return Format::Get(Format::ID::R32G32_UINT);
- case DXGI_FORMAT_R32G8X24_TYPELESS:
- break;
- case DXGI_FORMAT_R32_FLOAT:
- return Format::Get(Format::ID::R32_FLOAT);
- case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS:
- break;
- case DXGI_FORMAT_R32_SINT:
- return Format::Get(Format::ID::R32_SINT);
- case DXGI_FORMAT_R32_TYPELESS:
- break;
- case DXGI_FORMAT_R32_UINT:
- return Format::Get(Format::ID::R32_UINT);
- case DXGI_FORMAT_R8G8B8A8_SINT:
- return Format::Get(Format::ID::R8G8B8A8_SINT);
- case DXGI_FORMAT_R8G8B8A8_SNORM:
- return Format::Get(Format::ID::R8G8B8A8_SNORM);
- case DXGI_FORMAT_R8G8B8A8_TYPELESS:
- break;
- case DXGI_FORMAT_R8G8B8A8_UINT:
- return Format::Get(Format::ID::R8G8B8A8_UINT);
- case DXGI_FORMAT_R8G8B8A8_UNORM:
- return Format::Get(Format::ID::R8G8B8A8_UNORM);
- case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB:
- return Format::Get(Format::ID::R8G8B8A8_UNORM_SRGB);
- case DXGI_FORMAT_R8G8_B8G8_UNORM:
- break;
- case DXGI_FORMAT_R8G8_SINT:
- return Format::Get(Format::ID::R8G8_SINT);
- case DXGI_FORMAT_R8G8_SNORM:
- return Format::Get(Format::ID::R8G8_SNORM);
- case DXGI_FORMAT_R8G8_TYPELESS:
- break;
- case DXGI_FORMAT_R8G8_UINT:
- return Format::Get(Format::ID::R8G8_UINT);
- case DXGI_FORMAT_R8G8_UNORM:
- return Format::Get(Format::ID::R8G8_UNORM);
- case DXGI_FORMAT_R8_SINT:
- return Format::Get(Format::ID::R8_SINT);
- case DXGI_FORMAT_R8_SNORM:
- return Format::Get(Format::ID::R8_SNORM);
- case DXGI_FORMAT_R8_TYPELESS:
- break;
- case DXGI_FORMAT_R8_UINT:
- return Format::Get(Format::ID::R8_UINT);
- case DXGI_FORMAT_R8_UNORM:
- return Format::Get(Format::ID::R8_UNORM);
- case DXGI_FORMAT_R9G9B9E5_SHAREDEXP:
- return Format::Get(Format::ID::R9G9B9E5_SHAREDEXP);
- case DXGI_FORMAT_UNKNOWN:
- return Format::Get(Format::ID::NONE);
- case DXGI_FORMAT_X24_TYPELESS_G8_UINT:
- break;
- case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT:
- break;
- case DXGI_FORMAT_Y210:
- break;
- case DXGI_FORMAT_Y216:
- break;
- case DXGI_FORMAT_Y410:
- break;
- case DXGI_FORMAT_Y416:
- break;
- case DXGI_FORMAT_YUY2:
- break;
- default:
- break;
- }
-
- UNREACHABLE();
- return Format::Get(Format::ID::NONE);
-}
-
-} // namespace d3d11_angle
-
-} // namespace rx
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/dxgi_support_data.json b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/dxgi_support_data.json
index dce0997d9..e81b4deea 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/dxgi_support_data.json
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/dxgi_support_data.json
@@ -8,8 +8,7 @@
"shaderSample": "never",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R32G32B32A32_TYPELESS":
{
@@ -19,8 +18,7 @@
"shaderSample": "never",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R32G32B32A32_FLOAT":
{
@@ -30,30 +28,27 @@
"shaderSample": "10_0check10_1always",
"renderTarget": "always",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "always"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R32G32B32A32_UINT":
{
- "texture2D": "10_0",
- "texture3D": "10_0",
- "textureCube": "10_0",
+ "texture2D": "always",
+ "texture3D": "always",
+ "textureCube": "always",
"shaderSample": "never",
- "renderTarget": "10_0",
+ "renderTarget": "always",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R32G32B32A32_SINT":
{
- "texture2D": "10_0",
- "texture3D": "10_0",
- "textureCube": "10_0",
+ "texture2D": "always",
+ "texture3D": "always",
+ "textureCube": "always",
"shaderSample": "never",
- "renderTarget": "10_0",
+ "renderTarget": "always",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R32G32B32_TYPELESS":
{
@@ -63,8 +58,7 @@
"shaderSample": "never",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R32G32B32_FLOAT":
{
@@ -74,8 +68,7 @@
"shaderSample": "11_0check",
"renderTarget": "check",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R32G32B32_UINT":
{
@@ -85,8 +78,7 @@
"shaderSample": "never",
"renderTarget": "check",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R32G32B32_SINT":
{
@@ -96,8 +88,7 @@
"shaderSample": "never",
"renderTarget": "check",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R16G16B16A16_TYPELESS":
{
@@ -107,63 +98,57 @@
"shaderSample": "never",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R16G16B16A16_FLOAT":
{
"texture2D": "always",
"texture3D": "always",
"textureCube": "always",
- "shaderSample": "9_3check_10_0always",
+ "shaderSample": "10_0",
"renderTarget": "always",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "always"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R16G16B16A16_UNORM":
{
"texture2D": "always",
"texture3D": "always",
"textureCube": "always",
- "shaderSample": "always",
+ "shaderSample": "10_0",
"renderTarget": "always",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "always"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R16G16B16A16_UINT":
{
- "texture2D": "10_0",
- "texture3D": "10_0",
- "textureCube": "10_0",
+ "texture2D": "always",
+ "texture3D": "always",
+ "textureCube": "always",
"shaderSample": "never",
- "renderTarget": "10_0",
+ "renderTarget": "always",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R16G16B16A16_SNORM":
{
- "texture2D": "10_0",
- "texture3D": "10_0",
- "textureCube": "10_0",
+ "texture2D": "always",
+ "texture3D": "always",
+ "textureCube": "always",
"shaderSample": "10_0",
- "renderTarget": "10_0",
+ "renderTarget": "always",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "10_0"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R16G16B16A16_SINT":
{
- "texture2D": "10_0",
- "texture3D": "10_0",
- "textureCube": "10_0",
+ "texture2D": "always",
+ "texture3D": "always",
+ "textureCube": "always",
"shaderSample": "never",
- "renderTarget": "10_0",
+ "renderTarget": "always",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R32G32_TYPELESS":
{
@@ -173,8 +158,7 @@
"shaderSample": "never",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R32G32_FLOAT":
{
@@ -184,41 +168,37 @@
"shaderSample": "10_0check10_1always",
"renderTarget": "always",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "10_0"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R32G32_UINT":
{
- "texture2D": "10_0",
- "texture3D": "10_0",
- "textureCube": "10_0",
+ "texture2D": "always",
+ "texture3D": "always",
+ "textureCube": "always",
"shaderSample": "never",
- "renderTarget": "10_0",
+ "renderTarget": "always",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R32G32_SINT":
{
- "texture2D": "10_0",
- "texture3D": "10_0",
- "textureCube": "10_0",
+ "texture2D": "always",
+ "texture3D": "always",
+ "textureCube": "always",
"shaderSample": "never",
- "renderTarget": "10_0",
+ "renderTarget": "always",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R32G8X24_TYPELESS":
{
- "texture2D": "10_0",
+ "texture2D": "always",
"texture3D": "never",
- "textureCube": "10_0",
+ "textureCube": "always",
"shaderSample": "never",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_D32_FLOAT_S8X24_UINT":
{
@@ -228,8 +208,7 @@
"shaderSample": "never",
"renderTarget": "never",
"multisampleRT": "check",
- "depthStencil": "10_0",
- "mipAutoGen": "never"
+ "depthStencil": "always"
},
"DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS":
{
@@ -239,8 +218,7 @@
"shaderSample": "10_0check10_1always",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_X32_TYPELESS_G8X24_UINT":
{
@@ -250,52 +228,47 @@
"shaderSample": "never",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R10G10B10A2_TYPELESS":
{
- "texture2D": "10_0",
- "texture3D": "10_0",
- "textureCube": "10_0",
+ "texture2D": "always",
+ "texture3D": "always",
+ "textureCube": "always",
"shaderSample": "never",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R10G10B10A2_UNORM":
{
- "texture2D": "10_0",
- "texture3D": "10_0",
- "textureCube": "10_0",
+ "texture2D": "always",
+ "texture3D": "always",
+ "textureCube": "always",
"shaderSample": "10_0",
- "renderTarget": "10_0",
+ "renderTarget": "always",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "10_0"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R10G10B10A2_UINT":
{
- "texture2D": "10_0",
- "texture3D": "10_0",
- "textureCube": "10_0",
+ "texture2D": "always",
+ "texture3D": "always",
+ "textureCube": "always",
"shaderSample": "never",
- "renderTarget": "10_0",
+ "renderTarget": "always",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R11G11B10_FLOAT":
{
- "texture2D": "10_0",
- "texture3D": "10_0",
- "textureCube": "10_0",
+ "texture2D": "always",
+ "texture3D": "always",
+ "textureCube": "always",
"shaderSample": "10_0",
- "renderTarget": "10_0",
+ "renderTarget": "always",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "10_0"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R8G8B8A8_TYPELESS":
{
@@ -305,63 +278,57 @@
"shaderSample": "never",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R8G8B8A8_UNORM":
{
"texture2D": "always",
"texture3D": "always",
"textureCube": "always",
- "shaderSample": "always",
+ "shaderSample": "10_0",
"renderTarget": "always",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "always"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R8G8B8A8_UNORM_SRGB":
{
"texture2D": "always",
"texture3D": "always",
"textureCube": "always",
- "shaderSample": "always",
+ "shaderSample": "10_0",
"renderTarget": "always",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "always"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R8G8B8A8_UINT":
{
- "texture2D": "10_0",
- "texture3D": "10_0",
- "textureCube": "10_0",
+ "texture2D": "always",
+ "texture3D": "always",
+ "textureCube": "always",
"shaderSample": "never",
- "renderTarget": "10_0",
+ "renderTarget": "always",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R8G8B8A8_SNORM":
{
"texture2D": "always",
"texture3D": "always",
"textureCube": "always",
- "shaderSample": "always",
+ "shaderSample": "10_0",
"renderTarget": "always",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "10_0"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R8G8B8A8_SINT":
{
- "texture2D": "10_0",
- "texture3D": "10_0",
- "textureCube": "10_0",
+ "texture2D": "always",
+ "texture3D": "always",
+ "textureCube": "always",
"shaderSample": "never",
- "renderTarget": "10_0",
+ "renderTarget": "always",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R16G16_TYPELESS":
{
@@ -371,8 +338,7 @@
"shaderSample": "never",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R16G16_FLOAT":
{
@@ -382,63 +348,57 @@
"shaderSample": "10_0",
"renderTarget": "always",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "always"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R16G16_UNORM":
{
"texture2D": "always",
"texture3D": "always",
"textureCube": "always",
- "shaderSample": "always",
+ "shaderSample": "10_0",
"renderTarget": "always",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "always"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R16G16_UINT":
{
- "texture2D": "10_0",
- "texture3D": "10_0",
- "textureCube": "10_0",
+ "texture2D": "always",
+ "texture3D": "always",
+ "textureCube": "always",
"shaderSample": "never",
- "renderTarget": "10_0",
+ "renderTarget": "always",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R16G16_SNORM":
{
"texture2D": "always",
"texture3D": "always",
"textureCube": "always",
- "shaderSample": "always",
+ "shaderSample": "10_0",
"renderTarget": "always",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "10_0"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R16G16_SINT":
{
- "texture2D": "10_0",
- "texture3D": "10_0",
- "textureCube": "10_0",
+ "texture2D": "always",
+ "texture3D": "always",
+ "textureCube": "always",
"shaderSample": "never",
- "renderTarget": "10_0",
+ "renderTarget": "always",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R32_TYPELESS":
{
- "texture2D": "10_0",
- "texture3D": "10_0",
- "textureCube": "10_0",
+ "texture2D": "always",
+ "texture3D": "always",
+ "textureCube": "always",
"shaderSample": "never",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_D32_FLOAT":
{
@@ -448,8 +408,7 @@
"shaderSample": "never",
"renderTarget": "never",
"multisampleRT": "check",
- "depthStencil": "10_0",
- "mipAutoGen": "never"
+ "depthStencil": "always"
},
"DXGI_FORMAT_R32_FLOAT":
{
@@ -459,30 +418,27 @@
"shaderSample": "10_0check10_1always",
"renderTarget": "always",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "always"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R32_UINT":
{
- "texture2D": "10_0",
- "texture3D": "10_0",
- "textureCube": "10_0",
+ "texture2D": "always",
+ "texture3D": "always",
+ "textureCube": "always",
"shaderSample": "never",
- "renderTarget": "10_0",
+ "renderTarget": "always",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R32_SINT":
{
- "texture2D": "10_0",
- "texture3D": "10_0",
- "textureCube": "10_0",
+ "texture2D": "always",
+ "texture3D": "always",
+ "textureCube": "always",
"shaderSample": "never",
- "renderTarget": "10_0",
+ "renderTarget": "always",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R24G8_TYPELESS":
{
@@ -492,8 +448,7 @@
"shaderSample": "never",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_D24_UNORM_S8_UINT":
{
@@ -513,8 +468,7 @@
"shaderSample": "10_0check10_1always",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_X24_TYPELESS_G8_UINT":
{
@@ -524,8 +478,7 @@
"shaderSample": "never",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R8G8_TYPELESS":
{
@@ -535,52 +488,47 @@
"shaderSample": "never",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R8G8_UNORM":
{
- "texture2D": "10_0",
- "texture3D": "10_0",
- "textureCube": "10_0",
- "shaderSample": "9_3check_10_0always",
- "renderTarget": "9_3check_10_0always",
+ "texture2D": "always",
+ "texture3D": "always",
+ "textureCube": "always",
+ "shaderSample": "10_0",
+ "renderTarget": "always",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "10_0"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R8G8_UINT":
{
- "texture2D": "10_0",
- "texture3D": "10_0",
- "textureCube": "10_0",
+ "texture2D": "always",
+ "texture3D": "always",
+ "textureCube": "always",
"shaderSample": "never",
- "renderTarget": "10_0",
+ "renderTarget": "always",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R8G8_SNORM":
{
"texture2D": "always",
- "texture3D": "10_0",
- "textureCube": "10_0",
- "shaderSample": "always",
- "renderTarget": "10_0",
+ "texture3D": "always",
+ "textureCube": "always",
+ "shaderSample": "10_0",
+ "renderTarget": "always",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "10_0"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R8G8_SINT":
{
- "texture2D": "10_0",
- "texture3D": "10_0",
- "textureCube": "10_0",
+ "texture2D": "always",
+ "texture3D": "always",
+ "textureCube": "always",
"shaderSample": "never",
- "renderTarget": "10_0",
+ "renderTarget": "always",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R16_TYPELESS":
{
@@ -590,19 +538,17 @@
"shaderSample": "never",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R16_FLOAT":
{
- "texture2D": "10_0",
- "texture3D": "10_0",
- "textureCube": "10_0",
+ "texture2D": "always",
+ "texture3D": "always",
+ "textureCube": "always",
"shaderSample": "10_0",
- "renderTarget": "10_0",
+ "renderTarget": "always",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "10_0"
+ "depthStencil": "never"
},
"DXGI_FORMAT_D16_UNORM":
{
@@ -612,52 +558,47 @@
"shaderSample": "never",
"renderTarget": "never",
"multisampleRT": "check",
- "depthStencil": "always",
- "mipAutoGen": "never"
+ "depthStencil": "always"
},
"DXGI_FORMAT_R16_UNORM":
{
"texture2D": "always",
"texture3D": "always",
"textureCube": "always",
- "shaderSample": "always",
- "renderTarget": "10_0",
+ "shaderSample": "10_0",
+ "renderTarget": "always",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "10_0"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R16_UINT":
{
- "texture2D": "10_0",
- "texture3D": "10_0",
- "textureCube": "10_0",
+ "texture2D": "always",
+ "texture3D": "always",
+ "textureCube": "always",
"shaderSample": "never",
- "renderTarget": "10_0",
+ "renderTarget": "always",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R16_SNORM":
{
- "texture2D": "10_0",
- "texture3D": "10_0",
- "textureCube": "10_0",
+ "texture2D": "always",
+ "texture3D": "always",
+ "textureCube": "always",
"shaderSample": "10_0",
- "renderTarget": "10_0",
+ "renderTarget": "always",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "10_0"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R16_SINT":
{
- "texture2D": "10_0",
- "texture3D": "10_0",
- "textureCube": "10_0",
+ "texture2D": "always",
+ "texture3D": "always",
+ "textureCube": "always",
"shaderSample": "never",
- "renderTarget": "10_0",
+ "renderTarget": "always",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R8_TYPELESS":
{
@@ -667,52 +608,47 @@
"shaderSample": "never",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R8_UNORM":
{
"texture2D": "always",
"texture3D": "always",
"textureCube": "always",
- "shaderSample": "always",
- "renderTarget": "9_3check_10_0always",
+ "shaderSample": "10_0",
+ "renderTarget": "always",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "10_0"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R8_UINT":
{
- "texture2D": "10_0",
- "texture3D": "10_0",
- "textureCube": "10_0",
+ "texture2D": "always",
+ "texture3D": "always",
+ "textureCube": "always",
"shaderSample": "never",
- "renderTarget": "10_0",
+ "renderTarget": "always",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R8_SNORM":
{
- "texture2D": "10_0",
- "texture3D": "10_0",
- "textureCube": "10_0",
+ "texture2D": "always",
+ "texture3D": "always",
+ "textureCube": "always",
"shaderSample": "10_0",
- "renderTarget": "10_0",
+ "renderTarget": "always",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "10_0"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R8_SINT":
{
- "texture2D": "10_0",
- "texture3D": "10_0",
- "textureCube": "10_0",
+ "texture2D": "always",
+ "texture3D": "always",
+ "textureCube": "always",
"shaderSample": "never",
- "renderTarget": "10_0",
+ "renderTarget": "always",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_A8_UNORM":
{
@@ -722,8 +658,7 @@
"shaderSample": "10_0",
"renderTarget": "always",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "10_0"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R1_UNORM":
{
@@ -733,19 +668,17 @@
"shaderSample": "never",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R9G9B9E5_SHAREDEXP":
{
- "texture2D": "10_0",
- "texture3D": "10_0",
- "textureCube": "10_0",
+ "texture2D": "always",
+ "texture3D": "always",
+ "textureCube": "always",
"shaderSample": "10_0",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R8G8_B8G8_UNORM":
{
@@ -755,8 +688,7 @@
"shaderSample": "10_0",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_G8R8_G8B8_UNORM":
{
@@ -766,8 +698,7 @@
"shaderSample": "10_0",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_BC1_TYPELESS":
{
@@ -777,19 +708,17 @@
"shaderSample": "never",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_BC1_UNORM":
{
"texture2D": "always",
"texture3D": "always",
"textureCube": "always",
- "shaderSample": "always",
+ "shaderSample": "10_0",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_BC1_UNORM_SRGB":
{
@@ -799,8 +728,7 @@
"shaderSample": "10_0",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_BC2_TYPELESS":
{
@@ -810,19 +738,17 @@
"shaderSample": "never",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_BC2_UNORM":
{
"texture2D": "always",
"texture3D": "always",
"textureCube": "always",
- "shaderSample": "always",
+ "shaderSample": "10_0",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_BC2_UNORM_SRGB":
{
@@ -832,8 +758,7 @@
"shaderSample": "10_0",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_BC3_TYPELESS":
{
@@ -843,19 +768,17 @@
"shaderSample": "never",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_BC3_UNORM":
{
"texture2D": "always",
"texture3D": "always",
"textureCube": "always",
- "shaderSample": "always",
+ "shaderSample": "10_0",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_BC3_UNORM_SRGB":
{
@@ -865,8 +788,7 @@
"shaderSample": "10_0",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_BC4_TYPELESS":
{
@@ -876,8 +798,7 @@
"shaderSample": "never",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_BC4_UNORM":
{
@@ -887,8 +808,7 @@
"shaderSample": "10_0",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_BC4_SNORM":
{
@@ -898,8 +818,7 @@
"shaderSample": "10_0",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_BC5_TYPELESS":
{
@@ -909,8 +828,7 @@
"shaderSample": "never",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_BC5_UNORM":
{
@@ -920,8 +838,7 @@
"shaderSample": "10_0",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_BC5_SNORM":
{
@@ -931,8 +848,7 @@
"shaderSample": "10_0",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_B5G6R5_UNORM":
{
@@ -942,8 +858,7 @@
"shaderSample": "dxgi1_2",
"renderTarget": "dxgi1_2",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "dxgi1_2"
+ "depthStencil": "never"
},
"DXGI_FORMAT_B5G5R5A1_UNORM":
{
@@ -953,19 +868,17 @@
"shaderSample": "dxgi1_2",
"renderTarget": "check",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "dxgi1_2"
+ "depthStencil": "never"
},
"DXGI_FORMAT_B8G8R8A8_UNORM":
{
"texture2D": "check",
"texture3D": "check",
"textureCube": "check",
- "shaderSample": "9_3always_10_0check11_0always",
- "renderTarget": "9_3always_10_0check11_0always",
+ "shaderSample": "10_0check11_0always",
+ "renderTarget": "10_0check11_0always",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "always"
+ "depthStencil": "never"
},
"DXGI_FORMAT_B8G8R8X8_UNORM":
{
@@ -975,8 +888,7 @@
"shaderSample": "10_0check11_0always",
"renderTarget": "11_0",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM":
{
@@ -986,8 +898,7 @@
"shaderSample": "never",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_B8G8R8A8_TYPELESS":
{
@@ -997,8 +908,7 @@
"shaderSample": "never",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_B8G8R8A8_UNORM_SRGB":
{
@@ -1008,8 +918,7 @@
"shaderSample": "10_0check11_0always",
"renderTarget": "11_0",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_B8G8R8X8_TYPELESS":
{
@@ -1019,8 +928,7 @@
"shaderSample": "never",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_B8G8R8X8_UNORM_SRGB":
{
@@ -1030,8 +938,7 @@
"shaderSample": "10_0check11_0always",
"renderTarget": "11_0",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_BC6H_TYPELESS":
{
@@ -1041,8 +948,7 @@
"shaderSample": "never",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_BC6H_UF16":
{
@@ -1052,8 +958,7 @@
"shaderSample": "11_0",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_BC6H_SF16":
{
@@ -1063,8 +968,7 @@
"shaderSample": "11_0",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_BC7_TYPELESS":
{
@@ -1074,8 +978,7 @@
"shaderSample": "never",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_BC7_UNORM":
{
@@ -1085,8 +988,7 @@
"shaderSample": "11_0",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_BC7_UNORM_SRGB":
{
@@ -1096,8 +998,7 @@
"shaderSample": "11_0",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_AYUV":
{
@@ -1107,8 +1008,7 @@
"shaderSample": "11_1",
"renderTarget": "11_1",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_Y410":
{
@@ -1118,8 +1018,7 @@
"shaderSample": "11_1",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_Y416":
{
@@ -1129,8 +1028,7 @@
"shaderSample": "11_1",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_NV12":
{
@@ -1140,8 +1038,7 @@
"shaderSample": "11_1",
"renderTarget": "11_1",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_P010":
{
@@ -1151,8 +1048,7 @@
"shaderSample": "11_1",
"renderTarget": "11_1",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_P016":
{
@@ -1162,8 +1058,7 @@
"shaderSample": "11_1",
"renderTarget": "11_1",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_420_OPAQUE":
{
@@ -1173,8 +1068,7 @@
"shaderSample": "never",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_YUY2":
{
@@ -1184,8 +1078,7 @@
"shaderSample": "11_1",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_Y210":
{
@@ -1195,8 +1088,7 @@
"shaderSample": "11_1",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_Y216":
{
@@ -1206,8 +1098,7 @@
"shaderSample": "11_1",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_NV11":
{
@@ -1217,8 +1108,7 @@
"shaderSample": "11_1",
"renderTarget": "11_1",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_AI44":
{
@@ -1228,8 +1118,7 @@
"shaderSample": "never",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_IA44":
{
@@ -1239,8 +1128,7 @@
"shaderSample": "never",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_P8":
{
@@ -1250,8 +1138,7 @@
"shaderSample": "never",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_A8P8":
{
@@ -1261,8 +1148,7 @@
"shaderSample": "never",
"renderTarget": "never",
"multisampleRT": "never",
- "depthStencil": "never",
- "mipAutoGen": "never"
+ "depthStencil": "never"
},
"DXGI_FORMAT_B4G4R4A4_UNORM":
{
@@ -1272,8 +1158,7 @@
"shaderSample": "dxgi1_2",
"renderTarget": "check",
"multisampleRT": "check",
- "depthStencil": "never",
- "mipAutoGen": "dxgi1_2"
+ "depthStencil": "never"
}
}
]
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/dxgi_support_table.cpp b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/dxgi_support_table.cpp
index d202ce130..cbc36445e 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/dxgi_support_table.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/dxgi_support_table.cpp
@@ -26,205 +26,205 @@ namespace d3d11
#define F_RT D3D11_FORMAT_SUPPORT_RENDER_TARGET
#define F_MS D3D11_FORMAT_SUPPORT_MULTISAMPLE_RENDERTARGET
#define F_DS D3D11_FORMAT_SUPPORT_DEPTH_STENCIL
-#define F_MIPGEN D3D11_FORMAT_SUPPORT_MIP_AUTOGEN
namespace
{
const DXGISupport &GetDefaultSupport()
{
- static UINT AllSupportFlags =
- D3D11_FORMAT_SUPPORT_TEXTURE2D | D3D11_FORMAT_SUPPORT_TEXTURE3D |
- D3D11_FORMAT_SUPPORT_TEXTURECUBE | D3D11_FORMAT_SUPPORT_SHADER_SAMPLE |
- D3D11_FORMAT_SUPPORT_RENDER_TARGET | D3D11_FORMAT_SUPPORT_MULTISAMPLE_RENDERTARGET |
- D3D11_FORMAT_SUPPORT_DEPTH_STENCIL | D3D11_FORMAT_SUPPORT_MIP_AUTOGEN;
+ static UINT AllSupportFlags = D3D11_FORMAT_SUPPORT_TEXTURE2D |
+ D3D11_FORMAT_SUPPORT_TEXTURE3D |
+ D3D11_FORMAT_SUPPORT_TEXTURECUBE |
+ D3D11_FORMAT_SUPPORT_SHADER_SAMPLE |
+ D3D11_FORMAT_SUPPORT_RENDER_TARGET |
+ D3D11_FORMAT_SUPPORT_MULTISAMPLE_RENDERTARGET |
+ D3D11_FORMAT_SUPPORT_DEPTH_STENCIL;
static const DXGISupport defaultSupport(0, 0, AllSupportFlags);
return defaultSupport;
}
-const DXGISupport &GetDXGISupport_9_3(DXGI_FORMAT dxgiFormat)
+const DXGISupport &GetDXGISupport_10_0(DXGI_FORMAT dxgiFormat)
{
- // clang-format off
switch (dxgiFormat)
{
case DXGI_FORMAT_420_OPAQUE:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_A8P8:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_A8_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_AI44:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_AYUV:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_RT | F_SAMPLE, F_MS);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_RT | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_B4G4R4A4_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_SAMPLE, F_DS, F_MS | F_RT);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS, F_MS | F_RT);
return info;
}
case DXGI_FORMAT_B5G5R5A1_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_SAMPLE, F_DS, F_MS | F_RT);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS, F_MS | F_RT);
return info;
}
case DXGI_FORMAT_B5G6R5_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_B8G8R8A8_TYPELESS:
{
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, F_2D | F_3D | F_CUBE);
+ static const DXGISupport info(0, F_DS | F_MS | F_RT | F_SAMPLE, F_2D | F_3D | F_CUBE);
return info;
}
case DXGI_FORMAT_B8G8R8A8_UNORM:
{
- static const DXGISupport info(F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_2D | F_3D | F_CUBE | F_MS);
+ static const DXGISupport info(0, F_DS, F_2D | F_3D | F_CUBE | F_MS | F_RT | F_SAMPLE);
return info;
}
case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB:
{
- static const DXGISupport info(0, F_DS | F_MIPGEN, F_2D | F_3D | F_CUBE | F_MS);
+ static const DXGISupport info(0, F_DS, F_2D | F_3D | F_CUBE | F_MS | F_SAMPLE);
return info;
}
case DXGI_FORMAT_B8G8R8X8_TYPELESS:
{
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, F_2D | F_3D | F_CUBE);
+ static const DXGISupport info(0, F_DS | F_MS | F_RT | F_SAMPLE, F_2D | F_3D | F_CUBE);
return info;
}
case DXGI_FORMAT_B8G8R8X8_UNORM:
{
- static const DXGISupport info(0, F_DS | F_MIPGEN, F_2D | F_3D | F_CUBE | F_MS);
+ static const DXGISupport info(0, F_DS, F_2D | F_3D | F_CUBE | F_MS | F_SAMPLE);
return info;
}
case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB:
{
- static const DXGISupport info(0, F_DS | F_MIPGEN, F_2D | F_3D | F_CUBE | F_MS);
+ static const DXGISupport info(0, F_DS, F_2D | F_3D | F_CUBE | F_MS | F_SAMPLE);
return info;
}
case DXGI_FORMAT_BC1_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_BC1_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_BC1_UNORM_SRGB:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_BC2_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_BC2_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_BC2_UNORM_SRGB:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_BC3_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_BC3_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_BC3_UNORM_SRGB:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_BC4_SNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_BC4_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_BC4_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_BC5_SNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_BC5_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_BC5_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_BC6H_SF16:
{
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(0, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_BC6H_TYPELESS:
{
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(0, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_BC6H_UF16:
{
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(0, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_BC7_TYPELESS:
{
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(0, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_BC7_UNORM:
{
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(0, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_BC7_UNORM_SRGB:
{
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(0, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_D16_UNORM:
{
- static const DXGISupport info(F_2D | F_CUBE | F_DS, F_3D | F_MIPGEN | F_RT | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_CUBE | F_DS, F_3D | F_RT | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_D24_UNORM_S8_UINT:
@@ -234,112 +234,112 @@ const DXGISupport &GetDXGISupport_9_3(DXGI_FORMAT dxgiFormat)
}
case DXGI_FORMAT_D32_FLOAT:
{
- static const DXGISupport info(F_2D | F_CUBE, F_3D | F_MIPGEN | F_RT | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_CUBE | F_DS, F_3D | F_RT | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_D32_FLOAT_S8X24_UINT:
{
- static const DXGISupport info(F_2D | F_CUBE, F_3D | F_MIPGEN | F_RT | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_CUBE | F_DS, F_3D | F_RT | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_G8R8_G8B8_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_IA44:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_NV11:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_RT | F_SAMPLE, F_MS);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_RT | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_NV12:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_RT | F_SAMPLE, F_MS);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_RT | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_P010:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_RT | F_SAMPLE, F_MS);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_RT | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_P016:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_RT | F_SAMPLE, F_MS);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_RT | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_P8:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_R10G10B10A2_TYPELESS:
{
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_R10G10B10A2_UINT:
{
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R10G10B10A2_UNORM:
{
- static const DXGISupport info(0, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM:
{
- static const DXGISupport info(0, F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, F_2D | F_3D);
+ static const DXGISupport info(0, F_CUBE | F_DS | F_MS | F_RT | F_SAMPLE, F_2D | F_3D);
return info;
}
case DXGI_FORMAT_R11G11B10_FLOAT:
{
- static const DXGISupport info(0, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R16G16B16A16_FLOAT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT, F_DS, F_MS | F_SAMPLE);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R16G16B16A16_SINT:
{
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R16G16B16A16_SNORM:
{
- static const DXGISupport info(0, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R16G16B16A16_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_R16G16B16A16_UINT:
{
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R16G16B16A16_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R16G16_FLOAT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R16G16_SINT:
{
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R16G16_SNORM:
@@ -349,875 +349,282 @@ const DXGISupport &GetDXGISupport_9_3(DXGI_FORMAT dxgiFormat)
}
case DXGI_FORMAT_R16G16_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_R16G16_UINT:
{
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R16G16_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
- return info;
- }
- case DXGI_FORMAT_R16_FLOAT:
- {
- static const DXGISupport info(0, F_DS, F_MS);
- return info;
- }
- case DXGI_FORMAT_R16_SINT:
- {
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
- return info;
- }
- case DXGI_FORMAT_R16_SNORM:
- {
- static const DXGISupport info(0, F_DS, F_MS);
- return info;
- }
- case DXGI_FORMAT_R16_TYPELESS:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
- return info;
- }
- case DXGI_FORMAT_R16_UINT:
- {
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
- return info;
- }
- case DXGI_FORMAT_R16_UNORM:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS, F_MS);
- return info;
- }
- case DXGI_FORMAT_R1_UNORM:
- {
- static const DXGISupport info(F_2D, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
- return info;
- }
- case DXGI_FORMAT_R24G8_TYPELESS:
- {
- static const DXGISupport info(F_2D | F_CUBE, F_3D | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
- return info;
- }
- case DXGI_FORMAT_R24_UNORM_X8_TYPELESS:
- {
- static const DXGISupport info(F_2D | F_CUBE, F_3D | F_DS | F_MIPGEN | F_MS | F_RT, 0);
- return info;
- }
- case DXGI_FORMAT_R32G32B32A32_FLOAT:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT, F_DS, F_MS);
- return info;
- }
- case DXGI_FORMAT_R32G32B32A32_SINT:
- {
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
- return info;
- }
- case DXGI_FORMAT_R32G32B32A32_TYPELESS:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
- return info;
- }
- case DXGI_FORMAT_R32G32B32A32_UINT:
- {
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
- return info;
- }
- case DXGI_FORMAT_R32G32B32_FLOAT:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN, F_MS | F_RT);
- return info;
- }
- case DXGI_FORMAT_R32G32B32_SINT:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_SAMPLE, F_MS | F_RT);
- return info;
- }
- case DXGI_FORMAT_R32G32B32_TYPELESS:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
- return info;
- }
- case DXGI_FORMAT_R32G32B32_UINT:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_SAMPLE, F_MS | F_RT);
- return info;
- }
- case DXGI_FORMAT_R32G32_FLOAT:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS, F_MS);
- return info;
- }
- case DXGI_FORMAT_R32G32_SINT:
- {
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
- return info;
- }
- case DXGI_FORMAT_R32G32_TYPELESS:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
- return info;
- }
- case DXGI_FORMAT_R32G32_UINT:
- {
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
- return info;
- }
- case DXGI_FORMAT_R32G8X24_TYPELESS:
- {
- static const DXGISupport info(0, F_3D | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
- return info;
- }
- case DXGI_FORMAT_R32_FLOAT:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT, F_DS, F_MS);
- return info;
- }
- case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS:
- {
- static const DXGISupport info(F_2D | F_CUBE, F_3D | F_DS | F_MIPGEN | F_MS | F_RT, 0);
- return info;
- }
- case DXGI_FORMAT_R32_SINT:
- {
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
- return info;
- }
- case DXGI_FORMAT_R32_TYPELESS:
- {
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
- return info;
- }
- case DXGI_FORMAT_R32_UINT:
- {
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
- return info;
- }
- case DXGI_FORMAT_R8G8B8A8_SINT:
- {
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
- return info;
- }
- case DXGI_FORMAT_R8G8B8A8_SNORM:
- {
static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
- case DXGI_FORMAT_R8G8B8A8_TYPELESS:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
- return info;
- }
- case DXGI_FORMAT_R8G8B8A8_UINT:
- {
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
- return info;
- }
- case DXGI_FORMAT_R8G8B8A8_UNORM:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
- return info;
- }
- case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
- return info;
- }
- case DXGI_FORMAT_R8G8_B8G8_UNORM:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
- return info;
- }
- case DXGI_FORMAT_R8G8_SINT:
- {
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
- return info;
- }
- case DXGI_FORMAT_R8G8_SNORM:
- {
- static const DXGISupport info(F_2D | F_SAMPLE, F_DS, F_MS);
- return info;
- }
- case DXGI_FORMAT_R8G8_TYPELESS:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
- return info;
- }
- case DXGI_FORMAT_R8G8_UINT:
- {
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
- return info;
- }
- case DXGI_FORMAT_R8G8_UNORM:
- {
- static const DXGISupport info(0, F_DS, F_MS | F_RT | F_SAMPLE);
- return info;
- }
- case DXGI_FORMAT_R8_SINT:
- {
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
- return info;
- }
- case DXGI_FORMAT_R8_SNORM:
- {
- static const DXGISupport info(0, F_DS, F_MS);
- return info;
- }
- case DXGI_FORMAT_R8_TYPELESS:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
- return info;
- }
- case DXGI_FORMAT_R8_UINT:
- {
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
- return info;
- }
- case DXGI_FORMAT_R8_UNORM:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS, F_MS | F_RT);
- return info;
- }
- case DXGI_FORMAT_R9G9B9E5_SHAREDEXP:
- {
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_MS | F_RT, 0);
- return info;
- }
- case DXGI_FORMAT_UNKNOWN:
- {
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
- return info;
- }
- case DXGI_FORMAT_X24_TYPELESS_G8_UINT:
- {
- static const DXGISupport info(F_2D | F_CUBE, F_3D | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
- return info;
- }
- case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT:
- {
- static const DXGISupport info(F_2D | F_CUBE, F_3D | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
- return info;
- }
- case DXGI_FORMAT_Y210:
- {
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
- return info;
- }
- case DXGI_FORMAT_Y216:
- {
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
- return info;
- }
- case DXGI_FORMAT_Y410:
- {
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
- return info;
- }
- case DXGI_FORMAT_Y416:
- {
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
- return info;
- }
- case DXGI_FORMAT_YUY2:
- {
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
- return info;
- }
-
- default:
- UNREACHABLE();
- return GetDefaultSupport();
- }
- // clang-format on
-}
-
-const DXGISupport &GetDXGISupport_10_0(DXGI_FORMAT dxgiFormat)
-{
- // clang-format off
- switch (dxgiFormat)
- {
- case DXGI_FORMAT_420_OPAQUE:
- {
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
- return info;
- }
- case DXGI_FORMAT_A8P8:
- {
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
- return info;
- }
- case DXGI_FORMAT_A8_UNORM:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
- return info;
- }
- case DXGI_FORMAT_AI44:
- {
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
- return info;
- }
- case DXGI_FORMAT_AYUV:
- {
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_RT | F_SAMPLE, F_MS);
- return info;
- }
- case DXGI_FORMAT_B4G4R4A4_UNORM:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_SAMPLE, F_DS, F_MS | F_RT);
- return info;
- }
- case DXGI_FORMAT_B5G5R5A1_UNORM:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_SAMPLE, F_DS, F_MS | F_RT);
- return info;
- }
- case DXGI_FORMAT_B5G6R5_UNORM:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
- return info;
- }
- case DXGI_FORMAT_B8G8R8A8_TYPELESS:
- {
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, F_2D | F_3D | F_CUBE);
- return info;
- }
- case DXGI_FORMAT_B8G8R8A8_UNORM:
- {
- static const DXGISupport info(F_MIPGEN, F_DS, F_2D | F_3D | F_CUBE | F_MS | F_RT | F_SAMPLE);
- return info;
- }
- case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB:
- {
- static const DXGISupport info(0, F_DS | F_MIPGEN, F_2D | F_3D | F_CUBE | F_MS | F_SAMPLE);
- return info;
- }
- case DXGI_FORMAT_B8G8R8X8_TYPELESS:
- {
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, F_2D | F_3D | F_CUBE);
- return info;
- }
- case DXGI_FORMAT_B8G8R8X8_UNORM:
- {
- static const DXGISupport info(0, F_DS | F_MIPGEN, F_2D | F_3D | F_CUBE | F_MS | F_SAMPLE);
- return info;
- }
- case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB:
- {
- static const DXGISupport info(0, F_DS | F_MIPGEN, F_2D | F_3D | F_CUBE | F_MS | F_SAMPLE);
- return info;
- }
- case DXGI_FORMAT_BC1_TYPELESS:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
- return info;
- }
- case DXGI_FORMAT_BC1_UNORM:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
- return info;
- }
- case DXGI_FORMAT_BC1_UNORM_SRGB:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
- return info;
- }
- case DXGI_FORMAT_BC2_TYPELESS:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
- return info;
- }
- case DXGI_FORMAT_BC2_UNORM:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
- return info;
- }
- case DXGI_FORMAT_BC2_UNORM_SRGB:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
- return info;
- }
- case DXGI_FORMAT_BC3_TYPELESS:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
- return info;
- }
- case DXGI_FORMAT_BC3_UNORM:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
- return info;
- }
- case DXGI_FORMAT_BC3_UNORM_SRGB:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
- return info;
- }
- case DXGI_FORMAT_BC4_SNORM:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
- return info;
- }
- case DXGI_FORMAT_BC4_TYPELESS:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
- return info;
- }
- case DXGI_FORMAT_BC4_UNORM:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
- return info;
- }
- case DXGI_FORMAT_BC5_SNORM:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
- return info;
- }
- case DXGI_FORMAT_BC5_TYPELESS:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
- return info;
- }
- case DXGI_FORMAT_BC5_UNORM:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
- return info;
- }
- case DXGI_FORMAT_BC6H_SF16:
- {
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_MS | F_RT, 0);
- return info;
- }
- case DXGI_FORMAT_BC6H_TYPELESS:
- {
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
- return info;
- }
- case DXGI_FORMAT_BC6H_UF16:
- {
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_MS | F_RT, 0);
- return info;
- }
- case DXGI_FORMAT_BC7_TYPELESS:
- {
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
- return info;
- }
- case DXGI_FORMAT_BC7_UNORM:
- {
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_MS | F_RT, 0);
- return info;
- }
- case DXGI_FORMAT_BC7_UNORM_SRGB:
- {
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_MS | F_RT, 0);
- return info;
- }
- case DXGI_FORMAT_D16_UNORM:
- {
- static const DXGISupport info(F_2D | F_CUBE | F_DS, F_3D | F_MIPGEN | F_RT | F_SAMPLE, F_MS);
- return info;
- }
- case DXGI_FORMAT_D24_UNORM_S8_UINT:
- {
- static const DXGISupport info(F_2D | F_CUBE | F_DS, F_3D | F_RT | F_SAMPLE, F_MS);
- return info;
- }
- case DXGI_FORMAT_D32_FLOAT:
- {
- static const DXGISupport info(F_2D | F_CUBE | F_DS, F_3D | F_MIPGEN | F_RT | F_SAMPLE, F_MS);
- return info;
- }
- case DXGI_FORMAT_D32_FLOAT_S8X24_UINT:
- {
- static const DXGISupport info(F_2D | F_CUBE | F_DS, F_3D | F_MIPGEN | F_RT | F_SAMPLE, F_MS);
- return info;
- }
- case DXGI_FORMAT_G8R8_G8B8_UNORM:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
- return info;
- }
- case DXGI_FORMAT_IA44:
- {
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
- return info;
- }
- case DXGI_FORMAT_NV11:
- {
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_RT | F_SAMPLE, F_MS);
- return info;
- }
- case DXGI_FORMAT_NV12:
- {
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_RT | F_SAMPLE, F_MS);
- return info;
- }
- case DXGI_FORMAT_P010:
- {
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_RT | F_SAMPLE, F_MS);
- return info;
- }
- case DXGI_FORMAT_P016:
- {
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_RT | F_SAMPLE, F_MS);
- return info;
- }
- case DXGI_FORMAT_P8:
- {
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
- return info;
- }
- case DXGI_FORMAT_R10G10B10A2_TYPELESS:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
- return info;
- }
- case DXGI_FORMAT_R10G10B10A2_UINT:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
- return info;
- }
- case DXGI_FORMAT_R10G10B10A2_UNORM:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
- return info;
- }
- case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM:
- {
- static const DXGISupport info(0, F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, F_2D | F_3D);
- return info;
- }
- case DXGI_FORMAT_R11G11B10_FLOAT:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
- return info;
- }
- case DXGI_FORMAT_R16G16B16A16_FLOAT:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
- return info;
- }
- case DXGI_FORMAT_R16G16B16A16_SINT:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
- return info;
- }
- case DXGI_FORMAT_R16G16B16A16_SNORM:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
- return info;
- }
- case DXGI_FORMAT_R16G16B16A16_TYPELESS:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
- return info;
- }
- case DXGI_FORMAT_R16G16B16A16_UINT:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
- return info;
- }
- case DXGI_FORMAT_R16G16B16A16_UNORM:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
- return info;
- }
- case DXGI_FORMAT_R16G16_FLOAT:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
- return info;
- }
- case DXGI_FORMAT_R16G16_SINT:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
- return info;
- }
- case DXGI_FORMAT_R16G16_SNORM:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
- return info;
- }
- case DXGI_FORMAT_R16G16_TYPELESS:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
- return info;
- }
- case DXGI_FORMAT_R16G16_UINT:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
- return info;
- }
- case DXGI_FORMAT_R16G16_UNORM:
- {
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
- return info;
- }
case DXGI_FORMAT_R16_FLOAT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R16_SINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R16_SNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R16_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_R16_UINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R16_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R1_UNORM:
{
- static const DXGISupport info(F_2D, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_R24G8_TYPELESS:
{
- static const DXGISupport info(F_2D | F_CUBE, F_3D | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_CUBE, F_3D | F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_R24_UNORM_X8_TYPELESS:
{
- static const DXGISupport info(F_2D | F_CUBE, F_3D | F_DS | F_MIPGEN | F_MS | F_RT, F_SAMPLE);
+ static const DXGISupport info(F_2D | F_CUBE, F_3D | F_DS | F_MS | F_RT, F_SAMPLE);
return info;
}
case DXGI_FORMAT_R32G32B32A32_FLOAT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT, F_DS, F_MS | F_SAMPLE);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS, F_MS | F_SAMPLE);
return info;
}
case DXGI_FORMAT_R32G32B32A32_SINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R32G32B32A32_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_R32G32B32A32_UINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R32G32B32_FLOAT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN, F_MS | F_RT);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS, F_MS | F_RT);
return info;
}
case DXGI_FORMAT_R32G32B32_SINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_SAMPLE, F_MS | F_RT);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_SAMPLE, F_MS | F_RT);
return info;
}
case DXGI_FORMAT_R32G32B32_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_R32G32B32_UINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_SAMPLE, F_MS | F_RT);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_SAMPLE, F_MS | F_RT);
return info;
}
case DXGI_FORMAT_R32G32_FLOAT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT, F_DS, F_MS | F_SAMPLE);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS, F_MS | F_SAMPLE);
return info;
}
case DXGI_FORMAT_R32G32_SINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R32G32_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_R32G32_UINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R32G8X24_TYPELESS:
{
- static const DXGISupport info(F_2D | F_CUBE, F_3D | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_CUBE, F_3D | F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_R32_FLOAT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT, F_DS, F_MS | F_SAMPLE);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS, F_MS | F_SAMPLE);
return info;
}
case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS:
{
- static const DXGISupport info(F_2D | F_CUBE, F_3D | F_DS | F_MIPGEN | F_MS | F_RT, F_SAMPLE);
+ static const DXGISupport info(F_2D | F_CUBE, F_3D | F_DS | F_MS | F_RT, F_SAMPLE);
return info;
}
case DXGI_FORMAT_R32_SINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R32_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_R32_UINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R8G8B8A8_SINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R8G8B8A8_SNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R8G8B8A8_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_R8G8B8A8_UINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R8G8B8A8_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R8G8_B8G8_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_R8G8_SINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R8G8_SNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R8G8_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_R8G8_UINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R8G8_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R8_SINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R8_SNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R8_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_R8_UINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R8_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R9G9B9E5_SHAREDEXP:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_UNKNOWN:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_X24_TYPELESS_G8_UINT:
{
- static const DXGISupport info(F_2D | F_CUBE, F_3D | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_CUBE, F_3D | F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT:
{
- static const DXGISupport info(F_2D | F_CUBE, F_3D | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_CUBE, F_3D | F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_Y210:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_Y216:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_Y410:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_Y416:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_YUY2:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
@@ -1225,192 +632,190 @@ const DXGISupport &GetDXGISupport_10_0(DXGI_FORMAT dxgiFormat)
UNREACHABLE();
return GetDefaultSupport();
}
- // clang-format on
}
const DXGISupport &GetDXGISupport_10_1(DXGI_FORMAT dxgiFormat)
{
- // clang-format off
switch (dxgiFormat)
{
case DXGI_FORMAT_420_OPAQUE:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_A8P8:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_A8_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_AI44:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_AYUV:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_RT | F_SAMPLE, F_MS);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_RT | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_B4G4R4A4_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_SAMPLE, F_DS, F_MS | F_RT);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS, F_MS | F_RT);
return info;
}
case DXGI_FORMAT_B5G5R5A1_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_SAMPLE, F_DS, F_MS | F_RT);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS, F_MS | F_RT);
return info;
}
case DXGI_FORMAT_B5G6R5_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_B8G8R8A8_TYPELESS:
{
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, F_2D | F_3D | F_CUBE);
+ static const DXGISupport info(0, F_DS | F_MS | F_RT | F_SAMPLE, F_2D | F_3D | F_CUBE);
return info;
}
case DXGI_FORMAT_B8G8R8A8_UNORM:
{
- static const DXGISupport info(F_MIPGEN, F_DS, F_2D | F_3D | F_CUBE | F_MS | F_RT | F_SAMPLE);
+ static const DXGISupport info(0, F_DS, F_2D | F_3D | F_CUBE | F_MS | F_RT | F_SAMPLE);
return info;
}
case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB:
{
- static const DXGISupport info(0, F_DS | F_MIPGEN, F_2D | F_3D | F_CUBE | F_MS | F_SAMPLE);
+ static const DXGISupport info(0, F_DS, F_2D | F_3D | F_CUBE | F_MS | F_SAMPLE);
return info;
}
case DXGI_FORMAT_B8G8R8X8_TYPELESS:
{
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, F_2D | F_3D | F_CUBE);
+ static const DXGISupport info(0, F_DS | F_MS | F_RT | F_SAMPLE, F_2D | F_3D | F_CUBE);
return info;
}
case DXGI_FORMAT_B8G8R8X8_UNORM:
{
- static const DXGISupport info(0, F_DS | F_MIPGEN, F_2D | F_3D | F_CUBE | F_MS | F_SAMPLE);
+ static const DXGISupport info(0, F_DS, F_2D | F_3D | F_CUBE | F_MS | F_SAMPLE);
return info;
}
case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB:
{
- static const DXGISupport info(0, F_DS | F_MIPGEN, F_2D | F_3D | F_CUBE | F_MS | F_SAMPLE);
+ static const DXGISupport info(0, F_DS, F_2D | F_3D | F_CUBE | F_MS | F_SAMPLE);
return info;
}
case DXGI_FORMAT_BC1_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_BC1_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_BC1_UNORM_SRGB:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_BC2_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_BC2_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_BC2_UNORM_SRGB:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_BC3_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_BC3_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_BC3_UNORM_SRGB:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_BC4_SNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_BC4_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_BC4_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_BC5_SNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_BC5_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_BC5_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_BC6H_SF16:
{
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(0, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_BC6H_TYPELESS:
{
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(0, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_BC6H_UF16:
{
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(0, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_BC7_TYPELESS:
{
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(0, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_BC7_UNORM:
{
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(0, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_BC7_UNORM_SRGB:
{
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(0, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_D16_UNORM:
{
- static const DXGISupport info(F_2D | F_CUBE | F_DS, F_3D | F_MIPGEN | F_RT | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_CUBE | F_DS, F_3D | F_RT | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_D24_UNORM_S8_UINT:
@@ -1420,397 +825,397 @@ const DXGISupport &GetDXGISupport_10_1(DXGI_FORMAT dxgiFormat)
}
case DXGI_FORMAT_D32_FLOAT:
{
- static const DXGISupport info(F_2D | F_CUBE | F_DS, F_3D | F_MIPGEN | F_RT | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_CUBE | F_DS, F_3D | F_RT | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_D32_FLOAT_S8X24_UINT:
{
- static const DXGISupport info(F_2D | F_CUBE | F_DS, F_3D | F_MIPGEN | F_RT | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_CUBE | F_DS, F_3D | F_RT | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_G8R8_G8B8_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_IA44:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_NV11:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_RT | F_SAMPLE, F_MS);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_RT | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_NV12:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_RT | F_SAMPLE, F_MS);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_RT | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_P010:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_RT | F_SAMPLE, F_MS);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_RT | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_P016:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_RT | F_SAMPLE, F_MS);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_RT | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_P8:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_R10G10B10A2_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_R10G10B10A2_UINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R10G10B10A2_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM:
{
- static const DXGISupport info(0, F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, F_2D | F_3D);
+ static const DXGISupport info(0, F_CUBE | F_DS | F_MS | F_RT | F_SAMPLE, F_2D | F_3D);
return info;
}
case DXGI_FORMAT_R11G11B10_FLOAT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R16G16B16A16_FLOAT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R16G16B16A16_SINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R16G16B16A16_SNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R16G16B16A16_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_R16G16B16A16_UINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R16G16B16A16_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R16G16_FLOAT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R16G16_SINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R16G16_SNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R16G16_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_R16G16_UINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R16G16_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R16_FLOAT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R16_SINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R16_SNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R16_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_R16_UINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R16_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R1_UNORM:
{
- static const DXGISupport info(F_2D, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_R24G8_TYPELESS:
{
- static const DXGISupport info(F_2D | F_CUBE, F_3D | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_CUBE, F_3D | F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_R24_UNORM_X8_TYPELESS:
{
- static const DXGISupport info(F_2D | F_CUBE | F_SAMPLE, F_3D | F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_CUBE | F_SAMPLE, F_3D | F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_R32G32B32A32_FLOAT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R32G32B32A32_SINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R32G32B32A32_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_R32G32B32A32_UINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R32G32B32_FLOAT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN, F_MS | F_RT);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS, F_MS | F_RT);
return info;
}
case DXGI_FORMAT_R32G32B32_SINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_SAMPLE, F_MS | F_RT);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_SAMPLE, F_MS | F_RT);
return info;
}
case DXGI_FORMAT_R32G32B32_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_R32G32B32_UINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_SAMPLE, F_MS | F_RT);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_SAMPLE, F_MS | F_RT);
return info;
}
case DXGI_FORMAT_R32G32_FLOAT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R32G32_SINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R32G32_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_R32G32_UINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R32G8X24_TYPELESS:
{
- static const DXGISupport info(F_2D | F_CUBE, F_3D | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_CUBE, F_3D | F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_R32_FLOAT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS:
{
- static const DXGISupport info(F_2D | F_CUBE | F_SAMPLE, F_3D | F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_CUBE | F_SAMPLE, F_3D | F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_R32_SINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R32_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_R32_UINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R8G8B8A8_SINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R8G8B8A8_SNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R8G8B8A8_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_R8G8B8A8_UINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R8G8B8A8_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R8G8_B8G8_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_R8G8_SINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R8G8_SNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R8G8_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_R8G8_UINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R8G8_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R8_SINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R8_SNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R8_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_R8_UINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R8_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R9G9B9E5_SHAREDEXP:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_UNKNOWN:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_X24_TYPELESS_G8_UINT:
{
- static const DXGISupport info(F_2D | F_CUBE, F_3D | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_CUBE, F_3D | F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT:
{
- static const DXGISupport info(F_2D | F_CUBE, F_3D | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_CUBE, F_3D | F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_Y210:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_Y216:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_Y410:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_Y416:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_YUY2:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
@@ -1818,192 +1223,190 @@ const DXGISupport &GetDXGISupport_10_1(DXGI_FORMAT dxgiFormat)
UNREACHABLE();
return GetDefaultSupport();
}
- // clang-format on
}
const DXGISupport &GetDXGISupport_11_0(DXGI_FORMAT dxgiFormat)
{
- // clang-format off
switch (dxgiFormat)
{
case DXGI_FORMAT_420_OPAQUE:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_A8P8:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_A8_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_AI44:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_AYUV:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_RT | F_SAMPLE, F_MS);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_RT | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_B4G4R4A4_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_SAMPLE, F_DS, F_MS | F_RT);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS, F_MS | F_RT);
return info;
}
case DXGI_FORMAT_B5G5R5A1_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_SAMPLE, F_DS, F_MS | F_RT);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS, F_MS | F_RT);
return info;
}
case DXGI_FORMAT_B5G6R5_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_B8G8R8A8_TYPELESS:
{
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, F_2D | F_3D | F_CUBE);
+ static const DXGISupport info(0, F_DS | F_MS | F_RT | F_SAMPLE, F_2D | F_3D | F_CUBE);
return info;
}
case DXGI_FORMAT_B8G8R8A8_UNORM:
{
- static const DXGISupport info(F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_2D | F_3D | F_CUBE | F_MS);
+ static const DXGISupport info(F_RT | F_SAMPLE, F_DS, F_2D | F_3D | F_CUBE | F_MS);
return info;
}
case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB:
{
- static const DXGISupport info(F_RT | F_SAMPLE, F_DS | F_MIPGEN, F_2D | F_3D | F_CUBE | F_MS);
+ static const DXGISupport info(F_RT | F_SAMPLE, F_DS, F_2D | F_3D | F_CUBE | F_MS);
return info;
}
case DXGI_FORMAT_B8G8R8X8_TYPELESS:
{
- static const DXGISupport info(0, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, F_2D | F_3D | F_CUBE);
+ static const DXGISupport info(0, F_DS | F_MS | F_RT | F_SAMPLE, F_2D | F_3D | F_CUBE);
return info;
}
case DXGI_FORMAT_B8G8R8X8_UNORM:
{
- static const DXGISupport info(F_RT | F_SAMPLE, F_DS | F_MIPGEN, F_2D | F_3D | F_CUBE | F_MS);
+ static const DXGISupport info(F_RT | F_SAMPLE, F_DS, F_2D | F_3D | F_CUBE | F_MS);
return info;
}
case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB:
{
- static const DXGISupport info(F_RT | F_SAMPLE, F_DS | F_MIPGEN, F_2D | F_3D | F_CUBE | F_MS);
+ static const DXGISupport info(F_RT | F_SAMPLE, F_DS, F_2D | F_3D | F_CUBE | F_MS);
return info;
}
case DXGI_FORMAT_BC1_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_BC1_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_BC1_UNORM_SRGB:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_BC2_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_BC2_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_BC2_UNORM_SRGB:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_BC3_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_BC3_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_BC3_UNORM_SRGB:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_BC4_SNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_BC4_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_BC4_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_BC5_SNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_BC5_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_BC5_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_BC6H_SF16:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_BC6H_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_BC6H_UF16:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_BC7_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_BC7_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_BC7_UNORM_SRGB:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_D16_UNORM:
{
- static const DXGISupport info(F_2D | F_CUBE | F_DS, F_3D | F_MIPGEN | F_RT | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_CUBE | F_DS, F_3D | F_RT | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_D24_UNORM_S8_UINT:
@@ -2013,397 +1416,397 @@ const DXGISupport &GetDXGISupport_11_0(DXGI_FORMAT dxgiFormat)
}
case DXGI_FORMAT_D32_FLOAT:
{
- static const DXGISupport info(F_2D | F_CUBE | F_DS, F_3D | F_MIPGEN | F_RT | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_CUBE | F_DS, F_3D | F_RT | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_D32_FLOAT_S8X24_UINT:
{
- static const DXGISupport info(F_2D | F_CUBE | F_DS, F_3D | F_MIPGEN | F_RT | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_CUBE | F_DS, F_3D | F_RT | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_G8R8_G8B8_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_IA44:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_NV11:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_RT | F_SAMPLE, F_MS);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_RT | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_NV12:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_RT | F_SAMPLE, F_MS);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_RT | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_P010:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_RT | F_SAMPLE, F_MS);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_RT | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_P016:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_RT | F_SAMPLE, F_MS);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_RT | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_P8:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_R10G10B10A2_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_R10G10B10A2_UINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R10G10B10A2_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM:
{
- static const DXGISupport info(0, F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, F_2D | F_3D);
+ static const DXGISupport info(0, F_CUBE | F_DS | F_MS | F_RT | F_SAMPLE, F_2D | F_3D);
return info;
}
case DXGI_FORMAT_R11G11B10_FLOAT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R16G16B16A16_FLOAT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R16G16B16A16_SINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R16G16B16A16_SNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R16G16B16A16_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_R16G16B16A16_UINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R16G16B16A16_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R16G16_FLOAT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R16G16_SINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R16G16_SNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R16G16_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_R16G16_UINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R16G16_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R16_FLOAT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R16_SINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R16_SNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R16_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_R16_UINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R16_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R1_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_R24G8_TYPELESS:
{
- static const DXGISupport info(F_2D | F_CUBE, F_3D | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_CUBE, F_3D | F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_R24_UNORM_X8_TYPELESS:
{
- static const DXGISupport info(F_2D | F_CUBE | F_SAMPLE, F_3D | F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_CUBE | F_SAMPLE, F_3D | F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_R32G32B32A32_FLOAT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R32G32B32A32_SINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R32G32B32A32_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_R32G32B32A32_UINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R32G32B32_FLOAT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN, F_MS | F_RT);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS, F_MS | F_RT);
return info;
}
case DXGI_FORMAT_R32G32B32_SINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_SAMPLE, F_MS | F_RT);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_SAMPLE, F_MS | F_RT);
return info;
}
case DXGI_FORMAT_R32G32B32_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_R32G32B32_UINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_SAMPLE, F_MS | F_RT);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_SAMPLE, F_MS | F_RT);
return info;
}
case DXGI_FORMAT_R32G32_FLOAT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R32G32_SINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R32G32_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_R32G32_UINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R32G8X24_TYPELESS:
{
- static const DXGISupport info(F_2D | F_CUBE, F_3D | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_CUBE, F_3D | F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_R32_FLOAT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS:
{
- static const DXGISupport info(F_2D | F_CUBE | F_SAMPLE, F_3D | F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_CUBE | F_SAMPLE, F_3D | F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_R32_SINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R32_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_R32_UINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R8G8B8A8_SINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R8G8B8A8_SNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R8G8B8A8_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_R8G8B8A8_UINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R8G8B8A8_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R8G8_B8G8_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_R8G8_SINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R8G8_SNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R8G8_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_R8G8_UINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R8G8_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R8_SINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R8_SNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R8_TYPELESS:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE, F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_R8_UINT:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_MIPGEN | F_SAMPLE, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT, F_DS | F_SAMPLE, F_MS);
return info;
}
case DXGI_FORMAT_R8_UNORM:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_MIPGEN | F_RT | F_SAMPLE, F_DS, F_MS);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_RT | F_SAMPLE, F_DS, F_MS);
return info;
}
case DXGI_FORMAT_R9G9B9E5_SHAREDEXP:
{
- static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MIPGEN | F_MS | F_RT, 0);
+ static const DXGISupport info(F_2D | F_3D | F_CUBE | F_SAMPLE, F_DS | F_MS | F_RT, 0);
return info;
}
case DXGI_FORMAT_UNKNOWN:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_X24_TYPELESS_G8_UINT:
{
- static const DXGISupport info(F_2D | F_CUBE, F_3D | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_CUBE, F_3D | F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT:
{
- static const DXGISupport info(F_2D | F_CUBE, F_3D | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(F_2D | F_CUBE, F_3D | F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_Y210:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_Y216:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_Y410:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_Y416:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
case DXGI_FORMAT_YUY2:
{
- static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MIPGEN | F_MS | F_RT | F_SAMPLE, 0);
+ static const DXGISupport info(0, F_2D | F_3D | F_CUBE | F_DS | F_MS | F_RT | F_SAMPLE, 0);
return info;
}
@@ -2411,7 +1814,6 @@ const DXGISupport &GetDXGISupport_11_0(DXGI_FORMAT dxgiFormat)
UNREACHABLE();
return GetDefaultSupport();
}
- // clang-format on
}
}
@@ -2423,14 +1825,11 @@ const DXGISupport &GetDXGISupport_11_0(DXGI_FORMAT dxgiFormat)
#undef F_RT
#undef F_MS
#undef F_DS
-#undef F_MIPGEN
const DXGISupport &GetDXGISupport(DXGI_FORMAT dxgiFormat, D3D_FEATURE_LEVEL featureLevel)
{
switch (featureLevel)
{
- case D3D_FEATURE_LEVEL_9_3:
- return GetDXGISupport_9_3(dxgiFormat);
case D3D_FEATURE_LEVEL_10_0:
return GetDXGISupport_10_0(dxgiFormat);
case D3D_FEATURE_LEVEL_10_1:
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/formatutils11.cpp b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/formatutils11.cpp
index 695ad468d..c4b3f3202 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/formatutils11.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/formatutils11.cpp
@@ -15,7 +15,6 @@
#include "libANGLE/formatutils.h"
#include "libANGLE/renderer/d3d/d3d11/copyvertex.h"
-#include "libANGLE/renderer/d3d/d3d11/dxgi_support_table.h"
#include "libANGLE/renderer/d3d/d3d11/renderer11_utils.h"
#include "libANGLE/renderer/d3d/d3d11/Renderer11.h"
@@ -25,11 +24,329 @@ namespace rx
namespace d3d11
{
-bool SupportsMipGen(DXGI_FORMAT dxgiFormat, D3D_FEATURE_LEVEL featureLevel)
+struct DXGIColorFormatInfo
{
- const auto &support = GetDXGISupport(dxgiFormat, featureLevel);
- ASSERT((support.optionallySupportedFlags & D3D11_FORMAT_SUPPORT_MIP_AUTOGEN) == 0);
- return ((support.alwaysSupportedFlags & D3D11_FORMAT_SUPPORT_MIP_AUTOGEN) != 0);
+ size_t redBits;
+ size_t greenBits;
+ size_t blueBits;
+
+ size_t luminanceBits;
+
+ size_t alphaBits;
+ size_t sharedBits;
+};
+
+typedef std::map<DXGI_FORMAT, DXGIColorFormatInfo> ColorFormatInfoMap;
+typedef std::pair<DXGI_FORMAT, DXGIColorFormatInfo> ColorFormatInfoPair;
+
+static inline void InsertDXGIColorFormatInfo(ColorFormatInfoMap *map, DXGI_FORMAT format, size_t redBits, size_t greenBits,
+ size_t blueBits, size_t alphaBits, size_t sharedBits)
+{
+ DXGIColorFormatInfo info;
+ info.redBits = redBits;
+ info.greenBits = greenBits;
+ info.blueBits = blueBits;
+ info.alphaBits = alphaBits;
+ info.sharedBits = sharedBits;
+
+ map->insert(std::make_pair(format, info));
+}
+
+static ColorFormatInfoMap BuildColorFormatInfoMap()
+{
+ ColorFormatInfoMap map;
+
+ // clang-format off
+ // | DXGI format | R | G | B | A | S |
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_A8_UNORM, 0, 0, 0, 8, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R8_UNORM, 8, 0, 0, 0, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R8G8_UNORM, 8, 8, 0, 0, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R8G8B8A8_UNORM, 8, 8, 8, 8, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, 8, 8, 8, 8, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_B8G8R8A8_UNORM, 8, 8, 8, 8, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R16_UNORM, 16, 0, 0, 0, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R16G16_UNORM, 16, 16, 0, 0, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R16G16B16A16_UNORM, 16, 16, 16, 16, 0);
+
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R8_SNORM, 8, 0, 0, 0, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R8G8_SNORM, 8, 8, 0, 0, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R8G8B8A8_SNORM, 8, 8, 8, 8, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R16_SNORM, 16, 0, 0, 0, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R16G16_SNORM, 16, 16, 0, 0, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R16G16B16A16_SNORM, 16, 16, 16, 16, 0);
+
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R8_UINT, 8, 0, 0, 0, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R16_UINT, 16, 0, 0, 0, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R32_UINT, 32, 0, 0, 0, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R8G8_UINT, 8, 8, 0, 0, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R16G16_UINT, 16, 16, 0, 0, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R32G32_UINT, 32, 32, 0, 0, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R32G32B32_UINT, 32, 32, 32, 0, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R8G8B8A8_UINT, 8, 8, 8, 8, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R16G16B16A16_UINT, 16, 16, 16, 16, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R32G32B32A32_UINT, 32, 32, 32, 32, 0);
+
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R8_SINT, 8, 0, 0, 0, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R16_SINT, 16, 0, 0, 0, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R32_SINT, 32, 0, 0, 0, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R8G8_SINT, 8, 8, 0, 0, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R16G16_SINT, 16, 16, 0, 0, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R32G32_SINT, 32, 32, 0, 0, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R32G32B32_SINT, 32, 32, 32, 0, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R8G8B8A8_SINT, 8, 8, 8, 8, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R16G16B16A16_SINT, 16, 16, 16, 16, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R32G32B32A32_SINT, 32, 32, 32, 32, 0);
+
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R10G10B10A2_TYPELESS, 10, 10, 10, 2, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R10G10B10A2_UNORM, 10, 10, 10, 2, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R10G10B10A2_UINT, 10, 10, 10, 2, 0);
+
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R16_FLOAT, 16, 0, 0, 0, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R16G16_FLOAT, 16, 16, 0, 0, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R16G16B16A16_FLOAT, 16, 16, 16, 16, 0);
+
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R32_FLOAT, 32, 0, 0, 0, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R32G32_FLOAT, 32, 32, 0, 0, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R32G32B32_FLOAT, 32, 32, 32, 0, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R32G32B32A32_FLOAT, 32, 32, 32, 32, 0);
+
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R9G9B9E5_SHAREDEXP, 9, 9, 9, 0, 5);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R11G11B10_FLOAT, 11, 11, 10, 0, 0);
+
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_B5G6R5_UNORM, 5, 6, 5, 0, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_B4G4R4A4_UNORM, 4, 4, 4, 4, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_B5G5R5A1_UNORM, 5, 5, 5, 1, 0);
+
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R8_TYPELESS, 8, 0, 0, 0, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R16_TYPELESS, 16, 0, 0, 0, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R32_TYPELESS, 32, 0, 0, 0, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R8G8_TYPELESS, 8, 8, 0, 0, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R16G16_TYPELESS, 16, 16, 0, 0, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R32G32_TYPELESS, 32, 32, 0, 0, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R32G32B32_TYPELESS, 32, 32, 32, 0, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R8G8B8A8_TYPELESS, 8, 8, 8, 8, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R16G16B16A16_TYPELESS, 16, 16, 16, 16, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R32G32B32A32_TYPELESS, 32, 32, 32, 32, 0);
+
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R24G8_TYPELESS, 24, 8, 0, 0, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R24_UNORM_X8_TYPELESS, 24, 0, 0, 0, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R32G8X24_TYPELESS, 32, 8, 0, 0, 0);
+ InsertDXGIColorFormatInfo(&map, DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS, 32, 0, 0, 0, 0);
+ // clang-format on
+
+ return map;
+}
+
+struct DXGIDepthStencilInfo
+{
+ unsigned int depthBits;
+ unsigned int stencilBits;
+};
+
+typedef std::map<DXGI_FORMAT, DXGIDepthStencilInfo> DepthStencilInfoMap;
+typedef std::pair<DXGI_FORMAT, DXGIDepthStencilInfo> DepthStencilInfoPair;
+
+static inline void InsertDXGIDepthStencilInfo(DepthStencilInfoMap *map,
+ DXGI_FORMAT format,
+ unsigned int depthBits,
+ unsigned int stencilBits)
+{
+ DXGIDepthStencilInfo info;
+ info.depthBits = depthBits;
+ info.stencilBits = stencilBits;
+
+ map->insert(std::make_pair(format, info));
+}
+
+static DepthStencilInfoMap BuildDepthStencilInfoMap()
+{
+ DepthStencilInfoMap map;
+
+ // clang-format off
+ InsertDXGIDepthStencilInfo(&map, DXGI_FORMAT_D16_UNORM, 16, 0);
+ InsertDXGIDepthStencilInfo(&map, DXGI_FORMAT_D24_UNORM_S8_UINT, 24, 8);
+ InsertDXGIDepthStencilInfo(&map, DXGI_FORMAT_D32_FLOAT, 32, 0);
+ InsertDXGIDepthStencilInfo(&map, DXGI_FORMAT_D32_FLOAT_S8X24_UINT, 32, 8);
+ // clang-format on
+
+ return map;
+}
+
+typedef std::map<DXGI_FORMAT, DXGIFormat> DXGIFormatInfoMap;
+
+DXGIFormat::DXGIFormat()
+ : redBits(0),
+ greenBits(0),
+ blueBits(0),
+ alphaBits(0),
+ sharedBits(0),
+ depthBits(0),
+ stencilBits(0),
+ componentType(GL_NONE),
+ nativeMipmapSupport(NULL)
+{
+}
+
+static bool NeverSupported(D3D_FEATURE_LEVEL)
+{
+ return false;
+}
+
+template <D3D_FEATURE_LEVEL requiredFeatureLevel>
+static bool RequiresFeatureLevel(D3D_FEATURE_LEVEL featureLevel)
+{
+ return featureLevel >= requiredFeatureLevel;
+}
+
+void AddDXGIFormat(DXGIFormatInfoMap *map,
+ DXGI_FORMAT dxgiFormat,
+ GLenum componentType,
+ NativeMipmapGenerationSupportFunction nativeMipmapSupport)
+{
+ DXGIFormat info;
+
+ static const ColorFormatInfoMap colorInfoMap = BuildColorFormatInfoMap();
+ ColorFormatInfoMap::const_iterator colorInfoIter = colorInfoMap.find(dxgiFormat);
+ if (colorInfoIter != colorInfoMap.end())
+ {
+ const DXGIColorFormatInfo &colorInfo = colorInfoIter->second;
+ info.redBits = static_cast<GLuint>(colorInfo.redBits);
+ info.greenBits = static_cast<GLuint>(colorInfo.greenBits);
+ info.blueBits = static_cast<GLuint>(colorInfo.blueBits);
+ info.alphaBits = static_cast<GLuint>(colorInfo.alphaBits);
+ info.sharedBits = static_cast<GLuint>(colorInfo.sharedBits);
+ }
+
+ static const DepthStencilInfoMap dsInfoMap = BuildDepthStencilInfoMap();
+ DepthStencilInfoMap::const_iterator dsInfoIter = dsInfoMap.find(dxgiFormat);
+ if (dsInfoIter != dsInfoMap.end())
+ {
+ const DXGIDepthStencilInfo &dsInfo = dsInfoIter->second;
+ info.depthBits = dsInfo.depthBits;
+ info.stencilBits = dsInfo.stencilBits;
+ }
+
+ info.componentType = componentType;
+ info.nativeMipmapSupport = nativeMipmapSupport;
+
+ map->insert(std::make_pair(dxgiFormat, info));
+}
+
+// A map to determine the color read function and mipmap generation function of a given DXGI format
+static DXGIFormatInfoMap BuildDXGIFormatInfoMap()
+{
+ DXGIFormatInfoMap map;
+
+ // clang-format off
+ // | DXGI format | Component Type | Color read function | Native mipmap function
+ AddDXGIFormat(&map, DXGI_FORMAT_UNKNOWN, GL_NONE, NeverSupported);
+
+ AddDXGIFormat(&map, DXGI_FORMAT_A8_UNORM, GL_UNSIGNED_NORMALIZED, RequiresFeatureLevel<D3D_FEATURE_LEVEL_10_0>);
+ AddDXGIFormat(&map, DXGI_FORMAT_R8_UNORM, GL_UNSIGNED_NORMALIZED, RequiresFeatureLevel<D3D_FEATURE_LEVEL_10_0>);
+ AddDXGIFormat(&map, DXGI_FORMAT_R16_UNORM, GL_UNSIGNED_NORMALIZED, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_R8G8_UNORM, GL_UNSIGNED_NORMALIZED, RequiresFeatureLevel<D3D_FEATURE_LEVEL_10_0>);
+ AddDXGIFormat(&map, DXGI_FORMAT_R16G16_UNORM, GL_UNSIGNED_NORMALIZED, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_R8G8B8A8_UNORM, GL_UNSIGNED_NORMALIZED, RequiresFeatureLevel<D3D_FEATURE_LEVEL_9_1>);
+ AddDXGIFormat(&map, DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, GL_UNSIGNED_NORMALIZED, RequiresFeatureLevel<D3D_FEATURE_LEVEL_9_1>);
+ AddDXGIFormat(&map, DXGI_FORMAT_B8G8R8A8_UNORM, GL_UNSIGNED_NORMALIZED, RequiresFeatureLevel<D3D_FEATURE_LEVEL_9_1>);
+ AddDXGIFormat(&map, DXGI_FORMAT_R16G16B16A16_UNORM, GL_UNSIGNED_NORMALIZED, NeverSupported);
+
+ AddDXGIFormat(&map, DXGI_FORMAT_R8_SNORM, GL_SIGNED_NORMALIZED, RequiresFeatureLevel<D3D_FEATURE_LEVEL_10_0>);
+ AddDXGIFormat(&map, DXGI_FORMAT_R16_SNORM, GL_SIGNED_NORMALIZED, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_R8G8_SNORM, GL_SIGNED_NORMALIZED, RequiresFeatureLevel<D3D_FEATURE_LEVEL_10_0>);
+ AddDXGIFormat(&map, DXGI_FORMAT_R16G16_SNORM, GL_SIGNED_NORMALIZED, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_R8G8B8A8_SNORM, GL_SIGNED_NORMALIZED, RequiresFeatureLevel<D3D_FEATURE_LEVEL_10_0>);
+ AddDXGIFormat(&map, DXGI_FORMAT_R16G16B16A16_SNORM, GL_SIGNED_NORMALIZED, NeverSupported);
+
+ AddDXGIFormat(&map, DXGI_FORMAT_R8_UINT, GL_UNSIGNED_INT, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_R16_UINT, GL_UNSIGNED_INT, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_R32_UINT, GL_UNSIGNED_INT, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_R8G8_UINT, GL_UNSIGNED_INT, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_R16G16_UINT, GL_UNSIGNED_INT, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_R32G32_UINT, GL_UNSIGNED_INT, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_R32G32B32_UINT, GL_UNSIGNED_INT, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_R8G8B8A8_UINT, GL_UNSIGNED_INT, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_R16G16B16A16_UINT, GL_UNSIGNED_INT, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_R32G32B32A32_UINT, GL_UNSIGNED_INT, NeverSupported);
+
+ AddDXGIFormat(&map, DXGI_FORMAT_R8_SINT, GL_INT, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_R16_SINT, GL_INT, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_R32_SINT, GL_INT, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_R8G8_SINT, GL_INT, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_R16G16_SINT, GL_INT, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_R32G32_SINT, GL_INT, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_R32G32B32_SINT, GL_INT, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_R8G8B8A8_SINT, GL_INT, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_R16G16B16A16_SINT, GL_INT, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_R32G32B32A32_SINT, GL_INT, NeverSupported);
+
+ AddDXGIFormat(&map, DXGI_FORMAT_R10G10B10A2_TYPELESS, GL_NONE, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_R10G10B10A2_UNORM, GL_UNSIGNED_NORMALIZED, RequiresFeatureLevel<D3D_FEATURE_LEVEL_10_0>);
+ AddDXGIFormat(&map, DXGI_FORMAT_R10G10B10A2_UINT, GL_UNSIGNED_INT, NeverSupported);
+
+ AddDXGIFormat(&map, DXGI_FORMAT_R16_FLOAT, GL_FLOAT, RequiresFeatureLevel<D3D_FEATURE_LEVEL_10_0>);
+ AddDXGIFormat(&map, DXGI_FORMAT_R16G16_FLOAT, GL_FLOAT, RequiresFeatureLevel<D3D_FEATURE_LEVEL_9_2>);
+ AddDXGIFormat(&map, DXGI_FORMAT_R16G16B16A16_FLOAT, GL_FLOAT, RequiresFeatureLevel<D3D_FEATURE_LEVEL_9_2>);
+
+ AddDXGIFormat(&map, DXGI_FORMAT_R32_FLOAT, GL_FLOAT, RequiresFeatureLevel<D3D_FEATURE_LEVEL_9_2>);
+ AddDXGIFormat(&map, DXGI_FORMAT_R32G32_FLOAT, GL_FLOAT, RequiresFeatureLevel<D3D_FEATURE_LEVEL_10_0>);
+ AddDXGIFormat(&map, DXGI_FORMAT_R32G32B32_FLOAT, GL_FLOAT, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_R32G32B32A32_FLOAT, GL_FLOAT, RequiresFeatureLevel<D3D_FEATURE_LEVEL_9_3>);
+
+ AddDXGIFormat(&map, DXGI_FORMAT_R9G9B9E5_SHAREDEXP, GL_FLOAT, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_R11G11B10_FLOAT, GL_FLOAT, RequiresFeatureLevel<D3D_FEATURE_LEVEL_10_0>);
+
+ AddDXGIFormat(&map, DXGI_FORMAT_R8_TYPELESS, GL_NONE, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_R16_TYPELESS, GL_NONE, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_R32_TYPELESS, GL_NONE, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_R8G8_TYPELESS, GL_NONE, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_R16G16_TYPELESS, GL_NONE, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_R32G32_TYPELESS, GL_NONE, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_R8G8_TYPELESS, GL_NONE, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_R16G16_TYPELESS, GL_NONE, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_R32G32_TYPELESS, GL_NONE, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_R32G32B32_TYPELESS, GL_NONE, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_R8G8B8A8_TYPELESS, GL_NONE, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_R16G16B16A16_TYPELESS, GL_NONE, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_R32G32B32A32_TYPELESS, GL_NONE, NeverSupported);
+
+ AddDXGIFormat(&map, DXGI_FORMAT_R24G8_TYPELESS, GL_NONE, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_R24_UNORM_X8_TYPELESS, GL_NONE, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_R32G8X24_TYPELESS, GL_NONE, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS, GL_NONE, NeverSupported);
+
+ AddDXGIFormat(&map, DXGI_FORMAT_D16_UNORM, GL_UNSIGNED_NORMALIZED, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_D24_UNORM_S8_UINT, GL_UNSIGNED_INT, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_D32_FLOAT_S8X24_UINT, GL_UNSIGNED_INT, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_D32_FLOAT, GL_FLOAT, NeverSupported);
+
+ AddDXGIFormat(&map, DXGI_FORMAT_BC1_UNORM, GL_UNSIGNED_NORMALIZED, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_BC2_UNORM, GL_UNSIGNED_NORMALIZED, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_BC3_UNORM, GL_UNSIGNED_NORMALIZED, NeverSupported);
+
+ // B5G6R5 in D3D11 is treated the same as R5G6B5 in D3D9, so reuse the R5G6B5 functions used by the D3D9 renderer.
+ // The same applies to B4G4R4A4 and B5G5R5A1 with A4R4G4B4 and A1R5G5B5 respectively.
+ AddDXGIFormat(&map, DXGI_FORMAT_B5G6R5_UNORM, GL_UNSIGNED_NORMALIZED, RequiresFeatureLevel<D3D_FEATURE_LEVEL_9_1>);
+ AddDXGIFormat(&map, DXGI_FORMAT_B4G4R4A4_UNORM, GL_UNSIGNED_NORMALIZED, NeverSupported);
+ AddDXGIFormat(&map, DXGI_FORMAT_B5G5R5A1_UNORM, GL_UNSIGNED_NORMALIZED, NeverSupported);
+ // clang-format on
+
+ return map;
+}
+
+const DXGIFormat &GetDXGIFormatInfo(DXGI_FORMAT format)
+{
+ static const DXGIFormatInfoMap infoMap = BuildDXGIFormatInfoMap();
+ DXGIFormatInfoMap::const_iterator iter = infoMap.find(format);
+ if (iter != infoMap.end())
+ {
+ return iter->second;
+ }
+ else
+ {
+ static DXGIFormat defaultInfo;
+ return defaultInfo;
+ }
}
DXGIFormatSize::DXGIFormatSize(GLuint pixelBits, GLuint blockWidth, GLuint blockHeight)
@@ -199,214 +516,117 @@ const DXGIFormatSize &GetDXGIFormatSizeInfo(DXGI_FORMAT format)
}
}
-constexpr VertexFormat::VertexFormat()
- : conversionType(VERTEX_CONVERT_NONE), nativeFormat(DXGI_FORMAT_UNKNOWN), copyFunction(NULL)
+typedef std::map<gl::VertexFormatType, VertexFormat> D3D11VertexFormatInfoMap;
+typedef std::pair<gl::VertexFormatType, VertexFormat> D3D11VertexFormatPair;
+
+VertexFormat::VertexFormat()
+ : conversionType(VERTEX_CONVERT_NONE),
+ nativeFormat(DXGI_FORMAT_UNKNOWN),
+ copyFunction(NULL)
+{
+}
+
+VertexFormat::VertexFormat(VertexConversionType conversionTypeIn,
+ DXGI_FORMAT nativeFormatIn,
+ VertexCopyFunction copyFunctionIn)
+ : conversionType(conversionTypeIn),
+ nativeFormat(nativeFormatIn),
+ copyFunction(copyFunctionIn)
{
}
-constexpr VertexFormat::VertexFormat(VertexConversionType conversionTypeIn,
- DXGI_FORMAT nativeFormatIn,
- VertexCopyFunction copyFunctionIn)
- : conversionType(conversionTypeIn), nativeFormat(nativeFormatIn), copyFunction(copyFunctionIn)
+static void AddVertexFormatInfo(D3D11VertexFormatInfoMap *map,
+ GLenum inputType,
+ GLboolean normalized,
+ GLuint componentCount,
+ VertexConversionType conversionType,
+ DXGI_FORMAT nativeFormat,
+ VertexCopyFunction copyFunction)
{
+ gl::VertexFormatType formatType = gl::GetVertexFormatType(inputType, normalized, componentCount, false);
+
+ VertexFormat info;
+ info.conversionType = conversionType;
+ info.nativeFormat = nativeFormat;
+ info.copyFunction = copyFunction;
+
+ map->insert(D3D11VertexFormatPair(formatType, info));
}
-const VertexFormat *GetVertexFormatInfo_FL_9_3(gl::VertexFormatType vertexFormatType)
+static D3D11VertexFormatInfoMap BuildD3D11_FL9_3VertexFormatInfoOverrideMap()
{
- // D3D11 Feature Level 9_3 doesn't support as many formats for vertex buffer resource as Feature
- // Level 10_0+.
+ // D3D11 Feature Level 9_3 doesn't support as many formats for vertex buffer resource as Feature Level 10_0+.
// http://msdn.microsoft.com/en-us/library/windows/desktop/ff471324(v=vs.85).aspx
- switch (vertexFormatType)
- {
- // GL_BYTE -- unnormalized
- case gl::VERTEX_FORMAT_SBYTE1:
- {
- static constexpr VertexFormat info(VERTEX_CONVERT_BOTH, DXGI_FORMAT_R16G16_SINT,
- &Copy8SintTo16SintVertexData<1, 2>);
- return &info;
- }
- case gl::VERTEX_FORMAT_SBYTE2:
- {
- static constexpr VertexFormat info(VERTEX_CONVERT_BOTH, DXGI_FORMAT_R16G16_SINT,
- &Copy8SintTo16SintVertexData<2, 2>);
- return &info;
- }
- case gl::VERTEX_FORMAT_SBYTE3:
- {
- static constexpr VertexFormat info(VERTEX_CONVERT_BOTH, DXGI_FORMAT_R16G16B16A16_SINT,
- &Copy8SintTo16SintVertexData<3, 4>);
- return &info;
- }
- case gl::VERTEX_FORMAT_SBYTE4:
- {
- static constexpr VertexFormat info(VERTEX_CONVERT_BOTH, DXGI_FORMAT_R16G16B16A16_SINT,
- &Copy8SintTo16SintVertexData<4, 4>);
- return &info;
- }
+ D3D11VertexFormatInfoMap map;
- // GL_BYTE -- normalized
- case gl::VERTEX_FORMAT_SBYTE1_NORM:
- {
- static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R16G16_SNORM,
- &Copy8SnormTo16SnormVertexData<1, 2>);
- return &info;
- }
- case gl::VERTEX_FORMAT_SBYTE2_NORM:
- {
- static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R16G16_SNORM,
- &Copy8SnormTo16SnormVertexData<2, 2>);
- return &info;
- }
- case gl::VERTEX_FORMAT_SBYTE3_NORM:
- {
- static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R16G16B16A16_SNORM,
- &Copy8SnormTo16SnormVertexData<3, 4>);
- return &info;
- }
- case gl::VERTEX_FORMAT_SBYTE4_NORM:
- {
- static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R16G16B16A16_SNORM,
- &Copy8SnormTo16SnormVertexData<4, 4>);
- return &info;
- }
+ // GL_BYTE -- unnormalized
+ AddVertexFormatInfo(&map, GL_BYTE, GL_FALSE, 1, VERTEX_CONVERT_BOTH, DXGI_FORMAT_R16G16_SINT, &Copy8SintTo16SintVertexData<1, 2>);
+ AddVertexFormatInfo(&map, GL_BYTE, GL_FALSE, 2, VERTEX_CONVERT_BOTH, DXGI_FORMAT_R16G16_SINT, &Copy8SintTo16SintVertexData<2, 2>);
+ AddVertexFormatInfo(&map, GL_BYTE, GL_FALSE, 3, VERTEX_CONVERT_BOTH, DXGI_FORMAT_R16G16B16A16_SINT, &Copy8SintTo16SintVertexData<3, 4>);
+ AddVertexFormatInfo(&map, GL_BYTE, GL_FALSE, 4, VERTEX_CONVERT_BOTH, DXGI_FORMAT_R16G16B16A16_SINT, &Copy8SintTo16SintVertexData<4, 4>);
- // GL_UNSIGNED_BYTE -- un-normalized
- // NOTE: 3 and 4 component unnormalized GL_UNSIGNED_BYTE should use the default format
- // table.
- case gl::VERTEX_FORMAT_UBYTE1:
- {
- static constexpr VertexFormat info(VERTEX_CONVERT_BOTH, DXGI_FORMAT_R8G8B8A8_UINT,
- &CopyNativeVertexData<GLubyte, 1, 4, 1>);
- return &info;
- }
- case gl::VERTEX_FORMAT_UBYTE2:
- {
- static constexpr VertexFormat info(VERTEX_CONVERT_BOTH, DXGI_FORMAT_R8G8B8A8_UINT,
- &CopyNativeVertexData<GLubyte, 2, 4, 1>);
- return &info;
- }
+ // GL_BYTE -- normalized
+ AddVertexFormatInfo(&map, GL_BYTE, GL_TRUE, 1, VERTEX_CONVERT_CPU, DXGI_FORMAT_R16G16_SNORM, &Copy8SnormTo16SnormVertexData<1, 2>);
+ AddVertexFormatInfo(&map, GL_BYTE, GL_TRUE, 2, VERTEX_CONVERT_CPU, DXGI_FORMAT_R16G16_SNORM, &Copy8SnormTo16SnormVertexData<2, 2>);
+ AddVertexFormatInfo(&map, GL_BYTE, GL_TRUE, 3, VERTEX_CONVERT_CPU, DXGI_FORMAT_R16G16B16A16_SNORM, &Copy8SnormTo16SnormVertexData<3, 4>);
+ AddVertexFormatInfo(&map, GL_BYTE, GL_TRUE, 4, VERTEX_CONVERT_CPU, DXGI_FORMAT_R16G16B16A16_SNORM, &Copy8SnormTo16SnormVertexData<4, 4>);
- // GL_UNSIGNED_BYTE -- normalized
- // NOTE: 3 and 4 component normalized GL_UNSIGNED_BYTE should use the default format table.
+ // GL_UNSIGNED_BYTE -- unnormalized
+ AddVertexFormatInfo(&map, GL_UNSIGNED_BYTE, GL_FALSE, 1, VERTEX_CONVERT_BOTH, DXGI_FORMAT_R8G8B8A8_UINT, &CopyNativeVertexData<GLubyte, 1, 4, 1>);
+ AddVertexFormatInfo(&map, GL_UNSIGNED_BYTE, GL_FALSE, 2, VERTEX_CONVERT_BOTH, DXGI_FORMAT_R8G8B8A8_UINT, &CopyNativeVertexData<GLubyte, 2, 4, 1>);
+ // NOTE: 3 and 4 component unnormalized GL_UNSIGNED_BYTE should use the default format table.
- // GL_UNSIGNED_BYTE -- normalized
- case gl::VERTEX_FORMAT_UBYTE1_NORM:
- {
- static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R8G8B8A8_UNORM,
- &CopyNativeVertexData<GLubyte, 1, 4, UINT8_MAX>);
- return &info;
- }
- case gl::VERTEX_FORMAT_UBYTE2_NORM:
- {
- static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R8G8B8A8_UNORM,
- &CopyNativeVertexData<GLubyte, 2, 4, UINT8_MAX>);
- return &info;
- }
+ // GL_UNSIGNED_BYTE -- normalized
+ AddVertexFormatInfo(&map, GL_UNSIGNED_BYTE, GL_TRUE, 1, VERTEX_CONVERT_CPU, DXGI_FORMAT_R8G8B8A8_UNORM, &CopyNativeVertexData<GLubyte, 1, 4, UINT8_MAX>);
+ AddVertexFormatInfo(&map, GL_UNSIGNED_BYTE, GL_TRUE, 2, VERTEX_CONVERT_CPU, DXGI_FORMAT_R8G8B8A8_UNORM, &CopyNativeVertexData<GLubyte, 2, 4, UINT8_MAX>);
+ // NOTE: 3 and 4 component normalized GL_UNSIGNED_BYTE should use the default format table.
- // GL_SHORT -- un-normalized
- // NOTE: 2, 3 and 4 component unnormalized GL_SHORT should use the default format table.
- case gl::VERTEX_FORMAT_SSHORT1:
- {
- static constexpr VertexFormat info(VERTEX_CONVERT_BOTH, DXGI_FORMAT_R16G16_SINT,
- &CopyNativeVertexData<GLshort, 1, 2, 0>);
- return &info;
- }
+ // GL_SHORT -- unnormalized
+ AddVertexFormatInfo(&map, GL_SHORT, GL_FALSE, 1, VERTEX_CONVERT_BOTH, DXGI_FORMAT_R16G16_SINT, &CopyNativeVertexData<GLshort, 1, 2, 0>);
+ // NOTE: 2, 3 and 4 component unnormalized GL_SHORT should use the default format table.
- // GL_SHORT -- normalized
- // NOTE: 2, 3 and 4 component normalized GL_SHORT should use the default format table.
- case gl::VERTEX_FORMAT_SSHORT1_NORM:
- {
- static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R16G16_SNORM,
- &CopyNativeVertexData<GLshort, 1, 2, 0>);
- return &info;
- }
+ // GL_SHORT -- normalized
+ AddVertexFormatInfo(&map, GL_SHORT, GL_TRUE, 1, VERTEX_CONVERT_CPU, DXGI_FORMAT_R16G16_SNORM, &CopyNativeVertexData<GLshort, 1, 2, 0>);
+ // NOTE: 2, 3 and 4 component normalized GL_SHORT should use the default format table.
- // GL_UNSIGNED_SHORT -- un-normalized
- case gl::VERTEX_FORMAT_USHORT1:
- {
- static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32_FLOAT,
- &CopyTo32FVertexData<GLushort, 1, 2, false>);
- return &info;
- }
- case gl::VERTEX_FORMAT_USHORT2:
- {
- static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32_FLOAT,
- &CopyTo32FVertexData<GLushort, 2, 2, false>);
- return &info;
- }
- case gl::VERTEX_FORMAT_USHORT3:
- {
- static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32_FLOAT,
- &CopyTo32FVertexData<GLushort, 3, 3, false>);
- return &info;
- }
- case gl::VERTEX_FORMAT_USHORT4:
- {
- static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32A32_FLOAT,
- &CopyTo32FVertexData<GLushort, 4, 4, false>);
- return &info;
- }
+ // GL_UNSIGNED_SHORT -- unnormalized
+ AddVertexFormatInfo(&map, GL_UNSIGNED_SHORT, GL_FALSE, 1, VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32_FLOAT, &CopyTo32FVertexData<GLushort, 1, 2, false>);
+ AddVertexFormatInfo(&map, GL_UNSIGNED_SHORT, GL_FALSE, 2, VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32_FLOAT, &CopyTo32FVertexData<GLushort, 2, 2, false>);
+ AddVertexFormatInfo(&map, GL_UNSIGNED_SHORT, GL_FALSE, 3, VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32_FLOAT, &CopyTo32FVertexData<GLushort, 3, 3, false>);
+ AddVertexFormatInfo(&map, GL_UNSIGNED_SHORT, GL_FALSE, 4, VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32A32_FLOAT, &CopyTo32FVertexData<GLushort, 4, 4, false>);
- // GL_UNSIGNED_SHORT -- normalized
- case gl::VERTEX_FORMAT_USHORT1_NORM:
- {
- static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32_FLOAT,
- &CopyTo32FVertexData<GLushort, 1, 2, true>);
- return &info;
- }
- case gl::VERTEX_FORMAT_USHORT2_NORM:
- {
- static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32_FLOAT,
- &CopyTo32FVertexData<GLushort, 2, 2, true>);
- return &info;
- }
- case gl::VERTEX_FORMAT_USHORT3_NORM:
- {
- static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32_FLOAT,
- &CopyTo32FVertexData<GLushort, 3, 3, true>);
- return &info;
- }
- case gl::VERTEX_FORMAT_USHORT4_NORM:
- {
- static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32A32_FLOAT,
- &CopyTo32FVertexData<GLushort, 4, 4, true>);
- return &info;
- }
+ // GL_UNSIGNED_SHORT -- normalized
+ AddVertexFormatInfo(&map, GL_UNSIGNED_SHORT, GL_TRUE, 1, VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32_FLOAT, &CopyTo32FVertexData<GLushort, 1, 2, true>);
+ AddVertexFormatInfo(&map, GL_UNSIGNED_SHORT, GL_TRUE, 2, VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32_FLOAT, &CopyTo32FVertexData<GLushort, 2, 2, true>);
+ AddVertexFormatInfo(&map, GL_UNSIGNED_SHORT, GL_TRUE, 3, VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32_FLOAT, &CopyTo32FVertexData<GLushort, 3, 3, true>);
+ AddVertexFormatInfo(&map, GL_UNSIGNED_SHORT, GL_TRUE, 4, VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32A32_FLOAT, &CopyTo32FVertexData<GLushort, 4, 4, true>);
- // GL_FIXED
- // TODO: Add test to verify that this works correctly.
- // NOTE: 2, 3 and 4 component GL_FIXED should use the default format table.
- case gl::VERTEX_FORMAT_FIXED1:
- {
- static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32_FLOAT,
- &Copy32FixedTo32FVertexData<1, 2>);
- return &info;
- }
+ // GL_FIXED
+ // TODO: Add test to verify that this works correctly.
+ AddVertexFormatInfo(&map, GL_FIXED, GL_FALSE, 1, VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32_FLOAT, &Copy32FixedTo32FVertexData<1, 2>);
+ // NOTE: 2, 3 and 4 component GL_FIXED should use the default format table.
- // GL_FLOAT
- // TODO: Add test to verify that this works correctly.
- // NOTE: 2, 3 and 4 component GL_FLOAT should use the default format table.
- case gl::VERTEX_FORMAT_FLOAT1:
- {
- static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32_FLOAT,
- &CopyNativeVertexData<GLfloat, 1, 2, 0>);
- return &info;
- }
+ // GL_FLOAT
+ // TODO: Add test to verify that this works correctly.
+ AddVertexFormatInfo(&map, GL_FLOAT, GL_FALSE, 1, VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32_FLOAT, &CopyNativeVertexData<GLfloat, 1, 2, 0>);
+ // NOTE: 2, 3 and 4 component GL_FLOAT should use the default format table.
- default:
- return nullptr;
- }
+ return map;
}
const VertexFormat &GetVertexFormatInfo(gl::VertexFormatType vertexFormatType, D3D_FEATURE_LEVEL featureLevel)
{
if (featureLevel == D3D_FEATURE_LEVEL_9_3)
{
- const VertexFormat *result = GetVertexFormatInfo_FL_9_3(vertexFormatType);
- if (result)
+ static const D3D11VertexFormatInfoMap vertexFormatMapFL9_3Override =
+ BuildD3D11_FL9_3VertexFormatInfoOverrideMap();
+
+ // First see if the format has a special mapping for FL9_3
+ auto iter = vertexFormatMapFL9_3Override.find(vertexFormatType);
+ if (iter != vertexFormatMapFL9_3Override.end())
{
- return *result;
+ return iter->second;
}
}
@@ -419,418 +639,357 @@ const VertexFormat &GetVertexFormatInfo(gl::VertexFormatType vertexFormatType, D
// GL_BYTE -- un-normalized
case gl::VERTEX_FORMAT_SBYTE1:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R8_SINT,
- &CopyNativeVertexData<GLbyte, 1, 1, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R8_SINT, &CopyNativeVertexData<GLbyte, 1, 1, 0>);
return info;
}
case gl::VERTEX_FORMAT_SBYTE2:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R8G8_SINT,
- &CopyNativeVertexData<GLbyte, 2, 2, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R8G8_SINT, &CopyNativeVertexData<GLbyte, 2, 2, 0>);
return info;
}
case gl::VERTEX_FORMAT_SBYTE3:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_BOTH, DXGI_FORMAT_R8G8B8A8_SINT,
- &CopyNativeVertexData<GLbyte, 3, 4, 1>);
+ static const VertexFormat info(VERTEX_CONVERT_BOTH, DXGI_FORMAT_R8G8B8A8_SINT, &CopyNativeVertexData<GLbyte, 3, 4, 1>);
return info;
}
case gl::VERTEX_FORMAT_SBYTE4:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R8G8B8A8_SINT,
- &CopyNativeVertexData<GLbyte, 4, 4, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R8G8B8A8_SINT, &CopyNativeVertexData<GLbyte, 4, 4, 0>);
return info;
}
// GL_BYTE -- normalized
case gl::VERTEX_FORMAT_SBYTE1_NORM:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R8_SNORM,
- &CopyNativeVertexData<GLbyte, 1, 1, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R8_SNORM, &CopyNativeVertexData<GLbyte, 1, 1, 0>);
return info;
}
case gl::VERTEX_FORMAT_SBYTE2_NORM:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R8G8_SNORM,
- &CopyNativeVertexData<GLbyte, 2, 2, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R8G8_SNORM, &CopyNativeVertexData<GLbyte, 2, 2, 0>);
return info;
}
case gl::VERTEX_FORMAT_SBYTE3_NORM:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R8G8B8A8_SNORM,
- &CopyNativeVertexData<GLbyte, 3, 4, INT8_MAX>);
+ static const VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R8G8B8A8_SNORM, &CopyNativeVertexData<GLbyte, 3, 4, INT8_MAX>);
return info;
}
case gl::VERTEX_FORMAT_SBYTE4_NORM:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R8G8B8A8_SNORM,
- &CopyNativeVertexData<GLbyte, 4, 4, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R8G8B8A8_SNORM, &CopyNativeVertexData<GLbyte, 4, 4, 0>);
return info;
}
// GL_UNSIGNED_BYTE -- un-normalized
case gl::VERTEX_FORMAT_UBYTE1:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R8_UINT,
- &CopyNativeVertexData<GLubyte, 1, 1, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R8_UINT, &CopyNativeVertexData<GLubyte, 1, 1, 0>);
return info;
}
case gl::VERTEX_FORMAT_UBYTE2:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R8G8_UINT,
- &CopyNativeVertexData<GLubyte, 2, 2, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R8G8_UINT, &CopyNativeVertexData<GLubyte, 2, 2, 0>);
return info;
}
case gl::VERTEX_FORMAT_UBYTE3:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_BOTH, DXGI_FORMAT_R8G8B8A8_UINT,
- &CopyNativeVertexData<GLubyte, 3, 4, 1>);
+ static const VertexFormat info(VERTEX_CONVERT_BOTH, DXGI_FORMAT_R8G8B8A8_UINT, &CopyNativeVertexData<GLubyte, 3, 4, 1>);
return info;
}
case gl::VERTEX_FORMAT_UBYTE4:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R8G8B8A8_UINT,
- &CopyNativeVertexData<GLubyte, 4, 4, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R8G8B8A8_UINT, &CopyNativeVertexData<GLubyte, 4, 4, 0>);
return info;
}
// GL_UNSIGNED_BYTE -- normalized
case gl::VERTEX_FORMAT_UBYTE1_NORM:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R8_UNORM,
- &CopyNativeVertexData<GLubyte, 1, 1, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R8_UNORM, &CopyNativeVertexData<GLubyte, 1, 1, 0>);
return info;
}
case gl::VERTEX_FORMAT_UBYTE2_NORM:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R8G8_UNORM,
- &CopyNativeVertexData<GLubyte, 2, 2, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R8G8_UNORM, &CopyNativeVertexData<GLubyte, 2, 2, 0>);
return info;
}
case gl::VERTEX_FORMAT_UBYTE3_NORM:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R8G8B8A8_UNORM,
- &CopyNativeVertexData<GLubyte, 3, 4, UINT8_MAX>);
+ static const VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R8G8B8A8_UNORM, &CopyNativeVertexData<GLubyte, 3, 4, UINT8_MAX>);
return info;
}
case gl::VERTEX_FORMAT_UBYTE4_NORM:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R8G8B8A8_UNORM,
- &CopyNativeVertexData<GLubyte, 4, 4, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R8G8B8A8_UNORM, &CopyNativeVertexData<GLubyte, 4, 4, 0>);
return info;
}
// GL_SHORT -- un-normalized
case gl::VERTEX_FORMAT_SSHORT1:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R16_SINT,
- &CopyNativeVertexData<GLshort, 1, 1, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R16_SINT, &CopyNativeVertexData<GLshort, 1, 1, 0>);
return info;
}
case gl::VERTEX_FORMAT_SSHORT2:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R16G16_SINT,
- &CopyNativeVertexData<GLshort, 2, 2, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R16G16_SINT, &CopyNativeVertexData<GLshort, 2, 2, 0>);
return info;
}
case gl::VERTEX_FORMAT_SSHORT3:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_BOTH, DXGI_FORMAT_R16G16B16A16_SINT,
- &CopyNativeVertexData<GLshort, 3, 4, 1>);
+ static const VertexFormat info(VERTEX_CONVERT_BOTH, DXGI_FORMAT_R16G16B16A16_SINT, &CopyNativeVertexData<GLshort, 3, 4, 1>);
return info;
}
case gl::VERTEX_FORMAT_SSHORT4:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R16G16B16A16_SINT,
- &CopyNativeVertexData<GLshort, 4, 4, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R16G16B16A16_SINT, &CopyNativeVertexData<GLshort, 4, 4, 0>);
return info;
}
// GL_SHORT -- normalized
case gl::VERTEX_FORMAT_SSHORT1_NORM:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R16_SNORM,
- &CopyNativeVertexData<GLshort, 1, 1, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R16_SNORM, &CopyNativeVertexData<GLshort, 1, 1, 0>);
return info;
}
case gl::VERTEX_FORMAT_SSHORT2_NORM:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R16G16_SNORM,
- &CopyNativeVertexData<GLshort, 2, 2, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R16G16_SNORM, &CopyNativeVertexData<GLshort, 2, 2, 0>);
return info;
}
case gl::VERTEX_FORMAT_SSHORT3_NORM:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R16G16B16A16_SNORM,
- &CopyNativeVertexData<GLshort, 3, 4, INT16_MAX>);
+ static const VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R16G16B16A16_SNORM, &CopyNativeVertexData<GLshort, 3, 4, INT16_MAX>);
return info;
}
case gl::VERTEX_FORMAT_SSHORT4_NORM:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R16G16B16A16_SNORM,
- &CopyNativeVertexData<GLshort, 4, 4, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R16G16B16A16_SNORM, &CopyNativeVertexData<GLshort, 4, 4, 0>);
return info;
}
// GL_UNSIGNED_SHORT -- un-normalized
case gl::VERTEX_FORMAT_USHORT1:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R16_UINT,
- &CopyNativeVertexData<GLushort, 1, 1, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R16_UINT, &CopyNativeVertexData<GLushort, 1, 1, 0>);
return info;
}
case gl::VERTEX_FORMAT_USHORT2:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R16G16_UINT,
- &CopyNativeVertexData<GLushort, 2, 2, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R16G16_UINT, &CopyNativeVertexData<GLushort, 2, 2, 0>);
return info;
}
case gl::VERTEX_FORMAT_USHORT3:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_BOTH, DXGI_FORMAT_R16G16B16A16_UINT,
- &CopyNativeVertexData<GLushort, 3, 4, 1>);
+ static const VertexFormat info(VERTEX_CONVERT_BOTH, DXGI_FORMAT_R16G16B16A16_UINT, &CopyNativeVertexData<GLushort, 3, 4, 1>);
return info;
}
case gl::VERTEX_FORMAT_USHORT4:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R16G16B16A16_UINT,
- &CopyNativeVertexData<GLushort, 4, 4, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R16G16B16A16_UINT, &CopyNativeVertexData<GLushort, 4, 4, 0>);
return info;
}
// GL_UNSIGNED_SHORT -- normalized
case gl::VERTEX_FORMAT_USHORT1_NORM:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R16_UNORM,
- &CopyNativeVertexData<GLushort, 1, 1, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R16_UNORM, &CopyNativeVertexData<GLushort, 1, 1, 0>);
return info;
}
case gl::VERTEX_FORMAT_USHORT2_NORM:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R16G16_UNORM,
- &CopyNativeVertexData<GLushort, 2, 2, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R16G16_UNORM, &CopyNativeVertexData<GLushort, 2, 2, 0>);
return info;
}
case gl::VERTEX_FORMAT_USHORT3_NORM:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R16G16B16A16_UNORM,
- &CopyNativeVertexData<GLushort, 3, 4, UINT16_MAX>);
+ static const VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R16G16B16A16_UNORM, &CopyNativeVertexData<GLushort, 3, 4, UINT16_MAX>);
return info;
}
case gl::VERTEX_FORMAT_USHORT4_NORM:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R16G16B16A16_UNORM,
- &CopyNativeVertexData<GLushort, 4, 4, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R16G16B16A16_UNORM, &CopyNativeVertexData<GLushort, 4, 4, 0>);
return info;
}
// GL_INT -- un-normalized
case gl::VERTEX_FORMAT_SINT1:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R32_SINT,
- &CopyNativeVertexData<GLint, 1, 1, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R32_SINT, &CopyNativeVertexData<GLint, 1, 1, 0>);
return info;
}
case gl::VERTEX_FORMAT_SINT2:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R32G32_SINT,
- &CopyNativeVertexData<GLint, 2, 2, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R32G32_SINT, &CopyNativeVertexData<GLint, 2, 2, 0>);
return info;
}
case gl::VERTEX_FORMAT_SINT3:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R32G32B32_SINT,
- &CopyNativeVertexData<GLint, 3, 3, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R32G32B32_SINT, &CopyNativeVertexData<GLint, 3, 3, 0>);
return info;
}
case gl::VERTEX_FORMAT_SINT4:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R32G32B32A32_SINT,
- &CopyNativeVertexData<GLint, 4, 4, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R32G32B32A32_SINT, &CopyNativeVertexData<GLint, 4, 4, 0>);
return info;
}
// GL_INT -- normalized
case gl::VERTEX_FORMAT_SINT1_NORM:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32_FLOAT,
- &CopyTo32FVertexData<GLint, 1, 1, true>);
+ static const VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32_FLOAT, &CopyTo32FVertexData<GLint, 1, 1, true>);
return info;
}
case gl::VERTEX_FORMAT_SINT2_NORM:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32_FLOAT,
- &CopyTo32FVertexData<GLint, 2, 2, true>);
+ static const VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32_FLOAT, &CopyTo32FVertexData<GLint, 2, 2, true>);
return info;
}
case gl::VERTEX_FORMAT_SINT3_NORM:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32_FLOAT,
- &CopyTo32FVertexData<GLint, 3, 3, true>);
+ static const VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32_FLOAT, &CopyTo32FVertexData<GLint, 3, 3, true>);
return info;
}
case gl::VERTEX_FORMAT_SINT4_NORM:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32A32_FLOAT,
- &CopyTo32FVertexData<GLint, 4, 4, true>);
+ static const VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32A32_FLOAT, &CopyTo32FVertexData<GLint, 4, 4, true>);
return info;
}
// GL_UNSIGNED_INT -- un-normalized
case gl::VERTEX_FORMAT_UINT1:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R32_UINT,
- &CopyNativeVertexData<GLuint, 1, 1, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R32_UINT, &CopyNativeVertexData<GLuint, 1, 1, 0>);
return info;
}
case gl::VERTEX_FORMAT_UINT2:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R32G32_UINT,
- &CopyNativeVertexData<GLuint, 2, 2, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R32G32_UINT, &CopyNativeVertexData<GLuint, 2, 2, 0>);
return info;
}
case gl::VERTEX_FORMAT_UINT3:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R32G32B32_UINT,
- &CopyNativeVertexData<GLuint, 3, 3, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R32G32B32_UINT, &CopyNativeVertexData<GLuint, 3, 3, 0>);
return info;
}
case gl::VERTEX_FORMAT_UINT4:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R32G32B32A32_UINT,
- &CopyNativeVertexData<GLuint, 4, 4, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R32G32B32A32_UINT, &CopyNativeVertexData<GLuint, 4, 4, 0>);
return info;
}
// GL_UNSIGNED_INT -- normalized
case gl::VERTEX_FORMAT_UINT1_NORM:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32_FLOAT,
- &CopyTo32FVertexData<GLuint, 1, 1, true>);
+ static const VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32_FLOAT,
+ &CopyTo32FVertexData<GLuint, 1, 1, true>);
return info;
}
case gl::VERTEX_FORMAT_UINT2_NORM:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32_FLOAT,
- &CopyTo32FVertexData<GLuint, 2, 2, true>);
+ static const VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32_FLOAT,
+ &CopyTo32FVertexData<GLuint, 2, 2, true>);
return info;
}
case gl::VERTEX_FORMAT_UINT3_NORM:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32_FLOAT,
- &CopyTo32FVertexData<GLuint, 3, 3, true>);
+ static const VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32_FLOAT, &CopyTo32FVertexData<GLuint, 3, 3, true>);
return info;
}
case gl::VERTEX_FORMAT_UINT4_NORM:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32A32_FLOAT,
- &CopyTo32FVertexData<GLuint, 4, 4, true>);
+ static const VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32A32_FLOAT,
+ &CopyTo32FVertexData<GLuint, 4, 4, true>);
return info;
}
// GL_FIXED
case gl::VERTEX_FORMAT_FIXED1:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32_FLOAT,
- &Copy32FixedTo32FVertexData<1, 1>);
+ static const VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32_FLOAT, &Copy32FixedTo32FVertexData<1, 1>);
return info;
}
case gl::VERTEX_FORMAT_FIXED2:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32_FLOAT,
- &Copy32FixedTo32FVertexData<2, 2>);
+ static const VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32_FLOAT, &Copy32FixedTo32FVertexData<2, 2>);
return info;
}
case gl::VERTEX_FORMAT_FIXED3:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32_FLOAT,
- &Copy32FixedTo32FVertexData<3, 3>);
+ static const VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32_FLOAT, &Copy32FixedTo32FVertexData<3, 3>);
return info;
}
case gl::VERTEX_FORMAT_FIXED4:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32A32_FLOAT,
- &Copy32FixedTo32FVertexData<4, 4>);
+ static const VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32A32_FLOAT, &Copy32FixedTo32FVertexData<4, 4>);
return info;
}
// GL_HALF_FLOAT
case gl::VERTEX_FORMAT_HALF1:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R16_FLOAT,
- &CopyNativeVertexData<GLhalf, 1, 1, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R16_FLOAT, &CopyNativeVertexData<GLhalf, 1, 1, 0>);
return info;
}
case gl::VERTEX_FORMAT_HALF2:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R16G16_FLOAT,
- &CopyNativeVertexData<GLhalf, 2, 2, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R16G16_FLOAT, &CopyNativeVertexData<GLhalf, 2, 2, 0>);
return info;
}
case gl::VERTEX_FORMAT_HALF3:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R16G16B16A16_FLOAT,
- &CopyNativeVertexData<GLhalf, 3, 4, gl::Float16One>);
+ static const VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R16G16B16A16_FLOAT, &CopyNativeVertexData<GLhalf, 3, 4, gl::Float16One>);
return info;
}
case gl::VERTEX_FORMAT_HALF4:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R16G16B16A16_FLOAT,
- &CopyNativeVertexData<GLhalf, 4, 4, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R16G16B16A16_FLOAT, &CopyNativeVertexData<GLhalf, 4, 4, 0>);
return info;
}
// GL_FLOAT
case gl::VERTEX_FORMAT_FLOAT1:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R32_FLOAT,
- &CopyNativeVertexData<GLfloat, 1, 1, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R32_FLOAT, &CopyNativeVertexData<GLfloat, 1, 1, 0>);
return info;
}
case gl::VERTEX_FORMAT_FLOAT2:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R32G32_FLOAT,
- &CopyNativeVertexData<GLfloat, 2, 2, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R32G32_FLOAT, &CopyNativeVertexData<GLfloat, 2, 2, 0>);
return info;
}
case gl::VERTEX_FORMAT_FLOAT3:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R32G32B32_FLOAT,
- &CopyNativeVertexData<GLfloat, 3, 3, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R32G32B32_FLOAT, &CopyNativeVertexData<GLfloat, 3, 3, 0>);
return info;
}
case gl::VERTEX_FORMAT_FLOAT4:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R32G32B32A32_FLOAT,
- &CopyNativeVertexData<GLfloat, 4, 4, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R32G32B32A32_FLOAT, &CopyNativeVertexData<GLfloat, 4, 4, 0>);
return info;
}
// GL_INT_2_10_10_10_REV
case gl::VERTEX_FORMAT_SINT210:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32A32_FLOAT,
- &CopyXYZ10W2ToXYZW32FVertexData<true, false, true>);
+ static const VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32A32_FLOAT, &CopyXYZ10W2ToXYZW32FVertexData<true, false, true>);
return info;
}
case gl::VERTEX_FORMAT_SINT210_NORM:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32A32_FLOAT,
- &CopyXYZ10W2ToXYZW32FVertexData<true, true, true>);
+ static const VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32A32_FLOAT, &CopyXYZ10W2ToXYZW32FVertexData<true, true, true>);
return info;
}
// GL_UNSIGNED_INT_2_10_10_10_REV
case gl::VERTEX_FORMAT_UINT210:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32A32_FLOAT,
- &CopyXYZ10W2ToXYZW32FVertexData<false, false, true>);
+ static const VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32A32_FLOAT, &CopyXYZ10W2ToXYZW32FVertexData<false, false, true>);
return info;
}
case gl::VERTEX_FORMAT_UINT210_NORM:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R10G10B10A2_UNORM,
- &CopyNativeVertexData<GLuint, 1, 1, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R10G10B10A2_UNORM, &CopyNativeVertexData<GLuint, 1, 1, 0>);
return info;
}
@@ -841,183 +1000,157 @@ const VertexFormat &GetVertexFormatInfo(gl::VertexFormatType vertexFormatType, D
// GL_BYTE
case gl::VERTEX_FORMAT_SBYTE1_INT:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R8_SINT,
- &CopyNativeVertexData<GLbyte, 1, 1, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R8_SINT, &CopyNativeVertexData<GLbyte, 1, 1, 0>);
return info;
}
case gl::VERTEX_FORMAT_SBYTE2_INT:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R8G8_SINT,
- &CopyNativeVertexData<GLbyte, 2, 2, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R8G8_SINT, &CopyNativeVertexData<GLbyte, 2, 2, 0>);
return info;
}
case gl::VERTEX_FORMAT_SBYTE3_INT:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R8G8B8A8_SINT,
- &CopyNativeVertexData<GLbyte, 3, 4, 1>);
+ static const VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R8G8B8A8_SINT, &CopyNativeVertexData<GLbyte, 3, 4, 1>);
return info;
}
case gl::VERTEX_FORMAT_SBYTE4_INT:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R8G8B8A8_SINT,
- &CopyNativeVertexData<GLbyte, 4, 4, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R8G8B8A8_SINT, &CopyNativeVertexData<GLbyte, 4, 4, 0>);
return info;
}
// GL_UNSIGNED_BYTE
case gl::VERTEX_FORMAT_UBYTE1_INT:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R8_UINT,
- &CopyNativeVertexData<GLubyte, 1, 1, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R8_UINT, &CopyNativeVertexData<GLubyte, 1, 1, 0>);
return info;
}
case gl::VERTEX_FORMAT_UBYTE2_INT:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R8G8_UINT,
- &CopyNativeVertexData<GLubyte, 2, 2, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R8G8_UINT, &CopyNativeVertexData<GLubyte, 2, 2, 0>);
return info;
}
case gl::VERTEX_FORMAT_UBYTE3_INT:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R8G8B8A8_UINT,
- &CopyNativeVertexData<GLubyte, 3, 4, 1>);
+ static const VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R8G8B8A8_UINT, &CopyNativeVertexData<GLubyte, 3, 4, 1>);
return info;
}
case gl::VERTEX_FORMAT_UBYTE4_INT:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R8G8B8A8_UINT,
- &CopyNativeVertexData<GLubyte, 4, 4, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R8G8B8A8_UINT, &CopyNativeVertexData<GLubyte, 4, 4, 0>);
return info;
}
// GL_SHORT
case gl::VERTEX_FORMAT_SSHORT1_INT:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R16_SINT,
- &CopyNativeVertexData<GLshort, 1, 1, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R16_SINT, &CopyNativeVertexData<GLshort, 1, 1, 0>);
return info;
}
case gl::VERTEX_FORMAT_SSHORT2_INT:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R16G16_SINT,
- &CopyNativeVertexData<GLshort, 2, 2, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R16G16_SINT, &CopyNativeVertexData<GLshort, 2, 2, 0>);
return info;
}
case gl::VERTEX_FORMAT_SSHORT3_INT:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R16G16B16A16_SINT,
- &CopyNativeVertexData<GLshort, 3, 4, 1>);
+ static const VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R16G16B16A16_SINT, &CopyNativeVertexData<GLshort, 3, 4, 1>);
return info;
}
case gl::VERTEX_FORMAT_SSHORT4_INT:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R16G16B16A16_SINT,
- &CopyNativeVertexData<GLshort, 4, 4, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R16G16B16A16_SINT, &CopyNativeVertexData<GLshort, 4, 4, 0>);
return info;
}
// GL_UNSIGNED_SHORT
case gl::VERTEX_FORMAT_USHORT1_INT:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R16_UINT,
- &CopyNativeVertexData<GLushort, 1, 1, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R16_UINT, &CopyNativeVertexData<GLushort, 1, 1, 0>);
return info;
}
case gl::VERTEX_FORMAT_USHORT2_INT:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R16G16_UINT,
- &CopyNativeVertexData<GLushort, 2, 2, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R16G16_UINT, &CopyNativeVertexData<GLushort, 2, 2, 0>);
return info;
}
case gl::VERTEX_FORMAT_USHORT3_INT:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R16G16B16A16_UINT,
- &CopyNativeVertexData<GLushort, 3, 4, 1>);
+ static const VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R16G16B16A16_UINT, &CopyNativeVertexData<GLushort, 3, 4, 1>);
return info;
}
case gl::VERTEX_FORMAT_USHORT4_INT:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R16G16B16A16_UINT,
- &CopyNativeVertexData<GLushort, 4, 4, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R16G16B16A16_UINT, &CopyNativeVertexData<GLushort, 4, 4, 0>);
return info;
}
// GL_INT
case gl::VERTEX_FORMAT_SINT1_INT:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R32_SINT,
- &CopyNativeVertexData<GLint, 1, 1, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R32_SINT, &CopyNativeVertexData<GLint, 1, 1, 0>);
return info;
}
case gl::VERTEX_FORMAT_SINT2_INT:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R32G32_SINT,
- &CopyNativeVertexData<GLint, 2, 2, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R32G32_SINT, &CopyNativeVertexData<GLint, 2, 2, 0>);
return info;
}
case gl::VERTEX_FORMAT_SINT3_INT:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R32G32B32_SINT,
- &CopyNativeVertexData<GLint, 3, 3, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R32G32B32_SINT, &CopyNativeVertexData<GLint, 3, 3, 0>);
return info;
}
case gl::VERTEX_FORMAT_SINT4_INT:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R32G32B32A32_SINT,
- &CopyNativeVertexData<GLint, 4, 4, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R32G32B32A32_SINT, &CopyNativeVertexData<GLint, 4, 4, 0>);
return info;
}
// GL_UNSIGNED_INT
case gl::VERTEX_FORMAT_UINT1_INT:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R32_SINT,
- &CopyNativeVertexData<GLuint, 1, 1, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R32_SINT, &CopyNativeVertexData<GLuint, 1, 1, 0>);
return info;
}
case gl::VERTEX_FORMAT_UINT2_INT:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R32G32_SINT,
- &CopyNativeVertexData<GLuint, 2, 2, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R32G32_SINT, &CopyNativeVertexData<GLuint, 2, 2, 0>);
return info;
}
case gl::VERTEX_FORMAT_UINT3_INT:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R32G32B32_SINT,
- &CopyNativeVertexData<GLuint, 3, 3, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R32G32B32_SINT, &CopyNativeVertexData<GLuint, 3, 3, 0>);
return info;
}
case gl::VERTEX_FORMAT_UINT4_INT:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R32G32B32A32_SINT,
- &CopyNativeVertexData<GLuint, 4, 4, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R32G32B32A32_SINT, &CopyNativeVertexData<GLuint, 4, 4, 0>);
return info;
}
// GL_INT_2_10_10_10_REV
case gl::VERTEX_FORMAT_SINT210_INT:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R16G16B16A16_SINT,
- &CopyXYZ10W2ToXYZW32FVertexData<true, true, false>);
+ static const VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R16G16B16A16_SINT, &CopyXYZ10W2ToXYZW32FVertexData<true, true, false>);
return info;
}
// GL_UNSIGNED_INT_2_10_10_10_REV
case gl::VERTEX_FORMAT_UINT210_INT:
{
- static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R10G10B10A2_UINT,
- &CopyNativeVertexData<GLuint, 1, 1, 0>);
+ static const VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R10G10B10A2_UINT, &CopyNativeVertexData<GLuint, 1, 1, 0>);
return info;
}
default:
{
- static constexpr VertexFormat info;
+ static const VertexFormat info;
return info;
}
}
}
-} // namespace d3d11
+}
-} // namespace rx
+}
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/formatutils11.h b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/formatutils11.h
index 3a9fd63df..1aa5cc294 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/formatutils11.h
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/formatutils11.h
@@ -25,11 +25,31 @@ struct Renderer11DeviceCaps;
namespace d3d11
{
-// A texture might be stored as DXGI_FORMAT_R16_TYPELESS but store integer components,
+typedef bool (*NativeMipmapGenerationSupportFunction)(D3D_FEATURE_LEVEL);
+
+struct DXGIFormat
+{
+ DXGIFormat();
+
+ GLuint redBits;
+ GLuint greenBits;
+ GLuint blueBits;
+ GLuint alphaBits;
+ GLuint sharedBits;
+
+ GLuint depthBits;
+ GLuint stencilBits;
+
+ GLenum componentType;
+
+ NativeMipmapGenerationSupportFunction nativeMipmapSupport;
+};
+
+// This structure is problematic because a resource is associated with multiple DXGI formats.
+// For example, a texture might be stored as DXGI_FORMAT_R16_TYPELESS but store integer components,
// which are accessed through an DXGI_FORMAT_R16_SINT view. It's easy to write code which queries
// information about the wrong format. Therefore, use of this should be avoided where possible.
-
-bool SupportsMipGen(DXGI_FORMAT dxgiFormat, D3D_FEATURE_LEVEL featureLevel);
+const DXGIFormat &GetDXGIFormatInfo(DXGI_FORMAT format);
struct DXGIFormatSize
{
@@ -41,31 +61,22 @@ struct DXGIFormatSize
};
const DXGIFormatSize &GetDXGIFormatSizeInfo(DXGI_FORMAT format);
-struct VertexFormat : angle::NonCopyable
+struct VertexFormat
{
- constexpr VertexFormat();
- constexpr VertexFormat(VertexConversionType conversionType,
- DXGI_FORMAT nativeFormat,
- VertexCopyFunction copyFunction);
+ VertexFormat();
+ VertexFormat(VertexConversionType conversionType,
+ DXGI_FORMAT nativeFormat,
+ VertexCopyFunction copyFunction);
VertexConversionType conversionType;
DXGI_FORMAT nativeFormat;
VertexCopyFunction copyFunction;
};
-
const VertexFormat &GetVertexFormatInfo(gl::VertexFormatType vertexFormatType,
D3D_FEATURE_LEVEL featureLevel);
-// Auto-generated in dxgi_format_map_autogen.cpp.
-GLenum GetComponentType(DXGI_FORMAT dxgiFormat);
-
} // namespace d3d11
-namespace d3d11_angle
-{
-const angle::Format &GetFormat(DXGI_FORMAT dxgiFormat);
-}
-
} // namespace rx
#endif // LIBANGLE_RENDERER_D3D_D3D11_FORMATUTILS11_H_
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/gen_dxgi_format_table.py b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/gen_dxgi_format_table.py
deleted file mode 100644
index 6c6d1906a..000000000
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/gen_dxgi_format_table.py
+++ /dev/null
@@ -1,134 +0,0 @@
-#!/usr/bin/python
-# Copyright 2016 The ANGLE Project Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-#
-# gen_dxgi_format_table.py:
-# Code generation for DXGI format map.
-
-from datetime import date
-import sys
-
-sys.path.append('../..')
-import angle_format
-
-template_cpp = """// GENERATED FILE - DO NOT EDIT.
-// Generated by {script_name} using data from {data_source_name}.
-//
-// Copyright {copyright_year} The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// DXGI format info:
-// Determining metadata about a DXGI format.
-
-#include "libANGLE/renderer/Format.h"
-
-using namespace angle;
-
-namespace rx
-{{
-
-namespace d3d11
-{{
-
-GLenum GetComponentType(DXGI_FORMAT dxgiFormat)
-{{
- switch (dxgiFormat)
- {{
-{component_type_cases} default:
- break;
- }}
-
- UNREACHABLE();
- return GL_NONE;
-}}
-
-}} // namespace d3d11
-
-namespace d3d11_angle
-{{
-
-const Format &GetFormat(DXGI_FORMAT dxgiFormat)
-{{
- switch (dxgiFormat)
- {{
-{format_cases} default:
- break;
- }}
-
- UNREACHABLE();
- return Format::Get(Format::ID::NONE);
-}}
-
-}} // namespace d3d11_angle
-
-}} // namespace rx
-"""
-
-template_format_case = """ case DXGI_FORMAT_{dxgi_format}:
- return {result};
-"""
-
-template_undefined_case = """ case DXGI_FORMAT_{dxgi_format}:
- break;
-"""
-
-def format_case(dxgi_format, result):
- return template_format_case.format(
- dxgi_format = dxgi_format,
- result = result)
-
-def undefined_case(dxgi_format):
- return template_undefined_case.format(dxgi_format = dxgi_format)
-
-component_cases = ""
-format_cases = ""
-
-input_data = 'dxgi_format_data.json'
-
-dxgi_map = angle_format.load_json(input_data)
-
-types = {
- 'SNORM': 'GL_SIGNED_NORMALIZED',
- 'UNORM': 'GL_UNSIGNED_NORMALIZED',
- 'SINT': 'GL_INT',
- 'UINT': 'GL_UNSIGNED_INT',
- 'FLOAT': 'GL_FLOAT',
- 'SHAREDEXP': 'GL_FLOAT'
-}
-
-angle_to_gl = angle_format.load_inverse_table('../../angle_format_map.json')
-all_angle = angle_to_gl.keys()
-
-for dxgi_format, angle_format in sorted(dxgi_map.iteritems()):
-
- found = [ctype in dxgi_format for ctype in types.keys()]
- count = reduce((lambda a, b: int(a) + int(b)), found)
-
- component_type = 'GL_NONE'
-
- if count == 1:
- gltype = next(gltype for ctype, gltype in types.iteritems() if ctype in dxgi_format)
- component_cases += format_case(dxgi_format, gltype)
- else:
- component_cases += undefined_case(dxgi_format)
-
- if angle_format == "":
- angle_format = dxgi_format
-
- if angle_format in all_angle:
- angle_format = "Format::Get(Format::ID::" + angle_format + ")"
- format_cases += format_case(dxgi_format, angle_format)
- else:
- format_cases += undefined_case(dxgi_format)
-
-with open('dxgi_format_map_autogen.cpp', 'wt') as out_file:
- output_cpp = template_cpp.format(
- script_name = sys.argv[0],
- data_source_name = input_data,
- copyright_year = date.today().year,
- component_type_cases = component_cases,
- format_cases = format_cases)
- out_file.write(output_cpp)
- out_file.close()
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/gen_dxgi_support_tables.py b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/gen_dxgi_support_tables.py
index dba583f1e..21b22803b 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/gen_dxgi_support_tables.py
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/gen_dxgi_support_tables.py
@@ -46,38 +46,25 @@ namespace d3d11
#define {prefix}RT D3D11_FORMAT_SUPPORT_RENDER_TARGET
#define {prefix}MS D3D11_FORMAT_SUPPORT_MULTISAMPLE_RENDERTARGET
#define {prefix}DS D3D11_FORMAT_SUPPORT_DEPTH_STENCIL
-#define {prefix}MIPGEN D3D11_FORMAT_SUPPORT_MIP_AUTOGEN
namespace
{{
const DXGISupport &GetDefaultSupport()
{{
- static UINT AllSupportFlags =
- D3D11_FORMAT_SUPPORT_TEXTURE2D | D3D11_FORMAT_SUPPORT_TEXTURE3D |
- D3D11_FORMAT_SUPPORT_TEXTURECUBE | D3D11_FORMAT_SUPPORT_SHADER_SAMPLE |
- D3D11_FORMAT_SUPPORT_RENDER_TARGET | D3D11_FORMAT_SUPPORT_MULTISAMPLE_RENDERTARGET |
- D3D11_FORMAT_SUPPORT_DEPTH_STENCIL | D3D11_FORMAT_SUPPORT_MIP_AUTOGEN;
+ static UINT AllSupportFlags = D3D11_FORMAT_SUPPORT_TEXTURE2D |
+ D3D11_FORMAT_SUPPORT_TEXTURE3D |
+ D3D11_FORMAT_SUPPORT_TEXTURECUBE |
+ D3D11_FORMAT_SUPPORT_SHADER_SAMPLE |
+ D3D11_FORMAT_SUPPORT_RENDER_TARGET |
+ D3D11_FORMAT_SUPPORT_MULTISAMPLE_RENDERTARGET |
+ D3D11_FORMAT_SUPPORT_DEPTH_STENCIL;
static const DXGISupport defaultSupport(0, 0, AllSupportFlags);
return defaultSupport;
}}
-const DXGISupport &GetDXGISupport_9_3(DXGI_FORMAT dxgiFormat)
-{{
- // clang-format off
- switch (dxgiFormat)
- {{
-{table_data_9_3}
- default:
- UNREACHABLE();
- return GetDefaultSupport();
- }}
- // clang-format on
-}}
-
const DXGISupport &GetDXGISupport_10_0(DXGI_FORMAT dxgiFormat)
{{
- // clang-format off
switch (dxgiFormat)
{{
{table_data_10_0}
@@ -85,12 +72,10 @@ const DXGISupport &GetDXGISupport_10_0(DXGI_FORMAT dxgiFormat)
UNREACHABLE();
return GetDefaultSupport();
}}
- // clang-format on
}}
const DXGISupport &GetDXGISupport_10_1(DXGI_FORMAT dxgiFormat)
{{
- // clang-format off
switch (dxgiFormat)
{{
{table_data_10_1}
@@ -98,12 +83,10 @@ const DXGISupport &GetDXGISupport_10_1(DXGI_FORMAT dxgiFormat)
UNREACHABLE();
return GetDefaultSupport();
}}
- // clang-format on
}}
const DXGISupport &GetDXGISupport_11_0(DXGI_FORMAT dxgiFormat)
{{
- // clang-format off
switch (dxgiFormat)
{{
{table_data_11_0}
@@ -111,7 +94,6 @@ const DXGISupport &GetDXGISupport_11_0(DXGI_FORMAT dxgiFormat)
UNREACHABLE();
return GetDefaultSupport();
}}
- // clang-format on
}}
}}
@@ -123,14 +105,11 @@ const DXGISupport &GetDXGISupport_11_0(DXGI_FORMAT dxgiFormat)
#undef {prefix}RT
#undef {prefix}MS
#undef {prefix}DS
-#undef {prefix}MIPGEN
const DXGISupport &GetDXGISupport(DXGI_FORMAT dxgiFormat, D3D_FEATURE_LEVEL featureLevel)
{{
switch (featureLevel)
{{
- case D3D_FEATURE_LEVEL_9_3:
- return GetDXGISupport_9_3(dxgiFormat);
case D3D_FEATURE_LEVEL_10_0:
return GetDXGISupport_10_0(dxgiFormat);
case D3D_FEATURE_LEVEL_10_1:
@@ -150,7 +129,7 @@ const DXGISupport &GetDXGISupport(DXGI_FORMAT dxgiFormat, D3D_FEATURE_LEVEL feat
table_init = ""
def do_format(format_data):
- table_data = {'9_3': '', '10_0': '', '10_1': '', '11_0': ''}
+ table_data = {'10_0': '', '10_1': '', '11_0': ''}
json_flag_to_d3d = {
'texture2D': macro_prefix + '2D',
@@ -159,8 +138,7 @@ def do_format(format_data):
'shaderSample': macro_prefix + 'SAMPLE',
'renderTarget': macro_prefix + 'RT',
'multisampleRT': macro_prefix + 'MS',
- 'depthStencil': macro_prefix + 'DS',
- 'mipAutoGen': macro_prefix + 'MIPGEN'
+ 'depthStencil': macro_prefix + 'DS'
}
for format_name, format_support in sorted(format_data.iteritems()):
@@ -168,9 +146,6 @@ def do_format(format_data):
always_supported = set()
never_supported = set()
optionally_supported = set()
- fl_9_3_supported = set()
- fl_9_3_check = set()
- fl_10_0_supported = set()
fl_10_1_supported = set()
fl_11_0_supported = set()
fl_11_0_check = set()
@@ -188,7 +163,8 @@ def do_format(format_data):
elif support == 'never':
never_supported.update(d3d_flag)
elif support == '10_0':
- fl_10_0_supported.update(d3d_flag)
+ # TODO(jmadill): FL 9_3 handling
+ always_supported.update(d3d_flag)
elif support == '10_1':
fl_10_1_supported.update(d3d_flag)
elif support == '11_0':
@@ -205,33 +181,21 @@ def do_format(format_data):
fl_10_0_check_11_0_supported.update(d3d_flag)
elif support == '11_0check':
fl_11_0_check.update(d3d_flag)
- elif support == '9_3always_10_0check11_0always':
- fl_9_3_supported.update(d3d_flag)
- fl_10_0_check_11_0_supported.update(d3d_flag)
- elif support == '9_3check_10_0always':
- fl_9_3_check.update(d3d_flag)
- fl_10_0_supported.update(d3d_flag)
else:
print("Data specification error: " + support)
sys.exit(1)
- for feature_level in ['9_3', '10_0', '10_1', '11_0']:
+ for feature_level in ['10_0', '10_1', '11_0']:
always_for_fl = always_supported
optional_for_fl = optionally_supported
- if feature_level == '9_3':
- always_for_fl = fl_9_3_supported.union(always_for_fl)
- optional_for_fl = fl_9_3_check.union(optional_for_fl)
- elif feature_level == '10_0':
- always_for_fl = fl_10_0_supported.union(always_for_fl)
+ if feature_level == '10_0':
optional_for_fl = fl_10_0_check_10_1_supported.union(optional_for_fl)
optional_for_fl = fl_10_0_check_11_0_supported.union(optional_for_fl)
- elif feature_level == '10_1':
- always_for_fl = fl_10_0_supported.union(always_for_fl)
+ if feature_level == '10_1':
always_for_fl = fl_10_1_supported.union(always_for_fl)
always_for_fl = fl_10_0_check_10_1_supported.union(always_for_fl)
optional_for_fl = fl_10_0_check_11_0_supported.union(optional_for_fl)
elif feature_level == '11_0':
- always_for_fl = fl_10_0_supported.union(always_for_fl)
always_for_fl = fl_10_0_check_10_1_supported.union(always_for_fl)
always_for_fl = fl_10_0_check_11_0_supported.union(always_for_fl)
always_for_fl = fl_10_1_supported.union(always_for_fl)
@@ -254,8 +218,7 @@ def do_format(format_data):
return table_data
def join_table_data(table_data_1, table_data_2):
- return {'9_3': table_data_1['9_3'] + table_data_2['9_3'],
- '10_0': table_data_1['10_0'] + table_data_2['10_0'],
+ return {'10_0': table_data_1['10_0'] + table_data_2['10_0'],
'10_1': table_data_1['10_1'] + table_data_2['10_1'],
'11_0': table_data_1['11_0'] + table_data_2['11_0']}
@@ -264,13 +227,12 @@ with open('dxgi_support_data.json') as dxgi_file:
dxgi_file.close()
json_data = json.loads(file_data)
- table_data = {'9_3': '', '10_0': '', '10_1': '', '11_0': ''}
+ table_data = {'10_0': '', '10_1': '', '11_0': ''}
for format_data in json_data:
table_data = join_table_data(table_data, do_format(format_data))
out_data = template.format(prefix=macro_prefix,
- table_data_9_3=table_data['9_3'],
table_data_10_0=table_data['10_0'],
table_data_10_1=table_data['10_1'],
table_data_11_0=table_data['11_0'])
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/gen_texture_format_table.py b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/gen_texture_format_table.py
index 3c4b228e4..981a77f51 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/gen_texture_format_table.py
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/gen_texture_format_table.py
@@ -19,7 +19,7 @@ sys.path.append('../..')
import angle_format
template_texture_format_table_autogen_cpp = """// GENERATED FILE - DO NOT EDIT.
-// Generated by {script_name} using data from {data_source_name}
+// Generated by gen_texture_format_table.py using data from texture_format_data.json
//
// Copyright {copyright_year} The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
@@ -60,7 +60,7 @@ const Format &Format::Get(GLenum internalFormat, const Renderer11DeviceCaps &dev
// clang-format on
UNREACHABLE();
- static constexpr Format defaultInfo;
+ static const Format defaultInfo;
return defaultInfo;
}}
@@ -216,7 +216,23 @@ def get_blit_srv_format(angle_format):
format_entry_template = """{space}{{
-{space} static constexpr Format info({internalFormat},
+{space} static const Format info({internalFormat},
+{space} angle::Format::ID::{formatName},
+{space} {texFormat},
+{space} {srvFormat},
+{space} {rtvFormat},
+{space} {dsvFormat},
+{space} {blitSRVFormat},
+{space} {swizzleFormat},
+{space} {initializer},
+{space} deviceCaps);
+{space} return info;
+{space}}}
+"""
+
+split_format_entry_template = """{space} {condition}
+{space} {{
+{space} static const Format info({internalFormat},
{space} angle::Format::ID::{formatName},
{space} {texFormat},
{space} {srvFormat},
@@ -224,22 +240,8 @@ format_entry_template = """{space}{{
{space} {dsvFormat},
{space} {blitSRVFormat},
{space} {swizzleFormat},
-{space} {initializer});
-{space} return info;
-{space}}}
-"""
-
-split_format_entry_template = """{space} {condition}
-{space} {{
-{space} static constexpr Format info({internalFormat},
-{space} angle::Format::ID::{formatName},
-{space} {texFormat},
-{space} {srvFormat},
-{space} {rtvFormat},
-{space} {dsvFormat},
-{space} {blitSRVFormat},
-{space} {swizzleFormat},
-{space} {initializer});
+{space} {initializer},
+{space} deviceCaps);
{space} return info;
{space} }}
"""
@@ -342,19 +344,16 @@ def reject_duplicate_keys(pairs):
return found_keys
json_map = angle_format.load_with_override(os.path.abspath('texture_format_map.json'))
-data_source_name = 'texture_format_data.json'
-with open(data_source_name) as texture_format_json_file:
+with open('texture_format_data.json') as texture_format_json_file:
texture_format_data = texture_format_json_file.read()
texture_format_json_file.close()
json_data = json.loads(texture_format_data, object_pairs_hook=angle_format.reject_duplicate_keys)
angle_format_cases = parse_json_into_switch_angle_format_string(json_map, json_data)
output_cpp = template_texture_format_table_autogen_cpp.format(
- script_name = sys.argv[0],
- copyright_year = date.today().year,
- angle_format_info_cases = angle_format_cases,
- data_source_name = data_source_name)
+ copyright_year=date.today().year,
+ angle_format_info_cases=angle_format_cases)
with open('texture_format_table_autogen.cpp', 'wt') as out_file:
out_file.write(output_cpp)
out_file.close()
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.cpp b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.cpp
index 5bb51feca..f7548c4ee 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.cpp
@@ -22,13 +22,219 @@
#include "libANGLE/renderer/d3d/d3d11/texture_format_table.h"
#include "libANGLE/renderer/d3d/FramebufferD3D.h"
#include "libANGLE/renderer/d3d/WorkaroundsD3D.h"
-#include "libANGLE/renderer/driver_utils.h"
namespace rx
{
+namespace gl_d3d11
+{
+
+D3D11_BLEND ConvertBlendFunc(GLenum glBlend, bool isAlpha)
+{
+ D3D11_BLEND d3dBlend = D3D11_BLEND_ZERO;
+
+ switch (glBlend)
+ {
+ case GL_ZERO: d3dBlend = D3D11_BLEND_ZERO; break;
+ case GL_ONE: d3dBlend = D3D11_BLEND_ONE; break;
+ case GL_SRC_COLOR: d3dBlend = (isAlpha ? D3D11_BLEND_SRC_ALPHA : D3D11_BLEND_SRC_COLOR); break;
+ case GL_ONE_MINUS_SRC_COLOR: d3dBlend = (isAlpha ? D3D11_BLEND_INV_SRC_ALPHA : D3D11_BLEND_INV_SRC_COLOR); break;
+ case GL_DST_COLOR: d3dBlend = (isAlpha ? D3D11_BLEND_DEST_ALPHA : D3D11_BLEND_DEST_COLOR); break;
+ case GL_ONE_MINUS_DST_COLOR: d3dBlend = (isAlpha ? D3D11_BLEND_INV_DEST_ALPHA : D3D11_BLEND_INV_DEST_COLOR); break;
+ case GL_SRC_ALPHA: d3dBlend = D3D11_BLEND_SRC_ALPHA; break;
+ case GL_ONE_MINUS_SRC_ALPHA: d3dBlend = D3D11_BLEND_INV_SRC_ALPHA; break;
+ case GL_DST_ALPHA: d3dBlend = D3D11_BLEND_DEST_ALPHA; break;
+ case GL_ONE_MINUS_DST_ALPHA: d3dBlend = D3D11_BLEND_INV_DEST_ALPHA; break;
+ case GL_CONSTANT_COLOR: d3dBlend = D3D11_BLEND_BLEND_FACTOR; break;
+ case GL_ONE_MINUS_CONSTANT_COLOR: d3dBlend = D3D11_BLEND_INV_BLEND_FACTOR; break;
+ case GL_CONSTANT_ALPHA: d3dBlend = D3D11_BLEND_BLEND_FACTOR; break;
+ case GL_ONE_MINUS_CONSTANT_ALPHA: d3dBlend = D3D11_BLEND_INV_BLEND_FACTOR; break;
+ case GL_SRC_ALPHA_SATURATE: d3dBlend = D3D11_BLEND_SRC_ALPHA_SAT; break;
+ default: UNREACHABLE();
+ }
+
+ return d3dBlend;
+}
+
+D3D11_BLEND_OP ConvertBlendOp(GLenum glBlendOp)
+{
+ D3D11_BLEND_OP d3dBlendOp = D3D11_BLEND_OP_ADD;
+
+ switch (glBlendOp)
+ {
+ case GL_FUNC_ADD: d3dBlendOp = D3D11_BLEND_OP_ADD; break;
+ case GL_FUNC_SUBTRACT: d3dBlendOp = D3D11_BLEND_OP_SUBTRACT; break;
+ case GL_FUNC_REVERSE_SUBTRACT: d3dBlendOp = D3D11_BLEND_OP_REV_SUBTRACT; break;
+ case GL_MIN: d3dBlendOp = D3D11_BLEND_OP_MIN; break;
+ case GL_MAX: d3dBlendOp = D3D11_BLEND_OP_MAX; break;
+ default: UNREACHABLE();
+ }
+
+ return d3dBlendOp;
+}
+
+UINT8 ConvertColorMask(bool red, bool green, bool blue, bool alpha)
+{
+ UINT8 mask = 0;
+ if (red)
+ {
+ mask |= D3D11_COLOR_WRITE_ENABLE_RED;
+ }
+ if (green)
+ {
+ mask |= D3D11_COLOR_WRITE_ENABLE_GREEN;
+ }
+ if (blue)
+ {
+ mask |= D3D11_COLOR_WRITE_ENABLE_BLUE;
+ }
+ if (alpha)
+ {
+ mask |= D3D11_COLOR_WRITE_ENABLE_ALPHA;
+ }
+ return mask;
+}
+
+D3D11_CULL_MODE ConvertCullMode(bool cullEnabled, GLenum cullMode)
+{
+ D3D11_CULL_MODE cull = D3D11_CULL_NONE;
+
+ if (cullEnabled)
+ {
+ switch (cullMode)
+ {
+ case GL_FRONT: cull = D3D11_CULL_FRONT; break;
+ case GL_BACK: cull = D3D11_CULL_BACK; break;
+ case GL_FRONT_AND_BACK: cull = D3D11_CULL_NONE; break;
+ default: UNREACHABLE();
+ }
+ }
+ else
+ {
+ cull = D3D11_CULL_NONE;
+ }
+
+ return cull;
+}
+
+D3D11_COMPARISON_FUNC ConvertComparison(GLenum comparison)
+{
+ D3D11_COMPARISON_FUNC d3dComp = D3D11_COMPARISON_NEVER;
+ switch (comparison)
+ {
+ case GL_NEVER: d3dComp = D3D11_COMPARISON_NEVER; break;
+ case GL_ALWAYS: d3dComp = D3D11_COMPARISON_ALWAYS; break;
+ case GL_LESS: d3dComp = D3D11_COMPARISON_LESS; break;
+ case GL_LEQUAL: d3dComp = D3D11_COMPARISON_LESS_EQUAL; break;
+ case GL_EQUAL: d3dComp = D3D11_COMPARISON_EQUAL; break;
+ case GL_GREATER: d3dComp = D3D11_COMPARISON_GREATER; break;
+ case GL_GEQUAL: d3dComp = D3D11_COMPARISON_GREATER_EQUAL; break;
+ case GL_NOTEQUAL: d3dComp = D3D11_COMPARISON_NOT_EQUAL; break;
+ default: UNREACHABLE();
+ }
+
+ return d3dComp;
+}
+
+D3D11_DEPTH_WRITE_MASK ConvertDepthMask(bool depthWriteEnabled)
+{
+ return depthWriteEnabled ? D3D11_DEPTH_WRITE_MASK_ALL : D3D11_DEPTH_WRITE_MASK_ZERO;
+}
+
+UINT8 ConvertStencilMask(GLuint stencilmask)
+{
+ return static_cast<UINT8>(stencilmask);
+}
+
+D3D11_STENCIL_OP ConvertStencilOp(GLenum stencilOp)
+{
+ D3D11_STENCIL_OP d3dStencilOp = D3D11_STENCIL_OP_KEEP;
+
+ switch (stencilOp)
+ {
+ case GL_ZERO: d3dStencilOp = D3D11_STENCIL_OP_ZERO; break;
+ case GL_KEEP: d3dStencilOp = D3D11_STENCIL_OP_KEEP; break;
+ case GL_REPLACE: d3dStencilOp = D3D11_STENCIL_OP_REPLACE; break;
+ case GL_INCR: d3dStencilOp = D3D11_STENCIL_OP_INCR_SAT; break;
+ case GL_DECR: d3dStencilOp = D3D11_STENCIL_OP_DECR_SAT; break;
+ case GL_INVERT: d3dStencilOp = D3D11_STENCIL_OP_INVERT; break;
+ case GL_INCR_WRAP: d3dStencilOp = D3D11_STENCIL_OP_INCR; break;
+ case GL_DECR_WRAP: d3dStencilOp = D3D11_STENCIL_OP_DECR; break;
+ default: UNREACHABLE();
+ }
+
+ return d3dStencilOp;
+}
+
+D3D11_FILTER ConvertFilter(GLenum minFilter, GLenum magFilter, float maxAnisotropy, GLenum comparisonMode)
+{
+ bool comparison = comparisonMode != GL_NONE;
+
+ if (maxAnisotropy > 1.0f)
+ {
+ return D3D11_ENCODE_ANISOTROPIC_FILTER(static_cast<D3D11_COMPARISON_FUNC>(comparison));
+ }
+ else
+ {
+ D3D11_FILTER_TYPE dxMin = D3D11_FILTER_TYPE_POINT;
+ D3D11_FILTER_TYPE dxMip = D3D11_FILTER_TYPE_POINT;
+ switch (minFilter)
+ {
+ case GL_NEAREST: dxMin = D3D11_FILTER_TYPE_POINT; dxMip = D3D11_FILTER_TYPE_POINT; break;
+ case GL_LINEAR: dxMin = D3D11_FILTER_TYPE_LINEAR; dxMip = D3D11_FILTER_TYPE_POINT; break;
+ case GL_NEAREST_MIPMAP_NEAREST: dxMin = D3D11_FILTER_TYPE_POINT; dxMip = D3D11_FILTER_TYPE_POINT; break;
+ case GL_LINEAR_MIPMAP_NEAREST: dxMin = D3D11_FILTER_TYPE_LINEAR; dxMip = D3D11_FILTER_TYPE_POINT; break;
+ case GL_NEAREST_MIPMAP_LINEAR: dxMin = D3D11_FILTER_TYPE_POINT; dxMip = D3D11_FILTER_TYPE_LINEAR; break;
+ case GL_LINEAR_MIPMAP_LINEAR: dxMin = D3D11_FILTER_TYPE_LINEAR; dxMip = D3D11_FILTER_TYPE_LINEAR; break;
+ default: UNREACHABLE();
+ }
+
+ D3D11_FILTER_TYPE dxMag = D3D11_FILTER_TYPE_POINT;
+ switch (magFilter)
+ {
+ case GL_NEAREST: dxMag = D3D11_FILTER_TYPE_POINT; break;
+ case GL_LINEAR: dxMag = D3D11_FILTER_TYPE_LINEAR; break;
+ default: UNREACHABLE();
+ }
+
+ return D3D11_ENCODE_BASIC_FILTER(dxMin, dxMag, dxMip, static_cast<D3D11_COMPARISON_FUNC>(comparison));
+ }
+}
+
+D3D11_TEXTURE_ADDRESS_MODE ConvertTextureWrap(GLenum wrap)
+{
+ switch (wrap)
+ {
+ case GL_REPEAT: return D3D11_TEXTURE_ADDRESS_WRAP;
+ case GL_CLAMP_TO_EDGE: return D3D11_TEXTURE_ADDRESS_CLAMP;
+ case GL_MIRRORED_REPEAT: return D3D11_TEXTURE_ADDRESS_MIRROR;
+ default: UNREACHABLE();
+ }
+
+ return D3D11_TEXTURE_ADDRESS_WRAP;
+}
+
+D3D11_QUERY ConvertQueryType(GLenum queryType)
+{
+ switch (queryType)
+ {
+ case GL_ANY_SAMPLES_PASSED_EXT:
+ case GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT: return D3D11_QUERY_OCCLUSION;
+ case GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN: return D3D11_QUERY_SO_STATISTICS;
+ case GL_TIME_ELAPSED_EXT:
+ // Two internal queries are also created for begin/end timestamps
+ return D3D11_QUERY_TIMESTAMP_DISJOINT;
+ case GL_COMMANDS_COMPLETED_CHROMIUM:
+ return D3D11_QUERY_EVENT;
+ default: UNREACHABLE(); return D3D11_QUERY_EVENT;
+ }
+}
+
+} // namespace gl_d3d11
+
namespace d3d11_gl
{
+
namespace
{
@@ -37,7 +243,8 @@ class DXGISupportHelper : angle::NonCopyable
{
public:
DXGISupportHelper(ID3D11Device *device, D3D_FEATURE_LEVEL featureLevel)
- : mDevice(device), mFeatureLevel(featureLevel)
+ : mDevice(device),
+ mFeatureLevel(featureLevel)
{
}
@@ -72,10 +279,72 @@ class DXGISupportHelper : angle::NonCopyable
D3D_FEATURE_LEVEL mFeatureLevel;
};
-gl::TextureCaps GenerateTextureFormatCaps(GLint maxClientVersion,
- GLenum internalFormat,
- ID3D11Device *device,
- const Renderer11DeviceCaps &renderer11DeviceCaps)
+} // anonymous namespace
+
+unsigned int GetReservedVertexUniformVectors(D3D_FEATURE_LEVEL featureLevel)
+{
+ switch (featureLevel)
+ {
+ case D3D_FEATURE_LEVEL_11_1:
+ case D3D_FEATURE_LEVEL_11_0:
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0:
+ return 0;
+
+ case D3D_FEATURE_LEVEL_9_3:
+ case D3D_FEATURE_LEVEL_9_2:
+ case D3D_FEATURE_LEVEL_9_1:
+ return 3; // dx_ViewAdjust, dx_ViewCoords and dx_ViewScale
+
+ default:
+ UNREACHABLE();
+ return 0;
+ }
+}
+
+unsigned int GetReservedFragmentUniformVectors(D3D_FEATURE_LEVEL featureLevel)
+{
+ switch (featureLevel)
+ {
+ case D3D_FEATURE_LEVEL_11_1:
+ case D3D_FEATURE_LEVEL_11_0:
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0:
+ return 0;
+
+ case D3D_FEATURE_LEVEL_9_3:
+ case D3D_FEATURE_LEVEL_9_2:
+ case D3D_FEATURE_LEVEL_9_1:
+ return 3;
+
+ default:
+ UNREACHABLE();
+ return 0;
+ }
+}
+
+GLint GetMaximumClientVersion(D3D_FEATURE_LEVEL featureLevel)
+{
+ switch (featureLevel)
+ {
+ case D3D_FEATURE_LEVEL_11_1:
+ case D3D_FEATURE_LEVEL_11_0:
+ case D3D_FEATURE_LEVEL_10_1:
+ return 3;
+
+ case D3D_FEATURE_LEVEL_10_0:
+ case D3D_FEATURE_LEVEL_9_3:
+ case D3D_FEATURE_LEVEL_9_2:
+ case D3D_FEATURE_LEVEL_9_1:
+ return 2;
+
+ default:
+ UNREACHABLE();
+ return 0;
+ }
+}
+
+static gl::TextureCaps GenerateTextureFormatCaps(GLint maxClientVersion, GLenum internalFormat, ID3D11Device *device, const Renderer11DeviceCaps &renderer11DeviceCaps)
{
gl::TextureCaps textureCaps;
@@ -136,911 +405,661 @@ gl::TextureCaps GenerateTextureFormatCaps(GLint maxClientVersion,
return textureCaps;
}
-bool GetNPOTTextureSupport(D3D_FEATURE_LEVEL featureLevel)
+static bool GetNPOTTextureSupport(D3D_FEATURE_LEVEL featureLevel)
{
switch (featureLevel)
{
- case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0:
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0:
- return true;
+ case D3D_FEATURE_LEVEL_11_1:
+ case D3D_FEATURE_LEVEL_11_0:
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0: return true;
// From http://msdn.microsoft.com/en-us/library/windows/desktop/ff476876.aspx
- case D3D_FEATURE_LEVEL_9_3:
- case D3D_FEATURE_LEVEL_9_2:
- case D3D_FEATURE_LEVEL_9_1:
- return false;
+ case D3D_FEATURE_LEVEL_9_3:
+ case D3D_FEATURE_LEVEL_9_2:
+ case D3D_FEATURE_LEVEL_9_1: return false;
- default:
- UNREACHABLE();
- return false;
+ default: UNREACHABLE(); return false;
}
}
-float GetMaximumAnisotropy(D3D_FEATURE_LEVEL featureLevel)
+static float GetMaximumAnisotropy(D3D_FEATURE_LEVEL featureLevel)
{
switch (featureLevel)
{
- case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0:
- return D3D11_MAX_MAXANISOTROPY;
+ case D3D_FEATURE_LEVEL_11_1:
+ case D3D_FEATURE_LEVEL_11_0: return D3D11_MAX_MAXANISOTROPY;
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0:
- return D3D10_MAX_MAXANISOTROPY;
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0: return D3D10_MAX_MAXANISOTROPY;
// From http://msdn.microsoft.com/en-us/library/windows/desktop/ff476876.aspx
- case D3D_FEATURE_LEVEL_9_3:
- case D3D_FEATURE_LEVEL_9_2:
- return 16;
+ case D3D_FEATURE_LEVEL_9_3:
+ case D3D_FEATURE_LEVEL_9_2: return 16;
- case D3D_FEATURE_LEVEL_9_1:
- return D3D_FL9_1_DEFAULT_MAX_ANISOTROPY;
+ case D3D_FEATURE_LEVEL_9_1: return D3D_FL9_1_DEFAULT_MAX_ANISOTROPY;
- default:
- UNREACHABLE();
- return 0;
+ default: UNREACHABLE(); return 0;
}
}
-bool GetOcclusionQuerySupport(D3D_FEATURE_LEVEL featureLevel)
+static bool GetOcclusionQuerySupport(D3D_FEATURE_LEVEL featureLevel)
{
switch (featureLevel)
{
- case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0:
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0:
- return true;
+ case D3D_FEATURE_LEVEL_11_1:
+ case D3D_FEATURE_LEVEL_11_0:
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0: return true;
- // From http://msdn.microsoft.com/en-us/library/windows/desktop/ff476150.aspx
- // ID3D11Device::CreateQuery
- case D3D_FEATURE_LEVEL_9_3:
- case D3D_FEATURE_LEVEL_9_2:
- return true;
- case D3D_FEATURE_LEVEL_9_1:
- return false;
+ // From http://msdn.microsoft.com/en-us/library/windows/desktop/ff476150.aspx ID3D11Device::CreateQuery
+ case D3D_FEATURE_LEVEL_9_3:
+ case D3D_FEATURE_LEVEL_9_2: return true;
+ case D3D_FEATURE_LEVEL_9_1: return false;
- default:
- UNREACHABLE();
- return false;
+ default: UNREACHABLE(); return false;
}
}
-bool GetEventQuerySupport(D3D_FEATURE_LEVEL featureLevel)
+static bool GetEventQuerySupport(D3D_FEATURE_LEVEL featureLevel)
{
- // From http://msdn.microsoft.com/en-us/library/windows/desktop/ff476150.aspx
- // ID3D11Device::CreateQuery
+ // From http://msdn.microsoft.com/en-us/library/windows/desktop/ff476150.aspx ID3D11Device::CreateQuery
switch (featureLevel)
{
- case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0:
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0:
- case D3D_FEATURE_LEVEL_9_3:
- case D3D_FEATURE_LEVEL_9_2:
- case D3D_FEATURE_LEVEL_9_1:
- return true;
+ case D3D_FEATURE_LEVEL_11_1:
+ case D3D_FEATURE_LEVEL_11_0:
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0:
+ case D3D_FEATURE_LEVEL_9_3:
+ case D3D_FEATURE_LEVEL_9_2:
+ case D3D_FEATURE_LEVEL_9_1: return true;
- default:
- UNREACHABLE();
- return false;
+ default: UNREACHABLE(); return false;
}
}
-bool GetInstancingSupport(D3D_FEATURE_LEVEL featureLevel)
+static bool GetInstancingSupport(D3D_FEATURE_LEVEL featureLevel)
{
- // From http://msdn.microsoft.com/en-us/library/windows/desktop/ff476150.aspx
- // ID3D11Device::CreateInputLayout
+ // From http://msdn.microsoft.com/en-us/library/windows/desktop/ff476150.aspx ID3D11Device::CreateInputLayout
switch (featureLevel)
{
- case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0:
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0:
- return true;
-
- // Feature Level 9_3 supports instancing, but slot 0 in the input layout must not be
- // instanced.
- // D3D9 has a similar restriction, where stream 0 must not be instanced.
- // This restriction can be worked around by remapping any non-instanced slot to slot
- // 0.
- // This works because HLSL uses shader semantics to match the vertex inputs to the
- // elements in the input layout, rather than the slots.
- // Note that we only support instancing via ANGLE_instanced_array on 9_3, since 9_3
- // doesn't support OpenGL ES 3.0
- case D3D_FEATURE_LEVEL_9_3:
- return true;
+ case D3D_FEATURE_LEVEL_11_1:
+ case D3D_FEATURE_LEVEL_11_0:
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0: return true;
- case D3D_FEATURE_LEVEL_9_2:
- case D3D_FEATURE_LEVEL_9_1:
- return false;
+ // Feature Level 9_3 supports instancing, but slot 0 in the input layout must not be instanced.
+ // D3D9 has a similar restriction, where stream 0 must not be instanced.
+ // This restriction can be worked around by remapping any non-instanced slot to slot 0.
+ // This works because HLSL uses shader semantics to match the vertex inputs to the elements in the input layout, rather than the slots.
+ // Note that we only support instancing via ANGLE_instanced_array on 9_3, since 9_3 doesn't support OpenGL ES 3.0
+ case D3D_FEATURE_LEVEL_9_3: return true;
- default:
- UNREACHABLE();
- return false;
+ case D3D_FEATURE_LEVEL_9_2:
+ case D3D_FEATURE_LEVEL_9_1: return false;
+
+ default: UNREACHABLE(); return false;
}
}
-bool GetFramebufferMultisampleSupport(D3D_FEATURE_LEVEL featureLevel)
+static bool GetFramebufferMultisampleSupport(D3D_FEATURE_LEVEL featureLevel)
{
switch (featureLevel)
{
- case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0:
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0:
- return true;
+ case D3D_FEATURE_LEVEL_11_1:
+ case D3D_FEATURE_LEVEL_11_0:
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0: return true;
- case D3D_FEATURE_LEVEL_9_3:
- case D3D_FEATURE_LEVEL_9_2:
- case D3D_FEATURE_LEVEL_9_1:
- return false;
+ case D3D_FEATURE_LEVEL_9_3:
+ case D3D_FEATURE_LEVEL_9_2:
+ case D3D_FEATURE_LEVEL_9_1: return false;
- default:
- UNREACHABLE();
- return false;
+ default: UNREACHABLE(); return false;
}
}
-bool GetFramebufferBlitSupport(D3D_FEATURE_LEVEL featureLevel)
+static bool GetFramebufferBlitSupport(D3D_FEATURE_LEVEL featureLevel)
{
switch (featureLevel)
{
- case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0:
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0:
- return true;
+ case D3D_FEATURE_LEVEL_11_1:
+ case D3D_FEATURE_LEVEL_11_0:
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0: return true;
- case D3D_FEATURE_LEVEL_9_3:
- case D3D_FEATURE_LEVEL_9_2:
- case D3D_FEATURE_LEVEL_9_1:
- return false;
+ case D3D_FEATURE_LEVEL_9_3:
+ case D3D_FEATURE_LEVEL_9_2:
+ case D3D_FEATURE_LEVEL_9_1: return false;
- default:
- UNREACHABLE();
- return false;
+ default: UNREACHABLE(); return false;
}
}
-bool GetDerivativeInstructionSupport(D3D_FEATURE_LEVEL featureLevel)
+static bool GetDerivativeInstructionSupport(D3D_FEATURE_LEVEL featureLevel)
{
- // http://msdn.microsoft.com/en-us/library/windows/desktop/bb509588.aspx states that
- // shader model
+ // http://msdn.microsoft.com/en-us/library/windows/desktop/bb509588.aspx states that shader model
// ps_2_x is required for the ddx (and other derivative functions).
- // http://msdn.microsoft.com/en-us/library/windows/desktop/ff476876.aspx states that
- // feature level
+ // http://msdn.microsoft.com/en-us/library/windows/desktop/ff476876.aspx states that feature level
// 9.3 supports shader model ps_2_x.
switch (featureLevel)
{
- case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0:
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0:
- case D3D_FEATURE_LEVEL_9_3:
- return true;
- case D3D_FEATURE_LEVEL_9_2:
- case D3D_FEATURE_LEVEL_9_1:
- return false;
+ case D3D_FEATURE_LEVEL_11_1:
+ case D3D_FEATURE_LEVEL_11_0:
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0:
+ case D3D_FEATURE_LEVEL_9_3: return true;
+ case D3D_FEATURE_LEVEL_9_2:
+ case D3D_FEATURE_LEVEL_9_1: return false;
- default:
- UNREACHABLE();
- return false;
+ default: UNREACHABLE(); return false;
}
}
-bool GetShaderTextureLODSupport(D3D_FEATURE_LEVEL featureLevel)
+static bool GetShaderTextureLODSupport(D3D_FEATURE_LEVEL featureLevel)
{
switch (featureLevel)
{
- case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0:
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0:
- return true;
+ case D3D_FEATURE_LEVEL_11_1:
+ case D3D_FEATURE_LEVEL_11_0:
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0: return true;
- case D3D_FEATURE_LEVEL_9_3:
- case D3D_FEATURE_LEVEL_9_2:
- case D3D_FEATURE_LEVEL_9_1:
- return false;
+ case D3D_FEATURE_LEVEL_9_3:
+ case D3D_FEATURE_LEVEL_9_2:
+ case D3D_FEATURE_LEVEL_9_1: return false;
- default:
- UNREACHABLE();
- return false;
+ default: UNREACHABLE(); return false;
}
}
-size_t GetMaximumSimultaneousRenderTargets(D3D_FEATURE_LEVEL featureLevel)
+static size_t GetMaximumSimultaneousRenderTargets(D3D_FEATURE_LEVEL featureLevel)
{
- // From http://msdn.microsoft.com/en-us/library/windows/desktop/ff476150.aspx
- // ID3D11Device::CreateInputLayout
+ // From http://msdn.microsoft.com/en-us/library/windows/desktop/ff476150.aspx ID3D11Device::CreateInputLayout
switch (featureLevel)
{
- case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0:
- return D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT;
+ case D3D_FEATURE_LEVEL_11_1:
+ case D3D_FEATURE_LEVEL_11_0: return D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT;
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0:
- return D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT;
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0: return D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT;
- case D3D_FEATURE_LEVEL_9_3:
- return D3D_FL9_3_SIMULTANEOUS_RENDER_TARGET_COUNT;
- case D3D_FEATURE_LEVEL_9_2:
- case D3D_FEATURE_LEVEL_9_1:
- return D3D_FL9_1_SIMULTANEOUS_RENDER_TARGET_COUNT;
+ case D3D_FEATURE_LEVEL_9_3: return D3D_FL9_3_SIMULTANEOUS_RENDER_TARGET_COUNT;
+ case D3D_FEATURE_LEVEL_9_2:
+ case D3D_FEATURE_LEVEL_9_1: return D3D_FL9_1_SIMULTANEOUS_RENDER_TARGET_COUNT;
- default:
- UNREACHABLE();
- return 0;
+ default: UNREACHABLE(); return 0;
}
}
-size_t GetMaximum2DTextureSize(D3D_FEATURE_LEVEL featureLevel)
+static size_t GetMaximum2DTextureSize(D3D_FEATURE_LEVEL featureLevel)
{
switch (featureLevel)
{
- case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0:
- return D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION;
+ case D3D_FEATURE_LEVEL_11_1:
+ case D3D_FEATURE_LEVEL_11_0: return D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION;
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0:
- return D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION;
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0: return D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION;
- case D3D_FEATURE_LEVEL_9_3:
- return D3D_FL9_3_REQ_TEXTURE2D_U_OR_V_DIMENSION;
- case D3D_FEATURE_LEVEL_9_2:
- case D3D_FEATURE_LEVEL_9_1:
- return D3D_FL9_1_REQ_TEXTURE2D_U_OR_V_DIMENSION;
+ case D3D_FEATURE_LEVEL_9_3: return D3D_FL9_3_REQ_TEXTURE2D_U_OR_V_DIMENSION;
+ case D3D_FEATURE_LEVEL_9_2:
+ case D3D_FEATURE_LEVEL_9_1: return D3D_FL9_1_REQ_TEXTURE2D_U_OR_V_DIMENSION;
- default:
- UNREACHABLE();
- return 0;
+ default: UNREACHABLE(); return 0;
}
}
-size_t GetMaximumCubeMapTextureSize(D3D_FEATURE_LEVEL featureLevel)
+static size_t GetMaximumCubeMapTextureSize(D3D_FEATURE_LEVEL featureLevel)
{
switch (featureLevel)
{
- case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0:
- return D3D11_REQ_TEXTURECUBE_DIMENSION;
+ case D3D_FEATURE_LEVEL_11_1:
+ case D3D_FEATURE_LEVEL_11_0: return D3D11_REQ_TEXTURECUBE_DIMENSION;
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0:
- return D3D10_REQ_TEXTURECUBE_DIMENSION;
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0: return D3D10_REQ_TEXTURECUBE_DIMENSION;
- case D3D_FEATURE_LEVEL_9_3:
- return D3D_FL9_3_REQ_TEXTURECUBE_DIMENSION;
- case D3D_FEATURE_LEVEL_9_2:
- case D3D_FEATURE_LEVEL_9_1:
- return D3D_FL9_1_REQ_TEXTURECUBE_DIMENSION;
+ case D3D_FEATURE_LEVEL_9_3: return D3D_FL9_3_REQ_TEXTURECUBE_DIMENSION;
+ case D3D_FEATURE_LEVEL_9_2:
+ case D3D_FEATURE_LEVEL_9_1: return D3D_FL9_1_REQ_TEXTURECUBE_DIMENSION;
- default:
- UNREACHABLE();
- return 0;
+ default: UNREACHABLE(); return 0;
}
}
-size_t GetMaximum2DTextureArraySize(D3D_FEATURE_LEVEL featureLevel)
+static size_t GetMaximum2DTextureArraySize(D3D_FEATURE_LEVEL featureLevel)
{
switch (featureLevel)
{
- case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0:
- return D3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION;
+ case D3D_FEATURE_LEVEL_11_1:
+ case D3D_FEATURE_LEVEL_11_0: return D3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION;
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0:
- return D3D10_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION;
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0: return D3D10_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION;
- case D3D_FEATURE_LEVEL_9_3:
- case D3D_FEATURE_LEVEL_9_2:
- case D3D_FEATURE_LEVEL_9_1:
- return 0;
+ case D3D_FEATURE_LEVEL_9_3:
+ case D3D_FEATURE_LEVEL_9_2:
+ case D3D_FEATURE_LEVEL_9_1: return 0;
- default:
- UNREACHABLE();
- return 0;
+ default: UNREACHABLE(); return 0;
}
}
-size_t GetMaximum3DTextureSize(D3D_FEATURE_LEVEL featureLevel)
+static size_t GetMaximum3DTextureSize(D3D_FEATURE_LEVEL featureLevel)
{
switch (featureLevel)
{
- case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0:
- return D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION;
+ case D3D_FEATURE_LEVEL_11_1:
+ case D3D_FEATURE_LEVEL_11_0: return D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION;
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0:
- return D3D10_REQ_TEXTURE3D_U_V_OR_W_DIMENSION;
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0: return D3D10_REQ_TEXTURE3D_U_V_OR_W_DIMENSION;
- case D3D_FEATURE_LEVEL_9_3:
- case D3D_FEATURE_LEVEL_9_2:
- case D3D_FEATURE_LEVEL_9_1:
- return D3D_FL9_1_REQ_TEXTURE3D_U_V_OR_W_DIMENSION;
+ case D3D_FEATURE_LEVEL_9_3:
+ case D3D_FEATURE_LEVEL_9_2:
+ case D3D_FEATURE_LEVEL_9_1: return D3D_FL9_1_REQ_TEXTURE3D_U_V_OR_W_DIMENSION;
- default:
- UNREACHABLE();
- return 0;
+ default: UNREACHABLE(); return 0;
}
}
-size_t GetMaximumViewportSize(D3D_FEATURE_LEVEL featureLevel)
+static size_t GetMaximumViewportSize(D3D_FEATURE_LEVEL featureLevel)
{
switch (featureLevel)
{
- case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0:
- return D3D11_VIEWPORT_BOUNDS_MAX;
+ case D3D_FEATURE_LEVEL_11_1:
+ case D3D_FEATURE_LEVEL_11_0: return D3D11_VIEWPORT_BOUNDS_MAX;
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0:
- return D3D10_VIEWPORT_BOUNDS_MAX;
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0: return D3D10_VIEWPORT_BOUNDS_MAX;
- // No constants for D3D11 Feature Level 9 viewport size limits, use the maximum
- // texture sizes
- case D3D_FEATURE_LEVEL_9_3:
- return D3D_FL9_3_REQ_TEXTURE2D_U_OR_V_DIMENSION;
- case D3D_FEATURE_LEVEL_9_2:
- case D3D_FEATURE_LEVEL_9_1:
- return D3D_FL9_1_REQ_TEXTURE2D_U_OR_V_DIMENSION;
+ // No constants for D3D11 Feature Level 9 viewport size limits, use the maximum texture sizes
+ case D3D_FEATURE_LEVEL_9_3: return D3D_FL9_3_REQ_TEXTURE2D_U_OR_V_DIMENSION;
+ case D3D_FEATURE_LEVEL_9_2:
+ case D3D_FEATURE_LEVEL_9_1: return D3D_FL9_1_REQ_TEXTURE2D_U_OR_V_DIMENSION;
- default:
- UNREACHABLE();
- return 0;
+ default: UNREACHABLE(); return 0;
}
}
-size_t GetMaximumDrawIndexedIndexCount(D3D_FEATURE_LEVEL featureLevel)
+static size_t GetMaximumDrawIndexedIndexCount(D3D_FEATURE_LEVEL featureLevel)
{
- // D3D11 allows up to 2^32 elements, but we report max signed int for convenience since
- // that's what's
+ // D3D11 allows up to 2^32 elements, but we report max signed int for convenience since that's what's
// returned from glGetInteger
- static_assert(D3D11_REQ_DRAWINDEXED_INDEX_COUNT_2_TO_EXP == 32,
- "Unexpected D3D11 constant value.");
- static_assert(D3D10_REQ_DRAWINDEXED_INDEX_COUNT_2_TO_EXP == 32,
- "Unexpected D3D11 constant value.");
+ static_assert(D3D11_REQ_DRAWINDEXED_INDEX_COUNT_2_TO_EXP == 32, "Unexpected D3D11 constant value.");
+ static_assert(D3D10_REQ_DRAWINDEXED_INDEX_COUNT_2_TO_EXP == 32, "Unexpected D3D11 constant value.");
switch (featureLevel)
{
- case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0:
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0:
- return std::numeric_limits<GLint>::max();
+ case D3D_FEATURE_LEVEL_11_1:
+ case D3D_FEATURE_LEVEL_11_0:
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0: return std::numeric_limits<GLint>::max();
- case D3D_FEATURE_LEVEL_9_3:
- case D3D_FEATURE_LEVEL_9_2:
- return D3D_FL9_2_IA_PRIMITIVE_MAX_COUNT;
- case D3D_FEATURE_LEVEL_9_1:
- return D3D_FL9_1_IA_PRIMITIVE_MAX_COUNT;
+ case D3D_FEATURE_LEVEL_9_3:
+ case D3D_FEATURE_LEVEL_9_2: return D3D_FL9_2_IA_PRIMITIVE_MAX_COUNT;
+ case D3D_FEATURE_LEVEL_9_1: return D3D_FL9_1_IA_PRIMITIVE_MAX_COUNT;
- default:
- UNREACHABLE();
- return 0;
+ default: UNREACHABLE(); return 0;
}
}
-size_t GetMaximumDrawVertexCount(D3D_FEATURE_LEVEL featureLevel)
+static size_t GetMaximumDrawVertexCount(D3D_FEATURE_LEVEL featureLevel)
{
- // D3D11 allows up to 2^32 elements, but we report max signed int for convenience since
- // that's what's
+ // D3D11 allows up to 2^32 elements, but we report max signed int for convenience since that's what's
// returned from glGetInteger
static_assert(D3D11_REQ_DRAW_VERTEX_COUNT_2_TO_EXP == 32, "Unexpected D3D11 constant value.");
static_assert(D3D10_REQ_DRAW_VERTEX_COUNT_2_TO_EXP == 32, "Unexpected D3D11 constant value.");
switch (featureLevel)
{
- case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0:
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0:
- return std::numeric_limits<GLint>::max();
+ case D3D_FEATURE_LEVEL_11_1:
+ case D3D_FEATURE_LEVEL_11_0:
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0: return std::numeric_limits<GLint>::max();
- case D3D_FEATURE_LEVEL_9_3:
- case D3D_FEATURE_LEVEL_9_2:
- return D3D_FL9_2_IA_PRIMITIVE_MAX_COUNT;
- case D3D_FEATURE_LEVEL_9_1:
- return D3D_FL9_1_IA_PRIMITIVE_MAX_COUNT;
+ case D3D_FEATURE_LEVEL_9_3:
+ case D3D_FEATURE_LEVEL_9_2: return D3D_FL9_2_IA_PRIMITIVE_MAX_COUNT;
+ case D3D_FEATURE_LEVEL_9_1: return D3D_FL9_1_IA_PRIMITIVE_MAX_COUNT;
- default:
- UNREACHABLE();
- return 0;
+ default: UNREACHABLE(); return 0;
}
}
-size_t GetMaximumVertexInputSlots(D3D_FEATURE_LEVEL featureLevel)
+static size_t GetMaximumVertexInputSlots(D3D_FEATURE_LEVEL featureLevel)
{
switch (featureLevel)
{
- case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0:
- return D3D11_STANDARD_VERTEX_ELEMENT_COUNT;
+ case D3D_FEATURE_LEVEL_11_1:
+ case D3D_FEATURE_LEVEL_11_0: return D3D11_STANDARD_VERTEX_ELEMENT_COUNT;
- case D3D_FEATURE_LEVEL_10_1:
- return D3D10_1_STANDARD_VERTEX_ELEMENT_COUNT;
- case D3D_FEATURE_LEVEL_10_0:
- return D3D10_STANDARD_VERTEX_ELEMENT_COUNT;
+ case D3D_FEATURE_LEVEL_10_1: return D3D10_1_STANDARD_VERTEX_ELEMENT_COUNT;
+ case D3D_FEATURE_LEVEL_10_0: return D3D10_STANDARD_VERTEX_ELEMENT_COUNT;
- // From http://http://msdn.microsoft.com/en-us/library/windows/desktop/ff476876.aspx
- // "Max Input Slots"
- case D3D_FEATURE_LEVEL_9_3:
- case D3D_FEATURE_LEVEL_9_2:
- case D3D_FEATURE_LEVEL_9_1:
- return 16;
+ // From http://http://msdn.microsoft.com/en-us/library/windows/desktop/ff476876.aspx "Max Input Slots"
+ case D3D_FEATURE_LEVEL_9_3:
+ case D3D_FEATURE_LEVEL_9_2:
+ case D3D_FEATURE_LEVEL_9_1: return 16;
- default:
- UNREACHABLE();
- return 0;
+ default: UNREACHABLE(); return 0;
}
}
-size_t GetMaximumVertexUniformVectors(D3D_FEATURE_LEVEL featureLevel)
+static size_t GetMaximumVertexUniformVectors(D3D_FEATURE_LEVEL featureLevel)
{
switch (featureLevel)
{
- case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0:
- return D3D11_REQ_CONSTANT_BUFFER_ELEMENT_COUNT;
+ case D3D_FEATURE_LEVEL_11_1:
+ case D3D_FEATURE_LEVEL_11_0: return D3D11_REQ_CONSTANT_BUFFER_ELEMENT_COUNT;
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0:
- return D3D10_REQ_CONSTANT_BUFFER_ELEMENT_COUNT;
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0: return D3D10_REQ_CONSTANT_BUFFER_ELEMENT_COUNT;
- // From http://msdn.microsoft.com/en-us/library/windows/desktop/ff476149.aspx
- // ID3D11DeviceContext::VSSetConstantBuffers
- case D3D_FEATURE_LEVEL_9_3:
- case D3D_FEATURE_LEVEL_9_2:
- case D3D_FEATURE_LEVEL_9_1:
- return 255 - d3d11_gl::GetReservedVertexUniformVectors(featureLevel);
+ // From http://msdn.microsoft.com/en-us/library/windows/desktop/ff476149.aspx ID3D11DeviceContext::VSSetConstantBuffers
+ case D3D_FEATURE_LEVEL_9_3:
+ case D3D_FEATURE_LEVEL_9_2:
+ case D3D_FEATURE_LEVEL_9_1:
+ return 255 - d3d11_gl::GetReservedVertexUniformVectors(featureLevel);
- default:
- UNREACHABLE();
- return 0;
+ default: UNREACHABLE(); return 0;
}
}
-size_t GetMaximumVertexUniformBlocks(D3D_FEATURE_LEVEL featureLevel)
+static size_t GetMaximumVertexUniformBlocks(D3D_FEATURE_LEVEL featureLevel)
{
switch (featureLevel)
{
- case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0:
- return D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT -
- d3d11::RESERVED_CONSTANT_BUFFER_SLOT_COUNT;
+ case D3D_FEATURE_LEVEL_11_1:
+ case D3D_FEATURE_LEVEL_11_0:
+ return D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT -
+ d3d11::RESERVED_CONSTANT_BUFFER_SLOT_COUNT;
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0:
- return D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT -
- d3d11::RESERVED_CONSTANT_BUFFER_SLOT_COUNT;
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0:
+ return D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT -
+ d3d11::RESERVED_CONSTANT_BUFFER_SLOT_COUNT;
- // Uniform blocks not supported on D3D11 Feature Level 9
- case D3D_FEATURE_LEVEL_9_3:
- case D3D_FEATURE_LEVEL_9_2:
- case D3D_FEATURE_LEVEL_9_1:
- return 0;
+ // Uniform blocks not supported on D3D11 Feature Level 9
+ case D3D_FEATURE_LEVEL_9_3:
+ case D3D_FEATURE_LEVEL_9_2:
+ case D3D_FEATURE_LEVEL_9_1: return 0;
- default:
- UNREACHABLE();
- return 0;
+ default: UNREACHABLE(); return 0;
}
}
-size_t GetReservedVertexOutputVectors(D3D_FEATURE_LEVEL featureLevel)
+static size_t GetReservedVertexOutputVectors(D3D_FEATURE_LEVEL featureLevel)
{
// According to The OpenGL ES Shading Language specifications
// (Language Version 1.00 section 10.16, Language Version 3.10 section 12.21)
// built-in special variables (e.g. gl_FragCoord, or gl_PointCoord)
- // which are statically used in the shader should be included in the variable packing
- // algorithm.
+ // which are statically used in the shader should be included in the variable packing algorithm.
// Therefore, we should not reserve output vectors for them.
switch (featureLevel)
{
- // We must reserve one output vector for dx_Position.
- // We also reserve one for gl_Position, which we unconditionally output on Feature
- // Levels 10_0+,
- // even if it's unused in the shader (e.g. for transform feedback). TODO: This could
- // be improved.
- case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0:
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0:
- return 2;
+ // We must reserve one output vector for dx_Position.
+ // We also reserve one for gl_Position, which we unconditionally output on Feature Levels 10_0+,
+ // even if it's unused in the shader (e.g. for transform feedback). TODO: This could be improved.
+ case D3D_FEATURE_LEVEL_11_1:
+ case D3D_FEATURE_LEVEL_11_0:
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0: return 2;
- // Just reserve dx_Position on Feature Level 9, since we don't ever need to output
- // gl_Position.
- case D3D_FEATURE_LEVEL_9_3:
- case D3D_FEATURE_LEVEL_9_2:
- case D3D_FEATURE_LEVEL_9_1:
- return 1;
+ // Just reserve dx_Position on Feature Level 9, since we don't ever need to output gl_Position.
+ case D3D_FEATURE_LEVEL_9_3:
+ case D3D_FEATURE_LEVEL_9_2:
+ case D3D_FEATURE_LEVEL_9_1: return 1;
- default:
- UNREACHABLE();
- return 0;
+ default: UNREACHABLE(); return 0;
}
}
-size_t GetMaximumVertexOutputVectors(D3D_FEATURE_LEVEL featureLevel)
+static size_t GetMaximumVertexOutputVectors(D3D_FEATURE_LEVEL featureLevel)
{
- static_assert(gl::IMPLEMENTATION_MAX_VARYING_VECTORS == D3D11_VS_OUTPUT_REGISTER_COUNT,
- "Unexpected D3D11 constant value.");
+ static_assert(gl::IMPLEMENTATION_MAX_VARYING_VECTORS == D3D11_VS_OUTPUT_REGISTER_COUNT, "Unexpected D3D11 constant value.");
switch (featureLevel)
{
- case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0:
- return D3D11_VS_OUTPUT_REGISTER_COUNT - GetReservedVertexOutputVectors(featureLevel);
+ case D3D_FEATURE_LEVEL_11_1:
+ case D3D_FEATURE_LEVEL_11_0: return D3D11_VS_OUTPUT_REGISTER_COUNT - GetReservedVertexOutputVectors(featureLevel);
- case D3D_FEATURE_LEVEL_10_1:
- return D3D10_1_VS_OUTPUT_REGISTER_COUNT - GetReservedVertexOutputVectors(featureLevel);
- case D3D_FEATURE_LEVEL_10_0:
- return D3D10_VS_OUTPUT_REGISTER_COUNT - GetReservedVertexOutputVectors(featureLevel);
+ case D3D_FEATURE_LEVEL_10_1: return D3D10_1_VS_OUTPUT_REGISTER_COUNT - GetReservedVertexOutputVectors(featureLevel);
+ case D3D_FEATURE_LEVEL_10_0: return D3D10_VS_OUTPUT_REGISTER_COUNT - GetReservedVertexOutputVectors(featureLevel);
- // Use Shader Model 2.X limits
- case D3D_FEATURE_LEVEL_9_3:
- case D3D_FEATURE_LEVEL_9_2:
- case D3D_FEATURE_LEVEL_9_1:
- return 8 - GetReservedVertexOutputVectors(featureLevel);
+ // Use Shader Model 2.X limits
+ case D3D_FEATURE_LEVEL_9_3:
+ case D3D_FEATURE_LEVEL_9_2:
+ case D3D_FEATURE_LEVEL_9_1: return 8 - GetReservedVertexOutputVectors(featureLevel);
- default:
- UNREACHABLE();
- return 0;
+ default: UNREACHABLE(); return 0;
}
}
-size_t GetMaximumVertexTextureUnits(D3D_FEATURE_LEVEL featureLevel)
+static size_t GetMaximumVertexTextureUnits(D3D_FEATURE_LEVEL featureLevel)
{
switch (featureLevel)
{
- case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0:
- return D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT;
+ case D3D_FEATURE_LEVEL_11_1:
+ case D3D_FEATURE_LEVEL_11_0: return D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT;
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0:
- return D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT;
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0: return D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT;
- // Vertex textures not supported on D3D11 Feature Level 9 according to
- // http://msdn.microsoft.com/en-us/library/windows/desktop/ff476149.aspx
- // ID3D11DeviceContext::VSSetSamplers and ID3D11DeviceContext::VSSetShaderResources
- case D3D_FEATURE_LEVEL_9_3:
- case D3D_FEATURE_LEVEL_9_2:
- case D3D_FEATURE_LEVEL_9_1:
- return 0;
+ // Vertex textures not supported on D3D11 Feature Level 9 according to
+ // http://msdn.microsoft.com/en-us/library/windows/desktop/ff476149.aspx
+ // ID3D11DeviceContext::VSSetSamplers and ID3D11DeviceContext::VSSetShaderResources
+ case D3D_FEATURE_LEVEL_9_3:
+ case D3D_FEATURE_LEVEL_9_2:
+ case D3D_FEATURE_LEVEL_9_1: return 0;
- default:
- UNREACHABLE();
- return 0;
+ default: UNREACHABLE(); return 0;
}
}
-size_t GetMaximumPixelUniformVectors(D3D_FEATURE_LEVEL featureLevel)
+static size_t GetMaximumPixelUniformVectors(D3D_FEATURE_LEVEL featureLevel)
{
// TODO(geofflang): Remove hard-coded limit once the gl-uniform-arrays test can pass
switch (featureLevel)
{
- case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0:
- return 1024; // D3D11_REQ_CONSTANT_BUFFER_ELEMENT_COUNT;
+ case D3D_FEATURE_LEVEL_11_1:
+ case D3D_FEATURE_LEVEL_11_0: return 1024; // D3D11_REQ_CONSTANT_BUFFER_ELEMENT_COUNT;
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0:
- return 1024; // D3D10_REQ_CONSTANT_BUFFER_ELEMENT_COUNT;
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0: return 1024; // D3D10_REQ_CONSTANT_BUFFER_ELEMENT_COUNT;
- // From http://msdn.microsoft.com/en-us/library/windows/desktop/ff476149.aspx
- // ID3D11DeviceContext::PSSetConstantBuffers
- case D3D_FEATURE_LEVEL_9_3:
- case D3D_FEATURE_LEVEL_9_2:
- case D3D_FEATURE_LEVEL_9_1:
- return 32 - d3d11_gl::GetReservedFragmentUniformVectors(featureLevel);
+ // From http://msdn.microsoft.com/en-us/library/windows/desktop/ff476149.aspx ID3D11DeviceContext::PSSetConstantBuffers
+ case D3D_FEATURE_LEVEL_9_3:
+ case D3D_FEATURE_LEVEL_9_2:
+ case D3D_FEATURE_LEVEL_9_1:
+ return 32 - d3d11_gl::GetReservedFragmentUniformVectors(featureLevel);
- default:
- UNREACHABLE();
- return 0;
+ default: UNREACHABLE(); return 0;
}
}
-size_t GetMaximumPixelUniformBlocks(D3D_FEATURE_LEVEL featureLevel)
+static size_t GetMaximumPixelUniformBlocks(D3D_FEATURE_LEVEL featureLevel)
{
switch (featureLevel)
{
- case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0:
- return D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT -
- d3d11::RESERVED_CONSTANT_BUFFER_SLOT_COUNT;
+ case D3D_FEATURE_LEVEL_11_1:
+ case D3D_FEATURE_LEVEL_11_0:
+ return D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT -
+ d3d11::RESERVED_CONSTANT_BUFFER_SLOT_COUNT;
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0:
- return D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT -
- d3d11::RESERVED_CONSTANT_BUFFER_SLOT_COUNT;
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0:
+ return D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT -
+ d3d11::RESERVED_CONSTANT_BUFFER_SLOT_COUNT;
- // Uniform blocks not supported on D3D11 Feature Level 9
- case D3D_FEATURE_LEVEL_9_3:
- case D3D_FEATURE_LEVEL_9_2:
- case D3D_FEATURE_LEVEL_9_1:
- return 0;
+ // Uniform blocks not supported on D3D11 Feature Level 9
+ case D3D_FEATURE_LEVEL_9_3:
+ case D3D_FEATURE_LEVEL_9_2:
+ case D3D_FEATURE_LEVEL_9_1: return 0;
- default:
- UNREACHABLE();
- return 0;
+ default: UNREACHABLE(); return 0;
}
}
-size_t GetMaximumPixelInputVectors(D3D_FEATURE_LEVEL featureLevel)
+static size_t GetMaximumPixelInputVectors(D3D_FEATURE_LEVEL featureLevel)
{
switch (featureLevel)
{
- case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0:
- return D3D11_PS_INPUT_REGISTER_COUNT - GetReservedVertexOutputVectors(featureLevel);
+ case D3D_FEATURE_LEVEL_11_1:
+ case D3D_FEATURE_LEVEL_11_0: return D3D11_PS_INPUT_REGISTER_COUNT - GetReservedVertexOutputVectors(featureLevel);
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0:
- return D3D10_PS_INPUT_REGISTER_COUNT - GetReservedVertexOutputVectors(featureLevel);
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0: return D3D10_PS_INPUT_REGISTER_COUNT - GetReservedVertexOutputVectors(featureLevel);
- // Use Shader Model 2.X limits
- case D3D_FEATURE_LEVEL_9_3:
- return 8 - GetReservedVertexOutputVectors(featureLevel);
- case D3D_FEATURE_LEVEL_9_2:
- case D3D_FEATURE_LEVEL_9_1:
- return 8 - GetReservedVertexOutputVectors(featureLevel);
+ // Use Shader Model 2.X limits
+ case D3D_FEATURE_LEVEL_9_3: return 8 - GetReservedVertexOutputVectors(featureLevel);
+ case D3D_FEATURE_LEVEL_9_2:
+ case D3D_FEATURE_LEVEL_9_1: return 8 - GetReservedVertexOutputVectors(featureLevel);
- default:
- UNREACHABLE();
- return 0;
+ default: UNREACHABLE(); return 0;
}
}
-size_t GetMaximumPixelTextureUnits(D3D_FEATURE_LEVEL featureLevel)
+static size_t GetMaximumPixelTextureUnits(D3D_FEATURE_LEVEL featureLevel)
{
switch (featureLevel)
{
- case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0:
- return D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT;
+ case D3D_FEATURE_LEVEL_11_1:
+ case D3D_FEATURE_LEVEL_11_0: return D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT;
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0:
- return D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT;
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0: return D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT;
- // http://msdn.microsoft.com/en-us/library/windows/desktop/ff476149.aspx
- // ID3D11DeviceContext::PSSetShaderResources
- case D3D_FEATURE_LEVEL_9_3:
- case D3D_FEATURE_LEVEL_9_2:
- case D3D_FEATURE_LEVEL_9_1:
- return 16;
+ // http://msdn.microsoft.com/en-us/library/windows/desktop/ff476149.aspx ID3D11DeviceContext::PSSetShaderResources
+ case D3D_FEATURE_LEVEL_9_3:
+ case D3D_FEATURE_LEVEL_9_2:
+ case D3D_FEATURE_LEVEL_9_1: return 16;
- default:
- UNREACHABLE();
- return 0;
+ default: UNREACHABLE(); return 0;
}
}
-int GetMinimumTexelOffset(D3D_FEATURE_LEVEL featureLevel)
+static int GetMinimumTexelOffset(D3D_FEATURE_LEVEL featureLevel)
{
switch (featureLevel)
{
- case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0:
- return D3D11_COMMONSHADER_TEXEL_OFFSET_MAX_NEGATIVE;
+ case D3D_FEATURE_LEVEL_11_1:
+ case D3D_FEATURE_LEVEL_11_0: return D3D11_COMMONSHADER_TEXEL_OFFSET_MAX_NEGATIVE;
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0:
- return D3D10_COMMONSHADER_TEXEL_OFFSET_MAX_NEGATIVE;
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0: return D3D10_COMMONSHADER_TEXEL_OFFSET_MAX_NEGATIVE;
- // Sampling functions with offsets are not available below shader model 4.0.
- case D3D_FEATURE_LEVEL_9_3:
- case D3D_FEATURE_LEVEL_9_2:
- case D3D_FEATURE_LEVEL_9_1:
- return 0;
+ // Sampling functions with offsets are not available below shader model 4.0.
+ case D3D_FEATURE_LEVEL_9_3:
+ case D3D_FEATURE_LEVEL_9_2:
+ case D3D_FEATURE_LEVEL_9_1: return 0;
- default:
- UNREACHABLE();
- return 0;
+ default: UNREACHABLE(); return 0;
}
}
-int GetMaximumTexelOffset(D3D_FEATURE_LEVEL featureLevel)
+static int GetMaximumTexelOffset(D3D_FEATURE_LEVEL featureLevel)
{
switch (featureLevel)
{
- case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0:
- return D3D11_COMMONSHADER_TEXEL_OFFSET_MAX_POSITIVE;
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0:
- return D3D11_COMMONSHADER_TEXEL_OFFSET_MAX_POSITIVE;
+ case D3D_FEATURE_LEVEL_11_1:
+ case D3D_FEATURE_LEVEL_11_0: return D3D11_COMMONSHADER_TEXEL_OFFSET_MAX_POSITIVE;
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0: return D3D11_COMMONSHADER_TEXEL_OFFSET_MAX_POSITIVE;
- // Sampling functions with offsets are not available below shader model 4.0.
- case D3D_FEATURE_LEVEL_9_3:
- case D3D_FEATURE_LEVEL_9_2:
- case D3D_FEATURE_LEVEL_9_1:
- return 0;
+ // Sampling functions with offsets are not available below shader model 4.0.
+ case D3D_FEATURE_LEVEL_9_3:
+ case D3D_FEATURE_LEVEL_9_2:
+ case D3D_FEATURE_LEVEL_9_1: return 0;
- default:
- UNREACHABLE();
- return 0;
+ default: UNREACHABLE(); return 0;
}
}
-size_t GetMaximumConstantBufferSize(D3D_FEATURE_LEVEL featureLevel)
+static size_t GetMaximumConstantBufferSize(D3D_FEATURE_LEVEL featureLevel)
{
- // Returns a size_t despite the limit being a GLuint64 because size_t is the maximum
- // size of
+ // Returns a size_t despite the limit being a GLuint64 because size_t is the maximum size of
// any buffer that could be allocated.
const size_t bytesPerComponent = 4 * sizeof(float);
switch (featureLevel)
{
- case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0:
- return D3D11_REQ_CONSTANT_BUFFER_ELEMENT_COUNT * bytesPerComponent;
+ case D3D_FEATURE_LEVEL_11_1:
+ case D3D_FEATURE_LEVEL_11_0: return D3D11_REQ_CONSTANT_BUFFER_ELEMENT_COUNT * bytesPerComponent;
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0:
- return D3D10_REQ_CONSTANT_BUFFER_ELEMENT_COUNT * bytesPerComponent;
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0: return D3D10_REQ_CONSTANT_BUFFER_ELEMENT_COUNT * bytesPerComponent;
- // Limits from http://msdn.microsoft.com/en-us/library/windows/desktop/ff476501.aspx
- // remarks section
- case D3D_FEATURE_LEVEL_9_3:
- case D3D_FEATURE_LEVEL_9_2:
- case D3D_FEATURE_LEVEL_9_1:
- return 4096 * bytesPerComponent;
+ // Limits from http://msdn.microsoft.com/en-us/library/windows/desktop/ff476501.aspx remarks section
+ case D3D_FEATURE_LEVEL_9_3:
+ case D3D_FEATURE_LEVEL_9_2:
+ case D3D_FEATURE_LEVEL_9_1: return 4096 * bytesPerComponent;
- default:
- UNREACHABLE();
- return 0;
+ default: UNREACHABLE(); return 0;
}
}
-size_t GetMaximumStreamOutputBuffers(D3D_FEATURE_LEVEL featureLevel)
+static size_t GetMaximumStreamOutputBuffers(D3D_FEATURE_LEVEL featureLevel)
{
switch (featureLevel)
{
- case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0:
- return D3D11_SO_BUFFER_SLOT_COUNT;
+ case D3D_FEATURE_LEVEL_11_1:
+ case D3D_FEATURE_LEVEL_11_0: return D3D11_SO_BUFFER_SLOT_COUNT;
- case D3D_FEATURE_LEVEL_10_1:
- return D3D10_1_SO_BUFFER_SLOT_COUNT;
- case D3D_FEATURE_LEVEL_10_0:
- return D3D10_SO_BUFFER_SLOT_COUNT;
+ case D3D_FEATURE_LEVEL_10_1: return D3D10_1_SO_BUFFER_SLOT_COUNT;
+ case D3D_FEATURE_LEVEL_10_0: return D3D10_SO_BUFFER_SLOT_COUNT;
- case D3D_FEATURE_LEVEL_9_3:
- case D3D_FEATURE_LEVEL_9_2:
- case D3D_FEATURE_LEVEL_9_1:
- return 0;
+ case D3D_FEATURE_LEVEL_9_3:
+ case D3D_FEATURE_LEVEL_9_2:
+ case D3D_FEATURE_LEVEL_9_1: return 0;
- default:
- UNREACHABLE();
- return 0;
+ default: UNREACHABLE(); return 0;
}
}
-size_t GetMaximumStreamOutputInterleavedComponents(D3D_FEATURE_LEVEL featureLevel)
+static size_t GetMaximumStreamOutputInterleavedComponents(D3D_FEATURE_LEVEL featureLevel)
{
switch (featureLevel)
{
- case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0:
+ case D3D_FEATURE_LEVEL_11_1:
+ case D3D_FEATURE_LEVEL_11_0:
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0:
- return GetMaximumVertexOutputVectors(featureLevel) * 4;
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0: return GetMaximumVertexOutputVectors(featureLevel) * 4;
- case D3D_FEATURE_LEVEL_9_3:
- case D3D_FEATURE_LEVEL_9_2:
- case D3D_FEATURE_LEVEL_9_1:
- return 0;
+ case D3D_FEATURE_LEVEL_9_3:
+ case D3D_FEATURE_LEVEL_9_2:
+ case D3D_FEATURE_LEVEL_9_1: return 0;
- default:
- UNREACHABLE();
- return 0;
+ default: UNREACHABLE(); return 0;
}
}
-size_t GetMaximumStreamOutputSeparateComponents(D3D_FEATURE_LEVEL featureLevel)
+static size_t GetMaximumStreamOutputSeparateComponents(D3D_FEATURE_LEVEL featureLevel)
{
switch (featureLevel)
{
- case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0:
- return GetMaximumStreamOutputInterleavedComponents(featureLevel) /
- GetMaximumStreamOutputBuffers(featureLevel);
-
- // D3D 10 and 10.1 only allow one output per output slot if an output slot other
- // than zero is used.
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0:
- return 4;
-
- case D3D_FEATURE_LEVEL_9_3:
- case D3D_FEATURE_LEVEL_9_2:
- case D3D_FEATURE_LEVEL_9_1:
- return 0;
-
- default:
- UNREACHABLE();
- return 0;
- }
-}
+ case D3D_FEATURE_LEVEL_11_1:
+ case D3D_FEATURE_LEVEL_11_0: return GetMaximumStreamOutputInterleavedComponents(featureLevel) /
+ GetMaximumStreamOutputBuffers(featureLevel);
-} // anonymous namespace
-unsigned int GetReservedVertexUniformVectors(D3D_FEATURE_LEVEL featureLevel)
-{
- switch (featureLevel)
- {
- case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0:
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0:
- return 0;
+ // D3D 10 and 10.1 only allow one output per output slot if an output slot other than zero is used.
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0: return 4;
- case D3D_FEATURE_LEVEL_9_3:
- case D3D_FEATURE_LEVEL_9_2:
- case D3D_FEATURE_LEVEL_9_1:
- return 3; // dx_ViewAdjust, dx_ViewCoords and dx_ViewScale
+ case D3D_FEATURE_LEVEL_9_3:
+ case D3D_FEATURE_LEVEL_9_2:
+ case D3D_FEATURE_LEVEL_9_1: return 0;
- default:
- UNREACHABLE();
- return 0;
- }
-}
-
-unsigned int GetReservedFragmentUniformVectors(D3D_FEATURE_LEVEL featureLevel)
-{
- switch (featureLevel)
- {
- case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0:
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0:
- return 0;
-
- case D3D_FEATURE_LEVEL_9_3:
- case D3D_FEATURE_LEVEL_9_2:
- case D3D_FEATURE_LEVEL_9_1:
- return 3;
-
- default:
- UNREACHABLE();
- return 0;
- }
-}
-
-GLint GetMaximumClientVersion(D3D_FEATURE_LEVEL featureLevel)
-{
- switch (featureLevel)
- {
- case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0:
- case D3D_FEATURE_LEVEL_10_1:
- return 3;
-
- case D3D_FEATURE_LEVEL_10_0:
- case D3D_FEATURE_LEVEL_9_3:
- case D3D_FEATURE_LEVEL_9_2:
- case D3D_FEATURE_LEVEL_9_1:
- return 2;
-
- default:
- UNREACHABLE();
- return 0;
+ default: UNREACHABLE(); return 0;
}
}
@@ -1220,7 +1239,6 @@ void GenerateCaps(ID3D11Device *device, ID3D11DeviceContext *deviceContext, cons
extensions->lossyETCDecode = true;
extensions->syncQuery = GetEventQuerySupport(featureLevel);
extensions->copyTexture = true;
- extensions->copyCompressedTexture = true;
// D3D11 Feature Level 10_0+ uses SV_IsFrontFace in HLSL to emulate gl_FrontFacing.
// D3D11 Feature Level 9_3 doesn't support SV_IsFrontFace, and has no equivalent, so can't support gl_FrontFacing.
@@ -1252,336 +1270,6 @@ void GenerateCaps(ID3D11Device *device, ID3D11DeviceContext *deviceContext, cons
} // namespace d3d11_gl
-namespace gl_d3d11
-{
-
-D3D11_BLEND ConvertBlendFunc(GLenum glBlend, bool isAlpha)
-{
- D3D11_BLEND d3dBlend = D3D11_BLEND_ZERO;
-
- switch (glBlend)
- {
- case GL_ZERO:
- d3dBlend = D3D11_BLEND_ZERO;
- break;
- case GL_ONE:
- d3dBlend = D3D11_BLEND_ONE;
- break;
- case GL_SRC_COLOR:
- d3dBlend = (isAlpha ? D3D11_BLEND_SRC_ALPHA : D3D11_BLEND_SRC_COLOR);
- break;
- case GL_ONE_MINUS_SRC_COLOR:
- d3dBlend = (isAlpha ? D3D11_BLEND_INV_SRC_ALPHA : D3D11_BLEND_INV_SRC_COLOR);
- break;
- case GL_DST_COLOR:
- d3dBlend = (isAlpha ? D3D11_BLEND_DEST_ALPHA : D3D11_BLEND_DEST_COLOR);
- break;
- case GL_ONE_MINUS_DST_COLOR:
- d3dBlend = (isAlpha ? D3D11_BLEND_INV_DEST_ALPHA : D3D11_BLEND_INV_DEST_COLOR);
- break;
- case GL_SRC_ALPHA:
- d3dBlend = D3D11_BLEND_SRC_ALPHA;
- break;
- case GL_ONE_MINUS_SRC_ALPHA:
- d3dBlend = D3D11_BLEND_INV_SRC_ALPHA;
- break;
- case GL_DST_ALPHA:
- d3dBlend = D3D11_BLEND_DEST_ALPHA;
- break;
- case GL_ONE_MINUS_DST_ALPHA:
- d3dBlend = D3D11_BLEND_INV_DEST_ALPHA;
- break;
- case GL_CONSTANT_COLOR:
- d3dBlend = D3D11_BLEND_BLEND_FACTOR;
- break;
- case GL_ONE_MINUS_CONSTANT_COLOR:
- d3dBlend = D3D11_BLEND_INV_BLEND_FACTOR;
- break;
- case GL_CONSTANT_ALPHA:
- d3dBlend = D3D11_BLEND_BLEND_FACTOR;
- break;
- case GL_ONE_MINUS_CONSTANT_ALPHA:
- d3dBlend = D3D11_BLEND_INV_BLEND_FACTOR;
- break;
- case GL_SRC_ALPHA_SATURATE:
- d3dBlend = D3D11_BLEND_SRC_ALPHA_SAT;
- break;
- default:
- UNREACHABLE();
- }
-
- return d3dBlend;
-}
-
-D3D11_BLEND_OP ConvertBlendOp(GLenum glBlendOp)
-{
- D3D11_BLEND_OP d3dBlendOp = D3D11_BLEND_OP_ADD;
-
- switch (glBlendOp)
- {
- case GL_FUNC_ADD:
- d3dBlendOp = D3D11_BLEND_OP_ADD;
- break;
- case GL_FUNC_SUBTRACT:
- d3dBlendOp = D3D11_BLEND_OP_SUBTRACT;
- break;
- case GL_FUNC_REVERSE_SUBTRACT:
- d3dBlendOp = D3D11_BLEND_OP_REV_SUBTRACT;
- break;
- case GL_MIN:
- d3dBlendOp = D3D11_BLEND_OP_MIN;
- break;
- case GL_MAX:
- d3dBlendOp = D3D11_BLEND_OP_MAX;
- break;
- default:
- UNREACHABLE();
- }
-
- return d3dBlendOp;
-}
-
-UINT8 ConvertColorMask(bool red, bool green, bool blue, bool alpha)
-{
- UINT8 mask = 0;
- if (red)
- {
- mask |= D3D11_COLOR_WRITE_ENABLE_RED;
- }
- if (green)
- {
- mask |= D3D11_COLOR_WRITE_ENABLE_GREEN;
- }
- if (blue)
- {
- mask |= D3D11_COLOR_WRITE_ENABLE_BLUE;
- }
- if (alpha)
- {
- mask |= D3D11_COLOR_WRITE_ENABLE_ALPHA;
- }
- return mask;
-}
-
-D3D11_CULL_MODE ConvertCullMode(bool cullEnabled, GLenum cullMode)
-{
- D3D11_CULL_MODE cull = D3D11_CULL_NONE;
-
- if (cullEnabled)
- {
- switch (cullMode)
- {
- case GL_FRONT:
- cull = D3D11_CULL_FRONT;
- break;
- case GL_BACK:
- cull = D3D11_CULL_BACK;
- break;
- case GL_FRONT_AND_BACK:
- cull = D3D11_CULL_NONE;
- break;
- default:
- UNREACHABLE();
- }
- }
- else
- {
- cull = D3D11_CULL_NONE;
- }
-
- return cull;
-}
-
-D3D11_COMPARISON_FUNC ConvertComparison(GLenum comparison)
-{
- D3D11_COMPARISON_FUNC d3dComp = D3D11_COMPARISON_NEVER;
- switch (comparison)
- {
- case GL_NEVER:
- d3dComp = D3D11_COMPARISON_NEVER;
- break;
- case GL_ALWAYS:
- d3dComp = D3D11_COMPARISON_ALWAYS;
- break;
- case GL_LESS:
- d3dComp = D3D11_COMPARISON_LESS;
- break;
- case GL_LEQUAL:
- d3dComp = D3D11_COMPARISON_LESS_EQUAL;
- break;
- case GL_EQUAL:
- d3dComp = D3D11_COMPARISON_EQUAL;
- break;
- case GL_GREATER:
- d3dComp = D3D11_COMPARISON_GREATER;
- break;
- case GL_GEQUAL:
- d3dComp = D3D11_COMPARISON_GREATER_EQUAL;
- break;
- case GL_NOTEQUAL:
- d3dComp = D3D11_COMPARISON_NOT_EQUAL;
- break;
- default:
- UNREACHABLE();
- }
-
- return d3dComp;
-}
-
-D3D11_DEPTH_WRITE_MASK ConvertDepthMask(bool depthWriteEnabled)
-{
- return depthWriteEnabled ? D3D11_DEPTH_WRITE_MASK_ALL : D3D11_DEPTH_WRITE_MASK_ZERO;
-}
-
-UINT8 ConvertStencilMask(GLuint stencilmask)
-{
- return static_cast<UINT8>(stencilmask);
-}
-
-D3D11_STENCIL_OP ConvertStencilOp(GLenum stencilOp)
-{
- D3D11_STENCIL_OP d3dStencilOp = D3D11_STENCIL_OP_KEEP;
-
- switch (stencilOp)
- {
- case GL_ZERO:
- d3dStencilOp = D3D11_STENCIL_OP_ZERO;
- break;
- case GL_KEEP:
- d3dStencilOp = D3D11_STENCIL_OP_KEEP;
- break;
- case GL_REPLACE:
- d3dStencilOp = D3D11_STENCIL_OP_REPLACE;
- break;
- case GL_INCR:
- d3dStencilOp = D3D11_STENCIL_OP_INCR_SAT;
- break;
- case GL_DECR:
- d3dStencilOp = D3D11_STENCIL_OP_DECR_SAT;
- break;
- case GL_INVERT:
- d3dStencilOp = D3D11_STENCIL_OP_INVERT;
- break;
- case GL_INCR_WRAP:
- d3dStencilOp = D3D11_STENCIL_OP_INCR;
- break;
- case GL_DECR_WRAP:
- d3dStencilOp = D3D11_STENCIL_OP_DECR;
- break;
- default:
- UNREACHABLE();
- }
-
- return d3dStencilOp;
-}
-
-D3D11_FILTER ConvertFilter(GLenum minFilter,
- GLenum magFilter,
- float maxAnisotropy,
- GLenum comparisonMode)
-{
- bool comparison = comparisonMode != GL_NONE;
-
- if (maxAnisotropy > 1.0f)
- {
- return D3D11_ENCODE_ANISOTROPIC_FILTER(static_cast<D3D11_COMPARISON_FUNC>(comparison));
- }
- else
- {
- D3D11_FILTER_TYPE dxMin = D3D11_FILTER_TYPE_POINT;
- D3D11_FILTER_TYPE dxMip = D3D11_FILTER_TYPE_POINT;
- switch (minFilter)
- {
- case GL_NEAREST:
- dxMin = D3D11_FILTER_TYPE_POINT;
- dxMip = D3D11_FILTER_TYPE_POINT;
- break;
- case GL_LINEAR:
- dxMin = D3D11_FILTER_TYPE_LINEAR;
- dxMip = D3D11_FILTER_TYPE_POINT;
- break;
- case GL_NEAREST_MIPMAP_NEAREST:
- dxMin = D3D11_FILTER_TYPE_POINT;
- dxMip = D3D11_FILTER_TYPE_POINT;
- break;
- case GL_LINEAR_MIPMAP_NEAREST:
- dxMin = D3D11_FILTER_TYPE_LINEAR;
- dxMip = D3D11_FILTER_TYPE_POINT;
- break;
- case GL_NEAREST_MIPMAP_LINEAR:
- dxMin = D3D11_FILTER_TYPE_POINT;
- dxMip = D3D11_FILTER_TYPE_LINEAR;
- break;
- case GL_LINEAR_MIPMAP_LINEAR:
- dxMin = D3D11_FILTER_TYPE_LINEAR;
- dxMip = D3D11_FILTER_TYPE_LINEAR;
- break;
- default:
- UNREACHABLE();
- }
-
- D3D11_FILTER_TYPE dxMag = D3D11_FILTER_TYPE_POINT;
- switch (magFilter)
- {
- case GL_NEAREST:
- dxMag = D3D11_FILTER_TYPE_POINT;
- break;
- case GL_LINEAR:
- dxMag = D3D11_FILTER_TYPE_LINEAR;
- break;
- default:
- UNREACHABLE();
- }
-
- return D3D11_ENCODE_BASIC_FILTER(dxMin, dxMag, dxMip,
- static_cast<D3D11_COMPARISON_FUNC>(comparison));
- }
-}
-
-D3D11_TEXTURE_ADDRESS_MODE ConvertTextureWrap(GLenum wrap)
-{
- switch (wrap)
- {
- case GL_REPEAT:
- return D3D11_TEXTURE_ADDRESS_WRAP;
- case GL_CLAMP_TO_EDGE:
- return D3D11_TEXTURE_ADDRESS_CLAMP;
- case GL_MIRRORED_REPEAT:
- return D3D11_TEXTURE_ADDRESS_MIRROR;
- default:
- UNREACHABLE();
- }
-
- return D3D11_TEXTURE_ADDRESS_WRAP;
-}
-
-UINT ConvertMaxAnisotropy(float maxAnisotropy, D3D_FEATURE_LEVEL featureLevel)
-{
- return static_cast<UINT>(std::min(maxAnisotropy, d3d11_gl::GetMaximumAnisotropy(featureLevel)));
-}
-
-D3D11_QUERY ConvertQueryType(GLenum queryType)
-{
- switch (queryType)
- {
- case GL_ANY_SAMPLES_PASSED_EXT:
- case GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT:
- return D3D11_QUERY_OCCLUSION;
- case GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:
- return D3D11_QUERY_SO_STATISTICS;
- case GL_TIME_ELAPSED_EXT:
- // Two internal queries are also created for begin/end timestamps
- return D3D11_QUERY_TIMESTAMP_DISJOINT;
- case GL_COMMANDS_COMPLETED_CHROMIUM:
- return D3D11_QUERY_EVENT;
- default:
- UNREACHABLE();
- return D3D11_QUERY_EVENT;
- }
-}
-
-} // namespace gl_d3d11
-
namespace d3d11
{
@@ -1791,6 +1479,7 @@ ID3D11InputLayout *LazyInputLayout::resolve(ID3D11Device *device)
device->CreateInputLayout(&mInputDesc[0], static_cast<UINT>(mInputDesc.size()),
mByteCode, mByteCodeLen, &mResource);
ASSERT(SUCCEEDED(result));
+ UNUSED_ASSERTION_VARIABLE(result);
d3d11::SetDebugName(mResource, mDebugName);
}
@@ -1810,6 +1499,7 @@ ID3D11BlendState *LazyBlendState::resolve(ID3D11Device *device)
{
HRESULT result = device->CreateBlendState(&mDesc, &mResource);
ASSERT(SUCCEEDED(result));
+ UNUSED_ASSERTION_VARIABLE(result);
d3d11::SetDebugName(mResource, mDebugName);
}
@@ -1828,7 +1518,7 @@ WorkaroundsD3D GenerateWorkarounds(const Renderer11DeviceCaps &deviceCaps,
workarounds.useInstancedPointSpriteEmulation = is9_3;
// TODO(jmadill): Narrow problematic driver range.
- if (IsNvidia(adapterDesc.VendorId))
+ if (adapterDesc.VendorId == VENDOR_ID_NVIDIA)
{
if (deviceCaps.driverVersion.valid())
{
@@ -1847,32 +1537,11 @@ WorkaroundsD3D GenerateWorkarounds(const Renderer11DeviceCaps &deviceCaps,
// TODO(jmadill): Disable workaround when we have a fixed compiler DLL.
workarounds.expandIntegerPowExpressions = true;
- workarounds.flushAfterEndingTransformFeedback = IsNvidia(adapterDesc.VendorId);
- workarounds.getDimensionsIgnoresBaseLevel = IsNvidia(adapterDesc.VendorId);
-
- workarounds.preAddTexelFetchOffsets = IsIntel(adapterDesc.VendorId);
- workarounds.disableB5G6R5Support = IsIntel(adapterDesc.VendorId);
- workarounds.rewriteUnaryMinusOperator =
- IsIntel(adapterDesc.VendorId) &&
- (IsBroadwell(adapterDesc.DeviceId) || IsHaswell(adapterDesc.DeviceId));
- workarounds.emulateIsnanFloat =
- IsIntel(adapterDesc.VendorId) && IsSkylake(adapterDesc.DeviceId);
- workarounds.callClearTwice =
- IsIntel(adapterDesc.VendorId) && IsSkylake(adapterDesc.DeviceId);
-
- // TODO(jmadill): Disable when we have a fixed driver version.
- workarounds.emulateTinyStencilTextures = IsAMD(adapterDesc.VendorId);
-
- // The tiny stencil texture workaround involves using CopySubresource or UpdateSubresource on a
- // depth stencil texture. This is not allowed until feature level 10.1 but since it is not
- // possible to support ES3 on these devices, there is no need for the workaround to begin with
- // (anglebug.com/1572).
- if (deviceCaps.featureLevel < D3D_FEATURE_LEVEL_10_1)
- {
- workarounds.emulateTinyStencilTextures = false;
- }
+ workarounds.flushAfterEndingTransformFeedback = (adapterDesc.VendorId == VENDOR_ID_NVIDIA);
+ workarounds.getDimensionsIgnoresBaseLevel = (adapterDesc.VendorId == VENDOR_ID_NVIDIA);
- workarounds.useSystemMemoryForConstantBuffers = IsIntel(adapterDesc.VendorId);
+ workarounds.preAddTexelFetchOffsets = (adapterDesc.VendorId == VENDOR_ID_INTEL);
+ workarounds.disableB5G6R5Support = (adapterDesc.VendorId == VENDOR_ID_INTEL);
return workarounds;
}
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.h b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.h
index 463571cf9..2690fc6f5 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.h
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.h
@@ -52,7 +52,6 @@ D3D11_STENCIL_OP ConvertStencilOp(GLenum stencilOp);
D3D11_FILTER ConvertFilter(GLenum minFilter, GLenum magFilter, float maxAnisotropy, GLenum comparisonMode);
D3D11_TEXTURE_ADDRESS_MODE ConvertTextureWrap(GLenum wrap);
-UINT ConvertMaxAnisotropy(float maxAnisotropy, D3D_FEATURE_LEVEL featureLevel);
D3D11_QUERY ConvertQueryType(GLenum queryType);
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/texture_format_table.cpp b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/texture_format_table.cpp
index a9dfec56b..6697a1177 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/texture_format_table.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/texture_format_table.cpp
@@ -15,19 +15,40 @@ namespace rx
namespace d3d11
{
-const Format &Format::getSwizzleFormat(const Renderer11DeviceCaps &deviceCaps) const
+Format::Format()
+ : internalFormat(GL_NONE),
+ format(angle::Format::Get(angle::Format::ID::NONE)),
+ texFormat(DXGI_FORMAT_UNKNOWN),
+ srvFormat(DXGI_FORMAT_UNKNOWN),
+ rtvFormat(DXGI_FORMAT_UNKNOWN),
+ dsvFormat(DXGI_FORMAT_UNKNOWN),
+ blitSRVFormat(DXGI_FORMAT_UNKNOWN),
+ swizzle(*this),
+ dataInitializerFunction(nullptr)
{
- return (swizzleFormat == internalFormat ? *this : Format::Get(swizzleFormat, deviceCaps));
}
-LoadFunctionMap Format::getLoadFunctions() const
+Format::Format(GLenum internalFormat,
+ angle::Format::ID formatID,
+ DXGI_FORMAT texFormat,
+ DXGI_FORMAT srvFormat,
+ DXGI_FORMAT rtvFormat,
+ DXGI_FORMAT dsvFormat,
+ DXGI_FORMAT blitSRVFormat,
+ GLenum swizzleFormat,
+ InitializeTextureDataFunction internalFormatInitializer,
+ const Renderer11DeviceCaps &deviceCaps)
+ : internalFormat(internalFormat),
+ format(angle::Format::Get(formatID)),
+ texFormat(texFormat),
+ srvFormat(srvFormat),
+ rtvFormat(rtvFormat),
+ dsvFormat(dsvFormat),
+ blitSRVFormat(blitSRVFormat),
+ swizzle(swizzleFormat == internalFormat ? *this : Format::Get(swizzleFormat, deviceCaps)),
+ dataInitializerFunction(internalFormatInitializer),
+ loadFunctions(GetLoadFunctionsMap(internalFormat, formatID))
{
- return GetLoadFunctionsMap(internalFormat, formatID);
-}
-
-const angle::Format &Format::format() const
-{
- return angle::Format::Get(formatID);
}
} // namespace d3d11
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/texture_format_table.h b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/texture_format_table.h
index 3be759f19..8e05a2eb8 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/texture_format_table.h
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/texture_format_table.h
@@ -32,25 +32,22 @@ namespace d3d11
// DSVs given a GL internal format.
struct Format final : angle::NonCopyable
{
- constexpr Format();
- constexpr Format(GLenum internalFormat,
- angle::Format::ID formatID,
- DXGI_FORMAT texFormat,
- DXGI_FORMAT srvFormat,
- DXGI_FORMAT rtvFormat,
- DXGI_FORMAT dsvFormat,
- DXGI_FORMAT blitSRVFormat,
- GLenum swizzleFormat,
- InitializeTextureDataFunction internalFormatInitializer);
+ Format();
+ Format(GLenum internalFormat,
+ angle::Format::ID formatID,
+ DXGI_FORMAT texFormat,
+ DXGI_FORMAT srvFormat,
+ DXGI_FORMAT rtvFormat,
+ DXGI_FORMAT dsvFormat,
+ DXGI_FORMAT blitSRVFormat,
+ GLenum swizzleFormat,
+ InitializeTextureDataFunction internalFormatInitializer,
+ const Renderer11DeviceCaps &deviceCaps);
static const Format &Get(GLenum internalFormat, const Renderer11DeviceCaps &deviceCaps);
- const Format &getSwizzleFormat(const Renderer11DeviceCaps &deviceCaps) const;
- LoadFunctionMap getLoadFunctions() const;
- const angle::Format &format() const;
-
GLenum internalFormat;
- angle::Format::ID formatID;
+ const angle::Format &format;
DXGI_FORMAT texFormat;
DXGI_FORMAT srvFormat;
@@ -59,44 +56,12 @@ struct Format final : angle::NonCopyable
DXGI_FORMAT blitSRVFormat;
- GLenum swizzleFormat;
+ const Format &swizzle;
InitializeTextureDataFunction dataInitializerFunction;
-};
-constexpr Format::Format()
- : internalFormat(GL_NONE),
- formatID(angle::Format::ID::NONE),
- texFormat(DXGI_FORMAT_UNKNOWN),
- srvFormat(DXGI_FORMAT_UNKNOWN),
- rtvFormat(DXGI_FORMAT_UNKNOWN),
- dsvFormat(DXGI_FORMAT_UNKNOWN),
- blitSRVFormat(DXGI_FORMAT_UNKNOWN),
- swizzleFormat(GL_NONE),
- dataInitializerFunction(nullptr)
-{
-}
-
-constexpr Format::Format(GLenum internalFormat,
- angle::Format::ID formatID,
- DXGI_FORMAT texFormat,
- DXGI_FORMAT srvFormat,
- DXGI_FORMAT rtvFormat,
- DXGI_FORMAT dsvFormat,
- DXGI_FORMAT blitSRVFormat,
- GLenum swizzleFormat,
- InitializeTextureDataFunction internalFormatInitializer)
- : internalFormat(internalFormat),
- formatID(formatID),
- texFormat(texFormat),
- srvFormat(srvFormat),
- rtvFormat(rtvFormat),
- dsvFormat(dsvFormat),
- blitSRVFormat(blitSRVFormat),
- swizzleFormat(swizzleFormat),
- dataInitializerFunction(internalFormatInitializer)
-{
-}
+ LoadFunctionMap loadFunctions;
+};
} // namespace d3d11
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/texture_format_table_autogen.cpp b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/texture_format_table_autogen.cpp
index dd9c8757f..d5eab7bc1 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/texture_format_table_autogen.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/texture_format_table_autogen.cpp
@@ -35,56 +35,60 @@ const Format &Format::Get(GLenum internalFormat, const Renderer11DeviceCaps &dev
{
case GL_ALPHA16F_EXT:
{
- static constexpr Format info(GL_ALPHA16F_EXT,
- angle::Format::ID::R16G16B16A16_FLOAT,
- DXGI_FORMAT_R16G16B16A16_FLOAT,
- DXGI_FORMAT_R16G16B16A16_FLOAT,
- DXGI_FORMAT_R16G16B16A16_FLOAT,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R16G16B16A16_FLOAT,
- GL_RGBA16F,
- nullptr);
+ static const Format info(GL_ALPHA16F_EXT,
+ angle::Format::ID::R16G16B16A16_FLOAT,
+ DXGI_FORMAT_R16G16B16A16_FLOAT,
+ DXGI_FORMAT_R16G16B16A16_FLOAT,
+ DXGI_FORMAT_R16G16B16A16_FLOAT,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R16G16B16A16_FLOAT,
+ GL_RGBA16F,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_ALPHA32F_EXT:
{
- static constexpr Format info(GL_ALPHA32F_EXT,
- angle::Format::ID::R32G32B32A32_FLOAT,
- DXGI_FORMAT_R32G32B32A32_FLOAT,
- DXGI_FORMAT_R32G32B32A32_FLOAT,
- DXGI_FORMAT_R32G32B32A32_FLOAT,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R32G32B32A32_FLOAT,
- GL_RGBA32F,
- nullptr);
+ static const Format info(GL_ALPHA32F_EXT,
+ angle::Format::ID::R32G32B32A32_FLOAT,
+ DXGI_FORMAT_R32G32B32A32_FLOAT,
+ DXGI_FORMAT_R32G32B32A32_FLOAT,
+ DXGI_FORMAT_R32G32B32A32_FLOAT,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R32G32B32A32_FLOAT,
+ GL_RGBA32F,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_ALPHA8_EXT:
{
if (OnlyFL10Plus(deviceCaps))
{
- static constexpr Format info(GL_ALPHA8_EXT,
- angle::Format::ID::A8_UNORM,
- DXGI_FORMAT_A8_UNORM,
- DXGI_FORMAT_A8_UNORM,
- DXGI_FORMAT_A8_UNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_A8_UNORM,
- GL_RGBA8,
- nullptr);
+ static const Format info(GL_ALPHA8_EXT,
+ angle::Format::ID::A8_UNORM,
+ DXGI_FORMAT_A8_UNORM,
+ DXGI_FORMAT_A8_UNORM,
+ DXGI_FORMAT_A8_UNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_A8_UNORM,
+ GL_RGBA8,
+ nullptr,
+ deviceCaps);
return info;
}
else
{
- static constexpr Format info(GL_ALPHA8_EXT,
- angle::Format::ID::R8G8B8A8_UNORM,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- GL_RGBA8,
- nullptr);
+ static const Format info(GL_ALPHA8_EXT,
+ angle::Format::ID::R8G8B8A8_UNORM,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ GL_RGBA8,
+ nullptr,
+ deviceCaps);
return info;
}
}
@@ -92,684 +96,736 @@ const Format &Format::Get(GLenum internalFormat, const Renderer11DeviceCaps &dev
{
if (SupportsFormat(DXGI_FORMAT_B5G6R5_UNORM, deviceCaps))
{
- static constexpr Format info(GL_BGR565_ANGLEX,
- angle::Format::ID::B5G6R5_UNORM,
- DXGI_FORMAT_B5G6R5_UNORM,
- DXGI_FORMAT_B5G6R5_UNORM,
- DXGI_FORMAT_B5G6R5_UNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_B5G6R5_UNORM,
- GL_RGBA8,
- nullptr);
+ static const Format info(GL_BGR565_ANGLEX,
+ angle::Format::ID::B5G6R5_UNORM,
+ DXGI_FORMAT_B5G6R5_UNORM,
+ DXGI_FORMAT_B5G6R5_UNORM,
+ DXGI_FORMAT_B5G6R5_UNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_B5G6R5_UNORM,
+ GL_RGBA8,
+ nullptr,
+ deviceCaps);
return info;
}
else
{
- static constexpr Format info(GL_BGR565_ANGLEX,
- angle::Format::ID::R8G8B8A8_UNORM,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- GL_RGBA8,
- nullptr);
+ static const Format info(GL_BGR565_ANGLEX,
+ angle::Format::ID::R8G8B8A8_UNORM,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ GL_RGBA8,
+ nullptr,
+ deviceCaps);
return info;
}
}
case GL_BGR5_A1_ANGLEX:
{
- static constexpr Format info(GL_BGR5_A1_ANGLEX,
- angle::Format::ID::B8G8R8A8_UNORM,
- DXGI_FORMAT_B8G8R8A8_UNORM,
- DXGI_FORMAT_B8G8R8A8_UNORM,
- DXGI_FORMAT_B8G8R8A8_UNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_B8G8R8A8_UNORM,
- GL_BGRA8_EXT,
- nullptr);
+ static const Format info(GL_BGR5_A1_ANGLEX,
+ angle::Format::ID::B8G8R8A8_UNORM,
+ DXGI_FORMAT_B8G8R8A8_UNORM,
+ DXGI_FORMAT_B8G8R8A8_UNORM,
+ DXGI_FORMAT_B8G8R8A8_UNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_B8G8R8A8_UNORM,
+ GL_BGRA8_EXT,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_BGRA4_ANGLEX:
{
- static constexpr Format info(GL_BGRA4_ANGLEX,
- angle::Format::ID::B8G8R8A8_UNORM,
- DXGI_FORMAT_B8G8R8A8_UNORM,
- DXGI_FORMAT_B8G8R8A8_UNORM,
- DXGI_FORMAT_B8G8R8A8_UNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_B8G8R8A8_UNORM,
- GL_BGRA8_EXT,
- nullptr);
+ static const Format info(GL_BGRA4_ANGLEX,
+ angle::Format::ID::B8G8R8A8_UNORM,
+ DXGI_FORMAT_B8G8R8A8_UNORM,
+ DXGI_FORMAT_B8G8R8A8_UNORM,
+ DXGI_FORMAT_B8G8R8A8_UNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_B8G8R8A8_UNORM,
+ GL_BGRA8_EXT,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_BGRA8_EXT:
{
- static constexpr Format info(GL_BGRA8_EXT,
- angle::Format::ID::B8G8R8A8_UNORM,
- DXGI_FORMAT_B8G8R8A8_UNORM,
- DXGI_FORMAT_B8G8R8A8_UNORM,
- DXGI_FORMAT_B8G8R8A8_UNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_B8G8R8A8_UNORM,
- GL_BGRA8_EXT,
- nullptr);
+ static const Format info(GL_BGRA8_EXT,
+ angle::Format::ID::B8G8R8A8_UNORM,
+ DXGI_FORMAT_B8G8R8A8_UNORM,
+ DXGI_FORMAT_B8G8R8A8_UNORM,
+ DXGI_FORMAT_B8G8R8A8_UNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_B8G8R8A8_UNORM,
+ GL_BGRA8_EXT,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_COMPRESSED_R11_EAC:
{
- static constexpr Format info(GL_COMPRESSED_R11_EAC,
- angle::Format::ID::R8_UNORM,
- DXGI_FORMAT_R8_UNORM,
- DXGI_FORMAT_R8_UNORM,
- DXGI_FORMAT_R8_UNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R8_UNORM,
- GL_RGBA8,
- nullptr);
+ static const Format info(GL_COMPRESSED_R11_EAC,
+ angle::Format::ID::R8_UNORM,
+ DXGI_FORMAT_R8_UNORM,
+ DXGI_FORMAT_R8_UNORM,
+ DXGI_FORMAT_R8_UNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R8_UNORM,
+ GL_RGBA8,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_COMPRESSED_RG11_EAC:
{
- static constexpr Format info(GL_COMPRESSED_RG11_EAC,
- angle::Format::ID::R8G8_UNORM,
- DXGI_FORMAT_R8G8_UNORM,
- DXGI_FORMAT_R8G8_UNORM,
- DXGI_FORMAT_R8G8_UNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R8G8_UNORM,
- GL_RGBA8,
- nullptr);
+ static const Format info(GL_COMPRESSED_RG11_EAC,
+ angle::Format::ID::R8G8_UNORM,
+ DXGI_FORMAT_R8G8_UNORM,
+ DXGI_FORMAT_R8G8_UNORM,
+ DXGI_FORMAT_R8G8_UNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R8G8_UNORM,
+ GL_RGBA8,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_COMPRESSED_RGB8_ETC2:
{
- static constexpr Format info(GL_COMPRESSED_RGB8_ETC2,
- angle::Format::ID::R8G8B8A8_UNORM,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- GL_RGBA8,
- Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>);
+ static const Format info(GL_COMPRESSED_RGB8_ETC2,
+ angle::Format::ID::R8G8B8A8_UNORM,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ GL_RGBA8,
+ Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>,
+ deviceCaps);
return info;
}
case GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:
{
- static constexpr Format info(GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2,
- angle::Format::ID::R8G8B8A8_UNORM,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- GL_RGBA8,
- Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>);
+ static const Format info(GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2,
+ angle::Format::ID::R8G8B8A8_UNORM,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ GL_RGBA8,
+ Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>,
+ deviceCaps);
return info;
}
case GL_COMPRESSED_RGBA8_ETC2_EAC:
{
- static constexpr Format info(GL_COMPRESSED_RGBA8_ETC2_EAC,
- angle::Format::ID::R8G8B8A8_UNORM,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- GL_RGBA8,
- nullptr);
+ static const Format info(GL_COMPRESSED_RGBA8_ETC2_EAC,
+ angle::Format::ID::R8G8B8A8_UNORM,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ GL_RGBA8,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_COMPRESSED_RGBA_ASTC_10x10_KHR:
{
- static constexpr Format info(GL_COMPRESSED_RGBA_ASTC_10x10_KHR,
- angle::Format::ID::NONE,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- GL_NONE,
- nullptr);
+ static const Format info(GL_COMPRESSED_RGBA_ASTC_10x10_KHR,
+ angle::Format::ID::NONE,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ GL_NONE,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_COMPRESSED_RGBA_ASTC_10x5_KHR:
{
- static constexpr Format info(GL_COMPRESSED_RGBA_ASTC_10x5_KHR,
- angle::Format::ID::NONE,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- GL_NONE,
- nullptr);
+ static const Format info(GL_COMPRESSED_RGBA_ASTC_10x5_KHR,
+ angle::Format::ID::NONE,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ GL_NONE,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_COMPRESSED_RGBA_ASTC_10x6_KHR:
{
- static constexpr Format info(GL_COMPRESSED_RGBA_ASTC_10x6_KHR,
- angle::Format::ID::NONE,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- GL_NONE,
- nullptr);
+ static const Format info(GL_COMPRESSED_RGBA_ASTC_10x6_KHR,
+ angle::Format::ID::NONE,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ GL_NONE,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_COMPRESSED_RGBA_ASTC_10x8_KHR:
{
- static constexpr Format info(GL_COMPRESSED_RGBA_ASTC_10x8_KHR,
- angle::Format::ID::NONE,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- GL_NONE,
- nullptr);
+ static const Format info(GL_COMPRESSED_RGBA_ASTC_10x8_KHR,
+ angle::Format::ID::NONE,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ GL_NONE,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_COMPRESSED_RGBA_ASTC_12x10_KHR:
{
- static constexpr Format info(GL_COMPRESSED_RGBA_ASTC_12x10_KHR,
- angle::Format::ID::NONE,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- GL_NONE,
- nullptr);
+ static const Format info(GL_COMPRESSED_RGBA_ASTC_12x10_KHR,
+ angle::Format::ID::NONE,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ GL_NONE,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_COMPRESSED_RGBA_ASTC_12x12_KHR:
{
- static constexpr Format info(GL_COMPRESSED_RGBA_ASTC_12x12_KHR,
- angle::Format::ID::NONE,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- GL_NONE,
- nullptr);
+ static const Format info(GL_COMPRESSED_RGBA_ASTC_12x12_KHR,
+ angle::Format::ID::NONE,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ GL_NONE,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_COMPRESSED_RGBA_ASTC_4x4_KHR:
{
- static constexpr Format info(GL_COMPRESSED_RGBA_ASTC_4x4_KHR,
- angle::Format::ID::NONE,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- GL_NONE,
- nullptr);
+ static const Format info(GL_COMPRESSED_RGBA_ASTC_4x4_KHR,
+ angle::Format::ID::NONE,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ GL_NONE,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_COMPRESSED_RGBA_ASTC_5x4_KHR:
{
- static constexpr Format info(GL_COMPRESSED_RGBA_ASTC_5x4_KHR,
- angle::Format::ID::NONE,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- GL_NONE,
- nullptr);
+ static const Format info(GL_COMPRESSED_RGBA_ASTC_5x4_KHR,
+ angle::Format::ID::NONE,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ GL_NONE,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_COMPRESSED_RGBA_ASTC_5x5_KHR:
{
- static constexpr Format info(GL_COMPRESSED_RGBA_ASTC_5x5_KHR,
- angle::Format::ID::NONE,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- GL_NONE,
- nullptr);
+ static const Format info(GL_COMPRESSED_RGBA_ASTC_5x5_KHR,
+ angle::Format::ID::NONE,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ GL_NONE,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_COMPRESSED_RGBA_ASTC_6x5_KHR:
{
- static constexpr Format info(GL_COMPRESSED_RGBA_ASTC_6x5_KHR,
- angle::Format::ID::NONE,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- GL_NONE,
- nullptr);
+ static const Format info(GL_COMPRESSED_RGBA_ASTC_6x5_KHR,
+ angle::Format::ID::NONE,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ GL_NONE,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_COMPRESSED_RGBA_ASTC_6x6_KHR:
{
- static constexpr Format info(GL_COMPRESSED_RGBA_ASTC_6x6_KHR,
- angle::Format::ID::NONE,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- GL_NONE,
- nullptr);
+ static const Format info(GL_COMPRESSED_RGBA_ASTC_6x6_KHR,
+ angle::Format::ID::NONE,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ GL_NONE,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_COMPRESSED_RGBA_ASTC_8x5_KHR:
{
- static constexpr Format info(GL_COMPRESSED_RGBA_ASTC_8x5_KHR,
- angle::Format::ID::NONE,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- GL_NONE,
- nullptr);
+ static const Format info(GL_COMPRESSED_RGBA_ASTC_8x5_KHR,
+ angle::Format::ID::NONE,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ GL_NONE,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_COMPRESSED_RGBA_ASTC_8x6_KHR:
{
- static constexpr Format info(GL_COMPRESSED_RGBA_ASTC_8x6_KHR,
- angle::Format::ID::NONE,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- GL_NONE,
- nullptr);
+ static const Format info(GL_COMPRESSED_RGBA_ASTC_8x6_KHR,
+ angle::Format::ID::NONE,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ GL_NONE,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_COMPRESSED_RGBA_ASTC_8x8_KHR:
{
- static constexpr Format info(GL_COMPRESSED_RGBA_ASTC_8x8_KHR,
- angle::Format::ID::NONE,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- GL_NONE,
- nullptr);
+ static const Format info(GL_COMPRESSED_RGBA_ASTC_8x8_KHR,
+ angle::Format::ID::NONE,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ GL_NONE,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
{
- static constexpr Format info(GL_COMPRESSED_RGBA_S3TC_DXT1_EXT,
- angle::Format::ID::BC1_RGBA_UNORM_BLOCK,
- DXGI_FORMAT_BC1_UNORM,
- DXGI_FORMAT_BC1_UNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_BC1_UNORM,
- GL_RGBA8,
- nullptr);
+ static const Format info(GL_COMPRESSED_RGBA_S3TC_DXT1_EXT,
+ angle::Format::ID::BC1_RGBA_UNORM_BLOCK,
+ DXGI_FORMAT_BC1_UNORM,
+ DXGI_FORMAT_BC1_UNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_BC1_UNORM,
+ GL_RGBA8,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE:
{
- static constexpr Format info(GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE,
- angle::Format::ID::BC2_RGBA_UNORM_BLOCK,
- DXGI_FORMAT_BC2_UNORM,
- DXGI_FORMAT_BC2_UNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_BC2_UNORM,
- GL_RGBA8,
- nullptr);
+ static const Format info(GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE,
+ angle::Format::ID::BC2_RGBA_UNORM_BLOCK,
+ DXGI_FORMAT_BC2_UNORM,
+ DXGI_FORMAT_BC2_UNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_BC2_UNORM,
+ GL_RGBA8,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE:
{
- static constexpr Format info(GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE,
- angle::Format::ID::BC3_RGBA_UNORM_BLOCK,
- DXGI_FORMAT_BC3_UNORM,
- DXGI_FORMAT_BC3_UNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_BC3_UNORM,
- GL_RGBA8,
- nullptr);
+ static const Format info(GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE,
+ angle::Format::ID::BC3_RGBA_UNORM_BLOCK,
+ DXGI_FORMAT_BC3_UNORM,
+ DXGI_FORMAT_BC3_UNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_BC3_UNORM,
+ GL_RGBA8,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
{
- static constexpr Format info(GL_COMPRESSED_RGB_S3TC_DXT1_EXT,
- angle::Format::ID::BC1_RGB_UNORM_BLOCK,
- DXGI_FORMAT_BC1_UNORM,
- DXGI_FORMAT_BC1_UNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_BC1_UNORM,
- GL_RGBA8,
- nullptr);
+ static const Format info(GL_COMPRESSED_RGB_S3TC_DXT1_EXT,
+ angle::Format::ID::BC1_RGB_UNORM_BLOCK,
+ DXGI_FORMAT_BC1_UNORM,
+ DXGI_FORMAT_BC1_UNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_BC1_UNORM,
+ GL_RGBA8,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_COMPRESSED_SIGNED_R11_EAC:
{
- static constexpr Format info(GL_COMPRESSED_SIGNED_R11_EAC,
- angle::Format::ID::R8_SNORM,
- DXGI_FORMAT_R8_SNORM,
- DXGI_FORMAT_R8_SNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R8_SNORM,
- GL_RGBA8_SNORM,
- nullptr);
+ static const Format info(GL_COMPRESSED_SIGNED_R11_EAC,
+ angle::Format::ID::R8_SNORM,
+ DXGI_FORMAT_R8_SNORM,
+ DXGI_FORMAT_R8_SNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R8_SNORM,
+ GL_RGBA8_SNORM,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_COMPRESSED_SIGNED_RG11_EAC:
{
- static constexpr Format info(GL_COMPRESSED_SIGNED_RG11_EAC,
- angle::Format::ID::R8G8_SNORM,
- DXGI_FORMAT_R8G8_SNORM,
- DXGI_FORMAT_R8G8_SNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R8G8_SNORM,
- GL_RGBA8_SNORM,
- nullptr);
+ static const Format info(GL_COMPRESSED_SIGNED_RG11_EAC,
+ angle::Format::ID::R8G8_SNORM,
+ DXGI_FORMAT_R8G8_SNORM,
+ DXGI_FORMAT_R8G8_SNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R8G8_SNORM,
+ GL_RGBA8_SNORM,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:
{
- static constexpr Format info(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR,
- angle::Format::ID::NONE,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- GL_NONE,
- nullptr);
+ static const Format info(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR,
+ angle::Format::ID::NONE,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ GL_NONE,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:
{
- static constexpr Format info(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR,
- angle::Format::ID::NONE,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- GL_NONE,
- nullptr);
+ static const Format info(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR,
+ angle::Format::ID::NONE,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ GL_NONE,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:
{
- static constexpr Format info(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR,
- angle::Format::ID::NONE,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- GL_NONE,
- nullptr);
+ static const Format info(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR,
+ angle::Format::ID::NONE,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ GL_NONE,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:
{
- static constexpr Format info(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR,
- angle::Format::ID::NONE,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- GL_NONE,
- nullptr);
+ static const Format info(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR,
+ angle::Format::ID::NONE,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ GL_NONE,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:
{
- static constexpr Format info(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR,
- angle::Format::ID::NONE,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- GL_NONE,
- nullptr);
+ static const Format info(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR,
+ angle::Format::ID::NONE,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ GL_NONE,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:
{
- static constexpr Format info(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR,
- angle::Format::ID::NONE,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- GL_NONE,
- nullptr);
+ static const Format info(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR,
+ angle::Format::ID::NONE,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ GL_NONE,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:
{
- static constexpr Format info(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR,
- angle::Format::ID::NONE,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- GL_NONE,
- nullptr);
+ static const Format info(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR,
+ angle::Format::ID::NONE,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ GL_NONE,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:
{
- static constexpr Format info(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR,
- angle::Format::ID::NONE,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- GL_NONE,
- nullptr);
+ static const Format info(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR,
+ angle::Format::ID::NONE,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ GL_NONE,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:
{
- static constexpr Format info(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR,
- angle::Format::ID::NONE,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- GL_NONE,
- nullptr);
+ static const Format info(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR,
+ angle::Format::ID::NONE,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ GL_NONE,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:
{
- static constexpr Format info(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR,
- angle::Format::ID::NONE,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- GL_NONE,
- nullptr);
+ static const Format info(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR,
+ angle::Format::ID::NONE,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ GL_NONE,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:
{
- static constexpr Format info(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR,
- angle::Format::ID::NONE,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- GL_NONE,
- nullptr);
+ static const Format info(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR,
+ angle::Format::ID::NONE,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ GL_NONE,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:
{
- static constexpr Format info(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR,
- angle::Format::ID::NONE,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- GL_NONE,
- nullptr);
+ static const Format info(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR,
+ angle::Format::ID::NONE,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ GL_NONE,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:
{
- static constexpr Format info(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR,
- angle::Format::ID::NONE,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- GL_NONE,
- nullptr);
+ static const Format info(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR,
+ angle::Format::ID::NONE,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ GL_NONE,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:
{
- static constexpr Format info(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR,
- angle::Format::ID::NONE,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- GL_NONE,
- nullptr);
+ static const Format info(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR,
+ angle::Format::ID::NONE,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ GL_NONE,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:
{
- static constexpr Format info(GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC,
- angle::Format::ID::R8G8B8A8_UNORM_SRGB,
- DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
- DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
- DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
- GL_SRGB8_ALPHA8,
- nullptr);
+ static const Format info(GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC,
+ angle::Format::ID::R8G8B8A8_UNORM_SRGB,
+ DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
+ DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
+ DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
+ GL_SRGB8_ALPHA8,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_COMPRESSED_SRGB8_ETC2:
{
- static constexpr Format info(GL_COMPRESSED_SRGB8_ETC2,
- angle::Format::ID::R8G8B8A8_UNORM_SRGB,
- DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
- DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
- DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
- GL_SRGB8_ALPHA8,
- Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>);
+ static const Format info(GL_COMPRESSED_SRGB8_ETC2,
+ angle::Format::ID::R8G8B8A8_UNORM_SRGB,
+ DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
+ DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
+ DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
+ GL_SRGB8_ALPHA8,
+ Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>,
+ deviceCaps);
return info;
}
case GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:
{
- static constexpr Format info(GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2,
- angle::Format::ID::R8G8B8A8_UNORM_SRGB,
- DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
- DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
- DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
- GL_SRGB8_ALPHA8,
- nullptr);
+ static const Format info(GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2,
+ angle::Format::ID::R8G8B8A8_UNORM_SRGB,
+ DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
+ DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
+ DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
+ GL_SRGB8_ALPHA8,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_DEPTH24_STENCIL8:
{
if (OnlyFL10Plus(deviceCaps))
{
- static constexpr Format info(GL_DEPTH24_STENCIL8,
- angle::Format::ID::D24_UNORM_S8_UINT,
- DXGI_FORMAT_R24G8_TYPELESS,
- DXGI_FORMAT_R24_UNORM_X8_TYPELESS,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_D24_UNORM_S8_UINT,
- DXGI_FORMAT_R24_UNORM_X8_TYPELESS,
- GL_RGBA32F,
- nullptr);
+ static const Format info(GL_DEPTH24_STENCIL8,
+ angle::Format::ID::D24_UNORM_S8_UINT,
+ DXGI_FORMAT_R24G8_TYPELESS,
+ DXGI_FORMAT_R24_UNORM_X8_TYPELESS,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_D24_UNORM_S8_UINT,
+ DXGI_FORMAT_R24_UNORM_X8_TYPELESS,
+ GL_RGBA32F,
+ nullptr,
+ deviceCaps);
return info;
}
else
{
- static constexpr Format info(GL_DEPTH24_STENCIL8,
- angle::Format::ID::D24_UNORM_S8_UINT,
- DXGI_FORMAT_D24_UNORM_S8_UINT,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_D24_UNORM_S8_UINT,
- DXGI_FORMAT_UNKNOWN,
- GL_RGBA32F,
- nullptr);
+ static const Format info(GL_DEPTH24_STENCIL8,
+ angle::Format::ID::D24_UNORM_S8_UINT,
+ DXGI_FORMAT_D24_UNORM_S8_UINT,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_D24_UNORM_S8_UINT,
+ DXGI_FORMAT_UNKNOWN,
+ GL_RGBA32F,
+ nullptr,
+ deviceCaps);
return info;
}
}
case GL_DEPTH32F_STENCIL8:
{
- static constexpr Format info(GL_DEPTH32F_STENCIL8,
- angle::Format::ID::D32_FLOAT_S8X24_UINT,
- DXGI_FORMAT_R32G8X24_TYPELESS,
- DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_D32_FLOAT_S8X24_UINT,
- DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS,
- GL_RGBA32F,
- nullptr);
+ static const Format info(GL_DEPTH32F_STENCIL8,
+ angle::Format::ID::D32_FLOAT_S8X24_UINT,
+ DXGI_FORMAT_R32G8X24_TYPELESS,
+ DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_D32_FLOAT_S8X24_UINT,
+ DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS,
+ GL_RGBA32F,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_DEPTH_COMPONENT16:
{
if (OnlyFL10Plus(deviceCaps))
{
- static constexpr Format info(GL_DEPTH_COMPONENT16,
- angle::Format::ID::D16_UNORM,
- DXGI_FORMAT_R16_TYPELESS,
- DXGI_FORMAT_R16_UNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_D16_UNORM,
- DXGI_FORMAT_R16_UNORM,
- GL_RGBA16_EXT,
- nullptr);
+ static const Format info(GL_DEPTH_COMPONENT16,
+ angle::Format::ID::D16_UNORM,
+ DXGI_FORMAT_R16_TYPELESS,
+ DXGI_FORMAT_R16_UNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_D16_UNORM,
+ DXGI_FORMAT_R16_UNORM,
+ GL_RGBA16_EXT,
+ nullptr,
+ deviceCaps);
return info;
}
else
{
- static constexpr Format info(GL_DEPTH_COMPONENT16,
- angle::Format::ID::D16_UNORM,
- DXGI_FORMAT_D16_UNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_D16_UNORM,
- DXGI_FORMAT_UNKNOWN,
- GL_RGBA16_EXT,
- nullptr);
+ static const Format info(GL_DEPTH_COMPONENT16,
+ angle::Format::ID::D16_UNORM,
+ DXGI_FORMAT_D16_UNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_D16_UNORM,
+ DXGI_FORMAT_UNKNOWN,
+ GL_RGBA16_EXT,
+ nullptr,
+ deviceCaps);
return info;
}
}
@@ -777,684 +833,736 @@ const Format &Format::Get(GLenum internalFormat, const Renderer11DeviceCaps &dev
{
if (OnlyFL10Plus(deviceCaps))
{
- static constexpr Format info(GL_DEPTH_COMPONENT24,
- angle::Format::ID::D24_UNORM_S8_UINT,
- DXGI_FORMAT_R24G8_TYPELESS,
- DXGI_FORMAT_R24_UNORM_X8_TYPELESS,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_D24_UNORM_S8_UINT,
- DXGI_FORMAT_R24_UNORM_X8_TYPELESS,
- GL_RGBA32F,
- nullptr);
+ static const Format info(GL_DEPTH_COMPONENT24,
+ angle::Format::ID::D24_UNORM_S8_UINT,
+ DXGI_FORMAT_R24G8_TYPELESS,
+ DXGI_FORMAT_R24_UNORM_X8_TYPELESS,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_D24_UNORM_S8_UINT,
+ DXGI_FORMAT_R24_UNORM_X8_TYPELESS,
+ GL_RGBA32F,
+ nullptr,
+ deviceCaps);
return info;
}
else
{
- static constexpr Format info(GL_DEPTH_COMPONENT24,
- angle::Format::ID::D24_UNORM_S8_UINT,
- DXGI_FORMAT_D24_UNORM_S8_UINT,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_D24_UNORM_S8_UINT,
- DXGI_FORMAT_UNKNOWN,
- GL_RGBA32F,
- nullptr);
+ static const Format info(GL_DEPTH_COMPONENT24,
+ angle::Format::ID::D24_UNORM_S8_UINT,
+ DXGI_FORMAT_D24_UNORM_S8_UINT,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_D24_UNORM_S8_UINT,
+ DXGI_FORMAT_UNKNOWN,
+ GL_RGBA32F,
+ nullptr,
+ deviceCaps);
return info;
}
}
case GL_DEPTH_COMPONENT32F:
{
- static constexpr Format info(GL_DEPTH_COMPONENT32F,
- angle::Format::ID::D32_FLOAT,
- DXGI_FORMAT_R32_TYPELESS,
- DXGI_FORMAT_R32_FLOAT,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_D32_FLOAT,
- DXGI_FORMAT_R32_FLOAT,
- GL_RGBA32F,
- nullptr);
+ static const Format info(GL_DEPTH_COMPONENT32F,
+ angle::Format::ID::D32_FLOAT,
+ DXGI_FORMAT_R32_TYPELESS,
+ DXGI_FORMAT_R32_FLOAT,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_D32_FLOAT,
+ DXGI_FORMAT_R32_FLOAT,
+ GL_RGBA32F,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_DEPTH_COMPONENT32_OES:
{
if (OnlyFL10Plus(deviceCaps))
{
- static constexpr Format info(GL_DEPTH_COMPONENT32_OES,
- angle::Format::ID::D24_UNORM_S8_UINT,
- DXGI_FORMAT_R24G8_TYPELESS,
- DXGI_FORMAT_R24_UNORM_X8_TYPELESS,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_D24_UNORM_S8_UINT,
- DXGI_FORMAT_R24_UNORM_X8_TYPELESS,
- GL_RGBA32F,
- nullptr);
+ static const Format info(GL_DEPTH_COMPONENT32_OES,
+ angle::Format::ID::D24_UNORM_S8_UINT,
+ DXGI_FORMAT_R24G8_TYPELESS,
+ DXGI_FORMAT_R24_UNORM_X8_TYPELESS,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_D24_UNORM_S8_UINT,
+ DXGI_FORMAT_R24_UNORM_X8_TYPELESS,
+ GL_RGBA32F,
+ nullptr,
+ deviceCaps);
return info;
}
else
{
- static constexpr Format info(GL_DEPTH_COMPONENT32_OES,
- angle::Format::ID::D24_UNORM_S8_UINT,
- DXGI_FORMAT_D24_UNORM_S8_UINT,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_D24_UNORM_S8_UINT,
- DXGI_FORMAT_UNKNOWN,
- GL_RGBA32F,
- nullptr);
+ static const Format info(GL_DEPTH_COMPONENT32_OES,
+ angle::Format::ID::D24_UNORM_S8_UINT,
+ DXGI_FORMAT_D24_UNORM_S8_UINT,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_D24_UNORM_S8_UINT,
+ DXGI_FORMAT_UNKNOWN,
+ GL_RGBA32F,
+ nullptr,
+ deviceCaps);
return info;
}
}
case GL_ETC1_RGB8_LOSSY_DECODE_ANGLE:
{
- static constexpr Format info(GL_ETC1_RGB8_LOSSY_DECODE_ANGLE,
- angle::Format::ID::BC1_RGB_UNORM_BLOCK,
- DXGI_FORMAT_BC1_UNORM,
- DXGI_FORMAT_BC1_UNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_BC1_UNORM,
- GL_RGBA8,
- nullptr);
+ static const Format info(GL_ETC1_RGB8_LOSSY_DECODE_ANGLE,
+ angle::Format::ID::BC1_RGB_UNORM_BLOCK,
+ DXGI_FORMAT_BC1_UNORM,
+ DXGI_FORMAT_BC1_UNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_BC1_UNORM,
+ GL_RGBA8,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_ETC1_RGB8_OES:
{
- static constexpr Format info(GL_ETC1_RGB8_OES,
- angle::Format::ID::R8G8B8A8_UNORM,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- GL_RGBA8,
- Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>);
+ static const Format info(GL_ETC1_RGB8_OES,
+ angle::Format::ID::R8G8B8A8_UNORM,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ GL_RGBA8,
+ Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>,
+ deviceCaps);
return info;
}
case GL_LUMINANCE16F_EXT:
{
- static constexpr Format info(GL_LUMINANCE16F_EXT,
- angle::Format::ID::R16G16B16A16_FLOAT,
- DXGI_FORMAT_R16G16B16A16_FLOAT,
- DXGI_FORMAT_R16G16B16A16_FLOAT,
- DXGI_FORMAT_R16G16B16A16_FLOAT,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R16G16B16A16_FLOAT,
- GL_RGBA16F,
- Initialize4ComponentData<GLhalf, 0x0000, 0x0000, 0x0000, gl::Float16One>);
+ static const Format info(GL_LUMINANCE16F_EXT,
+ angle::Format::ID::R16G16B16A16_FLOAT,
+ DXGI_FORMAT_R16G16B16A16_FLOAT,
+ DXGI_FORMAT_R16G16B16A16_FLOAT,
+ DXGI_FORMAT_R16G16B16A16_FLOAT,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R16G16B16A16_FLOAT,
+ GL_RGBA16F,
+ Initialize4ComponentData<GLhalf, 0x0000, 0x0000, 0x0000, gl::Float16One>,
+ deviceCaps);
return info;
}
case GL_LUMINANCE32F_EXT:
{
- static constexpr Format info(GL_LUMINANCE32F_EXT,
- angle::Format::ID::R32G32B32A32_FLOAT,
- DXGI_FORMAT_R32G32B32A32_FLOAT,
- DXGI_FORMAT_R32G32B32A32_FLOAT,
- DXGI_FORMAT_R32G32B32A32_FLOAT,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R32G32B32A32_FLOAT,
- GL_RGBA32F,
- Initialize4ComponentData<GLfloat, 0x00000000, 0x00000000, 0x00000000, gl::Float32One>);
+ static const Format info(GL_LUMINANCE32F_EXT,
+ angle::Format::ID::R32G32B32A32_FLOAT,
+ DXGI_FORMAT_R32G32B32A32_FLOAT,
+ DXGI_FORMAT_R32G32B32A32_FLOAT,
+ DXGI_FORMAT_R32G32B32A32_FLOAT,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R32G32B32A32_FLOAT,
+ GL_RGBA32F,
+ Initialize4ComponentData<GLfloat, 0x00000000, 0x00000000, 0x00000000, gl::Float32One>,
+ deviceCaps);
return info;
}
case GL_LUMINANCE8_ALPHA8_EXT:
{
- static constexpr Format info(GL_LUMINANCE8_ALPHA8_EXT,
- angle::Format::ID::R8G8B8A8_UNORM,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- GL_RGBA8,
- nullptr);
+ static const Format info(GL_LUMINANCE8_ALPHA8_EXT,
+ angle::Format::ID::R8G8B8A8_UNORM,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ GL_RGBA8,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_LUMINANCE8_EXT:
{
- static constexpr Format info(GL_LUMINANCE8_EXT,
- angle::Format::ID::R8G8B8A8_UNORM,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- GL_RGBA8,
- Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>);
+ static const Format info(GL_LUMINANCE8_EXT,
+ angle::Format::ID::R8G8B8A8_UNORM,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ GL_RGBA8,
+ Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>,
+ deviceCaps);
return info;
}
case GL_LUMINANCE_ALPHA16F_EXT:
{
- static constexpr Format info(GL_LUMINANCE_ALPHA16F_EXT,
- angle::Format::ID::R16G16B16A16_FLOAT,
- DXGI_FORMAT_R16G16B16A16_FLOAT,
- DXGI_FORMAT_R16G16B16A16_FLOAT,
- DXGI_FORMAT_R16G16B16A16_FLOAT,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R16G16B16A16_FLOAT,
- GL_RGBA16F,
- nullptr);
+ static const Format info(GL_LUMINANCE_ALPHA16F_EXT,
+ angle::Format::ID::R16G16B16A16_FLOAT,
+ DXGI_FORMAT_R16G16B16A16_FLOAT,
+ DXGI_FORMAT_R16G16B16A16_FLOAT,
+ DXGI_FORMAT_R16G16B16A16_FLOAT,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R16G16B16A16_FLOAT,
+ GL_RGBA16F,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_LUMINANCE_ALPHA32F_EXT:
{
- static constexpr Format info(GL_LUMINANCE_ALPHA32F_EXT,
- angle::Format::ID::R32G32B32A32_FLOAT,
- DXGI_FORMAT_R32G32B32A32_FLOAT,
- DXGI_FORMAT_R32G32B32A32_FLOAT,
- DXGI_FORMAT_R32G32B32A32_FLOAT,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R32G32B32A32_FLOAT,
- GL_RGBA32F,
- nullptr);
+ static const Format info(GL_LUMINANCE_ALPHA32F_EXT,
+ angle::Format::ID::R32G32B32A32_FLOAT,
+ DXGI_FORMAT_R32G32B32A32_FLOAT,
+ DXGI_FORMAT_R32G32B32A32_FLOAT,
+ DXGI_FORMAT_R32G32B32A32_FLOAT,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R32G32B32A32_FLOAT,
+ GL_RGBA32F,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_NONE:
{
- static constexpr Format info(GL_NONE,
- angle::Format::ID::NONE,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- GL_NONE,
- nullptr);
+ static const Format info(GL_NONE,
+ angle::Format::ID::NONE,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ GL_NONE,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_R11F_G11F_B10F:
{
- static constexpr Format info(GL_R11F_G11F_B10F,
- angle::Format::ID::R11G11B10_FLOAT,
- DXGI_FORMAT_R11G11B10_FLOAT,
- DXGI_FORMAT_R11G11B10_FLOAT,
- DXGI_FORMAT_R11G11B10_FLOAT,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R11G11B10_FLOAT,
- GL_RGBA16F_EXT,
- nullptr);
+ static const Format info(GL_R11F_G11F_B10F,
+ angle::Format::ID::R11G11B10_FLOAT,
+ DXGI_FORMAT_R11G11B10_FLOAT,
+ DXGI_FORMAT_R11G11B10_FLOAT,
+ DXGI_FORMAT_R11G11B10_FLOAT,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R11G11B10_FLOAT,
+ GL_RGBA16F_EXT,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_R16F:
{
- static constexpr Format info(GL_R16F,
- angle::Format::ID::R16_FLOAT,
- DXGI_FORMAT_R16_FLOAT,
- DXGI_FORMAT_R16_FLOAT,
- DXGI_FORMAT_R16_FLOAT,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R16_FLOAT,
- GL_RGBA16F_EXT,
- nullptr);
+ static const Format info(GL_R16F,
+ angle::Format::ID::R16_FLOAT,
+ DXGI_FORMAT_R16_FLOAT,
+ DXGI_FORMAT_R16_FLOAT,
+ DXGI_FORMAT_R16_FLOAT,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R16_FLOAT,
+ GL_RGBA16F_EXT,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_R16I:
{
- static constexpr Format info(GL_R16I,
- angle::Format::ID::R16_SINT,
- DXGI_FORMAT_R16_SINT,
- DXGI_FORMAT_R16_SINT,
- DXGI_FORMAT_R16_SINT,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R16_SINT,
- GL_RGBA16I,
- nullptr);
+ static const Format info(GL_R16I,
+ angle::Format::ID::R16_SINT,
+ DXGI_FORMAT_R16_SINT,
+ DXGI_FORMAT_R16_SINT,
+ DXGI_FORMAT_R16_SINT,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R16_SINT,
+ GL_RGBA16I,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_R16UI:
{
- static constexpr Format info(GL_R16UI,
- angle::Format::ID::R16_UINT,
- DXGI_FORMAT_R16_UINT,
- DXGI_FORMAT_R16_UINT,
- DXGI_FORMAT_R16_UINT,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R16_UINT,
- GL_RGBA16I,
- nullptr);
+ static const Format info(GL_R16UI,
+ angle::Format::ID::R16_UINT,
+ DXGI_FORMAT_R16_UINT,
+ DXGI_FORMAT_R16_UINT,
+ DXGI_FORMAT_R16_UINT,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R16_UINT,
+ GL_RGBA16I,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_R16_EXT:
{
- static constexpr Format info(GL_R16_EXT,
- angle::Format::ID::R16_UNORM,
- DXGI_FORMAT_R16_UNORM,
- DXGI_FORMAT_R16_UNORM,
- DXGI_FORMAT_R16_UNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R16_UNORM,
- GL_RGBA16_EXT,
- nullptr);
+ static const Format info(GL_R16_EXT,
+ angle::Format::ID::R16_UNORM,
+ DXGI_FORMAT_R16_UNORM,
+ DXGI_FORMAT_R16_UNORM,
+ DXGI_FORMAT_R16_UNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R16_UNORM,
+ GL_RGBA16_EXT,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_R16_SNORM_EXT:
{
- static constexpr Format info(GL_R16_SNORM_EXT,
- angle::Format::ID::R16_SNORM,
- DXGI_FORMAT_R16_SNORM,
- DXGI_FORMAT_R16_SNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R16_SNORM,
- GL_RGBA16_SNORM_EXT,
- nullptr);
+ static const Format info(GL_R16_SNORM_EXT,
+ angle::Format::ID::R16_SNORM,
+ DXGI_FORMAT_R16_SNORM,
+ DXGI_FORMAT_R16_SNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R16_SNORM,
+ GL_RGBA16_SNORM_EXT,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_R32F:
{
- static constexpr Format info(GL_R32F,
- angle::Format::ID::R32_FLOAT,
- DXGI_FORMAT_R32_FLOAT,
- DXGI_FORMAT_R32_FLOAT,
- DXGI_FORMAT_R32_FLOAT,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R32_FLOAT,
- GL_RGBA32F,
- nullptr);
+ static const Format info(GL_R32F,
+ angle::Format::ID::R32_FLOAT,
+ DXGI_FORMAT_R32_FLOAT,
+ DXGI_FORMAT_R32_FLOAT,
+ DXGI_FORMAT_R32_FLOAT,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R32_FLOAT,
+ GL_RGBA32F,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_R32I:
{
- static constexpr Format info(GL_R32I,
- angle::Format::ID::R32_SINT,
- DXGI_FORMAT_R32_SINT,
- DXGI_FORMAT_R32_SINT,
- DXGI_FORMAT_R32_SINT,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R32_SINT,
- GL_RGBA32I,
- nullptr);
+ static const Format info(GL_R32I,
+ angle::Format::ID::R32_SINT,
+ DXGI_FORMAT_R32_SINT,
+ DXGI_FORMAT_R32_SINT,
+ DXGI_FORMAT_R32_SINT,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R32_SINT,
+ GL_RGBA32I,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_R32UI:
{
- static constexpr Format info(GL_R32UI,
- angle::Format::ID::R32_UINT,
- DXGI_FORMAT_R32_UINT,
- DXGI_FORMAT_R32_UINT,
- DXGI_FORMAT_R32_UINT,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R32_UINT,
- GL_RGBA32I,
- nullptr);
+ static const Format info(GL_R32UI,
+ angle::Format::ID::R32_UINT,
+ DXGI_FORMAT_R32_UINT,
+ DXGI_FORMAT_R32_UINT,
+ DXGI_FORMAT_R32_UINT,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R32_UINT,
+ GL_RGBA32I,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_R8:
{
- static constexpr Format info(GL_R8,
- angle::Format::ID::R8_UNORM,
- DXGI_FORMAT_R8_UNORM,
- DXGI_FORMAT_R8_UNORM,
- DXGI_FORMAT_R8_UNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R8_UNORM,
- GL_RGBA8,
- nullptr);
+ static const Format info(GL_R8,
+ angle::Format::ID::R8_UNORM,
+ DXGI_FORMAT_R8_UNORM,
+ DXGI_FORMAT_R8_UNORM,
+ DXGI_FORMAT_R8_UNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R8_UNORM,
+ GL_RGBA8,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_R8I:
{
- static constexpr Format info(GL_R8I,
- angle::Format::ID::R8_SINT,
- DXGI_FORMAT_R8_SINT,
- DXGI_FORMAT_R8_SINT,
- DXGI_FORMAT_R8_SINT,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R8_SINT,
- GL_RGBA8I,
- nullptr);
+ static const Format info(GL_R8I,
+ angle::Format::ID::R8_SINT,
+ DXGI_FORMAT_R8_SINT,
+ DXGI_FORMAT_R8_SINT,
+ DXGI_FORMAT_R8_SINT,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R8_SINT,
+ GL_RGBA8I,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_R8UI:
{
- static constexpr Format info(GL_R8UI,
- angle::Format::ID::R8_UINT,
- DXGI_FORMAT_R8_UINT,
- DXGI_FORMAT_R8_UINT,
- DXGI_FORMAT_R8_UINT,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R8_UINT,
- GL_RGBA8I,
- nullptr);
+ static const Format info(GL_R8UI,
+ angle::Format::ID::R8_UINT,
+ DXGI_FORMAT_R8_UINT,
+ DXGI_FORMAT_R8_UINT,
+ DXGI_FORMAT_R8_UINT,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R8_UINT,
+ GL_RGBA8I,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_R8_SNORM:
{
- static constexpr Format info(GL_R8_SNORM,
- angle::Format::ID::R8_SNORM,
- DXGI_FORMAT_R8_SNORM,
- DXGI_FORMAT_R8_SNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R8_SNORM,
- GL_RGBA8_SNORM,
- nullptr);
+ static const Format info(GL_R8_SNORM,
+ angle::Format::ID::R8_SNORM,
+ DXGI_FORMAT_R8_SNORM,
+ DXGI_FORMAT_R8_SNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R8_SNORM,
+ GL_RGBA8_SNORM,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_RG16F:
{
- static constexpr Format info(GL_RG16F,
- angle::Format::ID::R16G16_FLOAT,
- DXGI_FORMAT_R16G16_FLOAT,
- DXGI_FORMAT_R16G16_FLOAT,
- DXGI_FORMAT_R16G16_FLOAT,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R16G16_FLOAT,
- GL_RGBA16F_EXT,
- nullptr);
+ static const Format info(GL_RG16F,
+ angle::Format::ID::R16G16_FLOAT,
+ DXGI_FORMAT_R16G16_FLOAT,
+ DXGI_FORMAT_R16G16_FLOAT,
+ DXGI_FORMAT_R16G16_FLOAT,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R16G16_FLOAT,
+ GL_RGBA16F_EXT,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_RG16I:
{
- static constexpr Format info(GL_RG16I,
- angle::Format::ID::R16G16_SINT,
- DXGI_FORMAT_R16G16_SINT,
- DXGI_FORMAT_R16G16_SINT,
- DXGI_FORMAT_R16G16_SINT,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R16G16_SINT,
- GL_RGBA16I,
- nullptr);
+ static const Format info(GL_RG16I,
+ angle::Format::ID::R16G16_SINT,
+ DXGI_FORMAT_R16G16_SINT,
+ DXGI_FORMAT_R16G16_SINT,
+ DXGI_FORMAT_R16G16_SINT,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R16G16_SINT,
+ GL_RGBA16I,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_RG16UI:
{
- static constexpr Format info(GL_RG16UI,
- angle::Format::ID::R16G16_UINT,
- DXGI_FORMAT_R16G16_UINT,
- DXGI_FORMAT_R16G16_UINT,
- DXGI_FORMAT_R16G16_UINT,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R16G16_UINT,
- GL_RGBA16I,
- nullptr);
+ static const Format info(GL_RG16UI,
+ angle::Format::ID::R16G16_UINT,
+ DXGI_FORMAT_R16G16_UINT,
+ DXGI_FORMAT_R16G16_UINT,
+ DXGI_FORMAT_R16G16_UINT,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R16G16_UINT,
+ GL_RGBA16I,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_RG16_EXT:
{
- static constexpr Format info(GL_RG16_EXT,
- angle::Format::ID::R16G16_UNORM,
- DXGI_FORMAT_R16G16_UNORM,
- DXGI_FORMAT_R16G16_UNORM,
- DXGI_FORMAT_R16G16_UNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R16G16_UNORM,
- GL_RGBA16_EXT,
- nullptr);
+ static const Format info(GL_RG16_EXT,
+ angle::Format::ID::R16G16_UNORM,
+ DXGI_FORMAT_R16G16_UNORM,
+ DXGI_FORMAT_R16G16_UNORM,
+ DXGI_FORMAT_R16G16_UNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R16G16_UNORM,
+ GL_RGBA16_EXT,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_RG16_SNORM_EXT:
{
- static constexpr Format info(GL_RG16_SNORM_EXT,
- angle::Format::ID::R16G16_SNORM,
- DXGI_FORMAT_R16G16_SNORM,
- DXGI_FORMAT_R16G16_SNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R16G16_SNORM,
- GL_RGBA16_SNORM_EXT,
- nullptr);
+ static const Format info(GL_RG16_SNORM_EXT,
+ angle::Format::ID::R16G16_SNORM,
+ DXGI_FORMAT_R16G16_SNORM,
+ DXGI_FORMAT_R16G16_SNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R16G16_SNORM,
+ GL_RGBA16_SNORM_EXT,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_RG32F:
{
- static constexpr Format info(GL_RG32F,
- angle::Format::ID::R32G32_FLOAT,
- DXGI_FORMAT_R32G32_FLOAT,
- DXGI_FORMAT_R32G32_FLOAT,
- DXGI_FORMAT_R32G32_FLOAT,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R32G32_FLOAT,
- GL_RGBA32F,
- nullptr);
+ static const Format info(GL_RG32F,
+ angle::Format::ID::R32G32_FLOAT,
+ DXGI_FORMAT_R32G32_FLOAT,
+ DXGI_FORMAT_R32G32_FLOAT,
+ DXGI_FORMAT_R32G32_FLOAT,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R32G32_FLOAT,
+ GL_RGBA32F,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_RG32I:
{
- static constexpr Format info(GL_RG32I,
- angle::Format::ID::R32G32_SINT,
- DXGI_FORMAT_R32G32_SINT,
- DXGI_FORMAT_R32G32_SINT,
- DXGI_FORMAT_R32G32_SINT,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R32G32_SINT,
- GL_RGBA32I,
- nullptr);
+ static const Format info(GL_RG32I,
+ angle::Format::ID::R32G32_SINT,
+ DXGI_FORMAT_R32G32_SINT,
+ DXGI_FORMAT_R32G32_SINT,
+ DXGI_FORMAT_R32G32_SINT,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R32G32_SINT,
+ GL_RGBA32I,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_RG32UI:
{
- static constexpr Format info(GL_RG32UI,
- angle::Format::ID::R32G32_UINT,
- DXGI_FORMAT_R32G32_UINT,
- DXGI_FORMAT_R32G32_UINT,
- DXGI_FORMAT_R32G32_UINT,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R32G32_UINT,
- GL_RGBA32I,
- nullptr);
+ static const Format info(GL_RG32UI,
+ angle::Format::ID::R32G32_UINT,
+ DXGI_FORMAT_R32G32_UINT,
+ DXGI_FORMAT_R32G32_UINT,
+ DXGI_FORMAT_R32G32_UINT,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R32G32_UINT,
+ GL_RGBA32I,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_RG8:
{
- static constexpr Format info(GL_RG8,
- angle::Format::ID::R8G8_UNORM,
- DXGI_FORMAT_R8G8_UNORM,
- DXGI_FORMAT_R8G8_UNORM,
- DXGI_FORMAT_R8G8_UNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R8G8_UNORM,
- GL_RGBA8,
- nullptr);
+ static const Format info(GL_RG8,
+ angle::Format::ID::R8G8_UNORM,
+ DXGI_FORMAT_R8G8_UNORM,
+ DXGI_FORMAT_R8G8_UNORM,
+ DXGI_FORMAT_R8G8_UNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R8G8_UNORM,
+ GL_RGBA8,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_RG8I:
{
- static constexpr Format info(GL_RG8I,
- angle::Format::ID::R8G8_SINT,
- DXGI_FORMAT_R8G8_SINT,
- DXGI_FORMAT_R8G8_SINT,
- DXGI_FORMAT_R8G8_SINT,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R8G8_SINT,
- GL_RGBA8I,
- nullptr);
+ static const Format info(GL_RG8I,
+ angle::Format::ID::R8G8_SINT,
+ DXGI_FORMAT_R8G8_SINT,
+ DXGI_FORMAT_R8G8_SINT,
+ DXGI_FORMAT_R8G8_SINT,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R8G8_SINT,
+ GL_RGBA8I,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_RG8UI:
{
- static constexpr Format info(GL_RG8UI,
- angle::Format::ID::R8G8_UINT,
- DXGI_FORMAT_R8G8_UINT,
- DXGI_FORMAT_R8G8_UINT,
- DXGI_FORMAT_R8G8_UINT,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R8G8_UINT,
- GL_RGBA8I,
- nullptr);
+ static const Format info(GL_RG8UI,
+ angle::Format::ID::R8G8_UINT,
+ DXGI_FORMAT_R8G8_UINT,
+ DXGI_FORMAT_R8G8_UINT,
+ DXGI_FORMAT_R8G8_UINT,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R8G8_UINT,
+ GL_RGBA8I,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_RG8_SNORM:
{
- static constexpr Format info(GL_RG8_SNORM,
- angle::Format::ID::R8G8_SNORM,
- DXGI_FORMAT_R8G8_SNORM,
- DXGI_FORMAT_R8G8_SNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R8G8_SNORM,
- GL_RGBA8_SNORM,
- nullptr);
+ static const Format info(GL_RG8_SNORM,
+ angle::Format::ID::R8G8_SNORM,
+ DXGI_FORMAT_R8G8_SNORM,
+ DXGI_FORMAT_R8G8_SNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R8G8_SNORM,
+ GL_RGBA8_SNORM,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_RGB:
{
- static constexpr Format info(GL_RGB,
- angle::Format::ID::R8G8B8A8_UNORM,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- GL_RGBA8,
- Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>);
+ static const Format info(GL_RGB,
+ angle::Format::ID::R8G8B8A8_UNORM,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ GL_RGBA8,
+ Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>,
+ deviceCaps);
return info;
}
case GL_RGB10_A2:
{
- static constexpr Format info(GL_RGB10_A2,
- angle::Format::ID::R10G10B10A2_UNORM,
- DXGI_FORMAT_R10G10B10A2_UNORM,
- DXGI_FORMAT_R10G10B10A2_UNORM,
- DXGI_FORMAT_R10G10B10A2_UNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R10G10B10A2_UNORM,
- GL_RGBA16_EXT,
- nullptr);
+ static const Format info(GL_RGB10_A2,
+ angle::Format::ID::R10G10B10A2_UNORM,
+ DXGI_FORMAT_R10G10B10A2_UNORM,
+ DXGI_FORMAT_R10G10B10A2_UNORM,
+ DXGI_FORMAT_R10G10B10A2_UNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R10G10B10A2_UNORM,
+ GL_RGBA16_EXT,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_RGB10_A2UI:
{
- static constexpr Format info(GL_RGB10_A2UI,
- angle::Format::ID::R10G10B10A2_UINT,
- DXGI_FORMAT_R10G10B10A2_UINT,
- DXGI_FORMAT_R10G10B10A2_UINT,
- DXGI_FORMAT_R10G10B10A2_UINT,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R10G10B10A2_UINT,
- GL_RGBA16I,
- nullptr);
+ static const Format info(GL_RGB10_A2UI,
+ angle::Format::ID::R10G10B10A2_UINT,
+ DXGI_FORMAT_R10G10B10A2_UINT,
+ DXGI_FORMAT_R10G10B10A2_UINT,
+ DXGI_FORMAT_R10G10B10A2_UINT,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R10G10B10A2_UINT,
+ GL_RGBA16I,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_RGB16F:
{
- static constexpr Format info(GL_RGB16F,
- angle::Format::ID::R16G16B16A16_FLOAT,
- DXGI_FORMAT_R16G16B16A16_FLOAT,
- DXGI_FORMAT_R16G16B16A16_FLOAT,
- DXGI_FORMAT_R16G16B16A16_FLOAT,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R16G16B16A16_FLOAT,
- GL_RGBA16F,
- Initialize4ComponentData<GLhalf, 0x0000, 0x0000, 0x0000, gl::Float16One>);
+ static const Format info(GL_RGB16F,
+ angle::Format::ID::R16G16B16A16_FLOAT,
+ DXGI_FORMAT_R16G16B16A16_FLOAT,
+ DXGI_FORMAT_R16G16B16A16_FLOAT,
+ DXGI_FORMAT_R16G16B16A16_FLOAT,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R16G16B16A16_FLOAT,
+ GL_RGBA16F,
+ Initialize4ComponentData<GLhalf, 0x0000, 0x0000, 0x0000, gl::Float16One>,
+ deviceCaps);
return info;
}
case GL_RGB16I:
{
- static constexpr Format info(GL_RGB16I,
- angle::Format::ID::R16G16B16A16_SINT,
- DXGI_FORMAT_R16G16B16A16_SINT,
- DXGI_FORMAT_R16G16B16A16_SINT,
- DXGI_FORMAT_R16G16B16A16_SINT,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R16G16B16A16_SINT,
- GL_RGBA16I,
- Initialize4ComponentData<GLshort, 0x0000, 0x0000, 0x0000, 0x0001>);
+ static const Format info(GL_RGB16I,
+ angle::Format::ID::R16G16B16A16_SINT,
+ DXGI_FORMAT_R16G16B16A16_SINT,
+ DXGI_FORMAT_R16G16B16A16_SINT,
+ DXGI_FORMAT_R16G16B16A16_SINT,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R16G16B16A16_SINT,
+ GL_RGBA16I,
+ Initialize4ComponentData<GLshort, 0x0000, 0x0000, 0x0000, 0x0001>,
+ deviceCaps);
return info;
}
case GL_RGB16UI:
{
- static constexpr Format info(GL_RGB16UI,
- angle::Format::ID::R16G16B16A16_UINT,
- DXGI_FORMAT_R16G16B16A16_UINT,
- DXGI_FORMAT_R16G16B16A16_UINT,
- DXGI_FORMAT_R16G16B16A16_UINT,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R16G16B16A16_UINT,
- GL_RGBA16UI,
- Initialize4ComponentData<GLushort, 0x0000, 0x0000, 0x0000, 0x0001>);
+ static const Format info(GL_RGB16UI,
+ angle::Format::ID::R16G16B16A16_UINT,
+ DXGI_FORMAT_R16G16B16A16_UINT,
+ DXGI_FORMAT_R16G16B16A16_UINT,
+ DXGI_FORMAT_R16G16B16A16_UINT,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R16G16B16A16_UINT,
+ GL_RGBA16UI,
+ Initialize4ComponentData<GLushort, 0x0000, 0x0000, 0x0000, 0x0001>,
+ deviceCaps);
return info;
}
case GL_RGB16_EXT:
{
- static constexpr Format info(GL_RGB16_EXT,
- angle::Format::ID::R16G16B16A16_UNORM,
- DXGI_FORMAT_R16G16B16A16_UNORM,
- DXGI_FORMAT_R16G16B16A16_UNORM,
- DXGI_FORMAT_R16G16B16A16_UNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R16G16B16A16_UNORM,
- GL_RGBA16_EXT,
- Initialize4ComponentData<GLubyte, 0x0000, 0x0000, 0x0000, 0xFFFF>);
+ static const Format info(GL_RGB16_EXT,
+ angle::Format::ID::R16G16B16A16_UNORM,
+ DXGI_FORMAT_R16G16B16A16_UNORM,
+ DXGI_FORMAT_R16G16B16A16_UNORM,
+ DXGI_FORMAT_R16G16B16A16_UNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R16G16B16A16_UNORM,
+ GL_RGBA16_EXT,
+ Initialize4ComponentData<GLubyte, 0x0000, 0x0000, 0x0000, 0xFFFF>,
+ deviceCaps);
return info;
}
case GL_RGB16_SNORM_EXT:
{
- static constexpr Format info(GL_RGB16_SNORM_EXT,
- angle::Format::ID::R16G16B16A16_SNORM,
- DXGI_FORMAT_R16G16B16A16_SNORM,
- DXGI_FORMAT_R16G16B16A16_SNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R16G16B16A16_SNORM,
- GL_RGBA16_SNORM_EXT,
- Initialize4ComponentData<GLushort, 0x0000, 0x0000, 0x0000, 0x7FFF>);
+ static const Format info(GL_RGB16_SNORM_EXT,
+ angle::Format::ID::R16G16B16A16_SNORM,
+ DXGI_FORMAT_R16G16B16A16_SNORM,
+ DXGI_FORMAT_R16G16B16A16_SNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R16G16B16A16_SNORM,
+ GL_RGBA16_SNORM_EXT,
+ Initialize4ComponentData<GLushort, 0x0000, 0x0000, 0x0000, 0x7FFF>,
+ deviceCaps);
return info;
}
case GL_RGB32F:
{
- static constexpr Format info(GL_RGB32F,
- angle::Format::ID::R32G32B32A32_FLOAT,
- DXGI_FORMAT_R32G32B32A32_FLOAT,
- DXGI_FORMAT_R32G32B32A32_FLOAT,
- DXGI_FORMAT_R32G32B32A32_FLOAT,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R32G32B32A32_FLOAT,
- GL_RGBA32F,
- Initialize4ComponentData<GLfloat, 0x00000000, 0x00000000, 0x00000000, gl::Float32One>);
+ static const Format info(GL_RGB32F,
+ angle::Format::ID::R32G32B32A32_FLOAT,
+ DXGI_FORMAT_R32G32B32A32_FLOAT,
+ DXGI_FORMAT_R32G32B32A32_FLOAT,
+ DXGI_FORMAT_R32G32B32A32_FLOAT,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R32G32B32A32_FLOAT,
+ GL_RGBA32F,
+ Initialize4ComponentData<GLfloat, 0x00000000, 0x00000000, 0x00000000, gl::Float32One>,
+ deviceCaps);
return info;
}
case GL_RGB32I:
{
- static constexpr Format info(GL_RGB32I,
- angle::Format::ID::R32G32B32A32_SINT,
- DXGI_FORMAT_R32G32B32A32_SINT,
- DXGI_FORMAT_R32G32B32A32_SINT,
- DXGI_FORMAT_R32G32B32A32_SINT,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R32G32B32A32_SINT,
- GL_RGBA32I,
- Initialize4ComponentData<GLint, 0x00000000, 0x00000000, 0x00000000, 0x00000001>);
+ static const Format info(GL_RGB32I,
+ angle::Format::ID::R32G32B32A32_SINT,
+ DXGI_FORMAT_R32G32B32A32_SINT,
+ DXGI_FORMAT_R32G32B32A32_SINT,
+ DXGI_FORMAT_R32G32B32A32_SINT,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R32G32B32A32_SINT,
+ GL_RGBA32I,
+ Initialize4ComponentData<GLint, 0x00000000, 0x00000000, 0x00000000, 0x00000001>,
+ deviceCaps);
return info;
}
case GL_RGB32UI:
{
- static constexpr Format info(GL_RGB32UI,
- angle::Format::ID::R32G32B32A32_UINT,
- DXGI_FORMAT_R32G32B32A32_UINT,
- DXGI_FORMAT_R32G32B32A32_UINT,
- DXGI_FORMAT_R32G32B32A32_UINT,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R32G32B32A32_UINT,
- GL_RGBA32UI,
- Initialize4ComponentData<GLuint, 0x00000000, 0x00000000, 0x00000000, 0x00000001>);
+ static const Format info(GL_RGB32UI,
+ angle::Format::ID::R32G32B32A32_UINT,
+ DXGI_FORMAT_R32G32B32A32_UINT,
+ DXGI_FORMAT_R32G32B32A32_UINT,
+ DXGI_FORMAT_R32G32B32A32_UINT,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R32G32B32A32_UINT,
+ GL_RGBA32UI,
+ Initialize4ComponentData<GLuint, 0x00000000, 0x00000000, 0x00000000, 0x00000001>,
+ deviceCaps);
return info;
}
case GL_RGB565:
{
if (SupportsFormat(DXGI_FORMAT_B5G6R5_UNORM, deviceCaps))
{
- static constexpr Format info(GL_RGB565,
- angle::Format::ID::B5G6R5_UNORM,
- DXGI_FORMAT_B5G6R5_UNORM,
- DXGI_FORMAT_B5G6R5_UNORM,
- DXGI_FORMAT_B5G6R5_UNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_B5G6R5_UNORM,
- GL_RGBA8,
- nullptr);
+ static const Format info(GL_RGB565,
+ angle::Format::ID::B5G6R5_UNORM,
+ DXGI_FORMAT_B5G6R5_UNORM,
+ DXGI_FORMAT_B5G6R5_UNORM,
+ DXGI_FORMAT_B5G6R5_UNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_B5G6R5_UNORM,
+ GL_RGBA8,
+ nullptr,
+ deviceCaps);
return info;
}
else
{
- static constexpr Format info(GL_RGB565,
- angle::Format::ID::R8G8B8A8_UNORM,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- GL_RGBA8,
- Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>);
+ static const Format info(GL_RGB565,
+ angle::Format::ID::R8G8B8A8_UNORM,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ GL_RGBA8,
+ Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>,
+ deviceCaps);
return info;
}
}
@@ -1462,34 +1570,21 @@ const Format &Format::Get(GLenum internalFormat, const Renderer11DeviceCaps &dev
{
if (SupportsFormat(DXGI_FORMAT_B5G5R5A1_UNORM, deviceCaps))
{
- static constexpr Format info(GL_RGB5_A1,
- angle::Format::ID::B5G5R5A1_UNORM,
- DXGI_FORMAT_B5G5R5A1_UNORM,
- DXGI_FORMAT_B5G5R5A1_UNORM,
- DXGI_FORMAT_B5G5R5A1_UNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_B5G5R5A1_UNORM,
- GL_RGBA8,
- nullptr);
+ static const Format info(GL_RGB5_A1,
+ angle::Format::ID::B5G5R5A1_UNORM,
+ DXGI_FORMAT_B5G5R5A1_UNORM,
+ DXGI_FORMAT_B5G5R5A1_UNORM,
+ DXGI_FORMAT_B5G5R5A1_UNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_B5G5R5A1_UNORM,
+ GL_RGBA8,
+ nullptr,
+ deviceCaps);
return info;
}
else
{
- static constexpr Format info(GL_RGB5_A1,
- angle::Format::ID::R8G8B8A8_UNORM,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- GL_RGBA8,
- nullptr);
- return info;
- }
- }
- case GL_RGB8:
- {
- static constexpr Format info(GL_RGB8,
+ static const Format info(GL_RGB5_A1,
angle::Format::ID::R8G8B8A8_UNORM,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_R8G8B8A8_UNORM,
@@ -1497,210 +1592,226 @@ const Format &Format::Get(GLenum internalFormat, const Renderer11DeviceCaps &dev
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_R8G8B8A8_UNORM,
GL_RGBA8,
- Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>);
+ nullptr,
+ deviceCaps);
+ return info;
+ }
+ }
+ case GL_RGB8:
+ {
+ static const Format info(GL_RGB8,
+ angle::Format::ID::R8G8B8A8_UNORM,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ GL_RGBA8,
+ Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>,
+ deviceCaps);
return info;
}
case GL_RGB8I:
{
- static constexpr Format info(GL_RGB8I,
- angle::Format::ID::R8G8B8A8_SINT,
- DXGI_FORMAT_R8G8B8A8_SINT,
- DXGI_FORMAT_R8G8B8A8_SINT,
- DXGI_FORMAT_R8G8B8A8_SINT,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R8G8B8A8_SINT,
- GL_RGBA8I,
- Initialize4ComponentData<GLbyte, 0x00, 0x00, 0x00, 0x01>);
+ static const Format info(GL_RGB8I,
+ angle::Format::ID::R8G8B8A8_SINT,
+ DXGI_FORMAT_R8G8B8A8_SINT,
+ DXGI_FORMAT_R8G8B8A8_SINT,
+ DXGI_FORMAT_R8G8B8A8_SINT,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R8G8B8A8_SINT,
+ GL_RGBA8I,
+ Initialize4ComponentData<GLbyte, 0x00, 0x00, 0x00, 0x01>,
+ deviceCaps);
return info;
}
case GL_RGB8UI:
{
- static constexpr Format info(GL_RGB8UI,
- angle::Format::ID::R8G8B8A8_UINT,
- DXGI_FORMAT_R8G8B8A8_UINT,
- DXGI_FORMAT_R8G8B8A8_UINT,
- DXGI_FORMAT_R8G8B8A8_UINT,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R8G8B8A8_UINT,
- GL_RGBA8UI,
- Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0x01>);
+ static const Format info(GL_RGB8UI,
+ angle::Format::ID::R8G8B8A8_UINT,
+ DXGI_FORMAT_R8G8B8A8_UINT,
+ DXGI_FORMAT_R8G8B8A8_UINT,
+ DXGI_FORMAT_R8G8B8A8_UINT,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R8G8B8A8_UINT,
+ GL_RGBA8UI,
+ Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0x01>,
+ deviceCaps);
return info;
}
case GL_RGB8_SNORM:
{
- static constexpr Format info(GL_RGB8_SNORM,
- angle::Format::ID::R8G8B8A8_SNORM,
- DXGI_FORMAT_R8G8B8A8_SNORM,
- DXGI_FORMAT_R8G8B8A8_SNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R8G8B8A8_SNORM,
- GL_RGBA8_SNORM,
- Initialize4ComponentData<GLbyte, 0x00, 0x00, 0x00, 0x7F>);
+ static const Format info(GL_RGB8_SNORM,
+ angle::Format::ID::R8G8B8A8_SNORM,
+ DXGI_FORMAT_R8G8B8A8_SNORM,
+ DXGI_FORMAT_R8G8B8A8_SNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R8G8B8A8_SNORM,
+ GL_RGBA8_SNORM,
+ Initialize4ComponentData<GLbyte, 0x00, 0x00, 0x00, 0x7F>,
+ deviceCaps);
return info;
}
case GL_RGB9_E5:
{
- static constexpr Format info(GL_RGB9_E5,
- angle::Format::ID::R9G9B9E5_SHAREDEXP,
- DXGI_FORMAT_R9G9B9E5_SHAREDEXP,
- DXGI_FORMAT_R9G9B9E5_SHAREDEXP,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R9G9B9E5_SHAREDEXP,
- GL_RGBA16F_EXT,
- nullptr);
+ static const Format info(GL_RGB9_E5,
+ angle::Format::ID::R9G9B9E5_SHAREDEXP,
+ DXGI_FORMAT_R9G9B9E5_SHAREDEXP,
+ DXGI_FORMAT_R9G9B9E5_SHAREDEXP,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R9G9B9E5_SHAREDEXP,
+ GL_RGBA16F_EXT,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_RGBA:
{
- static constexpr Format info(GL_RGBA,
- angle::Format::ID::R8G8B8A8_UNORM,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- GL_RGBA8,
- nullptr);
+ static const Format info(GL_RGBA,
+ angle::Format::ID::R8G8B8A8_UNORM,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ GL_RGBA8,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_RGBA16F:
{
- static constexpr Format info(GL_RGBA16F,
- angle::Format::ID::R16G16B16A16_FLOAT,
- DXGI_FORMAT_R16G16B16A16_FLOAT,
- DXGI_FORMAT_R16G16B16A16_FLOAT,
- DXGI_FORMAT_R16G16B16A16_FLOAT,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R16G16B16A16_FLOAT,
- GL_RGBA16F,
- nullptr);
+ static const Format info(GL_RGBA16F,
+ angle::Format::ID::R16G16B16A16_FLOAT,
+ DXGI_FORMAT_R16G16B16A16_FLOAT,
+ DXGI_FORMAT_R16G16B16A16_FLOAT,
+ DXGI_FORMAT_R16G16B16A16_FLOAT,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R16G16B16A16_FLOAT,
+ GL_RGBA16F,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_RGBA16I:
{
- static constexpr Format info(GL_RGBA16I,
- angle::Format::ID::R16G16B16A16_SINT,
- DXGI_FORMAT_R16G16B16A16_SINT,
- DXGI_FORMAT_R16G16B16A16_SINT,
- DXGI_FORMAT_R16G16B16A16_SINT,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R16G16B16A16_SINT,
- GL_RGBA16I,
- nullptr);
+ static const Format info(GL_RGBA16I,
+ angle::Format::ID::R16G16B16A16_SINT,
+ DXGI_FORMAT_R16G16B16A16_SINT,
+ DXGI_FORMAT_R16G16B16A16_SINT,
+ DXGI_FORMAT_R16G16B16A16_SINT,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R16G16B16A16_SINT,
+ GL_RGBA16I,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_RGBA16UI:
{
- static constexpr Format info(GL_RGBA16UI,
- angle::Format::ID::R16G16B16A16_UINT,
- DXGI_FORMAT_R16G16B16A16_UINT,
- DXGI_FORMAT_R16G16B16A16_UINT,
- DXGI_FORMAT_R16G16B16A16_UINT,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R16G16B16A16_UINT,
- GL_RGBA16UI,
- nullptr);
+ static const Format info(GL_RGBA16UI,
+ angle::Format::ID::R16G16B16A16_UINT,
+ DXGI_FORMAT_R16G16B16A16_UINT,
+ DXGI_FORMAT_R16G16B16A16_UINT,
+ DXGI_FORMAT_R16G16B16A16_UINT,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R16G16B16A16_UINT,
+ GL_RGBA16UI,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_RGBA16_EXT:
{
- static constexpr Format info(GL_RGBA16_EXT,
- angle::Format::ID::R16G16B16A16_UNORM,
- DXGI_FORMAT_R16G16B16A16_UNORM,
- DXGI_FORMAT_R16G16B16A16_UNORM,
- DXGI_FORMAT_R16G16B16A16_UNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R16G16B16A16_UNORM,
- GL_RGBA16_EXT,
- nullptr);
+ static const Format info(GL_RGBA16_EXT,
+ angle::Format::ID::R16G16B16A16_UNORM,
+ DXGI_FORMAT_R16G16B16A16_UNORM,
+ DXGI_FORMAT_R16G16B16A16_UNORM,
+ DXGI_FORMAT_R16G16B16A16_UNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R16G16B16A16_UNORM,
+ GL_RGBA16_EXT,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_RGBA16_SNORM_EXT:
{
- static constexpr Format info(GL_RGBA16_SNORM_EXT,
- angle::Format::ID::R16G16B16A16_SNORM,
- DXGI_FORMAT_R16G16B16A16_SNORM,
- DXGI_FORMAT_R16G16B16A16_SNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R16G16B16A16_SNORM,
- GL_RGBA16_SNORM_EXT,
- nullptr);
+ static const Format info(GL_RGBA16_SNORM_EXT,
+ angle::Format::ID::R16G16B16A16_SNORM,
+ DXGI_FORMAT_R16G16B16A16_SNORM,
+ DXGI_FORMAT_R16G16B16A16_SNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R16G16B16A16_SNORM,
+ GL_RGBA16_SNORM_EXT,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_RGBA32F:
{
- static constexpr Format info(GL_RGBA32F,
- angle::Format::ID::R32G32B32A32_FLOAT,
- DXGI_FORMAT_R32G32B32A32_FLOAT,
- DXGI_FORMAT_R32G32B32A32_FLOAT,
- DXGI_FORMAT_R32G32B32A32_FLOAT,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R32G32B32A32_FLOAT,
- GL_RGBA32F,
- nullptr);
+ static const Format info(GL_RGBA32F,
+ angle::Format::ID::R32G32B32A32_FLOAT,
+ DXGI_FORMAT_R32G32B32A32_FLOAT,
+ DXGI_FORMAT_R32G32B32A32_FLOAT,
+ DXGI_FORMAT_R32G32B32A32_FLOAT,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R32G32B32A32_FLOAT,
+ GL_RGBA32F,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_RGBA32I:
{
- static constexpr Format info(GL_RGBA32I,
- angle::Format::ID::R32G32B32A32_SINT,
- DXGI_FORMAT_R32G32B32A32_SINT,
- DXGI_FORMAT_R32G32B32A32_SINT,
- DXGI_FORMAT_R32G32B32A32_SINT,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R32G32B32A32_SINT,
- GL_RGBA32I,
- nullptr);
+ static const Format info(GL_RGBA32I,
+ angle::Format::ID::R32G32B32A32_SINT,
+ DXGI_FORMAT_R32G32B32A32_SINT,
+ DXGI_FORMAT_R32G32B32A32_SINT,
+ DXGI_FORMAT_R32G32B32A32_SINT,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R32G32B32A32_SINT,
+ GL_RGBA32I,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_RGBA32UI:
{
- static constexpr Format info(GL_RGBA32UI,
- angle::Format::ID::R32G32B32A32_UINT,
- DXGI_FORMAT_R32G32B32A32_UINT,
- DXGI_FORMAT_R32G32B32A32_UINT,
- DXGI_FORMAT_R32G32B32A32_UINT,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R32G32B32A32_UINT,
- GL_RGBA32UI,
- nullptr);
+ static const Format info(GL_RGBA32UI,
+ angle::Format::ID::R32G32B32A32_UINT,
+ DXGI_FORMAT_R32G32B32A32_UINT,
+ DXGI_FORMAT_R32G32B32A32_UINT,
+ DXGI_FORMAT_R32G32B32A32_UINT,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R32G32B32A32_UINT,
+ GL_RGBA32UI,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_RGBA4:
{
if (SupportsFormat(DXGI_FORMAT_B4G4R4A4_UNORM, deviceCaps))
{
- static constexpr Format info(GL_RGBA4,
- angle::Format::ID::B4G4R4A4_UNORM,
- DXGI_FORMAT_B4G4R4A4_UNORM,
- DXGI_FORMAT_B4G4R4A4_UNORM,
- DXGI_FORMAT_B4G4R4A4_UNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_B4G4R4A4_UNORM,
- GL_RGBA4,
- nullptr);
+ static const Format info(GL_RGBA4,
+ angle::Format::ID::B4G4R4A4_UNORM,
+ DXGI_FORMAT_B4G4R4A4_UNORM,
+ DXGI_FORMAT_B4G4R4A4_UNORM,
+ DXGI_FORMAT_B4G4R4A4_UNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_B4G4R4A4_UNORM,
+ GL_RGBA4,
+ nullptr,
+ deviceCaps);
return info;
}
else
{
- static constexpr Format info(GL_RGBA4,
- angle::Format::ID::R8G8B8A8_UNORM,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R8G8B8A8_UNORM,
- GL_RGBA8,
- nullptr);
- return info;
- }
- }
- case GL_RGBA8:
- {
- static constexpr Format info(GL_RGBA8,
+ static const Format info(GL_RGBA4,
angle::Format::ID::R8G8B8A8_UNORM,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_R8G8B8A8_UNORM,
@@ -1708,100 +1819,123 @@ const Format &Format::Get(GLenum internalFormat, const Renderer11DeviceCaps &dev
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_R8G8B8A8_UNORM,
GL_RGBA8,
- nullptr);
+ nullptr,
+ deviceCaps);
+ return info;
+ }
+ }
+ case GL_RGBA8:
+ {
+ static const Format info(GL_RGBA8,
+ angle::Format::ID::R8G8B8A8_UNORM,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R8G8B8A8_UNORM,
+ GL_RGBA8,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_RGBA8I:
{
- static constexpr Format info(GL_RGBA8I,
- angle::Format::ID::R8G8B8A8_SINT,
- DXGI_FORMAT_R8G8B8A8_SINT,
- DXGI_FORMAT_R8G8B8A8_SINT,
- DXGI_FORMAT_R8G8B8A8_SINT,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R8G8B8A8_SINT,
- GL_RGBA8I,
- nullptr);
+ static const Format info(GL_RGBA8I,
+ angle::Format::ID::R8G8B8A8_SINT,
+ DXGI_FORMAT_R8G8B8A8_SINT,
+ DXGI_FORMAT_R8G8B8A8_SINT,
+ DXGI_FORMAT_R8G8B8A8_SINT,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R8G8B8A8_SINT,
+ GL_RGBA8I,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_RGBA8UI:
{
- static constexpr Format info(GL_RGBA8UI,
- angle::Format::ID::R8G8B8A8_UINT,
- DXGI_FORMAT_R8G8B8A8_UINT,
- DXGI_FORMAT_R8G8B8A8_UINT,
- DXGI_FORMAT_R8G8B8A8_UINT,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R8G8B8A8_UINT,
- GL_RGBA8UI,
- nullptr);
+ static const Format info(GL_RGBA8UI,
+ angle::Format::ID::R8G8B8A8_UINT,
+ DXGI_FORMAT_R8G8B8A8_UINT,
+ DXGI_FORMAT_R8G8B8A8_UINT,
+ DXGI_FORMAT_R8G8B8A8_UINT,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R8G8B8A8_UINT,
+ GL_RGBA8UI,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_RGBA8_SNORM:
{
- static constexpr Format info(GL_RGBA8_SNORM,
- angle::Format::ID::R8G8B8A8_SNORM,
- DXGI_FORMAT_R8G8B8A8_SNORM,
- DXGI_FORMAT_R8G8B8A8_SNORM,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R8G8B8A8_SNORM,
- GL_RGBA8_SNORM,
- nullptr);
+ static const Format info(GL_RGBA8_SNORM,
+ angle::Format::ID::R8G8B8A8_SNORM,
+ DXGI_FORMAT_R8G8B8A8_SNORM,
+ DXGI_FORMAT_R8G8B8A8_SNORM,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R8G8B8A8_SNORM,
+ GL_RGBA8_SNORM,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_SRGB8:
{
- static constexpr Format info(GL_SRGB8,
- angle::Format::ID::R8G8B8A8_UNORM_SRGB,
- DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
- DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
- DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
- GL_SRGB8_ALPHA8,
- Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>);
+ static const Format info(GL_SRGB8,
+ angle::Format::ID::R8G8B8A8_UNORM_SRGB,
+ DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
+ DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
+ DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
+ GL_SRGB8_ALPHA8,
+ Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>,
+ deviceCaps);
return info;
}
case GL_SRGB8_ALPHA8:
{
- static constexpr Format info(GL_SRGB8_ALPHA8,
- angle::Format::ID::R8G8B8A8_UNORM_SRGB,
- DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
- DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
- DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
- GL_SRGB8_ALPHA8,
- nullptr);
+ static const Format info(GL_SRGB8_ALPHA8,
+ angle::Format::ID::R8G8B8A8_UNORM_SRGB,
+ DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
+ DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
+ DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
+ GL_SRGB8_ALPHA8,
+ nullptr,
+ deviceCaps);
return info;
}
case GL_STENCIL_INDEX8:
{
if (OnlyFL10Plus(deviceCaps))
{
- static constexpr Format info(GL_STENCIL_INDEX8,
- angle::Format::ID::D24_UNORM_S8_UINT,
- DXGI_FORMAT_R24G8_TYPELESS,
- DXGI_FORMAT_R24_UNORM_X8_TYPELESS,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_D24_UNORM_S8_UINT,
- DXGI_FORMAT_R24_UNORM_X8_TYPELESS,
- GL_RGBA32F,
- nullptr);
+ static const Format info(GL_STENCIL_INDEX8,
+ angle::Format::ID::D24_UNORM_S8_UINT,
+ DXGI_FORMAT_R24G8_TYPELESS,
+ DXGI_FORMAT_R24_UNORM_X8_TYPELESS,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_D24_UNORM_S8_UINT,
+ DXGI_FORMAT_R24_UNORM_X8_TYPELESS,
+ GL_RGBA32F,
+ nullptr,
+ deviceCaps);
return info;
}
else
{
- static constexpr Format info(GL_STENCIL_INDEX8,
- angle::Format::ID::D24_UNORM_S8_UINT,
- DXGI_FORMAT_D24_UNORM_S8_UINT,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_UNKNOWN,
- DXGI_FORMAT_D24_UNORM_S8_UINT,
- DXGI_FORMAT_UNKNOWN,
- GL_RGBA32F,
- nullptr);
+ static const Format info(GL_STENCIL_INDEX8,
+ angle::Format::ID::D24_UNORM_S8_UINT,
+ DXGI_FORMAT_D24_UNORM_S8_UINT,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_D24_UNORM_S8_UINT,
+ DXGI_FORMAT_UNKNOWN,
+ GL_RGBA32F,
+ nullptr,
+ deviceCaps);
return info;
}
}
@@ -1812,7 +1946,7 @@ const Format &Format::Get(GLenum internalFormat, const Renderer11DeviceCaps &dev
// clang-format on
UNREACHABLE();
- static constexpr Format defaultInfo;
+ static const Format defaultInfo;
return defaultInfo;
}
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d9/Blit9.cpp b/gfx/angle/src/libANGLE/renderer/d3d/d3d9/Blit9.cpp
index 95320f228..2ac8ee3a2 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d9/Blit9.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d9/Blit9.cpp
@@ -145,7 +145,13 @@ gl::Error Blit9::setShader(ShaderId source, const char *profile,
{
const BYTE* shaderCode = g_shaderCode[source];
size_t shaderSize = g_shaderSize[source];
- ANGLE_TRY((mRenderer->*createShader)(reinterpret_cast<const DWORD*>(shaderCode), shaderSize, &shader));
+
+ gl::Error error = (mRenderer->*createShader)(reinterpret_cast<const DWORD*>(shaderCode), shaderSize, &shader);
+ if (error.isError())
+ {
+ return error;
+ }
+
mCompiledShaders[source] = shader;
}
@@ -184,10 +190,18 @@ RECT Blit9::getSurfaceRect(IDirect3DSurface9 *surface) const
gl::Error Blit9::boxFilter(IDirect3DSurface9 *source, IDirect3DSurface9 *dest)
{
- ANGLE_TRY(initialize());
+ gl::Error error = initialize();
+ if (error.isError())
+ {
+ return error;
+ }
IDirect3DTexture9 *texture = NULL;
- ANGLE_TRY(copySurfaceToTexture(source, getSurfaceRect(source), &texture));
+ error = copySurfaceToTexture(source, getSurfaceRect(source), &texture);
+ if (error.isError())
+ {
+ return error;
+ }
IDirect3DDevice9 *device = mRenderer->getDevice();
@@ -216,13 +230,21 @@ gl::Error Blit9::boxFilter(IDirect3DSurface9 *source, IDirect3DSurface9 *dest)
gl::Error Blit9::copy2D(const gl::Framebuffer *framebuffer, const RECT &sourceRect, GLenum destFormat, const gl::Offset &destOffset, TextureStorage *storage, GLint level)
{
- ANGLE_TRY(initialize());
+ gl::Error error = initialize();
+ if (error.isError())
+ {
+ return error;
+ }
const gl::FramebufferAttachment *colorbuffer = framebuffer->getColorbuffer(0);
ASSERT(colorbuffer);
RenderTarget9 *renderTarget9 = nullptr;
- ANGLE_TRY(colorbuffer->getRenderTarget(&renderTarget9));
+ error = colorbuffer->getRenderTarget(&renderTarget9);
+ if (error.isError())
+ {
+ return error;
+ }
ASSERT(renderTarget9);
IDirect3DSurface9 *source = renderTarget9->getSurface();
@@ -230,7 +252,7 @@ gl::Error Blit9::copy2D(const gl::Framebuffer *framebuffer, const RECT &sourceRe
IDirect3DSurface9 *destSurface = NULL;
TextureStorage9 *storage9 = GetAs<TextureStorage9>(storage);
- gl::Error error = storage9->getSurfaceLevel(GL_TEXTURE_2D, level, true, &destSurface);
+ error = storage9->getSurfaceLevel(GL_TEXTURE_2D, level, true, &destSurface);
if (error.isError())
{
SafeRelease(source);
@@ -492,12 +514,9 @@ gl::Error Blit9::copySurfaceToTexture(IDirect3DSurface9 *surface, const RECT &so
D3DSURFACE_DESC sourceDesc;
surface->GetDesc(&sourceDesc);
- const auto destWidth = sourceRect.right - sourceRect.left;
- const auto destHeight = sourceRect.bottom - sourceRect.top;
-
// Copy the render target into a texture
IDirect3DTexture9 *texture;
- HRESULT result = device->CreateTexture(destWidth, destHeight, 1, D3DUSAGE_RENDERTARGET, sourceDesc.Format, D3DPOOL_DEFAULT, &texture, NULL);
+ HRESULT result = device->CreateTexture(sourceRect.right - sourceRect.left, sourceRect.bottom - sourceRect.top, 1, D3DUSAGE_RENDERTARGET, sourceDesc.Format, D3DPOOL_DEFAULT, &texture, NULL);
if (FAILED(result))
{
@@ -516,40 +535,8 @@ gl::Error Blit9::copySurfaceToTexture(IDirect3DSurface9 *surface, const RECT &so
}
mRenderer->endScene();
+ result = device->StretchRect(surface, &sourceRect, textureSurface, NULL, D3DTEXF_NONE);
- if (sourceRect.left < sourceDesc.Width && sourceRect.right > 0 &&
- sourceRect.top < sourceDesc.Height && sourceRect.bottom > 0)
- {
- RECT validSourceRect = sourceRect;
- RECT validDestRect = {0, 0, destWidth, destHeight};
-
- if (sourceRect.left < 0) {
- validSourceRect.left += 0 - sourceRect.left;
- validDestRect.left += 0 - sourceRect.left;
- }
-
- if (sourceRect.right > sourceDesc.Width) {
- validSourceRect.right -= sourceRect.right - sourceDesc.Width;
- validDestRect.right -= sourceRect.right - sourceDesc.Width;
- }
-
- if (sourceRect.top < 0) {
- validSourceRect.top += 0 - sourceRect.top;
- validDestRect.top += 0 - sourceRect.top;
- }
-
- if (sourceRect.bottom > sourceDesc.Height) {
- validSourceRect.bottom -= sourceRect.bottom - sourceDesc.Height;
- validDestRect.bottom -= sourceRect.bottom - sourceDesc.Height;
- }
-
- ASSERT(validSourceRect.left < validSourceRect.right);
- ASSERT(validSourceRect.top < validSourceRect.bottom);
- ASSERT(validDestRect.left < validDestRect.right);
- ASSERT(validDestRect.top < validDestRect.bottom);
- result = device->StretchRect(surface, &validSourceRect, textureSurface,
- &validDestRect, D3DTEXF_NONE);
- }
SafeRelease(textureSurface);
if (FAILED(result))
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d9/Buffer9.cpp b/gfx/angle/src/libANGLE/renderer/d3d/d3d9/Buffer9.cpp
index b8abf3845..0ee0d8325 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d9/Buffer9.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d9/Buffer9.cpp
@@ -12,8 +12,9 @@
namespace rx
{
-Buffer9::Buffer9(const gl::BufferState &state, Renderer9 *renderer)
- : BufferD3D(state, renderer), mSize(0)
+Buffer9::Buffer9(Renderer9 *renderer)
+ : BufferD3D(renderer),
+ mSize(0)
{}
Buffer9::~Buffer9()
@@ -21,7 +22,7 @@ Buffer9::~Buffer9()
mSize = 0;
}
-gl::Error Buffer9::setData(GLenum /*target*/, const void *data, size_t size, GLenum usage)
+gl::Error Buffer9::setData(const void* data, size_t size, GLenum usage)
{
if (size > mMemory.size())
{
@@ -50,7 +51,7 @@ gl::Error Buffer9::getData(const uint8_t **outData)
return gl::Error(GL_NO_ERROR);
}
-gl::Error Buffer9::setSubData(GLenum /*target*/, const void *data, size_t size, size_t offset)
+gl::Error Buffer9::setSubData(const void* data, size_t size, size_t offset)
{
if (offset + size > mMemory.size())
{
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d9/Buffer9.h b/gfx/angle/src/libANGLE/renderer/d3d/d3d9/Buffer9.h
index dd7671827..219f8a658 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d9/Buffer9.h
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d9/Buffer9.h
@@ -20,7 +20,7 @@ class Renderer9;
class Buffer9 : public BufferD3D
{
public:
- Buffer9(const gl::BufferState &state, Renderer9 *renderer);
+ Buffer9(Renderer9 *renderer);
virtual ~Buffer9();
// BufferD3D implementation
@@ -29,16 +29,13 @@ class Buffer9 : public BufferD3D
gl::Error getData(const uint8_t **outData) override;
// BufferImpl implementation
- gl::Error setData(GLenum target, const void *data, size_t size, GLenum usage) override;
- gl::Error setSubData(GLenum target, const void *data, size_t size, size_t offset) override;
- gl::Error copySubData(BufferImpl *source,
- GLintptr sourceOffset,
- GLintptr destOffset,
- GLsizeiptr size) override;
- gl::Error map(GLenum access, GLvoid **mapPtr) override;
- gl::Error mapRange(size_t offset, size_t length, GLbitfield access, GLvoid **mapPtr) override;
- gl::Error unmap(GLboolean *result) override;
- gl::Error markTransformFeedbackUsage() override;
+ virtual gl::Error setData(const void* data, size_t size, GLenum usage);
+ virtual gl::Error setSubData(const void* data, size_t size, size_t offset);
+ virtual gl::Error copySubData(BufferImpl* source, GLintptr sourceOffset, GLintptr destOffset, GLsizeiptr size);
+ virtual gl::Error map(GLenum access, GLvoid **mapPtr);
+ virtual gl::Error mapRange(size_t offset, size_t length, GLbitfield access, GLvoid **mapPtr);
+ virtual gl::Error unmap(GLboolean *result);
+ virtual gl::Error markTransformFeedbackUsage();
private:
MemoryBuffer mMemory;
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d9/Context9.cpp b/gfx/angle/src/libANGLE/renderer/d3d/d3d9/Context9.cpp
index c38bc1b11..9b31ab927 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d9/Context9.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d9/Context9.cpp
@@ -82,9 +82,9 @@ RenderbufferImpl *Context9::createRenderbuffer()
return new RenderbufferD3D(mRenderer);
}
-BufferImpl *Context9::createBuffer(const gl::BufferState &state)
+BufferImpl *Context9::createBuffer()
{
- return new Buffer9(state, mRenderer);
+ return new Buffer9(mRenderer);
}
VertexArrayImpl *Context9::createVertexArray(const gl::VertexArrayState &data)
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d9/Context9.h b/gfx/angle/src/libANGLE/renderer/d3d/d3d9/Context9.h
index aeb18ff5e..7e3492f9a 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d9/Context9.h
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d9/Context9.h
@@ -39,7 +39,7 @@ class Context9 : public ContextImpl
RenderbufferImpl *createRenderbuffer() override;
// Buffer creation
- BufferImpl *createBuffer(const gl::BufferState &state) override;
+ BufferImpl *createBuffer() override;
// Vertex Array creation
VertexArrayImpl *createVertexArray(const gl::VertexArrayState &data) override;
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d9/Framebuffer9.cpp b/gfx/angle/src/libANGLE/renderer/d3d/d3d9/Framebuffer9.cpp
index 18e1b3da4..9286d9b0d 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d9/Framebuffer9.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d9/Framebuffer9.cpp
@@ -205,7 +205,7 @@ gl::Error Framebuffer9::readPixelsImpl(const gl::Rectangle &area,
packParams.outputPitch = static_cast<GLuint>(outputPitch);
packParams.pack = pack;
- PackPixels(packParams, d3dFormatInfo.info(), inputPitch, source, pixels);
+ PackPixels(packParams, *d3dFormatInfo.info, inputPitch, source, pixels);
systemSurface->UnlockRect();
SafeRelease(systemSurface);
@@ -404,7 +404,7 @@ GLenum Framebuffer9::getRenderTargetImplementationFormat(RenderTargetD3D *render
{
RenderTarget9 *renderTarget9 = GetAs<RenderTarget9>(renderTarget);
const d3d9::D3DFormat &d3dFormatInfo = d3d9::GetD3DFormatInfo(renderTarget9->getD3DFormat());
- return d3dFormatInfo.info().glInternalFormat;
+ return d3dFormatInfo.info->glInternalFormat;
}
} // namespace rx
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d9/Image9.cpp b/gfx/angle/src/libANGLE/renderer/d3d/d3d9/Image9.cpp
index ad2c41584..24c1e9150 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d9/Image9.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d9/Image9.cpp
@@ -61,7 +61,7 @@ gl::Error Image9::generateMip(IDirect3DSurface9 *destSurface, IDirect3DSurface9
ASSERT(sourceDesc.Height == 1 || sourceDesc.Height / 2 == destDesc.Height);
const d3d9::D3DFormat &d3dFormatInfo = d3d9::GetD3DFormatInfo(sourceDesc.Format);
- ASSERT(d3dFormatInfo.info().mipGenerationFunction != NULL);
+ ASSERT(d3dFormatInfo.info->mipGenerationFunction != NULL);
D3DLOCKED_RECT sourceLocked = {0};
result = sourceSurface->LockRect(&sourceLocked, NULL, D3DLOCK_READONLY);
@@ -85,9 +85,8 @@ gl::Error Image9::generateMip(IDirect3DSurface9 *destSurface, IDirect3DSurface9
ASSERT(sourceData && destData);
- d3dFormatInfo.info().mipGenerationFunction(sourceDesc.Width, sourceDesc.Height, 1, sourceData,
- sourceLocked.Pitch, 0, destData, destLocked.Pitch,
- 0);
+ d3dFormatInfo.info->mipGenerationFunction(sourceDesc.Width, sourceDesc.Height, 1, sourceData,
+ sourceLocked.Pitch, 0, destData, destLocked.Pitch, 0);
destSurface->UnlockRect();
sourceSurface->UnlockRect();
@@ -295,6 +294,7 @@ void Image9::unlock()
if (mSurface)
{
HRESULT result = mSurface->UnlockRect();
+ UNUSED_ASSERTION_VARIABLE(result);
ASSERT(SUCCEEDED(result));
}
}
@@ -475,17 +475,17 @@ gl::Error Image9::copyToSurface(IDirect3DSurface9 *destSurface, const gl::Box &a
// into the target pixel rectangle.
gl::Error Image9::loadData(const gl::Box &area,
const gl::PixelUnpackState &unpack,
- GLenum inputType,
+ GLenum type,
const void *input,
bool applySkipImages)
{
// 3D textures are not supported by the D3D9 backend.
ASSERT(area.z == 0 && area.depth == 1);
- ASSERT(getSizedInputFormat(inputType) == mInternalFormat);
+
const gl::InternalFormat &formatInfo = gl::GetInternalFormatInfo(mInternalFormat);
GLuint inputRowPitch = 0;
ANGLE_TRY_RESULT(
- formatInfo.computeRowPitch(area.width, unpack.alignment, unpack.rowLength),
+ formatInfo.computeRowPitch(type, area.width, unpack.alignment, unpack.rowLength),
inputRowPitch);
ASSERT(!applySkipImages);
ASSERT(unpack.skipPixels == 0);
@@ -523,10 +523,11 @@ gl::Error Image9::loadCompressedData(const gl::Box &area, const void *input)
const gl::InternalFormat &formatInfo = gl::GetInternalFormatInfo(mInternalFormat);
GLsizei inputRowPitch = 0;
- ANGLE_TRY_RESULT(formatInfo.computeRowPitch(area.width, 1, 0), inputRowPitch);
+ ANGLE_TRY_RESULT(formatInfo.computeRowPitch(GL_UNSIGNED_BYTE, area.width, 1, 0), inputRowPitch);
GLsizei inputDepthPitch = 0;
- ANGLE_TRY_RESULT(formatInfo.computeDepthPitch(area.height, 0, inputDepthPitch),
- inputDepthPitch);
+ ANGLE_TRY_RESULT(
+ formatInfo.computeDepthPitch(GL_UNSIGNED_BYTE, area.width, area.height, 1, 0, 0),
+ inputDepthPitch);
const d3d9::TextureFormat &d3d9FormatInfo = d3d9::GetTextureFormatInfo(mInternalFormat);
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d9/Renderer9.cpp b/gfx/angle/src/libANGLE/renderer/d3d/d3d9/Renderer9.cpp
index d578d4075..63b33b6f2 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d9/Renderer9.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d9/Renderer9.cpp
@@ -525,7 +525,6 @@ void Renderer9::generateDisplayExtensions(egl::DisplayExtensions *outExtensions)
outExtensions->d3dShareHandleClientBuffer = true;
outExtensions->surfaceD3DTexture2DShareHandle = true;
}
- outExtensions->d3dTextureClientBuffer = true;
outExtensions->querySurfacePointer = true;
outExtensions->windowFixedSize = true;
@@ -673,111 +672,12 @@ NativeWindowD3D *Renderer9::createNativeWindow(EGLNativeWindowType window,
SwapChainD3D *Renderer9::createSwapChain(NativeWindowD3D *nativeWindow,
HANDLE shareHandle,
- IUnknown *d3dTexture,
GLenum backBufferFormat,
GLenum depthBufferFormat,
EGLint orientation)
{
- return new SwapChain9(this, GetAs<NativeWindow9>(nativeWindow), shareHandle, d3dTexture,
- backBufferFormat, depthBufferFormat, orientation);
-}
-
-egl::Error Renderer9::getD3DTextureInfo(IUnknown *d3dTexture,
- EGLint *width,
- EGLint *height,
- GLenum *fboFormat) const
-{
- IDirect3DTexture9 *texture = nullptr;
- if (FAILED(d3dTexture->QueryInterface(&texture)))
- {
- return egl::Error(EGL_BAD_PARAMETER, "client buffer is not a IDirect3DTexture9");
- }
-
- IDirect3DDevice9 *textureDevice = nullptr;
- texture->GetDevice(&textureDevice);
- if (textureDevice != mDevice)
- {
- SafeRelease(texture);
- return egl::Error(EGL_BAD_PARAMETER, "Texture's device does not match.");
- }
- SafeRelease(textureDevice);
-
- D3DSURFACE_DESC desc;
- texture->GetLevelDesc(0, &desc);
- SafeRelease(texture);
-
- if (width)
- {
- *width = static_cast<EGLint>(desc.Width);
- }
- if (height)
- {
- *height = static_cast<EGLint>(desc.Height);
- }
-
- // From table egl.restrictions in EGL_ANGLE_d3d_texture_client_buffer.
- switch (desc.Format)
- {
- case D3DFMT_R8G8B8:
- case D3DFMT_A8R8G8B8:
- case D3DFMT_A16B16G16R16F:
- case D3DFMT_A32B32G32R32F:
- break;
-
- default:
- return egl::Error(EGL_BAD_PARAMETER, "Unknown client buffer texture format: %u.",
- desc.Format);
- }
-
- if (fboFormat)
- {
- const auto &d3dFormatInfo = d3d9::GetD3DFormatInfo(desc.Format);
- ASSERT(d3dFormatInfo.info().id != angle::Format::ID::NONE);
- *fboFormat = d3dFormatInfo.info().fboImplementationInternalFormat;
- }
-
- return egl::Error(EGL_SUCCESS);
-}
-
-egl::Error Renderer9::validateShareHandle(const egl::Config *config,
- HANDLE shareHandle,
- const egl::AttributeMap &attribs) const
-{
- if (shareHandle == nullptr)
- {
- return egl::Error(EGL_BAD_PARAMETER, "NULL share handle.");
- }
-
- EGLint width = attribs.getAsInt(EGL_WIDTH, 0);
- EGLint height = attribs.getAsInt(EGL_HEIGHT, 0);
- ASSERT(width != 0 && height != 0);
-
- const d3d9::TextureFormat &backBufferd3dFormatInfo =
- d3d9::GetTextureFormatInfo(config->renderTargetFormat);
-
- IDirect3DTexture9 *texture = nullptr;
- HRESULT result = mDevice->CreateTexture(width, height, 1, D3DUSAGE_RENDERTARGET,
- backBufferd3dFormatInfo.texFormat, D3DPOOL_DEFAULT,
- &texture, &shareHandle);
- if (FAILED(result))
- {
- return egl::Error(EGL_BAD_PARAMETER, "Failed to open share handle, result: 0x%X.", result);
- }
-
- DWORD levelCount = texture->GetLevelCount();
-
- D3DSURFACE_DESC desc;
- texture->GetLevelDesc(0, &desc);
- SafeRelease(texture);
-
- if (levelCount != 1 || desc.Width != static_cast<UINT>(width) ||
- desc.Height != static_cast<UINT>(height) ||
- desc.Format != backBufferd3dFormatInfo.texFormat)
- {
- return egl::Error(EGL_BAD_PARAMETER, "Invalid texture parameters in share handle texture.");
- }
-
- return egl::Error(EGL_SUCCESS);
+ return new SwapChain9(this, GetAs<NativeWindow9>(nativeWindow), shareHandle, backBufferFormat,
+ depthBufferFormat, orientation);
}
ContextImpl *Renderer9::createContext(const gl::ContextState &state)
@@ -918,9 +818,7 @@ gl::Error Renderer9::setSamplerState(gl::SamplerType type, int index, gl::Textur
mDevice->SetSamplerState(d3dSampler, D3DSAMP_MIPMAPLODBIAS, static_cast<DWORD>(lodBias));
if (getNativeExtensions().textureFilterAnisotropic)
{
- DWORD maxAnisotropy =
- std::min(mDeviceCaps.MaxAnisotropy, static_cast<DWORD>(samplerState.maxAnisotropy));
- mDevice->SetSamplerState(d3dSampler, D3DSAMP_MAXANISOTROPY, maxAnisotropy);
+ mDevice->SetSamplerState(d3dSampler, D3DSAMP_MAXANISOTROPY, (DWORD)samplerState.maxAnisotropy);
}
}
@@ -1007,18 +905,7 @@ gl::Error Renderer9::updateState(Context9 *context, GLenum drawMode)
setScissorRectangle(glState.getScissor(), glState.isScissorTestEnabled());
// Setting blend, depth stencil, and rasterizer states
- // Since framebuffer->getSamples will return the original samples which may be different with
- // the sample counts that we set in render target view, here we use renderTarget->getSamples to
- // get the actual samples.
- GLsizei samples = 0;
- auto firstColorAttachment = framebuffer->getFirstColorbuffer();
- if (firstColorAttachment)
- {
- ASSERT(firstColorAttachment->isAttached());
- RenderTarget9 *renderTarget = nullptr;
- ANGLE_TRY(firstColorAttachment->getRenderTarget(&renderTarget));
- samples = renderTarget->getSamples();
- }
+ int samples = framebuffer->getSamples(data);
gl::RasterizerState rasterizer = glState.getRasterizerState();
rasterizer.pointDrawMode = (drawMode == GL_POINTS);
rasterizer.multiSample = (samples != 0);
@@ -1041,18 +928,7 @@ gl::Error Renderer9::setBlendDepthRasterStates(const gl::ContextState &glData, G
const auto &glState = glData.getState();
auto drawFramebuffer = glState.getDrawFramebuffer();
ASSERT(!drawFramebuffer->hasAnyDirtyBit());
- // Since framebuffer->getSamples will return the original samples which may be different with
- // the sample counts that we set in render target view, here we use renderTarget->getSamples to
- // get the actual samples.
- GLsizei samples = 0;
- auto firstColorAttachment = drawFramebuffer->getFirstColorbuffer();
- if (firstColorAttachment)
- {
- ASSERT(firstColorAttachment->isAttached());
- RenderTarget9 *renderTarget = nullptr;
- ANGLE_TRY(firstColorAttachment->getRenderTarget(&renderTarget));
- samples = renderTarget->getSamples();
- }
+ int samples = drawFramebuffer->getSamples(glData);
gl::RasterizerState rasterizer = glState.getRasterizerState();
rasterizer.pointDrawMode = (drawMode == GL_POINTS);
rasterizer.multiSample = (samples != 0);
@@ -2464,15 +2340,6 @@ gl::Error Renderer9::copyTexture(const gl::Texture *source,
return gl::Error(GL_INVALID_OPERATION);
}
-gl::Error Renderer9::copyCompressedTexture(const gl::Texture *source,
- GLint sourceLevel,
- TextureStorage *storage,
- GLint destLevel)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
gl::Error Renderer9::createRenderTarget(int width, int height, GLenum format, GLsizei samples, RenderTargetD3D **outRT)
{
const d3d9::TextureFormat &d3d9FormatInfo = d3d9::GetTextureFormatInfo(format);
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d9/Renderer9.h b/gfx/angle/src/libANGLE/renderer/d3d/d3d9/Renderer9.h
index 9c3ae8b04..fb8d8fa21 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d9/Renderer9.h
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d9/Renderer9.h
@@ -18,7 +18,6 @@
#include "libANGLE/renderer/d3d/d3d9/ShaderCache.h"
#include "libANGLE/renderer/d3d/d3d9/VertexDeclarationCache.h"
#include "libANGLE/renderer/d3d/d3d9/StateManager9.h"
-#include "libANGLE/renderer/driver_utils.h"
namespace gl
{
@@ -88,17 +87,9 @@ class Renderer9 : public RendererD3D
SwapChainD3D *createSwapChain(NativeWindowD3D *nativeWindow,
HANDLE shareHandle,
- IUnknown *d3dTexture,
GLenum backBufferFormat,
GLenum depthBufferFormat,
EGLint orientation) override;
- egl::Error getD3DTextureInfo(IUnknown *d3dTexture,
- EGLint *width,
- EGLint *height,
- GLenum *fboFormat) const override;
- egl::Error validateShareHandle(const egl::Config *config,
- HANDLE shareHandle,
- const egl::AttributeMap &attribs) const override;
ContextImpl *createContext(const gl::ContextState &state) override;
@@ -220,10 +211,6 @@ class Renderer9 : public RendererD3D
bool unpackFlipY,
bool unpackPremultiplyAlpha,
bool unpackUnmultiplyAlpha) override;
- gl::Error copyCompressedTexture(const gl::Texture *source,
- GLint sourceLevel,
- TextureStorage *storage,
- GLint destLevel) override;
// RenderTarget creation
gl::Error createRenderTarget(int width,
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d9/StateManager9.cpp b/gfx/angle/src/libANGLE/renderer/d3d/d3d9/StateManager9.cpp
index 54885bf81..5fb675ddb 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d9/StateManager9.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d9/StateManager9.cpp
@@ -70,7 +70,7 @@ StateManager9::~StateManager9()
void StateManager9::initialize()
{
- mUsingZeroColorMaskWorkaround = IsAMD(mRenderer9->getVendorId());
+ mUsingZeroColorMaskWorkaround = mRenderer9->getVendorId() == VENDOR_ID_AMD;
}
void StateManager9::forceSetBlendState()
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d9/SwapChain9.cpp b/gfx/angle/src/libANGLE/renderer/d3d/d3d9/SwapChain9.cpp
index 7e6948ebb..b61809050 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d9/SwapChain9.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d9/SwapChain9.cpp
@@ -19,11 +19,10 @@ namespace rx
SwapChain9::SwapChain9(Renderer9 *renderer,
NativeWindow9 *nativeWindow,
HANDLE shareHandle,
- IUnknown *d3dTexture,
GLenum backBufferFormat,
GLenum depthBufferFormat,
EGLint orientation)
- : SwapChainD3D(shareHandle, d3dTexture, backBufferFormat, depthBufferFormat),
+ : SwapChainD3D(shareHandle, backBufferFormat, depthBufferFormat),
mRenderer(renderer),
mWidth(-1),
mHeight(-1),
@@ -106,37 +105,28 @@ EGLint SwapChain9::reset(int backbufferWidth, int backbufferHeight, EGLint swapI
SafeRelease(mOffscreenTexture);
SafeRelease(mDepthStencil);
- const d3d9::TextureFormat &backBufferd3dFormatInfo =
- d3d9::GetTextureFormatInfo(mOffscreenRenderTargetFormat);
- if (mD3DTexture != nullptr)
+ HANDLE *pShareHandle = NULL;
+ if (!mNativeWindow->getNativeWindow() && mRenderer->getShareHandleSupport())
{
- result = mD3DTexture->QueryInterface(&mOffscreenTexture);
- ASSERT(SUCCEEDED(result));
+ pShareHandle = &mShareHandle;
}
- else
+
+ const d3d9::TextureFormat &backBufferd3dFormatInfo = d3d9::GetTextureFormatInfo(mOffscreenRenderTargetFormat);
+ result = device->CreateTexture(backbufferWidth, backbufferHeight, 1, D3DUSAGE_RENDERTARGET,
+ backBufferd3dFormatInfo.texFormat, D3DPOOL_DEFAULT, &mOffscreenTexture,
+ pShareHandle);
+ if (FAILED(result))
{
- HANDLE *pShareHandle = NULL;
- if (!mNativeWindow->getNativeWindow() && mRenderer->getShareHandleSupport())
+ ERR("Could not create offscreen texture: %08lX", result);
+ release();
+
+ if (d3d9::isDeviceLostError(result))
{
- pShareHandle = &mShareHandle;
+ return EGL_CONTEXT_LOST;
}
-
- result = device->CreateTexture(backbufferWidth, backbufferHeight, 1, D3DUSAGE_RENDERTARGET,
- backBufferd3dFormatInfo.texFormat, D3DPOOL_DEFAULT,
- &mOffscreenTexture, pShareHandle);
- if (FAILED(result))
+ else
{
- ERR("Could not create offscreen texture: %08lX", result);
- release();
-
- if (d3d9::isDeviceLostError(result))
- {
- return EGL_CONTEXT_LOST;
- }
- else
- {
- return EGL_BAD_ALLOC;
- }
+ return EGL_BAD_ALLOC;
}
}
@@ -201,7 +191,7 @@ EGLint SwapChain9::reset(int backbufferWidth, int backbufferHeight, EGLint swapI
//
// Some non-switchable AMD GPUs / drivers do not respect the source rectangle to Present. Therefore, when the vendor ID
// is not Intel, the back buffer width must be exactly the same width as the window or horizontal scaling will occur.
- if (IsIntel(mRenderer->getVendorId()))
+ if (mRenderer->getVendorId() == VENDOR_ID_INTEL)
{
presentParameters.BackBufferWidth = (presentParameters.BackBufferWidth + 63) / 64 * 64;
}
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d9/SwapChain9.h b/gfx/angle/src/libANGLE/renderer/d3d/d3d9/SwapChain9.h
index 2e5cce1db..7c21b1788 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d9/SwapChain9.h
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d9/SwapChain9.h
@@ -24,7 +24,6 @@ class SwapChain9 : public SwapChainD3D
SwapChain9(Renderer9 *renderer,
NativeWindow9 *nativeWindow,
HANDLE shareHandle,
- IUnknown *d3dTexture,
GLenum backBufferFormat,
GLenum depthBufferFormat,
EGLint orientation);
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d9/TextureStorage9.cpp b/gfx/angle/src/libANGLE/renderer/d3d/d3d9/TextureStorage9.cpp
index db8765218..fd792752a 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d9/TextureStorage9.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d9/TextureStorage9.cpp
@@ -153,6 +153,7 @@ gl::Error TextureStorage9_2D::getSurfaceLevel(GLenum target,
IDirect3DSurface9 **outSurface)
{
ASSERT(target == GL_TEXTURE_2D);
+ UNUSED_ASSERTION_VARIABLE(target);
IDirect3DBaseTexture9 *baseTexture = NULL;
gl::Error error = getBaseTexture(&baseTexture);
@@ -328,6 +329,8 @@ gl::Error TextureStorage9_EGLImage::getSurfaceLevel(GLenum target,
{
ASSERT(target == GL_TEXTURE_2D);
ASSERT(level == 0);
+ UNUSED_ASSERTION_VARIABLE(target);
+ UNUSED_ASSERTION_VARIABLE(level);
RenderTargetD3D *renderTargetD3D = nullptr;
gl::Error error = mImage->getRenderTarget(&renderTargetD3D);
@@ -347,6 +350,7 @@ gl::Error TextureStorage9_EGLImage::getRenderTarget(const gl::ImageIndex &index,
{
ASSERT(!index.hasLayer());
ASSERT(index.mipIndex == 0);
+ UNUSED_ASSERTION_VARIABLE(index);
return mImage->getRenderTarget(outRT);
}
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d9/VertexDeclarationCache.cpp b/gfx/angle/src/libANGLE/renderer/d3d/d3d9/VertexDeclarationCache.cpp
index c2e935e71..afae5188c 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d9/VertexDeclarationCache.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d9/VertexDeclarationCache.cpp
@@ -94,7 +94,7 @@ gl::Error VertexDeclarationCache::applyDeclaration(
// The validation layer checks that there is at least one active attribute with a zero divisor as per
// the GL_ANGLE_instanced_arrays spec.
- ASSERT(indexedAttribute != invalidAttribIndex || !attributes.size());
+ ASSERT(indexedAttribute != invalidAttribIndex);
}
D3DCAPS9 caps;
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d9/formatutils9.cpp b/gfx/angle/src/libANGLE/renderer/d3d/d3d9/formatutils9.cpp
index 7cff9a117..8e6d40e25 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d9/formatutils9.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d9/formatutils9.cpp
@@ -24,13 +24,13 @@ namespace rx
namespace d3d9
{
-constexpr D3DFORMAT D3DFMT_INTZ = ((D3DFORMAT)(MAKEFOURCC('I', 'N', 'T', 'Z')));
-constexpr D3DFORMAT D3DFMT_NULL = ((D3DFORMAT)(MAKEFOURCC('N', 'U', 'L', 'L')));
+const D3DFORMAT D3DFMT_INTZ = ((D3DFORMAT)(MAKEFOURCC('I', 'N', 'T', 'Z')));
+const D3DFORMAT D3DFMT_NULL = ((D3DFORMAT)(MAKEFOURCC('N', 'U', 'L', 'L')));
// A map to determine the pixel size and mip generation function of a given D3D format
typedef std::map<D3DFORMAT, D3DFormat> D3D9FormatInfoMap;
-constexpr D3DFormat::D3DFormat()
+D3DFormat::D3DFormat()
: pixelBytes(0),
blockWidth(0),
blockHeight(0),
@@ -41,188 +41,97 @@ constexpr D3DFormat::D3DFormat()
luminanceBits(0),
depthBits(0),
stencilBits(0),
- formatID(angle::Format::ID::NONE)
+ info(nullptr)
{
}
-constexpr D3DFormat::D3DFormat(GLuint bits,
- GLuint blockWidth,
- GLuint blockHeight,
- GLuint redBits,
- GLuint greenBits,
- GLuint blueBits,
- GLuint alphaBits,
- GLuint lumBits,
- GLuint depthBits,
- GLuint stencilBits,
- Format::ID formatID)
- : pixelBytes(bits / 8),
- blockWidth(blockWidth),
- blockHeight(blockHeight),
- redBits(redBits),
- greenBits(greenBits),
- blueBits(blueBits),
- alphaBits(alphaBits),
- luminanceBits(lumBits),
- depthBits(depthBits),
- stencilBits(stencilBits),
- formatID(formatID)
+static inline void InsertD3DFormatInfo(D3D9FormatInfoMap *map,
+ D3DFORMAT format,
+ GLuint bits,
+ GLuint blockWidth,
+ GLuint blockHeight,
+ GLuint redBits,
+ GLuint greenBits,
+ GLuint blueBits,
+ GLuint alphaBits,
+ GLuint lumBits,
+ GLuint depthBits,
+ GLuint stencilBits,
+ Format::ID formatID)
{
+ D3DFormat info;
+ info.pixelBytes = bits / 8;
+ info.blockWidth = blockWidth;
+ info.blockHeight = blockHeight;
+ info.redBits = redBits;
+ info.greenBits = greenBits;
+ info.blueBits = blueBits;
+ info.alphaBits = alphaBits;
+ info.luminanceBits = lumBits;
+ info.depthBits = depthBits;
+ info.stencilBits = stencilBits;
+ info.info = &Format::Get(formatID);
+
+ map->insert(std::make_pair(format, info));
+}
+
+static D3D9FormatInfoMap BuildD3D9FormatInfoMap()
+{
+ using namespace angle; // For image reading and mipmap generation functions
+
+ D3D9FormatInfoMap map;
+
+ // clang-format off
+ // | D3DFORMAT | S |W |H | R | G | B | A | L | D | S | ANGLE format |
+ InsertD3DFormatInfo(&map, D3DFMT_NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, Format::ID::NONE );
+ InsertD3DFormatInfo(&map, D3DFMT_UNKNOWN, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, Format::ID::NONE );
+
+ InsertD3DFormatInfo(&map, D3DFMT_L8, 8, 1, 1, 0, 0, 0, 0, 8, 0, 0, Format::ID::L8_UNORM );
+ InsertD3DFormatInfo(&map, D3DFMT_A8, 8, 1, 1, 0, 0, 0, 8, 0, 0, 0, Format::ID::A8_UNORM );
+ InsertD3DFormatInfo(&map, D3DFMT_A8L8, 16, 1, 1, 0, 0, 0, 8, 8, 0, 0, Format::ID::L8A8_UNORM );
+ InsertD3DFormatInfo(&map, D3DFMT_A4R4G4B4, 16, 1, 1, 4, 4, 4, 4, 0, 0, 0, Format::ID::B4G4R4A4_UNORM );
+ InsertD3DFormatInfo(&map, D3DFMT_A1R5G5B5, 16, 1, 1, 5, 5, 5, 1, 0, 0, 0, Format::ID::B5G5R5A1_UNORM );
+ InsertD3DFormatInfo(&map, D3DFMT_R5G6B5, 16, 1, 1, 5, 6, 5, 0, 0, 0, 0, Format::ID::R5G6B5_UNORM );
+ InsertD3DFormatInfo(&map, D3DFMT_X8R8G8B8, 32, 1, 1, 8, 8, 8, 0, 0, 0, 0, Format::ID::B8G8R8X8_UNORM );
+ InsertD3DFormatInfo(&map, D3DFMT_A8R8G8B8, 32, 1, 1, 8, 8, 8, 8, 0, 0, 0, Format::ID::B8G8R8A8_UNORM );
+ InsertD3DFormatInfo(&map, D3DFMT_R16F, 16, 1, 1, 16, 0, 0, 0, 0, 0, 0, Format::ID::R16_FLOAT );
+ InsertD3DFormatInfo(&map, D3DFMT_G16R16F, 32, 1, 1, 16, 16, 0, 0, 0, 0, 0, Format::ID::R16G16_FLOAT );
+ InsertD3DFormatInfo(&map, D3DFMT_A16B16G16R16F, 64, 1, 1, 16, 16, 16, 16, 0, 0, 0, Format::ID::R16G16B16A16_FLOAT );
+ InsertD3DFormatInfo(&map, D3DFMT_R32F, 32, 1, 1, 32, 0, 0, 0, 0, 0, 0, Format::ID::R32_FLOAT );
+ InsertD3DFormatInfo(&map, D3DFMT_G32R32F, 64, 1, 1, 32, 32, 0, 0, 0, 0, 0, Format::ID::R32G32_FLOAT );
+ InsertD3DFormatInfo(&map, D3DFMT_A32B32G32R32F, 128, 1, 1, 32, 32, 32, 32, 0, 0, 0, Format::ID::R32G32B32A32_FLOAT );
+
+ InsertD3DFormatInfo(&map, D3DFMT_D16, 16, 1, 1, 0, 0, 0, 0, 0, 16, 0, Format::ID::D16_UNORM );
+ InsertD3DFormatInfo(&map, D3DFMT_D24S8, 32, 1, 1, 0, 0, 0, 0, 0, 24, 8, Format::ID::D24_UNORM_S8_UINT );
+ InsertD3DFormatInfo(&map, D3DFMT_D24X8, 32, 1, 1, 0, 0, 0, 0, 0, 24, 0, Format::ID::D16_UNORM );
+ InsertD3DFormatInfo(&map, D3DFMT_D32, 32, 1, 1, 0, 0, 0, 0, 0, 32, 0, Format::ID::D32_UNORM );
+
+ InsertD3DFormatInfo(&map, D3DFMT_INTZ, 32, 1, 1, 0, 0, 0, 0, 0, 24, 8, Format::ID::D24_UNORM_S8_UINT );
+
+ InsertD3DFormatInfo(&map, D3DFMT_DXT1, 64, 4, 4, 0, 0, 0, 0, 0, 0, 0, Format::ID::BC1_RGBA_UNORM_BLOCK);
+ InsertD3DFormatInfo(&map, D3DFMT_DXT3, 128, 4, 4, 0, 0, 0, 0, 0, 0, 0, Format::ID::BC2_RGBA_UNORM_BLOCK);
+ InsertD3DFormatInfo(&map, D3DFMT_DXT5, 128, 4, 4, 0, 0, 0, 0, 0, 0, 0, Format::ID::BC3_RGBA_UNORM_BLOCK);
+ // clang-format on
+
+ return map;
}
const D3DFormat &GetD3DFormatInfo(D3DFORMAT format)
{
- if (format == D3DFMT_NULL)
+ static const D3D9FormatInfoMap infoMap = BuildD3D9FormatInfoMap();
+ D3D9FormatInfoMap::const_iterator iter = infoMap.find(format);
+ if (iter != infoMap.end())
{
- static constexpr D3DFormat info(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, Format::ID::NONE);
- return info;
+ return iter->second;
}
-
- if (format == D3DFMT_INTZ)
+ else
{
- static constexpr D3DFormat info(32, 1, 1, 0, 0, 0, 0, 0, 24, 8,
- Format::ID::D24_UNORM_S8_UINT);
- return info;
+ static const D3DFormat defaultInfo;
+ return defaultInfo;
}
+}
- switch (format)
- {
- case D3DFMT_UNKNOWN:
- {
- static constexpr D3DFormat info(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, Format::ID::NONE);
- return info;
- }
-
- case D3DFMT_L8:
- {
- static constexpr D3DFormat info(8, 1, 1, 0, 0, 0, 0, 8, 0, 0, Format::ID::L8_UNORM);
- return info;
- }
- case D3DFMT_A8:
- {
- static constexpr D3DFormat info(8, 1, 1, 0, 0, 0, 8, 0, 0, 0, Format::ID::A8_UNORM);
- return info;
- }
- case D3DFMT_A8L8:
- {
- static constexpr D3DFormat info(16, 1, 1, 0, 0, 0, 8, 8, 0, 0, Format::ID::L8A8_UNORM);
- return info;
- }
-
- case D3DFMT_A4R4G4B4:
- {
- static constexpr D3DFormat info(16, 1, 1, 4, 4, 4, 4, 0, 0, 0,
- Format::ID::B4G4R4A4_UNORM);
- return info;
- }
- case D3DFMT_A1R5G5B5:
- {
- static constexpr D3DFormat info(16, 1, 1, 5, 5, 5, 1, 0, 0, 0,
- Format::ID::B5G5R5A1_UNORM);
- return info;
- }
- case D3DFMT_R5G6B5:
- {
- static constexpr D3DFormat info(16, 1, 1, 5, 6, 5, 0, 0, 0, 0,
- Format::ID::R5G6B5_UNORM);
- return info;
- }
- case D3DFMT_X8R8G8B8:
- {
- static constexpr D3DFormat info(32, 1, 1, 8, 8, 8, 0, 0, 0, 0,
- Format::ID::B8G8R8X8_UNORM);
- return info;
- }
- case D3DFMT_A8R8G8B8:
- {
- static constexpr D3DFormat info(32, 1, 1, 8, 8, 8, 8, 0, 0, 0,
- Format::ID::B8G8R8A8_UNORM);
- return info;
- }
-
- case D3DFMT_R16F:
- {
- static constexpr D3DFormat info(16, 1, 1, 16, 0, 0, 0, 0, 0, 0, Format::ID::R16_FLOAT);
- return info;
- }
- case D3DFMT_G16R16F:
- {
- static constexpr D3DFormat info(32, 1, 1, 16, 16, 0, 0, 0, 0, 0,
- Format::ID::R16G16_FLOAT);
- return info;
- }
- case D3DFMT_A16B16G16R16F:
- {
- static constexpr D3DFormat info(64, 1, 1, 16, 16, 16, 16, 0, 0, 0,
- Format::ID::R16G16B16A16_FLOAT);
- return info;
- }
- case D3DFMT_R32F:
- {
- static constexpr D3DFormat info(32, 1, 1, 32, 0, 0, 0, 0, 0, 0, Format::ID::R32_FLOAT);
- return info;
- }
- case D3DFMT_G32R32F:
- {
- static constexpr D3DFormat info(64, 1, 1, 32, 32, 0, 0, 0, 0, 0,
- Format::ID::R32G32_FLOAT);
- return info;
- }
- case D3DFMT_A32B32G32R32F:
- {
- static constexpr D3DFormat info(128, 1, 1, 32, 32, 32, 32, 0, 0, 0,
- Format::ID::R32G32B32A32_FLOAT);
- return info;
- }
-
- case D3DFMT_D16:
- {
- static constexpr D3DFormat info(16, 1, 1, 0, 0, 0, 0, 0, 16, 0, Format::ID::D16_UNORM);
- return info;
- }
- case D3DFMT_D24S8:
- {
- static constexpr D3DFormat info(32, 1, 1, 0, 0, 0, 0, 0, 24, 8,
- Format::ID::D24_UNORM_S8_UINT);
- return info;
- }
- case D3DFMT_D24X8:
- {
- static constexpr D3DFormat info(32, 1, 1, 0, 0, 0, 0, 0, 24, 0, Format::ID::D16_UNORM);
- return info;
- }
- case D3DFMT_D32:
- {
- static constexpr D3DFormat info(32, 1, 1, 0, 0, 0, 0, 0, 32, 0, Format::ID::D32_UNORM);
- return info;
- }
-
- case D3DFMT_DXT1:
- {
- static constexpr D3DFormat info(64, 4, 4, 0, 0, 0, 0, 0, 0, 0,
- Format::ID::BC1_RGBA_UNORM_BLOCK);
- return info;
- }
- case D3DFMT_DXT3:
- {
- static constexpr D3DFormat info(128, 4, 4, 0, 0, 0, 0, 0, 0, 0,
- Format::ID::BC2_RGBA_UNORM_BLOCK);
- return info;
- }
- case D3DFMT_DXT5:
- {
- static constexpr D3DFormat info(128, 4, 4, 0, 0, 0, 0, 0, 0, 0,
- Format::ID::BC3_RGBA_UNORM_BLOCK);
- return info;
- }
- default:
- {
- static constexpr D3DFormat defaultInfo;
- return defaultInfo;
- }
- }
-}
typedef std::pair<GLint, InitializeTextureDataFunction> InternalFormatInitialzerPair;
typedef std::map<GLint, InitializeTextureDataFunction> InternalFormatInitialzerMap;
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d9/formatutils9.h b/gfx/angle/src/libANGLE/renderer/d3d/d3d9/formatutils9.h
index 828252d33..2937e14e7 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d9/formatutils9.h
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d9/formatutils9.h
@@ -29,20 +29,7 @@ namespace d3d9
struct D3DFormat
{
- constexpr D3DFormat();
- constexpr D3DFormat(GLuint pixelBytes,
- GLuint blockWidth,
- GLuint blockHeight,
- GLuint redBits,
- GLuint greenBits,
- GLuint blueBits,
- GLuint alphaBits,
- GLuint luminanceBits,
- GLuint depthBits,
- GLuint stencilBits,
- angle::Format::ID formatID);
-
- const angle::Format &info() const { return angle::Format::Get(formatID); }
+ D3DFormat();
GLuint pixelBytes;
GLuint blockWidth;
@@ -57,7 +44,7 @@ struct D3DFormat
GLuint depthBits;
GLuint stencilBits;
- angle::Format::ID formatID;
+ const angle::Format *info;
};
const D3DFormat &GetD3DFormatInfo(D3DFORMAT format);
diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d9/renderer9_utils.cpp b/gfx/angle/src/libANGLE/renderer/d3d/d3d9/renderer9_utils.cpp
index a6e1f239d..1883636a3 100755
--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d9/renderer9_utils.cpp
+++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d9/renderer9_utils.cpp
@@ -18,7 +18,6 @@
#include "libANGLE/renderer/d3d/d3d9/RenderTarget9.h"
#include "libANGLE/renderer/d3d/FramebufferD3D.h"
#include "libANGLE/renderer/d3d/WorkaroundsD3D.h"
-#include "libANGLE/renderer/driver_utils.h"
#include "third_party/systeminfo/SystemInfo.h"
@@ -307,7 +306,7 @@ GLsizei GetSamplesCount(D3DMULTISAMPLE_TYPE type)
bool IsFormatChannelEquivalent(D3DFORMAT d3dformat, GLenum format)
{
- GLenum internalFormat = d3d9::GetD3DFormatInfo(d3dformat).info().glInternalFormat;
+ GLenum internalFormat = d3d9::GetD3DFormatInfo(d3dformat).info->glInternalFormat;
GLenum convertedFormat = gl::GetInternalFormatInfo(internalFormat).format;
return convertedFormat == format;
}
@@ -541,12 +540,12 @@ void GenerateCaps(IDirect3D9 *d3d9,
{
// ATI cards on XP have problems with non-power-of-two textures.
extensions->textureNPOT = !(deviceCaps.TextureCaps & D3DPTEXTURECAPS_POW2) &&
- !(deviceCaps.TextureCaps & D3DPTEXTURECAPS_CUBEMAP_POW2) &&
- !(deviceCaps.TextureCaps & D3DPTEXTURECAPS_NONPOW2CONDITIONAL) &&
- !(!isWindowsVistaOrGreater() && IsAMD(adapterId.VendorId));
+ !(deviceCaps.TextureCaps & D3DPTEXTURECAPS_CUBEMAP_POW2) &&
+ !(deviceCaps.TextureCaps & D3DPTEXTURECAPS_NONPOW2CONDITIONAL) &&
+ !(!isWindowsVistaOrGreater() && adapterId.VendorId == VENDOR_ID_AMD);
// Disable depth texture support on AMD cards (See ANGLE issue 839)
- if (IsAMD(adapterId.VendorId))
+ if (adapterId.VendorId == VENDOR_ID_AMD)
{
extensions->depthTextures = false;
}
diff --git a/gfx/angle/src/libANGLE/renderer/driver_utils.cpp b/gfx/angle/src/libANGLE/renderer/driver_utils.cpp
deleted file mode 100644
index 7e7b2d8a2..000000000
--- a/gfx/angle/src/libANGLE/renderer/driver_utils.cpp
+++ /dev/null
@@ -1,81 +0,0 @@
-//
-// Copyright (c) 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-
-// driver_utils.h : provides more information about current driver.
-
-#include <algorithm>
-
-#include "libANGLE/renderer/driver_utils.h"
-
-namespace rx
-{
-// Intel
-// Referenced from https://cgit.freedesktop.org/vaapi/intel-driver/tree/src/i965_pciids.h
-namespace
-{
-// gen7
-const uint32_t Haswell[] = {
- 0x0402, 0x0406, 0x040A, 0x040B, 0x040E, 0x0C02, 0x0C06, 0x0C0A, 0x0C0B, 0x0C0E,
- 0x0A02, 0x0A06, 0x0A0A, 0x0A0B, 0x0A0E, 0x0D02, 0x0D06, 0x0D0A, 0x0D0B, 0x0D0E, // hsw_gt1
- 0x0412, 0x0416, 0x041A, 0x041B, 0x041E, 0x0C12, 0x0C16, 0x0C1A, 0x0C1B, 0x0C1E,
- 0x0A12, 0x0A16, 0x0A1A, 0x0A1B, 0x0A1E, 0x0D12, 0x0D16, 0x0D1A, 0x0D1B, 0x0D1E, // hsw_gt2
- 0x0422, 0x0426, 0x042A, 0x042B, 0x042E, 0x0C22, 0x0C26, 0x0C2A, 0x0C2B, 0x0C2E,
- 0x0A22, 0x0A26, 0x0A2A, 0x0A2B, 0x0A2E, 0x0D22, 0x0D26, 0x0D2A, 0x0D2B, 0x0D2E // hsw_gt3
-};
-
-// gen8
-const uint32_t Broadwell[] = {0x1602, 0x1606, 0x160A, 0x160B, 0x160D, 0x160E,
- 0x1612, 0x1616, 0x161A, 0x161B, 0x161D, 0x161E,
- 0x1622, 0x1626, 0x162A, 0x162B, 0x162D, 0x162E};
-
-const uint32_t CherryView[] = {0x22B0, 0x22B1, 0x22B2, 0x22B3};
-
-// gen9
-const uint32_t Skylake[] = {0x1902, 0x1906, 0x190A, 0x190B, 0x190E, 0x1912, 0x1913, 0x1915, 0x1916,
- 0x1917, 0x191A, 0x191B, 0x191D, 0x191E, 0x1921, 0x1923, 0x1926, 0x1927,
- 0x192A, 0x192B, 0x192D, 0x1932, 0x193A, 0x193B, 0x193D};
-
-const uint32_t Broxton[] = {0x0A84, 0x1A84, 0x1A85, 0x5A84, 0x5A85};
-
-// gen9p5
-const uint32_t Kabylake[] = {0x5916, 0x5913, 0x5906, 0x5926, 0x5921, 0x5915, 0x590E,
- 0x591E, 0x5912, 0x5917, 0x5902, 0x591B, 0x593B, 0x590B,
- 0x591A, 0x590A, 0x591D, 0x5908, 0x5923, 0x5927};
-
-} // anonymous namespace
-
-bool IsHaswell(uint32_t DeviceId)
-{
- return std::find(std::begin(Haswell), std::end(Haswell), DeviceId) != std::end(Haswell);
-}
-
-bool IsBroadwell(uint32_t DeviceId)
-{
- return std::find(std::begin(Broadwell), std::end(Broadwell), DeviceId) != std::end(Broadwell);
-}
-
-bool IsCherryView(uint32_t DeviceId)
-{
- return std::find(std::begin(CherryView), std::end(CherryView), DeviceId) !=
- std::end(CherryView);
-}
-
-bool IsSkylake(uint32_t DeviceId)
-{
- return std::find(std::begin(Skylake), std::end(Skylake), DeviceId) != std::end(Skylake);
-}
-
-bool IsBroxton(uint32_t DeviceId)
-{
- return std::find(std::begin(Broxton), std::end(Broxton), DeviceId) != std::end(Broxton);
-}
-
-bool IsKabylake(uint32_t DeviceId)
-{
- return std::find(std::begin(Kabylake), std::end(Kabylake), DeviceId) != std::end(Kabylake);
-}
-
-} // namespace rx \ No newline at end of file
diff --git a/gfx/angle/src/libANGLE/renderer/driver_utils.h b/gfx/angle/src/libANGLE/renderer/driver_utils.h
deleted file mode 100644
index 865de73e1..000000000
--- a/gfx/angle/src/libANGLE/renderer/driver_utils.h
+++ /dev/null
@@ -1,57 +0,0 @@
-//
-// Copyright (c) 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-
-// driver_utils.h : provides more information about current driver.
-
-#ifndef LIBANGLE_RENDERER_DRIVER_UTILS_H_
-#define LIBANGLE_RENDERER_DRIVER_UTILS_H_
-
-#include "libANGLE/angletypes.h"
-
-namespace rx
-{
-
-enum VendorID : uint32_t
-{
- VENDOR_ID_UNKNOWN = 0x0,
- VENDOR_ID_AMD = 0x1002,
- VENDOR_ID_INTEL = 0x8086,
- VENDOR_ID_NVIDIA = 0x10DE,
- // This is Qualcomm PCI Vendor ID.
- // Android doesn't have a PCI bus, but all we need is a unique id.
- VENDOR_ID_QUALCOMM = 0x5143,
-};
-
-inline bool IsAMD(uint32_t vendor_id)
-{
- return vendor_id == VENDOR_ID_AMD;
-}
-
-inline bool IsIntel(uint32_t vendor_id)
-{
- return vendor_id == VENDOR_ID_INTEL;
-}
-
-inline bool IsNvidia(uint32_t vendor_id)
-{
- return vendor_id == VENDOR_ID_NVIDIA;
-}
-
-inline bool IsQualcomm(uint32_t vendor_id)
-{
- return vendor_id == VENDOR_ID_QUALCOMM;
-}
-
-// Intel
-bool IsHaswell(uint32_t DeviceId);
-bool IsBroadwell(uint32_t DeviceId);
-bool IsCherryView(uint32_t DeviceId);
-bool IsSkylake(uint32_t DeviceId);
-bool IsBroxton(uint32_t DeviceId);
-bool IsKabylake(uint32_t DeviceId);
-
-} // namespace rx
-#endif // LIBANGLE_RENDERER_DRIVER_UTILS_H_ \ No newline at end of file
diff --git a/gfx/angle/src/libANGLE/renderer/gen_angle_format_table.py b/gfx/angle/src/libANGLE/renderer/gen_angle_format_table.py
index 6b56bb40c..7356fc414 100755
--- a/gfx/angle/src/libANGLE/renderer/gen_angle_format_table.py
+++ b/gfx/angle/src/libANGLE/renderer/gen_angle_format_table.py
@@ -16,7 +16,7 @@ import re
import sys
template_autogen_h = """// GENERATED FILE - DO NOT EDIT.
-// Generated by {script_name} using data from {data_source_name}
+// Generated by gen_angle_format_table.py using data from angle_format_data.json
//
// Copyright {copyright_year} The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
@@ -35,8 +35,8 @@ enum class Format::ID
}} // namespace angle
"""
-template_autogen_inl = """// GENERATED FILE - DO NOT EDIT.
-// Generated by {script_name} using data from {data_source_name}
+template_autogen_cpp = """// GENERATED FILE - DO NOT EDIT.
+// Generated by gen_angle_format_table.py using data from angle_format_data.json
//
// Copyright {copyright_year} The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
@@ -54,21 +54,21 @@ template_autogen_inl = """// GENERATED FILE - DO NOT EDIT.
namespace angle
{{
-static constexpr rx::FastCopyFunctionMap::Entry BGRAEntry = {{GL_RGBA, GL_UNSIGNED_BYTE,
- CopyBGRA8ToRGBA8}};
-static constexpr rx::FastCopyFunctionMap BGRACopyFunctions = {{&BGRAEntry, 1}};
-static constexpr rx::FastCopyFunctionMap NoCopyFunctions;
-
-constexpr Format g_formatInfoTable[] = {{
- // clang-format off
- {{ Format::ID::NONE, GL_NONE, GL_NONE, nullptr, NoCopyFunctions, nullptr, GL_NONE, 0, 0, 0, 0, 0, 0 }},
-{angle_format_info_cases} // clang-format on
-}};
-
// static
const Format &Format::Get(ID id)
{{
- return g_formatInfoTable[static_cast<size_t>(id)];
+ // clang-format off
+ switch (id)
+ {{
+{angle_format_info_cases}
+ default:
+ UNREACHABLE();
+ break;
+ }}
+ // clang-format on
+
+ static const Format noneInfo(ID::NONE, GL_NONE, GL_NONE, nullptr, nullptr);
+ return noneInfo;
}}
}} // namespace angle
@@ -123,7 +123,14 @@ def get_color_read_function(angle_format):
}
return 'ReadColor<' + channel_struct + ', '+ component_type_map[angle_format['componentType']] + '>'
-format_entry_template = """ {{ Format::ID::{id}, {glInternalFormat}, {fboImplementationInternalFormat}, {mipGenerationFunction}, {fastCopyFunctions}, {colorReadFunction}, {namedComponentType}, {R}, {G}, {B}, {A}, {D}, {S} }},
+format_entry_template = """{space}{{
+{space} static const Format info(ID::{id},
+{space} {glInternalFormat},
+{space} {fboImplementationInternalFormat},
+{space} {mipGenerationFunction},
+{space} {colorReadFunction});
+{space} return info;
+{space}}}
"""
def get_component_type(format_id):
@@ -167,29 +174,13 @@ def get_bits(format_id):
bits[token[0]] = int(token[1:])
return bits
-def get_named_component_type(component_type):
- if component_type == "snorm":
- return "GL_SIGNED_NORMALIZED"
- elif component_type == "unorm":
- return "GL_UNSIGNED_NORMALIZED"
- elif component_type == "float":
- return "GL_FLOAT"
- elif component_type == "uint":
- return "GL_UNSIGNED_INT"
- elif component_type == "int":
- return "GL_INT"
- elif component_type == "none":
- return "GL_NONE"
- else:
- raise ValueError("Unknown component type for " + component_type)
-
def json_to_table_data(format_id, json, angle_to_gl):
table_data = ""
parsed = {
+ "space": " ",
"id": format_id,
- "fastCopyFunctions": "NoCopyFunctions",
}
for k, v in json.iteritems():
@@ -214,25 +205,14 @@ def json_to_table_data(format_id, json, angle_to_gl):
parsed["mipGenerationFunction"] = get_mip_generation_function(parsed)
parsed["colorReadFunction"] = get_color_read_function(parsed)
- for channel in "ABDGLRS":
- if parsed["bits"] != None and channel in parsed["bits"]:
- parsed[channel] = parsed["bits"][channel]
- else:
- parsed[channel] = "0"
-
- parsed["namedComponentType"] = get_named_component_type(parsed["componentType"])
-
- if format_id == "B8G8R8A8_UNORM":
- parsed["fastCopyFunctions"] = "BGRACopyFunctions"
-
return format_entry_template.format(**parsed)
-def parse_angle_format_table(all_angle, json_data, angle_to_gl):
+def parse_json_into_angle_format_switch_string(all_angle, json_data, angle_to_gl):
table_data = ''
for format_id in sorted(all_angle):
- if format_id != "NONE":
- format_info = json_data[format_id] if format_id in json_data else {}
- table_data += json_to_table_data(format_id, format_info, angle_to_gl)
+ format_info = json_data[format_id] if format_id in json_data else {}
+ table_data += ' case ID::' + format_id + ':\n'
+ table_data += json_to_table_data(format_id, format_info, angle_to_gl)
return table_data
@@ -246,27 +226,22 @@ def gen_enum_string(all_angle):
gl_to_angle = angle_format.load_forward_table('angle_format_map.json')
angle_to_gl = angle_format.load_inverse_table('angle_format_map.json')
-data_source_name = 'angle_format_data.json'
-json_data = angle_format.load_json(data_source_name)
+json_data = angle_format.load_json('angle_format_data.json')
all_angle = angle_to_gl.keys()
-angle_format_cases = parse_angle_format_table(
+angle_format_cases = parse_json_into_angle_format_switch_string(
all_angle, json_data, angle_to_gl)
-output_cpp = template_autogen_inl.format(
- script_name = sys.argv[0],
- copyright_year = date.today().year,
- angle_format_info_cases = angle_format_cases,
- data_source_name = data_source_name)
-with open('Format_table_autogen.cpp', 'wt') as out_file:
+output_cpp = template_autogen_cpp.format(
+ copyright_year=date.today().year,
+ angle_format_info_cases=angle_format_cases)
+with open('Format_autogen.cpp', 'wt') as out_file:
out_file.write(output_cpp)
out_file.close()
enum_data = gen_enum_string(all_angle)
output_h = template_autogen_h.format(
- script_name = sys.argv[0],
- copyright_year = date.today().year,
- angle_format_enum = enum_data,
- data_source_name = data_source_name)
+ copyright_year=date.today().year,
+ angle_format_enum=enum_data)
with open('Format_ID_autogen.inl', 'wt') as out_file:
out_file.write(output_h)
out_file.close()
diff --git a/gfx/angle/src/libANGLE/renderer/gl/BlitGL.cpp b/gfx/angle/src/libANGLE/renderer/gl/BlitGL.cpp
index b181822ff..0a624dcb1 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/BlitGL.cpp
+++ b/gfx/angle/src/libANGLE/renderer/gl/BlitGL.cpp
@@ -30,7 +30,7 @@ gl::Error CheckCompileStatus(const rx::FunctionsGL *functions, GLuint shader)
return gl::Error(GL_OUT_OF_MEMORY, "Failed to compile internal blit shader.");
}
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
gl::Error CheckLinkStatus(const rx::FunctionsGL *functions, GLuint program)
@@ -43,7 +43,7 @@ gl::Error CheckLinkStatus(const rx::FunctionsGL *functions, GLuint program)
return gl::Error(GL_OUT_OF_MEMORY, "Failed to link internal blit program.");
}
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
} // anonymous namespace
@@ -58,9 +58,6 @@ BlitGL::BlitGL(const FunctionsGL *functions,
mWorkarounds(workarounds),
mStateManager(stateManager),
mBlitProgram(0),
- mSourceTextureLocation(-1),
- mScaleLocation(-1),
- mOffsetLocation(-1),
mScratchFBO(0),
mVAO(0)
{
@@ -133,7 +130,11 @@ gl::Error BlitGL::copySubImageToLUMAWorkaroundTexture(GLuint texture,
const gl::Rectangle &sourceArea,
const gl::Framebuffer *source)
{
- ANGLE_TRY(initializeResources());
+ gl::Error error = initializeResources();
+ if (error.isError())
+ {
+ return error;
+ }
// Blit the framebuffer to the first scratch texture
const FramebufferGL *sourceFramebufferGL = GetImplAs<FramebufferGL>(source);
@@ -145,6 +146,7 @@ gl::Error BlitGL::copySubImageToLUMAWorkaroundTexture(GLuint texture,
const gl::InternalFormat &internalFormatInfo =
gl::GetInternalFormatInfo(copyTexImageFormat.internalFormat);
+ mStateManager->activeTexture(0);
mStateManager->bindTexture(GL_TEXTURE_2D, mScratchTextures[0]);
mFunctions->copyTexImage2D(GL_TEXTURE_2D, 0, copyTexImageFormat.internalFormat, sourceArea.x,
sourceArea.y, sourceArea.width, sourceArea.height, 0);
@@ -169,6 +171,7 @@ gl::Error BlitGL::copySubImageToLUMAWorkaroundTexture(GLuint texture,
mScratchTextures[1], 0);
// Render to the destination texture, sampling from the scratch texture
+ mStateManager->useProgram(mBlitProgram);
mStateManager->setViewport(gl::Rectangle(0, 0, sourceArea.width, sourceArea.height));
mStateManager->setScissorTestEnabled(false);
mStateManager->setDepthRange(0.0f, 1.0f);
@@ -183,192 +186,16 @@ gl::Error BlitGL::copySubImageToLUMAWorkaroundTexture(GLuint texture,
mStateManager->setRasterizerDiscardEnabled(false);
mStateManager->bindTexture(GL_TEXTURE_2D, mScratchTextures[0]);
- setScratchTextureParameter(GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- setScratchTextureParameter(GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- mStateManager->activeTexture(0);
- mStateManager->bindTexture(GL_TEXTURE_2D, mScratchTextures[0]);
-
- mStateManager->useProgram(mBlitProgram);
- mFunctions->uniform1i(mSourceTextureLocation, 0);
- mFunctions->uniform2f(mScaleLocation, 1.0, 1.0);
- mFunctions->uniform2f(mOffsetLocation, 0.0, 0.0);
-
mStateManager->bindVertexArray(mVAO, 0);
- mFunctions->drawArrays(GL_TRIANGLES, 0, 3);
+ mFunctions->drawArrays(GL_TRIANGLES, 0, 6);
- // Copy the swizzled texture to the destination texture
+ // Finally, copy the swizzled texture to the destination texture
mStateManager->bindTexture(textureType, texture);
mFunctions->copyTexSubImage2D(target, static_cast<GLint>(level), destOffset.x, destOffset.y, 0,
0, sourceArea.width, sourceArea.height);
- // Finally orphan the scratch textures so they can be GCed by the driver.
- orphanScratchTextures();
-
- return gl::NoError();
-}
-
-gl::Error BlitGL::blitColorBufferWithShader(const gl::Framebuffer *source,
- const gl::Framebuffer *dest,
- const gl::Rectangle &sourceAreaIn,
- const gl::Rectangle &destAreaIn,
- GLenum filter)
-{
- ANGLE_TRY(initializeResources());
-
- // Normalize the destination area to have positive width and height because we will use
- // glViewport to set it, which doesn't allow negative width or height.
- gl::Rectangle sourceArea = sourceAreaIn;
- gl::Rectangle destArea = destAreaIn;
- if (destArea.width < 0)
- {
- destArea.x += destArea.width;
- destArea.width = -destArea.width;
- sourceArea.x += sourceArea.width;
- sourceArea.width = -sourceArea.width;
- }
- if (destArea.height < 0)
- {
- destArea.y += destArea.height;
- destArea.height = -destArea.height;
- sourceArea.y += sourceArea.height;
- sourceArea.height = -sourceArea.height;
- }
-
- const gl::FramebufferAttachment *readAttachment = source->getReadColorbuffer();
- ASSERT(readAttachment->getSamples() <= 1);
-
- // Compute the part of the source that will be sampled.
- gl::Rectangle inBoundsSource;
- {
- gl::Extents sourceSize = readAttachment->getSize();
- gl::Rectangle sourceBounds(0, 0, sourceSize.width, sourceSize.height);
- gl::ClipRectangle(sourceArea, sourceBounds, &inBoundsSource);
-
- // Note that inBoundsSource will have lost the orientation information.
- ASSERT(inBoundsSource.width >= 0 && inBoundsSource.height >= 0);
-
- // Early out when the sampled part is empty as the blit will be a noop,
- // and it prevents a division by zero in later computations.
- if (inBoundsSource.width == 0 || inBoundsSource.height == 0)
- {
- return gl::NoError();
- }
- }
-
- // The blit will be emulated by getting the source of the blit in a texture and sampling it
- // with CLAMP_TO_EDGE. The quad used to draw can trivially compute texture coordinates going
- // from (0, 0) to (1, 1). These texture coordinates will need to be transformed to make two
- // regions match:
- // - The region of the texture representing the source framebuffer region that will be sampled
- // - The region of the drawn quad that corresponds to non-clamped blit, this is the same as the
- // region of the source rectangle that is inside the source attachment.
- //
- // These two regions, T (texture) and D (dest) are defined by their offset in texcoord space
- // in (0, 1)^2 and their size in texcoord space in (-1, 1)^2. The size can be negative to
- // represent the orientation of the blit.
- //
- // Then if P is the quad texcoord, Q the texcoord inside T, and R the texture texcoord:
- // - Q = (P - D.offset) / D.size
- // - Q = (R - T.offset) / T.size
- // Hence R = (P - D.offset) / D.size * T.size - T.offset
- // = P * (T.size / D.size) + (T.offset - D.offset * T.size / D.size)
-
- GLuint textureId;
- gl::Vector2 TOffset;
- gl::Vector2 TSize;
-
- // TODO(cwallez) once texture dirty bits are landed, reuse attached texture instead of using
- // CopyTexImage2D
- {
- textureId = mScratchTextures[0];
- TOffset = gl::Vector2(0.0, 0.0);
- TSize = gl::Vector2(1.0, 1.0);
- if (sourceArea.width < 0)
- {
- TOffset.x = 1.0;
- TSize.x = -1.0;
- }
- if (sourceArea.height < 0)
- {
- TOffset.y = 1.0;
- TSize.y = -1.0;
- }
-
- GLenum format = readAttachment->getFormat().info->internalFormat;
- const FramebufferGL *sourceGL = GetImplAs<FramebufferGL>(source);
- mStateManager->bindFramebuffer(GL_READ_FRAMEBUFFER, sourceGL->getFramebufferID());
- mStateManager->bindTexture(GL_TEXTURE_2D, textureId);
-
- mFunctions->copyTexImage2D(GL_TEXTURE_2D, 0, format, inBoundsSource.x, inBoundsSource.y,
- inBoundsSource.width, inBoundsSource.height, 0);
- }
-
- // Compute normalized sampled draw quad region
- // It is the same as the region of the source rectangle that is in bounds.
- gl::Vector2 DOffset;
- gl::Vector2 DSize;
- {
- ASSERT(sourceArea.width != 0 && sourceArea.height != 0);
- gl::Rectangle orientedInBounds = inBoundsSource;
- if (sourceArea.width < 0)
- {
- orientedInBounds.x += orientedInBounds.width;
- orientedInBounds.width = -orientedInBounds.width;
- }
- if (sourceArea.height < 0)
- {
- orientedInBounds.y += orientedInBounds.height;
- orientedInBounds.height = -orientedInBounds.height;
- }
-
- DOffset =
- gl::Vector2(static_cast<float>(orientedInBounds.x - sourceArea.x) / sourceArea.width,
- static_cast<float>(orientedInBounds.y - sourceArea.y) / sourceArea.height);
- DSize = gl::Vector2(static_cast<float>(orientedInBounds.width) / sourceArea.width,
- static_cast<float>(orientedInBounds.height) / sourceArea.height);
- }
-
- ASSERT(DSize.x != 0.0 && DSize.y != 0.0);
- gl::Vector2 texCoordScale = gl::Vector2(TSize.x / DSize.x, TSize.y / DSize.y);
- gl::Vector2 texCoordOffset = gl::Vector2(TOffset.x - DOffset.x * texCoordScale.x,
- TOffset.y - DOffset.y * texCoordScale.y);
-
- // Reset all the state except scissor and viewport
- mStateManager->setDepthRange(0.0f, 1.0f);
- mStateManager->setBlendEnabled(false);
- mStateManager->setColorMask(true, true, true, true);
- mStateManager->setSampleAlphaToCoverageEnabled(false);
- mStateManager->setSampleCoverageEnabled(false);
- mStateManager->setDepthTestEnabled(false);
- mStateManager->setStencilTestEnabled(false);
- mStateManager->setCullFaceEnabled(false);
- mStateManager->setPolygonOffsetFillEnabled(false);
- mStateManager->setRasterizerDiscardEnabled(false);
-
- // Use the viewport to draw exactly to the destination rectangle
- mStateManager->setViewport(destArea);
-
- // Set uniforms
- setScratchTextureParameter(GL_TEXTURE_MIN_FILTER, filter);
- setScratchTextureParameter(GL_TEXTURE_MAG_FILTER, filter);
- setScratchTextureParameter(GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- setScratchTextureParameter(GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
- mStateManager->activeTexture(0);
- mStateManager->bindTexture(GL_TEXTURE_2D, mScratchTextures[0]);
-
- mStateManager->useProgram(mBlitProgram);
- mFunctions->uniform1i(mSourceTextureLocation, 0);
- mFunctions->uniform2f(mScaleLocation, texCoordScale.x, texCoordScale.y);
- mFunctions->uniform2f(mOffsetLocation, texCoordOffset.x, texCoordOffset.y);
-
- const FramebufferGL *destGL = GetImplAs<FramebufferGL>(dest);
- mStateManager->bindFramebuffer(GL_DRAW_FRAMEBUFFER, destGL->getFramebufferID());
-
- mStateManager->bindVertexArray(mVAO, 0);
- mFunctions->drawArrays(GL_TRIANGLES, 0, 3);
-
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
gl::Error BlitGL::initializeResources()
@@ -378,38 +205,41 @@ gl::Error BlitGL::initializeResources()
mBlitProgram = mFunctions->createProgram();
// Compile the fragment shader
- // It uses a single, large triangle, to avoid arithmetic precision issues where fragments
- // with the same Y coordinate don't get exactly the same interpolated texcoord Y.
const char *vsSource =
"#version 150\n"
"out vec2 v_texcoord;\n"
- "uniform vec2 u_scale;\n"
- "uniform vec2 u_offset;\n"
"\n"
"void main()\n"
"{\n"
- " const vec2 quad_positions[3] = vec2[3]\n"
+ " const vec2 quad_positions[6] = vec2[6]\n"
" (\n"
- " vec2(-0.5f, 0.0f),\n"
- " vec2( 1.5f, 0.0f),\n"
- " vec2( 0.5f, 2.0f)\n"
+ " vec2(0.0f, 0.0f),\n"
+ " vec2(0.0f, 1.0f),\n"
+ " vec2(1.0f, 0.0f),\n"
+ "\n"
+ " vec2(0.0f, 1.0f),\n"
+ " vec2(1.0f, 0.0f),\n"
+ " vec2(1.0f, 1.0f)\n"
" );\n"
"\n"
" gl_Position = vec4((quad_positions[gl_VertexID] * 2.0) - 1.0, 0.0, 1.0);\n"
- " v_texcoord = quad_positions[gl_VertexID] * u_scale + u_offset;\n"
+ " v_texcoord = quad_positions[gl_VertexID];\n"
"}\n";
GLuint vs = mFunctions->createShader(GL_VERTEX_SHADER);
mFunctions->shaderSource(vs, 1, &vsSource, nullptr);
mFunctions->compileShader(vs);
- ANGLE_TRY(CheckCompileStatus(mFunctions, vs));
+ gl::Error error = CheckCompileStatus(mFunctions, vs);
mFunctions->attachShader(mBlitProgram, vs);
mFunctions->deleteShader(vs);
+ if (error.isError())
+ {
+ return error;
+ }
+
// Compile the vertex shader
- // It discards if the texcoord is outside (0, 1)^2 so the blitframebuffer workaround
- // doesn't write when the point sampled is outside of the source framebuffer.
const char *fsSource =
"#version 150\n"
"uniform sampler2D u_source_texture;\n"
@@ -418,28 +248,32 @@ gl::Error BlitGL::initializeResources()
"\n"
"void main()\n"
"{\n"
- " if (clamp(v_texcoord, vec2(0.0), vec2(1.0)) != v_texcoord)\n"
- " {\n"
- " discard;\n"
- " }\n"
" output_color = texture(u_source_texture, v_texcoord);\n"
"}\n";
GLuint fs = mFunctions->createShader(GL_FRAGMENT_SHADER);
mFunctions->shaderSource(fs, 1, &fsSource, nullptr);
mFunctions->compileShader(fs);
- ANGLE_TRY(CheckCompileStatus(mFunctions, fs));
+ error = CheckCompileStatus(mFunctions, fs);
mFunctions->attachShader(mBlitProgram, fs);
mFunctions->deleteShader(fs);
+ if (error.isError())
+ {
+ return error;
+ }
+
mFunctions->linkProgram(mBlitProgram);
- ANGLE_TRY(CheckLinkStatus(mFunctions, mBlitProgram));
+ error = CheckLinkStatus(mFunctions, mBlitProgram);
+ if (error.isError())
+ {
+ return error;
+ }
- mSourceTextureLocation = mFunctions->getUniformLocation(mBlitProgram, "u_source_texture");
- mScaleLocation = mFunctions->getUniformLocation(mBlitProgram, "u_scale");
- mOffsetLocation = mFunctions->getUniformLocation(mBlitProgram, "u_offset");
+ GLuint textureUniform = mFunctions->getUniformLocation(mBlitProgram, "u_source_texture");
mStateManager->useProgram(mBlitProgram);
+ mFunctions->uniform1i(textureUniform, 0);
}
for (size_t i = 0; i < ArraySize(mScratchTextures); i++)
@@ -447,6 +281,11 @@ gl::Error BlitGL::initializeResources()
if (mScratchTextures[i] == 0)
{
mFunctions->genTextures(1, &mScratchTextures[i]);
+ mStateManager->bindTexture(GL_TEXTURE_2D, mScratchTextures[i]);
+
+ // Use nearest, non-mipmapped sampling with the scratch texture
+ mFunctions->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ mFunctions->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
}
}
@@ -460,27 +299,6 @@ gl::Error BlitGL::initializeResources()
mFunctions->genVertexArrays(1, &mVAO);
}
- return gl::NoError();
+ return gl::Error(GL_NO_ERROR);
}
-
-void BlitGL::orphanScratchTextures()
-{
- for (auto texture : mScratchTextures)
- {
- mStateManager->bindTexture(GL_TEXTURE_2D, texture);
- mFunctions->texImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE,
- nullptr);
- }
-}
-
-void BlitGL::setScratchTextureParameter(GLenum param, GLenum value)
-{
- for (auto texture : mScratchTextures)
- {
- mStateManager->bindTexture(GL_TEXTURE_2D, texture);
- mFunctions->texParameteri(GL_TEXTURE_2D, param, value);
- mFunctions->texParameteri(GL_TEXTURE_2D, param, value);
- }
}
-
-} // namespace rx
diff --git a/gfx/angle/src/libANGLE/renderer/gl/BlitGL.h b/gfx/angle/src/libANGLE/renderer/gl/BlitGL.h
index b306ede29..3ab8319bb 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/BlitGL.h
+++ b/gfx/angle/src/libANGLE/renderer/gl/BlitGL.h
@@ -52,26 +52,14 @@ class BlitGL : public angle::NonCopyable
const gl::Rectangle &sourceArea,
const gl::Framebuffer *source);
- gl::Error blitColorBufferWithShader(const gl::Framebuffer *source,
- const gl::Framebuffer *dest,
- const gl::Rectangle &sourceArea,
- const gl::Rectangle &destArea,
- GLenum filter);
-
gl::Error initializeResources();
private:
- void orphanScratchTextures();
- void setScratchTextureParameter(GLenum param, GLenum value);
-
const FunctionsGL *mFunctions;
const WorkaroundsGL &mWorkarounds;
StateManagerGL *mStateManager;
GLuint mBlitProgram;
- GLint mSourceTextureLocation;
- GLint mScaleLocation;
- GLint mOffsetLocation;
GLuint mScratchTextures[2];
GLuint mScratchFBO;
diff --git a/gfx/angle/src/libANGLE/renderer/gl/BufferGL.cpp b/gfx/angle/src/libANGLE/renderer/gl/BufferGL.cpp
index a5eda6b30..cd82733d7 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/BufferGL.cpp
+++ b/gfx/angle/src/libANGLE/renderer/gl/BufferGL.cpp
@@ -29,10 +29,8 @@ static const GLenum SourceBufferOperationTarget = GL_COPY_READ_BUFFER;
// supported GL versions and doesn't affect any current state when it changes.
static const GLenum DestBufferOperationTarget = GL_ARRAY_BUFFER;
-BufferGL::BufferGL(const gl::BufferState &state,
- const FunctionsGL *functions,
- StateManagerGL *stateManager)
- : BufferImpl(state),
+BufferGL::BufferGL(const FunctionsGL *functions, StateManagerGL *stateManager)
+ : BufferImpl(),
mIsMapped(false),
mMapOffset(0),
mMapSize(0),
@@ -55,7 +53,7 @@ BufferGL::~BufferGL()
mBufferID = 0;
}
-gl::Error BufferGL::setData(GLenum /*target*/, const void *data, size_t size, GLenum usage)
+gl::Error BufferGL::setData(const void* data, size_t size, GLenum usage)
{
mStateManager->bindBuffer(DestBufferOperationTarget, mBufferID);
mFunctions->bufferData(DestBufferOperationTarget, size, data, usage);
@@ -78,7 +76,7 @@ gl::Error BufferGL::setData(GLenum /*target*/, const void *data, size_t size, GL
return gl::Error(GL_NO_ERROR);
}
-gl::Error BufferGL::setSubData(GLenum /*target*/, const void *data, size_t size, size_t offset)
+gl::Error BufferGL::setSubData(const void* data, size_t size, size_t offset)
{
mStateManager->bindBuffer(DestBufferOperationTarget, mBufferID);
mFunctions->bufferSubData(DestBufferOperationTarget, offset, size, data);
diff --git a/gfx/angle/src/libANGLE/renderer/gl/BufferGL.h b/gfx/angle/src/libANGLE/renderer/gl/BufferGL.h
index d886873fe..e787ec86e 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/BufferGL.h
+++ b/gfx/angle/src/libANGLE/renderer/gl/BufferGL.h
@@ -21,13 +21,11 @@ class StateManagerGL;
class BufferGL : public BufferImpl
{
public:
- BufferGL(const gl::BufferState &state,
- const FunctionsGL *functions,
- StateManagerGL *stateManager);
+ BufferGL(const FunctionsGL *functions, StateManagerGL *stateManager);
~BufferGL() override;
- gl::Error setData(GLenum target, const void *data, size_t size, GLenum usage) override;
- gl::Error setSubData(GLenum target, const void *data, size_t size, size_t offset) override;
+ gl::Error setData(const void* data, size_t size, GLenum usage) override;
+ gl::Error setSubData(const void* data, size_t size, size_t offset) override;
gl::Error copySubData(BufferImpl* source, GLintptr sourceOffset, GLintptr destOffset, GLsizeiptr size) override;
gl::Error map(GLenum access, GLvoid **mapPtr) override;
gl::Error mapRange(size_t offset, size_t length, GLbitfield access, GLvoid **mapPtr) override;
diff --git a/gfx/angle/src/libANGLE/renderer/gl/ContextGL.cpp b/gfx/angle/src/libANGLE/renderer/gl/ContextGL.cpp
index 8e378a4be..57dc222b9 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/ContextGL.cpp
+++ b/gfx/angle/src/libANGLE/renderer/gl/ContextGL.cpp
@@ -62,8 +62,7 @@ ProgramImpl *ContextGL::createProgram(const gl::ProgramState &data)
FramebufferImpl *ContextGL::createFramebuffer(const gl::FramebufferState &data)
{
- return new FramebufferGL(data, getFunctions(), getStateManager(), getWorkaroundsGL(),
- mRenderer->getBlitter(), false);
+ return new FramebufferGL(data, getFunctions(), getStateManager(), getWorkaroundsGL(), false);
}
TextureImpl *ContextGL::createTexture(const gl::TextureState &state)
@@ -78,9 +77,9 @@ RenderbufferImpl *ContextGL::createRenderbuffer()
getNativeTextureCaps());
}
-BufferImpl *ContextGL::createBuffer(const gl::BufferState &state)
+BufferImpl *ContextGL::createBuffer()
{
- return new BufferGL(state, getFunctions(), getStateManager());
+ return new BufferGL(getFunctions(), getStateManager());
}
VertexArrayImpl *ContextGL::createVertexArray(const gl::VertexArrayState &data)
diff --git a/gfx/angle/src/libANGLE/renderer/gl/ContextGL.h b/gfx/angle/src/libANGLE/renderer/gl/ContextGL.h
index b3d5e0ee8..798a90436 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/ContextGL.h
+++ b/gfx/angle/src/libANGLE/renderer/gl/ContextGL.h
@@ -47,7 +47,7 @@ class ContextGL : public ContextImpl
RenderbufferImpl *createRenderbuffer() override;
// Buffer creation
- BufferImpl *createBuffer(const gl::BufferState &state) override;
+ BufferImpl *createBuffer() override;
// Vertex Array creation
VertexArrayImpl *createVertexArray(const gl::VertexArrayState &data) override;
diff --git a/gfx/angle/src/libANGLE/renderer/gl/DisplayGL.cpp b/gfx/angle/src/libANGLE/renderer/gl/DisplayGL.cpp
index 30c5c7b4e..e57513326 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/DisplayGL.cpp
+++ b/gfx/angle/src/libANGLE/renderer/gl/DisplayGL.cpp
@@ -22,7 +22,8 @@
namespace rx
{
-DisplayGL::DisplayGL() : mRenderer(nullptr), mCurrentDrawSurface(nullptr)
+DisplayGL::DisplayGL()
+ : mRenderer(nullptr)
{
}
@@ -72,13 +73,6 @@ StreamProducerImpl *DisplayGL::createStreamProducerD3DTextureNV12(
egl::Error DisplayGL::makeCurrent(egl::Surface *drawSurface, egl::Surface *readSurface, gl::Context *context)
{
- // Notify the previous surface (if it still exists) that it is no longer current
- if (mCurrentDrawSurface && mSurfaceSet.find(mCurrentDrawSurface) != mSurfaceSet.end())
- {
- ANGLE_TRY(GetImplAs<SurfaceGL>(mCurrentDrawSurface)->unMakeCurrent());
- }
- mCurrentDrawSurface = nullptr;
-
if (!drawSurface)
{
return egl::Error(EGL_SUCCESS);
@@ -89,10 +83,7 @@ egl::Error DisplayGL::makeCurrent(egl::Surface *drawSurface, egl::Surface *readS
glContext->getStateManager()->pauseTransformFeedback(context->getContextState());
SurfaceGL *glDrawSurface = GetImplAs<SurfaceGL>(drawSurface);
- ANGLE_TRY(glDrawSurface->makeCurrent());
- mCurrentDrawSurface = drawSurface;
-
- return egl::Error(EGL_SUCCESS);
+ return glDrawSurface->makeCurrent();
}
gl::Version DisplayGL::getMaxSupportedESVersion() const
diff --git a/gfx/angle/src/libANGLE/renderer/gl/DisplayGL.h b/gfx/angle/src/libANGLE/renderer/gl/DisplayGL.h
index a63da6bbc..9f6515886 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/DisplayGL.h
+++ b/gfx/angle/src/libANGLE/renderer/gl/DisplayGL.h
@@ -12,11 +12,6 @@
#include "libANGLE/renderer/DisplayImpl.h"
#include "libANGLE/renderer/gl/FunctionsGL.h"
-namespace egl
-{
-class Surface;
-}
-
namespace rx
{
@@ -53,8 +48,6 @@ class DisplayGL : public DisplayImpl
virtual const FunctionsGL *getFunctionsGL() const = 0;
RendererGL *mRenderer;
-
- egl::Surface *mCurrentDrawSurface;
};
}
diff --git a/gfx/angle/src/libANGLE/renderer/gl/FramebufferGL.cpp b/gfx/angle/src/libANGLE/renderer/gl/FramebufferGL.cpp
index 0a058f8ba..4606114ca 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/FramebufferGL.cpp
+++ b/gfx/angle/src/libANGLE/renderer/gl/FramebufferGL.cpp
@@ -16,18 +16,14 @@
#include "libANGLE/angletypes.h"
#include "libANGLE/formatutils.h"
#include "libANGLE/renderer/ContextImpl.h"
-#include "libANGLE/renderer/gl/BlitGL.h"
#include "libANGLE/renderer/gl/FunctionsGL.h"
#include "libANGLE/renderer/gl/RenderbufferGL.h"
#include "libANGLE/renderer/gl/StateManagerGL.h"
#include "libANGLE/renderer/gl/TextureGL.h"
#include "libANGLE/renderer/gl/WorkaroundsGL.h"
-#include "libANGLE/renderer/gl/formatutilsgl.h"
-#include "libANGLE/renderer/gl/renderergl_utils.h"
#include "platform/Platform.h"
using namespace gl;
-using angle::CheckedNumeric;
namespace rx
{
@@ -36,13 +32,11 @@ FramebufferGL::FramebufferGL(const FramebufferState &state,
const FunctionsGL *functions,
StateManagerGL *stateManager,
const WorkaroundsGL &workarounds,
- BlitGL *blitter,
bool isDefault)
: FramebufferImpl(state),
mFunctions(functions),
mStateManager(stateManager),
mWorkarounds(workarounds),
- mBlitter(blitter),
mFramebufferID(0),
mIsDefault(isDefault)
{
@@ -56,13 +50,11 @@ FramebufferGL::FramebufferGL(GLuint id,
const FramebufferState &state,
const FunctionsGL *functions,
const WorkaroundsGL &workarounds,
- BlitGL *blitter,
StateManagerGL *stateManager)
: FramebufferImpl(state),
mFunctions(functions),
mStateManager(stateManager),
mWorkarounds(workarounds),
- mBlitter(blitter),
mFramebufferID(id),
mIsDefault(true)
{
@@ -220,14 +212,14 @@ GLenum FramebufferGL::getImplementationColorReadFormat() const
{
const auto *readAttachment = mState.getReadAttachment();
const Format &format = readAttachment->getFormat();
- return format.info->getReadPixelsFormat();
+ return format.info->format;
}
GLenum FramebufferGL::getImplementationColorReadType() const
{
const auto *readAttachment = mState.getReadAttachment();
const Format &format = readAttachment->getFormat();
- return format.info->getReadPixelsType();
+ return format.info->type;
}
Error FramebufferGL::readPixels(ContextImpl *context,
@@ -241,37 +233,10 @@ Error FramebufferGL::readPixels(ContextImpl *context,
const PixelPackState &packState = context->getGLState().getPackState();
mStateManager->setPixelPackState(packState);
- nativegl::ReadPixelsFormat readPixelsFormat =
- nativegl::GetReadPixelsFormat(mFunctions, mWorkarounds, format, type);
- GLenum readFormat = readPixelsFormat.format;
- GLenum readType = readPixelsFormat.type;
-
mStateManager->bindFramebuffer(GL_READ_FRAMEBUFFER, mFramebufferID);
+ mFunctions->readPixels(area.x, area.y, area.width, area.height, format, type, pixels);
- if (mWorkarounds.packOverlappingRowsSeparatelyPackBuffer && packState.pixelBuffer.get() &&
- packState.rowLength != 0 && packState.rowLength < area.width)
- {
- return readPixelsRowByRowWorkaround(area, readFormat, readType, packState, pixels);
- }
-
- if (mWorkarounds.packLastRowSeparatelyForPaddingInclusion)
- {
- gl::Extents size(area.width, area.height, 1);
-
- bool apply;
- ANGLE_TRY_RESULT(ShouldApplyLastRowPaddingWorkaround(size, packState, readFormat, readType,
- false, pixels),
- apply);
-
- if (apply)
- {
- return readPixelsPaddingWorkaround(area, readFormat, readType, packState, pixels);
- }
- }
-
- mFunctions->readPixels(area.x, area.y, area.width, area.height, readFormat, readType, pixels);
-
- return gl::NoError();
+ return Error(GL_NO_ERROR);
}
Error FramebufferGL::blit(ContextImpl *context,
@@ -281,80 +246,15 @@ Error FramebufferGL::blit(ContextImpl *context,
GLenum filter)
{
const Framebuffer *sourceFramebuffer = context->getGLState().getReadFramebuffer();
- const Framebuffer *destFramebuffer = context->getGLState().getDrawFramebuffer();
-
- const FramebufferAttachment *colorReadAttachment = sourceFramebuffer->getReadColorbuffer();
- GLsizei readAttachmentSamples = colorReadAttachment->getSamples();
-
- bool needManualColorBlit = false;
-
- // TODO(cwallez) when the filter is LINEAR and both source and destination are SRGB, we
- // could avoid doing a manual blit.
-
- // Prior to OpenGL 4.4 BlitFramebuffer (section 18.3.1 of GL 4.3 core profile) reads:
- // When values are taken from the read buffer, no linearization is performed, even
- // if the format of the buffer is SRGB.
- // Starting from OpenGL 4.4 (section 18.3.1) it reads:
- // When values are taken from the read buffer, if FRAMEBUFFER_SRGB is enabled and the
- // value of FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING for the framebuffer attachment
- // corresponding to the read buffer is SRGB, the red, green, and blue components are
- // converted from the non-linear sRGB color space according [...].
- {
- bool sourceSRGB = colorReadAttachment != nullptr &&
- colorReadAttachment->getColorEncoding() == GL_SRGB;
- needManualColorBlit =
- needManualColorBlit || (sourceSRGB && mFunctions->isAtMostGL(gl::Version(4, 3)));
- }
-
- // Prior to OpenGL 4.2 BlitFramebuffer (section 4.3.2 of GL 4.1 core profile) reads:
- // Blit operations bypass the fragment pipeline. The only fragment operations which
- // affect a blit are the pixel ownership test and scissor test.
- // Starting from OpenGL 4.2 (section 4.3.2) it reads:
- // When values are written to the draw buffers, blit operations bypass the fragment
- // pipeline. The only fragment operations which affect a blit are the pixel ownership
- // test, the scissor test and sRGB conversion.
- if (!needManualColorBlit)
- {
- bool destSRGB = false;
- for (size_t i = 0; i < destFramebuffer->getDrawbufferStateCount(); ++i)
- {
- const FramebufferAttachment *attachment = destFramebuffer->getDrawBuffer(i);
- if (attachment && attachment->getColorEncoding() == GL_SRGB)
- {
- destSRGB = true;
- break;
- }
- }
-
- needManualColorBlit =
- needManualColorBlit || (destSRGB && mFunctions->isAtMostGL(gl::Version(4, 1)));
- }
-
- // Enable FRAMEBUFFER_SRGB if needed
- mStateManager->setFramebufferSRGBEnabledForFramebuffer(true, this);
-
- GLenum blitMask = mask;
- if (needManualColorBlit && (mask & GL_COLOR_BUFFER_BIT) && readAttachmentSamples <= 1)
- {
- ANGLE_TRY(mBlitter->blitColorBufferWithShader(sourceFramebuffer, destFramebuffer,
- sourceArea, destArea, filter));
- blitMask &= ~GL_COLOR_BUFFER_BIT;
- }
-
- if (blitMask == 0)
- {
- return gl::NoError();
- }
-
const FramebufferGL *sourceFramebufferGL = GetImplAs<FramebufferGL>(sourceFramebuffer);
+
mStateManager->bindFramebuffer(GL_READ_FRAMEBUFFER, sourceFramebufferGL->getFramebufferID());
mStateManager->bindFramebuffer(GL_DRAW_FRAMEBUFFER, mFramebufferID);
mFunctions->blitFramebuffer(sourceArea.x, sourceArea.y, sourceArea.x1(), sourceArea.y1(),
- destArea.x, destArea.y, destArea.x1(), destArea.y1(), blitMask,
- filter);
+ destArea.x, destArea.y, destArea.x1(), destArea.y1(), mask, filter);
- return gl::NoError();
+ return Error(GL_NO_ERROR);
}
bool FramebufferGL::checkStatus() const
@@ -420,9 +320,17 @@ GLuint FramebufferGL::getFramebufferID() const
return mFramebufferID;
}
-bool FramebufferGL::isDefault() const
+void FramebufferGL::syncDrawState() const
{
- return mIsDefault;
+ if (mFunctions->standard == STANDARD_GL_DESKTOP)
+ {
+ // Enable SRGB blending for all framebuffers except the default framebuffer on Desktop
+ // OpenGL.
+ // When SRGB blending is enabled, only SRGB capable formats will use it but the default
+ // framebuffer will always use it if it is enabled.
+ // TODO(geofflang): Update this when the framebuffer binding dirty changes, when it exists.
+ mStateManager->setFramebufferSRGBEnabled(!mIsDefault);
+ }
}
void FramebufferGL::syncClearState(GLbitfield mask)
@@ -432,17 +340,17 @@ void FramebufferGL::syncClearState(GLbitfield mask)
if (mWorkarounds.doesSRGBClearsOnLinearFramebufferAttachments &&
(mask & GL_COLOR_BUFFER_BIT) != 0 && !mIsDefault)
{
- bool hasSRGBAttachment = false;
+ bool hasSRBAttachment = false;
for (const auto &attachment : mState.getColorAttachments())
{
if (attachment.isAttached() && attachment.getColorEncoding() == GL_SRGB)
{
- hasSRGBAttachment = true;
+ hasSRBAttachment = true;
break;
}
}
- mStateManager->setFramebufferSRGBEnabled(hasSRGBAttachment);
+ mStateManager->setFramebufferSRGBEnabled(hasSRBAttachment);
}
else
{
@@ -483,71 +391,4 @@ void FramebufferGL::syncClearBufferState(GLenum buffer, GLint drawBuffer)
}
}
}
-gl::Error FramebufferGL::readPixelsRowByRowWorkaround(const gl::Rectangle &area,
- GLenum format,
- GLenum type,
- const gl::PixelPackState &pack,
- GLvoid *pixels) const
-{
- intptr_t offset = reinterpret_cast<intptr_t>(pixels);
-
- const gl::InternalFormat &glFormat =
- gl::GetInternalFormatInfo(gl::GetSizedInternalFormat(format, type));
- GLuint rowBytes = 0;
- ANGLE_TRY_RESULT(glFormat.computeRowPitch(area.width, pack.alignment, pack.rowLength),
- rowBytes);
- GLuint skipBytes = 0;
- ANGLE_TRY_RESULT(glFormat.computeSkipBytes(rowBytes, 0, pack, false), skipBytes);
-
- gl::PixelPackState directPack;
- directPack.pixelBuffer = pack.pixelBuffer;
- directPack.alignment = 1;
- mStateManager->setPixelPackState(directPack);
- directPack.pixelBuffer.set(nullptr);
-
- offset += skipBytes;
- for (GLint row = 0; row < area.height; ++row)
- {
- mFunctions->readPixels(area.x, row + area.y, area.width, 1, format, type,
- reinterpret_cast<GLvoid *>(offset));
- offset += row * rowBytes;
- }
-
- return gl::NoError();
-}
-
-gl::Error FramebufferGL::readPixelsPaddingWorkaround(const gl::Rectangle &area,
- GLenum format,
- GLenum type,
- const gl::PixelPackState &pack,
- GLvoid *pixels) const
-{
- const gl::InternalFormat &glFormat =
- gl::GetInternalFormatInfo(gl::GetSizedInternalFormat(format, type));
- GLuint rowBytes = 0;
- ANGLE_TRY_RESULT(glFormat.computeRowPitch(area.width, pack.alignment, pack.rowLength),
- rowBytes);
- GLuint skipBytes = 0;
- ANGLE_TRY_RESULT(glFormat.computeSkipBytes(rowBytes, 0, pack, false), skipBytes);
-
- // Get all by the last row
- if (area.height > 1)
- {
- mFunctions->readPixels(area.x, area.y, area.width, area.height - 1, format, type, pixels);
- }
-
- // Get the last row manually
- gl::PixelPackState directPack;
- directPack.pixelBuffer = pack.pixelBuffer;
- directPack.alignment = 1;
- mStateManager->setPixelPackState(directPack);
- directPack.pixelBuffer.set(nullptr);
-
- intptr_t lastRowOffset =
- reinterpret_cast<intptr_t>(pixels) + skipBytes + (area.height - 1) * rowBytes;
- mFunctions->readPixels(area.x, area.y + area.height - 1, area.width, 1, format, type,
- reinterpret_cast<GLvoid *>(lastRowOffset));
-
- return gl::NoError();
-}
} // namespace rx
diff --git a/gfx/angle/src/libANGLE/renderer/gl/FramebufferGL.h b/gfx/angle/src/libANGLE/renderer/gl/FramebufferGL.h
index a8bcb894c..69d4aef35 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/FramebufferGL.h
+++ b/gfx/angle/src/libANGLE/renderer/gl/FramebufferGL.h
@@ -14,7 +14,6 @@
namespace rx
{
-class BlitGL;
class FunctionsGL;
class StateManagerGL;
struct WorkaroundsGL;
@@ -26,7 +25,6 @@ class FramebufferGL : public FramebufferImpl
const FunctionsGL *functions,
StateManagerGL *stateManager,
const WorkaroundsGL &workarounds,
- BlitGL *blitter,
bool isDefault);
// Constructor called when we need to create a FramebufferGL from an
// existing framebuffer name, for example for the default framebuffer
@@ -35,7 +33,6 @@ class FramebufferGL : public FramebufferImpl
const gl::FramebufferState &data,
const FunctionsGL *functions,
const WorkaroundsGL &workarounds,
- BlitGL *blitter,
StateManagerGL *stateManager);
~FramebufferGL() override;
@@ -80,29 +77,17 @@ class FramebufferGL : public FramebufferImpl
void syncState(const gl::Framebuffer::DirtyBits &dirtyBits) override;
+ void syncDrawState() const;
+
GLuint getFramebufferID() const;
- bool isDefault() const;
private:
void syncClearState(GLbitfield mask);
void syncClearBufferState(GLenum buffer, GLint drawBuffer);
- gl::Error readPixelsRowByRowWorkaround(const gl::Rectangle &area,
- GLenum format,
- GLenum type,
- const gl::PixelPackState &pack,
- GLvoid *pixels) const;
-
- gl::Error readPixelsPaddingWorkaround(const gl::Rectangle &area,
- GLenum format,
- GLenum type,
- const gl::PixelPackState &pack,
- GLvoid *pixels) const;
-
const FunctionsGL *mFunctions;
StateManagerGL *mStateManager;
const WorkaroundsGL &mWorkarounds;
- BlitGL *mBlitter;
GLuint mFramebufferID;
bool mIsDefault;
diff --git a/gfx/angle/src/libANGLE/renderer/gl/FunctionsGL.cpp b/gfx/angle/src/libANGLE/renderer/gl/FunctionsGL.cpp
index fcbf211bc..9c3964e47 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/FunctionsGL.cpp
+++ b/gfx/angle/src/libANGLE/renderer/gl/FunctionsGL.cpp
@@ -2283,21 +2283,11 @@ bool FunctionsGL::isAtLeastGL(const gl::Version &glVersion) const
return standard == STANDARD_GL_DESKTOP && version >= glVersion;
}
-bool FunctionsGL::isAtMostGL(const gl::Version &glVersion) const
-{
- return standard == STANDARD_GL_DESKTOP && glVersion >= version;
-}
-
bool FunctionsGL::isAtLeastGLES(const gl::Version &glesVersion) const
{
return standard == STANDARD_GL_ES && version >= glesVersion;
}
-bool FunctionsGL::isAtMostGLES(const gl::Version &glesVersion) const
-{
- return standard == STANDARD_GL_ES && glesVersion >= version;
-}
-
bool FunctionsGL::hasExtension(const std::string &ext) const
{
return std::find(extensions.begin(), extensions.end(), ext) != extensions.end();
diff --git a/gfx/angle/src/libANGLE/renderer/gl/FunctionsGL.h b/gfx/angle/src/libANGLE/renderer/gl/FunctionsGL.h
index fa8634e57..e790d96fe 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/FunctionsGL.h
+++ b/gfx/angle/src/libANGLE/renderer/gl/FunctionsGL.h
@@ -36,9 +36,7 @@ class FunctionsGL
StandardGL standard;
GLint profile;
bool isAtLeastGL(const gl::Version &glVersion) const;
- bool isAtMostGL(const gl::Version &glVersion) const;
bool isAtLeastGLES(const gl::Version &glesVersion) const;
- bool isAtMostGLES(const gl::Version &glesVersion) const;
// Extensions
std::vector<std::string> extensions;
diff --git a/gfx/angle/src/libANGLE/renderer/gl/ProgramGL.cpp b/gfx/angle/src/libANGLE/renderer/gl/ProgramGL.cpp
index 88c7df720..2c2c4e7ad 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/ProgramGL.cpp
+++ b/gfx/angle/src/libANGLE/renderer/gl/ProgramGL.cpp
@@ -62,12 +62,12 @@ LinkResult ProgramGL::load(gl::InfoLog &infoLog, gl::BinaryInputStream *stream)
// Verify that the program linked
if (!checkLinkStatus(infoLog))
{
- return false;
+ return LinkResult(false, gl::Error(GL_NO_ERROR));
}
postLink();
- return true;
+ return LinkResult(true, gl::Error(GL_NO_ERROR));
}
gl::Error ProgramGL::save(gl::BinaryOutputStream *stream)
@@ -167,7 +167,7 @@ LinkResult ProgramGL::link(const gl::ContextState &data, gl::InfoLog &infoLog)
// Verify the link
if (!checkLinkStatus(infoLog))
{
- return false;
+ return LinkResult(false, gl::Error(GL_NO_ERROR));
}
if (mWorkarounds.alwaysCallUseProgramAfterLink)
@@ -177,7 +177,7 @@ LinkResult ProgramGL::link(const gl::ContextState &data, gl::InfoLog &infoLog)
postLink();
- return true;
+ return LinkResult(true, gl::Error(GL_NO_ERROR));
}
GLboolean ProgramGL::validate(const gl::Caps & /*caps*/, gl::InfoLog * /*infoLog*/)
@@ -223,7 +223,7 @@ void ProgramGL::setUniform1iv(GLint location, GLsizei count, const GLint *v)
std::vector<GLuint> &boundTextureUnits = mSamplerBindings[samplerIndex].boundTextureUnits;
size_t copyCount =
- std::min<size_t>(count, boundTextureUnits.size() - locationEntry.element);
+ std::max<size_t>(count, boundTextureUnits.size() - locationEntry.element);
std::copy(v, v + copyCount, boundTextureUnits.begin() + locationEntry.element);
}
}
@@ -577,7 +577,7 @@ void ProgramGL::postLink()
for (GLint arrayIndex = 1; arrayIndex < arraySize; ++arrayIndex)
{
PathRenderingFragmentInput arrayElementInput;
- arrayElementInput.name = name + "[" + ToString(arrayIndex) + "]";
+ arrayElementInput.name = name + "[" + std::to_string(arrayIndex) + "]";
arrayElementInput.location = baseLocation + arrayIndex;
mPathRenderingFragmentInputs.push_back(std::move(arrayElementInput));
}
diff --git a/gfx/angle/src/libANGLE/renderer/gl/RenderbufferGL.h b/gfx/angle/src/libANGLE/renderer/gl/RenderbufferGL.h
index 0ff0faeae..eeb164378 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/RenderbufferGL.h
+++ b/gfx/angle/src/libANGLE/renderer/gl/RenderbufferGL.h
@@ -38,6 +38,12 @@ class RenderbufferGL : public RenderbufferImpl
GLuint getRenderbufferID() const;
+ gl::Error getAttachmentRenderTarget(const gl::FramebufferAttachment::Target &target,
+ FramebufferAttachmentRenderTarget **rtOut) override
+ {
+ return gl::Error(GL_OUT_OF_MEMORY, "Not supported on OpenGL");
+ }
+
private:
const FunctionsGL *mFunctions;
const WorkaroundsGL &mWorkarounds;
diff --git a/gfx/angle/src/libANGLE/renderer/gl/RendererGL.cpp b/gfx/angle/src/libANGLE/renderer/gl/RendererGL.cpp
index da1a65687..10c408d93 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/RendererGL.cpp
+++ b/gfx/angle/src/libANGLE/renderer/gl/RendererGL.cpp
@@ -122,7 +122,6 @@ RendererGL::RendererGL(const FunctionsGL *functions, const egl::AttributeMap &at
#ifndef NDEBUG
if (mHasDebugOutput)
{
- mFunctions->enable(GL_DEBUG_OUTPUT);
mFunctions->enable(GL_DEBUG_OUTPUT_SYNCHRONOUS);
mFunctions->debugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_HIGH, 0, nullptr, GL_TRUE);
mFunctions->debugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_MEDIUM, 0, nullptr, GL_TRUE);
@@ -138,17 +137,6 @@ RendererGL::RendererGL(const FunctionsGL *functions, const egl::AttributeMap &at
{
mSkipDrawCalls = true;
}
-
- if (mWorkarounds.initializeCurrentVertexAttributes)
- {
- GLint maxVertexAttribs = 0;
- mFunctions->getIntegerv(GL_MAX_VERTEX_ATTRIBS, &maxVertexAttribs);
-
- for (GLint i = 0; i < maxVertexAttribs; ++i)
- {
- mFunctions->vertexAttrib4f(i, 0.0f, 0.0f, 0.0f, 1.0f);
- }
- }
}
RendererGL::~RendererGL()
diff --git a/gfx/angle/src/libANGLE/renderer/gl/SamplerGL.cpp b/gfx/angle/src/libANGLE/renderer/gl/SamplerGL.cpp
index 2a6d81583..bffc89ec9 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/SamplerGL.cpp
+++ b/gfx/angle/src/libANGLE/renderer/gl/SamplerGL.cpp
@@ -62,7 +62,6 @@ void SamplerGL::syncState(const gl::SamplerState &samplerState) const
SyncSamplerStateMember(mFunctions, mSamplerID, samplerState, mAppliedSamplerState, GL_TEXTURE_MAX_LOD, &gl::SamplerState::maxLod);
SyncSamplerStateMember(mFunctions, mSamplerID, samplerState, mAppliedSamplerState, GL_TEXTURE_COMPARE_MODE, &gl::SamplerState::compareMode);
SyncSamplerStateMember(mFunctions, mSamplerID, samplerState, mAppliedSamplerState, GL_TEXTURE_COMPARE_FUNC, &gl::SamplerState::compareFunc);
- SyncSamplerStateMember(mFunctions, mSamplerID, samplerState, mAppliedSamplerState, GL_TEXTURE_SRGB_DECODE_EXT, &gl::SamplerState::sRGBDecode);
// clang-format on
}
diff --git a/gfx/angle/src/libANGLE/renderer/gl/ShaderGL.cpp b/gfx/angle/src/libANGLE/renderer/gl/ShaderGL.cpp
index c9145b00a..400917b35 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/ShaderGL.cpp
+++ b/gfx/angle/src/libANGLE/renderer/gl/ShaderGL.cpp
@@ -36,8 +36,8 @@ ShaderGL::~ShaderGL()
}
}
-ShCompileOptions ShaderGL::prepareSourceAndReturnOptions(std::stringstream *sourceStream,
- std::string * /*sourcePath*/)
+int ShaderGL::prepareSourceAndReturnOptions(std::stringstream *sourceStream,
+ std::string * /*sourcePath*/)
{
// Reset the previous state
if (mShaderID != 0)
@@ -48,43 +48,13 @@ ShCompileOptions ShaderGL::prepareSourceAndReturnOptions(std::stringstream *sour
*sourceStream << mData.getSource();
- ShCompileOptions options = SH_INIT_GL_POSITION;
+ int options = SH_INIT_GL_POSITION;
if (mWorkarounds.doWhileGLSLCausesGPUHang)
{
options |= SH_REWRITE_DO_WHILE_LOOPS;
}
- if (mWorkarounds.emulateAbsIntFunction)
- {
- options |= SH_EMULATE_ABS_INT_FUNCTION;
- }
-
- if (mWorkarounds.addAndTrueToLoopCondition)
- {
- options |= SH_ADD_AND_TRUE_TO_LOOP_CONDITION;
- }
-
- if (mWorkarounds.emulateIsnanFloat)
- {
- options |= SH_EMULATE_ISNAN_FLOAT_FUNCTION;
- }
-
- if (mWorkarounds.useUnusedBlocksWithStandardOrSharedLayout)
- {
- options |= SH_USE_UNUSED_STANDARD_SHARED_BLOCKS;
- }
-
- if (mWorkarounds.dontRemoveInvariantForFragmentInput)
- {
- options |= SH_DONT_REMOVE_INVARIANT_FOR_FRAGMENT_INPUT;
- }
-
- if (mWorkarounds.removeInvariantAndCentroidForESSL3)
- {
- options |= SH_REMOVE_INVARIANT_AND_CENTROID_FOR_ESSL3;
- }
-
return options;
}
diff --git a/gfx/angle/src/libANGLE/renderer/gl/ShaderGL.h b/gfx/angle/src/libANGLE/renderer/gl/ShaderGL.h
index 0ecd89ce6..f35d2f711 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/ShaderGL.h
+++ b/gfx/angle/src/libANGLE/renderer/gl/ShaderGL.h
@@ -25,8 +25,8 @@ class ShaderGL : public ShaderImpl
~ShaderGL() override;
// ShaderImpl implementation
- ShCompileOptions prepareSourceAndReturnOptions(std::stringstream *sourceStream,
- std::string *sourcePath) override;
+ int prepareSourceAndReturnOptions(std::stringstream *sourceStream,
+ std::string *sourcePath) override;
bool postTranslateCompile(gl::Compiler *compiler, std::string *infoLog) override;
std::string getDebugInfo() const override;
diff --git a/gfx/angle/src/libANGLE/renderer/gl/StateManagerGL.cpp b/gfx/angle/src/libANGLE/renderer/gl/StateManagerGL.cpp
index 3a227906f..1cf08b242 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/StateManagerGL.cpp
+++ b/gfx/angle/src/libANGLE/renderer/gl/StateManagerGL.cpp
@@ -119,7 +119,6 @@ StateManagerGL::StateManagerGL(const FunctionsGL *functions, const gl::Caps &ren
mClearDepth(1.0f),
mClearStencil(0),
mFramebufferSRGBEnabled(false),
- mDitherEnabled(true),
mTextureCubemapSeamlessEnabled(false),
mMultisamplingEnabled(true),
mSampleAlphaToOneEnabled(false),
@@ -743,21 +742,18 @@ gl::Error StateManagerGL::setGenericDrawState(const gl::ContextState &data)
GLenum textureType = samplerUniform.textureType;
for (GLuint textureUnitIndex : samplerUniform.boundTextureUnits)
{
- gl::Texture *texture = state.getSamplerTexture(textureUnitIndex, textureType);
+ const gl::Texture *texture = state.getSamplerTexture(textureUnitIndex, textureType);
if (texture != nullptr)
{
const TextureGL *textureGL = GetImplAs<TextureGL>(texture);
- if (mTextures[textureType][textureUnitIndex] != textureGL->getTextureID() ||
- texture->hasAnyDirtyBit() || textureGL->hasAnyDirtyBit())
+ if (mTextures[textureType][textureUnitIndex] != textureGL->getTextureID())
{
activeTexture(textureUnitIndex);
bindTexture(textureType, textureGL->getTextureID());
-
- // TODO: Call this from the gl:: layer once other backends use dirty bits for
- // texture state.
- texture->syncImplState();
}
+
+ textureGL->syncState(textureUnitIndex);
}
else
{
@@ -785,6 +781,7 @@ gl::Error StateManagerGL::setGenericDrawState(const gl::ContextState &data)
const gl::Framebuffer *framebuffer = state.getDrawFramebuffer();
const FramebufferGL *framebufferGL = GetImplAs<FramebufferGL>(framebuffer);
bindFramebuffer(GL_DRAW_FRAMEBUFFER, framebufferGL->getFramebufferID());
+ framebufferGL->syncDrawState();
// Seamless cubemaps are required for ES3 and higher contexts.
setTextureCubemapSeamlessEnabled(data.getClientMajorVersion() >= 3);
@@ -1319,13 +1316,6 @@ void StateManagerGL::setClearStencil(GLint clearStencil)
void StateManagerGL::syncState(const gl::State &state, const gl::State::DirtyBits &glDirtyBits)
{
- // The the current framebuffer binding sometimes requires resetting the srgb blending
- if (glDirtyBits[gl::State::DIRTY_BIT_DRAW_FRAMEBUFFER_BINDING] &&
- mFunctions->standard == STANDARD_GL_DESKTOP)
- {
- mLocalDirtyBits.set(gl::State::DIRTY_BIT_FRAMEBUFFER_SRGB);
- }
-
const auto &glAndLocalDirtyBits = (glDirtyBits | mLocalDirtyBits);
if (!glAndLocalDirtyBits.any())
@@ -1523,7 +1513,7 @@ void StateManagerGL::syncState(const gl::State &state, const gl::State::DirtyBit
setPixelPackState(state.getPackState());
break;
case gl::State::DIRTY_BIT_DITHER_ENABLED:
- setDitherEnabled(state.isDitherEnabled());
+ // TODO(jmadill): implement this
break;
case gl::State::DIRTY_BIT_GENERATE_MIPMAP_HINT:
// TODO(jmadill): implement this
@@ -1566,11 +1556,6 @@ void StateManagerGL::syncState(const gl::State &state, const gl::State::DirtyBit
setPathRenderingStencilState(state.getPathStencilFunc(), state.getPathStencilRef(),
state.getPathStencilMask());
break;
- case gl::State::DIRTY_BIT_FRAMEBUFFER_SRGB:
- setFramebufferSRGBEnabledForFramebuffer(
- state.getFramebufferSRGB(),
- GetImplAs<FramebufferGL>(state.getDrawFramebuffer()));
- break;
default:
{
ASSERT(dirtyBit >= gl::State::DIRTY_BIT_CURRENT_VALUE_0 &&
@@ -1600,41 +1585,6 @@ void StateManagerGL::setFramebufferSRGBEnabled(bool enabled)
{
mFunctions->disable(GL_FRAMEBUFFER_SRGB);
}
- mLocalDirtyBits.set(gl::State::DIRTY_BIT_FRAMEBUFFER_SRGB);
- }
-}
-
-void StateManagerGL::setFramebufferSRGBEnabledForFramebuffer(bool enabled,
- const FramebufferGL *framebuffer)
-{
- if (mFunctions->standard == STANDARD_GL_DESKTOP && framebuffer->isDefault())
- {
- // Obey the framebuffer sRGB state for blending on all framebuffers except the default
- // framebuffer on Desktop OpenGL.
- // When SRGB blending is enabled, only SRGB capable formats will use it but the default
- // framebuffer will always use it if it is enabled.
- // TODO(geofflang): Update this when the framebuffer binding dirty changes, when it exists.
- setFramebufferSRGBEnabled(false);
- }
- else
- {
- setFramebufferSRGBEnabled(enabled);
- }
-}
-
-void StateManagerGL::setDitherEnabled(bool enabled)
-{
- if (mDitherEnabled != enabled)
- {
- mDitherEnabled = enabled;
- if (mDitherEnabled)
- {
- mFunctions->enable(GL_DITHER);
- }
- else
- {
- mFunctions->disable(GL_DITHER);
- }
}
}
diff --git a/gfx/angle/src/libANGLE/renderer/gl/StateManagerGL.h b/gfx/angle/src/libANGLE/renderer/gl/StateManagerGL.h
index 3c8c5389f..f7ec64772 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/StateManagerGL.h
+++ b/gfx/angle/src/libANGLE/renderer/gl/StateManagerGL.h
@@ -27,7 +27,6 @@ class State;
namespace rx
{
-class FramebufferGL;
class FunctionsGL;
class TransformFeedbackGL;
class QueryGL;
@@ -124,9 +123,6 @@ class StateManagerGL final : angle::NonCopyable
GLuint packBuffer);
void setFramebufferSRGBEnabled(bool enabled);
- void setFramebufferSRGBEnabledForFramebuffer(bool enabled, const FramebufferGL *framebuffer);
-
- void setDitherEnabled(bool enabled);
void setMultisamplingStateEnabled(bool enabled);
void setSampleAlphaToOneStateEnabled(bool enabled);
@@ -268,7 +264,6 @@ class StateManagerGL final : angle::NonCopyable
GLint mClearStencil;
bool mFramebufferSRGBEnabled;
- bool mDitherEnabled;
bool mTextureCubemapSeamlessEnabled;
bool mMultisamplingEnabled;
diff --git a/gfx/angle/src/libANGLE/renderer/gl/SurfaceGL.cpp b/gfx/angle/src/libANGLE/renderer/gl/SurfaceGL.cpp
index a1f0abba7..fcdddebe0 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/SurfaceGL.cpp
+++ b/gfx/angle/src/libANGLE/renderer/gl/SurfaceGL.cpp
@@ -26,11 +26,6 @@ SurfaceGL::~SurfaceGL()
FramebufferImpl *SurfaceGL::createDefaultFramebuffer(const gl::FramebufferState &data)
{
return new FramebufferGL(data, mRenderer->getFunctions(), mRenderer->getStateManager(),
- mRenderer->getWorkarounds(), mRenderer->getBlitter(), true);
-}
-
-egl::Error SurfaceGL::unMakeCurrent()
-{
- return egl::Error(EGL_SUCCESS);
+ mRenderer->getWorkarounds(), true);
}
}
diff --git a/gfx/angle/src/libANGLE/renderer/gl/SurfaceGL.h b/gfx/angle/src/libANGLE/renderer/gl/SurfaceGL.h
index 681c365d2..329b562b9 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/SurfaceGL.h
+++ b/gfx/angle/src/libANGLE/renderer/gl/SurfaceGL.h
@@ -22,10 +22,15 @@ class SurfaceGL : public SurfaceImpl
SurfaceGL(const egl::SurfaceState &state, RendererGL *renderer);
~SurfaceGL() override;
+ gl::Error getAttachmentRenderTarget(const gl::FramebufferAttachment::Target &target,
+ FramebufferAttachmentRenderTarget **rtOut) override
+ {
+ return gl::Error(GL_OUT_OF_MEMORY, "Not supported on OpenGL");
+ }
+
FramebufferImpl *createDefaultFramebuffer(const gl::FramebufferState &data) override;
virtual egl::Error makeCurrent() = 0;
- virtual egl::Error unMakeCurrent();
private:
RendererGL *mRenderer;
diff --git a/gfx/angle/src/libANGLE/renderer/gl/TextureGL.cpp b/gfx/angle/src/libANGLE/renderer/gl/TextureGL.cpp
index 589580505..8b78bdc01 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/TextureGL.cpp
+++ b/gfx/angle/src/libANGLE/renderer/gl/TextureGL.cpp
@@ -8,7 +8,6 @@
#include "libANGLE/renderer/gl/TextureGL.h"
-#include "common/BitSetIterator.h"
#include "common/debug.h"
#include "common/utilities.h"
#include "libANGLE/State.h"
@@ -21,27 +20,21 @@
#include "libANGLE/renderer/gl/StateManagerGL.h"
#include "libANGLE/renderer/gl/WorkaroundsGL.h"
#include "libANGLE/renderer/gl/formatutilsgl.h"
-#include "libANGLE/renderer/gl/renderergl_utils.h"
-
-using angle::CheckedNumeric;
namespace rx
{
-namespace
-{
-
-bool UseTexImage2D(GLenum textureType)
+static bool UseTexImage2D(GLenum textureType)
{
return textureType == GL_TEXTURE_2D || textureType == GL_TEXTURE_CUBE_MAP;
}
-bool UseTexImage3D(GLenum textureType)
+static bool UseTexImage3D(GLenum textureType)
{
return textureType == GL_TEXTURE_2D_ARRAY || textureType == GL_TEXTURE_3D;
}
-bool CompatibleTextureTarget(GLenum textureType, GLenum textureTarget)
+static bool CompatibleTextureTarget(GLenum textureType, GLenum textureTarget)
{
if (textureType != GL_TEXTURE_CUBE_MAP)
{
@@ -53,13 +46,13 @@ bool CompatibleTextureTarget(GLenum textureType, GLenum textureTarget)
}
}
-bool IsLUMAFormat(GLenum format)
+static bool IsLUMAFormat(GLenum format)
{
return format == GL_LUMINANCE || format == GL_ALPHA || format == GL_LUMINANCE_ALPHA;
}
-LUMAWorkaroundGL GetLUMAWorkaroundInfo(const gl::InternalFormat &originalFormatInfo,
- GLenum destinationFormat)
+static LUMAWorkaroundGL GetLUMAWorkaroundInfo(const gl::InternalFormat &originalFormatInfo,
+ GLenum destinationFormat)
{
if (IsLUMAFormat(originalFormatInfo.format))
{
@@ -74,35 +67,23 @@ LUMAWorkaroundGL GetLUMAWorkaroundInfo(const gl::InternalFormat &originalFormatI
}
}
-bool IsDepthStencilFormat(GLenum format)
+static bool IsDepthStencilFormat(GLenum format)
{
return format == GL_DEPTH_COMPONENT || format == GL_DEPTH_STENCIL;
}
-bool GetDepthStencilWorkaround(const gl::InternalFormat &originalFormatInfo)
+static bool GetDepthStencilWorkaround(const gl::InternalFormat &originalFormatInfo)
{
return IsDepthStencilFormat(originalFormatInfo.format);
}
-LevelInfoGL GetLevelInfo(GLenum originalFormat, GLenum destinationFormat)
+static LevelInfoGL GetLevelInfo(GLenum originalFormat, GLenum destinationFormat)
{
const gl::InternalFormat &originalFormatInfo = gl::GetInternalFormatInfo(originalFormat);
return LevelInfoGL(originalFormat, GetDepthStencilWorkaround(originalFormatInfo),
GetLUMAWorkaroundInfo(originalFormatInfo, destinationFormat));
}
-gl::Texture::DirtyBits GetLevelWorkaroundDirtyBits()
-{
- gl::Texture::DirtyBits bits;
- bits.set(gl::Texture::DIRTY_BIT_SWIZZLE_RED);
- bits.set(gl::Texture::DIRTY_BIT_SWIZZLE_GREEN);
- bits.set(gl::Texture::DIRTY_BIT_SWIZZLE_BLUE);
- bits.set(gl::Texture::DIRTY_BIT_SWIZZLE_ALPHA);
- return bits;
-}
-
-} // anonymous namespace
-
LUMAWorkaroundGL::LUMAWorkaroundGL() : LUMAWorkaroundGL(false, GL_NONE)
{
}
@@ -153,14 +134,8 @@ TextureGL::~TextureGL()
mTextureID = 0;
}
-gl::Error TextureGL::setImage(GLenum target,
- size_t level,
- GLenum internalFormat,
- const gl::Extents &size,
- GLenum format,
- GLenum type,
- const gl::PixelUnpackState &unpack,
- const uint8_t *pixels)
+gl::Error TextureGL::setImage(GLenum target, size_t level, GLenum internalFormat, const gl::Extents &size, GLenum format, GLenum type,
+ const gl::PixelUnpackState &unpack, const uint8_t *pixels)
{
if (mWorkarounds.unpackOverlappingRowsSeparatelyUnpackBuffer && unpack.pixelBuffer.get() &&
unpack.rowLength != 0 && unpack.rowLength < size.width)
@@ -168,41 +143,13 @@ gl::Error TextureGL::setImage(GLenum target,
// The rows overlap in unpack memory. Upload the texture row by row to work around
// driver bug.
reserveTexImageToBeFilled(target, level, internalFormat, size, format, type);
-
- if (size.width == 0 || size.height == 0 || size.depth == 0)
- {
- return gl::NoError();
- }
-
gl::Box area(0, 0, 0, size.width, size.height, size.depth);
- return setSubImageRowByRowWorkaround(target, level, area, format, type, unpack, pixels);
+ ANGLE_TRY(setSubImageRowByRowWorkaround(target, level, area, format, type, unpack, pixels));
}
-
- if (mWorkarounds.unpackLastRowSeparatelyForPaddingInclusion)
+ else
{
- bool apply;
- ANGLE_TRY_RESULT(ShouldApplyLastRowPaddingWorkaround(size, unpack, format, type,
- UseTexImage3D(mState.mTarget), pixels),
- apply);
-
- // The driver will think the pixel buffer doesn't have enough data, work around this bug
- // by uploading the last row (and last level if 3D) separately.
- if (apply)
- {
- reserveTexImageToBeFilled(target, level, internalFormat, size, format, type);
-
- if (size.width == 0 || size.height == 0 || size.depth == 0)
- {
- return gl::NoError();
- }
-
- gl::Box area(0, 0, 0, size.width, size.height, size.depth);
- return setSubImagePaddingWorkaround(target, level, area, format, type, unpack, pixels);
- }
+ setImageHelper(target, level, internalFormat, size, format, type, pixels);
}
-
- setImageHelper(target, level, internalFormat, size, format, type, pixels);
-
return gl::NoError();
}
@@ -214,6 +161,7 @@ void TextureGL::setImageHelper(GLenum target,
GLenum type,
const uint8_t *pixels)
{
+ UNUSED_ASSERTION_VARIABLE(&CompatibleTextureTarget); // Reference this function to avoid warnings.
ASSERT(CompatibleTextureTarget(mState.mTarget, target));
nativegl::TexImageFormat texImageFormat =
@@ -239,7 +187,7 @@ void TextureGL::setImageHelper(GLenum target,
UNREACHABLE();
}
- setLevelInfo(level, 1, GetLevelInfo(internalFormat, texImageFormat.internalFormat));
+ mLevelInfo[level] = GetLevelInfo(internalFormat, texImageFormat.internalFormat);
}
void TextureGL::reserveTexImageToBeFilled(GLenum target,
@@ -264,47 +212,32 @@ gl::Error TextureGL::setSubImage(GLenum target, size_t level, const gl::Box &are
nativegl::TexSubImageFormat texSubImageFormat =
nativegl::GetTexSubImageFormat(mFunctions, mWorkarounds, format, type);
- ASSERT(mLevelInfo[level].lumaWorkaround.enabled ==
- GetLevelInfo(format, texSubImageFormat.format).lumaWorkaround.enabled);
-
mStateManager->bindTexture(mState.mTarget, mTextureID);
if (mWorkarounds.unpackOverlappingRowsSeparatelyUnpackBuffer && unpack.pixelBuffer.get() &&
unpack.rowLength != 0 && unpack.rowLength < area.width)
{
- return setSubImageRowByRowWorkaround(target, level, area, format, type, unpack, pixels);
- }
-
- if (mWorkarounds.unpackLastRowSeparatelyForPaddingInclusion)
- {
- gl::Extents size(area.width, area.height, area.depth);
-
- bool apply;
- ANGLE_TRY_RESULT(ShouldApplyLastRowPaddingWorkaround(size, unpack, format, type,
- UseTexImage3D(mState.mTarget), pixels),
- apply);
-
- // The driver will think the pixel buffer doesn't have enough data, work around this bug
- // by uploading the last row (and last level if 3D) separately.
- if (apply)
- {
- return setSubImagePaddingWorkaround(target, level, area, format, type, unpack, pixels);
- }
+ ANGLE_TRY(setSubImageRowByRowWorkaround(target, level, area, format, type, unpack, pixels));
}
-
- if (UseTexImage2D(mState.mTarget))
+ else if (UseTexImage2D(mState.mTarget))
{
ASSERT(area.z == 0 && area.depth == 1);
mFunctions->texSubImage2D(target, static_cast<GLint>(level), area.x, area.y, area.width,
area.height, texSubImageFormat.format, texSubImageFormat.type,
pixels);
}
- else
+ else if (UseTexImage3D(mState.mTarget))
{
- ASSERT(UseTexImage3D(mState.mTarget));
mFunctions->texSubImage3D(target, static_cast<GLint>(level), area.x, area.y, area.z,
area.width, area.height, area.depth, texSubImageFormat.format,
texSubImageFormat.type, pixels);
}
+ else
+ {
+ UNREACHABLE();
+ }
+
+ ASSERT(mLevelInfo[level].lumaWorkaround.enabled ==
+ GetLevelInfo(format, texSubImageFormat.format).lumaWorkaround.enabled);
return gl::Error(GL_NO_ERROR);
}
@@ -317,24 +250,26 @@ gl::Error TextureGL::setSubImageRowByRowWorkaround(GLenum target,
const gl::PixelUnpackState &unpack,
const uint8_t *pixels)
{
- gl::PixelUnpackState directUnpack;
- directUnpack.pixelBuffer = unpack.pixelBuffer;
- directUnpack.alignment = 1;
- mStateManager->setPixelUnpackState(directUnpack);
- directUnpack.pixelBuffer.set(nullptr);
-
- const gl::InternalFormat &glFormat =
- gl::GetInternalFormatInfo(gl::GetSizedInternalFormat(format, type));
- GLuint rowBytes = 0;
- ANGLE_TRY_RESULT(glFormat.computeRowPitch(area.width, unpack.alignment, unpack.rowLength),
- rowBytes);
+ gl::PixelUnpackState unpackToUse;
+ unpackToUse.pixelBuffer = unpack.pixelBuffer;
+ mStateManager->setPixelUnpackState(unpackToUse);
+ unpackToUse.pixelBuffer.set(nullptr);
+ const gl::Format &glFormat = mState.getImageDesc(mState.mTarget, level).format;
+ GLuint rowBytes = 0;
+ ANGLE_TRY_RESULT(
+ glFormat.info->computeRowPitch(GL_NONE, area.width, unpack.alignment, unpack.rowLength),
+ rowBytes);
GLuint imageBytes = 0;
- ANGLE_TRY_RESULT(gl::InternalFormat::computeDepthPitch(area.height, unpack.imageHeight, rowBytes),
- imageBytes);
+ ANGLE_TRY_RESULT(
+ glFormat.info->computeDepthPitch(GL_NONE, area.width, area.height, unpack.alignment,
+ unpack.rowLength, unpack.imageHeight),
+ imageBytes);
bool useTexImage3D = UseTexImage3D(mState.mTarget);
GLuint skipBytes = 0;
- ANGLE_TRY_RESULT(glFormat.computeSkipBytes(rowBytes, imageBytes, unpack, useTexImage3D),
- skipBytes);
+ ANGLE_TRY_RESULT(
+ glFormat.info->computeSkipBytes(rowBytes, imageBytes, unpack.skipImages, unpack.skipRows,
+ unpack.skipPixels, useTexImage3D),
+ skipBytes);
const uint8_t *pixelsWithSkip = pixels + skipBytes;
if (useTexImage3D)
@@ -352,9 +287,8 @@ gl::Error TextureGL::setSubImageRowByRowWorkaround(GLenum target,
}
}
}
- else
+ else if (UseTexImage2D(mState.mTarget))
{
- ASSERT(UseTexImage2D(mState.mTarget));
for (GLint row = 0; row < area.height; ++row)
{
GLint byteOffset = row * rowBytes;
@@ -363,89 +297,10 @@ gl::Error TextureGL::setSubImageRowByRowWorkaround(GLenum target,
area.width, 1, format, type, rowPixels);
}
}
- return gl::NoError();
-}
-
-gl::Error TextureGL::setSubImagePaddingWorkaround(GLenum target,
- size_t level,
- const gl::Box &area,
- GLenum format,
- GLenum type,
- const gl::PixelUnpackState &unpack,
- const uint8_t *pixels)
-{
- const gl::InternalFormat &glFormat =
- gl::GetInternalFormatInfo(gl::GetSizedInternalFormat(format, type));
- GLuint rowBytes = 0;
- ANGLE_TRY_RESULT(glFormat.computeRowPitch(area.width, unpack.alignment, unpack.rowLength),
- rowBytes);
- GLuint imageBytes = 0;
- ANGLE_TRY_RESULT(gl::InternalFormat::computeDepthPitch(area.height, unpack.imageHeight, rowBytes),
- imageBytes);
- bool useTexImage3D = UseTexImage3D(mState.mTarget);
- GLuint skipBytes = 0;
- ANGLE_TRY_RESULT(glFormat.computeSkipBytes(rowBytes, imageBytes, unpack, useTexImage3D),
- skipBytes);
-
- gl::PixelUnpackState directUnpack;
- directUnpack.pixelBuffer = unpack.pixelBuffer;
- directUnpack.alignment = 1;
-
- if (useTexImage3D)
- {
- // Upload all but the last slice
- if (area.depth > 1)
- {
- mFunctions->texSubImage3D(target, static_cast<GLint>(level), area.x, area.y, area.z,
- area.width, area.height, area.depth - 1, format, type,
- pixels);
- }
-
- // Upload the last slice but its last row
- if (area.height > 1)
- {
- // Do not include skipBytes in the last image pixel start offset as it will be done by
- // the driver
- GLint lastImageOffset = (area.depth - 1) * imageBytes;
- const GLubyte *lastImagePixels = pixels + lastImageOffset;
- mFunctions->texSubImage3D(target, static_cast<GLint>(level), area.x, area.y,
- area.z + area.depth - 1, area.width, area.height - 1, 1,
- format, type, lastImagePixels);
- }
-
- // Upload the last row of the last slice "manually"
- mStateManager->setPixelUnpackState(directUnpack);
-
- GLint lastRowOffset =
- skipBytes + (area.depth - 1) * imageBytes + (area.height - 1) * rowBytes;
- const GLubyte *lastRowPixels = pixels + lastRowOffset;
- mFunctions->texSubImage3D(target, static_cast<GLint>(level), area.x,
- area.y + area.height - 1, area.z + area.depth - 1, area.width, 1,
- 1, format, type, lastRowPixels);
- }
else
{
- ASSERT(UseTexImage2D(mState.mTarget));
-
- // Upload all but the last row
- if (area.height > 1)
- {
- mFunctions->texSubImage2D(target, static_cast<GLint>(level), area.x, area.y, area.width,
- area.height - 1, format, type, pixels);
- }
-
- // Upload the last row "manually"
- mStateManager->setPixelUnpackState(directUnpack);
-
- GLint lastRowOffset = skipBytes + (area.height - 1) * rowBytes;
- const GLubyte *lastRowPixels = pixels + lastRowOffset;
- mFunctions->texSubImage2D(target, static_cast<GLint>(level), area.x,
- area.y + area.height - 1, area.width, 1, format, type,
- lastRowPixels);
+ UNREACHABLE();
}
-
- directUnpack.pixelBuffer.set(nullptr);
-
return gl::NoError();
}
@@ -476,7 +331,7 @@ gl::Error TextureGL::setCompressedImage(GLenum target, size_t level, GLenum inte
UNREACHABLE();
}
- setLevelInfo(level, 1, GetLevelInfo(internalFormat, compressedTexImageFormat.internalFormat));
+ mLevelInfo[level] = GetLevelInfo(internalFormat, compressedTexImageFormat.internalFormat);
ASSERT(!mLevelInfo[level].lumaWorkaround.enabled);
return gl::Error(GL_NO_ERROR);
@@ -553,7 +408,7 @@ gl::Error TextureGL::copyImage(GLenum target, size_t level, const gl::Rectangle
}
}
- setLevelInfo(level, 1, levelInfo);
+ mLevelInfo[level] = levelInfo;
return gl::Error(GL_NO_ERROR);
}
@@ -639,7 +494,8 @@ gl::Error TextureGL::setStorage(GLenum target, size_t levels, GLenum internalFor
if (internalFormatInfo.compressed)
{
GLuint dataSize = 0;
- ANGLE_TRY_RESULT(internalFormatInfo.computeCompressedImageSize(levelSize),
+ ANGLE_TRY_RESULT(internalFormatInfo.computeCompressedImageSize(
+ GL_UNSIGNED_BYTE, levelSize),
dataSize);
mFunctions->compressedTexImage2D(target, static_cast<GLint>(level),
texStorageFormat.internalFormat,
@@ -662,7 +518,7 @@ gl::Error TextureGL::setStorage(GLenum target, size_t levels, GLenum internalFor
{
GLuint dataSize = 0;
ANGLE_TRY_RESULT(internalFormatInfo.computeCompressedImageSize(
- levelSize),
+ GL_UNSIGNED_BYTE, levelSize),
dataSize);
mFunctions->compressedTexImage2D(
face, static_cast<GLint>(level), texStorageFormat.internalFormat,
@@ -713,7 +569,7 @@ gl::Error TextureGL::setStorage(GLenum target, size_t levels, GLenum internalFor
{
GLuint dataSize = 0;
ANGLE_TRY_RESULT(
- internalFormatInfo.computeCompressedImageSize(levelSize),
+ internalFormatInfo.computeCompressedImageSize(GL_UNSIGNED_BYTE, levelSize),
dataSize);
mFunctions->compressedTexImage3D(target, i, texStorageFormat.internalFormat,
levelSize.width, levelSize.height,
@@ -735,7 +591,11 @@ gl::Error TextureGL::setStorage(GLenum target, size_t levels, GLenum internalFor
UNREACHABLE();
}
- setLevelInfo(0, levels, GetLevelInfo(internalFormat, texStorageFormat.internalFormat));
+ LevelInfoGL levelInfo = GetLevelInfo(internalFormat, texStorageFormat.internalFormat);
+ for (size_t level = 0; level < mLevelInfo.size(); level++)
+ {
+ mLevelInfo[level] = levelInfo;
+ }
return gl::Error(GL_NO_ERROR);
}
@@ -750,6 +610,8 @@ gl::Error TextureGL::setImageExternal(GLenum target,
gl::Error TextureGL::generateMipmap()
{
+ // Need to sync base level and max level to driver before calling GenerateMipmap.
+ syncState(0);
mStateManager->bindTexture(mState.mTarget, mTextureID);
mFunctions->generateMipmap(mState.mTarget);
@@ -758,7 +620,10 @@ gl::Error TextureGL::generateMipmap()
ASSERT(maxLevel < mLevelInfo.size());
- setLevelInfo(effectiveBaseLevel, maxLevel - effectiveBaseLevel, mLevelInfo[effectiveBaseLevel]);
+ for (GLuint level = effectiveBaseLevel; level <= maxLevel; level++)
+ {
+ mLevelInfo[level] = mLevelInfo[effectiveBaseLevel];
+ }
return gl::Error(GL_NO_ERROR);
}
@@ -770,7 +635,7 @@ void TextureGL::bindTexImage(egl::Surface *surface)
// Make sure this texture is bound
mStateManager->bindTexture(mState.mTarget, mTextureID);
- setLevelInfo(0, 1, LevelInfoGL());
+ mLevelInfo[0] = LevelInfoGL();
}
void TextureGL::releaseTexImage()
@@ -796,121 +661,58 @@ gl::Error TextureGL::setEGLImageTarget(GLenum target, egl::Image *image)
return gl::Error(GL_INVALID_OPERATION);
}
-void TextureGL::syncState(const gl::Texture::DirtyBits &dirtyBits)
+template <typename T, typename ApplyTextureFuncType>
+static inline void SyncSamplerStateMember(const FunctionsGL *functions,
+ ApplyTextureFuncType applyTextureFunc,
+ const gl::SamplerState &newState,
+ gl::SamplerState &curState,
+ GLenum textureType,
+ GLenum name,
+ T(gl::SamplerState::*samplerMember))
{
- if (dirtyBits.none() && mLocalDirtyBits.none())
- {
- return;
- }
-
- mStateManager->bindTexture(mState.mTarget, mTextureID);
-
- if (dirtyBits[gl::Texture::DIRTY_BIT_BASE_LEVEL] || dirtyBits[gl::Texture::DIRTY_BIT_MAX_LEVEL])
+ if (curState.*samplerMember != newState.*samplerMember)
{
- // Don't know if the previous base level was using any workarounds, always re-sync the
- // workaround dirty bits
- mLocalDirtyBits |= GetLevelWorkaroundDirtyBits();
+ applyTextureFunc();
+ curState.*samplerMember = newState.*samplerMember;
+ functions->texParameterf(textureType, name, static_cast<GLfloat>(curState.*samplerMember));
}
-
- for (auto dirtyBit : angle::IterateBitSet(dirtyBits | mLocalDirtyBits))
- {
- switch (dirtyBit)
- {
- case gl::Texture::DIRTY_BIT_MIN_FILTER:
- mFunctions->texParameteri(mState.mTarget, GL_TEXTURE_MIN_FILTER,
- mState.getSamplerState().minFilter);
- break;
- case gl::Texture::DIRTY_BIT_MAG_FILTER:
- mFunctions->texParameteri(mState.mTarget, GL_TEXTURE_MAG_FILTER,
- mState.getSamplerState().magFilter);
- break;
- case gl::Texture::DIRTY_BIT_WRAP_S:
- mFunctions->texParameteri(mState.mTarget, GL_TEXTURE_WRAP_S,
- mState.getSamplerState().wrapS);
- break;
- case gl::Texture::DIRTY_BIT_WRAP_T:
- mFunctions->texParameteri(mState.mTarget, GL_TEXTURE_WRAP_T,
- mState.getSamplerState().wrapT);
- break;
- case gl::Texture::DIRTY_BIT_WRAP_R:
- mFunctions->texParameteri(mState.mTarget, GL_TEXTURE_WRAP_R,
- mState.getSamplerState().wrapR);
- break;
- case gl::Texture::DIRTY_BIT_MAX_ANISOTROPY:
- mFunctions->texParameterf(mState.mTarget, GL_TEXTURE_MAX_ANISOTROPY_EXT,
- mState.getSamplerState().maxAnisotropy);
- break;
- case gl::Texture::DIRTY_BIT_MIN_LOD:
- mFunctions->texParameterf(mState.mTarget, GL_TEXTURE_MIN_LOD,
- mState.getSamplerState().minLod);
- break;
- case gl::Texture::DIRTY_BIT_MAX_LOD:
- mFunctions->texParameterf(mState.mTarget, GL_TEXTURE_MAX_LOD,
- mState.getSamplerState().maxLod);
- break;
- case gl::Texture::DIRTY_BIT_COMPARE_MODE:
- mFunctions->texParameteri(mState.mTarget, GL_TEXTURE_COMPARE_MODE,
- mState.getSamplerState().compareMode);
- break;
- case gl::Texture::DIRTY_BIT_COMPARE_FUNC:
- mFunctions->texParameteri(mState.mTarget, GL_TEXTURE_COMPARE_FUNC,
- mState.getSamplerState().compareFunc);
- break;
- case gl::Texture::DIRTY_BIT_SRGB_DECODE:
- mFunctions->texParameteri(mState.mTarget, GL_TEXTURE_SRGB_DECODE_EXT,
- mState.getSamplerState().sRGBDecode);
- break;
-
- // Texture state
- case gl::Texture::DIRTY_BIT_SWIZZLE_RED:
- syncTextureStateSwizzle(mFunctions, GL_TEXTURE_SWIZZLE_R,
- mState.getSwizzleState().swizzleRed);
- break;
- case gl::Texture::DIRTY_BIT_SWIZZLE_GREEN:
- syncTextureStateSwizzle(mFunctions, GL_TEXTURE_SWIZZLE_G,
- mState.getSwizzleState().swizzleGreen);
- break;
- case gl::Texture::DIRTY_BIT_SWIZZLE_BLUE:
- syncTextureStateSwizzle(mFunctions, GL_TEXTURE_SWIZZLE_B,
- mState.getSwizzleState().swizzleBlue);
- break;
- case gl::Texture::DIRTY_BIT_SWIZZLE_ALPHA:
- syncTextureStateSwizzle(mFunctions, GL_TEXTURE_SWIZZLE_A,
- mState.getSwizzleState().swizzleAlpha);
- break;
- case gl::Texture::DIRTY_BIT_BASE_LEVEL:
- mFunctions->texParameteri(mState.mTarget, GL_TEXTURE_BASE_LEVEL,
- mState.getEffectiveBaseLevel());
- break;
- case gl::Texture::DIRTY_BIT_MAX_LEVEL:
- mFunctions->texParameteri(mState.mTarget, GL_TEXTURE_MAX_LEVEL,
- mState.getEffectiveMaxLevel());
- break;
- case gl::Texture::DIRTY_BIT_USAGE:
- break;
-
- default:
- UNREACHABLE();
- }
- }
-
- mLocalDirtyBits.reset();
}
-bool TextureGL::hasAnyDirtyBit() const
+template <typename T, typename ApplyTextureFuncType>
+static inline void SyncTextureStateMember(const FunctionsGL *functions,
+ ApplyTextureFuncType applyTextureFunc,
+ const gl::TextureState &newState,
+ gl::TextureState &curState,
+ GLenum textureType,
+ GLenum name,
+ T(gl::TextureState::*stateMember))
{
- return mLocalDirtyBits.any();
+ if (curState.*stateMember != newState.*stateMember)
+ {
+ applyTextureFunc();
+ curState.*stateMember = newState.*stateMember;
+ functions->texParameterf(textureType, name, static_cast<GLfloat>(curState.*stateMember));
+ }
}
-void TextureGL::syncTextureStateSwizzle(const FunctionsGL *functions, GLenum name, GLenum value)
+template <typename T, typename ApplyTextureFuncType>
+static inline void SyncTextureStateSwizzle(const FunctionsGL *functions,
+ ApplyTextureFuncType applyTextureFunc,
+ const LevelInfoGL &levelInfo,
+ const gl::SwizzleState &newState,
+ gl::SwizzleState &curState,
+ GLenum textureType,
+ GLenum name,
+ T(gl::SwizzleState::*stateMember))
{
- const LevelInfoGL &levelInfo = mLevelInfo[mState.getEffectiveBaseLevel()];
- GLenum resultSwizzle = value;
+ GLenum resultSwizzle = newState.*stateMember;
if (levelInfo.lumaWorkaround.enabled || levelInfo.depthStencilWorkaround)
{
if (levelInfo.lumaWorkaround.enabled)
{
- switch (value)
+ UNUSED_ASSERTION_VARIABLE(levelInfo.lumaWorkaround.workaroundFormat);
+
+ switch (newState.*stateMember)
{
case GL_RED:
case GL_GREEN:
@@ -964,7 +766,7 @@ void TextureGL::syncTextureStateSwizzle(const FunctionsGL *functions, GLenum nam
case GL_ZERO:
case GL_ONE:
// Don't modify the swizzle state when requesting ZERO or ONE.
- resultSwizzle = value;
+ resultSwizzle = newState.*stateMember;
break;
default:
@@ -974,11 +776,11 @@ void TextureGL::syncTextureStateSwizzle(const FunctionsGL *functions, GLenum nam
}
else if (levelInfo.depthStencilWorkaround)
{
- switch (value)
+ switch (newState.*stateMember)
{
case GL_RED:
// Don't modify the swizzle state when requesting the red channel.
- resultSwizzle = value;
+ resultSwizzle = newState.*stateMember;
break;
case GL_GREEN:
@@ -995,7 +797,7 @@ void TextureGL::syncTextureStateSwizzle(const FunctionsGL *functions, GLenum nam
case GL_ZERO:
case GL_ONE:
// Don't modify the swizzle state when requesting ZERO or ONE.
- resultSwizzle = value;
+ resultSwizzle = newState.*stateMember;
break;
default:
@@ -1010,25 +812,65 @@ void TextureGL::syncTextureStateSwizzle(const FunctionsGL *functions, GLenum nam
}
- functions->texParameteri(mState.mTarget, name, resultSwizzle);
+ if (curState.*stateMember != resultSwizzle)
+ {
+ applyTextureFunc();
+ curState.*stateMember = resultSwizzle;
+ functions->texParameterf(textureType, name, static_cast<GLfloat>(resultSwizzle));
+ }
}
-void TextureGL::setLevelInfo(size_t level, size_t levelCount, const LevelInfoGL &levelInfo)
+void TextureGL::syncState(size_t textureUnit) const
{
- ASSERT(levelCount > 0 && level + levelCount < mLevelInfo.size());
+ // Callback lamdba to bind this texture only if needed.
+ bool textureApplied = false;
+ auto applyTextureFunc = [&]()
+ {
+ if (!textureApplied)
+ {
+ mStateManager->activeTexture(textureUnit);
+ mStateManager->bindTexture(mState.mTarget, mTextureID);
+ textureApplied = true;
+ }
+ };
- GLuint baseLevel = mState.getEffectiveBaseLevel();
- bool needsResync = level <= baseLevel && level + levelCount >= baseLevel &&
- (levelInfo.depthStencilWorkaround || levelInfo.lumaWorkaround.enabled);
- if (needsResync)
+ // Sync texture state
+ // Apply the effective base level and max level instead of the base level and max level set from
+ // the API. This can help with buggy drivers.
+ if (mAppliedTextureState.getEffectiveBaseLevel() != mState.getEffectiveBaseLevel())
{
- mLocalDirtyBits |= GetLevelWorkaroundDirtyBits();
+ applyTextureFunc();
+ mFunctions->texParameteri(mState.mTarget, GL_TEXTURE_BASE_LEVEL,
+ mState.getEffectiveBaseLevel());
}
-
- for (size_t i = level; i < level + levelCount; i++)
+ mAppliedTextureState.mBaseLevel = mState.mBaseLevel;
+ if (mAppliedTextureState.getEffectiveMaxLevel() != mState.getEffectiveMaxLevel())
{
- mLevelInfo[i] = levelInfo;
+ applyTextureFunc();
+ mFunctions->texParameteri(mState.mTarget, GL_TEXTURE_MAX_LEVEL,
+ mState.getEffectiveMaxLevel());
}
+ mAppliedTextureState.mMaxLevel = mState.mMaxLevel;
+
+ // clang-format off
+ const LevelInfoGL &levelInfo = mLevelInfo[mState.getEffectiveBaseLevel()];
+ SyncTextureStateSwizzle(mFunctions, applyTextureFunc, levelInfo, mState.mSwizzleState, mAppliedTextureState.mSwizzleState, mState.mTarget, GL_TEXTURE_SWIZZLE_R, &gl::SwizzleState::swizzleRed);
+ SyncTextureStateSwizzle(mFunctions, applyTextureFunc, levelInfo, mState.mSwizzleState, mAppliedTextureState.mSwizzleState, mState.mTarget, GL_TEXTURE_SWIZZLE_G, &gl::SwizzleState::swizzleGreen);
+ SyncTextureStateSwizzle(mFunctions, applyTextureFunc, levelInfo, mState.mSwizzleState, mAppliedTextureState.mSwizzleState, mState.mTarget, GL_TEXTURE_SWIZZLE_B, &gl::SwizzleState::swizzleBlue);
+ SyncTextureStateSwizzle(mFunctions, applyTextureFunc, levelInfo, mState.mSwizzleState, mAppliedTextureState.mSwizzleState, mState.mTarget, GL_TEXTURE_SWIZZLE_A, &gl::SwizzleState::swizzleAlpha);
+
+ // Sync sampler state
+ SyncSamplerStateMember(mFunctions, applyTextureFunc, mState.mSamplerState, mAppliedTextureState.mSamplerState, mState.mTarget, GL_TEXTURE_MIN_FILTER, &gl::SamplerState::minFilter);
+ SyncSamplerStateMember(mFunctions, applyTextureFunc, mState.mSamplerState, mAppliedTextureState.mSamplerState, mState.mTarget, GL_TEXTURE_MAG_FILTER, &gl::SamplerState::magFilter);
+ SyncSamplerStateMember(mFunctions, applyTextureFunc, mState.mSamplerState, mAppliedTextureState.mSamplerState, mState.mTarget, GL_TEXTURE_WRAP_S, &gl::SamplerState::wrapS);
+ SyncSamplerStateMember(mFunctions, applyTextureFunc, mState.mSamplerState, mAppliedTextureState.mSamplerState, mState.mTarget, GL_TEXTURE_WRAP_T, &gl::SamplerState::wrapT);
+ SyncSamplerStateMember(mFunctions, applyTextureFunc, mState.mSamplerState, mAppliedTextureState.mSamplerState, mState.mTarget, GL_TEXTURE_WRAP_R, &gl::SamplerState::wrapR);
+ SyncSamplerStateMember(mFunctions, applyTextureFunc, mState.mSamplerState, mAppliedTextureState.mSamplerState, mState.mTarget, GL_TEXTURE_MAX_ANISOTROPY_EXT, &gl::SamplerState::maxAnisotropy);
+ SyncSamplerStateMember(mFunctions, applyTextureFunc, mState.mSamplerState, mAppliedTextureState.mSamplerState, mState.mTarget, GL_TEXTURE_MIN_LOD, &gl::SamplerState::minLod);
+ SyncSamplerStateMember(mFunctions, applyTextureFunc, mState.mSamplerState, mAppliedTextureState.mSamplerState, mState.mTarget, GL_TEXTURE_MAX_LOD, &gl::SamplerState::maxLod);
+ SyncSamplerStateMember(mFunctions, applyTextureFunc, mState.mSamplerState, mAppliedTextureState.mSamplerState, mState.mTarget, GL_TEXTURE_COMPARE_MODE, &gl::SamplerState::compareMode);
+ SyncSamplerStateMember(mFunctions, applyTextureFunc, mState.mSamplerState, mAppliedTextureState.mSamplerState, mState.mTarget, GL_TEXTURE_COMPARE_FUNC, &gl::SamplerState::compareFunc);
+ // clang-format on
}
GLuint TextureGL::getTextureID() const
diff --git a/gfx/angle/src/libANGLE/renderer/gl/TextureGL.h b/gfx/angle/src/libANGLE/renderer/gl/TextureGL.h
index 068284c5b..540e6c3c6 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/TextureGL.h
+++ b/gfx/angle/src/libANGLE/renderer/gl/TextureGL.h
@@ -87,12 +87,16 @@ class TextureGL : public TextureImpl
gl::Error setEGLImageTarget(GLenum target, egl::Image *image) override;
+ void syncState(size_t textureUnit) const;
GLuint getTextureID() const;
- void setBaseLevel(GLuint) override {}
+ gl::Error getAttachmentRenderTarget(const gl::FramebufferAttachment::Target &target,
+ FramebufferAttachmentRenderTarget **rtOut) override
+ {
+ return gl::Error(GL_OUT_OF_MEMORY, "Not supported on OpenGL");
+ }
- void syncState(const gl::Texture::DirtyBits &dirtyBits) override;
- bool hasAnyDirtyBit() const;
+ void setBaseLevel(GLuint) override {}
private:
void setImageHelper(GLenum target,
@@ -116,25 +120,12 @@ class TextureGL : public TextureImpl
const gl::PixelUnpackState &unpack,
const uint8_t *pixels);
- gl::Error setSubImagePaddingWorkaround(GLenum target,
- size_t level,
- const gl::Box &area,
- GLenum format,
- GLenum type,
- const gl::PixelUnpackState &unpack,
- const uint8_t *pixels);
-
- void syncTextureStateSwizzle(const FunctionsGL *functions, GLenum name, GLenum value);
-
- void setLevelInfo(size_t level, size_t levelCount, const LevelInfoGL &levelInfo);
-
const FunctionsGL *mFunctions;
const WorkaroundsGL &mWorkarounds;
StateManagerGL *mStateManager;
BlitGL *mBlitter;
std::vector<LevelInfoGL> mLevelInfo;
- gl::Texture::DirtyBits mLocalDirtyBits;
mutable gl::TextureState mAppliedTextureState;
GLuint mTextureID;
diff --git a/gfx/angle/src/libANGLE/renderer/gl/WorkaroundsGL.h b/gfx/angle/src/libANGLE/renderer/gl/WorkaroundsGL.h
index 105f94089..2549a2c47 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/WorkaroundsGL.h
+++ b/gfx/angle/src/libANGLE/renderer/gl/WorkaroundsGL.h
@@ -21,13 +21,7 @@ struct WorkaroundsGL
doWhileGLSLCausesGPUHang(false),
finishDoesNotCauseQueriesToBeAvailable(false),
alwaysCallUseProgramAfterLink(false),
- unpackOverlappingRowsSeparatelyUnpackBuffer(false),
- emulateAbsIntFunction(false),
- addAndTrueToLoopCondition(false),
- emulateIsnanFloat(false),
- useUnusedBlocksWithStandardOrSharedLayout(false),
- dontRemoveInvariantForFragmentInput(false),
- removeInvariantAndCentroidForESSL3(false)
+ unpackOverlappingRowsSeparatelyUnpackBuffer(false)
{
}
@@ -73,53 +67,6 @@ struct WorkaroundsGL
// In the case of unpacking from a pixel unpack buffer, unpack overlapping rows row by row.
bool unpackOverlappingRowsSeparatelyUnpackBuffer;
- // In the case of packing to a pixel pack buffer, pack overlapping rows row by row.
- bool packOverlappingRowsSeparatelyPackBuffer;
-
- // During initialization, assign the current vertex attributes to the spec-mandated defaults.
- bool initializeCurrentVertexAttributes;
-
- // abs(i) where i is an integer returns unexpected result on Intel Mac.
- // Emulate abs(i) with i * sign(i).
- bool emulateAbsIntFunction;
-
- // On Intel Mac, calculation of loop conditions in for and while loop has bug.
- // Add "&& true" to the end of the condition expression to work around the bug.
- bool addAndTrueToLoopCondition;
-
- // When uploading textures from an unpack buffer, some drivers count an extra row padding when
- // checking if the pixel unpack buffer is big enough. Tracking bug: http://anglebug.com/1512
- // For example considering the pixel buffer below where in memory, each row data (D) of the
- // texture is followed by some unused data (the dots):
- // +-------+--+
- // |DDDDDDD|..|
- // |DDDDDDD|..|
- // |DDDDDDD|..|
- // |DDDDDDD|..|
- // +-------A--B
- // The last pixel read will be A, but the driver will think it is B, causing it to generate an
- // error when the pixel buffer is just big enough.
- bool unpackLastRowSeparatelyForPaddingInclusion;
-
- // Equivalent workaround when uploading data from a pixel pack buffer.
- bool packLastRowSeparatelyForPaddingInclusion;
-
- // On some Intel drivers, using isnan() on highp float will get wrong answer. To work around
- // this bug, we use an expression to emulate function isnan().
- // Tracking bug: http://crbug.com/650547
- bool emulateIsnanFloat;
-
- // On Mac with OpenGL version 4.1, unused std140 or shared uniform blocks will be
- // treated as inactive which is not consistent with WebGL2.0 spec. Reference all members in a
- // unused std140 or shared uniform block at the beginning of main to work around it.
- bool useUnusedBlocksWithStandardOrSharedLayout;
-
- // This flag will keep invariant declaration for input in fragment shader for GLSL >=4.20
- // on AMD.
- bool dontRemoveInvariantForFragmentInput;
-
- // This flag is used to fix spec difference between GLSL 4.1 or lower and ESSL3.
- bool removeInvariantAndCentroidForESSL3;
};
}
diff --git a/gfx/angle/src/libANGLE/renderer/gl/cgl/DisplayCGL.h b/gfx/angle/src/libANGLE/renderer/gl/cgl/DisplayCGL.h
index cc1b17bb7..0ba57b62b 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/cgl/DisplayCGL.h
+++ b/gfx/angle/src/libANGLE/renderer/gl/cgl/DisplayCGL.h
@@ -35,8 +35,7 @@ class DisplayCGL : public DisplayGL
const egl::AttributeMap &attribs) override;
SurfaceImpl *createPbufferFromClientBuffer(const egl::SurfaceState &state,
const egl::Config *configuration,
- EGLenum buftype,
- EGLClientBuffer clientBuffer,
+ EGLClientBuffer shareHandle,
const egl::AttributeMap &attribs) override;
SurfaceImpl *createPixmapSurface(const egl::SurfaceState &state,
const egl::Config *configuration,
diff --git a/gfx/angle/src/libANGLE/renderer/gl/cgl/DisplayCGL.mm b/gfx/angle/src/libANGLE/renderer/gl/cgl/DisplayCGL.mm
index f87134c82..b9d5f39b0 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/cgl/DisplayCGL.mm
+++ b/gfx/angle/src/libANGLE/renderer/gl/cgl/DisplayCGL.mm
@@ -128,8 +128,7 @@ SurfaceImpl *DisplayCGL::createPbufferSurface(const egl::SurfaceState &state,
SurfaceImpl *DisplayCGL::createPbufferFromClientBuffer(const egl::SurfaceState &state,
const egl::Config *configuration,
- EGLenum buftype,
- EGLClientBuffer clientBuffer,
+ EGLClientBuffer shareHandle,
const egl::AttributeMap &attribs)
{
UNIMPLEMENTED();
diff --git a/gfx/angle/src/libANGLE/renderer/gl/cgl/PbufferSurfaceCGL.h b/gfx/angle/src/libANGLE/renderer/gl/cgl/PbufferSurfaceCGL.h
index 7cbb74da4..1e198bf5a 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/cgl/PbufferSurfaceCGL.h
+++ b/gfx/angle/src/libANGLE/renderer/gl/cgl/PbufferSurfaceCGL.h
@@ -53,7 +53,7 @@ class PbufferSurfaceCGL : public SurfaceGL
const FunctionsGL *mFunctions;
StateManagerGL *mStateManager;
- RendererGL *mRenderer;
+ const WorkaroundsGL &mWorkarounds;
GLuint mFramebuffer;
GLuint mColorRenderbuffer;
diff --git a/gfx/angle/src/libANGLE/renderer/gl/cgl/PbufferSurfaceCGL.mm b/gfx/angle/src/libANGLE/renderer/gl/cgl/PbufferSurfaceCGL.mm
index c03d3836f..b9689177e 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/cgl/PbufferSurfaceCGL.mm
+++ b/gfx/angle/src/libANGLE/renderer/gl/cgl/PbufferSurfaceCGL.mm
@@ -28,7 +28,7 @@ PbufferSurfaceCGL::PbufferSurfaceCGL(const egl::SurfaceState &state,
mHeight(height),
mFunctions(functions),
mStateManager(renderer->getStateManager()),
- mRenderer(renderer),
+ mWorkarounds(renderer->getWorkarounds()),
mFramebuffer(0),
mColorRenderbuffer(0),
mDSRenderbuffer(0)
@@ -136,8 +136,7 @@ EGLint PbufferSurfaceCGL::getSwapBehavior() const
FramebufferImpl *PbufferSurfaceCGL::createDefaultFramebuffer(const gl::FramebufferState &state)
{
// TODO(cwallez) assert it happens only once?
- return new FramebufferGL(mFramebuffer, state, mFunctions, mRenderer->getWorkarounds(),
- mRenderer->getBlitter(), mStateManager);
+ return new FramebufferGL(mFramebuffer, state, mFunctions, mWorkarounds, mStateManager);
}
}
diff --git a/gfx/angle/src/libANGLE/renderer/gl/cgl/WindowSurfaceCGL.h b/gfx/angle/src/libANGLE/renderer/gl/cgl/WindowSurfaceCGL.h
index 165ab0486..d8f1a14d7 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/cgl/WindowSurfaceCGL.h
+++ b/gfx/angle/src/libANGLE/renderer/gl/cgl/WindowSurfaceCGL.h
@@ -88,7 +88,6 @@ class WindowSurfaceCGL : public SurfaceGL
CGLContextObj mContext;
const FunctionsGL *mFunctions;
StateManagerGL *mStateManager;
- RendererGL *mRenderer;
const WorkaroundsGL &mWorkarounds;
GLuint mFramebuffer;
diff --git a/gfx/angle/src/libANGLE/renderer/gl/cgl/WindowSurfaceCGL.mm b/gfx/angle/src/libANGLE/renderer/gl/cgl/WindowSurfaceCGL.mm
index c2ac4dca4..b5375b1f9 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/cgl/WindowSurfaceCGL.mm
+++ b/gfx/angle/src/libANGLE/renderer/gl/cgl/WindowSurfaceCGL.mm
@@ -154,12 +154,11 @@
mContext(context),
mFunctions(functions),
mStateManager(renderer->getStateManager()),
- mRenderer(renderer),
mWorkarounds(renderer->getWorkarounds()),
mFramebuffer(0),
mDSRenderbuffer(0)
- {
- pthread_mutex_init(&mSwapState.mutex, nullptr);
+{
+ pthread_mutex_init(&mSwapState.mutex, nullptr);
}
WindowSurfaceCGL::~WindowSurfaceCGL()
@@ -325,8 +324,7 @@ EGLint WindowSurfaceCGL::getSwapBehavior() const
FramebufferImpl *WindowSurfaceCGL::createDefaultFramebuffer(const gl::FramebufferState &state)
{
// TODO(cwallez) assert it happens only once?
- return new FramebufferGL(mFramebuffer, state, mFunctions, mWorkarounds, mRenderer->getBlitter(),
- mStateManager);
+ return new FramebufferGL(mFramebuffer, state, mFunctions, mWorkarounds, mStateManager);
}
}
diff --git a/gfx/angle/src/libANGLE/renderer/gl/egl/SurfaceEGL.cpp b/gfx/angle/src/libANGLE/renderer/gl/egl/SurfaceEGL.cpp
index 693b61c9c..388832b2a 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/egl/SurfaceEGL.cpp
+++ b/gfx/angle/src/libANGLE/renderer/gl/egl/SurfaceEGL.cpp
@@ -33,6 +33,7 @@ SurfaceEGL::~SurfaceEGL()
if (mSurface != EGL_NO_SURFACE)
{
EGLBoolean success = mEGL->destroySurface(mSurface);
+ UNUSED_ASSERTION_VARIABLE(success);
ASSERT(success == EGL_TRUE);
}
}
@@ -103,6 +104,7 @@ EGLint SurfaceEGL::getWidth() const
{
EGLint value;
EGLBoolean success = mEGL->querySurface(mSurface, EGL_WIDTH, &value);
+ UNUSED_ASSERTION_VARIABLE(success);
ASSERT(success == EGL_TRUE);
return value;
}
@@ -111,6 +113,7 @@ EGLint SurfaceEGL::getHeight() const
{
EGLint value;
EGLBoolean success = mEGL->querySurface(mSurface, EGL_HEIGHT, &value);
+ UNUSED_ASSERTION_VARIABLE(success);
ASSERT(success == EGL_TRUE);
return value;
}
@@ -125,6 +128,7 @@ EGLint SurfaceEGL::getSwapBehavior() const
{
EGLint value;
EGLBoolean success = mEGL->querySurface(mSurface, EGL_SWAP_BEHAVIOR, &value);
+ UNUSED_ASSERTION_VARIABLE(success);
ASSERT(success == EGL_TRUE);
return value;
}
diff --git a/gfx/angle/src/libANGLE/renderer/gl/egl/android/DisplayAndroid.cpp b/gfx/angle/src/libANGLE/renderer/gl/egl/android/DisplayAndroid.cpp
index b689578c9..4956c5b3f 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/egl/android/DisplayAndroid.cpp
+++ b/gfx/angle/src/libANGLE/renderer/gl/egl/android/DisplayAndroid.cpp
@@ -159,6 +159,7 @@ SurfaceImpl *DisplayAndroid::createWindowSurface(const egl::SurfaceState &state,
EGL_NONE};
success = mEGL->chooseConfig(configAttribList, &config, 1, &numConfig);
ASSERT(success && numConfig == 1);
+ UNUSED_ASSERTION_VARIABLE(success);
return new WindowSurfaceEGL(state, mEGL, config, window, attribs.toIntVector(), mContext,
getRenderer());
@@ -176,6 +177,7 @@ SurfaceImpl *DisplayAndroid::createPbufferSurface(const egl::SurfaceState &state
EGL_NONE};
success = mEGL->chooseConfig(configAttribList, &config, 1, &numConfig);
ASSERT(success && numConfig == 1);
+ UNUSED_ASSERTION_VARIABLE(success);
return new PbufferSurfaceEGL(state, mEGL, config, attribs.toIntVector(), mContext,
getRenderer());
@@ -183,8 +185,7 @@ SurfaceImpl *DisplayAndroid::createPbufferSurface(const egl::SurfaceState &state
SurfaceImpl *DisplayAndroid::createPbufferFromClientBuffer(const egl::SurfaceState &state,
const egl::Config *configuration,
- EGLenum buftype,
- EGLClientBuffer clientBuffer,
+ EGLClientBuffer shareHandle,
const egl::AttributeMap &attribs)
{
UNIMPLEMENTED();
@@ -214,6 +215,7 @@ void DisplayAndroid::getConfigAttrib(EGLConfig config, EGLint attribute, T *valu
EGLint tmp;
EGLBoolean success = mEGL->getConfigAttrib(config, attribute, &tmp);
ASSERT(success == EGL_TRUE);
+ UNUSED_ASSERTION_VARIABLE(success);
*value = tmp;
}
@@ -231,6 +233,7 @@ egl::ConfigSet DisplayAndroid::generateConfigs()
success =
mEGL->chooseConfig(mConfigAttribList.data(), configs.data(), numConfigs, &numConfigs2);
ASSERT(success == EGL_TRUE && numConfigs2 == numConfigs);
+ UNUSED_ASSERTION_VARIABLE(success);
for (int i = 0; i < numConfigs; i++)
{
diff --git a/gfx/angle/src/libANGLE/renderer/gl/egl/android/DisplayAndroid.h b/gfx/angle/src/libANGLE/renderer/gl/egl/android/DisplayAndroid.h
index 0be9bb465..693532fb4 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/egl/android/DisplayAndroid.h
+++ b/gfx/angle/src/libANGLE/renderer/gl/egl/android/DisplayAndroid.h
@@ -36,8 +36,7 @@ class DisplayAndroid : public DisplayEGL
const egl::AttributeMap &attribs) override;
SurfaceImpl *createPbufferFromClientBuffer(const egl::SurfaceState &state,
const egl::Config *configuration,
- EGLenum buftype,
- EGLClientBuffer clientBuffer,
+ EGLClientBuffer shareHandle,
const egl::AttributeMap &attribs) override;
SurfaceImpl *createPixmapSurface(const egl::SurfaceState &state,
const egl::Config *configuration,
diff --git a/gfx/angle/src/libANGLE/renderer/gl/egl/ozone/DisplayOzone.cpp b/gfx/angle/src/libANGLE/renderer/gl/egl/ozone/DisplayOzone.cpp
index 01549fcfa..6f5321632 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/egl/ozone/DisplayOzone.cpp
+++ b/gfx/angle/src/libANGLE/renderer/gl/egl/ozone/DisplayOzone.cpp
@@ -308,9 +308,9 @@ uint32_t DisplayOzone::Buffer::getDRMFB()
FramebufferGL *DisplayOzone::Buffer::framebufferGL(const gl::FramebufferState &state)
{
- return new FramebufferGL(
- mGLFB, state, mDisplay->mFunctionsGL, mDisplay->getRenderer()->getWorkarounds(),
- mDisplay->getRenderer()->getBlitter(), mDisplay->getRenderer()->getStateManager());
+ return new FramebufferGL(mGLFB, state, mDisplay->mFunctionsGL,
+ mDisplay->getRenderer()->getWorkarounds(),
+ mDisplay->getRenderer()->getStateManager());
}
void DisplayOzone::Buffer::present()
@@ -859,8 +859,7 @@ SurfaceImpl *DisplayOzone::createPbufferSurface(const egl::SurfaceState &state,
SurfaceImpl *DisplayOzone::createPbufferFromClientBuffer(const egl::SurfaceState &state,
const egl::Config *configuration,
- EGLenum buftype,
- EGLClientBuffer clientBuffer,
+ EGLClientBuffer shareHandle,
const egl::AttributeMap &attribs)
{
UNIMPLEMENTED();
diff --git a/gfx/angle/src/libANGLE/renderer/gl/egl/ozone/DisplayOzone.h b/gfx/angle/src/libANGLE/renderer/gl/egl/ozone/DisplayOzone.h
index 77c669314..55a188c3e 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/egl/ozone/DisplayOzone.h
+++ b/gfx/angle/src/libANGLE/renderer/gl/egl/ozone/DisplayOzone.h
@@ -122,8 +122,7 @@ class DisplayOzone final : public DisplayEGL
const egl::AttributeMap &attribs) override;
SurfaceImpl *createPbufferFromClientBuffer(const egl::SurfaceState &state,
const egl::Config *configuration,
- EGLenum buftype,
- EGLClientBuffer clientBuffer,
+ EGLClientBuffer shareHandle,
const egl::AttributeMap &attribs) override;
SurfaceImpl *createPixmapSurface(const egl::SurfaceState &state,
const egl::Config *configuration,
diff --git a/gfx/angle/src/libANGLE/renderer/gl/formatutilsgl.cpp b/gfx/angle/src/libANGLE/renderer/gl/formatutilsgl.cpp
index c5219b4b8..1688be116 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/formatutilsgl.cpp
+++ b/gfx/angle/src/libANGLE/renderer/gl/formatutilsgl.cpp
@@ -438,32 +438,6 @@ static GLenum GetNativeType(const FunctionsGL *functions,
return result;
}
-static GLenum GetNativeReadType(const FunctionsGL *functions,
- const WorkaroundsGL &workarounds,
- GLenum type)
-{
- GLenum result = type;
-
- if (functions->standard == STANDARD_GL_DESKTOP)
- {
- if (type == GL_HALF_FLOAT_OES)
- {
- // The enums differ for the OES half float extensions and desktop GL spec. Update it.
- result = GL_HALF_FLOAT;
- }
- }
-
- return result;
-}
-
-static GLenum GetNativeReadFormat(const FunctionsGL *functions,
- const WorkaroundsGL &workarounds,
- GLenum format)
-{
- GLenum result = format;
- return result;
-}
-
TexImageFormat GetTexImageFormat(const FunctionsGL *functions,
const WorkaroundsGL &workarounds,
GLenum internalFormat,
@@ -538,16 +512,6 @@ RenderbufferFormat GetRenderbufferFormat(const FunctionsGL *functions,
GetNativeInternalFormat(functions, workarounds, internalFormat, internalFormat);
return result;
}
-ReadPixelsFormat GetReadPixelsFormat(const FunctionsGL *functions,
- const WorkaroundsGL &workarounds,
- GLenum format,
- GLenum type)
-{
- ReadPixelsFormat result;
- result.format = GetNativeReadFormat(functions, workarounds, format);
- result.type = GetNativeReadType(functions, workarounds, type);
- return result;
-}
}
}
diff --git a/gfx/angle/src/libANGLE/renderer/gl/formatutilsgl.h b/gfx/angle/src/libANGLE/renderer/gl/formatutilsgl.h
index 616f37af2..547d4783e 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/formatutilsgl.h
+++ b/gfx/angle/src/libANGLE/renderer/gl/formatutilsgl.h
@@ -112,16 +112,6 @@ struct RenderbufferFormat
RenderbufferFormat GetRenderbufferFormat(const FunctionsGL *functions,
const WorkaroundsGL &workarounds,
GLenum internalFormat);
-
-struct ReadPixelsFormat
-{
- GLenum format;
- GLenum type;
-};
-ReadPixelsFormat GetReadPixelsFormat(const FunctionsGL *functions,
- const WorkaroundsGL &workarounds,
- GLenum format,
- GLenum type);
}
}
diff --git a/gfx/angle/src/libANGLE/renderer/gl/glx/DisplayGLX.cpp b/gfx/angle/src/libANGLE/renderer/gl/glx/DisplayGLX.cpp
index e98401d0a..0358a428e 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/glx/DisplayGLX.cpp
+++ b/gfx/angle/src/libANGLE/renderer/gl/glx/DisplayGLX.cpp
@@ -350,7 +350,7 @@ egl::Error DisplayGLX::initialize(egl::Display *display)
bool isOpenGLES =
eglAttributes.get(EGL_PLATFORM_ANGLE_TYPE_ANGLE, EGL_PLATFORM_ANGLE_TYPE_DEFAULT_ANGLE) ==
EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE;
- if (isOpenGLES && (IsIntel(vendor) || IsNvidia(vendor)))
+ if (isOpenGLES && (vendor == VENDOR_ID_INTEL || vendor == VENDOR_ID_NVIDIA))
{
return egl::Error(EGL_NOT_INITIALIZED, "Intel or NVIDIA OpenGL ES drivers are not supported.");
}
@@ -410,8 +410,7 @@ SurfaceImpl *DisplayGLX::createPbufferSurface(const egl::SurfaceState &state,
SurfaceImpl *DisplayGLX::createPbufferFromClientBuffer(const egl::SurfaceState &state,
const egl::Config *configuration,
- EGLenum buftype,
- EGLClientBuffer clientBuffer,
+ EGLClientBuffer shareHandle,
const egl::AttributeMap &attribs)
{
UNIMPLEMENTED();
diff --git a/gfx/angle/src/libANGLE/renderer/gl/glx/DisplayGLX.h b/gfx/angle/src/libANGLE/renderer/gl/glx/DisplayGLX.h
index 7e870c2f3..79198395d 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/glx/DisplayGLX.h
+++ b/gfx/angle/src/libANGLE/renderer/gl/glx/DisplayGLX.h
@@ -53,8 +53,7 @@ class DisplayGLX : public DisplayGL
const egl::AttributeMap &attribs) override;
SurfaceImpl *createPbufferFromClientBuffer(const egl::SurfaceState &state,
const egl::Config *configuration,
- EGLenum buftype,
- EGLClientBuffer clientBuffer,
+ EGLClientBuffer shareHandle,
const egl::AttributeMap &attribs) override;
SurfaceImpl *createPixmapSurface(const egl::SurfaceState &state,
const egl::Config *configuration,
diff --git a/gfx/angle/src/libANGLE/renderer/gl/renderergl_utils.cpp b/gfx/angle/src/libANGLE/renderer/gl/renderergl_utils.cpp
index 504a787f8..87fd24a61 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/renderergl_utils.cpp
+++ b/gfx/angle/src/libANGLE/renderer/gl/renderergl_utils.cpp
@@ -11,8 +11,6 @@
#include <limits>
-#include "common/mathutil.h"
-#include "libANGLE/Buffer.h"
#include "libANGLE/Caps.h"
#include "libANGLE/formatutils.h"
#include "libANGLE/renderer/gl/FunctionsGL.h"
@@ -22,8 +20,6 @@
#include <algorithm>
#include <sstream>
-using angle::CheckedNumeric;
-
namespace rx
{
VendorID GetVendorID(const FunctionsGL *functions)
@@ -871,81 +867,35 @@ void GenerateCaps(const FunctionsGL *functions, gl::Caps *caps, gl::TextureCapsM
functions->isAtLeastGLES(gl::Version(3, 1));
extensions->pathRendering = canEnableGLPathRendering || canEnableESPathRendering;
-
- extensions->textureSRGBDecode = functions->hasGLExtension("GL_EXT_texture_sRGB_decode") ||
- functions->hasGLESExtension("GL_EXT_texture_sRGB_decode");
-
-#if defined(ANGLE_PLATFORM_APPLE)
- VendorID vendor = GetVendorID(functions);
- if ((IsAMD(vendor) || IsIntel(vendor)) && *maxSupportedESVersion >= gl::Version(3, 0))
- {
- // Apple Intel/AMD drivers do not correctly use the TEXTURE_SRGB_DECODE property of sampler
- // states. Disable this extension when we would advertise any ES version that has samplers.
- extensions->textureSRGBDecode = false;
- }
-#endif
-
- extensions->sRGBWriteControl = functions->isAtLeastGL(gl::Version(3, 0)) ||
- functions->hasGLExtension("GL_EXT_framebuffer_sRGB") ||
- functions->hasGLExtension("GL_ARB_framebuffer_sRGB") ||
- functions->hasGLESExtension("GL_EXT_sRGB_write_control");
-
-#if defined(ANGLE_PLATFORM_ANDROID)
- // SRGB blending does not appear to work correctly on the Nexus 5. Writing to an SRGB
- // framebuffer with GL_FRAMEBUFFER_SRGB enabled and then reading back returns the same value.
- // Disabling GL_FRAMEBUFFER_SRGB will then convert in the wrong direction.
- extensions->sRGBWriteControl = false;
-#endif
}
void GenerateWorkarounds(const FunctionsGL *functions, WorkaroundsGL *workarounds)
{
VendorID vendor = GetVendorID(functions);
- workarounds->dontRemoveInvariantForFragmentInput =
- functions->standard == STANDARD_GL_DESKTOP && IsAMD(vendor);
-
// Don't use 1-bit alpha formats on desktop GL with AMD or Intel drivers.
workarounds->avoid1BitAlphaTextureFormats =
- functions->standard == STANDARD_GL_DESKTOP && (IsAMD(vendor) || IsIntel(vendor));
+ functions->standard == STANDARD_GL_DESKTOP &&
+ (vendor == VENDOR_ID_AMD || vendor == VENDOR_ID_INTEL);
workarounds->rgba4IsNotSupportedForColorRendering =
- functions->standard == STANDARD_GL_DESKTOP && IsIntel(vendor);
-
- workarounds->emulateAbsIntFunction = IsIntel(vendor);
-
- workarounds->addAndTrueToLoopCondition = IsIntel(vendor);
-
- workarounds->emulateIsnanFloat = IsIntel(vendor);
+ functions->standard == STANDARD_GL_DESKTOP && vendor == VENDOR_ID_INTEL;
workarounds->doesSRGBClearsOnLinearFramebufferAttachments =
- functions->standard == STANDARD_GL_DESKTOP && (IsIntel(vendor) || IsAMD(vendor));
+ functions->standard == STANDARD_GL_DESKTOP &&
+ (vendor == VENDOR_ID_INTEL || vendor == VENDOR_ID_AMD);
#if defined(ANGLE_PLATFORM_APPLE)
workarounds->doWhileGLSLCausesGPUHang = true;
- workarounds->useUnusedBlocksWithStandardOrSharedLayout = true;
#endif
workarounds->finishDoesNotCauseQueriesToBeAvailable =
- functions->standard == STANDARD_GL_DESKTOP && IsNvidia(vendor);
+ functions->standard == STANDARD_GL_DESKTOP && vendor == VENDOR_ID_NVIDIA;
// TODO(cwallez): Disable this workaround for MacOSX versions 10.9 or later.
workarounds->alwaysCallUseProgramAfterLink = true;
- workarounds->unpackOverlappingRowsSeparatelyUnpackBuffer = IsNvidia(vendor);
- workarounds->packOverlappingRowsSeparatelyPackBuffer = IsNvidia(vendor);
-
- workarounds->initializeCurrentVertexAttributes = IsNvidia(vendor);
-
-#if defined(ANGLE_PLATFORM_APPLE)
- workarounds->unpackLastRowSeparatelyForPaddingInclusion = true;
- workarounds->packLastRowSeparatelyForPaddingInclusion = true;
-#else
- workarounds->unpackLastRowSeparatelyForPaddingInclusion = IsNvidia(vendor);
- workarounds->packLastRowSeparatelyForPaddingInclusion = IsNvidia(vendor);
-#endif
-
- workarounds->removeInvariantAndCentroidForESSL3 = functions->isAtMostGL(gl::Version(4, 1));
+ workarounds->unpackOverlappingRowsSeparatelyUnpackBuffer = vendor == VENDOR_ID_NVIDIA;
}
}
@@ -1001,45 +951,4 @@ uint8_t *MapBufferRangeWithFallback(const FunctionsGL *functions,
return nullptr;
}
}
-
-gl::ErrorOrResult<bool> ShouldApplyLastRowPaddingWorkaround(const gl::Extents &size,
- const gl::PixelStoreStateBase &state,
- GLenum format,
- GLenum type,
- bool is3D,
- const void *pixels)
-{
- if (state.pixelBuffer.get() == nullptr)
- {
- return false;
- }
-
- // We are using an pack or unpack buffer, compute what the driver thinks is going to be the
- // last byte read or written. If it is past the end of the buffer, we will need to use the
- // workaround otherwise the driver will generate INVALID_OPERATION and not do the operation.
- CheckedNumeric<size_t> checkedEndByte;
- CheckedNumeric<size_t> pixelBytes;
- size_t rowPitch;
-
- const gl::InternalFormat &glFormat =
- gl::GetInternalFormatInfo(gl::GetSizedInternalFormat(format, type));
- ANGLE_TRY_RESULT(glFormat.computePackUnpackEndByte(size, state, is3D), checkedEndByte);
- ANGLE_TRY_RESULT(glFormat.computeRowPitch(size.width, state.alignment, state.rowLength),
- rowPitch);
- pixelBytes = glFormat.pixelBytes;
-
- checkedEndByte += reinterpret_cast<intptr_t>(pixels);
-
- // At this point checkedEndByte is the actual last byte read.
- // The driver adds an extra row padding (if any), mimic it.
- ANGLE_TRY_CHECKED_MATH(pixelBytes);
- if (pixelBytes.ValueOrDie() * size.width < rowPitch)
- {
- checkedEndByte += rowPitch - pixelBytes * size.width;
- }
-
- ANGLE_TRY_CHECKED_MATH(checkedEndByte);
-
- return checkedEndByte.ValueOrDie() > static_cast<size_t>(state.pixelBuffer->getSize());
-}
}
diff --git a/gfx/angle/src/libANGLE/renderer/gl/renderergl_utils.h b/gfx/angle/src/libANGLE/renderer/gl/renderergl_utils.h
index 1e9338fb5..3b0cab27e 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/renderergl_utils.h
+++ b/gfx/angle/src/libANGLE/renderer/gl/renderergl_utils.h
@@ -11,8 +11,6 @@
#define LIBANGLE_RENDERER_GL_RENDERERGLUTILS_H_
#include "libANGLE/angletypes.h"
-#include "libANGLE/Error.h"
-#include "libANGLE/renderer/driver_utils.h"
#include "libANGLE/renderer/gl/functionsgl_typedefs.h"
#include <string>
@@ -49,13 +47,6 @@ uint8_t *MapBufferRangeWithFallback(const FunctionsGL *functions,
size_t offset,
size_t length,
GLbitfield access);
-
-gl::ErrorOrResult<bool> ShouldApplyLastRowPaddingWorkaround(const gl::Extents &size,
- const gl::PixelStoreStateBase &state,
- GLenum format,
- GLenum type,
- bool is3D,
- const void *pixels);
}
#endif // LIBANGLE_RENDERER_GL_RENDERERGLUTILS_H_
diff --git a/gfx/angle/src/libANGLE/renderer/gl/wgl/D3DTextureSurfaceWGL.cpp b/gfx/angle/src/libANGLE/renderer/gl/wgl/D3DTextureSurfaceWGL.cpp
deleted file mode 100644
index f19e8fdf3..000000000
--- a/gfx/angle/src/libANGLE/renderer/gl/wgl/D3DTextureSurfaceWGL.cpp
+++ /dev/null
@@ -1,384 +0,0 @@
-//
-// Copyright (c) 2015 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-
-// D3DTextureSurfaceWGL.cpp: WGL implementation of egl::Surface for D3D texture interop.
-
-#include "libANGLE/renderer/gl/wgl/D3DTextureSurfaceWGL.h"
-
-#include "libANGLE/renderer/gl/FramebufferGL.h"
-#include "libANGLE/renderer/gl/TextureGL.h"
-#include "libANGLE/renderer/gl/RendererGL.h"
-#include "libANGLE/renderer/gl/StateManagerGL.h"
-#include "libANGLE/renderer/gl/wgl/DisplayWGL.h"
-#include "libANGLE/renderer/gl/wgl/FunctionsWGL.h"
-
-namespace rx
-{
-
-namespace
-{
-
-egl::Error GetD3DTextureInfo(EGLClientBuffer clientBuffer,
- size_t *width,
- size_t *height,
- IUnknown **object,
- IUnknown **device)
-{
- IUnknown *buffer = static_cast<IUnknown *>(clientBuffer);
-
- IDirect3DTexture9 *texture9 = nullptr;
- ID3D11Texture2D *texture11 = nullptr;
- if (SUCCEEDED(buffer->QueryInterface<ID3D11Texture2D>(&texture11)))
- {
- D3D11_TEXTURE2D_DESC textureDesc;
- texture11->GetDesc(&textureDesc);
-
- // From table egl.restrictions in EGL_ANGLE_d3d_texture_client_buffer.
- switch (textureDesc.Format)
- {
- case DXGI_FORMAT_R8G8B8A8_UNORM:
- case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB:
- case DXGI_FORMAT_B8G8R8A8_UNORM:
- case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB:
- case DXGI_FORMAT_R16G16B16A16_FLOAT:
- case DXGI_FORMAT_R32G32B32A32_FLOAT:
- break;
-
- default:
- SafeRelease(texture11);
- return egl::Error(EGL_BAD_PARAMETER, "Unknown client buffer texture format: %u.",
- textureDesc.Format);
- }
-
- ID3D11Device *d3d11Device = nullptr;
- texture11->GetDevice(&d3d11Device);
- if (d3d11Device == nullptr)
- {
- SafeRelease(texture11);
- return egl::Error(EGL_BAD_PARAMETER,
- "Could not query the D3D11 device from the client buffer.");
- }
-
- if (width)
- {
- *width = textureDesc.Width;
- }
- if (height)
- {
- *height = textureDesc.Height;
- }
-
- if (device)
- {
- *device = d3d11Device;
- }
- else
- {
- SafeRelease(d3d11Device);
- }
-
- if (object)
- {
- *object = texture11;
- }
- else
- {
- SafeRelease(texture11);
- }
-
- return egl::Error(EGL_SUCCESS);
- }
- else if (SUCCEEDED(buffer->QueryInterface<IDirect3DTexture9>(&texture9)))
- {
- D3DSURFACE_DESC surfaceDesc;
- if (FAILED(texture9->GetLevelDesc(0, &surfaceDesc)))
- {
- SafeRelease(texture9);
- return egl::Error(EGL_BAD_PARAMETER,
- "Could not query description of the D3D9 surface.");
- }
-
- // From table egl.restrictions in EGL_ANGLE_d3d_texture_client_buffer.
- switch (surfaceDesc.Format)
- {
- case D3DFMT_R8G8B8:
- case D3DFMT_A8R8G8B8:
- case D3DFMT_A16B16G16R16F:
- case D3DFMT_A32B32G32R32F:
- break;
-
- default:
- SafeRelease(texture9);
- return egl::Error(EGL_BAD_PARAMETER, "Unknown client buffer texture format: %u.",
- surfaceDesc.Format);
- }
-
- if (width)
- {
- *width = surfaceDesc.Width;
- }
- if (height)
- {
- *height = surfaceDesc.Height;
- }
-
- IDirect3DDevice9 *d3d9Device = nullptr;
- HRESULT result = texture9->GetDevice(&d3d9Device);
- if (FAILED(result))
- {
- SafeRelease(texture9);
- return egl::Error(EGL_BAD_PARAMETER,
- "Could not query the D3D9 device from the client buffer.");
- }
-
- if (device)
- {
- *device = d3d9Device;
- }
- else
- {
- SafeRelease(d3d9Device);
- }
-
- if (object)
- {
- *object = texture9;
- }
- else
- {
- SafeRelease(texture9);
- }
-
- return egl::Error(EGL_SUCCESS);
- }
- else
- {
- return egl::Error(EGL_BAD_PARAMETER,
- "Provided buffer is not a IDirect3DTexture9 or ID3D11Texture2D.");
- }
-}
-
-} // anonymous namespace
-
-D3DTextureSurfaceWGL::D3DTextureSurfaceWGL(const egl::SurfaceState &state,
- RendererGL *renderer,
- EGLClientBuffer clientBuffer,
- DisplayWGL *display,
- HGLRC wglContext,
- HDC deviceContext,
- const FunctionsGL *functionsGL,
- const FunctionsWGL *functionsWGL)
- : SurfaceGL(state, renderer),
- mClientBuffer(clientBuffer),
- mRenderer(renderer),
- mDisplay(display),
- mStateManager(renderer->getStateManager()),
- mWorkarounds(renderer->getWorkarounds()),
- mFunctionsGL(functionsGL),
- mFunctionsWGL(functionsWGL),
- mWGLContext(wglContext),
- mDeviceContext(deviceContext),
- mWidth(0),
- mHeight(0),
- mDeviceHandle(nullptr),
- mObject(nullptr),
- mBoundObjectTextureHandle(nullptr),
- mBoundObjectRenderbufferHandle(nullptr),
- mRenderbufferID(0),
- mFramebufferID(0)
-{
-}
-
-D3DTextureSurfaceWGL::~D3DTextureSurfaceWGL()
-{
- ASSERT(mBoundObjectTextureHandle == nullptr);
-
- SafeRelease(mObject);
-
- if (mDeviceHandle)
- {
- if (mBoundObjectRenderbufferHandle)
- {
- mFunctionsWGL->dxUnregisterObjectNV(mDeviceHandle, mBoundObjectRenderbufferHandle);
- mBoundObjectRenderbufferHandle = nullptr;
- }
- mStateManager->deleteRenderbuffer(mRenderbufferID);
-
- if (mBoundObjectTextureHandle)
- {
- mFunctionsWGL->dxUnregisterObjectNV(mDeviceHandle, mBoundObjectTextureHandle);
- mBoundObjectTextureHandle = nullptr;
- }
-
- // GL framebuffer is deleted by the default framebuffer object
- mFramebufferID = 0;
-
- mDisplay->releaseD3DDevice(mDeviceHandle);
- mDeviceHandle = nullptr;
- }
-}
-
-egl::Error D3DTextureSurfaceWGL::ValidateD3DTextureClientBuffer(EGLClientBuffer clientBuffer)
-{
- return GetD3DTextureInfo(clientBuffer, nullptr, nullptr, nullptr, nullptr);
-}
-
-egl::Error D3DTextureSurfaceWGL::initialize()
-{
- IUnknown *device = nullptr;
- ANGLE_TRY(GetD3DTextureInfo(mClientBuffer, &mWidth, &mHeight, &mObject, &device));
-
- ASSERT(device != nullptr);
- egl::Error error = mDisplay->registerD3DDevice(device, &mDeviceHandle);
- SafeRelease(device);
- if (error.isError())
- {
- return error;
- }
-
- mFunctionsGL->genRenderbuffers(1, &mRenderbufferID);
- mStateManager->bindRenderbuffer(GL_RENDERBUFFER, mRenderbufferID);
- mBoundObjectRenderbufferHandle = mFunctionsWGL->dxRegisterObjectNV(
- mDeviceHandle, mObject, mRenderbufferID, GL_RENDERBUFFER, WGL_ACCESS_READ_WRITE_NV);
- if (mBoundObjectRenderbufferHandle == nullptr)
- {
- return egl::Error(EGL_BAD_ALLOC, "Failed to register D3D object, error: 0x%08x.",
- HRESULT_CODE(GetLastError()));
- }
-
- mFunctionsGL->genFramebuffers(1, &mFramebufferID);
- mStateManager->bindFramebuffer(GL_FRAMEBUFFER, mFramebufferID);
- mFunctionsGL->framebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
- mRenderbufferID);
-
- return egl::Error(EGL_SUCCESS);
-}
-
-egl::Error D3DTextureSurfaceWGL::makeCurrent()
-{
- if (!mFunctionsWGL->makeCurrent(mDeviceContext, mWGLContext))
- {
- // TODO(geofflang): What error type here?
- return egl::Error(EGL_CONTEXT_LOST, "Failed to make the WGL context current.");
- }
-
- if (!mFunctionsWGL->dxLockObjectsNV(mDeviceHandle, 1, &mBoundObjectRenderbufferHandle))
- {
- DWORD error = GetLastError();
- return egl::Error(EGL_BAD_ALLOC, "Failed to lock object, error: 0x%08x.",
- HRESULT_CODE(error));
- }
-
- return egl::Error(EGL_SUCCESS);
-}
-
-egl::Error D3DTextureSurfaceWGL::unMakeCurrent()
-{
- if (!mFunctionsWGL->dxUnlockObjectsNV(mDeviceHandle, 1, &mBoundObjectRenderbufferHandle))
- {
- DWORD error = GetLastError();
- return egl::Error(EGL_BAD_ALLOC, "Failed to unlock object, error: 0x%08x.",
- HRESULT_CODE(error));
- }
-
- return egl::Error(EGL_SUCCESS);
-}
-
-egl::Error D3DTextureSurfaceWGL::swap()
-{
- return egl::Error(EGL_SUCCESS);
-}
-
-egl::Error D3DTextureSurfaceWGL::postSubBuffer(EGLint x, EGLint y, EGLint width, EGLint height)
-{
- UNIMPLEMENTED();
- return egl::Error(EGL_SUCCESS);
-}
-
-egl::Error D3DTextureSurfaceWGL::querySurfacePointerANGLE(EGLint attribute, void **value)
-{
- UNIMPLEMENTED();
- return egl::Error(EGL_SUCCESS);
-}
-
-egl::Error D3DTextureSurfaceWGL::bindTexImage(gl::Texture *texture, EGLint buffer)
-{
- ASSERT(mBoundObjectTextureHandle == nullptr);
-
- const TextureGL *textureGL = GetImplAs<TextureGL>(texture);
- GLuint textureID = textureGL->getTextureID();
-
- mBoundObjectTextureHandle = mFunctionsWGL->dxRegisterObjectNV(
- mDeviceHandle, mObject, textureID, GL_TEXTURE_2D, WGL_ACCESS_READ_WRITE_NV);
- if (mBoundObjectTextureHandle == nullptr)
- {
- DWORD error = GetLastError();
- return egl::Error(EGL_BAD_ALLOC, "Failed to register D3D object, error: 0x%08x.",
- HRESULT_CODE(error));
- }
-
- if (!mFunctionsWGL->dxLockObjectsNV(mDeviceHandle, 1, &mBoundObjectTextureHandle))
- {
- DWORD error = GetLastError();
- return egl::Error(EGL_BAD_ALLOC, "Failed to lock object, error: 0x%08x.",
- HRESULT_CODE(error));
- }
-
- return egl::Error(EGL_SUCCESS);
-}
-
-egl::Error D3DTextureSurfaceWGL::releaseTexImage(EGLint buffer)
-{
- ASSERT(mBoundObjectTextureHandle != nullptr);
- if (!mFunctionsWGL->dxUnlockObjectsNV(mDeviceHandle, 1, &mBoundObjectTextureHandle))
- {
- DWORD error = GetLastError();
- return egl::Error(EGL_BAD_ALLOC, "Failed to unlock object, error: 0x%08x.",
- HRESULT_CODE(error));
- }
-
- if (!mFunctionsWGL->dxUnregisterObjectNV(mDeviceHandle, mBoundObjectTextureHandle))
- {
- DWORD error = GetLastError();
- return egl::Error(EGL_BAD_ALLOC, "Failed to unregister D3D object, error: 0x%08x.",
- HRESULT_CODE(error));
- }
- mBoundObjectTextureHandle = nullptr;
-
- return egl::Error(EGL_SUCCESS);
-}
-
-void D3DTextureSurfaceWGL::setSwapInterval(EGLint interval)
-{
- UNIMPLEMENTED();
-}
-
-EGLint D3DTextureSurfaceWGL::getWidth() const
-{
- return static_cast<EGLint>(mWidth);
-}
-
-EGLint D3DTextureSurfaceWGL::getHeight() const
-{
- return static_cast<EGLint>(mHeight);
-}
-
-EGLint D3DTextureSurfaceWGL::isPostSubBufferSupported() const
-{
- return EGL_FALSE;
-}
-
-EGLint D3DTextureSurfaceWGL::getSwapBehavior() const
-{
- return EGL_BUFFER_PRESERVED;
-}
-
-FramebufferImpl *D3DTextureSurfaceWGL::createDefaultFramebuffer(const gl::FramebufferState &data)
-{
- return new FramebufferGL(mFramebufferID, data, mFunctionsGL, mWorkarounds,
- mRenderer->getBlitter(), mStateManager);
-}
-} // namespace rx
diff --git a/gfx/angle/src/libANGLE/renderer/gl/wgl/D3DTextureSurfaceWGL.h b/gfx/angle/src/libANGLE/renderer/gl/wgl/D3DTextureSurfaceWGL.h
deleted file mode 100644
index 8fb1d4003..000000000
--- a/gfx/angle/src/libANGLE/renderer/gl/wgl/D3DTextureSurfaceWGL.h
+++ /dev/null
@@ -1,86 +0,0 @@
-
-// Copyright (c) 2015 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-
-// D3DTextureSurfaceWGL.h: WGL implementation of egl::Surface for D3D texture interop.
-
-#ifndef LIBANGLE_RENDERER_GL_WGL_D3DTEXTIRESURFACEWGL_H_
-#define LIBANGLE_RENDERER_GL_WGL_D3DTEXTIRESURFACEWGL_H_
-
-#include "libANGLE/renderer/gl/SurfaceGL.h"
-
-#include <GL/wglext.h>
-
-namespace rx
-{
-
-class FunctionsGL;
-class FunctionsWGL;
-class DisplayWGL;
-class StateManagerGL;
-struct WorkaroundsGL;
-
-class D3DTextureSurfaceWGL : public SurfaceGL
-{
- public:
- D3DTextureSurfaceWGL(const egl::SurfaceState &state,
- RendererGL *renderer,
- EGLClientBuffer clientBuffer,
- DisplayWGL *display,
- HGLRC wglContext,
- HDC deviceContext,
- const FunctionsGL *functionsGL,
- const FunctionsWGL *functionsWGL);
- ~D3DTextureSurfaceWGL() override;
-
- static egl::Error ValidateD3DTextureClientBuffer(EGLClientBuffer clientBuffer);
-
- egl::Error initialize() override;
- egl::Error makeCurrent() override;
- egl::Error unMakeCurrent() override;
-
- egl::Error swap() override;
- egl::Error postSubBuffer(EGLint x, EGLint y, EGLint width, EGLint height) override;
- egl::Error querySurfacePointerANGLE(EGLint attribute, void **value) override;
- egl::Error bindTexImage(gl::Texture *texture, EGLint buffer) override;
- egl::Error releaseTexImage(EGLint buffer) override;
- void setSwapInterval(EGLint interval) override;
-
- EGLint getWidth() const override;
- EGLint getHeight() const override;
-
- EGLint isPostSubBufferSupported() const override;
- EGLint getSwapBehavior() const override;
-
- FramebufferImpl *createDefaultFramebuffer(const gl::FramebufferState &data) override;
-
- private:
- EGLClientBuffer mClientBuffer;
-
- RendererGL *mRenderer;
-
- DisplayWGL *mDisplay;
- StateManagerGL *mStateManager;
- const WorkaroundsGL &mWorkarounds;
- const FunctionsGL *mFunctionsGL;
- const FunctionsWGL *mFunctionsWGL;
-
- HGLRC mWGLContext;
- HDC mDeviceContext;
-
- size_t mWidth;
- size_t mHeight;
-
- HANDLE mDeviceHandle;
- IUnknown *mObject;
- HANDLE mBoundObjectTextureHandle;
- HANDLE mBoundObjectRenderbufferHandle;
-
- GLuint mRenderbufferID;
- GLuint mFramebufferID;
-};
-} // namespace rx
-
-#endif // LIBANGLE_RENDERER_GL_WGL_D3DTEXTIRESURFACEWGL_H_
diff --git a/gfx/angle/src/libANGLE/renderer/gl/wgl/DXGISwapChainWindowSurfaceWGL.cpp b/gfx/angle/src/libANGLE/renderer/gl/wgl/DXGISwapChainWindowSurfaceWGL.cpp
index 7c5214e82..e07457d10 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/wgl/DXGISwapChainWindowSurfaceWGL.cpp
+++ b/gfx/angle/src/libANGLE/renderer/gl/wgl/DXGISwapChainWindowSurfaceWGL.cpp
@@ -36,7 +36,6 @@ DXGISwapChainWindowSurfaceWGL::DXGISwapChainWindowSurfaceWGL(const egl::SurfaceS
mWindow(window),
mStateManager(renderer->getStateManager()),
mWorkarounds(renderer->getWorkarounds()),
- mRenderer(renderer),
mFunctionsGL(functionsGL),
mFunctionsWGL(functionsWGL),
mDevice(device),
@@ -293,8 +292,7 @@ EGLint DXGISwapChainWindowSurfaceWGL::getSwapBehavior() const
FramebufferImpl *DXGISwapChainWindowSurfaceWGL::createDefaultFramebuffer(
const gl::FramebufferState &data)
{
- return new FramebufferGL(mFramebufferID, data, mFunctionsGL, mWorkarounds,
- mRenderer->getBlitter(), mStateManager);
+ return new FramebufferGL(mFramebufferID, data, mFunctionsGL, mWorkarounds, mStateManager);
}
egl::Error DXGISwapChainWindowSurfaceWGL::setObjectsLocked(bool locked)
diff --git a/gfx/angle/src/libANGLE/renderer/gl/wgl/DXGISwapChainWindowSurfaceWGL.h b/gfx/angle/src/libANGLE/renderer/gl/wgl/DXGISwapChainWindowSurfaceWGL.h
index f516239c9..66444da9b 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/wgl/DXGISwapChainWindowSurfaceWGL.h
+++ b/gfx/angle/src/libANGLE/renderer/gl/wgl/DXGISwapChainWindowSurfaceWGL.h
@@ -66,7 +66,6 @@ class DXGISwapChainWindowSurfaceWGL : public SurfaceGL
StateManagerGL *mStateManager;
const WorkaroundsGL &mWorkarounds;
- RendererGL *mRenderer;
const FunctionsGL *mFunctionsGL;
const FunctionsWGL *mFunctionsWGL;
diff --git a/gfx/angle/src/libANGLE/renderer/gl/wgl/DisplayWGL.cpp b/gfx/angle/src/libANGLE/renderer/gl/wgl/DisplayWGL.cpp
index 188321115..4647fe589 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/wgl/DisplayWGL.cpp
+++ b/gfx/angle/src/libANGLE/renderer/gl/wgl/DisplayWGL.cpp
@@ -14,15 +14,12 @@
#include "libANGLE/Surface.h"
#include "libANGLE/renderer/gl/RendererGL.h"
#include "libANGLE/renderer/gl/renderergl_utils.h"
-#include "libANGLE/renderer/gl/wgl/D3DTextureSurfaceWGL.h"
#include "libANGLE/renderer/gl/wgl/DXGISwapChainWindowSurfaceWGL.h"
#include "libANGLE/renderer/gl/wgl/FunctionsWGL.h"
#include "libANGLE/renderer/gl/wgl/PbufferSurfaceWGL.h"
#include "libANGLE/renderer/gl/wgl/WindowSurfaceWGL.h"
#include "libANGLE/renderer/gl/wgl/wgl_utils.h"
-#include "platform/Platform.h"
-
#include <EGL/eglext.h>
#include <string>
#include <sstream>
@@ -63,7 +60,7 @@ DisplayWGL::DisplayWGL()
mOpenGLModule(nullptr),
mFunctionsWGL(nullptr),
mFunctionsGL(nullptr),
- mHasRobustness(false),
+ mHasARBCreateContextRobustness(false),
mWindowClass(0),
mWindow(nullptr),
mDeviceContext(nullptr),
@@ -178,7 +175,7 @@ egl::Error DisplayWGL::initialize(egl::Display *display)
// Reinitialize the wgl functions to grab the extensions
mFunctionsWGL->initialize(mOpenGLModule, dummyDeviceContext);
- bool hasWGLCreateContextRobustness =
+ mHasARBCreateContextRobustness =
mFunctionsWGL->hasExtension("WGL_ARB_create_context_robustness");
// Destroy the dummy window and context
@@ -267,7 +264,7 @@ egl::Error DisplayWGL::initialize(egl::Display *display)
std::vector<int> contextCreationAttributes;
- if (hasWGLCreateContextRobustness)
+ if (mHasARBCreateContextRobustness)
{
contextCreationAttributes.push_back(WGL_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB);
contextCreationAttributes.push_back(WGL_LOSE_CONTEXT_ON_RESET_ARB);
@@ -343,17 +340,9 @@ egl::Error DisplayWGL::initialize(egl::Display *display)
mFunctionsGL = new FunctionsGLWindows(mOpenGLModule, mFunctionsWGL->getProcAddress);
mFunctionsGL->initialize();
- mHasRobustness = mFunctionsGL->getGraphicsResetStatus != nullptr;
- if (hasWGLCreateContextRobustness != mHasRobustness)
- {
- ANGLEPlatformCurrent()->logWarning(
- "WGL_ARB_create_context_robustness exists but unable to OpenGL context with "
- "robustness.");
- }
-
// Intel OpenGL ES drivers are not currently supported due to bugs in the driver and ANGLE
VendorID vendor = GetVendorID(mFunctionsGL);
- if (requestedDisplayType == EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE && IsIntel(vendor))
+ if (requestedDisplayType == EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE && vendor == VENDOR_ID_INTEL)
{
return egl::Error(EGL_NOT_INITIALIZED, "Intel OpenGL ES drivers are not supported.");
}
@@ -369,7 +358,7 @@ egl::Error DisplayWGL::initialize(egl::Display *display)
GetWindowThreadProcessId(nativeWindow, &windowProcessId);
// AMD drivers advertise the WGL_NV_DX_interop and WGL_NV_DX_interop2 extensions but fail
- mUseDXGISwapChains = !IsAMD(vendor) && (currentProcessId != windowProcessId);
+ mUseDXGISwapChains = vendor != VENDOR_ID_AMD && (currentProcessId != windowProcessId);
}
else
{
@@ -465,13 +454,11 @@ SurfaceImpl *DisplayWGL::createPbufferSurface(const egl::SurfaceState &state,
SurfaceImpl *DisplayWGL::createPbufferFromClientBuffer(const egl::SurfaceState &state,
const egl::Config *configuration,
- EGLenum buftype,
- EGLClientBuffer clientBuffer,
+ EGLClientBuffer shareHandle,
const egl::AttributeMap &attribs)
{
- ASSERT(buftype == EGL_D3D_TEXTURE_ANGLE);
- return new D3DTextureSurfaceWGL(state, getRenderer(), clientBuffer, this, mWGLContext,
- mDeviceContext, mFunctionsGL, mFunctionsWGL);
+ UNIMPLEMENTED();
+ return nullptr;
}
SurfaceImpl *DisplayWGL::createPixmapSurface(const egl::SurfaceState &state,
@@ -566,7 +553,7 @@ egl::ConfigSet DisplayWGL::generateConfigs()
bool DisplayWGL::testDeviceLost()
{
- if (mHasRobustness)
+ if (mHasARBCreateContextRobustness)
{
return getRenderer()->getResetStatus() != GL_NO_ERROR;
}
@@ -584,21 +571,6 @@ bool DisplayWGL::isValidNativeWindow(EGLNativeWindowType window) const
return (IsWindow(window) == TRUE);
}
-egl::Error DisplayWGL::validateClientBuffer(const egl::Config *configuration,
- EGLenum buftype,
- EGLClientBuffer clientBuffer,
- const egl::AttributeMap &attribs) const
-{
- switch (buftype)
- {
- case EGL_D3D_TEXTURE_ANGLE:
- return D3DTextureSurfaceWGL::ValidateD3DTextureClientBuffer(clientBuffer);
-
- default:
- return DisplayGL::validateClientBuffer(configuration, buftype, clientBuffer, attribs);
- }
-}
-
std::string DisplayWGL::getVendorString() const
{
//UNIMPLEMENTED();
@@ -661,9 +633,7 @@ void DisplayWGL::generateExtensions(egl::DisplayExtensions *outExtensions) const
outExtensions->postSubBuffer = mUseDXGISwapChains;
outExtensions->surfaceOrientation = mUseDXGISwapChains;
- outExtensions->createContextRobustness = mHasRobustness;
-
- outExtensions->d3dTextureClientBuffer = mFunctionsWGL->hasExtension("WGL_NV_DX_interop2");
+ outExtensions->createContextRobustness = mHasARBCreateContextRobustness;
}
void DisplayWGL::generateCaps(egl::Caps *outCaps) const
diff --git a/gfx/angle/src/libANGLE/renderer/gl/wgl/DisplayWGL.h b/gfx/angle/src/libANGLE/renderer/gl/wgl/DisplayWGL.h
index 509ea9b39..3f56ecf4f 100755
--- a/gfx/angle/src/libANGLE/renderer/gl/wgl/DisplayWGL.h
+++ b/gfx/angle/src/libANGLE/renderer/gl/wgl/DisplayWGL.h
@@ -37,8 +37,7 @@ class DisplayWGL : public DisplayGL
const egl::AttributeMap &attribs) override;
SurfaceImpl *createPbufferFromClientBuffer(const egl::SurfaceState &state,
const egl::Config *configuration,
- EGLenum buftype,
- EGLClientBuffer clientBuffer,
+ EGLClientBuffer shareHandle,
const egl::AttributeMap &attribs) override;
SurfaceImpl *createPixmapSurface(const egl::SurfaceState &state,
const egl::Config *configuration,
@@ -51,10 +50,6 @@ class DisplayWGL : public DisplayGL
egl::Error restoreLostDevice() override;
bool isValidNativeWindow(EGLNativeWindowType window) const override;
- egl::Error validateClientBuffer(const egl::Config *configuration,
- EGLenum buftype,
- EGLClientBuffer clientBuffer,
- const egl::AttributeMap &attribs) const override;
egl::Error getDevice(DeviceImpl **device) override;
@@ -83,7 +78,7 @@ class DisplayWGL : public DisplayGL
FunctionsWGL *mFunctionsWGL;
FunctionsGL *mFunctionsGL;
- bool mHasRobustness;
+ bool mHasARBCreateContextRobustness;
ATOM mWindowClass;
HWND mWindow;
diff --git a/gfx/angle/src/libANGLE/renderer/null/BufferNULL.cpp b/gfx/angle/src/libANGLE/renderer/null/BufferNULL.cpp
deleted file mode 100644
index 95463c3f4..000000000
--- a/gfx/angle/src/libANGLE/renderer/null/BufferNULL.cpp
+++ /dev/null
@@ -1,74 +0,0 @@
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// BufferNULL.cpp:
-// Implements the class methods for BufferNULL.
-//
-
-#include "libANGLE/renderer/null/BufferNULL.h"
-
-#include "common/debug.h"
-
-namespace rx
-{
-
-BufferNULL::BufferNULL(const gl::BufferState &state) : BufferImpl(state)
-{
-}
-
-BufferNULL::~BufferNULL()
-{
-}
-
-gl::Error BufferNULL::setData(GLenum target, const void *data, size_t size, GLenum usage)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-gl::Error BufferNULL::setSubData(GLenum target, const void *data, size_t size, size_t offset)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-gl::Error BufferNULL::copySubData(BufferImpl *source,
- GLintptr sourceOffset,
- GLintptr destOffset,
- GLsizeiptr size)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-gl::Error BufferNULL::map(GLenum access, GLvoid **mapPtr)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-gl::Error BufferNULL::mapRange(size_t offset, size_t length, GLbitfield access, GLvoid **mapPtr)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-gl::Error BufferNULL::unmap(GLboolean *result)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-gl::Error BufferNULL::getIndexRange(GLenum type,
- size_t offset,
- size_t count,
- bool primitiveRestartEnabled,
- gl::IndexRange *outRange)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-} // namespace rx
diff --git a/gfx/angle/src/libANGLE/renderer/null/BufferNULL.h b/gfx/angle/src/libANGLE/renderer/null/BufferNULL.h
deleted file mode 100644
index 1578dacbb..000000000
--- a/gfx/angle/src/libANGLE/renderer/null/BufferNULL.h
+++ /dev/null
@@ -1,43 +0,0 @@
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// BufferNULL.h:
-// Defines the class interface for BufferNULL, implementing BufferImpl.
-//
-
-#ifndef LIBANGLE_RENDERER_NULL_BUFFERNULL_H_
-#define LIBANGLE_RENDERER_NULL_BUFFERNULL_H_
-
-#include "libANGLE/renderer/BufferImpl.h"
-
-namespace rx
-{
-
-class BufferNULL : public BufferImpl
-{
- public:
- BufferNULL(const gl::BufferState &state);
- ~BufferNULL() override;
-
- gl::Error setData(GLenum target, const void *data, size_t size, GLenum usage) override;
- gl::Error setSubData(GLenum target, const void *data, size_t size, size_t offset) override;
- gl::Error copySubData(BufferImpl *source,
- GLintptr sourceOffset,
- GLintptr destOffset,
- GLsizeiptr size) override;
- gl::Error map(GLenum access, GLvoid **mapPtr) override;
- gl::Error mapRange(size_t offset, size_t length, GLbitfield access, GLvoid **mapPtr) override;
- gl::Error unmap(GLboolean *result) override;
-
- gl::Error getIndexRange(GLenum type,
- size_t offset,
- size_t count,
- bool primitiveRestartEnabled,
- gl::IndexRange *outRange) override;
-};
-
-} // namespace rx
-
-#endif // LIBANGLE_RENDERER_NULL_BUFFERNULL_H_
diff --git a/gfx/angle/src/libANGLE/renderer/null/CompilerNULL.cpp b/gfx/angle/src/libANGLE/renderer/null/CompilerNULL.cpp
deleted file mode 100644
index 547f4c4e1..000000000
--- a/gfx/angle/src/libANGLE/renderer/null/CompilerNULL.cpp
+++ /dev/null
@@ -1,37 +0,0 @@
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// CompilerNULL.cpp:
-// Implements the class methods for CompilerNULL.
-//
-
-#include "libANGLE/renderer/null/CompilerNULL.h"
-
-#include "common/debug.h"
-
-namespace rx
-{
-
-CompilerNULL::CompilerNULL() : CompilerImpl()
-{
-}
-
-CompilerNULL::~CompilerNULL()
-{
-}
-
-gl::Error CompilerNULL::release()
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-ShShaderOutput CompilerNULL::getTranslatorOutputType() const
-{
- UNIMPLEMENTED();
- return ShShaderOutput();
-}
-
-} // namespace rx
diff --git a/gfx/angle/src/libANGLE/renderer/null/CompilerNULL.h b/gfx/angle/src/libANGLE/renderer/null/CompilerNULL.h
deleted file mode 100644
index 5cd85e8bf..000000000
--- a/gfx/angle/src/libANGLE/renderer/null/CompilerNULL.h
+++ /dev/null
@@ -1,32 +0,0 @@
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// CompilerNULL.h:
-// Defines the class interface for CompilerNULL, implementing CompilerImpl.
-//
-
-#ifndef LIBANGLE_RENDERER_NULL_COMPILERNULL_H_
-#define LIBANGLE_RENDERER_NULL_COMPILERNULL_H_
-
-#include "libANGLE/renderer/CompilerImpl.h"
-
-namespace rx
-{
-
-class CompilerNULL : public CompilerImpl
-{
- public:
- CompilerNULL();
- ~CompilerNULL() override;
-
- gl::Error release() override;
-
- // TODO(jmadill): Expose translator built-in resources init method.
- ShShaderOutput getTranslatorOutputType() const override;
-};
-
-} // namespace rx
-
-#endif // LIBANGLE_RENDERER_NULL_COMPILERNULL_H_
diff --git a/gfx/angle/src/libANGLE/renderer/null/ContextNULL.cpp b/gfx/angle/src/libANGLE/renderer/null/ContextNULL.cpp
deleted file mode 100644
index 95d4c046a..000000000
--- a/gfx/angle/src/libANGLE/renderer/null/ContextNULL.cpp
+++ /dev/null
@@ -1,175 +0,0 @@
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// ContextNULL.cpp:
-// Implements the class methods for ContextNULL.
-//
-
-#include "libANGLE/renderer/null/ContextNULL.h"
-
-#include "common/debug.h"
-
-namespace rx
-{
-
-ContextNULL::ContextNULL(const gl::ContextState &state) : ContextImpl(state)
-{
-}
-
-ContextNULL::~ContextNULL()
-{
-}
-
-gl::Error ContextNULL::initialize()
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-gl::Error ContextNULL::flush()
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-gl::Error ContextNULL::finish()
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-gl::Error ContextNULL::drawArrays(GLenum mode, GLint first, GLsizei count)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-gl::Error ContextNULL::drawArraysInstanced(GLenum mode,
- GLint first,
- GLsizei count,
- GLsizei instanceCount)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-gl::Error ContextNULL::drawElements(GLenum mode,
- GLsizei count,
- GLenum type,
- const GLvoid *indices,
- const gl::IndexRange &indexRange)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-gl::Error ContextNULL::drawElementsInstanced(GLenum mode,
- GLsizei count,
- GLenum type,
- const GLvoid *indices,
- GLsizei instances,
- const gl::IndexRange &indexRange)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-gl::Error ContextNULL::drawRangeElements(GLenum mode,
- GLuint start,
- GLuint end,
- GLsizei count,
- GLenum type,
- const GLvoid *indices,
- const gl::IndexRange &indexRange)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-CompilerImpl *ContextNULL::createCompiler()
-{
- UNIMPLEMENTED();
- return static_cast<CompilerImpl *>(0);
-}
-
-ShaderImpl *ContextNULL::createShader(const gl::ShaderState &data)
-{
- UNIMPLEMENTED();
- return static_cast<ShaderImpl *>(0);
-}
-
-ProgramImpl *ContextNULL::createProgram(const gl::ProgramState &data)
-{
- UNIMPLEMENTED();
- return static_cast<ProgramImpl *>(0);
-}
-
-FramebufferImpl *ContextNULL::createFramebuffer(const gl::FramebufferState &data)
-{
- UNIMPLEMENTED();
- return static_cast<FramebufferImpl *>(0);
-}
-
-TextureImpl *ContextNULL::createTexture(const gl::TextureState &state)
-{
- UNIMPLEMENTED();
- return static_cast<TextureImpl *>(0);
-}
-
-RenderbufferImpl *ContextNULL::createRenderbuffer()
-{
- UNIMPLEMENTED();
- return static_cast<RenderbufferImpl *>(0);
-}
-
-BufferImpl *ContextNULL::createBuffer(const gl::BufferState &state)
-{
- UNIMPLEMENTED();
- return static_cast<BufferImpl *>(0);
-}
-
-VertexArrayImpl *ContextNULL::createVertexArray(const gl::VertexArrayState &data)
-{
- UNIMPLEMENTED();
- return static_cast<VertexArrayImpl *>(0);
-}
-
-QueryImpl *ContextNULL::createQuery(GLenum type)
-{
- UNIMPLEMENTED();
- return static_cast<QueryImpl *>(0);
-}
-
-FenceNVImpl *ContextNULL::createFenceNV()
-{
- UNIMPLEMENTED();
- return static_cast<FenceNVImpl *>(0);
-}
-
-FenceSyncImpl *ContextNULL::createFenceSync()
-{
- UNIMPLEMENTED();
- return static_cast<FenceSyncImpl *>(0);
-}
-
-TransformFeedbackImpl *ContextNULL::createTransformFeedback(const gl::TransformFeedbackState &state)
-{
- UNIMPLEMENTED();
- return static_cast<TransformFeedbackImpl *>(0);
-}
-
-SamplerImpl *ContextNULL::createSampler()
-{
- UNIMPLEMENTED();
- return static_cast<SamplerImpl *>(0);
-}
-
-std::vector<PathImpl *> ContextNULL::createPaths(GLsizei range)
-{
- UNIMPLEMENTED();
- return std::vector<PathImpl *>();
-}
-
-} // namespace rx
diff --git a/gfx/angle/src/libANGLE/renderer/null/ContextNULL.h b/gfx/angle/src/libANGLE/renderer/null/ContextNULL.h
deleted file mode 100644
index 9a7987b67..000000000
--- a/gfx/angle/src/libANGLE/renderer/null/ContextNULL.h
+++ /dev/null
@@ -1,95 +0,0 @@
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// ContextNULL.h:
-// Defines the class interface for ContextNULL, implementing ContextImpl.
-//
-
-#ifndef LIBANGLE_RENDERER_NULL_CONTEXTNULL_H_
-#define LIBANGLE_RENDERER_NULL_CONTEXTNULL_H_
-
-#include "libANGLE/renderer/ContextImpl.h"
-
-namespace rx
-{
-
-class ContextNULL : public ContextImpl
-{
- public:
- ContextNULL(const gl::ContextState &state);
- ~ContextNULL() override;
-
- gl::Error initialize() override;
-
- // Flush and finish.
- gl::Error flush() override;
- gl::Error finish() override;
-
- // Drawing methods.
- gl::Error drawArrays(GLenum mode, GLint first, GLsizei count) override;
- gl::Error drawArraysInstanced(GLenum mode,
- GLint first,
- GLsizei count,
- GLsizei instanceCount) override;
-
- gl::Error drawElements(GLenum mode,
- GLsizei count,
- GLenum type,
- const GLvoid *indices,
- const gl::IndexRange &indexRange) override;
- gl::Error drawElementsInstanced(GLenum mode,
- GLsizei count,
- GLenum type,
- const GLvoid *indices,
- GLsizei instances,
- const gl::IndexRange &indexRange) override;
- gl::Error drawRangeElements(GLenum mode,
- GLuint start,
- GLuint end,
- GLsizei count,
- GLenum type,
- const GLvoid *indices,
- const gl::IndexRange &indexRange) override;
-
- // CHROMIUM_path_rendering path drawing methods.
-
- // Shader creation
- CompilerImpl *createCompiler() override;
- ShaderImpl *createShader(const gl::ShaderState &data) override;
- ProgramImpl *createProgram(const gl::ProgramState &data) override;
-
- // Framebuffer creation
- FramebufferImpl *createFramebuffer(const gl::FramebufferState &data) override;
-
- // Texture creation
- TextureImpl *createTexture(const gl::TextureState &state) override;
-
- // Renderbuffer creation
- RenderbufferImpl *createRenderbuffer() override;
-
- // Buffer creation
- BufferImpl *createBuffer(const gl::BufferState &state) override;
-
- // Vertex Array creation
- VertexArrayImpl *createVertexArray(const gl::VertexArrayState &data) override;
-
- // Query and Fence creation
- QueryImpl *createQuery(GLenum type) override;
- FenceNVImpl *createFenceNV() override;
- FenceSyncImpl *createFenceSync() override;
-
- // Transform Feedback creation
- TransformFeedbackImpl *createTransformFeedback(
- const gl::TransformFeedbackState &state) override;
-
- // Sampler object creation
- SamplerImpl *createSampler() override;
-
- std::vector<PathImpl *> createPaths(GLsizei range) override;
-};
-
-} // namespace rx
-
-#endif // LIBANGLE_RENDERER_NULL_CONTEXTNULL_H_
diff --git a/gfx/angle/src/libANGLE/renderer/null/DeviceNULL.cpp b/gfx/angle/src/libANGLE/renderer/null/DeviceNULL.cpp
deleted file mode 100644
index 4893f9466..000000000
--- a/gfx/angle/src/libANGLE/renderer/null/DeviceNULL.cpp
+++ /dev/null
@@ -1,48 +0,0 @@
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// DeviceNULL.cpp:
-// Implements the class methods for DeviceNULL.
-//
-
-#include "libANGLE/renderer/null/DeviceNULL.h"
-
-#include "common/debug.h"
-
-namespace rx
-{
-
-DeviceNULL::DeviceNULL() : DeviceImpl()
-{
-}
-
-DeviceNULL::~DeviceNULL()
-{
-}
-
-egl::Error DeviceNULL::getDevice(void **outValue)
-{
- UNIMPLEMENTED();
- return egl::Error(EGL_BAD_ACCESS);
-}
-
-EGLint DeviceNULL::getType()
-{
- UNIMPLEMENTED();
- return EGLint();
-}
-
-void DeviceNULL::generateExtensions(egl::DeviceExtensions *outExtensions) const
-{
- UNIMPLEMENTED();
-}
-
-bool DeviceNULL::deviceExternallySourced()
-{
- UNIMPLEMENTED();
- return bool();
-}
-
-} // namespace rx
diff --git a/gfx/angle/src/libANGLE/renderer/null/DeviceNULL.h b/gfx/angle/src/libANGLE/renderer/null/DeviceNULL.h
deleted file mode 100644
index ed921039e..000000000
--- a/gfx/angle/src/libANGLE/renderer/null/DeviceNULL.h
+++ /dev/null
@@ -1,32 +0,0 @@
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// DeviceNULL.h:
-// Defines the class interface for DeviceNULL, implementing DeviceImpl.
-//
-
-#ifndef LIBANGLE_RENDERER_NULL_DEVICENULL_H_
-#define LIBANGLE_RENDERER_NULL_DEVICENULL_H_
-
-#include "libANGLE/renderer/DeviceImpl.h"
-
-namespace rx
-{
-
-class DeviceNULL : public DeviceImpl
-{
- public:
- DeviceNULL();
- ~DeviceNULL() override;
-
- egl::Error getDevice(void **outValue) override;
- EGLint getType() override;
- void generateExtensions(egl::DeviceExtensions *outExtensions) const override;
- bool deviceExternallySourced() override;
-};
-
-} // namespace rx
-
-#endif // LIBANGLE_RENDERER_NULL_DEVICENULL_H_
diff --git a/gfx/angle/src/libANGLE/renderer/null/DisplayNULL.cpp b/gfx/angle/src/libANGLE/renderer/null/DisplayNULL.cpp
deleted file mode 100644
index fc04e0465..000000000
--- a/gfx/angle/src/libANGLE/renderer/null/DisplayNULL.cpp
+++ /dev/null
@@ -1,168 +0,0 @@
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// DisplayNULL.cpp:
-// Implements the class methods for DisplayNULL.
-//
-
-#include "libANGLE/renderer/null/DisplayNULL.h"
-
-#include "common/debug.h"
-
-namespace rx
-{
-
-DisplayNULL::DisplayNULL() : DisplayImpl()
-{
-}
-
-DisplayNULL::~DisplayNULL()
-{
-}
-
-egl::Error DisplayNULL::initialize(egl::Display *display)
-{
- UNIMPLEMENTED();
- return egl::Error(EGL_BAD_ACCESS);
-}
-
-void DisplayNULL::terminate()
-{
- UNIMPLEMENTED();
-}
-
-egl::Error DisplayNULL::makeCurrent(egl::Surface *drawSurface,
- egl::Surface *readSurface,
- gl::Context *context)
-{
- UNIMPLEMENTED();
- return egl::Error(EGL_BAD_ACCESS);
-}
-
-egl::ConfigSet DisplayNULL::generateConfigs()
-{
- UNIMPLEMENTED();
- return egl::ConfigSet();
-}
-
-bool DisplayNULL::testDeviceLost()
-{
- UNIMPLEMENTED();
- return bool();
-}
-
-egl::Error DisplayNULL::restoreLostDevice()
-{
- UNIMPLEMENTED();
- return egl::Error(EGL_BAD_ACCESS);
-}
-
-bool DisplayNULL::isValidNativeWindow(EGLNativeWindowType window) const
-{
- UNIMPLEMENTED();
- return bool();
-}
-
-std::string DisplayNULL::getVendorString() const
-{
- UNIMPLEMENTED();
- return std::string();
-}
-
-egl::Error DisplayNULL::getDevice(DeviceImpl **device)
-{
- UNIMPLEMENTED();
- return egl::Error(EGL_BAD_ACCESS);
-}
-
-egl::Error DisplayNULL::waitClient() const
-{
- UNIMPLEMENTED();
- return egl::Error(EGL_BAD_ACCESS);
-}
-
-egl::Error DisplayNULL::waitNative(EGLint engine,
- egl::Surface *drawSurface,
- egl::Surface *readSurface) const
-{
- UNIMPLEMENTED();
- return egl::Error(EGL_BAD_ACCESS);
-}
-
-gl::Version DisplayNULL::getMaxSupportedESVersion() const
-{
- UNIMPLEMENTED();
- return gl::Version();
-}
-
-SurfaceImpl *DisplayNULL::createWindowSurface(const egl::SurfaceState &state,
- const egl::Config *configuration,
- EGLNativeWindowType window,
- const egl::AttributeMap &attribs)
-{
- UNIMPLEMENTED();
- return static_cast<SurfaceImpl *>(0);
-}
-
-SurfaceImpl *DisplayNULL::createPbufferSurface(const egl::SurfaceState &state,
- const egl::Config *configuration,
- const egl::AttributeMap &attribs)
-{
- UNIMPLEMENTED();
- return static_cast<SurfaceImpl *>(0);
-}
-
-SurfaceImpl *DisplayNULL::createPbufferFromClientBuffer(const egl::SurfaceState &state,
- const egl::Config *configuration,
- EGLenum buftype,
- EGLClientBuffer buffer,
- const egl::AttributeMap &attribs)
-{
- UNIMPLEMENTED();
- return static_cast<SurfaceImpl *>(0);
-}
-
-SurfaceImpl *DisplayNULL::createPixmapSurface(const egl::SurfaceState &state,
- const egl::Config *configuration,
- NativePixmapType nativePixmap,
- const egl::AttributeMap &attribs)
-{
- UNIMPLEMENTED();
- return static_cast<SurfaceImpl *>(0);
-}
-
-ImageImpl *DisplayNULL::createImage(EGLenum target,
- egl::ImageSibling *buffer,
- const egl::AttributeMap &attribs)
-{
- UNIMPLEMENTED();
- return static_cast<ImageImpl *>(0);
-}
-
-ContextImpl *DisplayNULL::createContext(const gl::ContextState &state)
-{
- UNIMPLEMENTED();
- return static_cast<ContextImpl *>(0);
-}
-
-StreamProducerImpl *DisplayNULL::createStreamProducerD3DTextureNV12(
- egl::Stream::ConsumerType consumerType,
- const egl::AttributeMap &attribs)
-{
- UNIMPLEMENTED();
- return static_cast<StreamProducerImpl *>(0);
-}
-
-void DisplayNULL::generateExtensions(egl::DisplayExtensions *outExtensions) const
-{
- UNIMPLEMENTED();
-}
-
-void DisplayNULL::generateCaps(egl::Caps *outCaps) const
-{
- UNIMPLEMENTED();
-}
-
-} // namespace rx
diff --git a/gfx/angle/src/libANGLE/renderer/null/DisplayNULL.h b/gfx/angle/src/libANGLE/renderer/null/DisplayNULL.h
deleted file mode 100644
index 5a453810a..000000000
--- a/gfx/angle/src/libANGLE/renderer/null/DisplayNULL.h
+++ /dev/null
@@ -1,82 +0,0 @@
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// DisplayNULL.h:
-// Defines the class interface for DisplayNULL, implementing DisplayImpl.
-//
-
-#ifndef LIBANGLE_RENDERER_NULL_DISPLAYNULL_H_
-#define LIBANGLE_RENDERER_NULL_DISPLAYNULL_H_
-
-#include "libANGLE/renderer/DisplayImpl.h"
-
-namespace rx
-{
-
-class DisplayNULL : public DisplayImpl
-{
- public:
- DisplayNULL();
- ~DisplayNULL() override;
-
- egl::Error initialize(egl::Display *display) override;
- void terminate() override;
-
- egl::Error makeCurrent(egl::Surface *drawSurface,
- egl::Surface *readSurface,
- gl::Context *context) override;
-
- egl::ConfigSet generateConfigs() override;
-
- bool testDeviceLost() override;
- egl::Error restoreLostDevice() override;
-
- bool isValidNativeWindow(EGLNativeWindowType window) const override;
-
- std::string getVendorString() const override;
-
- egl::Error getDevice(DeviceImpl **device) override;
-
- egl::Error waitClient() const override;
- egl::Error waitNative(EGLint engine,
- egl::Surface *drawSurface,
- egl::Surface *readSurface) const override;
- gl::Version getMaxSupportedESVersion() const override;
-
- SurfaceImpl *createWindowSurface(const egl::SurfaceState &state,
- const egl::Config *configuration,
- EGLNativeWindowType window,
- const egl::AttributeMap &attribs) override;
- SurfaceImpl *createPbufferSurface(const egl::SurfaceState &state,
- const egl::Config *configuration,
- const egl::AttributeMap &attribs) override;
- SurfaceImpl *createPbufferFromClientBuffer(const egl::SurfaceState &state,
- const egl::Config *configuration,
- EGLenum buftype,
- EGLClientBuffer buffer,
- const egl::AttributeMap &attribs) override;
- SurfaceImpl *createPixmapSurface(const egl::SurfaceState &state,
- const egl::Config *configuration,
- NativePixmapType nativePixmap,
- const egl::AttributeMap &attribs) override;
-
- ImageImpl *createImage(EGLenum target,
- egl::ImageSibling *buffer,
- const egl::AttributeMap &attribs) override;
-
- ContextImpl *createContext(const gl::ContextState &state) override;
-
- StreamProducerImpl *createStreamProducerD3DTextureNV12(
- egl::Stream::ConsumerType consumerType,
- const egl::AttributeMap &attribs) override;
-
- private:
- void generateExtensions(egl::DisplayExtensions *outExtensions) const override;
- void generateCaps(egl::Caps *outCaps) const override;
-};
-
-} // namespace rx
-
-#endif // LIBANGLE_RENDERER_NULL_DISPLAYNULL_H_
diff --git a/gfx/angle/src/libANGLE/renderer/null/FenceNVNULL.cpp b/gfx/angle/src/libANGLE/renderer/null/FenceNVNULL.cpp
deleted file mode 100644
index 9d7f26043..000000000
--- a/gfx/angle/src/libANGLE/renderer/null/FenceNVNULL.cpp
+++ /dev/null
@@ -1,43 +0,0 @@
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// FenceNVNULL.cpp:
-// Implements the class methods for FenceNVNULL.
-//
-
-#include "libANGLE/renderer/null/FenceNVNULL.h"
-
-#include "common/debug.h"
-
-namespace rx
-{
-
-FenceNVNULL::FenceNVNULL() : FenceNVImpl()
-{
-}
-
-FenceNVNULL::~FenceNVNULL()
-{
-}
-
-gl::Error FenceNVNULL::set(GLenum condition)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-gl::Error FenceNVNULL::test(GLboolean *outFinished)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-gl::Error FenceNVNULL::finish()
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-} // namespace rx
diff --git a/gfx/angle/src/libANGLE/renderer/null/FenceNVNULL.h b/gfx/angle/src/libANGLE/renderer/null/FenceNVNULL.h
deleted file mode 100644
index 10cf5c2cb..000000000
--- a/gfx/angle/src/libANGLE/renderer/null/FenceNVNULL.h
+++ /dev/null
@@ -1,31 +0,0 @@
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// FenceNVNULL.h:
-// Defines the class interface for FenceNVNULL, implementing FenceNVImpl.
-//
-
-#ifndef LIBANGLE_RENDERER_NULL_FENCENVNULL_H_
-#define LIBANGLE_RENDERER_NULL_FENCENVNULL_H_
-
-#include "libANGLE/renderer/FenceNVImpl.h"
-
-namespace rx
-{
-
-class FenceNVNULL : public FenceNVImpl
-{
- public:
- FenceNVNULL();
- ~FenceNVNULL() override;
-
- gl::Error set(GLenum condition) override;
- gl::Error test(GLboolean *outFinished) override;
- gl::Error finish() override;
-};
-
-} // namespace rx
-
-#endif // LIBANGLE_RENDERER_NULL_FENCENVNULL_H_
diff --git a/gfx/angle/src/libANGLE/renderer/null/FenceSyncNULL.cpp b/gfx/angle/src/libANGLE/renderer/null/FenceSyncNULL.cpp
deleted file mode 100644
index 37bfdfedb..000000000
--- a/gfx/angle/src/libANGLE/renderer/null/FenceSyncNULL.cpp
+++ /dev/null
@@ -1,49 +0,0 @@
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// FenceSyncNULL.cpp:
-// Implements the class methods for FenceSyncNULL.
-//
-
-#include "libANGLE/renderer/null/FenceSyncNULL.h"
-
-#include "common/debug.h"
-
-namespace rx
-{
-
-FenceSyncNULL::FenceSyncNULL() : FenceSyncImpl()
-{
-}
-
-FenceSyncNULL::~FenceSyncNULL()
-{
-}
-
-gl::Error FenceSyncNULL::set(GLenum condition, GLbitfield flags)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-gl::Error FenceSyncNULL::clientWait(GLbitfield flags, GLuint64 timeout, GLenum *outResult)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-gl::Error FenceSyncNULL::serverWait(GLbitfield flags, GLuint64 timeout)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-gl::Error FenceSyncNULL::getStatus(GLint *outResult)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-} // namespace rx
diff --git a/gfx/angle/src/libANGLE/renderer/null/FenceSyncNULL.h b/gfx/angle/src/libANGLE/renderer/null/FenceSyncNULL.h
deleted file mode 100644
index 28a12f703..000000000
--- a/gfx/angle/src/libANGLE/renderer/null/FenceSyncNULL.h
+++ /dev/null
@@ -1,32 +0,0 @@
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// FenceSyncNULL.h:
-// Defines the class interface for FenceSyncNULL, implementing FenceSyncImpl.
-//
-
-#ifndef LIBANGLE_RENDERER_NULL_FENCESYNCNULL_H_
-#define LIBANGLE_RENDERER_NULL_FENCESYNCNULL_H_
-
-#include "libANGLE/renderer/FenceSyncImpl.h"
-
-namespace rx
-{
-
-class FenceSyncNULL : public FenceSyncImpl
-{
- public:
- FenceSyncNULL();
- ~FenceSyncNULL() override;
-
- gl::Error set(GLenum condition, GLbitfield flags) override;
- gl::Error clientWait(GLbitfield flags, GLuint64 timeout, GLenum *outResult) override;
- gl::Error serverWait(GLbitfield flags, GLuint64 timeout) override;
- gl::Error getStatus(GLint *outResult) override;
-};
-
-} // namespace rx
-
-#endif // LIBANGLE_RENDERER_NULL_FENCESYNCNULL_H_
diff --git a/gfx/angle/src/libANGLE/renderer/null/FramebufferNULL.cpp b/gfx/angle/src/libANGLE/renderer/null/FramebufferNULL.cpp
deleted file mode 100644
index 14ebe1eba..000000000
--- a/gfx/angle/src/libANGLE/renderer/null/FramebufferNULL.cpp
+++ /dev/null
@@ -1,131 +0,0 @@
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// FramebufferNULL.cpp:
-// Implements the class methods for FramebufferNULL.
-//
-
-#include "libANGLE/renderer/null/FramebufferNULL.h"
-
-#include "common/debug.h"
-
-namespace rx
-{
-
-FramebufferNULL::FramebufferNULL(const gl::FramebufferState &state) : FramebufferImpl(state)
-{
-}
-
-FramebufferNULL::~FramebufferNULL()
-{
-}
-
-gl::Error FramebufferNULL::discard(size_t count, const GLenum *attachments)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-gl::Error FramebufferNULL::invalidate(size_t count, const GLenum *attachments)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-gl::Error FramebufferNULL::invalidateSub(size_t count,
- const GLenum *attachments,
- const gl::Rectangle &area)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-gl::Error FramebufferNULL::clear(ContextImpl *context, GLbitfield mask)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-gl::Error FramebufferNULL::clearBufferfv(ContextImpl *context,
- GLenum buffer,
- GLint drawbuffer,
- const GLfloat *values)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-gl::Error FramebufferNULL::clearBufferuiv(ContextImpl *context,
- GLenum buffer,
- GLint drawbuffer,
- const GLuint *values)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-gl::Error FramebufferNULL::clearBufferiv(ContextImpl *context,
- GLenum buffer,
- GLint drawbuffer,
- const GLint *values)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-gl::Error FramebufferNULL::clearBufferfi(ContextImpl *context,
- GLenum buffer,
- GLint drawbuffer,
- GLfloat depth,
- GLint stencil)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-GLenum FramebufferNULL::getImplementationColorReadFormat() const
-{
- UNIMPLEMENTED();
- return GLenum();
-}
-
-GLenum FramebufferNULL::getImplementationColorReadType() const
-{
- UNIMPLEMENTED();
- return GLenum();
-}
-
-gl::Error FramebufferNULL::readPixels(ContextImpl *context,
- const gl::Rectangle &area,
- GLenum format,
- GLenum type,
- GLvoid *pixels) const
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-gl::Error FramebufferNULL::blit(ContextImpl *context,
- const gl::Rectangle &sourceArea,
- const gl::Rectangle &destArea,
- GLbitfield mask,
- GLenum filter)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-bool FramebufferNULL::checkStatus() const
-{
- UNIMPLEMENTED();
- return bool();
-}
-
-void FramebufferNULL::syncState(const gl::Framebuffer::DirtyBits &dirtyBits)
-{
- UNIMPLEMENTED();
-}
-
-} // namespace rx
diff --git a/gfx/angle/src/libANGLE/renderer/null/FramebufferNULL.h b/gfx/angle/src/libANGLE/renderer/null/FramebufferNULL.h
deleted file mode 100644
index c53132c18..000000000
--- a/gfx/angle/src/libANGLE/renderer/null/FramebufferNULL.h
+++ /dev/null
@@ -1,70 +0,0 @@
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// FramebufferNULL.h:
-// Defines the class interface for FramebufferNULL, implementing FramebufferImpl.
-//
-
-#ifndef LIBANGLE_RENDERER_NULL_FRAMEBUFFERNULL_H_
-#define LIBANGLE_RENDERER_NULL_FRAMEBUFFERNULL_H_
-
-#include "libANGLE/renderer/FramebufferImpl.h"
-
-namespace rx
-{
-
-class FramebufferNULL : public FramebufferImpl
-{
- public:
- FramebufferNULL(const gl::FramebufferState &state);
- ~FramebufferNULL() override;
-
- gl::Error discard(size_t count, const GLenum *attachments) override;
- gl::Error invalidate(size_t count, const GLenum *attachments) override;
- gl::Error invalidateSub(size_t count,
- const GLenum *attachments,
- const gl::Rectangle &area) override;
-
- gl::Error clear(ContextImpl *context, GLbitfield mask) override;
- gl::Error clearBufferfv(ContextImpl *context,
- GLenum buffer,
- GLint drawbuffer,
- const GLfloat *values) override;
- gl::Error clearBufferuiv(ContextImpl *context,
- GLenum buffer,
- GLint drawbuffer,
- const GLuint *values) override;
- gl::Error clearBufferiv(ContextImpl *context,
- GLenum buffer,
- GLint drawbuffer,
- const GLint *values) override;
- gl::Error clearBufferfi(ContextImpl *context,
- GLenum buffer,
- GLint drawbuffer,
- GLfloat depth,
- GLint stencil) override;
-
- GLenum getImplementationColorReadFormat() const override;
- GLenum getImplementationColorReadType() const override;
- gl::Error readPixels(ContextImpl *context,
- const gl::Rectangle &area,
- GLenum format,
- GLenum type,
- GLvoid *pixels) const override;
-
- gl::Error blit(ContextImpl *context,
- const gl::Rectangle &sourceArea,
- const gl::Rectangle &destArea,
- GLbitfield mask,
- GLenum filter) override;
-
- bool checkStatus() const override;
-
- void syncState(const gl::Framebuffer::DirtyBits &dirtyBits) override;
-};
-
-} // namespace rx
-
-#endif // LIBANGLE_RENDERER_NULL_FRAMEBUFFERNULL_H_
diff --git a/gfx/angle/src/libANGLE/renderer/null/ImageNULL.cpp b/gfx/angle/src/libANGLE/renderer/null/ImageNULL.cpp
deleted file mode 100644
index 23f3ca099..000000000
--- a/gfx/angle/src/libANGLE/renderer/null/ImageNULL.cpp
+++ /dev/null
@@ -1,37 +0,0 @@
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// ImageNULL.cpp:
-// Implements the class methods for ImageNULL.
-//
-
-#include "libANGLE/renderer/null/ImageNULL.h"
-
-#include "common/debug.h"
-
-namespace rx
-{
-
-ImageNULL::ImageNULL() : ImageImpl()
-{
-}
-
-ImageNULL::~ImageNULL()
-{
-}
-
-egl::Error ImageNULL::initialize()
-{
- UNIMPLEMENTED();
- return egl::Error(EGL_BAD_ACCESS);
-}
-
-gl::Error ImageNULL::orphan(egl::ImageSibling *sibling)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-} // namespace rx
diff --git a/gfx/angle/src/libANGLE/renderer/null/ImageNULL.h b/gfx/angle/src/libANGLE/renderer/null/ImageNULL.h
deleted file mode 100644
index b88b346dd..000000000
--- a/gfx/angle/src/libANGLE/renderer/null/ImageNULL.h
+++ /dev/null
@@ -1,30 +0,0 @@
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// ImageNULL.h:
-// Defines the class interface for ImageNULL, implementing ImageImpl.
-//
-
-#ifndef LIBANGLE_RENDERER_NULL_IMAGENULL_H_
-#define LIBANGLE_RENDERER_NULL_IMAGENULL_H_
-
-#include "libANGLE/renderer/ImageImpl.h"
-
-namespace rx
-{
-
-class ImageNULL : public ImageImpl
-{
- public:
- ImageNULL();
- ~ImageNULL() override;
- egl::Error initialize() override;
-
- gl::Error orphan(egl::ImageSibling *sibling) override;
-};
-
-} // namespace rx
-
-#endif // LIBANGLE_RENDERER_NULL_IMAGENULL_H_
diff --git a/gfx/angle/src/libANGLE/renderer/null/PathNULL.cpp b/gfx/angle/src/libANGLE/renderer/null/PathNULL.cpp
deleted file mode 100644
index bb52ea2c2..000000000
--- a/gfx/angle/src/libANGLE/renderer/null/PathNULL.cpp
+++ /dev/null
@@ -1,40 +0,0 @@
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// PathNULL.cpp:
-// Implements the class methods for PathNULL.
-//
-
-#include "libANGLE/renderer/null/PathNULL.h"
-
-#include "common/debug.h"
-
-namespace rx
-{
-
-PathNULL::PathNULL() : PathImpl()
-{
-}
-
-PathNULL::~PathNULL()
-{
-}
-
-gl::Error PathNULL::setCommands(GLsizei numCommands,
- const GLubyte *commands,
- GLsizei numCoords,
- GLenum coordType,
- const void *coords)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-void PathNULL::setPathParameter(GLenum pname, GLfloat value)
-{
- UNIMPLEMENTED();
-}
-
-} // namespace rx
diff --git a/gfx/angle/src/libANGLE/renderer/null/PathNULL.h b/gfx/angle/src/libANGLE/renderer/null/PathNULL.h
deleted file mode 100644
index 4c80c1c91..000000000
--- a/gfx/angle/src/libANGLE/renderer/null/PathNULL.h
+++ /dev/null
@@ -1,35 +0,0 @@
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// PathNULL.h:
-// Defines the class interface for PathNULL, implementing PathImpl.
-//
-
-#ifndef LIBANGLE_RENDERER_NULL_PATHNULL_H_
-#define LIBANGLE_RENDERER_NULL_PATHNULL_H_
-
-#include "libANGLE/renderer/PathImpl.h"
-
-namespace rx
-{
-
-class PathNULL : public PathImpl
-{
- public:
- PathNULL();
- ~PathNULL() override;
-
- gl::Error setCommands(GLsizei numCommands,
- const GLubyte *commands,
- GLsizei numCoords,
- GLenum coordType,
- const void *coords) override;
-
- void setPathParameter(GLenum pname, GLfloat value) override;
-};
-
-} // namespace rx
-
-#endif // LIBANGLE_RENDERER_NULL_PATHNULL_H_
diff --git a/gfx/angle/src/libANGLE/renderer/null/ProgramNULL.cpp b/gfx/angle/src/libANGLE/renderer/null/ProgramNULL.cpp
deleted file mode 100644
index fb44b6ee4..000000000
--- a/gfx/angle/src/libANGLE/renderer/null/ProgramNULL.cpp
+++ /dev/null
@@ -1,212 +0,0 @@
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// ProgramNULL.cpp:
-// Implements the class methods for ProgramNULL.
-//
-
-#include "libANGLE/renderer/null/ProgramNULL.h"
-
-#include "common/debug.h"
-
-namespace rx
-{
-
-ProgramNULL::ProgramNULL(const gl::ProgramState &state) : ProgramImpl(state)
-{
-}
-
-ProgramNULL::~ProgramNULL()
-{
-}
-
-LinkResult ProgramNULL::load(gl::InfoLog &infoLog, gl::BinaryInputStream *stream)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-gl::Error ProgramNULL::save(gl::BinaryOutputStream *stream)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-void ProgramNULL::setBinaryRetrievableHint(bool retrievable)
-{
- UNIMPLEMENTED();
-}
-
-LinkResult ProgramNULL::link(const gl::ContextState &data, gl::InfoLog &infoLog)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-GLboolean ProgramNULL::validate(const gl::Caps &caps, gl::InfoLog *infoLog)
-{
- UNIMPLEMENTED();
- return GLboolean();
-}
-
-void ProgramNULL::setUniform1fv(GLint location, GLsizei count, const GLfloat *v)
-{
- UNIMPLEMENTED();
-}
-
-void ProgramNULL::setUniform2fv(GLint location, GLsizei count, const GLfloat *v)
-{
- UNIMPLEMENTED();
-}
-
-void ProgramNULL::setUniform3fv(GLint location, GLsizei count, const GLfloat *v)
-{
- UNIMPLEMENTED();
-}
-
-void ProgramNULL::setUniform4fv(GLint location, GLsizei count, const GLfloat *v)
-{
- UNIMPLEMENTED();
-}
-
-void ProgramNULL::setUniform1iv(GLint location, GLsizei count, const GLint *v)
-{
- UNIMPLEMENTED();
-}
-
-void ProgramNULL::setUniform2iv(GLint location, GLsizei count, const GLint *v)
-{
- UNIMPLEMENTED();
-}
-
-void ProgramNULL::setUniform3iv(GLint location, GLsizei count, const GLint *v)
-{
- UNIMPLEMENTED();
-}
-
-void ProgramNULL::setUniform4iv(GLint location, GLsizei count, const GLint *v)
-{
- UNIMPLEMENTED();
-}
-
-void ProgramNULL::setUniform1uiv(GLint location, GLsizei count, const GLuint *v)
-{
- UNIMPLEMENTED();
-}
-
-void ProgramNULL::setUniform2uiv(GLint location, GLsizei count, const GLuint *v)
-{
- UNIMPLEMENTED();
-}
-
-void ProgramNULL::setUniform3uiv(GLint location, GLsizei count, const GLuint *v)
-{
- UNIMPLEMENTED();
-}
-
-void ProgramNULL::setUniform4uiv(GLint location, GLsizei count, const GLuint *v)
-{
- UNIMPLEMENTED();
-}
-
-void ProgramNULL::setUniformMatrix2fv(GLint location,
- GLsizei count,
- GLboolean transpose,
- const GLfloat *value)
-{
- UNIMPLEMENTED();
-}
-
-void ProgramNULL::setUniformMatrix3fv(GLint location,
- GLsizei count,
- GLboolean transpose,
- const GLfloat *value)
-{
- UNIMPLEMENTED();
-}
-
-void ProgramNULL::setUniformMatrix4fv(GLint location,
- GLsizei count,
- GLboolean transpose,
- const GLfloat *value)
-{
- UNIMPLEMENTED();
-}
-
-void ProgramNULL::setUniformMatrix2x3fv(GLint location,
- GLsizei count,
- GLboolean transpose,
- const GLfloat *value)
-{
- UNIMPLEMENTED();
-}
-
-void ProgramNULL::setUniformMatrix3x2fv(GLint location,
- GLsizei count,
- GLboolean transpose,
- const GLfloat *value)
-{
- UNIMPLEMENTED();
-}
-
-void ProgramNULL::setUniformMatrix2x4fv(GLint location,
- GLsizei count,
- GLboolean transpose,
- const GLfloat *value)
-{
- UNIMPLEMENTED();
-}
-
-void ProgramNULL::setUniformMatrix4x2fv(GLint location,
- GLsizei count,
- GLboolean transpose,
- const GLfloat *value)
-{
- UNIMPLEMENTED();
-}
-
-void ProgramNULL::setUniformMatrix3x4fv(GLint location,
- GLsizei count,
- GLboolean transpose,
- const GLfloat *value)
-{
- UNIMPLEMENTED();
-}
-
-void ProgramNULL::setUniformMatrix4x3fv(GLint location,
- GLsizei count,
- GLboolean transpose,
- const GLfloat *value)
-{
- UNIMPLEMENTED();
-}
-
-void ProgramNULL::setUniformBlockBinding(GLuint uniformBlockIndex, GLuint uniformBlockBinding)
-{
- UNIMPLEMENTED();
-}
-
-bool ProgramNULL::getUniformBlockSize(const std::string &blockName, size_t *sizeOut) const
-{
- UNIMPLEMENTED();
- return bool();
-}
-
-bool ProgramNULL::getUniformBlockMemberInfo(const std::string &memberUniformName,
- sh::BlockMemberInfo *memberInfoOut) const
-{
- UNIMPLEMENTED();
- return bool();
-}
-
-void ProgramNULL::setPathFragmentInputGen(const std::string &inputName,
- GLenum genMode,
- GLint components,
- const GLfloat *coeffs)
-{
- UNIMPLEMENTED();
-}
-
-} // namespace rx
diff --git a/gfx/angle/src/libANGLE/renderer/null/ProgramNULL.h b/gfx/angle/src/libANGLE/renderer/null/ProgramNULL.h
deleted file mode 100644
index 576a52c18..000000000
--- a/gfx/angle/src/libANGLE/renderer/null/ProgramNULL.h
+++ /dev/null
@@ -1,101 +0,0 @@
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// ProgramNULL.h:
-// Defines the class interface for ProgramNULL, implementing ProgramImpl.
-//
-
-#ifndef LIBANGLE_RENDERER_NULL_PROGRAMNULL_H_
-#define LIBANGLE_RENDERER_NULL_PROGRAMNULL_H_
-
-#include "libANGLE/renderer/ProgramImpl.h"
-
-namespace rx
-{
-
-class ProgramNULL : public ProgramImpl
-{
- public:
- ProgramNULL(const gl::ProgramState &state);
- ~ProgramNULL() override;
-
- LinkResult load(gl::InfoLog &infoLog, gl::BinaryInputStream *stream) override;
- gl::Error save(gl::BinaryOutputStream *stream) override;
- void setBinaryRetrievableHint(bool retrievable) override;
-
- LinkResult link(const gl::ContextState &data, gl::InfoLog &infoLog) override;
- GLboolean validate(const gl::Caps &caps, gl::InfoLog *infoLog) override;
-
- void setUniform1fv(GLint location, GLsizei count, const GLfloat *v) override;
- void setUniform2fv(GLint location, GLsizei count, const GLfloat *v) override;
- void setUniform3fv(GLint location, GLsizei count, const GLfloat *v) override;
- void setUniform4fv(GLint location, GLsizei count, const GLfloat *v) override;
- void setUniform1iv(GLint location, GLsizei count, const GLint *v) override;
- void setUniform2iv(GLint location, GLsizei count, const GLint *v) override;
- void setUniform3iv(GLint location, GLsizei count, const GLint *v) override;
- void setUniform4iv(GLint location, GLsizei count, const GLint *v) override;
- void setUniform1uiv(GLint location, GLsizei count, const GLuint *v) override;
- void setUniform2uiv(GLint location, GLsizei count, const GLuint *v) override;
- void setUniform3uiv(GLint location, GLsizei count, const GLuint *v) override;
- void setUniform4uiv(GLint location, GLsizei count, const GLuint *v) override;
- void setUniformMatrix2fv(GLint location,
- GLsizei count,
- GLboolean transpose,
- const GLfloat *value) override;
- void setUniformMatrix3fv(GLint location,
- GLsizei count,
- GLboolean transpose,
- const GLfloat *value) override;
- void setUniformMatrix4fv(GLint location,
- GLsizei count,
- GLboolean transpose,
- const GLfloat *value) override;
- void setUniformMatrix2x3fv(GLint location,
- GLsizei count,
- GLboolean transpose,
- const GLfloat *value) override;
- void setUniformMatrix3x2fv(GLint location,
- GLsizei count,
- GLboolean transpose,
- const GLfloat *value) override;
- void setUniformMatrix2x4fv(GLint location,
- GLsizei count,
- GLboolean transpose,
- const GLfloat *value) override;
- void setUniformMatrix4x2fv(GLint location,
- GLsizei count,
- GLboolean transpose,
- const GLfloat *value) override;
- void setUniformMatrix3x4fv(GLint location,
- GLsizei count,
- GLboolean transpose,
- const GLfloat *value) override;
- void setUniformMatrix4x3fv(GLint location,
- GLsizei count,
- GLboolean transpose,
- const GLfloat *value) override;
-
- // TODO: synchronize in syncState when dirty bits exist.
- void setUniformBlockBinding(GLuint uniformBlockIndex, GLuint uniformBlockBinding) override;
-
- // May only be called after a successful link operation.
- // Return false for inactive blocks.
- bool getUniformBlockSize(const std::string &blockName, size_t *sizeOut) const override;
-
- // May only be called after a successful link operation.
- // Returns false for inactive members.
- bool getUniformBlockMemberInfo(const std::string &memberUniformName,
- sh::BlockMemberInfo *memberInfoOut) const override;
- // CHROMIUM_path_rendering
- // Set parameters to control fragment shader input variable interpolation
- void setPathFragmentInputGen(const std::string &inputName,
- GLenum genMode,
- GLint components,
- const GLfloat *coeffs) override;
-};
-
-} // namespace rx
-
-#endif // LIBANGLE_RENDERER_NULL_PROGRAMNULL_H_
diff --git a/gfx/angle/src/libANGLE/renderer/null/QueryNULL.cpp b/gfx/angle/src/libANGLE/renderer/null/QueryNULL.cpp
deleted file mode 100644
index 6276a0ff1..000000000
--- a/gfx/angle/src/libANGLE/renderer/null/QueryNULL.cpp
+++ /dev/null
@@ -1,73 +0,0 @@
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// QueryNULL.cpp:
-// Implements the class methods for QueryNULL.
-//
-
-#include "libANGLE/renderer/null/QueryNULL.h"
-
-#include "common/debug.h"
-
-namespace rx
-{
-
-QueryNULL::QueryNULL(GLenum type) : QueryImpl(type)
-{
-}
-
-QueryNULL::~QueryNULL()
-{
-}
-
-gl::Error QueryNULL::begin()
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-gl::Error QueryNULL::end()
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-gl::Error QueryNULL::queryCounter()
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-gl::Error QueryNULL::getResult(GLint *params)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-gl::Error QueryNULL::getResult(GLuint *params)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-gl::Error QueryNULL::getResult(GLint64 *params)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-gl::Error QueryNULL::getResult(GLuint64 *params)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-gl::Error QueryNULL::isResultAvailable(bool *available)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-} // namespace rx
diff --git a/gfx/angle/src/libANGLE/renderer/null/QueryNULL.h b/gfx/angle/src/libANGLE/renderer/null/QueryNULL.h
deleted file mode 100644
index 40082a9b8..000000000
--- a/gfx/angle/src/libANGLE/renderer/null/QueryNULL.h
+++ /dev/null
@@ -1,36 +0,0 @@
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// QueryNULL.h:
-// Defines the class interface for QueryNULL, implementing QueryImpl.
-//
-
-#ifndef LIBANGLE_RENDERER_NULL_QUERYNULL_H_
-#define LIBANGLE_RENDERER_NULL_QUERYNULL_H_
-
-#include "libANGLE/renderer/QueryImpl.h"
-
-namespace rx
-{
-
-class QueryNULL : public QueryImpl
-{
- public:
- QueryNULL(GLenum type);
- ~QueryNULL() override;
-
- gl::Error begin() override;
- gl::Error end() override;
- gl::Error queryCounter() override;
- gl::Error getResult(GLint *params) override;
- gl::Error getResult(GLuint *params) override;
- gl::Error getResult(GLint64 *params) override;
- gl::Error getResult(GLuint64 *params) override;
- gl::Error isResultAvailable(bool *available) override;
-};
-
-} // namespace rx
-
-#endif // LIBANGLE_RENDERER_NULL_QUERYNULL_H_
diff --git a/gfx/angle/src/libANGLE/renderer/null/RenderbufferNULL.cpp b/gfx/angle/src/libANGLE/renderer/null/RenderbufferNULL.cpp
deleted file mode 100644
index 50f54a620..000000000
--- a/gfx/angle/src/libANGLE/renderer/null/RenderbufferNULL.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// RenderbufferNULL.cpp:
-// Implements the class methods for RenderbufferNULL.
-//
-
-#include "libANGLE/renderer/null/RenderbufferNULL.h"
-
-#include "common/debug.h"
-
-namespace rx
-{
-
-RenderbufferNULL::RenderbufferNULL() : RenderbufferImpl()
-{
-}
-
-RenderbufferNULL::~RenderbufferNULL()
-{
-}
-
-gl::Error RenderbufferNULL::setStorage(GLenum internalformat, size_t width, size_t height)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-gl::Error RenderbufferNULL::setStorageMultisample(size_t samples,
- GLenum internalformat,
- size_t width,
- size_t height)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-gl::Error RenderbufferNULL::setStorageEGLImageTarget(egl::Image *image)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-} // namespace rx
diff --git a/gfx/angle/src/libANGLE/renderer/null/RenderbufferNULL.h b/gfx/angle/src/libANGLE/renderer/null/RenderbufferNULL.h
deleted file mode 100644
index 79e529c4c..000000000
--- a/gfx/angle/src/libANGLE/renderer/null/RenderbufferNULL.h
+++ /dev/null
@@ -1,34 +0,0 @@
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// RenderbufferNULL.h:
-// Defines the class interface for RenderbufferNULL, implementing RenderbufferImpl.
-//
-
-#ifndef LIBANGLE_RENDERER_NULL_RENDERBUFFERNULL_H_
-#define LIBANGLE_RENDERER_NULL_RENDERBUFFERNULL_H_
-
-#include "libANGLE/renderer/RenderbufferImpl.h"
-
-namespace rx
-{
-
-class RenderbufferNULL : public RenderbufferImpl
-{
- public:
- RenderbufferNULL();
- ~RenderbufferNULL() override;
-
- gl::Error setStorage(GLenum internalformat, size_t width, size_t height) override;
- gl::Error setStorageMultisample(size_t samples,
- GLenum internalformat,
- size_t width,
- size_t height) override;
- gl::Error setStorageEGLImageTarget(egl::Image *image) override;
-};
-
-} // namespace rx
-
-#endif // LIBANGLE_RENDERER_NULL_RENDERBUFFERNULL_H_
diff --git a/gfx/angle/src/libANGLE/renderer/null/SamplerNULL.cpp b/gfx/angle/src/libANGLE/renderer/null/SamplerNULL.cpp
deleted file mode 100644
index e1e8c7c62..000000000
--- a/gfx/angle/src/libANGLE/renderer/null/SamplerNULL.cpp
+++ /dev/null
@@ -1,25 +0,0 @@
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// SamplerNULL.cpp:
-// Implements the class methods for SamplerNULL.
-//
-
-#include "libANGLE/renderer/null/SamplerNULL.h"
-
-#include "common/debug.h"
-
-namespace rx
-{
-
-SamplerNULL::SamplerNULL() : SamplerImpl()
-{
-}
-
-SamplerNULL::~SamplerNULL()
-{
-}
-
-} // namespace rx
diff --git a/gfx/angle/src/libANGLE/renderer/null/SamplerNULL.h b/gfx/angle/src/libANGLE/renderer/null/SamplerNULL.h
deleted file mode 100644
index 031fafa39..000000000
--- a/gfx/angle/src/libANGLE/renderer/null/SamplerNULL.h
+++ /dev/null
@@ -1,27 +0,0 @@
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// SamplerNULL.h:
-// Defines the class interface for SamplerNULL, implementing SamplerImpl.
-//
-
-#ifndef LIBANGLE_RENDERER_NULL_SAMPLERNULL_H_
-#define LIBANGLE_RENDERER_NULL_SAMPLERNULL_H_
-
-#include "libANGLE/renderer/SamplerImpl.h"
-
-namespace rx
-{
-
-class SamplerNULL : public SamplerImpl
-{
- public:
- SamplerNULL();
- ~SamplerNULL() override;
-};
-
-} // namespace rx
-
-#endif // LIBANGLE_RENDERER_NULL_SAMPLERNULL_H_
diff --git a/gfx/angle/src/libANGLE/renderer/null/ShaderNULL.cpp b/gfx/angle/src/libANGLE/renderer/null/ShaderNULL.cpp
deleted file mode 100644
index 168f4bdca..000000000
--- a/gfx/angle/src/libANGLE/renderer/null/ShaderNULL.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// ShaderNULL.cpp:
-// Implements the class methods for ShaderNULL.
-//
-
-#include "libANGLE/renderer/null/ShaderNULL.h"
-
-#include "common/debug.h"
-
-namespace rx
-{
-
-ShaderNULL::ShaderNULL(const gl::ShaderState &data) : ShaderImpl(data)
-{
-}
-
-ShaderNULL::~ShaderNULL()
-{
-}
-
-ShCompileOptions ShaderNULL::prepareSourceAndReturnOptions(std::stringstream *sourceStream,
- std::string *sourcePath)
-{
- UNIMPLEMENTED();
- return ShCompileOptions();
-}
-
-bool ShaderNULL::postTranslateCompile(gl::Compiler *compiler, std::string *infoLog)
-{
- UNIMPLEMENTED();
- return bool();
-}
-
-std::string ShaderNULL::getDebugInfo() const
-{
- UNIMPLEMENTED();
- return std::string();
-}
-
-} // namespace rx
diff --git a/gfx/angle/src/libANGLE/renderer/null/ShaderNULL.h b/gfx/angle/src/libANGLE/renderer/null/ShaderNULL.h
deleted file mode 100644
index d29b4cfb7..000000000
--- a/gfx/angle/src/libANGLE/renderer/null/ShaderNULL.h
+++ /dev/null
@@ -1,35 +0,0 @@
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// ShaderNULL.h:
-// Defines the class interface for ShaderNULL, implementing ShaderImpl.
-//
-
-#ifndef LIBANGLE_RENDERER_NULL_SHADERNULL_H_
-#define LIBANGLE_RENDERER_NULL_SHADERNULL_H_
-
-#include "libANGLE/renderer/ShaderImpl.h"
-
-namespace rx
-{
-
-class ShaderNULL : public ShaderImpl
-{
- public:
- ShaderNULL(const gl::ShaderState &data);
- ~ShaderNULL() override;
-
- // Returns additional sh::Compile options.
- ShCompileOptions prepareSourceAndReturnOptions(std::stringstream *sourceStream,
- std::string *sourcePath) override;
- // Returns success for compiling on the driver. Returns success.
- bool postTranslateCompile(gl::Compiler *compiler, std::string *infoLog) override;
-
- std::string getDebugInfo() const override;
-};
-
-} // namespace rx
-
-#endif // LIBANGLE_RENDERER_NULL_SHADERNULL_H_
diff --git a/gfx/angle/src/libANGLE/renderer/null/SurfaceNULL.cpp b/gfx/angle/src/libANGLE/renderer/null/SurfaceNULL.cpp
deleted file mode 100644
index 81d763783..000000000
--- a/gfx/angle/src/libANGLE/renderer/null/SurfaceNULL.cpp
+++ /dev/null
@@ -1,103 +0,0 @@
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// SurfaceNULL.cpp:
-// Implements the class methods for SurfaceNULL.
-//
-
-#include "libANGLE/renderer/null/SurfaceNULL.h"
-
-#include "common/debug.h"
-
-namespace rx
-{
-
-SurfaceNULL::SurfaceNULL(const egl::SurfaceState &surfaceState) : SurfaceImpl(surfaceState)
-{
-}
-
-SurfaceNULL::~SurfaceNULL()
-{
-}
-
-egl::Error SurfaceNULL::initialize()
-{
- UNIMPLEMENTED();
- return egl::Error(EGL_BAD_ACCESS);
-}
-
-FramebufferImpl *SurfaceNULL::createDefaultFramebuffer(const gl::FramebufferState &state)
-{
- UNIMPLEMENTED();
- return static_cast<FramebufferImpl *>(0);
-}
-
-egl::Error SurfaceNULL::swap()
-{
- UNIMPLEMENTED();
- return egl::Error(EGL_BAD_ACCESS);
-}
-
-egl::Error SurfaceNULL::postSubBuffer(EGLint x, EGLint y, EGLint width, EGLint height)
-{
- UNIMPLEMENTED();
- return egl::Error(EGL_BAD_ACCESS);
-}
-
-egl::Error SurfaceNULL::querySurfacePointerANGLE(EGLint attribute, void **value)
-{
- UNIMPLEMENTED();
- return egl::Error(EGL_BAD_ACCESS);
-}
-
-egl::Error SurfaceNULL::bindTexImage(gl::Texture *texture, EGLint buffer)
-{
- UNIMPLEMENTED();
- return egl::Error(EGL_BAD_ACCESS);
-}
-
-egl::Error SurfaceNULL::releaseTexImage(EGLint buffer)
-{
- UNIMPLEMENTED();
- return egl::Error(EGL_BAD_ACCESS);
-}
-
-void SurfaceNULL::setSwapInterval(EGLint interval)
-{
- UNIMPLEMENTED();
-}
-
-EGLint SurfaceNULL::getWidth() const
-{
- UNIMPLEMENTED();
- return EGLint();
-}
-
-EGLint SurfaceNULL::getHeight() const
-{
- UNIMPLEMENTED();
- return EGLint();
-}
-
-EGLint SurfaceNULL::isPostSubBufferSupported() const
-{
- UNIMPLEMENTED();
- return EGLint();
-}
-
-EGLint SurfaceNULL::getSwapBehavior() const
-{
- UNIMPLEMENTED();
- return EGLint();
-}
-
-gl::Error SurfaceNULL::getAttachmentRenderTarget(const gl::FramebufferAttachment::Target &target,
- FramebufferAttachmentRenderTarget **rtOut)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-} // namespace rx
diff --git a/gfx/angle/src/libANGLE/renderer/null/SurfaceNULL.h b/gfx/angle/src/libANGLE/renderer/null/SurfaceNULL.h
deleted file mode 100644
index 597f1c21c..000000000
--- a/gfx/angle/src/libANGLE/renderer/null/SurfaceNULL.h
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// SurfaceNULL.h:
-// Defines the class interface for SurfaceNULL, implementing SurfaceImpl.
-//
-
-#ifndef LIBANGLE_RENDERER_NULL_SURFACENULL_H_
-#define LIBANGLE_RENDERER_NULL_SURFACENULL_H_
-
-#include "libANGLE/renderer/SurfaceImpl.h"
-
-namespace rx
-{
-
-class SurfaceNULL : public SurfaceImpl
-{
- public:
- SurfaceNULL(const egl::SurfaceState &surfaceState);
- ~SurfaceNULL() override;
-
- egl::Error initialize() override;
- FramebufferImpl *createDefaultFramebuffer(const gl::FramebufferState &state) override;
- egl::Error swap() override;
- egl::Error postSubBuffer(EGLint x, EGLint y, EGLint width, EGLint height) override;
- egl::Error querySurfacePointerANGLE(EGLint attribute, void **value) override;
- egl::Error bindTexImage(gl::Texture *texture, EGLint buffer) override;
- egl::Error releaseTexImage(EGLint buffer) override;
- void setSwapInterval(EGLint interval) override;
-
- // width and height can change with client window resizing
- EGLint getWidth() const override;
- EGLint getHeight() const override;
-
- EGLint isPostSubBufferSupported() const override;
- EGLint getSwapBehavior() const override;
-
- gl::Error getAttachmentRenderTarget(const gl::FramebufferAttachment::Target &target,
- FramebufferAttachmentRenderTarget **rtOut) override;
-};
-
-} // namespace rx
-
-#endif // LIBANGLE_RENDERER_NULL_SURFACENULL_H_
diff --git a/gfx/angle/src/libANGLE/renderer/null/TextureNULL.cpp b/gfx/angle/src/libANGLE/renderer/null/TextureNULL.cpp
deleted file mode 100644
index 2c952e528..000000000
--- a/gfx/angle/src/libANGLE/renderer/null/TextureNULL.cpp
+++ /dev/null
@@ -1,143 +0,0 @@
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// TextureNULL.cpp:
-// Implements the class methods for TextureNULL.
-//
-
-#include "libANGLE/renderer/null/TextureNULL.h"
-
-#include "common/debug.h"
-
-namespace rx
-{
-
-TextureNULL::TextureNULL(const gl::TextureState &state) : TextureImpl(state)
-{
-}
-
-TextureNULL::~TextureNULL()
-{
-}
-
-gl::Error TextureNULL::setImage(GLenum target,
- size_t level,
- GLenum internalFormat,
- const gl::Extents &size,
- GLenum format,
- GLenum type,
- const gl::PixelUnpackState &unpack,
- const uint8_t *pixels)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-gl::Error TextureNULL::setSubImage(GLenum target,
- size_t level,
- const gl::Box &area,
- GLenum format,
- GLenum type,
- const gl::PixelUnpackState &unpack,
- const uint8_t *pixels)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-gl::Error TextureNULL::setCompressedImage(GLenum target,
- size_t level,
- GLenum internalFormat,
- const gl::Extents &size,
- const gl::PixelUnpackState &unpack,
- size_t imageSize,
- const uint8_t *pixels)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-gl::Error TextureNULL::setCompressedSubImage(GLenum target,
- size_t level,
- const gl::Box &area,
- GLenum format,
- const gl::PixelUnpackState &unpack,
- size_t imageSize,
- const uint8_t *pixels)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-gl::Error TextureNULL::copyImage(GLenum target,
- size_t level,
- const gl::Rectangle &sourceArea,
- GLenum internalFormat,
- const gl::Framebuffer *source)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-gl::Error TextureNULL::copySubImage(GLenum target,
- size_t level,
- const gl::Offset &destOffset,
- const gl::Rectangle &sourceArea,
- const gl::Framebuffer *source)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-gl::Error TextureNULL::setStorage(GLenum target,
- size_t levels,
- GLenum internalFormat,
- const gl::Extents &size)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-gl::Error TextureNULL::setEGLImageTarget(GLenum target, egl::Image *image)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-gl::Error TextureNULL::setImageExternal(GLenum target,
- egl::Stream *stream,
- const egl::Stream::GLTextureDescription &desc)
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-gl::Error TextureNULL::generateMipmap()
-{
- UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
-}
-
-void TextureNULL::setBaseLevel(GLuint baseLevel)
-{
- UNIMPLEMENTED();
-}
-
-void TextureNULL::bindTexImage(egl::Surface *surface)
-{
- UNIMPLEMENTED();
-}
-
-void TextureNULL::releaseTexImage()
-{
- UNIMPLEMENTED();
-}
-
-void TextureNULL::syncState(const gl::Texture::DirtyBits &dirtyBits)
-{
- UNIMPLEMENTED();
-}
-
-} // namespace rx
diff --git a/gfx/angle/src/libANGLE/renderer/null/TextureNULL.h b/gfx/angle/src/libANGLE/renderer/null/TextureNULL.h
deleted file mode 100644
index 10c2d3503..000000000
--- a/gfx/angle/src/libANGLE/renderer/null/TextureNULL.h
+++ /dev/null
@@ -1,89 +0,0 @@
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// TextureNULL.h:
-// Defines the class interface for TextureNULL, implementing TextureImpl.
-//
-
-#ifndef LIBANGLE_RENDERER_NULL_TEXTURENULL_H_
-#define LIBANGLE_RENDERER_NULL_TEXTURENULL_H_
-
-#include "libANGLE/renderer/TextureImpl.h"
-
-namespace rx
-{
-
-class TextureNULL : public TextureImpl
-{
- public:
- TextureNULL(const gl::TextureState &state);
- ~TextureNULL() override;
-
- gl::Error setImage(GLenum target,
- size_t level,
- GLenum internalFormat,
- const gl::Extents &size,
- GLenum format,
- GLenum type,
- const gl::PixelUnpackState &unpack,
- const uint8_t *pixels) override;
- gl::Error setSubImage(GLenum target,
- size_t level,
- const gl::Box &area,
- GLenum format,
- GLenum type,
- const gl::PixelUnpackState &unpack,
- const uint8_t *pixels) override;
-
- gl::Error setCompressedImage(GLenum target,
- size_t level,
- GLenum internalFormat,
- const gl::Extents &size,
- const gl::PixelUnpackState &unpack,
- size_t imageSize,
- const uint8_t *pixels) override;
- gl::Error setCompressedSubImage(GLenum target,
- size_t level,
- const gl::Box &area,
- GLenum format,
- const gl::PixelUnpackState &unpack,
- size_t imageSize,
- const uint8_t *pixels) override;
-
- gl::Error copyImage(GLenum target,
- size_t level,
- const gl::Rectangle &sourceArea,
- GLenum internalFormat,
- const gl::Framebuffer *source) override;
- gl::Error copySubImage(GLenum target,
- size_t level,
- const gl::Offset &destOffset,
- const gl::Rectangle &sourceArea,
- const gl::Framebuffer *source) override;
-
- gl::Error setStorage(GLenum target,
- size_t levels,
- GLenum internalFormat,
- const gl::Extents &size) override;
-
- gl::Error setEGLImageTarget(GLenum target, egl::Image *image) override;
-
- gl::Error setImageExternal(GLenum target,
- egl::Stream *stream,
- const egl::Stream::GLTextureDescription &desc) override;
-
- gl::Error generateMipmap() override;
-
- void setBaseLevel(GLuint baseLevel) override;
-
- void bindTexImage(egl::Surface *surface) override;
- void releaseTexImage() override;
-
- void syncState(const gl::Texture::DirtyBits &dirtyBits) override;
-};
-
-} // namespace rx
-
-#endif // LIBANGLE_RENDERER_NULL_TEXTURENULL_H_
diff --git a/gfx/angle/src/libANGLE/renderer/null/TransformFeedbackNULL.cpp b/gfx/angle/src/libANGLE/renderer/null/TransformFeedbackNULL.cpp
deleted file mode 100644
index e1433fb2d..000000000
--- a/gfx/angle/src/libANGLE/renderer/null/TransformFeedbackNULL.cpp
+++ /dev/null
@@ -1,57 +0,0 @@
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// TransformFeedbackNULL.cpp:
-// Implements the class methods for TransformFeedbackNULL.
-//
-
-#include "libANGLE/renderer/null/TransformFeedbackNULL.h"
-
-#include "common/debug.h"
-
-namespace rx
-{
-
-TransformFeedbackNULL::TransformFeedbackNULL(const gl::TransformFeedbackState &state)
- : TransformFeedbackImpl(state)
-{
-}
-
-TransformFeedbackNULL::~TransformFeedbackNULL()
-{
-}
-
-void TransformFeedbackNULL::begin(GLenum primitiveMode)
-{
- UNIMPLEMENTED();
-}
-
-void TransformFeedbackNULL::end()
-{
- UNIMPLEMENTED();
-}
-
-void TransformFeedbackNULL::pause()
-{
- UNIMPLEMENTED();
-}
-
-void TransformFeedbackNULL::resume()
-{
- UNIMPLEMENTED();
-}
-
-void TransformFeedbackNULL::bindGenericBuffer(const BindingPointer<gl::Buffer> &binding)
-{
- UNIMPLEMENTED();
-}
-
-void TransformFeedbackNULL::bindIndexedBuffer(size_t index,
- const OffsetBindingPointer<gl::Buffer> &binding)
-{
- UNIMPLEMENTED();
-}
-
-} // namespace rx
diff --git a/gfx/angle/src/libANGLE/renderer/null/TransformFeedbackNULL.h b/gfx/angle/src/libANGLE/renderer/null/TransformFeedbackNULL.h
deleted file mode 100644
index 477e81d85..000000000
--- a/gfx/angle/src/libANGLE/renderer/null/TransformFeedbackNULL.h
+++ /dev/null
@@ -1,35 +0,0 @@
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// TransformFeedbackNULL.h:
-// Defines the class interface for TransformFeedbackNULL, implementing TransformFeedbackImpl.
-//
-
-#ifndef LIBANGLE_RENDERER_NULL_TRANSFORMFEEDBACKNULL_H_
-#define LIBANGLE_RENDERER_NULL_TRANSFORMFEEDBACKNULL_H_
-
-#include "libANGLE/renderer/TransformFeedbackImpl.h"
-
-namespace rx
-{
-
-class TransformFeedbackNULL : public TransformFeedbackImpl
-{
- public:
- TransformFeedbackNULL(const gl::TransformFeedbackState &state);
- ~TransformFeedbackNULL() override;
-
- void begin(GLenum primitiveMode) override;
- void end() override;
- void pause() override;
- void resume() override;
-
- void bindGenericBuffer(const BindingPointer<gl::Buffer> &binding) override;
- void bindIndexedBuffer(size_t index, const OffsetBindingPointer<gl::Buffer> &binding) override;
-};
-
-} // namespace rx
-
-#endif // LIBANGLE_RENDERER_NULL_TRANSFORMFEEDBACKNULL_H_
diff --git a/gfx/angle/src/libANGLE/renderer/null/VertexArrayNULL.cpp b/gfx/angle/src/libANGLE/renderer/null/VertexArrayNULL.cpp
deleted file mode 100644
index 95a835df1..000000000
--- a/gfx/angle/src/libANGLE/renderer/null/VertexArrayNULL.cpp
+++ /dev/null
@@ -1,25 +0,0 @@
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// VertexArrayNULL.cpp:
-// Implements the class methods for VertexArrayNULL.
-//
-
-#include "libANGLE/renderer/null/VertexArrayNULL.h"
-
-#include "common/debug.h"
-
-namespace rx
-{
-
-VertexArrayNULL::VertexArrayNULL(const gl::VertexArrayState &data) : VertexArrayImpl(data)
-{
-}
-
-VertexArrayNULL::~VertexArrayNULL()
-{
-}
-
-} // namespace rx
diff --git a/gfx/angle/src/libANGLE/renderer/null/VertexArrayNULL.h b/gfx/angle/src/libANGLE/renderer/null/VertexArrayNULL.h
deleted file mode 100644
index f8b2b0490..000000000
--- a/gfx/angle/src/libANGLE/renderer/null/VertexArrayNULL.h
+++ /dev/null
@@ -1,27 +0,0 @@
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// VertexArrayNULL.h:
-// Defines the class interface for VertexArrayNULL, implementing VertexArrayImpl.
-//
-
-#ifndef LIBANGLE_RENDERER_NULL_VERTEXARRAYNULL_H_
-#define LIBANGLE_RENDERER_NULL_VERTEXARRAYNULL_H_
-
-#include "libANGLE/renderer/VertexArrayImpl.h"
-
-namespace rx
-{
-
-class VertexArrayNULL : public VertexArrayImpl
-{
- public:
- VertexArrayNULL(const gl::VertexArrayState &data);
- ~VertexArrayNULL() override;
-};
-
-} // namespace rx
-
-#endif // LIBANGLE_RENDERER_NULL_VERTEXARRAYNULL_H_
diff --git a/gfx/angle/src/libANGLE/renderer/renderer_utils.cpp b/gfx/angle/src/libANGLE/renderer/renderer_utils.cpp
index cc04dbb14..b93a1ff93 100755
--- a/gfx/angle/src/libANGLE/renderer/renderer_utils.cpp
+++ b/gfx/angle/src/libANGLE/renderer/renderer_utils.cpp
@@ -268,25 +268,8 @@ ColorWriteFunction GetColorWriteFunction(const gl::FormatType &formatType)
ColorCopyFunction GetFastCopyFunction(const FastCopyFunctionMap &fastCopyFunctions,
const gl::FormatType &formatType)
{
- return fastCopyFunctions.get(formatType);
-}
-
-bool FastCopyFunctionMap::has(const gl::FormatType &formatType) const
-{
- return (get(formatType) != nullptr);
-}
-
-ColorCopyFunction FastCopyFunctionMap::get(const gl::FormatType &formatType) const
-{
- for (size_t index = 0; index < mSize; ++index)
- {
- if (mData[index].format == formatType.format && mData[index].type == formatType.type)
- {
- return mData[index].func;
- }
- }
-
- return nullptr;
+ auto iter = fastCopyFunctions.find(formatType);
+ return (iter != fastCopyFunctions.end()) ? iter->second : nullptr;
}
} // namespace rx
diff --git a/gfx/angle/src/libANGLE/renderer/renderer_utils.h b/gfx/angle/src/libANGLE/renderer/renderer_utils.h
index 440548e9c..e08703000 100755
--- a/gfx/angle/src/libANGLE/renderer/renderer_utils.h
+++ b/gfx/angle/src/libANGLE/renderer/renderer_utils.h
@@ -44,27 +44,7 @@ typedef void (*ColorReadFunction)(const uint8_t *source, uint8_t *dest);
typedef void (*ColorWriteFunction)(const uint8_t *source, uint8_t *dest);
typedef void (*ColorCopyFunction)(const uint8_t *source, uint8_t *dest);
-class FastCopyFunctionMap
-{
- public:
- struct Entry
- {
- GLenum format;
- GLenum type;
- ColorCopyFunction func;
- };
-
- constexpr FastCopyFunctionMap() : FastCopyFunctionMap(nullptr, 0) {}
-
- constexpr FastCopyFunctionMap(const Entry *data, size_t size) : mSize(size), mData(data) {}
-
- bool has(const gl::FormatType &formatType) const;
- ColorCopyFunction get(const gl::FormatType &formatType) const;
-
- private:
- size_t mSize;
- const Entry *mData;
-};
+typedef std::map<gl::FormatType, ColorCopyFunction> FastCopyFunctionMap;
struct PackPixelsParams
{
diff --git a/gfx/angle/src/libANGLE/renderer/vulkan/BufferVk.cpp b/gfx/angle/src/libANGLE/renderer/vulkan/BufferVk.cpp
index 0b1babd5a..b0e01e86c 100755
--- a/gfx/angle/src/libANGLE/renderer/vulkan/BufferVk.cpp
+++ b/gfx/angle/src/libANGLE/renderer/vulkan/BufferVk.cpp
@@ -14,7 +14,7 @@
namespace rx
{
-BufferVk::BufferVk(const gl::BufferState &state) : BufferImpl(state)
+BufferVk::BufferVk() : BufferImpl()
{
}
@@ -22,13 +22,13 @@ BufferVk::~BufferVk()
{
}
-gl::Error BufferVk::setData(GLenum target, const void *data, size_t size, GLenum usage)
+gl::Error BufferVk::setData(const void *data, size_t size, GLenum usage)
{
UNIMPLEMENTED();
return gl::Error(GL_INVALID_OPERATION);
}
-gl::Error BufferVk::setSubData(GLenum target, const void *data, size_t size, size_t offset)
+gl::Error BufferVk::setSubData(const void *data, size_t size, size_t offset)
{
UNIMPLEMENTED();
return gl::Error(GL_INVALID_OPERATION);
diff --git a/gfx/angle/src/libANGLE/renderer/vulkan/BufferVk.h b/gfx/angle/src/libANGLE/renderer/vulkan/BufferVk.h
index 27792962f..19bd61ea3 100755
--- a/gfx/angle/src/libANGLE/renderer/vulkan/BufferVk.h
+++ b/gfx/angle/src/libANGLE/renderer/vulkan/BufferVk.h
@@ -18,11 +18,11 @@ namespace rx
class BufferVk : public BufferImpl
{
public:
- BufferVk(const gl::BufferState &state);
+ BufferVk();
~BufferVk() override;
- gl::Error setData(GLenum target, const void *data, size_t size, GLenum usage) override;
- gl::Error setSubData(GLenum target, const void *data, size_t size, size_t offset) override;
+ gl::Error setData(const void *data, size_t size, GLenum usage) override;
+ gl::Error setSubData(const void *data, size_t size, size_t offset) override;
gl::Error copySubData(BufferImpl *source,
GLintptr sourceOffset,
GLintptr destOffset,
diff --git a/gfx/angle/src/libANGLE/renderer/vulkan/ContextVk.cpp b/gfx/angle/src/libANGLE/renderer/vulkan/ContextVk.cpp
index d0660bfdc..8bd063300 100755
--- a/gfx/angle/src/libANGLE/renderer/vulkan/ContextVk.cpp
+++ b/gfx/angle/src/libANGLE/renderer/vulkan/ContextVk.cpp
@@ -211,9 +211,9 @@ RenderbufferImpl *ContextVk::createRenderbuffer()
return new RenderbufferVk();
}
-BufferImpl *ContextVk::createBuffer(const gl::BufferState &state)
+BufferImpl *ContextVk::createBuffer()
{
- return new BufferVk(state);
+ return new BufferVk();
}
VertexArrayImpl *ContextVk::createVertexArray(const gl::VertexArrayState &state)
diff --git a/gfx/angle/src/libANGLE/renderer/vulkan/ContextVk.h b/gfx/angle/src/libANGLE/renderer/vulkan/ContextVk.h
index 64e85c984..61b4f5b30 100755
--- a/gfx/angle/src/libANGLE/renderer/vulkan/ContextVk.h
+++ b/gfx/angle/src/libANGLE/renderer/vulkan/ContextVk.h
@@ -97,7 +97,7 @@ class ContextVk : public ContextImpl
RenderbufferImpl *createRenderbuffer() override;
// Buffer creation
- BufferImpl *createBuffer(const gl::BufferState &state) override;
+ BufferImpl *createBuffer() override;
// Vertex Array creation
VertexArrayImpl *createVertexArray(const gl::VertexArrayState &state) override;
diff --git a/gfx/angle/src/libANGLE/renderer/vulkan/DisplayVk.cpp b/gfx/angle/src/libANGLE/renderer/vulkan/DisplayVk.cpp
index 2c652ce3c..95e8ea653 100755
--- a/gfx/angle/src/libANGLE/renderer/vulkan/DisplayVk.cpp
+++ b/gfx/angle/src/libANGLE/renderer/vulkan/DisplayVk.cpp
@@ -111,8 +111,7 @@ SurfaceImpl *DisplayVk::createPbufferSurface(const egl::SurfaceState &state,
SurfaceImpl *DisplayVk::createPbufferFromClientBuffer(const egl::SurfaceState &state,
const egl::Config *configuration,
- EGLenum buftype,
- EGLClientBuffer clientBuffer,
+ EGLClientBuffer shareHandle,
const egl::AttributeMap &attribs)
{
UNIMPLEMENTED();
diff --git a/gfx/angle/src/libANGLE/renderer/vulkan/DisplayVk.h b/gfx/angle/src/libANGLE/renderer/vulkan/DisplayVk.h
index 26eab5139..91838980d 100755
--- a/gfx/angle/src/libANGLE/renderer/vulkan/DisplayVk.h
+++ b/gfx/angle/src/libANGLE/renderer/vulkan/DisplayVk.h
@@ -54,8 +54,7 @@ class DisplayVk : public DisplayImpl
const egl::AttributeMap &attribs) override;
SurfaceImpl *createPbufferFromClientBuffer(const egl::SurfaceState &state,
const egl::Config *configuration,
- EGLenum buftype,
- EGLClientBuffer clientBuffer,
+ EGLClientBuffer shareHandle,
const egl::AttributeMap &attribs) override;
SurfaceImpl *createPixmapSurface(const egl::SurfaceState &state,
const egl::Config *configuration,
diff --git a/gfx/angle/src/libANGLE/renderer/vulkan/ProgramVk.cpp b/gfx/angle/src/libANGLE/renderer/vulkan/ProgramVk.cpp
index a83f826e7..591cf062c 100755
--- a/gfx/angle/src/libANGLE/renderer/vulkan/ProgramVk.cpp
+++ b/gfx/angle/src/libANGLE/renderer/vulkan/ProgramVk.cpp
@@ -25,7 +25,7 @@ ProgramVk::~ProgramVk()
LinkResult ProgramVk::load(gl::InfoLog &infoLog, gl::BinaryInputStream *stream)
{
UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
+ return LinkResult(false, gl::Error(GL_INVALID_OPERATION));
}
gl::Error ProgramVk::save(gl::BinaryOutputStream *stream)
@@ -42,7 +42,7 @@ void ProgramVk::setBinaryRetrievableHint(bool retrievable)
LinkResult ProgramVk::link(const gl::ContextState &data, gl::InfoLog &infoLog)
{
UNIMPLEMENTED();
- return gl::Error(GL_INVALID_OPERATION);
+ return LinkResult(false, gl::Error(GL_INVALID_OPERATION));
}
GLboolean ProgramVk::validate(const gl::Caps &caps, gl::InfoLog *infoLog)
diff --git a/gfx/angle/src/libANGLE/renderer/vulkan/ShaderVk.cpp b/gfx/angle/src/libANGLE/renderer/vulkan/ShaderVk.cpp
index 8bece9b45..06355c3c8 100755
--- a/gfx/angle/src/libANGLE/renderer/vulkan/ShaderVk.cpp
+++ b/gfx/angle/src/libANGLE/renderer/vulkan/ShaderVk.cpp
@@ -22,8 +22,8 @@ ShaderVk::~ShaderVk()
{
}
-ShCompileOptions ShaderVk::prepareSourceAndReturnOptions(std::stringstream *sourceStream,
- std::string *sourcePath)
+int ShaderVk::prepareSourceAndReturnOptions(std::stringstream *sourceStream,
+ std::string *sourcePath)
{
UNIMPLEMENTED();
return int();
diff --git a/gfx/angle/src/libANGLE/renderer/vulkan/ShaderVk.h b/gfx/angle/src/libANGLE/renderer/vulkan/ShaderVk.h
index 10f8fe423..f847070c4 100755
--- a/gfx/angle/src/libANGLE/renderer/vulkan/ShaderVk.h
+++ b/gfx/angle/src/libANGLE/renderer/vulkan/ShaderVk.h
@@ -21,9 +21,9 @@ class ShaderVk : public ShaderImpl
ShaderVk(const gl::ShaderState &data);
~ShaderVk() override;
- // Returns additional sh::Compile options.
- ShCompileOptions prepareSourceAndReturnOptions(std::stringstream *sourceStream,
- std::string *sourcePath) override;
+ // Returns additional ShCompile options.
+ int prepareSourceAndReturnOptions(std::stringstream *sourceStream,
+ std::string *sourcePath) override;
// Returns success for compiling on the driver. Returns success.
bool postTranslateCompile(gl::Compiler *compiler, std::string *infoLog) override;
diff --git a/gfx/angle/src/libANGLE/renderer/vulkan/TextureVk.cpp b/gfx/angle/src/libANGLE/renderer/vulkan/TextureVk.cpp
index a2220fcad..440f98754 100755
--- a/gfx/angle/src/libANGLE/renderer/vulkan/TextureVk.cpp
+++ b/gfx/angle/src/libANGLE/renderer/vulkan/TextureVk.cpp
@@ -142,9 +142,4 @@ gl::Error TextureVk::getAttachmentRenderTarget(const gl::FramebufferAttachment::
return gl::Error(GL_INVALID_OPERATION);
}
-void TextureVk::syncState(const gl::Texture::DirtyBits &dirtyBits)
-{
- UNIMPLEMENTED();
-}
-
} // namespace rx
diff --git a/gfx/angle/src/libANGLE/renderer/vulkan/TextureVk.h b/gfx/angle/src/libANGLE/renderer/vulkan/TextureVk.h
index d5b9106c7..de45b93b7 100755
--- a/gfx/angle/src/libANGLE/renderer/vulkan/TextureVk.h
+++ b/gfx/angle/src/libANGLE/renderer/vulkan/TextureVk.h
@@ -83,8 +83,6 @@ class TextureVk : public TextureImpl
gl::Error getAttachmentRenderTarget(const gl::FramebufferAttachment::Target &target,
FramebufferAttachmentRenderTarget **rtOut) override;
-
- void syncState(const gl::Texture::DirtyBits &dirtyBits) override;
};
} // namespace rx
diff --git a/gfx/angle/src/libANGLE/validationEGL.cpp b/gfx/angle/src/libANGLE/validationEGL.cpp
index 7ee92e83e..6b6893b37 100755
--- a/gfx/angle/src/libANGLE/validationEGL.cpp
+++ b/gfx/angle/src/libANGLE/validationEGL.cpp
@@ -182,7 +182,7 @@ Error ValidateDisplay(const Display *display)
return Error(EGL_SUCCESS);
}
-Error ValidateSurface(const Display *display, const Surface *surface)
+Error ValidateSurface(const Display *display, Surface *surface)
{
ANGLE_TRY(ValidateDisplay(display));
@@ -206,7 +206,7 @@ Error ValidateConfig(const Display *display, const Config *config)
return Error(EGL_SUCCESS);
}
-Error ValidateContext(const Display *display, const gl::Context *context)
+Error ValidateContext(const Display *display, gl::Context *context)
{
ANGLE_TRY(ValidateDisplay(display));
@@ -258,6 +258,7 @@ Error ValidateCreateContext(Display *display, Config *configuration, gl::Context
EGLAttrib clientMinorVersion = 0;
EGLAttrib contextFlags = 0;
bool resetNotification = false;
+ bool robustAccess = false;
for (AttributeMap::const_iterator attributeIter = attributes.begin(); attributeIter != attributes.end(); attributeIter++)
{
EGLAttrib attribute = attributeIter->first;
@@ -293,6 +294,7 @@ Error ValidateCreateContext(Display *display, Config *configuration, gl::Context
{
return Error(EGL_BAD_ATTRIBUTE);
}
+ robustAccess = (value == EGL_TRUE);
break;
case EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR:
@@ -325,36 +327,6 @@ Error ValidateCreateContext(Display *display, Config *configuration, gl::Context
}
break;
- case EGL_CONTEXT_WEBGL_COMPATIBILITY_ANGLE:
- if (!display->getExtensions().createContextWebGLCompatibility)
- {
- return Error(EGL_BAD_ATTRIBUTE,
- "Attribute EGL_CONTEXT_WEBGL_COMPATIBILITY_ANGLE requires "
- "EGL_ANGLE_create_context_webgl_compatibility.");
- }
- if (value != EGL_TRUE && value != EGL_FALSE)
- {
- return Error(
- EGL_BAD_ATTRIBUTE,
- "EGL_CONTEXT_WEBGL_COMPATIBILITY_ANGLE must be EGL_TRUE or EGL_FALSE.");
- }
- break;
-
- case EGL_CONTEXT_BIND_GENERATES_RESOURCE_CHROMIUM:
- if (!display->getExtensions().createContextBindGeneratesResource)
- {
- return Error(EGL_BAD_ATTRIBUTE,
- "Attribute EGL_CONTEXT_BIND_GENERATES_RESOURCE_CHROMIUM requires "
- "EGL_CHROMIUM_create_context_bind_generates_resource.");
- }
- if (value != EGL_TRUE && value != EGL_FALSE)
- {
- return Error(EGL_BAD_ATTRIBUTE,
- "EGL_CONTEXT_BIND_GENERATES_RESOURCE_CHROMIUM must be EGL_TRUE or "
- "EGL_FALSE.");
- }
- break;
-
default:
return Error(EGL_BAD_ATTRIBUTE);
}
@@ -397,6 +369,17 @@ Error ValidateCreateContext(Display *display, Config *configuration, gl::Context
return Error(EGL_BAD_ATTRIBUTE);
}
+ if ((contextFlags & EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR) > 0)
+ {
+ robustAccess = true;
+ }
+
+ if (robustAccess)
+ {
+ // Unimplemented
+ return Error(EGL_BAD_CONFIG);
+ }
+
if (shareContext)
{
// Shared context is invalid or is owned by another display
@@ -640,17 +623,6 @@ Error ValidateCreatePbufferFromClientBuffer(Display *display, EGLenum buftype, E
}
break;
- case EGL_D3D_TEXTURE_ANGLE:
- if (!displayExtensions.d3dTextureClientBuffer)
- {
- return Error(EGL_BAD_PARAMETER);
- }
- if (buffer == nullptr)
- {
- return Error(EGL_BAD_PARAMETER);
- }
- break;
-
default:
return Error(EGL_BAD_PARAMETER);
}
@@ -751,8 +723,6 @@ Error ValidateCreatePbufferFromClientBuffer(Display *display, EGLenum buftype, E
}
}
- ANGLE_TRY(display->validateClientBuffer(config, buftype, buffer, attributes));
-
return Error(EGL_SUCCESS);
}
@@ -1576,41 +1546,4 @@ Error ValidateStreamPostD3DTextureNV12ANGLE(const Display *display,
return stream->validateD3D11NV12Texture(texture);
}
-
-Error ValidateSwapBuffersWithDamageEXT(const Display *display,
- const Surface *surface,
- EGLint *rects,
- EGLint n_rects)
-{
- Error error = ValidateSurface(display, surface);
- if (error.isError())
- {
- return error;
- }
-
- if (!display->getExtensions().swapBuffersWithDamage)
- {
- // It is out of spec what happens when calling an extension function when the extension is
- // not available. EGL_BAD_DISPLAY seems like a reasonable error.
- return Error(EGL_BAD_DISPLAY, "EGL_EXT_swap_buffers_with_damage is not available.");
- }
-
- if (surface == EGL_NO_SURFACE)
- {
- return Error(EGL_BAD_SURFACE, "Swap surface cannot be EGL_NO_SURFACE.");
- }
-
- if (n_rects < 0)
- {
- return Error(EGL_BAD_PARAMETER, "n_rects cannot be negative.");
- }
-
- if (n_rects > 0 && rects == nullptr)
- {
- return Error(EGL_BAD_PARAMETER, "n_rects cannot be greater than zero when rects is NULL.");
- }
-
- return Error(EGL_SUCCESS);
-}
-
} // namespace gl
diff --git a/gfx/angle/src/libANGLE/validationEGL.h b/gfx/angle/src/libANGLE/validationEGL.h
index c299f860c..049279087 100755
--- a/gfx/angle/src/libANGLE/validationEGL.h
+++ b/gfx/angle/src/libANGLE/validationEGL.h
@@ -32,9 +32,9 @@ class Surface;
// Object validation
Error ValidateDisplay(const Display *display);
-Error ValidateSurface(const Display *display, const Surface *surface);
+Error ValidateSurface(const Display *display, Surface *surface);
Error ValidateConfig(const Display *display, const Config *config);
-Error ValidateContext(const Display *display, const gl::Context *context);
+Error ValidateContext(const Display *display, gl::Context *context);
Error ValidateImage(const Display *display, const Image *image);
// Entry point validation
@@ -95,11 +95,6 @@ Error ValidateStreamPostD3DTextureNV12ANGLE(const Display *display,
void *texture,
const AttributeMap &attribs);
-Error ValidateSwapBuffersWithDamageEXT(const Display *display,
- const Surface *surface,
- EGLint *rects,
- EGLint n_rects);
-
// Other validation
Error ValidateCompatibleConfigs(const Display *display,
const Config *config1,
diff --git a/gfx/angle/src/libANGLE/validationES.cpp b/gfx/angle/src/libANGLE/validationES.cpp
index 79e3f6636..1bbfe866e 100755
--- a/gfx/angle/src/libANGLE/validationES.cpp
+++ b/gfx/angle/src/libANGLE/validationES.cpp
@@ -99,1190 +99,41 @@ bool ValidateDrawAttribs(ValidationContext *context, GLint primcount, GLint maxV
return true;
}
-bool ValidReadPixelsFormatType(ValidationContext *context,
- GLenum framebufferComponentType,
- GLenum format,
- GLenum type)
-{
- switch (framebufferComponentType)
- {
- case GL_UNSIGNED_NORMALIZED:
- // TODO(geofflang): Don't accept BGRA here. Some chrome internals appear to try to use
- // ReadPixels with BGRA even if the extension is not present
- return (format == GL_RGBA && type == GL_UNSIGNED_BYTE) ||
- (context->getExtensions().readFormatBGRA && format == GL_BGRA_EXT &&
- type == GL_UNSIGNED_BYTE);
-
- case GL_SIGNED_NORMALIZED:
- return (format == GL_RGBA && type == GL_UNSIGNED_BYTE);
-
- case GL_INT:
- return (format == GL_RGBA_INTEGER && type == GL_INT);
-
- case GL_UNSIGNED_INT:
- return (format == GL_RGBA_INTEGER && type == GL_UNSIGNED_INT);
-
- case GL_FLOAT:
- return (format == GL_RGBA && type == GL_FLOAT);
-
- default:
- UNREACHABLE();
- return false;
- }
-}
+} // anonymous namespace
-bool ValidCap(const Context *context, GLenum cap, bool queryOnly)
+bool ValidCap(const Context *context, GLenum cap)
{
switch (cap)
{
- // EXT_multisample_compatibility
- case GL_MULTISAMPLE_EXT:
- case GL_SAMPLE_ALPHA_TO_ONE_EXT:
- return context->getExtensions().multisampleCompatibility;
-
- case GL_CULL_FACE:
- case GL_POLYGON_OFFSET_FILL:
- case GL_SAMPLE_ALPHA_TO_COVERAGE:
- case GL_SAMPLE_COVERAGE:
- case GL_SCISSOR_TEST:
- case GL_STENCIL_TEST:
- case GL_DEPTH_TEST:
- case GL_BLEND:
- case GL_DITHER:
- return true;
-
- case GL_PRIMITIVE_RESTART_FIXED_INDEX:
- case GL_RASTERIZER_DISCARD:
- return (context->getClientMajorVersion() >= 3);
-
- case GL_DEBUG_OUTPUT_SYNCHRONOUS:
- case GL_DEBUG_OUTPUT:
- return context->getExtensions().debug;
-
- case GL_BIND_GENERATES_RESOURCE_CHROMIUM:
- return queryOnly && context->getExtensions().bindGeneratesResource;
-
- case GL_FRAMEBUFFER_SRGB_EXT:
- return context->getExtensions().sRGBWriteControl;
-
- default:
- return false;
- }
-}
-
-bool ValidateReadPixelsBase(ValidationContext *context,
- GLint x,
- GLint y,
- GLsizei width,
- GLsizei height,
- GLenum format,
- GLenum type,
- GLsizei bufSize,
- GLsizei *length,
- GLvoid *pixels)
-{
- if (length != nullptr)
- {
- *length = 0;
- }
-
- if (width < 0 || height < 0)
- {
- context->handleError(Error(GL_INVALID_VALUE, "width and height must be positive"));
- return false;
- }
-
- auto readFramebuffer = context->getGLState().getReadFramebuffer();
-
- if (readFramebuffer->checkStatus(context->getContextState()) != GL_FRAMEBUFFER_COMPLETE)
- {
- context->handleError(Error(GL_INVALID_FRAMEBUFFER_OPERATION));
- return false;
- }
-
- if (readFramebuffer->id() != 0 && readFramebuffer->getSamples(context->getContextState()) != 0)
- {
- context->handleError(Error(GL_INVALID_OPERATION));
- return false;
- }
-
- const Framebuffer *framebuffer = context->getGLState().getReadFramebuffer();
- ASSERT(framebuffer);
-
- if (framebuffer->getReadBufferState() == GL_NONE)
- {
- context->handleError(Error(GL_INVALID_OPERATION, "Read buffer is GL_NONE"));
- return false;
- }
-
- const FramebufferAttachment *readBuffer = framebuffer->getReadColorbuffer();
- if (!readBuffer)
- {
- context->handleError(Error(GL_INVALID_OPERATION));
- return false;
- }
-
- GLenum currentFormat = framebuffer->getImplementationColorReadFormat();
- GLenum currentType = framebuffer->getImplementationColorReadType();
- GLenum currentInternalFormat = readBuffer->getFormat().asSized();
-
- const gl::InternalFormat &internalFormatInfo = gl::GetInternalFormatInfo(currentInternalFormat);
- bool validFormatTypeCombination =
- ValidReadPixelsFormatType(context, internalFormatInfo.componentType, format, type);
-
- if (!(currentFormat == format && currentType == type) && !validFormatTypeCombination)
- {
- context->handleError(Error(GL_INVALID_OPERATION));
- return false;
- }
-
- // Check for pixel pack buffer related API errors
- gl::Buffer *pixelPackBuffer = context->getGLState().getTargetBuffer(GL_PIXEL_PACK_BUFFER);
- if (pixelPackBuffer != nullptr && pixelPackBuffer->isMapped())
- {
- // ...the buffer object's data store is currently mapped.
- context->handleError(Error(GL_INVALID_OPERATION, "Pixel pack buffer is mapped."));
- return false;
- }
-
- // .. the data would be packed to the buffer object such that the memory writes required
- // would exceed the data store size.
- GLenum sizedInternalFormat = GetSizedInternalFormat(format, type);
- const InternalFormat &formatInfo = GetInternalFormatInfo(sizedInternalFormat);
- const gl::Extents size(width, height, 1);
- const auto &pack = context->getGLState().getPackState();
-
- auto endByteOrErr = formatInfo.computePackUnpackEndByte(size, pack, false);
- if (endByteOrErr.isError())
- {
- context->handleError(endByteOrErr.getError());
- return false;
- }
-
- size_t endByte = endByteOrErr.getResult();
- if (bufSize >= 0)
- {
-
- if (static_cast<size_t>(bufSize) < endByte)
- {
- context->handleError(
- Error(GL_INVALID_OPERATION, "bufSize must be at least %u bytes.", endByte));
- return false;
- }
- }
-
- if (pixelPackBuffer != nullptr)
- {
- CheckedNumeric<size_t> checkedEndByte(endByte);
- CheckedNumeric<size_t> checkedOffset(reinterpret_cast<size_t>(pixels));
- checkedEndByte += checkedOffset;
-
- if (checkedEndByte.ValueOrDie() > static_cast<size_t>(pixelPackBuffer->getSize()))
- {
- // Overflow past the end of the buffer
- context->handleError(
- Error(GL_INVALID_OPERATION, "Writes would overflow the pixel pack buffer."));
- return false;
- }
- }
-
- if (length != nullptr)
- {
- if (endByte > static_cast<size_t>(std::numeric_limits<GLsizei>::max()))
- {
- context->handleError(
- Error(GL_INVALID_OPERATION, "length would overflow GLsizei.", endByte));
- return false;
- }
-
- *length = static_cast<GLsizei>(endByte);
- }
-
- return true;
-}
-
-bool ValidateGetRenderbufferParameterivBase(Context *context,
- GLenum target,
- GLenum pname,
- GLsizei *length)
-{
- if (length)
- {
- *length = 0;
- }
-
- if (target != GL_RENDERBUFFER)
- {
- context->handleError(Error(GL_INVALID_ENUM, "Invalid target."));
- return false;
- }
-
- Renderbuffer *renderbuffer = context->getGLState().getCurrentRenderbuffer();
- if (renderbuffer == nullptr)
- {
- context->handleError(Error(GL_INVALID_OPERATION, "No renderbuffer bound."));
- return false;
- }
-
- switch (pname)
- {
- case GL_RENDERBUFFER_WIDTH:
- case GL_RENDERBUFFER_HEIGHT:
- case GL_RENDERBUFFER_INTERNAL_FORMAT:
- case GL_RENDERBUFFER_RED_SIZE:
- case GL_RENDERBUFFER_GREEN_SIZE:
- case GL_RENDERBUFFER_BLUE_SIZE:
- case GL_RENDERBUFFER_ALPHA_SIZE:
- case GL_RENDERBUFFER_DEPTH_SIZE:
- case GL_RENDERBUFFER_STENCIL_SIZE:
- break;
-
- case GL_RENDERBUFFER_SAMPLES_ANGLE:
- if (!context->getExtensions().framebufferMultisample)
- {
- context->handleError(
- Error(GL_INVALID_ENUM, "GL_ANGLE_framebuffer_multisample is not enabled."));
- return false;
- }
- break;
-
- default:
- context->handleError(Error(GL_INVALID_ENUM, "Unknown pname."));
- return false;
- }
-
- if (length)
- {
- *length = 1;
- }
- return true;
-}
-
-bool ValidateGetShaderivBase(Context *context, GLuint shader, GLenum pname, GLsizei *length)
-{
- if (length)
- {
- *length = 0;
- }
-
- if (GetValidShader(context, shader) == nullptr)
- {
- return false;
- }
-
- switch (pname)
- {
- case GL_SHADER_TYPE:
- case GL_DELETE_STATUS:
- case GL_COMPILE_STATUS:
- case GL_INFO_LOG_LENGTH:
- case GL_SHADER_SOURCE_LENGTH:
- break;
-
- case GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE:
- if (!context->getExtensions().translatedShaderSource)
- {
- context->handleError(
- Error(GL_INVALID_ENUM, "GL_ANGLE_translated_shader_source is not enabled."));
- return false;
- }
- break;
-
- default:
- context->handleError(Error(GL_INVALID_ENUM, "Unknown pname."));
- return false;
- }
-
- if (length)
- {
- *length = 1;
- }
- return true;
-}
-
-bool ValidateGetTexParameterBase(Context *context, GLenum target, GLenum pname, GLsizei *length)
-{
- if (length)
- {
- *length = 0;
- }
-
- if (!ValidTextureTarget(context, target) && !ValidTextureExternalTarget(context, target))
- {
- context->handleError(Error(GL_INVALID_ENUM, "Invalid texture target"));
- return false;
- }
-
- if (context->getTargetTexture(target) == nullptr)
- {
- // Should only be possible for external textures
- context->handleError(Error(GL_INVALID_ENUM, "No texture bound."));
- return false;
- }
-
- switch (pname)
- {
- case GL_TEXTURE_MAG_FILTER:
- case GL_TEXTURE_MIN_FILTER:
- case GL_TEXTURE_WRAP_S:
- case GL_TEXTURE_WRAP_T:
- break;
-
- case GL_TEXTURE_USAGE_ANGLE:
- if (!context->getExtensions().textureUsage)
- {
- context->handleError(
- Error(GL_INVALID_ENUM, "GL_ANGLE_texture_usage is not enabled."));
- return false;
- }
- break;
-
- case GL_TEXTURE_MAX_ANISOTROPY_EXT:
- if (!context->getExtensions().textureFilterAnisotropic)
- {
- context->handleError(
- Error(GL_INVALID_ENUM, "GL_EXT_texture_filter_anisotropic is not enabled."));
- return false;
- }
- break;
-
- case GL_TEXTURE_IMMUTABLE_FORMAT:
- if (context->getClientMajorVersion() < 3 && !context->getExtensions().textureStorage)
- {
- context->handleError(
- Error(GL_INVALID_ENUM, "GL_EXT_texture_storage is not enabled."));
- return false;
- }
- break;
-
- case GL_TEXTURE_WRAP_R:
- case GL_TEXTURE_IMMUTABLE_LEVELS:
- case GL_TEXTURE_SWIZZLE_R:
- case GL_TEXTURE_SWIZZLE_G:
- case GL_TEXTURE_SWIZZLE_B:
- case GL_TEXTURE_SWIZZLE_A:
- case GL_TEXTURE_BASE_LEVEL:
- case GL_TEXTURE_MAX_LEVEL:
- case GL_TEXTURE_MIN_LOD:
- case GL_TEXTURE_MAX_LOD:
- case GL_TEXTURE_COMPARE_MODE:
- case GL_TEXTURE_COMPARE_FUNC:
- if (context->getClientMajorVersion() < 3)
- {
- context->handleError(Error(GL_INVALID_ENUM, "pname requires OpenGL ES 3.0."));
- return false;
- }
- break;
-
- case GL_TEXTURE_SRGB_DECODE_EXT:
- if (!context->getExtensions().textureSRGBDecode)
- {
- context->handleError(
- Error(GL_INVALID_ENUM, "GL_EXT_texture_sRGB_decode is not enabled."));
- return false;
- }
- break;
-
- default:
- context->handleError(Error(GL_INVALID_ENUM, "Unknown pname."));
- return false;
- }
-
- if (length)
- {
- *length = 1;
- }
- return true;
-}
-
-template <typename ParamType>
-bool ValidateTextureWrapModeValue(Context *context, ParamType *params, bool isExternalTextureTarget)
-{
- switch (ConvertToGLenum(params[0]))
- {
- case GL_CLAMP_TO_EDGE:
- break;
-
- case GL_REPEAT:
- case GL_MIRRORED_REPEAT:
- if (isExternalTextureTarget)
- {
- // OES_EGL_image_external specifies this error.
- context->handleError(Error(
- GL_INVALID_ENUM, "external textures only support CLAMP_TO_EDGE wrap mode"));
- return false;
- }
- break;
-
- default:
- context->handleError(Error(GL_INVALID_ENUM, "Unknown param value."));
- return false;
- }
-
- return true;
-}
-
-template <typename ParamType>
-bool ValidateTextureMinFilterValue(Context *context,
- ParamType *params,
- bool isExternalTextureTarget)
-{
- switch (ConvertToGLenum(params[0]))
- {
- case GL_NEAREST:
- case GL_LINEAR:
- break;
-
- case GL_NEAREST_MIPMAP_NEAREST:
- case GL_LINEAR_MIPMAP_NEAREST:
- case GL_NEAREST_MIPMAP_LINEAR:
- case GL_LINEAR_MIPMAP_LINEAR:
- if (isExternalTextureTarget)
- {
- // OES_EGL_image_external specifies this error.
- context->handleError(
- Error(GL_INVALID_ENUM,
- "external textures only support NEAREST and LINEAR filtering"));
- return false;
- }
- break;
-
- default:
- context->handleError(Error(GL_INVALID_ENUM, "Unknown param value."));
- return false;
- }
-
- return true;
-}
-
-template <typename ParamType>
-bool ValidateTextureMagFilterValue(Context *context, ParamType *params)
-{
- switch (ConvertToGLenum(params[0]))
- {
- case GL_NEAREST:
- case GL_LINEAR:
- break;
-
- default:
- context->handleError(Error(GL_INVALID_ENUM, "Unknown param value."));
- return false;
- }
-
- return true;
-}
-
-template <typename ParamType>
-bool ValidateTextureCompareModeValue(Context *context, ParamType *params)
-{
- // Acceptable mode parameters from GLES 3.0.2 spec, table 3.17
- switch (ConvertToGLenum(params[0]))
- {
- case GL_NONE:
- case GL_COMPARE_REF_TO_TEXTURE:
- break;
-
- default:
- context->handleError(Error(GL_INVALID_ENUM, "Unknown param value."));
- return false;
- }
-
- return true;
-}
-
-template <typename ParamType>
-bool ValidateTextureCompareFuncValue(Context *context, ParamType *params)
-{
- // Acceptable function parameters from GLES 3.0.2 spec, table 3.17
- switch (ConvertToGLenum(params[0]))
- {
- case GL_LEQUAL:
- case GL_GEQUAL:
- case GL_LESS:
- case GL_GREATER:
- case GL_EQUAL:
- case GL_NOTEQUAL:
- case GL_ALWAYS:
- case GL_NEVER:
- break;
-
- default:
- context->handleError(Error(GL_INVALID_ENUM, "Unknown param value."));
- return false;
- }
-
- return true;
-}
-
-template <typename ParamType>
-bool ValidateTextureSRGBDecodeValue(Context *context, ParamType *params)
-{
- if (!context->getExtensions().textureSRGBDecode)
- {
- context->handleError(Error(GL_INVALID_ENUM, "GL_EXT_texture_sRGB_decode is not enabled."));
- return false;
- }
-
- switch (ConvertToGLenum(params[0]))
- {
- case GL_DECODE_EXT:
- case GL_SKIP_DECODE_EXT:
- break;
-
- default:
- context->handleError(Error(GL_INVALID_ENUM, "Unknown param value."));
- return false;
- }
-
- return true;
-}
-
-template <typename ParamType>
-bool ValidateTexParameterBase(Context *context,
- GLenum target,
- GLenum pname,
- GLsizei bufSize,
- ParamType *params)
-{
- if (!ValidTextureTarget(context, target) && !ValidTextureExternalTarget(context, target))
- {
- context->handleError(Error(GL_INVALID_ENUM, "Invalid texture target"));
- return false;
- }
-
- if (context->getTargetTexture(target) == nullptr)
- {
- // Should only be possible for external textures
- context->handleError(Error(GL_INVALID_ENUM, "No texture bound."));
- return false;
- }
-
- const GLsizei minBufSize = 1;
- if (bufSize >= 0 && bufSize < minBufSize)
- {
- context->handleError(
- Error(GL_INVALID_OPERATION, "bufSize must be at least %i.", minBufSize));
- return false;
- }
-
- switch (pname)
- {
- case GL_TEXTURE_WRAP_R:
- case GL_TEXTURE_SWIZZLE_R:
- case GL_TEXTURE_SWIZZLE_G:
- case GL_TEXTURE_SWIZZLE_B:
- case GL_TEXTURE_SWIZZLE_A:
- case GL_TEXTURE_BASE_LEVEL:
- case GL_TEXTURE_MAX_LEVEL:
- case GL_TEXTURE_COMPARE_MODE:
- case GL_TEXTURE_COMPARE_FUNC:
- case GL_TEXTURE_MIN_LOD:
- case GL_TEXTURE_MAX_LOD:
- if (context->getClientMajorVersion() < 3)
- {
- context->handleError(Error(GL_INVALID_ENUM, "pname requires OpenGL ES 3.0."));
- return false;
- }
- if (target == GL_TEXTURE_EXTERNAL_OES &&
- !context->getExtensions().eglImageExternalEssl3)
- {
- context->handleError(Error(GL_INVALID_ENUM,
- "ES3 texture parameters are not available without "
- "GL_OES_EGL_image_external_essl3."));
- return false;
- }
- break;
-
- default:
- break;
- }
-
- switch (pname)
- {
- case GL_TEXTURE_WRAP_S:
- case GL_TEXTURE_WRAP_T:
- case GL_TEXTURE_WRAP_R:
- if (!ValidateTextureWrapModeValue(context, params, target == GL_TEXTURE_EXTERNAL_OES))
- {
- return false;
- }
- break;
-
- case GL_TEXTURE_MIN_FILTER:
- if (!ValidateTextureMinFilterValue(context, params, target == GL_TEXTURE_EXTERNAL_OES))
- {
- return false;
- }
- break;
-
- case GL_TEXTURE_MAG_FILTER:
- if (!ValidateTextureMagFilterValue(context, params))
- {
- return false;
- }
- break;
-
- case GL_TEXTURE_USAGE_ANGLE:
- switch (ConvertToGLenum(params[0]))
- {
- case GL_NONE:
- case GL_FRAMEBUFFER_ATTACHMENT_ANGLE:
- break;
-
- default:
- context->handleError(Error(GL_INVALID_ENUM, "Unknown param value."));
- return false;
- }
- break;
-
- case GL_TEXTURE_MAX_ANISOTROPY_EXT:
- if (!context->getExtensions().textureFilterAnisotropic)
- {
- context->handleError(
- Error(GL_INVALID_ENUM, "GL_EXT_texture_anisotropic is not enabled."));
- return false;
- }
-
- // we assume the parameter passed to this validation method is truncated, not rounded
- if (params[0] < 1)
- {
- context->handleError(Error(GL_INVALID_VALUE, "Max anisotropy must be at least 1."));
- return false;
- }
- break;
-
- case GL_TEXTURE_MIN_LOD:
- case GL_TEXTURE_MAX_LOD:
- // any value is permissible
- break;
-
- case GL_TEXTURE_COMPARE_MODE:
- if (!ValidateTextureCompareModeValue(context, params))
- {
- return false;
- }
- break;
-
- case GL_TEXTURE_COMPARE_FUNC:
- if (!ValidateTextureCompareFuncValue(context, params))
- {
- return false;
- }
- break;
-
- case GL_TEXTURE_SWIZZLE_R:
- case GL_TEXTURE_SWIZZLE_G:
- case GL_TEXTURE_SWIZZLE_B:
- case GL_TEXTURE_SWIZZLE_A:
- switch (ConvertToGLenum(params[0]))
- {
- case GL_RED:
- case GL_GREEN:
- case GL_BLUE:
- case GL_ALPHA:
- case GL_ZERO:
- case GL_ONE:
- break;
-
- default:
- context->handleError(Error(GL_INVALID_ENUM, "Unknown param value."));
- return false;
- }
- break;
-
- case GL_TEXTURE_BASE_LEVEL:
- if (params[0] < 0)
- {
- context->handleError(Error(GL_INVALID_VALUE, "Base level must be at least 0."));
- return false;
- }
- if (target == GL_TEXTURE_EXTERNAL_OES && static_cast<GLuint>(params[0]) != 0)
- {
- context->handleError(
- Error(GL_INVALID_OPERATION, "Base level must be 0 for external textures."));
- return false;
- }
- break;
-
- case GL_TEXTURE_MAX_LEVEL:
- if (params[0] < 0)
- {
- context->handleError(Error(GL_INVALID_VALUE, "Max level must be at least 0."));
- return false;
- }
- break;
-
- case GL_TEXTURE_SRGB_DECODE_EXT:
- if (!ValidateTextureSRGBDecodeValue(context, params))
- {
- return false;
- }
- break;
-
- default:
- context->handleError(Error(GL_INVALID_ENUM, "Unknown pname."));
- return false;
- }
-
- return true;
-}
-
-template <typename ParamType>
-bool ValidateSamplerParameterBase(Context *context,
- GLuint sampler,
- GLenum pname,
- GLsizei bufSize,
- ParamType *params)
-{
- if (context->getClientMajorVersion() < 3)
- {
- context->handleError(
- Error(GL_INVALID_OPERATION, "Context does not support OpenGL ES 3.0."));
- return false;
- }
-
- if (!context->isSampler(sampler))
- {
- context->handleError(Error(GL_INVALID_OPERATION, "Sampler is not valid."));
- return false;
- }
-
- const GLsizei minBufSize = 1;
- if (bufSize >= 0 && bufSize < minBufSize)
- {
- context->handleError(
- Error(GL_INVALID_OPERATION, "bufSize must be at least %i.", minBufSize));
- return false;
- }
-
- switch (pname)
- {
- case GL_TEXTURE_WRAP_S:
- case GL_TEXTURE_WRAP_T:
- case GL_TEXTURE_WRAP_R:
- if (!ValidateTextureWrapModeValue(context, params, false))
- {
- return false;
- }
- break;
-
- case GL_TEXTURE_MIN_FILTER:
- if (!ValidateTextureMinFilterValue(context, params, false))
- {
- return false;
- }
- break;
-
- case GL_TEXTURE_MAG_FILTER:
- if (!ValidateTextureMagFilterValue(context, params))
- {
- return false;
- }
- break;
-
- case GL_TEXTURE_MIN_LOD:
- case GL_TEXTURE_MAX_LOD:
- // any value is permissible
- break;
-
- case GL_TEXTURE_COMPARE_MODE:
- if (!ValidateTextureCompareModeValue(context, params))
- {
- return false;
- }
- break;
-
- case GL_TEXTURE_COMPARE_FUNC:
- if (!ValidateTextureCompareFuncValue(context, params))
- {
- return false;
- }
- break;
-
- case GL_TEXTURE_SRGB_DECODE_EXT:
- if (!ValidateTextureSRGBDecodeValue(context, params))
- {
- return false;
- }
- break;
-
- default:
- context->handleError(Error(GL_INVALID_ENUM, "Unknown pname."));
- return false;
- }
-
- return true;
-}
-
-bool ValidateGetSamplerParameterBase(Context *context,
- GLuint sampler,
- GLenum pname,
- GLsizei *length)
-{
- if (length)
- {
- *length = 0;
- }
-
- if (context->getClientMajorVersion() < 3)
- {
- context->handleError(
- Error(GL_INVALID_OPERATION, "Context does not support OpenGL ES 3.0."));
- return false;
- }
-
- if (!context->isSampler(sampler))
- {
- context->handleError(Error(GL_INVALID_OPERATION, "Sampler is not valid."));
- return false;
- }
-
- switch (pname)
- {
- case GL_TEXTURE_WRAP_S:
- case GL_TEXTURE_WRAP_T:
- case GL_TEXTURE_WRAP_R:
- case GL_TEXTURE_MIN_FILTER:
- case GL_TEXTURE_MAG_FILTER:
- case GL_TEXTURE_MIN_LOD:
- case GL_TEXTURE_MAX_LOD:
- case GL_TEXTURE_COMPARE_MODE:
- case GL_TEXTURE_COMPARE_FUNC:
- break;
-
- case GL_TEXTURE_SRGB_DECODE_EXT:
- if (!context->getExtensions().textureSRGBDecode)
- {
- context->handleError(
- Error(GL_INVALID_ENUM, "GL_EXT_texture_sRGB_decode is not enabled."));
- return false;
- }
- break;
-
- default:
- context->handleError(Error(GL_INVALID_ENUM, "Unknown pname."));
- return false;
- }
-
- if (length)
- {
- *length = 1;
- }
- return true;
-}
-
-bool ValidateGetVertexAttribBase(Context *context,
- GLuint index,
- GLenum pname,
- GLsizei *length,
- bool pointer,
- bool pureIntegerEntryPoint)
-{
- if (length)
- {
- *length = 0;
- }
-
- if (pureIntegerEntryPoint && context->getClientMajorVersion() < 3)
- {
- context->handleError(
- Error(GL_INVALID_OPERATION, "Context does not support OpenGL ES 3.0."));
- return false;
- }
-
- if (index >= context->getCaps().maxVertexAttributes)
- {
- context->handleError(Error(
- GL_INVALID_VALUE, "index must be less than the value of GL_MAX_VERTEX_ATTRIBUTES."));
- return false;
- }
-
- if (pointer)
- {
- if (pname != GL_VERTEX_ATTRIB_ARRAY_POINTER)
- {
- context->handleError(Error(GL_INVALID_ENUM, "Unknown pname."));
- return false;
- }
- }
- else
- {
- switch (pname)
- {
- case GL_VERTEX_ATTRIB_ARRAY_ENABLED:
- case GL_VERTEX_ATTRIB_ARRAY_SIZE:
- case GL_VERTEX_ATTRIB_ARRAY_STRIDE:
- case GL_VERTEX_ATTRIB_ARRAY_TYPE:
- case GL_VERTEX_ATTRIB_ARRAY_NORMALIZED:
- case GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING:
- case GL_CURRENT_VERTEX_ATTRIB:
- break;
-
- case GL_VERTEX_ATTRIB_ARRAY_DIVISOR:
- static_assert(
- GL_VERTEX_ATTRIB_ARRAY_DIVISOR == GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE,
- "ANGLE extension enums not equal to GL enums.");
- if (context->getClientMajorVersion() < 3 &&
- !context->getExtensions().instancedArrays)
- {
- context->handleError(Error(GL_INVALID_ENUM,
- "GL_VERTEX_ATTRIB_ARRAY_DIVISOR requires OpenGL ES "
- "3.0 or GL_ANGLE_instanced_arrays."));
- return false;
- }
- break;
-
- case GL_VERTEX_ATTRIB_ARRAY_INTEGER:
- if (context->getClientMajorVersion() < 3)
- {
- context->handleError(Error(GL_INVALID_ENUM, "pname requires OpenGL ES 3.0."));
- return false;
- }
- break;
-
- default:
- context->handleError(Error(GL_INVALID_ENUM, "Unknown pname."));
- return false;
- }
- }
-
- if (length)
- {
- if (pname == GL_CURRENT_VERTEX_ATTRIB)
- {
- *length = 4;
- }
- else
- {
- *length = 1;
- }
- }
-
- return true;
-}
-
-bool ValidateGetActiveUniformBlockivBase(Context *context,
- GLuint program,
- GLuint uniformBlockIndex,
- GLenum pname,
- GLsizei *length)
-{
- if (length)
- {
- *length = 0;
- }
-
- if (context->getClientMajorVersion() < 3)
- {
- context->handleError(
- Error(GL_INVALID_OPERATION, "Context does not support OpenGL ES 3.0."));
- return false;
- }
-
- Program *programObject = GetValidProgram(context, program);
- if (!programObject)
- {
- return false;
- }
-
- if (uniformBlockIndex >= programObject->getActiveUniformBlockCount())
- {
- context->handleError(
- Error(GL_INVALID_VALUE, "uniformBlockIndex exceeds active uniform block count."));
- return false;
- }
-
- switch (pname)
- {
- case GL_UNIFORM_BLOCK_BINDING:
- case GL_UNIFORM_BLOCK_DATA_SIZE:
- case GL_UNIFORM_BLOCK_NAME_LENGTH:
- case GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS:
- case GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES:
- case GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER:
- case GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER:
- break;
-
- default:
- context->handleError(Error(GL_INVALID_ENUM, "Unknown pname."));
- return false;
- }
-
- if (length)
- {
- if (pname == GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES)
- {
- const UniformBlock &uniformBlock =
- programObject->getUniformBlockByIndex(uniformBlockIndex);
- *length = static_cast<GLsizei>(uniformBlock.memberUniformIndexes.size());
- }
- else
- {
- *length = 1;
- }
- }
-
- return true;
-}
-
-bool ValidateGetBufferParameterBase(ValidationContext *context,
- GLenum target,
- GLenum pname,
- bool pointerVersion,
- GLsizei *numParams)
-{
- if (numParams)
- {
- *numParams = 0;
- }
-
- if (!ValidBufferTarget(context, target))
- {
- context->handleError(Error(GL_INVALID_ENUM, "Invalid buffer target."));
- return false;
- }
-
- const Buffer *buffer = context->getGLState().getTargetBuffer(target);
- if (!buffer)
- {
- // A null buffer means that "0" is bound to the requested buffer target
- context->handleError(Error(GL_INVALID_OPERATION, "No buffer bound."));
- return false;
- }
-
- const Extensions &extensions = context->getExtensions();
-
- switch (pname)
- {
- case GL_BUFFER_USAGE:
- case GL_BUFFER_SIZE:
- break;
-
- case GL_BUFFER_ACCESS_OES:
- if (!extensions.mapBuffer)
- {
- context->handleError(
- Error(GL_INVALID_ENUM, "pname requires OpenGL ES 3.0 or GL_OES_map_buffer."));
- return false;
- }
- break;
-
- case GL_BUFFER_MAPPED:
- static_assert(GL_BUFFER_MAPPED == GL_BUFFER_MAPPED_OES, "GL enums should be equal.");
- if (context->getClientMajorVersion() < 3 && !extensions.mapBuffer &&
- !extensions.mapBufferRange)
- {
- context->handleError(Error(
- GL_INVALID_ENUM,
- "pname requires OpenGL ES 3.0, GL_OES_map_buffer or GL_EXT_map_buffer_range."));
- return false;
- }
- break;
-
- case GL_BUFFER_MAP_POINTER:
- if (!pointerVersion)
- {
- context->handleError(
- Error(GL_INVALID_ENUM,
- "GL_BUFFER_MAP_POINTER can only be queried with GetBufferPointerv."));
- return false;
- }
- break;
-
- case GL_BUFFER_ACCESS_FLAGS:
- case GL_BUFFER_MAP_OFFSET:
- case GL_BUFFER_MAP_LENGTH:
- if (context->getClientMajorVersion() < 3 && !extensions.mapBufferRange)
- {
- context->handleError(Error(
- GL_INVALID_ENUM, "pname requires OpenGL ES 3.0 or GL_EXT_map_buffer_range."));
- return false;
- }
- break;
-
- default:
- context->handleError(Error(GL_INVALID_ENUM, "Unknown pname."));
- return false;
- }
-
- // All buffer parameter queries return one value.
- if (numParams)
- {
- *numParams = 1;
- }
-
- return true;
-}
-
-bool ValidateGetInternalFormativBase(Context *context,
- GLenum target,
- GLenum internalformat,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *numParams)
-{
- if (numParams)
- {
- *numParams = 0;
- }
-
- if (context->getClientMajorVersion() < 3)
- {
- context->handleError(
- Error(GL_INVALID_OPERATION, "Context does not support OpenGL ES 3.0."));
- return false;
- }
-
- const TextureCaps &formatCaps = context->getTextureCaps().get(internalformat);
- if (!formatCaps.renderable)
- {
- context->handleError(Error(GL_INVALID_ENUM, "Internal format is not renderable."));
- return false;
- }
+ // EXT_multisample_compatibility
+ case GL_MULTISAMPLE_EXT:
+ case GL_SAMPLE_ALPHA_TO_ONE_EXT:
+ return context->getExtensions().multisampleCompatibility;
+
+ case GL_CULL_FACE:
+ case GL_POLYGON_OFFSET_FILL:
+ case GL_SAMPLE_ALPHA_TO_COVERAGE:
+ case GL_SAMPLE_COVERAGE:
+ case GL_SCISSOR_TEST:
+ case GL_STENCIL_TEST:
+ case GL_DEPTH_TEST:
+ case GL_BLEND:
+ case GL_DITHER:
+ return true;
- switch (target)
- {
- case GL_RENDERBUFFER:
- break;
+ case GL_PRIMITIVE_RESTART_FIXED_INDEX:
+ case GL_RASTERIZER_DISCARD:
+ return (context->getClientMajorVersion() >= 3);
- default:
- context->handleError(Error(GL_INVALID_ENUM, "Invalid target."));
- return false;
- }
+ case GL_DEBUG_OUTPUT_SYNCHRONOUS:
+ case GL_DEBUG_OUTPUT:
+ return context->getExtensions().debug;
- if (bufSize < 0)
- {
- context->handleError(Error(GL_INVALID_VALUE, "bufSize cannot be negative."));
+ default:
return false;
}
-
- GLsizei maxWriteParams = 0;
- switch (pname)
- {
- case GL_NUM_SAMPLE_COUNTS:
- maxWriteParams = 1;
- break;
-
- case GL_SAMPLES:
- maxWriteParams = static_cast<GLsizei>(formatCaps.sampleCounts.size());
- break;
-
- default:
- context->handleError(Error(GL_INVALID_ENUM, "Unknown pname."));
- return false;
- }
-
- if (numParams)
- {
- // glGetInternalFormativ will not overflow bufSize
- *numParams = std::min(bufSize, maxWriteParams);
- }
-
- return true;
}
-} // anonymous namespace
-
bool ValidTextureTarget(const ValidationContext *context, GLenum target)
{
switch (target)
@@ -1382,7 +233,7 @@ bool ValidFramebufferTarget(GLenum target)
}
}
-bool ValidBufferTarget(const ValidationContext *context, GLenum target)
+bool ValidBufferTarget(const Context *context, GLenum target)
{
switch (target)
{
@@ -1406,6 +257,36 @@ bool ValidBufferTarget(const ValidationContext *context, GLenum target)
}
}
+bool ValidBufferParameter(const Context *context, GLenum pname)
+{
+ const Extensions &extensions = context->getExtensions();
+
+ switch (pname)
+ {
+ case GL_BUFFER_USAGE:
+ case GL_BUFFER_SIZE:
+ return true;
+
+ case GL_BUFFER_ACCESS_OES:
+ return extensions.mapBuffer;
+
+ case GL_BUFFER_MAPPED:
+ static_assert(GL_BUFFER_MAPPED == GL_BUFFER_MAPPED_OES, "GL enums should be equal.");
+ return (context->getClientMajorVersion() >= 3) || extensions.mapBuffer ||
+ extensions.mapBufferRange;
+
+ // GL_BUFFER_MAP_POINTER is a special case, and may only be
+ // queried with GetBufferPointerv
+ case GL_BUFFER_ACCESS_FLAGS:
+ case GL_BUFFER_MAP_OFFSET:
+ case GL_BUFFER_MAP_LENGTH:
+ return (context->getClientMajorVersion() >= 3) || extensions.mapBufferRange;
+
+ default:
+ return false;
+ }
+}
+
bool ValidMipLevel(const ValidationContext *context, GLenum target, GLint level)
{
const auto &caps = context->getCaps();
@@ -1513,75 +394,6 @@ bool ValidCompressedImageSize(const ValidationContext *context,
return true;
}
-bool ValidImageDataSize(ValidationContext *context,
- GLenum textureTarget,
- GLsizei width,
- GLsizei height,
- GLsizei depth,
- GLenum internalFormat,
- GLenum type,
- const GLvoid *pixels,
- GLsizei imageSize)
-{
- gl::Buffer *pixelUnpackBuffer = context->getGLState().getTargetBuffer(GL_PIXEL_UNPACK_BUFFER);
- if (pixelUnpackBuffer == nullptr && imageSize < 0)
- {
- // Checks are not required
- return true;
- }
-
- // ...the data would be unpacked from the buffer object such that the memory reads required
- // would exceed the data store size.
- GLenum sizedFormat = GetSizedInternalFormat(internalFormat, type);
- const gl::InternalFormat &formatInfo = gl::GetInternalFormatInfo(sizedFormat);
- const gl::Extents size(width, height, depth);
- const auto &unpack = context->getGLState().getUnpackState();
-
- bool targetIs3D = textureTarget == GL_TEXTURE_3D || textureTarget == GL_TEXTURE_2D_ARRAY;
- auto endByteOrErr = formatInfo.computePackUnpackEndByte(size, unpack, targetIs3D);
- if (endByteOrErr.isError())
- {
- context->handleError(endByteOrErr.getError());
- return false;
- }
-
- GLuint endByte = endByteOrErr.getResult();
-
- if (pixelUnpackBuffer)
- {
- CheckedNumeric<size_t> checkedEndByte(endByteOrErr.getResult());
- CheckedNumeric<size_t> checkedOffset(reinterpret_cast<size_t>(pixels));
- checkedEndByte += checkedOffset;
-
- if (!checkedEndByte.IsValid() ||
- (checkedEndByte.ValueOrDie() > static_cast<size_t>(pixelUnpackBuffer->getSize())))
- {
- // Overflow past the end of the buffer
- context->handleError(Error(GL_INVALID_OPERATION));
- return false;
- }
- }
- else
- {
- ASSERT(imageSize >= 0);
- if (pixels == nullptr && imageSize != 0)
- {
- context->handleError(
- Error(GL_INVALID_OPERATION, "imageSize must be 0 if no texture data is provided."));
- return false;
- }
-
- if (pixels != nullptr && endByte > static_cast<GLuint>(imageSize))
- {
- context->handleError(
- Error(GL_INVALID_OPERATION, "imageSize must be at least %u.", endByte));
- return false;
- }
- }
-
- return true;
-}
-
bool ValidQueryType(const Context *context, GLenum queryType)
{
static_assert(GL_ANY_SAMPLES_PASSED == GL_ANY_SAMPLES_PASSED_EXT, "GL extension enums not equal.");
@@ -1603,7 +415,7 @@ bool ValidQueryType(const Context *context, GLenum queryType)
}
}
-Program *GetValidProgram(ValidationContext *context, GLuint id)
+Program *GetValidProgram(Context *context, GLuint id)
{
// ES3 spec (section 2.11.1) -- "Commands that accept shader or program object names will generate the
// error INVALID_VALUE if the provided name is not the name of either a shader or program object and
@@ -1627,7 +439,7 @@ Program *GetValidProgram(ValidationContext *context, GLuint id)
return validProgram;
}
-Shader *GetValidShader(ValidationContext *context, GLuint id)
+Shader *GetValidShader(Context *context, GLuint id)
{
// See ValidProgram for spec details.
@@ -1670,8 +482,7 @@ bool ValidateAttachmentTarget(gl::Context *context, GLenum attachment)
break;
case GL_DEPTH_STENCIL_ATTACHMENT:
- if (!context->getExtensions().webglCompatibility &&
- context->getClientMajorVersion() < 3)
+ if (context->getClientMajorVersion() < 3)
{
context->handleError(Error(GL_INVALID_ENUM));
return false;
@@ -2004,6 +815,264 @@ bool ValidateBlitFramebufferParameters(ValidationContext *context,
return true;
}
+bool ValidateGetVertexAttribParameters(Context *context, GLenum pname)
+{
+ switch (pname)
+ {
+ case GL_VERTEX_ATTRIB_ARRAY_ENABLED:
+ case GL_VERTEX_ATTRIB_ARRAY_SIZE:
+ case GL_VERTEX_ATTRIB_ARRAY_STRIDE:
+ case GL_VERTEX_ATTRIB_ARRAY_TYPE:
+ case GL_VERTEX_ATTRIB_ARRAY_NORMALIZED:
+ case GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING:
+ case GL_CURRENT_VERTEX_ATTRIB:
+ return true;
+
+ case GL_VERTEX_ATTRIB_ARRAY_DIVISOR:
+ // Don't verify ES3 context because GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE uses
+ // the same constant.
+ static_assert(GL_VERTEX_ATTRIB_ARRAY_DIVISOR == GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE,
+ "ANGLE extension enums not equal to GL enums.");
+ return true;
+
+ case GL_VERTEX_ATTRIB_ARRAY_INTEGER:
+ if (context->getClientMajorVersion() < 3)
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return false;
+ }
+ return true;
+
+ default:
+ context->handleError(Error(GL_INVALID_ENUM));
+ return false;
+ }
+}
+
+bool ValidateTexParamParameters(gl::Context *context, GLenum target, GLenum pname, GLint param)
+{
+ switch (pname)
+ {
+ case GL_TEXTURE_WRAP_R:
+ case GL_TEXTURE_SWIZZLE_R:
+ case GL_TEXTURE_SWIZZLE_G:
+ case GL_TEXTURE_SWIZZLE_B:
+ case GL_TEXTURE_SWIZZLE_A:
+ case GL_TEXTURE_BASE_LEVEL:
+ case GL_TEXTURE_MAX_LEVEL:
+ case GL_TEXTURE_COMPARE_MODE:
+ case GL_TEXTURE_COMPARE_FUNC:
+ case GL_TEXTURE_MIN_LOD:
+ case GL_TEXTURE_MAX_LOD:
+ if (context->getClientMajorVersion() < 3)
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return false;
+ }
+ if (target == GL_TEXTURE_EXTERNAL_OES && !context->getExtensions().eglImageExternalEssl3)
+ {
+ context->handleError(Error(GL_INVALID_ENUM,
+ "ES3 texture parameters are not available without "
+ "GL_OES_EGL_image_external_essl3."));
+ return false;
+ }
+ break;
+
+ default: break;
+ }
+
+ switch (pname)
+ {
+ case GL_TEXTURE_WRAP_S:
+ case GL_TEXTURE_WRAP_T:
+ case GL_TEXTURE_WRAP_R:
+ switch (param)
+ {
+ case GL_CLAMP_TO_EDGE:
+ return true;
+ case GL_REPEAT:
+ case GL_MIRRORED_REPEAT:
+ if (target == GL_TEXTURE_EXTERNAL_OES)
+ {
+ // OES_EGL_image_external specifies this error.
+ context->handleError(Error(
+ GL_INVALID_ENUM, "external textures only support CLAMP_TO_EDGE wrap mode"));
+ return false;
+ }
+ return true;
+ default:
+ context->handleError(Error(GL_INVALID_ENUM));
+ return false;
+ }
+
+ case GL_TEXTURE_MIN_FILTER:
+ switch (param)
+ {
+ case GL_NEAREST:
+ case GL_LINEAR:
+ return true;
+ case GL_NEAREST_MIPMAP_NEAREST:
+ case GL_LINEAR_MIPMAP_NEAREST:
+ case GL_NEAREST_MIPMAP_LINEAR:
+ case GL_LINEAR_MIPMAP_LINEAR:
+ if (target == GL_TEXTURE_EXTERNAL_OES)
+ {
+ // OES_EGL_image_external specifies this error.
+ context->handleError(
+ Error(GL_INVALID_ENUM,
+ "external textures only support NEAREST and LINEAR filtering"));
+ return false;
+ }
+ return true;
+ default:
+ context->handleError(Error(GL_INVALID_ENUM));
+ return false;
+ }
+ break;
+
+ case GL_TEXTURE_MAG_FILTER:
+ switch (param)
+ {
+ case GL_NEAREST:
+ case GL_LINEAR:
+ return true;
+ default:
+ context->handleError(Error(GL_INVALID_ENUM));
+ return false;
+ }
+ break;
+
+ case GL_TEXTURE_USAGE_ANGLE:
+ switch (param)
+ {
+ case GL_NONE:
+ case GL_FRAMEBUFFER_ATTACHMENT_ANGLE:
+ return true;
+ default:
+ context->handleError(Error(GL_INVALID_ENUM));
+ return false;
+ }
+ break;
+
+ case GL_TEXTURE_MAX_ANISOTROPY_EXT:
+ if (!context->getExtensions().textureFilterAnisotropic)
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return false;
+ }
+
+ // we assume the parameter passed to this validation method is truncated, not rounded
+ if (param < 1)
+ {
+ context->handleError(Error(GL_INVALID_VALUE));
+ return false;
+ }
+ return true;
+
+ case GL_TEXTURE_MIN_LOD:
+ case GL_TEXTURE_MAX_LOD:
+ // any value is permissible
+ return true;
+
+ case GL_TEXTURE_COMPARE_MODE:
+ // Acceptable mode parameters from GLES 3.0.2 spec, table 3.17
+ switch (param)
+ {
+ case GL_NONE:
+ case GL_COMPARE_REF_TO_TEXTURE:
+ return true;
+ default:
+ context->handleError(Error(GL_INVALID_ENUM));
+ return false;
+ }
+ break;
+
+ case GL_TEXTURE_COMPARE_FUNC:
+ // Acceptable function parameters from GLES 3.0.2 spec, table 3.17
+ switch (param)
+ {
+ case GL_LEQUAL:
+ case GL_GEQUAL:
+ case GL_LESS:
+ case GL_GREATER:
+ case GL_EQUAL:
+ case GL_NOTEQUAL:
+ case GL_ALWAYS:
+ case GL_NEVER:
+ return true;
+ default:
+ context->handleError(Error(GL_INVALID_ENUM));
+ return false;
+ }
+ break;
+
+ case GL_TEXTURE_SWIZZLE_R:
+ case GL_TEXTURE_SWIZZLE_G:
+ case GL_TEXTURE_SWIZZLE_B:
+ case GL_TEXTURE_SWIZZLE_A:
+ switch (param)
+ {
+ case GL_RED:
+ case GL_GREEN:
+ case GL_BLUE:
+ case GL_ALPHA:
+ case GL_ZERO:
+ case GL_ONE:
+ return true;
+ default:
+ context->handleError(Error(GL_INVALID_ENUM));
+ return false;
+ }
+ break;
+
+ case GL_TEXTURE_BASE_LEVEL:
+ if (param < 0)
+ {
+ context->handleError(Error(GL_INVALID_VALUE));
+ return false;
+ }
+ if (target == GL_TEXTURE_EXTERNAL_OES && param != 0)
+ {
+ context->handleError(
+ Error(GL_INVALID_OPERATION, "Base level must be 0 for external textures."));
+ return false;
+ }
+ return true;
+
+ case GL_TEXTURE_MAX_LEVEL:
+ if (param < 0)
+ {
+ context->handleError(Error(GL_INVALID_VALUE));
+ return false;
+ }
+ return true;
+ default:
+ context->handleError(Error(GL_INVALID_ENUM));
+ return false;
+ }
+}
+
+bool ValidateSamplerObjectParameter(gl::Context *context, GLenum pname)
+{
+ switch (pname)
+ {
+ case GL_TEXTURE_MIN_FILTER:
+ case GL_TEXTURE_MAG_FILTER:
+ case GL_TEXTURE_WRAP_S:
+ case GL_TEXTURE_WRAP_T:
+ case GL_TEXTURE_WRAP_R:
+ case GL_TEXTURE_MIN_LOD:
+ case GL_TEXTURE_MAX_LOD:
+ case GL_TEXTURE_COMPARE_MODE:
+ case GL_TEXTURE_COMPARE_FUNC:
+ return true;
+
+ default:
+ context->handleError(Error(GL_INVALID_ENUM));
+ return false;
+ }
+}
+
bool ValidateReadPixels(ValidationContext *context,
GLint x,
GLint y,
@@ -2013,33 +1082,53 @@ bool ValidateReadPixels(ValidationContext *context,
GLenum type,
GLvoid *pixels)
{
- return ValidateReadPixelsBase(context, x, y, width, height, format, type, -1, nullptr, pixels);
-}
+ if (width < 0 || height < 0)
+ {
+ context->handleError(Error(GL_INVALID_VALUE, "width and height must be positive"));
+ return false;
+ }
-bool ValidateReadPixelsRobustANGLE(ValidationContext *context,
- GLint x,
- GLint y,
- GLsizei width,
- GLsizei height,
- GLenum format,
- GLenum type,
- GLsizei bufSize,
- GLsizei *length,
- GLvoid *pixels)
-{
- if (!ValidateRobustEntryPoint(context, bufSize))
+ auto readFramebuffer = context->getGLState().getReadFramebuffer();
+
+ if (readFramebuffer->checkStatus(context->getContextState()) != GL_FRAMEBUFFER_COMPLETE)
{
+ context->handleError(Error(GL_INVALID_FRAMEBUFFER_OPERATION));
return false;
}
- if (!ValidateReadPixelsBase(context, x, y, width, height, format, type, bufSize, length,
- pixels))
+ if (readFramebuffer->id() != 0 && readFramebuffer->getSamples(context->getContextState()) != 0)
{
+ context->handleError(Error(GL_INVALID_OPERATION));
return false;
}
- if (!ValidateRobustBufferSize(context, bufSize, *length))
+ const Framebuffer *framebuffer = context->getGLState().getReadFramebuffer();
+ ASSERT(framebuffer);
+
+ if (framebuffer->getReadBufferState() == GL_NONE)
{
+ context->handleError(Error(GL_INVALID_OPERATION, "Read buffer is GL_NONE"));
+ return false;
+ }
+
+ const FramebufferAttachment *readBuffer = framebuffer->getReadColorbuffer();
+ if (!readBuffer)
+ {
+ context->handleError(Error(GL_INVALID_OPERATION));
+ return false;
+ }
+
+ GLenum currentFormat = framebuffer->getImplementationColorReadFormat();
+ GLenum currentType = framebuffer->getImplementationColorReadType();
+ GLenum currentInternalFormat = readBuffer->getFormat().asSized();
+ GLuint clientVersion = context->getClientMajorVersion();
+
+ bool validReadFormat = (clientVersion < 3) ? ValidES2ReadFormatType(context, format, type) :
+ ValidES3ReadFormatType(context, currentInternalFormat, format, type);
+
+ if (!(currentFormat == format && currentType == type) && !validReadFormat)
+ {
+ context->handleError(Error(GL_INVALID_OPERATION));
return false;
}
@@ -2062,37 +1151,35 @@ bool ValidateReadnPixelsEXT(Context *context,
return false;
}
- return ValidateReadPixelsBase(context, x, y, width, height, format, type, bufSize, nullptr,
- pixels);
-}
+ GLenum sizedInternalFormat = GetSizedInternalFormat(format, type);
+ const InternalFormat &sizedFormatInfo = GetInternalFormatInfo(sizedInternalFormat);
-bool ValidateReadnPixelsRobustANGLE(ValidationContext *context,
- GLint x,
- GLint y,
- GLsizei width,
- GLsizei height,
- GLenum format,
- GLenum type,
- GLsizei bufSize,
- GLsizei *length,
- GLvoid *data)
-{
- if (!ValidateRobustEntryPoint(context, bufSize))
+ auto outputPitchOrErr =
+ sizedFormatInfo.computeRowPitch(type, width, context->getGLState().getPackAlignment(),
+ context->getGLState().getPackRowLength());
+
+ if (outputPitchOrErr.isError())
{
+ context->handleError(outputPitchOrErr.getError());
return false;
}
- if (!ValidateReadPixelsBase(context, x, y, width, height, format, type, bufSize, length, data))
+ CheckedNumeric<GLuint> checkedOutputPitch(outputPitchOrErr.getResult());
+ auto checkedRequiredSize = checkedOutputPitch * height;
+ if (!checkedRequiredSize.IsValid())
{
+ context->handleError(Error(GL_INVALID_OPERATION, "Unsigned multiplication overflow."));
return false;
}
- if (!ValidateRobustBufferSize(context, bufSize, *length))
+ // sized query sanity check
+ if (checkedRequiredSize.ValueOrDie() > static_cast<GLuint>(bufSize))
{
+ context->handleError(Error(GL_INVALID_OPERATION));
return false;
}
- return true;
+ return ValidateReadPixels(context, x, y, width, height, format, type, pixels);
}
bool ValidateGenQueriesEXT(gl::Context *context, GLsizei n)
@@ -2247,13 +1334,8 @@ bool ValidateQueryCounterEXT(Context *context, GLuint id, GLenum target)
return true;
}
-bool ValidateGetQueryivBase(Context *context, GLenum target, GLenum pname, GLsizei *numParams)
+bool ValidateGetQueryivBase(Context *context, GLenum target, GLenum pname)
{
- if (numParams)
- {
- *numParams = 0;
- }
-
if (!ValidQueryType(context, target) && target != GL_TIMESTAMP_EXT)
{
context->handleError(Error(GL_INVALID_ENUM, "Invalid query type"));
@@ -2283,12 +1365,6 @@ bool ValidateGetQueryivBase(Context *context, GLenum target, GLenum pname, GLsiz
return false;
}
- if (numParams)
- {
- // All queries return only one value
- *numParams = 1;
- }
-
return true;
}
@@ -2301,41 +1377,11 @@ bool ValidateGetQueryivEXT(Context *context, GLenum target, GLenum pname, GLint
return false;
}
- return ValidateGetQueryivBase(context, target, pname, nullptr);
+ return ValidateGetQueryivBase(context, target, pname);
}
-bool ValidateGetQueryivRobustANGLE(Context *context,
- GLenum target,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params)
+bool ValidateGetQueryObjectValueBase(Context *context, GLuint id, GLenum pname)
{
- if (!ValidateRobustEntryPoint(context, bufSize))
- {
- return false;
- }
-
- if (!ValidateGetQueryivBase(context, target, pname, length))
- {
- return false;
- }
-
- if (!ValidateRobustBufferSize(context, bufSize, *length))
- {
- return false;
- }
-
- return true;
-}
-
-bool ValidateGetQueryObjectValueBase(Context *context, GLuint id, GLenum pname, GLsizei *numParams)
-{
- if (numParams)
- {
- *numParams = 0;
- }
-
Query *queryObject = context->getQuery(id, false, GL_NONE);
if (!queryObject)
@@ -2361,11 +1407,6 @@ bool ValidateGetQueryObjectValueBase(Context *context, GLuint id, GLenum pname,
return false;
}
- if (numParams)
- {
- *numParams = 1;
- }
-
return true;
}
@@ -2376,38 +1417,7 @@ bool ValidateGetQueryObjectivEXT(Context *context, GLuint id, GLenum pname, GLin
context->handleError(Error(GL_INVALID_OPERATION, "Timer query extension not enabled"));
return false;
}
- return ValidateGetQueryObjectValueBase(context, id, pname, nullptr);
-}
-
-bool ValidateGetQueryObjectivRobustANGLE(Context *context,
- GLuint id,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params)
-{
- if (!context->getExtensions().disjointTimerQuery)
- {
- context->handleError(Error(GL_INVALID_OPERATION, "Timer query extension not enabled"));
- return false;
- }
-
- if (!ValidateRobustEntryPoint(context, bufSize))
- {
- return false;
- }
-
- if (!ValidateGetQueryObjectValueBase(context, id, pname, length))
- {
- return false;
- }
-
- if (!ValidateRobustBufferSize(context, bufSize, *length))
- {
- return false;
- }
-
- return true;
+ return ValidateGetQueryObjectValueBase(context, id, pname);
}
bool ValidateGetQueryObjectuivEXT(Context *context, GLuint id, GLenum pname, GLuint *params)
@@ -2418,39 +1428,7 @@ bool ValidateGetQueryObjectuivEXT(Context *context, GLuint id, GLenum pname, GLu
context->handleError(Error(GL_INVALID_OPERATION, "Query extension not enabled"));
return false;
}
- return ValidateGetQueryObjectValueBase(context, id, pname, nullptr);
-}
-
-bool ValidateGetQueryObjectuivRobustANGLE(Context *context,
- GLuint id,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLuint *params)
-{
- if (!context->getExtensions().disjointTimerQuery &&
- !context->getExtensions().occlusionQueryBoolean && !context->getExtensions().syncQuery)
- {
- context->handleError(Error(GL_INVALID_OPERATION, "Query extension not enabled"));
- return false;
- }
-
- if (!ValidateRobustEntryPoint(context, bufSize))
- {
- return false;
- }
-
- if (!ValidateGetQueryObjectValueBase(context, id, pname, length))
- {
- return false;
- }
-
- if (!ValidateRobustBufferSize(context, bufSize, *length))
- {
- return false;
- }
-
- return true;
+ return ValidateGetQueryObjectValueBase(context, id, pname);
}
bool ValidateGetQueryObjecti64vEXT(Context *context, GLuint id, GLenum pname, GLint64 *params)
@@ -2460,38 +1438,7 @@ bool ValidateGetQueryObjecti64vEXT(Context *context, GLuint id, GLenum pname, GL
context->handleError(Error(GL_INVALID_OPERATION, "Timer query extension not enabled"));
return false;
}
- return ValidateGetQueryObjectValueBase(context, id, pname, nullptr);
-}
-
-bool ValidateGetQueryObjecti64vRobustANGLE(Context *context,
- GLuint id,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint64 *params)
-{
- if (!context->getExtensions().disjointTimerQuery)
- {
- context->handleError(Error(GL_INVALID_OPERATION, "Timer query extension not enabled"));
- return false;
- }
-
- if (!ValidateRobustEntryPoint(context, bufSize))
- {
- return false;
- }
-
- if (!ValidateGetQueryObjectValueBase(context, id, pname, length))
- {
- return false;
- }
-
- if (!ValidateRobustBufferSize(context, bufSize, *length))
- {
- return false;
- }
-
- return true;
+ return ValidateGetQueryObjectValueBase(context, id, pname);
}
bool ValidateGetQueryObjectui64vEXT(Context *context, GLuint id, GLenum pname, GLuint64 *params)
@@ -2501,38 +1448,7 @@ bool ValidateGetQueryObjectui64vEXT(Context *context, GLuint id, GLenum pname, G
context->handleError(Error(GL_INVALID_OPERATION, "Timer query extension not enabled"));
return false;
}
- return ValidateGetQueryObjectValueBase(context, id, pname, nullptr);
-}
-
-bool ValidateGetQueryObjectui64vRobustANGLE(Context *context,
- GLuint id,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLuint64 *params)
-{
- if (!context->getExtensions().disjointTimerQuery)
- {
- context->handleError(Error(GL_INVALID_OPERATION, "Timer query extension not enabled"));
- return false;
- }
-
- if (!ValidateRobustEntryPoint(context, bufSize))
- {
- return false;
- }
-
- if (!ValidateGetQueryObjectValueBase(context, id, pname, length))
- {
- return false;
- }
-
- if (!ValidateRobustBufferSize(context, bufSize, *length))
- {
- return false;
- }
-
- return true;
+ return ValidateGetQueryObjectValueBase(context, id, pname);
}
static bool ValidateUniformCommonBase(gl::Context *context,
@@ -2671,12 +1587,10 @@ bool ValidateStateQuery(ValidationContext *context,
case GL_TEXTURE_BINDING_2D_ARRAY:
break;
case GL_TEXTURE_BINDING_EXTERNAL_OES:
- if (!context->getExtensions().eglStreamConsumerExternal &&
- !context->getExtensions().eglImageExternal)
+ if (!context->getExtensions().eglStreamConsumerExternal)
{
- context->handleError(Error(GL_INVALID_ENUM,
- "Neither NV_EGL_stream_consumer_external nor "
- "GL_OES_EGL_image_external extensions enabled"));
+ context->handleError(
+ Error(GL_INVALID_ENUM, "NV_EGL_stream_consumer_external extension not enabled"));
return false;
}
break;
@@ -2714,31 +1628,7 @@ bool ValidateStateQuery(ValidationContext *context,
}
// pname is valid, but there are no parameters to return
- if (*numParams == 0)
- {
- return false;
- }
-
- return true;
-}
-
-bool ValidateRobustStateQuery(ValidationContext *context,
- GLenum pname,
- GLsizei bufSize,
- GLenum *nativeType,
- unsigned int *numParams)
-{
- if (!ValidateRobustEntryPoint(context, bufSize))
- {
- return false;
- }
-
- if (!ValidateStateQuery(context, pname, nativeType, numParams))
- {
- return false;
- }
-
- if (!ValidateRobustBufferSize(context, bufSize, *numParams))
+ if (numParams == 0)
{
return false;
}
@@ -2882,7 +1772,7 @@ bool ValidateCopyTexImageParametersBase(ValidationContext *context,
return false;
}
- if (!formatInfo.textureSupport(context->getClientVersion(), context->getExtensions()))
+ if (!formatInfo.textureSupport(context->getClientMajorVersion(), context->getExtensions()))
{
context->handleError(Error(GL_INVALID_ENUM));
return false;
@@ -3219,7 +2109,7 @@ bool ValidateDrawElements(ValidationContext *context,
return false;
}
- if (!ValidateDrawAttribs(context, primcount, static_cast<GLint>(indexRangeOut->end + 1)))
+ if (!ValidateDrawAttribs(context, primcount, static_cast<GLint>(indexRangeOut->vertexCount())))
{
return false;
}
@@ -3426,28 +2316,13 @@ bool ValidateGetUniformiv(Context *context, GLuint program, GLint location, GLin
return ValidateGetUniformBase(context, program, location);
}
-static bool ValidateSizedGetUniform(Context *context,
- GLuint program,
- GLint location,
- GLsizei bufSize,
- GLsizei *length)
+static bool ValidateSizedGetUniform(Context *context, GLuint program, GLint location, GLsizei bufSize)
{
- if (length)
- {
- *length = 0;
- }
-
if (!ValidateGetUniformBase(context, program, location))
{
return false;
}
- if (bufSize < 0)
- {
- context->handleError(Error(GL_INVALID_VALUE, "bufSize cannot be negative."));
- return false;
- }
-
gl::Program *programObject = context->getProgram(program);
ASSERT(programObject);
@@ -3456,82 +2331,21 @@ static bool ValidateSizedGetUniform(Context *context,
size_t requiredBytes = VariableExternalSize(uniform.type);
if (static_cast<size_t>(bufSize) < requiredBytes)
{
- context->handleError(
- Error(GL_INVALID_OPERATION, "bufSize of at least %u is required.", requiredBytes));
+ context->handleError(Error(GL_INVALID_OPERATION));
return false;
}
- if (length)
- {
- *length = VariableComponentCount(uniform.type);
- }
-
return true;
}
bool ValidateGetnUniformfvEXT(Context *context, GLuint program, GLint location, GLsizei bufSize, GLfloat* params)
{
- return ValidateSizedGetUniform(context, program, location, bufSize, nullptr);
+ return ValidateSizedGetUniform(context, program, location, bufSize);
}
bool ValidateGetnUniformivEXT(Context *context, GLuint program, GLint location, GLsizei bufSize, GLint* params)
{
- return ValidateSizedGetUniform(context, program, location, bufSize, nullptr);
-}
-
-bool ValidateGetUniformfvRobustANGLE(Context *context,
- GLuint program,
- GLint location,
- GLsizei bufSize,
- GLsizei *length,
- GLfloat *params)
-{
- if (!ValidateRobustEntryPoint(context, bufSize))
- {
- return false;
- }
-
- // bufSize is validated in ValidateSizedGetUniform
- return ValidateSizedGetUniform(context, program, location, bufSize, length);
-}
-
-bool ValidateGetUniformivRobustANGLE(Context *context,
- GLuint program,
- GLint location,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params)
-{
- if (!ValidateRobustEntryPoint(context, bufSize))
- {
- return false;
- }
-
- // bufSize is validated in ValidateSizedGetUniform
- return ValidateSizedGetUniform(context, program, location, bufSize, length);
-}
-
-bool ValidateGetUniformuivRobustANGLE(Context *context,
- GLuint program,
- GLint location,
- GLsizei bufSize,
- GLsizei *length,
- GLuint *params)
-{
- if (!ValidateRobustEntryPoint(context, bufSize))
- {
- return false;
- }
-
- if (context->getClientMajorVersion() < 3)
- {
- context->handleError(
- Error(GL_INVALID_OPERATION, "Entry point requires at least OpenGL ES 3.0."));
- return false;
- }
-
- // bufSize is validated in ValidateSizedGetUniform
- return ValidateSizedGetUniform(context, program, location, bufSize, length);
+ return ValidateSizedGetUniform(context, program, location, bufSize);
}
bool ValidateDiscardFramebufferBase(Context *context, GLenum target, GLsizei numAttachments,
@@ -3979,56 +2793,32 @@ bool ValidateCopyTexSubImage2D(Context *context,
yoffset, 0, x, y, width, height, 0);
}
-bool ValidateGetBufferPointervBase(Context *context,
- GLenum target,
- GLenum pname,
- GLsizei *length,
- void **params)
+bool ValidateGetBufferPointervBase(Context *context, GLenum target, GLenum pname, void **params)
{
- if (length)
- {
- *length = 0;
- }
-
- if (context->getClientMajorVersion() < 3 && !context->getExtensions().mapBuffer)
- {
- context->handleError(
- Error(GL_INVALID_OPERATION,
- "Context does not support OpenGL ES 3.0 or GL_OES_map_buffer is not enabled."));
- return false;
- }
-
if (!ValidBufferTarget(context, target))
{
context->handleError(Error(GL_INVALID_ENUM, "Buffer target not valid: 0x%X", target));
return false;
}
- switch (pname)
+ if (pname != GL_BUFFER_MAP_POINTER)
{
- case GL_BUFFER_MAP_POINTER:
- break;
-
- default:
- context->handleError(Error(GL_INVALID_ENUM, "Unknown pname."));
- return false;
+ context->handleError(Error(GL_INVALID_ENUM, "pname not valid: 0x%X", pname));
+ return false;
}
+ Buffer *buffer = context->getGLState().getTargetBuffer(target);
+
// GLES 3.0 section 2.10.1: "Attempts to attempts to modify or query buffer object state for a
// target bound to zero generate an INVALID_OPERATION error."
// GLES 3.1 section 6.6 explicitly specifies this error.
- if (context->getGLState().getTargetBuffer(target) == nullptr)
+ if (!buffer)
{
context->handleError(
Error(GL_INVALID_OPERATION, "Can not get pointer for reserved buffer name zero."));
return false;
}
- if (length)
- {
- *length = 1;
- }
-
return true;
}
@@ -4310,981 +3100,4 @@ bool ValidateGenOrDelete(Context *context, GLint n)
return true;
}
-bool ValidateEnable(Context *context, GLenum cap)
-{
- if (!ValidCap(context, cap, false))
- {
- context->handleError(Error(GL_INVALID_ENUM, "Invalid cap."));
- return false;
- }
-
- if (context->getLimitations().noSampleAlphaToCoverageSupport &&
- cap == GL_SAMPLE_ALPHA_TO_COVERAGE)
- {
- const char *errorMessage = "Current renderer doesn't support alpha-to-coverage";
- context->handleError(Error(GL_INVALID_OPERATION, errorMessage));
-
- // We also output an error message to the debugger window if tracing is active, so that
- // developers can see the error message.
- ERR("%s", errorMessage);
- return false;
- }
-
- return true;
-}
-
-bool ValidateDisable(Context *context, GLenum cap)
-{
- if (!ValidCap(context, cap, false))
- {
- context->handleError(Error(GL_INVALID_ENUM, "Invalid cap."));
- return false;
- }
-
- return true;
-}
-
-bool ValidateIsEnabled(Context *context, GLenum cap)
-{
- if (!ValidCap(context, cap, true))
- {
- context->handleError(Error(GL_INVALID_ENUM, "Invalid cap."));
- return false;
- }
-
- return true;
-}
-
-bool ValidateRobustEntryPoint(ValidationContext *context, GLsizei bufSize)
-{
- if (!context->getExtensions().robustClientMemory)
- {
- context->handleError(
- Error(GL_INVALID_OPERATION, "GL_ANGLE_robust_client_memory is not available."));
- return false;
- }
-
- if (bufSize < 0)
- {
- context->handleError(Error(GL_INVALID_VALUE, "bufSize cannot be negative."));
- return false;
- }
-
- return true;
-}
-
-bool ValidateRobustBufferSize(ValidationContext *context, GLsizei bufSize, GLsizei numParams)
-{
- if (bufSize < numParams)
- {
- context->handleError(Error(GL_INVALID_OPERATION,
- "%u parameters are required but %i were provided.", numParams,
- bufSize));
- return false;
- }
-
- return true;
-}
-
-bool ValidateGetFramebufferAttachmentParameteriv(ValidationContext *context,
- GLenum target,
- GLenum attachment,
- GLenum pname,
- GLsizei *numParams)
-{
- // Only one parameter is returned from glGetFramebufferAttachmentParameteriv
- *numParams = 1;
-
- if (!ValidFramebufferTarget(target))
- {
- context->handleError(Error(GL_INVALID_ENUM));
- return false;
- }
-
- int clientVersion = context->getClientMajorVersion();
-
- switch (pname)
- {
- case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE:
- case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME:
- case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL:
- case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE:
- break;
-
- case GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING:
- if (clientVersion < 3 && !context->getExtensions().sRGB)
- {
- context->handleError(Error(GL_INVALID_ENUM));
- return false;
- }
- break;
-
- case GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE:
- case GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE:
- case GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE:
- case GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE:
- case GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE:
- case GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE:
- case GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE:
- case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER:
- if (clientVersion < 3)
- {
- context->handleError(Error(GL_INVALID_ENUM));
- return false;
- }
- break;
-
- default:
- context->handleError(Error(GL_INVALID_ENUM));
- return false;
- }
-
- // Determine if the attachment is a valid enum
- switch (attachment)
- {
- case GL_BACK:
- case GL_FRONT:
- case GL_DEPTH:
- case GL_STENCIL:
- case GL_DEPTH_STENCIL_ATTACHMENT:
- if (clientVersion < 3)
- {
- context->handleError(Error(GL_INVALID_ENUM));
- return false;
- }
- break;
-
- case GL_DEPTH_ATTACHMENT:
- case GL_STENCIL_ATTACHMENT:
- break;
-
- default:
- if (attachment < GL_COLOR_ATTACHMENT0_EXT ||
- (attachment - GL_COLOR_ATTACHMENT0_EXT) >= context->getCaps().maxColorAttachments)
- {
- context->handleError(Error(GL_INVALID_ENUM));
- return false;
- }
- break;
- }
-
- const Framebuffer *framebuffer = context->getGLState().getTargetFramebuffer(target);
- ASSERT(framebuffer);
-
- if (framebuffer->id() == 0)
- {
- if (clientVersion < 3)
- {
- context->handleError(Error(GL_INVALID_OPERATION));
- return false;
- }
-
- switch (attachment)
- {
- case GL_BACK:
- case GL_DEPTH:
- case GL_STENCIL:
- break;
-
- default:
- context->handleError(Error(GL_INVALID_OPERATION));
- return false;
- }
- }
- else
- {
- if (attachment >= GL_COLOR_ATTACHMENT0_EXT && attachment <= GL_COLOR_ATTACHMENT15_EXT)
- {
- // Valid attachment query
- }
- else
- {
- switch (attachment)
- {
- case GL_DEPTH_ATTACHMENT:
- case GL_STENCIL_ATTACHMENT:
- break;
-
- case GL_DEPTH_STENCIL_ATTACHMENT:
- if (!framebuffer->hasValidDepthStencil())
- {
- context->handleError(Error(GL_INVALID_OPERATION));
- return false;
- }
- break;
-
- default:
- context->handleError(Error(GL_INVALID_OPERATION));
- return false;
- }
- }
- }
-
- const FramebufferAttachment *attachmentObject = framebuffer->getAttachment(attachment);
- if (attachmentObject)
- {
- ASSERT(attachmentObject->type() == GL_RENDERBUFFER ||
- attachmentObject->type() == GL_TEXTURE ||
- attachmentObject->type() == GL_FRAMEBUFFER_DEFAULT);
-
- switch (pname)
- {
- case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME:
- if (attachmentObject->type() != GL_RENDERBUFFER &&
- attachmentObject->type() != GL_TEXTURE)
- {
- context->handleError(Error(GL_INVALID_ENUM));
- return false;
- }
- break;
-
- case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL:
- if (attachmentObject->type() != GL_TEXTURE)
- {
- context->handleError(Error(GL_INVALID_ENUM));
- return false;
- }
- break;
-
- case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE:
- if (attachmentObject->type() != GL_TEXTURE)
- {
- context->handleError(Error(GL_INVALID_ENUM));
- return false;
- }
- break;
-
- case GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE:
- if (attachment == GL_DEPTH_STENCIL_ATTACHMENT)
- {
- context->handleError(Error(GL_INVALID_OPERATION));
- return false;
- }
- break;
-
- case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER:
- if (attachmentObject->type() != GL_TEXTURE)
- {
- context->handleError(Error(GL_INVALID_ENUM));
- return false;
- }
- break;
-
- default:
- break;
- }
- }
- else
- {
- // ES 2.0.25 spec pg 127 states that if the value of FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE
- // is NONE, then querying any other pname will generate INVALID_ENUM.
-
- // ES 3.0.2 spec pg 235 states that if the attachment type is none,
- // GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME will return zero and be an
- // INVALID_OPERATION for all other pnames
-
- switch (pname)
- {
- case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE:
- break;
-
- case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME:
- if (clientVersion < 3)
- {
- context->handleError(Error(GL_INVALID_ENUM));
- return false;
- }
- break;
-
- default:
- if (clientVersion < 3)
- {
- context->handleError(Error(GL_INVALID_ENUM));
- return false;
- }
- else
- {
- context->handleError(Error(GL_INVALID_OPERATION));
- return false;
- }
- }
- }
-
- return true;
-}
-
-bool ValidateGetFramebufferAttachmentParameterivRobustANGLE(ValidationContext *context,
- GLenum target,
- GLenum attachment,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *numParams)
-{
- if (!ValidateRobustEntryPoint(context, bufSize))
- {
- return false;
- }
-
- if (!ValidateGetFramebufferAttachmentParameteriv(context, target, attachment, pname, numParams))
- {
- return false;
- }
-
- if (!ValidateRobustBufferSize(context, bufSize, *numParams))
- {
- return false;
- }
-
- return true;
-}
-
-bool ValidateGetBufferParameteriv(ValidationContext *context,
- GLenum target,
- GLenum pname,
- GLint *params)
-{
- return ValidateGetBufferParameterBase(context, target, pname, false, nullptr);
-}
-
-bool ValidateGetBufferParameterivRobustANGLE(ValidationContext *context,
- GLenum target,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params)
-{
- if (!ValidateRobustEntryPoint(context, bufSize))
- {
- return false;
- }
-
- if (!ValidateGetBufferParameterBase(context, target, pname, false, length))
- {
- return false;
- }
-
- if (!ValidateRobustBufferSize(context, bufSize, *length))
- {
- return false;
- }
-
- return true;
-}
-
-bool ValidateGetBufferParameteri64v(ValidationContext *context,
- GLenum target,
- GLenum pname,
- GLint64 *params)
-{
- return ValidateGetBufferParameterBase(context, target, pname, false, nullptr);
-}
-
-bool ValidateGetBufferParameteri64vRobustANGLE(ValidationContext *context,
- GLenum target,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint64 *params)
-{
- if (!ValidateRobustEntryPoint(context, bufSize))
- {
- return false;
- }
-
- if (!ValidateGetBufferParameterBase(context, target, pname, false, length))
- {
- return false;
- }
-
- if (!ValidateRobustBufferSize(context, bufSize, *length))
- {
- return false;
- }
-
- return true;
-}
-
-bool ValidateGetProgramiv(Context *context, GLuint program, GLenum pname, GLsizei *numParams)
-{
- // Currently, all GetProgramiv queries return 1 parameter
- *numParams = 1;
-
- Program *programObject = GetValidProgram(context, program);
- if (!programObject)
- {
- return false;
- }
-
- switch (pname)
- {
- case GL_DELETE_STATUS:
- case GL_LINK_STATUS:
- case GL_VALIDATE_STATUS:
- case GL_INFO_LOG_LENGTH:
- case GL_ATTACHED_SHADERS:
- case GL_ACTIVE_ATTRIBUTES:
- case GL_ACTIVE_ATTRIBUTE_MAX_LENGTH:
- case GL_ACTIVE_UNIFORMS:
- case GL_ACTIVE_UNIFORM_MAX_LENGTH:
- break;
-
- case GL_PROGRAM_BINARY_LENGTH:
- if (context->getClientMajorVersion() < 3 && !context->getExtensions().getProgramBinary)
- {
- context->handleError(Error(GL_INVALID_ENUM,
- "Querying GL_PROGRAM_BINARY_LENGTH requires "
- "GL_OES_get_program_binary or ES 3.0."));
- return false;
- }
- break;
-
- case GL_ACTIVE_UNIFORM_BLOCKS:
- case GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH:
- case GL_TRANSFORM_FEEDBACK_BUFFER_MODE:
- case GL_TRANSFORM_FEEDBACK_VARYINGS:
- case GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH:
- case GL_PROGRAM_BINARY_RETRIEVABLE_HINT:
- if (context->getClientMajorVersion() < 3)
- {
- context->handleError(Error(GL_INVALID_ENUM, "Querying requires at least ES 3.0."));
- return false;
- }
- break;
-
- default:
- context->handleError(Error(GL_INVALID_ENUM, "Unknown parameter name."));
- return false;
- }
-
- return true;
-}
-
-bool ValidateGetProgramivRobustANGLE(Context *context,
- GLuint program,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *numParams)
-{
- if (!ValidateRobustEntryPoint(context, bufSize))
- {
- return false;
- }
-
- if (!ValidateGetProgramiv(context, program, pname, numParams))
- {
- return false;
- }
-
- if (!ValidateRobustBufferSize(context, bufSize, *numParams))
- {
- return false;
- }
-
- return true;
-}
-
-bool ValidateGetRenderbufferParameteriv(Context *context,
- GLenum target,
- GLenum pname,
- GLint *params)
-{
- return ValidateGetRenderbufferParameterivBase(context, target, pname, nullptr);
-}
-
-bool ValidateGetRenderbufferParameterivRobustANGLE(Context *context,
- GLenum target,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params)
-{
- if (!ValidateRobustEntryPoint(context, bufSize))
- {
- return false;
- }
-
- if (!ValidateGetRenderbufferParameterivBase(context, target, pname, length))
- {
- return false;
- }
-
- if (!ValidateRobustBufferSize(context, bufSize, *length))
- {
- return false;
- }
-
- return true;
-}
-
-bool ValidateGetShaderiv(Context *context, GLuint shader, GLenum pname, GLint *params)
-{
- return ValidateGetShaderivBase(context, shader, pname, nullptr);
-}
-
-bool ValidateGetShaderivRobustANGLE(Context *context,
- GLuint shader,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params)
-{
- if (!ValidateRobustEntryPoint(context, bufSize))
- {
- return false;
- }
-
- if (!ValidateGetShaderivBase(context, shader, pname, length))
- {
- return false;
- }
-
- if (!ValidateRobustBufferSize(context, bufSize, *length))
- {
- return false;
- }
-
- return true;
-}
-
-bool ValidateGetTexParameterfv(Context *context, GLenum target, GLenum pname, GLfloat *params)
-{
- return ValidateGetTexParameterBase(context, target, pname, nullptr);
-}
-
-bool ValidateGetTexParameterfvRobustANGLE(Context *context,
- GLenum target,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLfloat *params)
-{
- if (!ValidateRobustEntryPoint(context, bufSize))
- {
- return false;
- }
-
- if (!ValidateGetTexParameterBase(context, target, pname, length))
- {
- return false;
- }
-
- if (!ValidateRobustBufferSize(context, bufSize, *length))
- {
- return false;
- }
-
- return true;
-}
-
-bool ValidateGetTexParameteriv(Context *context, GLenum target, GLenum pname, GLint *params)
-{
- return ValidateGetTexParameterBase(context, target, pname, nullptr);
-}
-
-bool ValidateGetTexParameterivRobustANGLE(Context *context,
- GLenum target,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params)
-{
- if (!ValidateRobustEntryPoint(context, bufSize))
- {
- return false;
- }
-
- if (!ValidateGetTexParameterBase(context, target, pname, length))
- {
- return false;
- }
-
- if (!ValidateRobustBufferSize(context, bufSize, *length))
- {
- return false;
- }
-
- return true;
-}
-
-bool ValidateTexParameterf(Context *context, GLenum target, GLenum pname, GLfloat param)
-{
- return ValidateTexParameterBase(context, target, pname, -1, &param);
-}
-
-bool ValidateTexParameterfv(Context *context, GLenum target, GLenum pname, const GLfloat *params)
-{
- return ValidateTexParameterBase(context, target, pname, -1, params);
-}
-
-bool ValidateTexParameterfvRobustANGLE(Context *context,
- GLenum target,
- GLenum pname,
- GLsizei bufSize,
- const GLfloat *params)
-{
- if (!ValidateRobustEntryPoint(context, bufSize))
- {
- return false;
- }
-
- return ValidateTexParameterBase(context, target, pname, bufSize, params);
-}
-
-bool ValidateTexParameteri(Context *context, GLenum target, GLenum pname, GLint param)
-{
- return ValidateTexParameterBase(context, target, pname, -1, &param);
-}
-
-bool ValidateTexParameteriv(Context *context, GLenum target, GLenum pname, const GLint *params)
-{
- return ValidateTexParameterBase(context, target, pname, -1, params);
-}
-
-bool ValidateTexParameterivRobustANGLE(Context *context,
- GLenum target,
- GLenum pname,
- GLsizei bufSize,
- const GLint *params)
-{
- if (!ValidateRobustEntryPoint(context, bufSize))
- {
- return false;
- }
-
- return ValidateTexParameterBase(context, target, pname, bufSize, params);
-}
-
-bool ValidateGetSamplerParameterfv(Context *context, GLuint sampler, GLenum pname, GLfloat *params)
-{
- return ValidateGetSamplerParameterBase(context, sampler, pname, nullptr);
-}
-
-bool ValidateGetSamplerParameterfvRobustANGLE(Context *context,
- GLuint sampler,
- GLenum pname,
- GLuint bufSize,
- GLsizei *length,
- GLfloat *params)
-{
- if (!ValidateRobustEntryPoint(context, bufSize))
- {
- return false;
- }
-
- if (!ValidateGetSamplerParameterBase(context, sampler, pname, length))
- {
- return false;
- }
-
- if (!ValidateRobustBufferSize(context, bufSize, *length))
- {
- return false;
- }
-
- return true;
-}
-
-bool ValidateGetSamplerParameteriv(Context *context, GLuint sampler, GLenum pname, GLint *params)
-{
- return ValidateGetSamplerParameterBase(context, sampler, pname, nullptr);
-}
-
-bool ValidateGetSamplerParameterivRobustANGLE(Context *context,
- GLuint sampler,
- GLenum pname,
- GLuint bufSize,
- GLsizei *length,
- GLint *params)
-{
- if (!ValidateRobustEntryPoint(context, bufSize))
- {
- return false;
- }
-
- if (!ValidateGetSamplerParameterBase(context, sampler, pname, length))
- {
- return false;
- }
-
- if (!ValidateRobustBufferSize(context, bufSize, *length))
- {
- return false;
- }
-
- return true;
-}
-
-bool ValidateSamplerParameterf(Context *context, GLuint sampler, GLenum pname, GLfloat param)
-{
- return ValidateSamplerParameterBase(context, sampler, pname, -1, &param);
-}
-
-bool ValidateSamplerParameterfv(Context *context,
- GLuint sampler,
- GLenum pname,
- const GLfloat *params)
-{
- return ValidateSamplerParameterBase(context, sampler, pname, -1, params);
-}
-
-bool ValidateSamplerParameterfvRobustANGLE(Context *context,
- GLuint sampler,
- GLenum pname,
- GLsizei bufSize,
- const GLfloat *params)
-{
- if (!ValidateRobustEntryPoint(context, bufSize))
- {
- return false;
- }
-
- return ValidateSamplerParameterBase(context, sampler, pname, bufSize, params);
-}
-
-bool ValidateSamplerParameteri(Context *context, GLuint sampler, GLenum pname, GLint param)
-{
- return ValidateSamplerParameterBase(context, sampler, pname, -1, &param);
-}
-
-bool ValidateSamplerParameteriv(Context *context, GLuint sampler, GLenum pname, const GLint *params)
-{
- return ValidateSamplerParameterBase(context, sampler, pname, -1, params);
-}
-
-bool ValidateSamplerParameterivRobustANGLE(Context *context,
- GLuint sampler,
- GLenum pname,
- GLsizei bufSize,
- const GLint *params)
-{
- if (!ValidateRobustEntryPoint(context, bufSize))
- {
- return false;
- }
-
- return ValidateSamplerParameterBase(context, sampler, pname, bufSize, params);
-}
-
-bool ValidateGetVertexAttribfv(Context *context, GLuint index, GLenum pname, GLfloat *params)
-{
- return ValidateGetVertexAttribBase(context, index, pname, nullptr, false, false);
-}
-
-bool ValidateGetVertexAttribfvRobustANGLE(Context *context,
- GLuint index,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLfloat *params)
-{
- if (!ValidateRobustEntryPoint(context, bufSize))
- {
- return false;
- }
-
- if (!ValidateGetVertexAttribBase(context, index, pname, length, false, false))
- {
- return false;
- }
-
- if (!ValidateRobustBufferSize(context, bufSize, *length))
- {
- return false;
- }
-
- return true;
-}
-
-bool ValidateGetVertexAttribiv(Context *context, GLuint index, GLenum pname, GLint *params)
-{
- return ValidateGetVertexAttribBase(context, index, pname, nullptr, false, false);
-}
-
-bool ValidateGetVertexAttribivRobustANGLE(Context *context,
- GLuint index,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params)
-{
- if (!ValidateRobustEntryPoint(context, bufSize))
- {
- return false;
- }
-
- if (!ValidateGetVertexAttribBase(context, index, pname, length, false, false))
- {
- return false;
- }
-
- if (!ValidateRobustBufferSize(context, bufSize, *length))
- {
- return false;
- }
-
- return true;
-}
-
-bool ValidateGetVertexAttribPointerv(Context *context, GLuint index, GLenum pname, void **pointer)
-{
- return ValidateGetVertexAttribBase(context, index, pname, nullptr, true, false);
-}
-
-bool ValidateGetVertexAttribPointervRobustANGLE(Context *context,
- GLuint index,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- void **pointer)
-{
- if (!ValidateRobustEntryPoint(context, bufSize))
- {
- return false;
- }
-
- if (!ValidateGetVertexAttribBase(context, index, pname, length, true, false))
- {
- return false;
- }
-
- if (!ValidateRobustBufferSize(context, bufSize, *length))
- {
- return false;
- }
-
- return true;
-}
-
-bool ValidateGetVertexAttribIiv(Context *context, GLuint index, GLenum pname, GLint *params)
-{
- return ValidateGetVertexAttribBase(context, index, pname, nullptr, false, true);
-}
-
-bool ValidateGetVertexAttribIivRobustANGLE(Context *context,
- GLuint index,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params)
-{
- if (!ValidateRobustEntryPoint(context, bufSize))
- {
- return false;
- }
-
- if (!ValidateGetVertexAttribBase(context, index, pname, length, false, true))
- {
- return false;
- }
-
- if (!ValidateRobustBufferSize(context, bufSize, *length))
- {
- return false;
- }
-
- return true;
-}
-
-bool ValidateGetVertexAttribIuiv(Context *context, GLuint index, GLenum pname, GLuint *params)
-{
- return ValidateGetVertexAttribBase(context, index, pname, nullptr, false, true);
-}
-
-bool ValidateGetVertexAttribIuivRobustANGLE(Context *context,
- GLuint index,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLuint *params)
-{
- if (!ValidateRobustEntryPoint(context, bufSize))
- {
- return false;
- }
-
- if (!ValidateGetVertexAttribBase(context, index, pname, length, false, true))
- {
- return false;
- }
-
- if (!ValidateRobustBufferSize(context, bufSize, *length))
- {
- return false;
- }
-
- return true;
-}
-
-bool ValidateGetActiveUniformBlockiv(Context *context,
- GLuint program,
- GLuint uniformBlockIndex,
- GLenum pname,
- GLint *params)
-{
- return ValidateGetActiveUniformBlockivBase(context, program, uniformBlockIndex, pname, nullptr);
-}
-
-bool ValidateGetActiveUniformBlockivRobustANGLE(Context *context,
- GLuint program,
- GLuint uniformBlockIndex,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params)
-{
- if (!ValidateRobustEntryPoint(context, bufSize))
- {
- return false;
- }
-
- if (!ValidateGetActiveUniformBlockivBase(context, program, uniformBlockIndex, pname, length))
- {
- return false;
- }
-
- if (!ValidateRobustBufferSize(context, bufSize, *length))
- {
- return false;
- }
-
- return true;
-}
-
-bool ValidateGetInternalFormativ(Context *context,
- GLenum target,
- GLenum internalformat,
- GLenum pname,
- GLsizei bufSize,
- GLint *params)
-{
- return ValidateGetInternalFormativBase(context, target, internalformat, pname, bufSize,
- nullptr);
-}
-
-bool ValidateGetInternalFormativRobustANGLE(Context *context,
- GLenum target,
- GLenum internalformat,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params)
-{
- if (!ValidateRobustEntryPoint(context, bufSize))
- {
- return false;
- }
-
- if (!ValidateGetInternalFormativBase(context, target, internalformat, pname, bufSize, length))
- {
- return false;
- }
-
- if (!ValidateRobustBufferSize(context, bufSize, *length))
- {
- return false;
- }
-
- return true;
-}
-
} // namespace gl
diff --git a/gfx/angle/src/libANGLE/validationES.h b/gfx/angle/src/libANGLE/validationES.h
index 06da37690..d42575311 100755
--- a/gfx/angle/src/libANGLE/validationES.h
+++ b/gfx/angle/src/libANGLE/validationES.h
@@ -29,6 +29,7 @@ class Program;
class Shader;
class ValidationContext;
+bool ValidCap(const Context *context, GLenum cap);
bool ValidTextureTarget(const ValidationContext *context, GLenum target);
bool ValidTexture2DTarget(const ValidationContext *context, GLenum target);
bool ValidTexture3DTarget(const ValidationContext *context, GLenum target);
@@ -36,8 +37,8 @@ bool ValidTextureExternalTarget(const ValidationContext *context, GLenum target)
bool ValidTexture2DDestinationTarget(const ValidationContext *context, GLenum target);
bool ValidTexture3DDestinationTarget(const ValidationContext *context, GLenum target);
bool ValidFramebufferTarget(GLenum target);
-bool ValidBufferTarget(const ValidationContext *context, GLenum target);
-bool ValidBufferParameter(const ValidationContext *context, GLenum pname, GLsizei *numParams);
+bool ValidBufferTarget(const Context *context, GLenum target);
+bool ValidBufferParameter(const Context *context, GLenum pname);
bool ValidMipLevel(const ValidationContext *context, GLenum target, GLint level);
bool ValidImageSizeParameters(const Context *context,
GLenum target,
@@ -50,27 +51,17 @@ bool ValidCompressedImageSize(const ValidationContext *context,
GLenum internalFormat,
GLsizei width,
GLsizei height);
-bool ValidImageDataSize(ValidationContext *context,
- GLenum textureTarget,
- GLsizei width,
- GLsizei height,
- GLsizei depth,
- GLenum internalFormat,
- GLenum type,
- const GLvoid *pixels,
- GLsizei imageSize);
-
bool ValidQueryType(const Context *context, GLenum queryType);
// Returns valid program if id is a valid program name
// Errors INVALID_OPERATION if valid shader is given and returns NULL
// Errors INVALID_VALUE otherwise and returns NULL
-Program *GetValidProgram(ValidationContext *context, GLuint id);
+Program *GetValidProgram(Context *context, GLuint id);
// Returns valid shader if id is a valid shader name
// Errors INVALID_OPERATION if valid program is given and returns NULL
// Errors INVALID_VALUE otherwise and returns NULL
-Shader *GetValidShader(ValidationContext *context, GLuint id);
+Shader *GetValidShader(Context *context, GLuint id);
bool ValidateAttachmentTarget(Context *context, GLenum attachment);
bool ValidateRenderbufferStorageParametersBase(Context *context, GLenum target, GLsizei samples,
@@ -93,6 +84,12 @@ bool ValidateBlitFramebufferParameters(ValidationContext *context,
GLbitfield mask,
GLenum filter);
+bool ValidateGetVertexAttribParameters(Context *context, GLenum pname);
+
+bool ValidateTexParamParameters(Context *context, GLenum target, GLenum pname, GLint param);
+
+bool ValidateSamplerObjectParameter(Context *context, GLenum pname);
+
bool ValidateReadPixels(ValidationContext *context,
GLint x,
GLint y,
@@ -101,16 +98,6 @@ bool ValidateReadPixels(ValidationContext *context,
GLenum format,
GLenum type,
GLvoid *pixels);
-bool ValidateReadPixelsRobustANGLE(ValidationContext *context,
- GLint x,
- GLint y,
- GLsizei width,
- GLsizei height,
- GLenum format,
- GLenum type,
- GLsizei bufSize,
- GLsizei *length,
- GLvoid *pixels);
bool ValidateReadnPixelsEXT(Context *context,
GLint x,
GLint y,
@@ -120,16 +107,6 @@ bool ValidateReadnPixelsEXT(Context *context,
GLenum type,
GLsizei bufSize,
GLvoid *pixels);
-bool ValidateReadnPixelsRobustANGLE(ValidationContext *context,
- GLint x,
- GLint y,
- GLsizei width,
- GLsizei height,
- GLenum format,
- GLenum type,
- GLsizei bufSize,
- GLsizei *length,
- GLvoid *data);
bool ValidateGenQueriesEXT(gl::Context *context, GLsizei n);
bool ValidateDeleteQueriesEXT(gl::Context *context, GLsizei n);
@@ -138,46 +115,13 @@ bool ValidateBeginQueryEXT(Context *context, GLenum target, GLuint id);
bool ValidateEndQueryBase(Context *context, GLenum target);
bool ValidateEndQueryEXT(Context *context, GLenum target);
bool ValidateQueryCounterEXT(Context *context, GLuint id, GLenum target);
-bool ValidateGetQueryivBase(Context *context, GLenum target, GLenum pname, GLsizei *numParams);
+bool ValidateGetQueryivBase(Context *context, GLenum target, GLenum pname);
bool ValidateGetQueryivEXT(Context *context, GLenum target, GLenum pname, GLint *params);
-bool ValidateGetQueryivRobustANGLE(Context *context,
- GLenum target,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params);
-bool ValidateGetQueryObjectValueBase(Context *context,
- GLenum target,
- GLenum pname,
- GLsizei *numParams);
+bool ValidateGetQueryObjectValueBase(Context *context, GLenum target, GLenum pname);
bool ValidateGetQueryObjectivEXT(Context *context, GLuint id, GLenum pname, GLint *params);
-bool ValidateGetQueryObjectivRobustANGLE(Context *context,
- GLuint id,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params);
bool ValidateGetQueryObjectuivEXT(Context *context, GLuint id, GLenum pname, GLuint *params);
-bool ValidateGetQueryObjectuivRobustANGLE(Context *context,
- GLuint id,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLuint *params);
bool ValidateGetQueryObjecti64vEXT(Context *context, GLuint id, GLenum pname, GLint64 *params);
-bool ValidateGetQueryObjecti64vRobustANGLE(Context *context,
- GLuint id,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint64 *params);
bool ValidateGetQueryObjectui64vEXT(Context *context, GLuint id, GLenum pname, GLuint64 *params);
-bool ValidateGetQueryObjectui64vRobustANGLE(Context *context,
- GLuint id,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLuint64 *params);
bool ValidateUniform(Context *context, GLenum uniformType, GLint location, GLsizei count);
bool ValidateUniformMatrix(Context *context, GLenum matrixType, GLint location, GLsizei count,
@@ -188,12 +132,6 @@ bool ValidateStateQuery(ValidationContext *context,
GLenum *nativeType,
unsigned int *numParams);
-bool ValidateRobustStateQuery(ValidationContext *context,
- GLenum pname,
- GLsizei bufSize,
- GLenum *nativeType,
- unsigned int *numParams);
-
bool ValidateCopyTexImageParametersBase(ValidationContext *context,
GLenum target,
GLint level,
@@ -255,24 +193,6 @@ bool ValidateGetUniformfv(Context *context, GLuint program, GLint location, GLfl
bool ValidateGetUniformiv(Context *context, GLuint program, GLint location, GLint* params);
bool ValidateGetnUniformfvEXT(Context *context, GLuint program, GLint location, GLsizei bufSize, GLfloat* params);
bool ValidateGetnUniformivEXT(Context *context, GLuint program, GLint location, GLsizei bufSize, GLint* params);
-bool ValidateGetUniformfvRobustANGLE(Context *context,
- GLuint program,
- GLint location,
- GLsizei bufSize,
- GLsizei *length,
- GLfloat *params);
-bool ValidateGetUniformivRobustANGLE(Context *context,
- GLuint program,
- GLint location,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params);
-bool ValidateGetUniformuivRobustANGLE(Context *context,
- GLuint program,
- GLint location,
- GLsizei bufSize,
- GLsizei *length,
- GLuint *params);
bool ValidateDiscardFramebufferBase(Context *context, GLenum target, GLsizei numAttachments,
const GLenum *attachments, bool defaultFramebuffer);
@@ -325,11 +245,7 @@ bool ValidateCopyTexSubImage2D(Context *context,
GLsizei width,
GLsizei height);
-bool ValidateGetBufferPointervBase(Context *context,
- GLenum target,
- GLenum pname,
- GLsizei *length,
- void **params);
+bool ValidateGetBufferPointervBase(Context *context, GLenum target, GLenum pname, void **params);
bool ValidateUnmapBufferBase(Context *context, GLenum target);
bool ValidateMapBufferRangeBase(Context *context,
GLenum target,
@@ -354,206 +270,6 @@ bool ValidateDeleteTextures(Context *context, GLint n, const GLuint *textures);
bool ValidateGenOrDelete(Context *context, GLint n);
-bool ValidateEnable(Context *context, GLenum cap);
-bool ValidateDisable(Context *context, GLenum cap);
-bool ValidateIsEnabled(Context *context, GLenum cap);
-
-bool ValidateRobustEntryPoint(ValidationContext *context, GLsizei bufSize);
-bool ValidateRobustBufferSize(ValidationContext *context, GLsizei bufSize, GLsizei numParams);
-
-bool ValidateGetFramebufferAttachmentParameteriv(ValidationContext *context,
- GLenum target,
- GLenum attachment,
- GLenum pname,
- GLsizei *numParams);
-bool ValidateGetFramebufferAttachmentParameterivRobustANGLE(ValidationContext *context,
- GLenum target,
- GLenum attachment,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *numParams);
-
-bool ValidateGetBufferParameteriv(ValidationContext *context,
- GLenum target,
- GLenum pname,
- GLint *params);
-bool ValidateGetBufferParameterivRobustANGLE(ValidationContext *context,
- GLenum target,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params);
-
-bool ValidateGetBufferParameteri64v(ValidationContext *context,
- GLenum target,
- GLenum pname,
- GLint64 *params);
-bool ValidateGetBufferParameteri64vRobustANGLE(ValidationContext *context,
- GLenum target,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint64 *params);
-
-bool ValidateGetProgramiv(Context *context, GLuint program, GLenum pname, GLsizei *numParams);
-bool ValidateGetProgramivRobustANGLE(Context *context,
- GLuint program,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *numParams);
-
-bool ValidateGetRenderbufferParameteriv(Context *context,
- GLenum target,
- GLenum pname,
- GLint *params);
-bool ValidateGetRenderbufferParameterivRobustANGLE(Context *context,
- GLenum target,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params);
-
-bool ValidateGetShaderiv(Context *context, GLuint shader, GLenum pname, GLint *params);
-bool ValidateGetShaderivRobustANGLE(Context *context,
- GLuint shader,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params);
-
-bool ValidateGetTexParameterfv(Context *context, GLenum target, GLenum pname, GLfloat *params);
-bool ValidateGetTexParameterfvRobustANGLE(Context *context,
- GLenum target,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLfloat *params);
-bool ValidateGetTexParameteriv(Context *context, GLenum target, GLenum pname, GLint *params);
-bool ValidateGetTexParameterivRobustANGLE(Context *context,
- GLenum target,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params);
-
-bool ValidateTexParameterf(Context *context, GLenum target, GLenum pname, GLfloat param);
-bool ValidateTexParameterfv(Context *context, GLenum target, GLenum pname, const GLfloat *params);
-bool ValidateTexParameterfvRobustANGLE(Context *context,
- GLenum target,
- GLenum pname,
- GLsizei bufSize,
- const GLfloat *params);
-bool ValidateTexParameteri(Context *context, GLenum target, GLenum pname, GLint param);
-bool ValidateTexParameteriv(Context *context, GLenum target, GLenum pname, const GLint *params);
-bool ValidateTexParameterivRobustANGLE(Context *context,
- GLenum target,
- GLenum pname,
- GLsizei bufSize,
- const GLint *params);
-
-bool ValidateGetSamplerParameterfv(Context *context, GLuint sampler, GLenum pname, GLfloat *params);
-bool ValidateGetSamplerParameterfvRobustANGLE(Context *context,
- GLuint sampler,
- GLenum pname,
- GLuint bufSize,
- GLsizei *length,
- GLfloat *params);
-bool ValidateGetSamplerParameteriv(Context *context, GLuint sampler, GLenum pname, GLint *params);
-bool ValidateGetSamplerParameterivRobustANGLE(Context *context,
- GLuint sampler,
- GLenum pname,
- GLuint bufSize,
- GLsizei *length,
- GLint *params);
-
-bool ValidateSamplerParameterf(Context *context, GLuint sampler, GLenum pname, GLfloat param);
-bool ValidateSamplerParameterfv(Context *context,
- GLuint sampler,
- GLenum pname,
- const GLfloat *params);
-bool ValidateSamplerParameterfvRobustANGLE(Context *context,
- GLuint sampler,
- GLenum pname,
- GLsizei bufSize,
- const GLfloat *params);
-bool ValidateSamplerParameteri(Context *context, GLuint sampler, GLenum pname, GLint param);
-bool ValidateSamplerParameteriv(Context *context,
- GLuint sampler,
- GLenum pname,
- const GLint *params);
-bool ValidateSamplerParameterivRobustANGLE(Context *context,
- GLuint sampler,
- GLenum pname,
- GLsizei bufSize,
- const GLint *params);
-
-bool ValidateGetVertexAttribfv(Context *context, GLuint index, GLenum pname, GLfloat *params);
-bool ValidateGetVertexAttribfvRobustANGLE(Context *context,
- GLuint index,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLfloat *params);
-
-bool ValidateGetVertexAttribiv(Context *context, GLuint index, GLenum pname, GLint *params);
-bool ValidateGetVertexAttribivRobustANGLE(Context *context,
- GLuint index,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params);
-
-bool ValidateGetVertexAttribPointerv(Context *context, GLuint index, GLenum pname, void **pointer);
-bool ValidateGetVertexAttribPointervRobustANGLE(Context *context,
- GLuint index,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- void **pointer);
-
-bool ValidateGetVertexAttribIiv(Context *context, GLuint index, GLenum pname, GLint *params);
-bool ValidateGetVertexAttribIivRobustANGLE(Context *context,
- GLuint index,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params);
-
-bool ValidateGetVertexAttribIuiv(Context *context, GLuint index, GLenum pname, GLuint *params);
-bool ValidateGetVertexAttribIuivRobustANGLE(Context *context,
- GLuint index,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLuint *params);
-
-bool ValidateGetActiveUniformBlockiv(Context *context,
- GLuint program,
- GLuint uniformBlockIndex,
- GLenum pname,
- GLint *params);
-bool ValidateGetActiveUniformBlockivRobustANGLE(Context *context,
- GLuint program,
- GLuint uniformBlockIndex,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params);
-
-bool ValidateGetInternalFormativ(Context *context,
- GLenum target,
- GLenum internalformat,
- GLenum pname,
- GLsizei bufSize,
- GLint *params);
-bool ValidateGetInternalFormativRobustANGLE(Context *context,
- GLenum target,
- GLenum internalformat,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params);
-
// Error messages shared here for use in testing.
extern const char *g_ExceedsMaxElementErrorMessage;
} // namespace gl
diff --git a/gfx/angle/src/libANGLE/validationES2.cpp b/gfx/angle/src/libANGLE/validationES2.cpp
index 3133102f3..f68958cba 100755
--- a/gfx/angle/src/libANGLE/validationES2.cpp
+++ b/gfx/angle/src/libANGLE/validationES2.cpp
@@ -10,19 +10,19 @@
#include <cstdint>
-#include "common/mathutil.h"
-#include "common/string_utils.h"
-#include "common/utilities.h"
+#include "libANGLE/validationES.h"
+#include "libANGLE/validationES3.h"
#include "libANGLE/Context.h"
#include "libANGLE/Texture.h"
#include "libANGLE/Framebuffer.h"
-#include "libANGLE/FramebufferAttachment.h"
#include "libANGLE/Renderbuffer.h"
-#include "libANGLE/Shader.h"
-#include "libANGLE/Uniform.h"
#include "libANGLE/formatutils.h"
-#include "libANGLE/validationES.h"
-#include "libANGLE/validationES3.h"
+#include "libANGLE/FramebufferAttachment.h"
+#include "libANGLE/Uniform.h"
+
+#include "common/mathutil.h"
+#include "common/string_utils.h"
+#include "common/utilities.h"
namespace gl
{
@@ -285,21 +285,9 @@ bool IsValidCopyTextureSourceTarget(Context *context, GLenum target)
} // anonymous namespace
-bool ValidateES2TexImageParameters(Context *context,
- GLenum target,
- GLint level,
- GLenum internalformat,
- bool isCompressed,
- bool isSubImage,
- GLint xoffset,
- GLint yoffset,
- GLsizei width,
- GLsizei height,
- GLint border,
- GLenum format,
- GLenum type,
- GLsizei imageSize,
- const GLvoid *pixels)
+bool ValidateES2TexImageParameters(Context *context, GLenum target, GLint level, GLenum internalformat, bool isCompressed, bool isSubImage,
+ GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
+ GLint border, GLenum format, GLenum type, const GLvoid *pixels)
{
if (!ValidTexture2DDestinationTarget(context, target))
{
@@ -368,16 +356,10 @@ bool ValidateES2TexImageParameters(Context *context,
if (isSubImage)
{
- GLenum textureFormat = texture->getFormat(target, level).asSized();
- if (textureFormat == GL_NONE)
- {
- context->handleError(Error(GL_INVALID_OPERATION, "Texture level does not exist."));
- return false;
- }
-
if (format != GL_NONE)
{
- if (gl::GetSizedInternalFormat(format, type) != textureFormat)
+ if (gl::GetSizedInternalFormat(format, type) !=
+ texture->getFormat(target, level).asSized())
{
context->handleError(Error(GL_INVALID_OPERATION));
return false;
@@ -710,12 +692,6 @@ bool ValidateES2TexImageParameters(Context *context,
}
}
- if (!ValidImageDataSize(context, target, width, height, 1, internalformat, type, pixels,
- imageSize))
- {
- return false;
- }
-
return true;
}
@@ -1217,6 +1193,52 @@ bool ValidateES2TexStorageParameters(Context *context, GLenum target, GLsizei le
return true;
}
+// check for combinations of format and type that are valid for ReadPixels
+bool ValidES2ReadFormatType(ValidationContext *context, GLenum format, GLenum type)
+{
+ switch (format)
+ {
+ case GL_RGBA:
+ switch (type)
+ {
+ case GL_UNSIGNED_BYTE:
+ break;
+ default:
+ return false;
+ }
+ break;
+ case GL_BGRA_EXT:
+ switch (type)
+ {
+ case GL_UNSIGNED_BYTE:
+ case GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT:
+ case GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT:
+ break;
+ default:
+ return false;
+ }
+ break;
+ case GL_RG_EXT:
+ case GL_RED_EXT:
+ if (!context->getExtensions().textureRG)
+ {
+ return false;
+ }
+ switch (type)
+ {
+ case GL_UNSIGNED_BYTE:
+ break;
+ default:
+ return false;
+ }
+ break;
+
+ default:
+ return false;
+ }
+ return true;
+}
+
bool ValidateDiscardFramebufferEXT(Context *context, GLenum target, GLsizei numAttachments,
const GLenum *attachments)
{
@@ -1992,43 +2014,12 @@ bool ValidateTexImage2D(Context *context,
if (context->getClientMajorVersion() < 3)
{
return ValidateES2TexImageParameters(context, target, level, internalformat, false, false,
- 0, 0, width, height, border, format, type, -1, pixels);
+ 0, 0, width, height, border, format, type, pixels);
}
ASSERT(context->getClientMajorVersion() >= 3);
return ValidateES3TexImage2DParameters(context, target, level, internalformat, false, false, 0,
- 0, 0, width, height, 1, border, format, type, -1,
- pixels);
-}
-
-bool ValidateTexImage2DRobust(Context *context,
- GLenum target,
- GLint level,
- GLint internalformat,
- GLsizei width,
- GLsizei height,
- GLint border,
- GLenum format,
- GLenum type,
- GLsizei bufSize,
- const GLvoid *pixels)
-{
- if (!ValidateRobustEntryPoint(context, bufSize))
- {
- return false;
- }
-
- if (context->getClientMajorVersion() < 3)
- {
- return ValidateES2TexImageParameters(context, target, level, internalformat, false, false,
- 0, 0, width, height, border, format, type, bufSize,
- pixels);
- }
-
- ASSERT(context->getClientMajorVersion() >= 3);
- return ValidateES3TexImage2DParameters(context, target, level, internalformat, false, false, 0,
- 0, 0, width, height, 1, border, format, type, bufSize,
- pixels);
+ 0, 0, width, height, 1, border, format, type, pixels);
}
bool ValidateTexSubImage2D(Context *context,
@@ -2046,43 +2037,12 @@ bool ValidateTexSubImage2D(Context *context,
if (context->getClientMajorVersion() < 3)
{
return ValidateES2TexImageParameters(context, target, level, GL_NONE, false, true, xoffset,
- yoffset, width, height, 0, format, type, -1, pixels);
+ yoffset, width, height, 0, format, type, pixels);
}
ASSERT(context->getClientMajorVersion() >= 3);
return ValidateES3TexImage2DParameters(context, target, level, GL_NONE, false, true, xoffset,
- yoffset, 0, width, height, 1, 0, format, type, -1,
- pixels);
-}
-
-bool ValidateTexSubImage2DRobustANGLE(Context *context,
- GLenum target,
- GLint level,
- GLint xoffset,
- GLint yoffset,
- GLsizei width,
- GLsizei height,
- GLenum format,
- GLenum type,
- GLsizei bufSize,
- const GLvoid *pixels)
-{
- if (!ValidateRobustEntryPoint(context, bufSize))
- {
- return false;
- }
-
- if (context->getClientMajorVersion() < 3)
- {
- return ValidateES2TexImageParameters(context, target, level, GL_NONE, false, true, xoffset,
- yoffset, width, height, 0, format, type, bufSize,
- pixels);
- }
-
- ASSERT(context->getClientMajorVersion() >= 3);
- return ValidateES3TexImage2DParameters(context, target, level, GL_NONE, false, true, xoffset,
- yoffset, 0, width, height, 1, 0, format, type, bufSize,
- pixels);
+ yoffset, 0, width, height, 1, 0, format, type, pixels);
}
bool ValidateCompressedTexImage2D(Context *context,
@@ -2098,7 +2058,7 @@ bool ValidateCompressedTexImage2D(Context *context,
if (context->getClientMajorVersion() < 3)
{
if (!ValidateES2TexImageParameters(context, target, level, internalformat, true, false, 0,
- 0, width, height, border, GL_NONE, GL_NONE, -1, data))
+ 0, width, height, border, GL_NONE, GL_NONE, data))
{
return false;
}
@@ -2107,7 +2067,7 @@ bool ValidateCompressedTexImage2D(Context *context,
{
ASSERT(context->getClientMajorVersion() >= 3);
if (!ValidateES3TexImage2DParameters(context, target, level, internalformat, true, false, 0,
- 0, 0, width, height, 1, border, GL_NONE, GL_NONE, -1,
+ 0, 0, width, height, 1, border, GL_NONE, GL_NONE,
data))
{
return false;
@@ -2116,7 +2076,7 @@ bool ValidateCompressedTexImage2D(Context *context,
const InternalFormat &formatInfo = GetInternalFormatInfo(internalformat);
auto blockSizeOrErr =
- formatInfo.computeCompressedImageSize(gl::Extents(width, height, 1));
+ formatInfo.computeCompressedImageSize(GL_UNSIGNED_BYTE, gl::Extents(width, height, 1));
if (blockSizeOrErr.isError())
{
context->handleError(blockSizeOrErr.getError());
@@ -2146,7 +2106,7 @@ bool ValidateCompressedTexSubImage2D(Context *context,
if (context->getClientMajorVersion() < 3)
{
if (!ValidateES2TexImageParameters(context, target, level, GL_NONE, true, true, xoffset,
- yoffset, width, height, 0, GL_NONE, GL_NONE, -1, data))
+ yoffset, width, height, 0, GL_NONE, GL_NONE, data))
{
return false;
}
@@ -2155,7 +2115,7 @@ bool ValidateCompressedTexSubImage2D(Context *context,
{
ASSERT(context->getClientMajorVersion() >= 3);
if (!ValidateES3TexImage2DParameters(context, target, level, GL_NONE, true, true, xoffset,
- yoffset, 0, width, height, 1, 0, GL_NONE, GL_NONE, -1,
+ yoffset, 0, width, height, 1, 0, GL_NONE, GL_NONE,
data))
{
return false;
@@ -2164,7 +2124,7 @@ bool ValidateCompressedTexSubImage2D(Context *context,
const InternalFormat &formatInfo = GetInternalFormatInfo(format);
auto blockSizeOrErr =
- formatInfo.computeCompressedImageSize(gl::Extents(width, height, 1));
+ formatInfo.computeCompressedImageSize(GL_UNSIGNED_BYTE, gl::Extents(width, height, 1));
if (blockSizeOrErr.isError())
{
context->handleError(blockSizeOrErr.getError());
@@ -2182,7 +2142,13 @@ bool ValidateCompressedTexSubImage2D(Context *context,
bool ValidateGetBufferPointervOES(Context *context, GLenum target, GLenum pname, void **params)
{
- return ValidateGetBufferPointervBase(context, target, pname, nullptr, params);
+ if (!context->getExtensions().mapBuffer)
+ {
+ context->handleError(Error(GL_INVALID_OPERATION, "Map buffer extension not available."));
+ return false;
+ }
+
+ return ValidateGetBufferPointervBase(context, target, pname, params);
}
bool ValidateMapBufferOES(Context *context, GLenum target, GLenum access)
@@ -2273,13 +2239,6 @@ bool ValidateBindTexture(Context *context, GLenum target, GLuint texture)
return false;
}
- if (!context->getGLState().isBindGeneratesResourceEnabled() &&
- !context->isTextureGenerated(texture))
- {
- context->handleError(Error(GL_INVALID_OPERATION, "Texture was not generated"));
- return false;
- }
-
switch (target)
{
case GL_TEXTURE_2D:
@@ -3356,68 +3315,6 @@ bool ValidateCopySubTextureCHROMIUM(Context *context,
return true;
}
-bool ValidateCompressedCopyTextureCHROMIUM(Context *context, GLuint sourceId, GLuint destId)
-{
- if (!context->getExtensions().copyCompressedTexture)
- {
- context->handleError(Error(GL_INVALID_OPERATION,
- "GL_CHROMIUM_copy_compressed_texture extension not available."));
- return false;
- }
-
- const gl::Texture *source = context->getTexture(sourceId);
- if (source == nullptr)
- {
- context->handleError(
- Error(GL_INVALID_VALUE, "Source texture is not a valid texture object."));
- return false;
- }
-
- if (source->getTarget() != GL_TEXTURE_2D)
- {
- context->handleError(
- Error(GL_INVALID_VALUE, "Source texture must be of type GL_TEXTURE_2D."));
- return false;
- }
-
- if (source->getWidth(GL_TEXTURE_2D, 0) == 0 || source->getHeight(GL_TEXTURE_2D, 0) == 0)
- {
- context->handleError(Error(GL_INVALID_VALUE, "Source texture must level 0 defined."));
- return false;
- }
-
- const gl::Format &sourceFormat = source->getFormat(GL_TEXTURE_2D, 0);
- if (!sourceFormat.info->compressed)
- {
- context->handleError(
- Error(GL_INVALID_OPERATION, "Source texture must have a compressed internal format."));
- return false;
- }
-
- const gl::Texture *dest = context->getTexture(destId);
- if (dest == nullptr)
- {
- context->handleError(
- Error(GL_INVALID_VALUE, "Destination texture is not a valid texture object."));
- return false;
- }
-
- if (dest->getTarget() != GL_TEXTURE_2D)
- {
- context->handleError(
- Error(GL_INVALID_VALUE, "Destination texture must be of type GL_TEXTURE_2D."));
- return false;
- }
-
- if (dest->getImmutableFormat())
- {
- context->handleError(Error(GL_INVALID_OPERATION, "Destination cannot be immutable."));
- return false;
- }
-
- return true;
-}
-
bool ValidateCreateShader(Context *context, GLenum type)
{
switch (type)
@@ -3425,442 +3322,15 @@ bool ValidateCreateShader(Context *context, GLenum type)
case GL_VERTEX_SHADER:
case GL_FRAGMENT_SHADER:
break;
-
case GL_COMPUTE_SHADER:
- if (context->getClientVersion() < Version(3, 1))
- {
- context->handleError(
- Error(GL_INVALID_ENUM, "GL_COMPUTE_SHADER requires OpenGL ES 3.1."));
- return false;
- }
- break;
-
- default:
- context->handleError(Error(GL_INVALID_ENUM, "Unknown shader type."));
- return false;
- }
-
- return true;
-}
-
-bool ValidateBufferData(ValidationContext *context,
- GLenum target,
- GLsizeiptr size,
- const GLvoid *data,
- GLenum usage)
-{
- if (size < 0)
- {
- context->handleError(Error(GL_INVALID_VALUE));
- return false;
- }
-
- switch (usage)
- {
- case GL_STREAM_DRAW:
- case GL_STATIC_DRAW:
- case GL_DYNAMIC_DRAW:
- break;
-
- case GL_STREAM_READ:
- case GL_STREAM_COPY:
- case GL_STATIC_READ:
- case GL_STATIC_COPY:
- case GL_DYNAMIC_READ:
- case GL_DYNAMIC_COPY:
- if (context->getClientMajorVersion() < 3)
+ if (context->getGLVersion().isES31())
{
- context->handleError(Error(GL_INVALID_ENUM));
- return false;
+ break;
}
- break;
-
default:
context->handleError(Error(GL_INVALID_ENUM));
return false;
}
-
- if (!ValidBufferTarget(context, target))
- {
- context->handleError(Error(GL_INVALID_ENUM));
- return false;
- }
-
- Buffer *buffer = context->getGLState().getTargetBuffer(target);
-
- if (!buffer)
- {
- context->handleError(Error(GL_INVALID_OPERATION));
- return false;
- }
-
- return true;
-}
-
-bool ValidateBufferSubData(ValidationContext *context,
- GLenum target,
- GLintptr offset,
- GLsizeiptr size,
- const GLvoid *data)
-{
- if (size < 0 || offset < 0)
- {
- context->handleError(Error(GL_INVALID_VALUE));
- return false;
- }
-
- if (!ValidBufferTarget(context, target))
- {
- context->handleError(Error(GL_INVALID_ENUM));
- return false;
- }
-
- Buffer *buffer = context->getGLState().getTargetBuffer(target);
-
- if (!buffer)
- {
- context->handleError(Error(GL_INVALID_OPERATION));
- return false;
- }
-
- if (buffer->isMapped())
- {
- context->handleError(Error(GL_INVALID_OPERATION));
- return false;
- }
-
- // Check for possible overflow of size + offset
- angle::CheckedNumeric<size_t> checkedSize(size);
- checkedSize += offset;
- if (!checkedSize.IsValid())
- {
- context->handleError(Error(GL_OUT_OF_MEMORY));
- return false;
- }
-
- if (size + offset > buffer->getSize())
- {
- context->handleError(Error(GL_INVALID_VALUE));
- return false;
- }
-
- return true;
-}
-
-bool ValidateEnableExtensionANGLE(ValidationContext *context, const GLchar *name)
-{
- if (!context->getExtensions().webglCompatibility)
- {
- context->handleError(
- Error(GL_INVALID_OPERATION, "GL_ANGLE_webgl_compatibility is not available."));
- return false;
- }
-
- const ExtensionInfoMap &extensionInfos = GetExtensionInfoMap();
- auto extension = extensionInfos.find(name);
- if (extension == extensionInfos.end() || !extension->second.Enableable)
- {
- context->handleError(Error(GL_INVALID_OPERATION, "Extension %s is not enableable.", name));
- return false;
- }
-
- return true;
-}
-
-bool ValidateActiveTexture(ValidationContext *context, GLenum texture)
-{
- if (texture < GL_TEXTURE0 ||
- texture > GL_TEXTURE0 + context->getCaps().maxCombinedTextureImageUnits - 1)
- {
- context->handleError(Error(GL_INVALID_ENUM));
- return false;
- }
-
- return true;
-}
-
-bool ValidateAttachShader(ValidationContext *context, GLuint program, GLuint shader)
-{
- Program *programObject = GetValidProgram(context, program);
- if (!programObject)
- {
- return false;
- }
-
- Shader *shaderObject = GetValidShader(context, shader);
- if (!shaderObject)
- {
- return false;
- }
-
- switch (shaderObject->getType())
- {
- case GL_VERTEX_SHADER:
- {
- if (programObject->getAttachedVertexShader())
- {
- context->handleError(Error(GL_INVALID_OPERATION));
- return false;
- }
- break;
- }
- case GL_FRAGMENT_SHADER:
- {
- if (programObject->getAttachedFragmentShader())
- {
- context->handleError(Error(GL_INVALID_OPERATION));
- return false;
- }
- break;
- }
- case GL_COMPUTE_SHADER:
- {
- if (programObject->getAttachedComputeShader())
- {
- context->handleError(Error(GL_INVALID_OPERATION));
- return false;
- }
- break;
- }
- default:
- UNREACHABLE();
- break;
- }
-
- return true;
-}
-
-bool ValidateBindAttribLocation(ValidationContext *context,
- GLuint program,
- GLuint index,
- const GLchar *name)
-{
- if (index >= MAX_VERTEX_ATTRIBS)
- {
- context->handleError(Error(GL_INVALID_VALUE, "Index exceeds MAX_VERTEX_ATTRIBS"));
- return false;
- }
-
- if (strncmp(name, "gl_", 3) == 0)
- {
- context->handleError(Error(GL_INVALID_OPERATION, "Cannot Bind built-in attributes"));
- return false;
- }
-
- return GetValidProgram(context, program) != nullptr;
-}
-
-bool ValidateBindBuffer(ValidationContext *context, GLenum target, GLuint buffer)
-{
- if (!ValidBufferTarget(context, target))
- {
- context->handleError(Error(GL_INVALID_ENUM, "Invalid Buffer target"));
- return false;
- }
-
- if (!context->getGLState().isBindGeneratesResourceEnabled() &&
- !context->isBufferGenerated(buffer))
- {
- context->handleError(Error(GL_INVALID_OPERATION, "Buffer was not generated"));
- return false;
- }
-
- return true;
-}
-
-bool ValidateBindFramebuffer(ValidationContext *context, GLenum target, GLuint framebuffer)
-{
- if (!ValidFramebufferTarget(target))
- {
- context->handleError(Error(GL_INVALID_ENUM, "Invalid Framebuffer target"));
- return false;
- }
-
- if (!context->getGLState().isBindGeneratesResourceEnabled() &&
- !context->isFramebufferGenerated(framebuffer))
- {
- context->handleError(Error(GL_INVALID_OPERATION, "Framebuffer was not generated"));
- return false;
- }
-
- return true;
-}
-
-bool ValidateBindRenderbuffer(ValidationContext *context, GLenum target, GLuint renderbuffer)
-{
- if (target != GL_RENDERBUFFER)
- {
- context->handleError(Error(GL_INVALID_ENUM, "Invalid Renderbuffer target"));
- return false;
- }
-
- if (!context->getGLState().isBindGeneratesResourceEnabled() &&
- !context->isRenderbufferGenerated(renderbuffer))
- {
- context->handleError(Error(GL_INVALID_OPERATION, "Renderbuffer was not generated"));
- return false;
- }
-
- return true;
-}
-
-static bool ValidBlendEquationMode(GLenum mode)
-{
- switch (mode)
- {
- case GL_FUNC_ADD:
- case GL_FUNC_SUBTRACT:
- case GL_FUNC_REVERSE_SUBTRACT:
- case GL_MIN:
- case GL_MAX:
- return true;
-
- default:
- return false;
- }
-}
-
-bool ValidateBlendEquation(ValidationContext *context, GLenum mode)
-{
- if (!ValidBlendEquationMode(mode))
- {
- context->handleError(Error(GL_INVALID_ENUM, "Invalid blend equation"));
- return false;
- }
-
- return true;
-}
-
-bool ValidateBlendEquationSeparate(ValidationContext *context, GLenum modeRGB, GLenum modeAlpha)
-{
- if (!ValidBlendEquationMode(modeRGB))
- {
- context->handleError(Error(GL_INVALID_ENUM, "Invalid RGB blend equation"));
- return false;
- }
-
- if (!ValidBlendEquationMode(modeAlpha))
- {
- context->handleError(Error(GL_INVALID_ENUM, "Invalid alpha blend equation"));
- return false;
- }
-
- return true;
-}
-
-bool ValidateBlendFunc(ValidationContext *context, GLenum sfactor, GLenum dfactor)
-{
- return ValidateBlendFuncSeparate(context, sfactor, dfactor, sfactor, dfactor);
-}
-
-static bool ValidSrcBlendFunc(GLenum srcBlend)
-{
- switch (srcBlend)
- {
- case GL_ZERO:
- case GL_ONE:
- case GL_SRC_COLOR:
- case GL_ONE_MINUS_SRC_COLOR:
- case GL_DST_COLOR:
- case GL_ONE_MINUS_DST_COLOR:
- case GL_SRC_ALPHA:
- case GL_ONE_MINUS_SRC_ALPHA:
- case GL_DST_ALPHA:
- case GL_ONE_MINUS_DST_ALPHA:
- case GL_CONSTANT_COLOR:
- case GL_ONE_MINUS_CONSTANT_COLOR:
- case GL_CONSTANT_ALPHA:
- case GL_ONE_MINUS_CONSTANT_ALPHA:
- case GL_SRC_ALPHA_SATURATE:
- return true;
-
- default:
- return false;
- }
-}
-
-static bool ValidDstBlendFunc(GLenum dstBlend, GLint contextMajorVersion)
-{
- switch (dstBlend)
- {
- case GL_ZERO:
- case GL_ONE:
- case GL_SRC_COLOR:
- case GL_ONE_MINUS_SRC_COLOR:
- case GL_DST_COLOR:
- case GL_ONE_MINUS_DST_COLOR:
- case GL_SRC_ALPHA:
- case GL_ONE_MINUS_SRC_ALPHA:
- case GL_DST_ALPHA:
- case GL_ONE_MINUS_DST_ALPHA:
- case GL_CONSTANT_COLOR:
- case GL_ONE_MINUS_CONSTANT_COLOR:
- case GL_CONSTANT_ALPHA:
- case GL_ONE_MINUS_CONSTANT_ALPHA:
- return true;
-
- case GL_SRC_ALPHA_SATURATE:
- return (contextMajorVersion >= 3);
-
- default:
- return false;
- }
-}
-
-bool ValidateBlendFuncSeparate(ValidationContext *context,
- GLenum srcRGB,
- GLenum dstRGB,
- GLenum srcAlpha,
- GLenum dstAlpha)
-{
- if (!ValidSrcBlendFunc(srcRGB))
- {
- context->handleError(Error(GL_INVALID_ENUM, "Invalid blend function"));
- return false;
- }
-
- if (!ValidDstBlendFunc(dstRGB, context->getClientMajorVersion()))
- {
- context->handleError(Error(GL_INVALID_ENUM, "Invalid blend function"));
- return false;
- }
-
- if (!ValidSrcBlendFunc(srcAlpha))
- {
- context->handleError(Error(GL_INVALID_ENUM, "Invalid blend function"));
- return false;
- }
-
- if (!ValidDstBlendFunc(dstAlpha, context->getClientMajorVersion()))
- {
- context->handleError(Error(GL_INVALID_ENUM, "Invalid blend function"));
- return false;
- }
-
- if (context->getLimitations().noSimultaneousConstantColorAndAlphaBlendFunc)
- {
- bool constantColorUsed =
- (srcRGB == GL_CONSTANT_COLOR || srcRGB == GL_ONE_MINUS_CONSTANT_COLOR ||
- dstRGB == GL_CONSTANT_COLOR || dstRGB == GL_ONE_MINUS_CONSTANT_COLOR);
-
- bool constantAlphaUsed =
- (srcRGB == GL_CONSTANT_ALPHA || srcRGB == GL_ONE_MINUS_CONSTANT_ALPHA ||
- dstRGB == GL_CONSTANT_ALPHA || dstRGB == GL_ONE_MINUS_CONSTANT_ALPHA);
-
- if (constantColorUsed && constantAlphaUsed)
- {
- ERR("Simultaneous use of GL_CONSTANT_ALPHA/GL_ONE_MINUS_CONSTANT_ALPHA and "
- "GL_CONSTANT_COLOR/GL_ONE_MINUS_CONSTANT_COLOR not supported by this "
- "implementation.");
- context->handleError(Error(GL_INVALID_OPERATION,
- "Simultaneous use of "
- "GL_CONSTANT_ALPHA/GL_ONE_MINUS_CONSTANT_ALPHA and "
- "GL_CONSTANT_COLOR/GL_ONE_MINUS_CONSTANT_COLOR not "
- "supported by this implementation."));
- return false;
- }
- }
-
return true;
}
diff --git a/gfx/angle/src/libANGLE/validationES2.h b/gfx/angle/src/libANGLE/validationES2.h
index d40a62606..09451f4c2 100755
--- a/gfx/angle/src/libANGLE/validationES2.h
+++ b/gfx/angle/src/libANGLE/validationES2.h
@@ -18,21 +18,9 @@ class Context;
class ValidationContext;
class Texture;
-bool ValidateES2TexImageParameters(Context *context,
- GLenum target,
- GLint level,
- GLenum internalformat,
- bool isCompressed,
- bool isSubImage,
- GLint xoffset,
- GLint yoffset,
- GLsizei width,
- GLsizei height,
- GLint border,
- GLenum format,
- GLenum type,
- GLsizei imageSize,
- const GLvoid *pixels);
+bool ValidateES2TexImageParameters(Context *context, GLenum target, GLint level, GLenum internalformat, bool isCompressed, bool isSubImage,
+ GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
+ GLint border, GLenum format, GLenum type, const GLvoid *pixels);
bool ValidateES2CopyTexImageParameters(ValidationContext *context,
GLenum target,
@@ -50,6 +38,8 @@ bool ValidateES2CopyTexImageParameters(ValidationContext *context,
bool ValidateES2TexStorageParameters(Context *context, GLenum target, GLsizei levels, GLenum internalformat,
GLsizei width, GLsizei height);
+bool ValidES2ReadFormatType(ValidationContext *context, GLenum format, GLenum type);
+
bool ValidateDiscardFramebufferEXT(Context *context, GLenum target, GLsizei numAttachments,
const GLenum *attachments);
@@ -149,17 +139,6 @@ bool ValidateTexImage2D(Context *context,
GLenum format,
GLenum type,
const GLvoid *pixels);
-bool ValidateTexImage2DRobust(Context *context,
- GLenum target,
- GLint level,
- GLint internalformat,
- GLsizei width,
- GLsizei height,
- GLint border,
- GLenum format,
- GLenum type,
- GLsizei bufSize,
- const GLvoid *pixels);
bool ValidateTexSubImage2D(Context *context,
GLenum target,
GLint level,
@@ -170,17 +149,6 @@ bool ValidateTexSubImage2D(Context *context,
GLenum format,
GLenum type,
const GLvoid *pixels);
-bool ValidateTexSubImage2DRobustANGLE(Context *context,
- GLenum target,
- GLint level,
- GLint xoffset,
- GLint yoffset,
- GLsizei width,
- GLsizei height,
- GLenum format,
- GLenum type,
- GLsizei bufSize,
- const GLvoid *pixels);
bool ValidateCompressedTexImage2D(Context *context,
GLenum target,
GLint level,
@@ -336,39 +304,8 @@ bool ValidateCopySubTextureCHROMIUM(Context *context,
GLboolean unpackFlipY,
GLboolean unpackPremultiplyAlpha,
GLboolean unpackUnmultiplyAlpha);
-bool ValidateCompressedCopyTextureCHROMIUM(Context *context, GLuint sourceId, GLuint destId);
bool ValidateCreateShader(Context *context, GLenum type);
-bool ValidateBufferData(ValidationContext *context,
- GLenum target,
- GLsizeiptr size,
- const GLvoid *data,
- GLenum usage);
-bool ValidateBufferSubData(ValidationContext *context,
- GLenum target,
- GLintptr offset,
- GLsizeiptr size,
- const GLvoid *data);
-
-bool ValidateEnableExtensionANGLE(ValidationContext *context, const GLchar *name);
-
-bool ValidateActiveTexture(ValidationContext *context, GLenum texture);
-bool ValidateAttachShader(ValidationContext *context, GLuint program, GLuint shader);
-bool ValidateBindAttribLocation(ValidationContext *context,
- GLuint program,
- GLuint index,
- const GLchar *name);
-bool ValidateBindBuffer(ValidationContext *context, GLenum target, GLuint buffer);
-bool ValidateBindFramebuffer(ValidationContext *context, GLenum target, GLuint framebuffer);
-bool ValidateBindRenderbuffer(ValidationContext *context, GLenum target, GLuint renderbuffer);
-bool ValidateBlendEquation(ValidationContext *context, GLenum mode);
-bool ValidateBlendEquationSeparate(ValidationContext *context, GLenum modeRGB, GLenum modeAlpha);
-bool ValidateBlendFunc(ValidationContext *context, GLenum sfactor, GLenum dfactor);
-bool ValidateBlendFuncSeparate(ValidationContext *context,
- GLenum srcRGB,
- GLenum dstRGB,
- GLenum srcAlpha,
- GLenum dstAlpha);
} // namespace gl
diff --git a/gfx/angle/src/libANGLE/validationES3.cpp b/gfx/angle/src/libANGLE/validationES3.cpp
index a4cb71e6a..6f3d8002a 100755
--- a/gfx/angle/src/libANGLE/validationES3.cpp
+++ b/gfx/angle/src/libANGLE/validationES3.cpp
@@ -8,9 +8,6 @@
#include "libANGLE/validationES3.h"
-#include "base/numerics/safe_conversions.h"
-#include "common/mathutil.h"
-#include "common/utilities.h"
#include "libANGLE/validationES.h"
#include "libANGLE/Context.h"
#include "libANGLE/Texture.h"
@@ -19,11 +16,209 @@
#include "libANGLE/formatutils.h"
#include "libANGLE/FramebufferAttachment.h"
+#include "common/mathutil.h"
+#include "common/utilities.h"
+
using namespace angle;
namespace gl
{
+struct ES3FormatCombination
+{
+ GLenum internalFormat;
+ GLenum format;
+ GLenum type;
+};
+
+bool operator<(const ES3FormatCombination& a, const ES3FormatCombination& b)
+{
+ return memcmp(&a, &b, sizeof(ES3FormatCombination)) < 0;
+}
+
+typedef std::set<ES3FormatCombination> ES3FormatCombinationSet;
+
+static inline void InsertES3FormatCombo(ES3FormatCombinationSet *set, GLenum internalFormat, GLenum format, GLenum type)
+{
+ ES3FormatCombination info;
+ info.internalFormat = internalFormat;
+ info.format = format;
+ info.type = type;
+ set->insert(info);
+}
+
+ES3FormatCombinationSet BuildES3FormatSet()
+{
+ ES3FormatCombinationSet set;
+
+ // Format combinations from ES 3.0.1 spec, table 3.2
+
+ // clang-format off
+ // | Internal format | Format | Type |
+ // | | | |
+ InsertES3FormatCombo(&set, GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE );
+ InsertES3FormatCombo(&set, GL_RGB5_A1, GL_RGBA, GL_UNSIGNED_BYTE );
+ InsertES3FormatCombo(&set, GL_RGBA4, GL_RGBA, GL_UNSIGNED_BYTE );
+ InsertES3FormatCombo(&set, GL_SRGB8_ALPHA8, GL_RGBA, GL_UNSIGNED_BYTE );
+ InsertES3FormatCombo(&set, GL_RGBA8_SNORM, GL_RGBA, GL_BYTE );
+ InsertES3FormatCombo(&set, GL_RGBA4, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4 );
+ InsertES3FormatCombo(&set, GL_RGB10_A2, GL_RGBA, GL_UNSIGNED_INT_2_10_10_10_REV );
+ InsertES3FormatCombo(&set, GL_RGB5_A1, GL_RGBA, GL_UNSIGNED_INT_2_10_10_10_REV );
+ InsertES3FormatCombo(&set, GL_RGB5_A1, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1 );
+ InsertES3FormatCombo(&set, GL_RGBA16F, GL_RGBA, GL_HALF_FLOAT );
+ InsertES3FormatCombo(&set, GL_RGBA16F, GL_RGBA, GL_HALF_FLOAT_OES );
+ InsertES3FormatCombo(&set, GL_RGBA32F, GL_RGBA, GL_FLOAT );
+ InsertES3FormatCombo(&set, GL_RGBA16F, GL_RGBA, GL_FLOAT );
+ InsertES3FormatCombo(&set, GL_RGBA8UI, GL_RGBA_INTEGER, GL_UNSIGNED_BYTE );
+ InsertES3FormatCombo(&set, GL_RGBA8I, GL_RGBA_INTEGER, GL_BYTE );
+ InsertES3FormatCombo(&set, GL_RGBA16UI, GL_RGBA_INTEGER, GL_UNSIGNED_SHORT );
+ InsertES3FormatCombo(&set, GL_RGBA16I, GL_RGBA_INTEGER, GL_SHORT );
+ InsertES3FormatCombo(&set, GL_RGBA32UI, GL_RGBA_INTEGER, GL_UNSIGNED_INT );
+ InsertES3FormatCombo(&set, GL_RGBA32I, GL_RGBA_INTEGER, GL_INT );
+ InsertES3FormatCombo(&set, GL_RGB10_A2UI, GL_RGBA_INTEGER, GL_UNSIGNED_INT_2_10_10_10_REV );
+ InsertES3FormatCombo(&set, GL_RGB8, GL_RGB, GL_UNSIGNED_BYTE );
+ InsertES3FormatCombo(&set, GL_RGB565, GL_RGB, GL_UNSIGNED_BYTE );
+ InsertES3FormatCombo(&set, GL_SRGB8, GL_RGB, GL_UNSIGNED_BYTE );
+ InsertES3FormatCombo(&set, GL_RGB8_SNORM, GL_RGB, GL_BYTE );
+ InsertES3FormatCombo(&set, GL_RGB565, GL_RGB, GL_UNSIGNED_SHORT_5_6_5 );
+ InsertES3FormatCombo(&set, GL_R11F_G11F_B10F, GL_RGB, GL_UNSIGNED_INT_10F_11F_11F_REV );
+ InsertES3FormatCombo(&set, GL_RGB9_E5, GL_RGB, GL_UNSIGNED_INT_5_9_9_9_REV );
+ InsertES3FormatCombo(&set, GL_RGB16F, GL_RGB, GL_HALF_FLOAT );
+ InsertES3FormatCombo(&set, GL_RGB16F, GL_RGB, GL_HALF_FLOAT_OES );
+ InsertES3FormatCombo(&set, GL_R11F_G11F_B10F, GL_RGB, GL_HALF_FLOAT );
+ InsertES3FormatCombo(&set, GL_R11F_G11F_B10F, GL_RGB, GL_HALF_FLOAT_OES );
+ InsertES3FormatCombo(&set, GL_RGB9_E5, GL_RGB, GL_HALF_FLOAT );
+ InsertES3FormatCombo(&set, GL_RGB9_E5, GL_RGB, GL_HALF_FLOAT_OES );
+ InsertES3FormatCombo(&set, GL_RGB32F, GL_RGB, GL_FLOAT );
+ InsertES3FormatCombo(&set, GL_RGB16F, GL_RGB, GL_FLOAT );
+ InsertES3FormatCombo(&set, GL_R11F_G11F_B10F, GL_RGB, GL_FLOAT );
+ InsertES3FormatCombo(&set, GL_RGB9_E5, GL_RGB, GL_FLOAT );
+ InsertES3FormatCombo(&set, GL_RGB8UI, GL_RGB_INTEGER, GL_UNSIGNED_BYTE );
+ InsertES3FormatCombo(&set, GL_RGB8I, GL_RGB_INTEGER, GL_BYTE );
+ InsertES3FormatCombo(&set, GL_RGB16UI, GL_RGB_INTEGER, GL_UNSIGNED_SHORT );
+ InsertES3FormatCombo(&set, GL_RGB16I, GL_RGB_INTEGER, GL_SHORT );
+ InsertES3FormatCombo(&set, GL_RGB32UI, GL_RGB_INTEGER, GL_UNSIGNED_INT );
+ InsertES3FormatCombo(&set, GL_RGB32I, GL_RGB_INTEGER, GL_INT );
+ InsertES3FormatCombo(&set, GL_RG8, GL_RG, GL_UNSIGNED_BYTE );
+ InsertES3FormatCombo(&set, GL_RG8_SNORM, GL_RG, GL_BYTE );
+ InsertES3FormatCombo(&set, GL_RG16F, GL_RG, GL_HALF_FLOAT );
+ InsertES3FormatCombo(&set, GL_RG16F, GL_RG, GL_HALF_FLOAT_OES );
+ InsertES3FormatCombo(&set, GL_RG32F, GL_RG, GL_FLOAT );
+ InsertES3FormatCombo(&set, GL_RG16F, GL_RG, GL_FLOAT );
+ InsertES3FormatCombo(&set, GL_RG8UI, GL_RG_INTEGER, GL_UNSIGNED_BYTE );
+ InsertES3FormatCombo(&set, GL_RG8I, GL_RG_INTEGER, GL_BYTE );
+ InsertES3FormatCombo(&set, GL_RG16UI, GL_RG_INTEGER, GL_UNSIGNED_SHORT );
+ InsertES3FormatCombo(&set, GL_RG16I, GL_RG_INTEGER, GL_SHORT );
+ InsertES3FormatCombo(&set, GL_RG32UI, GL_RG_INTEGER, GL_UNSIGNED_INT );
+ InsertES3FormatCombo(&set, GL_RG32I, GL_RG_INTEGER, GL_INT );
+ InsertES3FormatCombo(&set, GL_R8, GL_RED, GL_UNSIGNED_BYTE );
+ InsertES3FormatCombo(&set, GL_R8_SNORM, GL_RED, GL_BYTE );
+ InsertES3FormatCombo(&set, GL_R16F, GL_RED, GL_HALF_FLOAT );
+ InsertES3FormatCombo(&set, GL_R16F, GL_RED, GL_HALF_FLOAT_OES );
+ InsertES3FormatCombo(&set, GL_R32F, GL_RED, GL_FLOAT );
+ InsertES3FormatCombo(&set, GL_R16F, GL_RED, GL_FLOAT );
+ InsertES3FormatCombo(&set, GL_R8UI, GL_RED_INTEGER, GL_UNSIGNED_BYTE );
+ InsertES3FormatCombo(&set, GL_R8I, GL_RED_INTEGER, GL_BYTE );
+ InsertES3FormatCombo(&set, GL_R16UI, GL_RED_INTEGER, GL_UNSIGNED_SHORT );
+ InsertES3FormatCombo(&set, GL_R16I, GL_RED_INTEGER, GL_SHORT );
+ InsertES3FormatCombo(&set, GL_R32UI, GL_RED_INTEGER, GL_UNSIGNED_INT );
+ InsertES3FormatCombo(&set, GL_R32I, GL_RED_INTEGER, GL_INT );
+
+ // Unsized formats
+ InsertES3FormatCombo(&set, GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE );
+ InsertES3FormatCombo(&set, GL_RGBA, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4 );
+ InsertES3FormatCombo(&set, GL_RGBA, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1 );
+ InsertES3FormatCombo(&set, GL_RGB, GL_RGB, GL_UNSIGNED_BYTE );
+ InsertES3FormatCombo(&set, GL_RGB, GL_RGB, GL_UNSIGNED_SHORT_5_6_5 );
+ InsertES3FormatCombo(&set, GL_LUMINANCE_ALPHA, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE );
+ InsertES3FormatCombo(&set, GL_LUMINANCE, GL_LUMINANCE, GL_UNSIGNED_BYTE );
+ InsertES3FormatCombo(&set, GL_ALPHA, GL_ALPHA, GL_UNSIGNED_BYTE );
+ InsertES3FormatCombo(&set, GL_SRGB_ALPHA_EXT, GL_SRGB_ALPHA_EXT, GL_UNSIGNED_BYTE );
+ InsertES3FormatCombo(&set, GL_SRGB_EXT, GL_SRGB_EXT, GL_UNSIGNED_BYTE );
+ InsertES3FormatCombo(&set, GL_RG, GL_RG, GL_UNSIGNED_BYTE );
+ InsertES3FormatCombo(&set, GL_RG, GL_RG, GL_FLOAT );
+ InsertES3FormatCombo(&set, GL_RG, GL_RG, GL_HALF_FLOAT );
+ InsertES3FormatCombo(&set, GL_RG, GL_RG, GL_HALF_FLOAT_OES );
+ InsertES3FormatCombo(&set, GL_RED, GL_RED, GL_UNSIGNED_BYTE );
+ InsertES3FormatCombo(&set, GL_RED, GL_RED, GL_FLOAT );
+ InsertES3FormatCombo(&set, GL_RED, GL_RED, GL_HALF_FLOAT );
+ InsertES3FormatCombo(&set, GL_RED, GL_RED, GL_HALF_FLOAT_OES );
+ InsertES3FormatCombo(&set, GL_DEPTH_STENCIL, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8 );
+
+ // Depth stencil formats
+ InsertES3FormatCombo(&set, GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT );
+ InsertES3FormatCombo(&set, GL_DEPTH_COMPONENT24, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT );
+ InsertES3FormatCombo(&set, GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT );
+ InsertES3FormatCombo(&set, GL_DEPTH_COMPONENT32F, GL_DEPTH_COMPONENT, GL_FLOAT );
+ InsertES3FormatCombo(&set, GL_DEPTH24_STENCIL8, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8 );
+ InsertES3FormatCombo(&set, GL_DEPTH32F_STENCIL8, GL_DEPTH_STENCIL, GL_FLOAT_32_UNSIGNED_INT_24_8_REV);
+
+ // From GL_EXT_sRGB
+ InsertES3FormatCombo(&set, GL_SRGB8_ALPHA8_EXT, GL_SRGB_ALPHA_EXT, GL_UNSIGNED_BYTE );
+ InsertES3FormatCombo(&set, GL_SRGB8, GL_SRGB_EXT, GL_UNSIGNED_BYTE );
+
+ // From GL_OES_texture_float
+ InsertES3FormatCombo(&set, GL_RGBA, GL_RGBA, GL_FLOAT );
+ InsertES3FormatCombo(&set, GL_RGB, GL_RGB, GL_FLOAT );
+ InsertES3FormatCombo(&set, GL_LUMINANCE_ALPHA, GL_LUMINANCE_ALPHA, GL_FLOAT );
+ InsertES3FormatCombo(&set, GL_LUMINANCE, GL_LUMINANCE, GL_FLOAT );
+ InsertES3FormatCombo(&set, GL_ALPHA, GL_ALPHA, GL_FLOAT );
+
+ // From GL_OES_texture_half_float
+ InsertES3FormatCombo(&set, GL_RGBA, GL_RGBA, GL_HALF_FLOAT_OES );
+ InsertES3FormatCombo(&set, GL_RGB, GL_RGB, GL_HALF_FLOAT_OES );
+ InsertES3FormatCombo(&set, GL_LUMINANCE_ALPHA, GL_LUMINANCE_ALPHA, GL_HALF_FLOAT );
+ InsertES3FormatCombo(&set, GL_LUMINANCE_ALPHA, GL_LUMINANCE_ALPHA, GL_HALF_FLOAT_OES );
+ InsertES3FormatCombo(&set, GL_LUMINANCE, GL_LUMINANCE, GL_HALF_FLOAT );
+ InsertES3FormatCombo(&set, GL_LUMINANCE, GL_LUMINANCE, GL_HALF_FLOAT_OES );
+ InsertES3FormatCombo(&set, GL_ALPHA, GL_ALPHA, GL_HALF_FLOAT );
+ InsertES3FormatCombo(&set, GL_ALPHA, GL_ALPHA, GL_HALF_FLOAT_OES );
+
+ // From GL_EXT_texture_format_BGRA8888
+ InsertES3FormatCombo(&set, GL_BGRA_EXT, GL_BGRA_EXT, GL_UNSIGNED_BYTE );
+
+ // From GL_EXT_texture_storage
+ // | Internal format | Format | Type |
+ // | | | |
+ InsertES3FormatCombo(&set, GL_ALPHA8_EXT, GL_ALPHA, GL_UNSIGNED_BYTE );
+ InsertES3FormatCombo(&set, GL_LUMINANCE8_EXT, GL_LUMINANCE, GL_UNSIGNED_BYTE );
+ InsertES3FormatCombo(&set, GL_LUMINANCE8_ALPHA8_EXT, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE );
+ InsertES3FormatCombo(&set, GL_ALPHA32F_EXT, GL_ALPHA, GL_FLOAT );
+ InsertES3FormatCombo(&set, GL_LUMINANCE32F_EXT, GL_LUMINANCE, GL_FLOAT );
+ InsertES3FormatCombo(&set, GL_LUMINANCE_ALPHA32F_EXT, GL_LUMINANCE_ALPHA, GL_FLOAT );
+ InsertES3FormatCombo(&set, GL_ALPHA16F_EXT, GL_ALPHA, GL_HALF_FLOAT );
+ InsertES3FormatCombo(&set, GL_ALPHA16F_EXT, GL_ALPHA, GL_HALF_FLOAT_OES );
+ InsertES3FormatCombo(&set, GL_LUMINANCE16F_EXT, GL_LUMINANCE, GL_HALF_FLOAT );
+ InsertES3FormatCombo(&set, GL_LUMINANCE16F_EXT, GL_LUMINANCE, GL_HALF_FLOAT_OES );
+ InsertES3FormatCombo(&set, GL_LUMINANCE_ALPHA16F_EXT, GL_LUMINANCE_ALPHA, GL_HALF_FLOAT );
+ InsertES3FormatCombo(&set, GL_LUMINANCE_ALPHA16F_EXT, GL_LUMINANCE_ALPHA, GL_HALF_FLOAT_OES );
+
+ // From GL_EXT_texture_storage and GL_EXT_texture_format_BGRA8888
+ InsertES3FormatCombo(&set, GL_BGRA8_EXT, GL_BGRA_EXT, GL_UNSIGNED_BYTE );
+ InsertES3FormatCombo(&set, GL_BGRA4_ANGLEX, GL_BGRA_EXT, GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT);
+ InsertES3FormatCombo(&set, GL_BGRA4_ANGLEX, GL_BGRA_EXT, GL_UNSIGNED_BYTE );
+ InsertES3FormatCombo(&set, GL_BGR5_A1_ANGLEX, GL_BGRA_EXT, GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT);
+ InsertES3FormatCombo(&set, GL_BGR5_A1_ANGLEX, GL_BGRA_EXT, GL_UNSIGNED_BYTE );
+
+ // From GL_ANGLE_depth_texture and OES_depth_texture
+ InsertES3FormatCombo(&set, GL_DEPTH_COMPONENT32_OES, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT_24_8_OES );
+ InsertES3FormatCombo(&set, GL_DEPTH_COMPONENT, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT );
+ InsertES3FormatCombo(&set, GL_DEPTH_COMPONENT, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT );
+
+ // From GL_EXT_texture_norm16
+ InsertES3FormatCombo(&set, GL_R16_EXT, GL_RED, GL_UNSIGNED_SHORT);
+ InsertES3FormatCombo(&set, GL_RG16_EXT, GL_RG, GL_UNSIGNED_SHORT);
+ InsertES3FormatCombo(&set, GL_RGB16_EXT, GL_RGB, GL_UNSIGNED_SHORT);
+ InsertES3FormatCombo(&set, GL_RGBA16_EXT, GL_RGBA, GL_UNSIGNED_SHORT);
+ InsertES3FormatCombo(&set, GL_R16_SNORM_EXT, GL_RED, GL_SHORT);
+ InsertES3FormatCombo(&set, GL_RG16_SNORM_EXT, GL_RG, GL_SHORT);
+ InsertES3FormatCombo(&set, GL_RGB16_SNORM_EXT, GL_RGB, GL_SHORT);
+ InsertES3FormatCombo(&set, GL_RGBA16_SNORM_EXT, GL_RGBA, GL_SHORT);
+ // clang-format on
+
+ return set;
+}
+
static bool ValidateTexImageFormatCombination(gl::Context *context, GLenum internalFormat, GLenum format, GLenum type)
{
// For historical reasons, glTexImage2D and glTexImage3D pass in their internal format as a
@@ -31,21 +226,54 @@ static bool ValidateTexImageFormatCombination(gl::Context *context, GLenum inter
// error instead of a GL_INVALID_ENUM error. As this validation function is only called in
// the validation codepaths for glTexImage2D/3D, we record a GL_INVALID_VALUE error.
const gl::InternalFormat &formatInfo = gl::GetInternalFormatInfo(internalFormat);
- if (!formatInfo.textureSupport(context->getClientVersion(), context->getExtensions()))
+ if (!formatInfo.textureSupport(context->getClientMajorVersion(), context->getExtensions()))
{
context->handleError(Error(GL_INVALID_VALUE));
return false;
}
// The type and format are valid if any supported internal format has that type and format
- if (!ValidES3Format(format) || !ValidES3Type(type))
+ bool formatSupported = false;
+ bool typeSupported = false;
+
+ static const ES3FormatCombinationSet es3FormatSet = BuildES3FormatSet();
+ for (ES3FormatCombinationSet::const_iterator i = es3FormatSet.begin(); i != es3FormatSet.end(); i++)
+ {
+ if (i->format == format || i->type == type)
+ {
+ const gl::InternalFormat &info = gl::GetInternalFormatInfo(i->internalFormat);
+ bool supported =
+ info.textureSupport(context->getClientMajorVersion(), context->getExtensions());
+ if (supported && i->type == type)
+ {
+ typeSupported = true;
+ }
+ if (supported && i->format == format)
+ {
+ formatSupported = true;
+ }
+
+ // Early-out if both type and format are supported now
+ if (typeSupported && formatSupported)
+ {
+ break;
+ }
+ }
+ }
+
+ if (!typeSupported || !formatSupported)
{
context->handleError(Error(GL_INVALID_ENUM));
return false;
}
// Check if this is a valid format combination to load texture data
- if (!ValidES3FormatCombination(format, type, internalFormat))
+ ES3FormatCombination searchFormat;
+ searchFormat.internalFormat = internalFormat;
+ searchFormat.format = format;
+ searchFormat.type = type;
+
+ if (es3FormatSet.find(searchFormat) == es3FormatSet.end())
{
context->handleError(Error(GL_INVALID_OPERATION));
return false;
@@ -69,7 +297,6 @@ bool ValidateES3TexImageParametersBase(Context *context,
GLint border,
GLenum format,
GLenum type,
- GLsizei imageSize,
const GLvoid *pixels)
{
// Validate image size
@@ -168,12 +395,6 @@ bool ValidateES3TexImageParametersBase(Context *context,
// Validate texture formats
GLenum actualInternalFormat =
isSubImage ? texture->getFormat(target, level).asSized() : internalformat;
- if (isSubImage && actualInternalFormat == GL_NONE)
- {
- context->handleError(Error(GL_INVALID_OPERATION, "Texture level does not exist."));
- return false;
- }
-
const gl::InternalFormat &actualFormatInfo = gl::GetInternalFormatInfo(actualInternalFormat);
if (isCompressed)
{
@@ -190,7 +411,8 @@ bool ValidateES3TexImageParametersBase(Context *context,
return false;
}
- if (!actualFormatInfo.textureSupport(context->getClientVersion(), context->getExtensions()))
+ if (!actualFormatInfo.textureSupport(context->getClientMajorVersion(),
+ context->getExtensions()))
{
context->handleError(Error(GL_INVALID_ENUM));
return false;
@@ -253,27 +475,70 @@ bool ValidateES3TexImageParametersBase(Context *context,
}
}
- if (!ValidImageDataSize(context, target, width, height, 1, actualInternalFormat, type, pixels,
- imageSize))
- {
- return false;
- }
-
// Check for pixel unpack buffer related API errors
gl::Buffer *pixelUnpackBuffer = context->getGLState().getTargetBuffer(GL_PIXEL_UNPACK_BUFFER);
- if (pixelUnpackBuffer != nullptr)
+ if (pixelUnpackBuffer != NULL)
{
+ // ...the data would be unpacked from the buffer object such that the memory reads required
+ // would exceed the data store size.
+ GLenum sizedFormat = GetSizedInternalFormat(actualInternalFormat, type);
+ const gl::InternalFormat &formatInfo = gl::GetInternalFormatInfo(sizedFormat);
+ const gl::Extents size(width, height, depth);
+ const auto &unpack = context->getGLState().getUnpackState();
+
+ auto copyBytesOrErr = formatInfo.computeUnpackSize(type, size, unpack);
+ if (copyBytesOrErr.isError())
+ {
+ context->handleError(copyBytesOrErr.getError());
+ return false;
+ }
+ CheckedNumeric<size_t> checkedCopyBytes(copyBytesOrErr.getResult());
+ CheckedNumeric<size_t> checkedOffset(reinterpret_cast<size_t>(pixels));
+ checkedCopyBytes += checkedOffset;
+
+ auto rowPitchOrErr =
+ formatInfo.computeRowPitch(type, width, unpack.alignment, unpack.rowLength);
+ if (rowPitchOrErr.isError())
+ {
+ context->handleError(rowPitchOrErr.getError());
+ return false;
+ }
+ auto depthPitchOrErr = formatInfo.computeDepthPitch(type, width, height, unpack.alignment,
+ unpack.rowLength, unpack.imageHeight);
+ if (depthPitchOrErr.isError())
+ {
+ context->handleError(depthPitchOrErr.getError());
+ return false;
+ }
+
+ bool targetIs3D = target == GL_TEXTURE_3D || target == GL_TEXTURE_2D_ARRAY;
+ auto skipBytesOrErr = formatInfo.computeSkipBytes(
+ rowPitchOrErr.getResult(), depthPitchOrErr.getResult(), unpack.skipImages,
+ unpack.skipRows, unpack.skipPixels, targetIs3D);
+ if (skipBytesOrErr.isError())
+ {
+ context->handleError(skipBytesOrErr.getError());
+ return false;
+ }
+ checkedCopyBytes += skipBytesOrErr.getResult();
+
+ if (!checkedCopyBytes.IsValid() ||
+ (checkedCopyBytes.ValueOrDie() > static_cast<size_t>(pixelUnpackBuffer->getSize())))
+ {
+ // Overflow past the end of the buffer
+ context->handleError(Error(GL_INVALID_OPERATION));
+ return false;
+ }
+
// ...data is not evenly divisible into the number of bytes needed to store in memory a datum
// indicated by type.
if (!isCompressed)
{
- size_t offset = reinterpret_cast<size_t>(pixels);
size_t dataBytesPerPixel = static_cast<size_t>(gl::GetTypeInfo(type).bytes);
- if ((offset % dataBytesPerPixel) != 0)
+ if ((checkedOffset.ValueOrDie() % dataBytesPerPixel) != 0)
{
- context->handleError(
- Error(GL_INVALID_OPERATION, "Reads would overflow the pixel unpack buffer."));
+ context->handleError(Error(GL_INVALID_OPERATION));
return false;
}
}
@@ -281,7 +546,7 @@ bool ValidateES3TexImageParametersBase(Context *context,
// ...the buffer object's data store is currently mapped.
if (pixelUnpackBuffer->isMapped())
{
- context->handleError(Error(GL_INVALID_OPERATION, "Pixel unpack buffer is mapped."));
+ context->handleError(Error(GL_INVALID_OPERATION));
return false;
}
}
@@ -304,7 +569,6 @@ bool ValidateES3TexImage2DParameters(Context *context,
GLint border,
GLenum format,
GLenum type,
- GLsizei imageSize,
const GLvoid *pixels)
{
if (!ValidTexture2DDestinationTarget(context, target))
@@ -315,7 +579,7 @@ bool ValidateES3TexImage2DParameters(Context *context,
return ValidateES3TexImageParametersBase(context, target, level, internalformat, isCompressed,
isSubImage, xoffset, yoffset, zoffset, width, height,
- depth, border, format, type, imageSize, pixels);
+ depth, border, format, type, pixels);
}
bool ValidateES3TexImage3DParameters(Context *context,
@@ -333,7 +597,6 @@ bool ValidateES3TexImage3DParameters(Context *context,
GLint border,
GLenum format,
GLenum type,
- GLsizei bufSize,
const GLvoid *pixels)
{
if (!ValidTexture3DDestinationTarget(context, target))
@@ -344,115 +607,169 @@ bool ValidateES3TexImage3DParameters(Context *context,
return ValidateES3TexImageParametersBase(context, target, level, internalformat, isCompressed,
isSubImage, xoffset, yoffset, zoffset, width, height,
- depth, border, format, type, bufSize, pixels);
+ depth, border, format, type, pixels);
}
struct EffectiveInternalFormatInfo
{
- GLenum effectiveFormat;
- GLenum destFormat;
- GLuint minRedBits;
- GLuint maxRedBits;
- GLuint minGreenBits;
- GLuint maxGreenBits;
- GLuint minBlueBits;
- GLuint maxBlueBits;
- GLuint minAlphaBits;
- GLuint maxAlphaBits;
+ GLenum mEffectiveFormat;
+ GLenum mDestFormat;
+ GLuint mMinRedBits;
+ GLuint mMaxRedBits;
+ GLuint mMinGreenBits;
+ GLuint mMaxGreenBits;
+ GLuint mMinBlueBits;
+ GLuint mMaxBlueBits;
+ GLuint mMinAlphaBits;
+ GLuint mMaxAlphaBits;
+
+ EffectiveInternalFormatInfo(GLenum effectiveFormat, GLenum destFormat, GLuint minRedBits, GLuint maxRedBits,
+ GLuint minGreenBits, GLuint maxGreenBits, GLuint minBlueBits, GLuint maxBlueBits,
+ GLuint minAlphaBits, GLuint maxAlphaBits)
+ : mEffectiveFormat(effectiveFormat), mDestFormat(destFormat), mMinRedBits(minRedBits),
+ mMaxRedBits(maxRedBits), mMinGreenBits(minGreenBits), mMaxGreenBits(maxGreenBits),
+ mMinBlueBits(minBlueBits), mMaxBlueBits(maxBlueBits), mMinAlphaBits(minAlphaBits),
+ mMaxAlphaBits(maxAlphaBits) {};
};
-static bool QueryEffectiveFormatList(const InternalFormat &srcFormat,
- GLenum targetFormat,
- const EffectiveInternalFormatInfo *list,
- size_t size,
- GLenum *outEffectiveFormat)
-{
- for (size_t curFormat = 0; curFormat < size; ++curFormat)
- {
- const EffectiveInternalFormatInfo &formatInfo = list[curFormat];
- if ((formatInfo.destFormat == targetFormat) &&
- (formatInfo.minRedBits <= srcFormat.redBits &&
- formatInfo.maxRedBits >= srcFormat.redBits) &&
- (formatInfo.minGreenBits <= srcFormat.greenBits &&
- formatInfo.maxGreenBits >= srcFormat.greenBits) &&
- (formatInfo.minBlueBits <= srcFormat.blueBits &&
- formatInfo.maxBlueBits >= srcFormat.blueBits) &&
- (formatInfo.minAlphaBits <= srcFormat.alphaBits &&
- formatInfo.maxAlphaBits >= srcFormat.alphaBits))
- {
- *outEffectiveFormat = formatInfo.effectiveFormat;
- return true;
- }
- }
+typedef std::vector<EffectiveInternalFormatInfo> EffectiveInternalFormatList;
- *outEffectiveFormat = GL_NONE;
- return false;
-}
-
-bool GetSizedEffectiveInternalFormatInfo(const InternalFormat &srcFormat,
- GLenum *outEffectiveFormat)
+static EffectiveInternalFormatList BuildSizedEffectiveInternalFormatList()
{
- // OpenGL ES 3.0.3 Specification, Table 3.17, pg 141:
- // Effective internal format coresponding to destination internal format and linear source
- // buffer component sizes.
- // | Source channel min/max sizes |
- // Effective Internal Format | N/A | R | G | B | A |
- // clang-format off
- constexpr EffectiveInternalFormatInfo list[] = {
- { GL_ALPHA8_EXT, GL_NONE, 0, 0, 0, 0, 0, 0, 1, 8 },
- { GL_R8, GL_NONE, 1, 8, 0, 0, 0, 0, 0, 0 },
- { GL_RG8, GL_NONE, 1, 8, 1, 8, 0, 0, 0, 0 },
- { GL_RGB565, GL_NONE, 1, 5, 1, 6, 1, 5, 0, 0 },
- { GL_RGB8, GL_NONE, 6, 8, 7, 8, 6, 8, 0, 0 },
- { GL_RGBA4, GL_NONE, 1, 4, 1, 4, 1, 4, 1, 4 },
- { GL_RGB5_A1, GL_NONE, 5, 5, 5, 5, 5, 5, 1, 1 },
- { GL_RGBA8, GL_NONE, 5, 8, 5, 8, 5, 8, 2, 8 },
- { GL_RGB10_A2, GL_NONE, 9, 10, 9, 10, 9, 10, 2, 2 },
- };
- // clang-format on
+ EffectiveInternalFormatList list;
- return QueryEffectiveFormatList(srcFormat, GL_NONE, list, ArraySize(list), outEffectiveFormat);
+ // OpenGL ES 3.0.3 Specification, Table 3.17, pg 141: Effective internal format coresponding to destination internal format and
+ // linear source buffer component sizes.
+ // | Source channel min/max sizes |
+ // Effective Internal Format | N/A | R | G | B | A |
+ list.push_back(EffectiveInternalFormatInfo(GL_ALPHA8_EXT, GL_NONE, 0, 0, 0, 0, 0, 0, 1, 8));
+ list.push_back(EffectiveInternalFormatInfo(GL_R8, GL_NONE, 1, 8, 0, 0, 0, 0, 0, 0));
+ list.push_back(EffectiveInternalFormatInfo(GL_RG8, GL_NONE, 1, 8, 1, 8, 0, 0, 0, 0));
+ list.push_back(EffectiveInternalFormatInfo(GL_RGB565, GL_NONE, 1, 5, 1, 6, 1, 5, 0, 0));
+ list.push_back(EffectiveInternalFormatInfo(GL_RGB8, GL_NONE, 6, 8, 7, 8, 6, 8, 0, 0));
+ list.push_back(EffectiveInternalFormatInfo(GL_RGBA4, GL_NONE, 1, 4, 1, 4, 1, 4, 1, 4));
+ list.push_back(EffectiveInternalFormatInfo(GL_RGB5_A1, GL_NONE, 5, 5, 5, 5, 5, 5, 1, 1));
+ list.push_back(EffectiveInternalFormatInfo(GL_RGBA8, GL_NONE, 5, 8, 5, 8, 5, 8, 2, 8));
+ list.push_back(EffectiveInternalFormatInfo(GL_RGB10_A2, GL_NONE, 9, 10, 9, 10, 9, 10, 2, 2));
+
+ return list;
}
-bool GetUnsizedEffectiveInternalFormatInfo(const InternalFormat &srcFormat,
- const InternalFormat &destFormat,
- GLenum *outEffectiveFormat)
+static EffectiveInternalFormatList BuildUnsizedEffectiveInternalFormatList()
{
- constexpr GLuint umax = UINT_MAX;
+ EffectiveInternalFormatList list;
- // OpenGL ES 3.0.3 Specification, Table 3.17, pg 141:
- // Effective internal format coresponding to destination internal format andlinear source buffer
- // component sizes.
- // | Source channel min/max sizes |
- // Effective Internal Format | Dest Format | R | G | B | A |
- // clang-format off
- constexpr EffectiveInternalFormatInfo list[] = {
- { GL_ALPHA8_EXT, GL_ALPHA, 0, umax, 0, umax, 0, umax, 1, 8 },
- { GL_LUMINANCE8_EXT, GL_LUMINANCE, 1, 8, 0, umax, 0, umax, 0, umax },
- { GL_LUMINANCE8_ALPHA8_EXT, GL_LUMINANCE_ALPHA, 1, 8, 0, umax, 0, umax, 1, 8 },
- { GL_RGB565, GL_RGB, 1, 5, 1, 6, 1, 5, 0, umax },
- { GL_RGB8, GL_RGB, 6, 8, 7, 8, 6, 8, 0, umax },
- { GL_RGBA4, GL_RGBA, 1, 4, 1, 4, 1, 4, 1, 4 },
- { GL_RGB5_A1, GL_RGBA, 5, 5, 5, 5, 5, 5, 1, 1 },
- { GL_RGBA8, GL_RGBA, 5, 8, 5, 8, 5, 8, 5, 8 },
- };
- // clang-format on
+ // OpenGL ES 3.0.3 Specification, Table 3.17, pg 141: Effective internal format coresponding to destination internal format and
+ // linear source buffer component sizes.
+ // | Source channel min/max sizes |
+ // Effective Internal Format | Dest Format | R | G | B | A |
+ list.push_back(EffectiveInternalFormatInfo(GL_ALPHA8_EXT, GL_ALPHA, 0, UINT_MAX, 0, UINT_MAX, 0, UINT_MAX, 1, 8));
+ list.push_back(EffectiveInternalFormatInfo(GL_LUMINANCE8_EXT, GL_LUMINANCE, 1, 8, 0, UINT_MAX, 0, UINT_MAX, 0, UINT_MAX));
+ list.push_back(EffectiveInternalFormatInfo(GL_LUMINANCE8_ALPHA8_EXT, GL_LUMINANCE_ALPHA, 1, 8, 0, UINT_MAX, 0, UINT_MAX, 1, 8));
+ list.push_back(EffectiveInternalFormatInfo(GL_RGB565, GL_RGB, 1, 5, 1, 6, 1, 5, 0, UINT_MAX));
+ list.push_back(EffectiveInternalFormatInfo(GL_RGB8, GL_RGB, 6, 8, 7, 8, 6, 8, 0, UINT_MAX));
+ list.push_back(EffectiveInternalFormatInfo(GL_RGBA4, GL_RGBA, 1, 4, 1, 4, 1, 4, 1, 4));
+ list.push_back(EffectiveInternalFormatInfo(GL_RGB5_A1, GL_RGBA, 5, 5, 5, 5, 5, 5, 1, 1));
+ list.push_back(EffectiveInternalFormatInfo(GL_RGBA8, GL_RGBA, 5, 8, 5, 8, 5, 8, 5, 8));
- return QueryEffectiveFormatList(srcFormat, destFormat.format, list, ArraySize(list),
- outEffectiveFormat);
+ return list;
}
static bool GetEffectiveInternalFormat(const InternalFormat &srcFormat, const InternalFormat &destFormat,
GLenum *outEffectiveFormat)
{
+ const EffectiveInternalFormatList *list = NULL;
+ GLenum targetFormat = GL_NONE;
+
if (destFormat.pixelBytes > 0)
{
- return GetSizedEffectiveInternalFormatInfo(srcFormat, outEffectiveFormat);
+ static const EffectiveInternalFormatList sizedList = BuildSizedEffectiveInternalFormatList();
+ list = &sizedList;
}
else
{
- return GetUnsizedEffectiveInternalFormatInfo(srcFormat, destFormat, outEffectiveFormat);
+ static const EffectiveInternalFormatList unsizedList = BuildUnsizedEffectiveInternalFormatList();
+ list = &unsizedList;
+ targetFormat = destFormat.format;
}
+
+ for (size_t curFormat = 0; curFormat < list->size(); ++curFormat)
+ {
+ const EffectiveInternalFormatInfo& formatInfo = list->at(curFormat);
+ if ((formatInfo.mDestFormat == targetFormat) &&
+ (formatInfo.mMinRedBits <= srcFormat.redBits && formatInfo.mMaxRedBits >= srcFormat.redBits) &&
+ (formatInfo.mMinGreenBits <= srcFormat.greenBits && formatInfo.mMaxGreenBits >= srcFormat.greenBits) &&
+ (formatInfo.mMinBlueBits <= srcFormat.blueBits && formatInfo.mMaxBlueBits >= srcFormat.blueBits) &&
+ (formatInfo.mMinAlphaBits <= srcFormat.alphaBits && formatInfo.mMaxAlphaBits >= srcFormat.alphaBits))
+ {
+ *outEffectiveFormat = formatInfo.mEffectiveFormat;
+ return true;
+ }
+ }
+
+ return false;
+}
+
+struct CopyConversion
+{
+ GLenum mTextureFormat;
+ GLenum mFramebufferFormat;
+
+ CopyConversion(GLenum textureFormat, GLenum framebufferFormat)
+ : mTextureFormat(textureFormat), mFramebufferFormat(framebufferFormat) { }
+
+ bool operator<(const CopyConversion& other) const
+ {
+ return memcmp(this, &other, sizeof(CopyConversion)) < 0;
+ }
+};
+
+typedef std::set<CopyConversion> CopyConversionSet;
+
+static CopyConversionSet BuildValidES3CopyTexImageCombinations()
+{
+ CopyConversionSet set;
+
+ // From ES 3.0.1 spec, table 3.15
+ set.insert(CopyConversion(GL_ALPHA, GL_RGBA));
+ set.insert(CopyConversion(GL_LUMINANCE, GL_RED));
+ set.insert(CopyConversion(GL_LUMINANCE, GL_RG));
+ set.insert(CopyConversion(GL_LUMINANCE, GL_RGB));
+ set.insert(CopyConversion(GL_LUMINANCE, GL_RGBA));
+ set.insert(CopyConversion(GL_LUMINANCE_ALPHA, GL_RGBA));
+ set.insert(CopyConversion(GL_RED, GL_RED));
+ set.insert(CopyConversion(GL_RED, GL_RG));
+ set.insert(CopyConversion(GL_RED, GL_RGB));
+ set.insert(CopyConversion(GL_RED, GL_RGBA));
+ set.insert(CopyConversion(GL_RG, GL_RG));
+ set.insert(CopyConversion(GL_RG, GL_RGB));
+ set.insert(CopyConversion(GL_RG, GL_RGBA));
+ set.insert(CopyConversion(GL_RGB, GL_RGB));
+ set.insert(CopyConversion(GL_RGB, GL_RGBA));
+ set.insert(CopyConversion(GL_RGBA, GL_RGBA));
+
+ // Necessary for ANGLE back-buffers
+ set.insert(CopyConversion(GL_ALPHA, GL_BGRA_EXT));
+ set.insert(CopyConversion(GL_LUMINANCE, GL_BGRA_EXT));
+ set.insert(CopyConversion(GL_LUMINANCE_ALPHA, GL_BGRA_EXT));
+ set.insert(CopyConversion(GL_RED, GL_BGRA_EXT));
+ set.insert(CopyConversion(GL_RG, GL_BGRA_EXT));
+ set.insert(CopyConversion(GL_RGB, GL_BGRA_EXT));
+ set.insert(CopyConversion(GL_RGBA, GL_BGRA_EXT));
+ set.insert(CopyConversion(GL_BGRA_EXT, GL_BGRA_EXT));
+
+ set.insert(CopyConversion(GL_RED_INTEGER, GL_RED_INTEGER));
+ set.insert(CopyConversion(GL_RED_INTEGER, GL_RG_INTEGER));
+ set.insert(CopyConversion(GL_RED_INTEGER, GL_RGB_INTEGER));
+ set.insert(CopyConversion(GL_RED_INTEGER, GL_RGBA_INTEGER));
+ set.insert(CopyConversion(GL_RG_INTEGER, GL_RG_INTEGER));
+ set.insert(CopyConversion(GL_RG_INTEGER, GL_RGB_INTEGER));
+ set.insert(CopyConversion(GL_RG_INTEGER, GL_RGBA_INTEGER));
+ set.insert(CopyConversion(GL_RGB_INTEGER, GL_RGB_INTEGER));
+ set.insert(CopyConversion(GL_RGB_INTEGER, GL_RGBA_INTEGER));
+ set.insert(CopyConversion(GL_RGBA_INTEGER, GL_RGBA_INTEGER));
+
+ return set;
}
static bool EqualOrFirstZero(GLuint first, GLuint second)
@@ -467,129 +784,129 @@ static bool IsValidES3CopyTexImageCombination(const Format &textureFormat,
const auto &textureFormatInfo = *textureFormat.info;
const auto &framebufferFormatInfo = *framebufferFormat.info;
- if (!ValidES3CopyConversion(textureFormatInfo.format, framebufferFormatInfo.format))
+ static const CopyConversionSet conversionSet = BuildValidES3CopyTexImageCombinations();
+ if (conversionSet.find(CopyConversion(textureFormatInfo.format,
+ framebufferFormatInfo.format)) != conversionSet.end())
{
- return false;
- }
-
- // Section 3.8.5 of the GLES 3.0.3 spec states that source and destination formats
- // must both be signed, unsigned, or fixed point and both source and destinations
- // must be either both SRGB or both not SRGB. EXT_color_buffer_float adds allowed
- // conversion between fixed and floating point.
+ // Section 3.8.5 of the GLES 3.0.3 spec states that source and destination formats
+ // must both be signed, unsigned, or fixed point and both source and destinations
+ // must be either both SRGB or both not SRGB. EXT_color_buffer_float adds allowed
+ // conversion between fixed and floating point.
- if ((textureFormatInfo.colorEncoding == GL_SRGB) !=
- (framebufferFormatInfo.colorEncoding == GL_SRGB))
- {
- return false;
- }
-
- if (((textureFormatInfo.componentType == GL_INT) !=
- (framebufferFormatInfo.componentType == GL_INT)) ||
- ((textureFormatInfo.componentType == GL_UNSIGNED_INT) !=
- (framebufferFormatInfo.componentType == GL_UNSIGNED_INT)))
- {
- return false;
- }
-
- if ((textureFormatInfo.componentType == GL_UNSIGNED_NORMALIZED ||
- textureFormatInfo.componentType == GL_SIGNED_NORMALIZED ||
- textureFormatInfo.componentType == GL_FLOAT) &&
- !(framebufferFormatInfo.componentType == GL_UNSIGNED_NORMALIZED ||
- framebufferFormatInfo.componentType == GL_SIGNED_NORMALIZED ||
- framebufferFormatInfo.componentType == GL_FLOAT))
- {
- return false;
- }
+ if ((textureFormatInfo.colorEncoding == GL_SRGB) !=
+ (framebufferFormatInfo.colorEncoding == GL_SRGB))
+ {
+ return false;
+ }
- // GLES specification 3.0.3, sec 3.8.5, pg 139-140:
- // The effective internal format of the source buffer is determined with the following rules
- // applied in order:
- // * If the source buffer is a texture or renderbuffer that was created with a sized internal
- // format then the effective internal format is the source buffer's sized internal format.
- // * If the source buffer is a texture that was created with an unsized base internal format,
- // then the effective internal format is the source image array's effective internal
- // format, as specified by table 3.12, which is determined from the <format> and <type>
- // that were used when the source image array was specified by TexImage*.
- // * Otherwise the effective internal format is determined by the row in table 3.17 or 3.18
- // where Destination Internal Format matches internalformat and where the [source channel
- // sizes] are consistent with the values of the source buffer's [channel sizes]. Table 3.17
- // is used if the FRAMEBUFFER_ATTACHMENT_ENCODING is LINEAR and table 3.18 is used if the
- // FRAMEBUFFER_ATTACHMENT_ENCODING is SRGB.
- const InternalFormat *sourceEffectiveFormat = NULL;
- if (readBufferHandle != 0)
- {
- // Not the default framebuffer, therefore the read buffer must be a user-created texture or
- // renderbuffer
- if (framebufferFormat.sized)
+ if (((textureFormatInfo.componentType == GL_INT) !=
+ (framebufferFormatInfo.componentType == GL_INT)) ||
+ ((textureFormatInfo.componentType == GL_UNSIGNED_INT) !=
+ (framebufferFormatInfo.componentType == GL_UNSIGNED_INT)))
{
- sourceEffectiveFormat = &framebufferFormatInfo;
+ return false;
}
- else
+
+ if ((textureFormatInfo.componentType == GL_UNSIGNED_NORMALIZED ||
+ textureFormatInfo.componentType == GL_SIGNED_NORMALIZED ||
+ textureFormatInfo.componentType == GL_FLOAT) &&
+ !(framebufferFormatInfo.componentType == GL_UNSIGNED_NORMALIZED ||
+ framebufferFormatInfo.componentType == GL_SIGNED_NORMALIZED ||
+ framebufferFormatInfo.componentType == GL_FLOAT))
{
- // Renderbuffers cannot be created with an unsized internal format, so this must be an
- // unsized-format texture. We can use the same table we use when creating textures to
- // get its effective sized format.
- GLenum sizedInternalFormat =
- GetSizedInternalFormat(framebufferFormatInfo.format, framebufferFormatInfo.type);
- sourceEffectiveFormat = &GetInternalFormatInfo(sizedInternalFormat);
+ return false;
}
- }
- else
- {
- // The effective internal format must be derived from the source framebuffer's channel
- // sizes. This is done in GetEffectiveInternalFormat for linear buffers (table 3.17)
- if (framebufferFormatInfo.colorEncoding == GL_LINEAR)
+
+ // GLES specification 3.0.3, sec 3.8.5, pg 139-140:
+ // The effective internal format of the source buffer is determined with the following rules applied in order:
+ // * If the source buffer is a texture or renderbuffer that was created with a sized internal format then the
+ // effective internal format is the source buffer's sized internal format.
+ // * If the source buffer is a texture that was created with an unsized base internal format, then the
+ // effective internal format is the source image array's effective internal format, as specified by table
+ // 3.12, which is determined from the <format> and <type> that were used when the source image array was
+ // specified by TexImage*.
+ // * Otherwise the effective internal format is determined by the row in table 3.17 or 3.18 where
+ // Destination Internal Format matches internalformat and where the [source channel sizes] are consistent
+ // with the values of the source buffer's [channel sizes]. Table 3.17 is used if the
+ // FRAMEBUFFER_ATTACHMENT_ENCODING is LINEAR and table 3.18 is used if the FRAMEBUFFER_ATTACHMENT_ENCODING
+ // is SRGB.
+ const InternalFormat *sourceEffectiveFormat = NULL;
+ if (readBufferHandle != 0)
{
- GLenum effectiveFormat;
- if (GetEffectiveInternalFormat(framebufferFormatInfo, textureFormatInfo,
- &effectiveFormat))
+ // Not the default framebuffer, therefore the read buffer must be a user-created texture or renderbuffer
+ if (framebufferFormat.sized)
{
- sourceEffectiveFormat = &GetInternalFormatInfo(effectiveFormat);
+ sourceEffectiveFormat = &framebufferFormatInfo;
}
else
{
- return false;
+ // Renderbuffers cannot be created with an unsized internal format, so this must be an unsized-format
+ // texture. We can use the same table we use when creating textures to get its effective sized format.
+ GLenum sizedInternalFormat = GetSizedInternalFormat(framebufferFormatInfo.format,
+ framebufferFormatInfo.type);
+ sourceEffectiveFormat = &GetInternalFormatInfo(sizedInternalFormat);
}
}
- else if (framebufferFormatInfo.colorEncoding == GL_SRGB)
+ else
{
- // SRGB buffers can only be copied to sized format destinations according to table 3.18
- if (textureFormat.sized &&
- (framebufferFormatInfo.redBits >= 1 && framebufferFormatInfo.redBits <= 8) &&
- (framebufferFormatInfo.greenBits >= 1 && framebufferFormatInfo.greenBits <= 8) &&
- (framebufferFormatInfo.blueBits >= 1 && framebufferFormatInfo.blueBits <= 8) &&
- (framebufferFormatInfo.alphaBits >= 1 && framebufferFormatInfo.alphaBits <= 8))
+ // The effective internal format must be derived from the source framebuffer's channel sizes.
+ // This is done in GetEffectiveInternalFormat for linear buffers (table 3.17)
+ if (framebufferFormatInfo.colorEncoding == GL_LINEAR)
{
- sourceEffectiveFormat = &GetInternalFormatInfo(GL_SRGB8_ALPHA8);
+ GLenum effectiveFormat;
+ if (GetEffectiveInternalFormat(framebufferFormatInfo, textureFormatInfo,
+ &effectiveFormat))
+ {
+ sourceEffectiveFormat = &GetInternalFormatInfo(effectiveFormat);
+ }
+ else
+ {
+ return false;
+ }
+ }
+ else if (framebufferFormatInfo.colorEncoding == GL_SRGB)
+ {
+ // SRGB buffers can only be copied to sized format destinations according to table 3.18
+ if (textureFormat.sized &&
+ (framebufferFormatInfo.redBits >= 1 && framebufferFormatInfo.redBits <= 8) &&
+ (framebufferFormatInfo.greenBits >= 1 &&
+ framebufferFormatInfo.greenBits <= 8) &&
+ (framebufferFormatInfo.blueBits >= 1 && framebufferFormatInfo.blueBits <= 8) &&
+ (framebufferFormatInfo.alphaBits >= 1 && framebufferFormatInfo.alphaBits <= 8))
+ {
+ sourceEffectiveFormat = &GetInternalFormatInfo(GL_SRGB8_ALPHA8);
+ }
+ else
+ {
+ return false;
+ }
}
else
{
+ UNREACHABLE();
return false;
}
}
- else
- {
- UNREACHABLE();
- return false;
- }
- }
- if (textureFormat.sized)
- {
- // Section 3.8.5 of the GLES 3.0.3 spec, pg 139, requires that, if the destination format is
- // sized, component sizes of the source and destination formats must exactly match if the
- // destination format exists.
- if (!EqualOrFirstZero(textureFormatInfo.redBits, sourceEffectiveFormat->redBits) ||
- !EqualOrFirstZero(textureFormatInfo.greenBits, sourceEffectiveFormat->greenBits) ||
- !EqualOrFirstZero(textureFormatInfo.blueBits, sourceEffectiveFormat->blueBits) ||
- !EqualOrFirstZero(textureFormatInfo.alphaBits, sourceEffectiveFormat->alphaBits))
+ if (textureFormat.sized)
{
- return false;
+ // Section 3.8.5 of the GLES 3.0.3 spec, pg 139, requires that, if the destination
+ // format is sized, component sizes of the source and destination formats must exactly
+ // match if the destination format exists.
+ if (!EqualOrFirstZero(textureFormatInfo.redBits, sourceEffectiveFormat->redBits) ||
+ !EqualOrFirstZero(textureFormatInfo.greenBits, sourceEffectiveFormat->greenBits) ||
+ !EqualOrFirstZero(textureFormatInfo.blueBits, sourceEffectiveFormat->blueBits) ||
+ !EqualOrFirstZero(textureFormatInfo.alphaBits, sourceEffectiveFormat->alphaBits))
+ {
+ return false;
+ }
}
+
+ return true; // A conversion function exists, and no rule in the specification has precluded conversion
+ // between these formats.
}
- return true; // A conversion function exists, and no rule in the specification has precluded
- // conversion between these formats.
+ return false;
}
bool ValidateES3CopyTexImageParametersBase(ValidationContext *context,
@@ -808,7 +1125,7 @@ bool ValidateES3TexStorageParametersBase(Context *context,
}
const gl::InternalFormat &formatInfo = gl::GetInternalFormatInfo(internalformat);
- if (!formatInfo.textureSupport(context->getClientVersion(), context->getExtensions()))
+ if (!formatInfo.textureSupport(context->getClientMajorVersion(), context->getExtensions()))
{
context->handleError(Error(GL_INVALID_ENUM));
return false;
@@ -889,7 +1206,7 @@ bool ValidateGetQueryiv(Context *context, GLenum target, GLenum pname, GLint *pa
return false;
}
- return ValidateGetQueryivBase(context, target, pname, nullptr);
+ return ValidateGetQueryivBase(context, target, pname);
}
bool ValidateGetQueryObjectuiv(Context *context, GLuint id, GLenum pname, GLuint *params)
@@ -900,7 +1217,7 @@ bool ValidateGetQueryObjectuiv(Context *context, GLuint id, GLenum pname, GLuint
return false;
}
- return ValidateGetQueryObjectValueBase(context, id, pname, nullptr);
+ return ValidateGetQueryObjectValueBase(context, id, pname);
}
bool ValidateFramebufferTextureLayer(Context *context, GLenum target, GLenum attachment,
@@ -979,6 +1296,100 @@ bool ValidateFramebufferTextureLayer(Context *context, GLenum target, GLenum att
return true;
}
+bool ValidES3ReadFormatType(ValidationContext *context,
+ GLenum internalFormat,
+ GLenum format,
+ GLenum type)
+{
+ const gl::InternalFormat &internalFormatInfo = gl::GetInternalFormatInfo(internalFormat);
+
+ switch (format)
+ {
+ case GL_RGBA:
+ switch (type)
+ {
+ case GL_UNSIGNED_BYTE:
+ break;
+ case GL_UNSIGNED_SHORT:
+ if (internalFormatInfo.componentType != GL_UNSIGNED_NORMALIZED &&
+ internalFormatInfo.type != GL_UNSIGNED_SHORT)
+ {
+ return false;
+ }
+ break;
+ case GL_UNSIGNED_INT_2_10_10_10_REV:
+ if (internalFormat != GL_RGB10_A2)
+ {
+ return false;
+ }
+ break;
+ case GL_FLOAT:
+ if (internalFormatInfo.componentType != GL_FLOAT)
+ {
+ return false;
+ }
+ break;
+ default:
+ return false;
+ }
+ break;
+ case GL_RGBA_INTEGER:
+ switch (type)
+ {
+ case GL_INT:
+ if (internalFormatInfo.componentType != GL_INT)
+ {
+ return false;
+ }
+ break;
+ case GL_UNSIGNED_INT:
+ if (internalFormatInfo.componentType != GL_UNSIGNED_INT)
+ {
+ return false;
+ }
+ break;
+ default:
+ return false;
+ }
+ break;
+ case GL_BGRA_EXT:
+ switch (type)
+ {
+ case GL_UNSIGNED_BYTE:
+ case GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT:
+ case GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT:
+ break;
+ default:
+ return false;
+ }
+ break;
+ case GL_RG_EXT:
+ case GL_RED_EXT:
+ if (!context->getExtensions().textureRG)
+ {
+ return false;
+ }
+ switch (type)
+ {
+ case GL_UNSIGNED_BYTE:
+ break;
+ case GL_UNSIGNED_SHORT:
+ if (internalFormatInfo.componentType != GL_UNSIGNED_NORMALIZED &&
+ internalFormatInfo.type != GL_UNSIGNED_SHORT)
+ {
+ return false;
+ }
+ break;
+ default:
+ return false;
+ }
+ break;
+ default:
+ return false;
+ }
+ return true;
+}
+
bool ValidateES3RenderbufferStorageParameters(gl::Context *context, GLenum target, GLsizei samples,
GLenum internalformat, GLsizei width, GLsizei height)
{
@@ -1191,7 +1602,7 @@ bool ValidateCompressedTexImage3D(Context *context,
}
auto blockSizeOrErr =
- formatInfo.computeCompressedImageSize(gl::Extents(width, height, depth));
+ formatInfo.computeCompressedImageSize(GL_UNSIGNED_BYTE, gl::Extents(width, height, depth));
if (blockSizeOrErr.isError())
{
context->handleError(Error(GL_INVALID_VALUE));
@@ -1213,8 +1624,7 @@ bool ValidateCompressedTexImage3D(Context *context,
// validateES3TexImageFormat sets the error code if there is an error
if (!ValidateES3TexImage3DParameters(context, target, level, internalformat, true, false, 0, 0,
- 0, width, height, depth, border, GL_NONE, GL_NONE, -1,
- data))
+ 0, width, height, depth, border, GL_NONE, GL_NONE, data))
{
return false;
}
@@ -1492,37 +1902,8 @@ bool ValidateTexImage3D(Context *context,
}
return ValidateES3TexImage3DParameters(context, target, level, internalformat, false, false, 0,
- 0, 0, width, height, depth, border, format, type, -1,
- pixels);
-}
-
-bool ValidateTexImage3DRobustANGLE(Context *context,
- GLenum target,
- GLint level,
- GLint internalformat,
- GLsizei width,
- GLsizei height,
- GLsizei depth,
- GLint border,
- GLenum format,
- GLenum type,
- GLsizei bufSize,
- const GLvoid *pixels)
-{
- if (context->getClientMajorVersion() < 3)
- {
- context->handleError(Error(GL_INVALID_OPERATION));
- return false;
- }
-
- if (!ValidateRobustEntryPoint(context, bufSize))
- {
- return false;
- }
-
- return ValidateES3TexImage3DParameters(context, target, level, internalformat, false, false, 0,
0, 0, width, height, depth, border, format, type,
- bufSize, pixels);
+ pixels);
}
bool ValidateTexSubImage3D(Context *context,
@@ -1546,37 +1927,7 @@ bool ValidateTexSubImage3D(Context *context,
return ValidateES3TexImage3DParameters(context, target, level, GL_NONE, false, true, xoffset,
yoffset, zoffset, width, height, depth, 0, format, type,
- -1, pixels);
-}
-
-bool ValidateTexSubImage3DRobustANGLE(Context *context,
- GLenum target,
- GLint level,
- GLint xoffset,
- GLint yoffset,
- GLint zoffset,
- GLsizei width,
- GLsizei height,
- GLsizei depth,
- GLenum format,
- GLenum type,
- GLsizei bufSize,
- const GLvoid *pixels)
-{
- if (context->getClientMajorVersion() < 3)
- {
- context->handleError(Error(GL_INVALID_OPERATION));
- return false;
- }
-
- if (!ValidateRobustEntryPoint(context, bufSize))
- {
- return false;
- }
-
- return ValidateES3TexImage3DParameters(context, target, level, GL_NONE, false, true, xoffset,
- yoffset, zoffset, width, height, depth, 0, format, type,
- bufSize, pixels);
+ pixels);
}
bool ValidateCompressedTexSubImage3D(Context *context,
@@ -1600,7 +1951,7 @@ bool ValidateCompressedTexSubImage3D(Context *context,
const InternalFormat &formatInfo = GetInternalFormatInfo(format);
auto blockSizeOrErr =
- formatInfo.computeCompressedImageSize(gl::Extents(width, height, depth));
+ formatInfo.computeCompressedImageSize(GL_UNSIGNED_BYTE, gl::Extents(width, height, depth));
if (blockSizeOrErr.isError())
{
context->handleError(blockSizeOrErr.getError());
@@ -1619,7 +1970,7 @@ bool ValidateCompressedTexSubImage3D(Context *context,
}
return ValidateES3TexImage3DParameters(context, target, level, GL_NONE, true, true, 0, 0, 0,
- width, height, depth, 0, GL_NONE, GL_NONE, -1, data);
+ width, height, depth, 0, GL_NONE, GL_NONE, data);
}
bool ValidateGenQueries(Context *context, GLint n, GLuint *)
@@ -1732,36 +2083,50 @@ bool ValidateBeginTransformFeedback(Context *context, GLenum primitiveMode)
return true;
}
-bool ValidateGetBufferPointerv(Context *context, GLenum target, GLenum pname, GLvoid **params)
-{
- return ValidateGetBufferPointervBase(context, target, pname, nullptr, params);
-}
-
-bool ValidateGetBufferPointervRobustANGLE(Context *context,
- GLenum target,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLvoid **params)
+bool ValidateSamplerParameteri(Context *context, GLuint sampler, GLenum pname, GLint param)
{
- if (!ValidateRobustEntryPoint(context, bufSize))
+ if (context->getClientMajorVersion() < 3)
{
+ context->handleError(Error(GL_INVALID_OPERATION, "Context does not support GLES3."));
return false;
}
- if (!ValidateGetBufferPointervBase(context, target, pname, length, params))
+ if (!context->isSampler(sampler))
{
+ context->handleError(Error(GL_INVALID_OPERATION));
return false;
}
- if (!ValidateRobustBufferSize(context, bufSize, *length))
+ if (!ValidateSamplerObjectParameter(context, pname))
{
return false;
}
+ if (!ValidateTexParamParameters(context, GL_TEXTURE_2D, pname, param))
+ {
+ return false;
+ }
return true;
}
+bool ValidateSamplerParameterf(Context *context, GLuint sampler, GLenum pname, GLfloat param)
+{
+ // The only float parameters are MIN_LOD and MAX_LOD. For these any value is permissible, so
+ // ValidateSamplerParameteri can be used for validation here.
+ return ValidateSamplerParameteri(context, sampler, pname, static_cast<GLint>(param));
+}
+
+bool ValidateGetBufferPointerv(Context *context, GLenum target, GLenum pname, GLvoid **params)
+{
+ if (context->getClientMajorVersion() < 3)
+ {
+ context->handleError(Error(GL_INVALID_OPERATION, "Context does not support GLES3."));
+ return false;
+ }
+
+ return ValidateGetBufferPointervBase(context, target, pname, params);
+}
+
bool ValidateUnmapBuffer(Context *context, GLenum target)
{
if (context->getClientMajorVersion() < 3)
@@ -1802,16 +2167,8 @@ bool ValidateFlushMappedBufferRange(Context *context,
return ValidateFlushMappedBufferRangeBase(context, target, offset, length);
}
-bool ValidateIndexedStateQuery(ValidationContext *context,
- GLenum pname,
- GLuint index,
- GLsizei *length)
+bool ValidateIndexedStateQuery(ValidationContext *context, GLenum pname, GLuint index)
{
- if (length)
- {
- *length = 0;
- }
-
GLenum nativeType;
unsigned int numParams;
if (!context->getIndexedQueryParameterInfo(pname, &nativeType, &numParams))
@@ -1855,9 +2212,10 @@ bool ValidateIndexedStateQuery(ValidationContext *context,
return false;
}
- if (length)
+ // pname is valid, but there are no parameters to return
+ if (numParams == 0)
{
- *length = 1;
+ return false;
}
return true;
@@ -1865,174 +2223,22 @@ bool ValidateIndexedStateQuery(ValidationContext *context,
bool ValidateGetIntegeri_v(ValidationContext *context, GLenum target, GLuint index, GLint *data)
{
- if (context->getClientVersion() < ES_3_0)
- {
- context->handleError(Error(GL_INVALID_OPERATION, "Context does not support GLES3.0"));
- return false;
- }
- return ValidateIndexedStateQuery(context, target, index, nullptr);
-}
-
-bool ValidateGetIntegeri_vRobustANGLE(ValidationContext *context,
- GLenum target,
- GLuint index,
- GLsizei bufSize,
- GLsizei *length,
- GLint *data)
-{
- if (context->getClientVersion() < ES_3_0)
+ if (!context->getGLVersion().isES3OrGreater())
{
context->handleError(Error(GL_INVALID_OPERATION, "Context does not support GLES3.0"));
return false;
}
-
- if (!ValidateRobustEntryPoint(context, bufSize))
- {
- return false;
- }
-
- if (!ValidateIndexedStateQuery(context, target, index, length))
- {
- return false;
- }
-
- if (!ValidateRobustBufferSize(context, bufSize, *length))
- {
- return false;
- }
-
- return true;
+ return ValidateIndexedStateQuery(context, target, index);
}
bool ValidateGetInteger64i_v(ValidationContext *context, GLenum target, GLuint index, GLint64 *data)
{
- if (context->getClientVersion() < ES_3_0)
+ if (!context->getGLVersion().isES3OrGreater())
{
context->handleError(Error(GL_INVALID_OPERATION, "Context does not support GLES3.0"));
return false;
}
- return ValidateIndexedStateQuery(context, target, index, nullptr);
-}
-
-bool ValidateGetInteger64i_vRobustANGLE(ValidationContext *context,
- GLenum target,
- GLuint index,
- GLsizei bufSize,
- GLsizei *length,
- GLint64 *data)
-{
- if (context->getClientVersion() < ES_3_0)
- {
- context->handleError(Error(GL_INVALID_OPERATION, "Context does not support GLES3.0"));
- return false;
- }
-
- if (!ValidateRobustEntryPoint(context, bufSize))
- {
- return false;
- }
-
- if (!ValidateIndexedStateQuery(context, target, index, length))
- {
- return false;
- }
-
- if (!ValidateRobustBufferSize(context, bufSize, *length))
- {
- return false;
- }
-
- return true;
-}
-
-bool ValidateCopyBufferSubData(ValidationContext *context,
- GLenum readTarget,
- GLenum writeTarget,
- GLintptr readOffset,
- GLintptr writeOffset,
- GLsizeiptr size)
-{
- if (context->getClientMajorVersion() < 3)
- {
- context->handleError(
- Error(GL_INVALID_OPERATION, "CopyBufferSubData requires ES 3 or greater"));
- return false;
- }
-
- if (!ValidBufferTarget(context, readTarget) || !ValidBufferTarget(context, writeTarget))
- {
- context->handleError(Error(GL_INVALID_ENUM, "Invalid buffer target"));
- return false;
- }
-
- Buffer *readBuffer = context->getGLState().getTargetBuffer(readTarget);
- Buffer *writeBuffer = context->getGLState().getTargetBuffer(writeTarget);
-
- if (!readBuffer || !writeBuffer)
- {
- context->handleError(Error(GL_INVALID_OPERATION, "No buffer bound to target"));
- return false;
- }
-
- // Verify that readBuffer and writeBuffer are not currently mapped
- if (readBuffer->isMapped() || writeBuffer->isMapped())
- {
- context->handleError(
- Error(GL_INVALID_OPERATION, "Cannot call CopyBufferSubData on a mapped buffer"));
- return false;
- }
-
- CheckedNumeric<GLintptr> checkedReadOffset(readOffset);
- CheckedNumeric<GLintptr> checkedWriteOffset(writeOffset);
- CheckedNumeric<GLintptr> checkedSize(size);
-
- auto checkedReadSum = checkedReadOffset + checkedSize;
- auto checkedWriteSum = checkedWriteOffset + checkedSize;
-
- if (!checkedReadSum.IsValid() || !checkedWriteSum.IsValid() ||
- !IsValueInRangeForNumericType<GLintptr>(readBuffer->getSize()) ||
- !IsValueInRangeForNumericType<GLintptr>(writeBuffer->getSize()))
- {
- context->handleError(
- Error(GL_INVALID_VALUE, "Integer overflow when validating copy offsets."));
- return false;
- }
-
- if (readOffset < 0 || writeOffset < 0 || size < 0)
- {
- context->handleError(
- Error(GL_INVALID_VALUE, "readOffset, writeOffset and size must all be non-negative"));
- return false;
- }
-
- if (checkedReadSum.ValueOrDie() > readBuffer->getSize() ||
- checkedWriteSum.ValueOrDie() > writeBuffer->getSize())
- {
- context->handleError(
- Error(GL_INVALID_VALUE, "Buffer offset overflow in CopyBufferSubData"));
- return false;
- }
-
- if (readBuffer == writeBuffer)
- {
- auto checkedOffsetDiff = (checkedReadOffset - checkedWriteOffset).Abs();
- if (!checkedOffsetDiff.IsValid())
- {
- // This shold not be possible.
- UNREACHABLE();
- context->handleError(
- Error(GL_INVALID_VALUE, "Integer overflow when validating same buffer copy."));
- return false;
- }
-
- if (checkedOffsetDiff.ValueOrDie() < size)
- {
- context->handleError(Error(GL_INVALID_VALUE));
- return false;
- }
- }
-
- return true;
+ return ValidateIndexedStateQuery(context, target, index);
}
} // namespace gl
diff --git a/gfx/angle/src/libANGLE/validationES3.h b/gfx/angle/src/libANGLE/validationES3.h
index ba98c998a..eeef800a8 100755
--- a/gfx/angle/src/libANGLE/validationES3.h
+++ b/gfx/angle/src/libANGLE/validationES3.h
@@ -32,7 +32,6 @@ bool ValidateES3TexImageParametersBase(ValidationContext *context,
GLint border,
GLenum format,
GLenum type,
- GLsizei imageSize,
const GLvoid *pixels);
bool ValidateES3TexStorageParameters(Context *context,
@@ -58,7 +57,6 @@ bool ValidateES3TexImage2DParameters(Context *context,
GLint border,
GLenum format,
GLenum type,
- GLsizei imageSize,
const GLvoid *pixels);
bool ValidateES3TexImage3DParameters(Context *context,
@@ -76,7 +74,6 @@ bool ValidateES3TexImage3DParameters(Context *context,
GLint border,
GLenum format,
GLenum type,
- GLsizei bufSize,
const GLvoid *pixels);
bool ValidateES3CopyTexImageParametersBase(ValidationContext *context,
@@ -156,6 +153,11 @@ bool ValidateGetQueryObjectuiv(Context *context, GLuint id, GLenum pname, GLuint
bool ValidateFramebufferTextureLayer(Context *context, GLenum target, GLenum attachment,
GLuint texture, GLint level, GLint layer);
+bool ValidES3ReadFormatType(ValidationContext *context,
+ GLenum internalFormat,
+ GLenum format,
+ GLenum type);
+
bool ValidateES3RenderbufferStorageParameters(Context *context, GLenum target, GLsizei samples,
GLenum internalformat, GLsizei width, GLsizei height);
@@ -253,18 +255,6 @@ bool ValidateTexImage3D(Context *context,
GLenum format,
GLenum type,
const GLvoid *pixels);
-bool ValidateTexImage3DRobustANGLE(Context *context,
- GLenum target,
- GLint level,
- GLint internalformat,
- GLsizei width,
- GLsizei height,
- GLsizei depth,
- GLint border,
- GLenum format,
- GLenum type,
- GLsizei bufSize,
- const GLvoid *pixels);
bool ValidateTexSubImage3D(Context *context,
GLenum target,
GLint level,
@@ -277,19 +267,6 @@ bool ValidateTexSubImage3D(Context *context,
GLenum format,
GLenum type,
const GLvoid *pixels);
-bool ValidateTexSubImage3DRobustANGLE(Context *context,
- GLenum target,
- GLint level,
- GLint xoffset,
- GLint yoffset,
- GLint zoffset,
- GLsizei width,
- GLsizei height,
- GLsizei depth,
- GLenum format,
- GLenum type,
- GLsizei bufSize,
- const GLvoid *pixels);
bool ValidateCompressedTexSubImage3D(Context *context,
GLenum target,
GLint level,
@@ -317,13 +294,10 @@ bool ValidateGenOrDeleteCountES3(Context *context, GLint count);
bool ValidateBeginTransformFeedback(Context *context, GLenum primitiveMode);
+bool ValidateSamplerParameteri(Context *context, GLuint sampler, GLenum pname, GLint param);
+bool ValidateSamplerParameterf(Context *context, GLuint sampler, GLenum pname, GLfloat param);
+
bool ValidateGetBufferPointerv(Context *context, GLenum target, GLenum pname, GLvoid **params);
-bool ValidateGetBufferPointervRobustANGLE(Context *context,
- GLenum target,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLvoid **params);
bool ValidateUnmapBuffer(Context *context, GLenum target);
bool ValidateMapBufferRange(Context *context,
GLenum target,
@@ -335,35 +309,12 @@ bool ValidateFlushMappedBufferRange(Context *context,
GLintptr offset,
GLsizeiptr length);
-bool ValidateIndexedStateQuery(ValidationContext *context,
- GLenum pname,
- GLuint index,
- GLsizei *length);
+bool ValidateIndexedStateQuery(ValidationContext *context, GLenum pname, GLuint index);
bool ValidateGetIntegeri_v(ValidationContext *context, GLenum target, GLuint index, GLint *data);
-bool ValidateGetIntegeri_vRobustANGLE(ValidationContext *context,
- GLenum target,
- GLuint index,
- GLsizei bufSize,
- GLsizei *length,
- GLint *data);
bool ValidateGetInteger64i_v(ValidationContext *context,
GLenum target,
GLuint index,
GLint64 *data);
-bool ValidateGetInteger64i_vRobustANGLE(ValidationContext *context,
- GLenum target,
- GLuint index,
- GLsizei bufSize,
- GLsizei *length,
- GLint64 *data);
-
-bool ValidateCopyBufferSubData(ValidationContext *context,
- GLenum readTarget,
- GLenum writeTarget,
- GLintptr readOffset,
- GLintptr writeOffset,
- GLsizeiptr size);
-
} // namespace gl
#endif // LIBANGLE_VALIDATION_ES3_H_
diff --git a/gfx/angle/src/libANGLE/validationES31.cpp b/gfx/angle/src/libANGLE/validationES31.cpp
index 4cea05e47..f7406090d 100755
--- a/gfx/angle/src/libANGLE/validationES31.cpp
+++ b/gfx/angle/src/libANGLE/validationES31.cpp
@@ -6,11 +6,10 @@
// validationES31.cpp: Validation functions for OpenGL ES 3.1 entry point parameters
+#include "libANGLE/validationES3.h"
#include "libANGLE/validationES31.h"
#include "libANGLE/Context.h"
-#include "libANGLE/validationES.h"
-#include "libANGLE/validationES3.h"
using namespace angle;
@@ -19,44 +18,13 @@ namespace gl
bool ValidateGetBooleani_v(Context *context, GLenum target, GLuint index, GLboolean *data)
{
- if (context->getClientVersion() < ES_3_1)
+ if (!context->getGLVersion().isES31())
{
context->handleError(Error(GL_INVALID_OPERATION, "Context does not support GLES3.1"));
return false;
}
- if (!ValidateIndexedStateQuery(context, target, index, nullptr))
- {
- return false;
- }
-
- return true;
-}
-
-bool ValidateGetBooleani_vRobustANGLE(Context *context,
- GLenum target,
- GLuint index,
- GLsizei bufSize,
- GLsizei *length,
- GLboolean *data)
-{
- if (context->getClientVersion() < ES_3_1)
- {
- context->handleError(Error(GL_INVALID_OPERATION, "Context does not support GLES3.1"));
- return false;
- }
-
- if (!ValidateRobustEntryPoint(context, bufSize))
- {
- return false;
- }
-
- if (!ValidateIndexedStateQuery(context, target, index, length))
- {
- return false;
- }
-
- if (!ValidateRobustBufferSize(context, bufSize, *length))
+ if (!ValidateIndexedStateQuery(context, target, index))
{
return false;
}
diff --git a/gfx/angle/src/libANGLE/validationES31.h b/gfx/angle/src/libANGLE/validationES31.h
index 63ca0db5b..517720cae 100755
--- a/gfx/angle/src/libANGLE/validationES31.h
+++ b/gfx/angle/src/libANGLE/validationES31.h
@@ -16,12 +16,6 @@ namespace gl
class Context;
bool ValidateGetBooleani_v(Context *context, GLenum target, GLuint index, GLboolean *data);
-bool ValidateGetBooleani_vRobustANGLE(Context *context,
- GLenum target,
- GLuint index,
- GLsizei bufSize,
- GLsizei *length,
- GLboolean *data);
} // namespace gl
diff --git a/gfx/angle/src/libANGLE/validationES_unittest.cpp b/gfx/angle/src/libANGLE/validationES_unittest.cpp
index 925005a6e..9d99c32a8 100755
--- a/gfx/angle/src/libANGLE/validationES_unittest.cpp
+++ b/gfx/angle/src/libANGLE/validationES_unittest.cpp
@@ -29,36 +29,36 @@ namespace
class MockValidationContext : public ValidationContext
{
public:
- MockValidationContext(const Version &version,
+ MockValidationContext(GLint majorClientVersion,
+ GLint minorClientVersion,
State *state,
const Caps &caps,
const TextureCapsMap &textureCaps,
const Extensions &extensions,
const ResourceManager *resourceManager,
const Limitations &limitations,
- const ResourceMap<Framebuffer> &framebufferMap,
bool skipValidation);
MOCK_METHOD1(handleError, void(const Error &));
};
-MockValidationContext::MockValidationContext(const Version &version,
+MockValidationContext::MockValidationContext(GLint majorClientVersion,
+ GLint minorClientVersion,
State *state,
const Caps &caps,
const TextureCapsMap &textureCaps,
const Extensions &extensions,
const ResourceManager *resourceManager,
const Limitations &limitations,
- const ResourceMap<Framebuffer> &framebufferMap,
bool skipValidation)
- : ValidationContext(version,
+ : ValidationContext(majorClientVersion,
+ minorClientVersion,
state,
caps,
textureCaps,
extensions,
resourceManager,
limitations,
- framebufferMap,
skipValidation)
{
}
@@ -82,13 +82,12 @@ TEST(ValidationESTest, DrawElementsWithMaxIndexGivesError)
TextureCapsMap textureCaps;
Extensions extensions;
Limitations limitations;
- ResourceMap<Framebuffer> framebufferMap;
// Set some basic caps.
caps.maxElementIndex = 100;
caps.maxDrawBuffers = 1;
caps.maxColorAttachments = 1;
- state.initialize(caps, extensions, Version(3, 0), false, true);
+ state.initialize(caps, extensions, 3, false);
NiceMock<MockTextureImpl> *textureImpl = new NiceMock<MockTextureImpl>();
EXPECT_CALL(mockFactory, createTexture(_)).WillOnce(Return(textureImpl));
@@ -109,9 +108,8 @@ TEST(ValidationESTest, DrawElementsWithMaxIndexGivesError)
state.setDrawFramebufferBinding(framebuffer);
state.setProgram(program);
- NiceMock<MockValidationContext> testContext(Version(3, 0), &state, caps, textureCaps,
- extensions, nullptr, limitations, framebufferMap,
- false);
+ NiceMock<MockValidationContext> testContext(3, 0, &state, caps, textureCaps, extensions,
+ nullptr, limitations, false);
// Set the expectation for the validation error here.
Error expectedError(GL_INVALID_OPERATION, g_ExceedsMaxElementErrorMessage);
diff --git a/gfx/angle/src/libEGL.gypi b/gfx/angle/src/libEGL.gypi
index 86158a6e9..813b006c5 100755
--- a/gfx/angle/src/libEGL.gypi
+++ b/gfx/angle/src/libEGL.gypi
@@ -17,7 +17,7 @@
],
'includes':
[
- '../gyp/common_defines.gypi',
+ '../build/common_defines.gypi',
],
'include_dirs':
[
diff --git a/gfx/angle/src/libEGL/libEGL.cpp b/gfx/angle/src/libEGL/libEGL.cpp
index 4501ccf95..511565379 100755
--- a/gfx/angle/src/libEGL/libEGL.cpp
+++ b/gfx/angle/src/libEGL/libEGL.cpp
@@ -358,12 +358,4 @@ EGLBoolean EGLAPIENTRY eglStreamPostD3DTextureNV12ANGLE(EGLDisplay dpy,
{
return egl::StreamPostD3DTextureNV12ANGLE(dpy, stream, texture, attrib_list);
}
-
-EGLBoolean EGLAPIENTRY eglSwapBuffersWithDamageEXT(EGLDisplay dpy,
- EGLSurface surface,
- EGLint *rects,
- EGLint n_rects)
-{
- return egl::SwapBuffersWithDamageEXT(dpy, surface, rects, n_rects);
-}
}
diff --git a/gfx/angle/src/libEGL/libEGL.def b/gfx/angle/src/libEGL/libEGL.def
index 4888d465e..d4596c23d 100755
--- a/gfx/angle/src/libEGL/libEGL.def
+++ b/gfx/angle/src/libEGL/libEGL.def
@@ -57,7 +57,6 @@ EXPORTS
eglStreamConsumerGLTextureExternalAttribsNV @63
eglCreateStreamProducerD3DTextureNV12ANGLE @64
eglStreamPostD3DTextureNV12ANGLE @65
- eglSwapBuffersWithDamageEXT @66
; 1.5 entry points
eglCreateSync @38
diff --git a/gfx/angle/src/libEGL/moz.build b/gfx/angle/src/libEGL/moz.build
index c1e33c86e..8e99d44ff 100755
--- a/gfx/angle/src/libEGL/moz.build
+++ b/gfx/angle/src/libEGL/moz.build
@@ -32,6 +32,9 @@ if CONFIG['GNU_CXX']:
'-Wno-shadow-local',
]
+if CONFIG['MOZ_DIRECTX_SDK_PATH'] and not CONFIG['MOZ_HAS_WINSDK_WITH_D3D']:
+ LOCAL_INCLUDES += ['%' + '%s/include/' % CONFIG['MOZ_DIRECTX_SDK_PATH']]
+
DEFINES['_CRT_SECURE_NO_DEPRECATE'] = True
DEFINES['_HAS_EXCEPTIONS'] = 0
@@ -64,6 +67,11 @@ DEFINES['ANGLE_ENABLE_KEYEDMUTEX'] = "1"
if CONFIG['MOZ_HAS_WINSDK_WITH_D3D']:
OS_LIBS += [ 'd3d9', 'dxguid' ]
+else:
+ EXTRA_DSO_LDOPTS += [
+ '\'%s/lib/%s/d3d9.lib\'' % (CONFIG['MOZ_DIRECTX_SDK_PATH'], CONFIG['MOZ_D3D_CPU_SUFFIX']),
+ '\'%s/lib/%s/dxguid.lib\'' % (CONFIG['MOZ_DIRECTX_SDK_PATH'], CONFIG['MOZ_D3D_CPU_SUFFIX']),
+ ]
GeckoSharedLibrary('libEGL', linkage=None)
diff --git a/gfx/angle/src/libGLESv2.gypi b/gfx/angle/src/libGLESv2.gypi
index b28eecaf1..a22adeb4e 100755
--- a/gfx/angle/src/libGLESv2.gypi
+++ b/gfx/angle/src/libGLESv2.gypi
@@ -138,8 +138,6 @@
'libANGLE/Surface.h',
'libANGLE/Texture.cpp',
'libANGLE/Texture.h',
- 'libANGLE/Thread.cpp',
- 'libANGLE/Thread.h',
'libANGLE/TransformFeedback.cpp',
'libANGLE/TransformFeedback.h',
'libANGLE/Uniform.cpp',
@@ -154,22 +152,16 @@
'libANGLE/angletypes.cpp',
'libANGLE/angletypes.h',
'libANGLE/angletypes.inl',
- 'libANGLE/es3_copy_conversion_table_autogen.cpp',
'libANGLE/features.h',
- 'libANGLE/format_map_autogen.cpp',
'libANGLE/formatutils.cpp',
'libANGLE/formatutils.h',
'libANGLE/histogram_macros.h',
'libANGLE/queryconversions.cpp',
'libANGLE/queryconversions.h',
- 'libANGLE/queryutils.cpp',
- 'libANGLE/queryutils.h',
'libANGLE/renderer/BufferImpl.h',
'libANGLE/renderer/CompilerImpl.h',
'libANGLE/renderer/ContextImpl.cpp',
'libANGLE/renderer/ContextImpl.h',
- 'libANGLE/renderer/driver_utils.cpp',
- 'libANGLE/renderer/driver_utils.h',
'libANGLE/renderer/DeviceImpl.cpp',
'libANGLE/renderer/DeviceImpl.h',
'libANGLE/renderer/DisplayImpl.cpp',
@@ -178,7 +170,8 @@
'libANGLE/renderer/FenceNVImpl.h',
'libANGLE/renderer/FenceSyncImpl.h',
'libANGLE/renderer/Format_ID_autogen.inl',
- 'libANGLE/renderer/Format_table_autogen.cpp',
+ 'libANGLE/renderer/Format_autogen.cpp',
+ 'libANGLE/renderer/Format.cpp',
'libANGLE/renderer/Format.h',
'libANGLE/renderer/FramebufferAttachmentObjectImpl.h',
'libANGLE/renderer/FramebufferImpl.h',
@@ -257,7 +250,6 @@
'libANGLE/renderer/d3d/ShaderExecutableD3D.h',
'libANGLE/renderer/d3d/SurfaceD3D.cpp',
'libANGLE/renderer/d3d/SurfaceD3D.h',
- 'libANGLE/renderer/d3d/SwapChainD3D.cpp',
'libANGLE/renderer/d3d/SwapChainD3D.h',
'libANGLE/renderer/d3d/TextureD3D.cpp',
'libANGLE/renderer/d3d/TextureD3D.h',
@@ -335,7 +327,6 @@
'libANGLE/renderer/d3d/d3d11/copyvertex.inl',
'libANGLE/renderer/d3d/d3d11/DebugAnnotator11.cpp',
'libANGLE/renderer/d3d/d3d11/DebugAnnotator11.h',
- 'libANGLE/renderer/d3d/d3d11/dxgi_format_map_autogen.cpp',
'libANGLE/renderer/d3d/d3d11/dxgi_support_table.cpp',
'libANGLE/renderer/d3d/d3d11/dxgi_support_table.h',
'libANGLE/renderer/d3d/d3d11/Fence11.cpp',
@@ -514,8 +505,6 @@
],
'libangle_gl_wgl_sources':
[
- 'libANGLE/renderer/gl/wgl/D3DTextureSurfaceWGL.cpp',
- 'libANGLE/renderer/gl/wgl/D3DTextureSurfaceWGL.h',
'libANGLE/renderer/gl/wgl/DisplayWGL.cpp',
'libANGLE/renderer/gl/wgl/DisplayWGL.h',
'libANGLE/renderer/gl/wgl/DXGISwapChainWindowSurfaceWGL.cpp',
@@ -626,47 +615,6 @@
'libANGLE/renderer/vulkan/VertexArrayVk.cpp',
'libANGLE/renderer/vulkan/VertexArrayVk.h',
],
- 'libangle_null_sources':
- [
- 'libANGLE/renderer/null/BufferNULL.cpp',
- 'libANGLE/renderer/null/BufferNULL.h',
- 'libANGLE/renderer/null/CompilerNULL.cpp',
- 'libANGLE/renderer/null/CompilerNULL.h',
- 'libANGLE/renderer/null/ContextNULL.cpp',
- 'libANGLE/renderer/null/ContextNULL.h',
- 'libANGLE/renderer/null/DeviceNULL.cpp',
- 'libANGLE/renderer/null/DeviceNULL.h',
- 'libANGLE/renderer/null/DisplayNULL.cpp',
- 'libANGLE/renderer/null/DisplayNULL.h',
- 'libANGLE/renderer/null/FenceNVNULL.cpp',
- 'libANGLE/renderer/null/FenceNVNULL.h',
- 'libANGLE/renderer/null/FenceSyncNULL.cpp',
- 'libANGLE/renderer/null/FenceSyncNULL.h',
- 'libANGLE/renderer/null/FramebufferNULL.cpp',
- 'libANGLE/renderer/null/FramebufferNULL.h',
- 'libANGLE/renderer/null/ImageNULL.cpp',
- 'libANGLE/renderer/null/ImageNULL.h',
- 'libANGLE/renderer/null/PathNULL.cpp',
- 'libANGLE/renderer/null/PathNULL.h',
- 'libANGLE/renderer/null/ProgramNULL.cpp',
- 'libANGLE/renderer/null/ProgramNULL.h',
- 'libANGLE/renderer/null/QueryNULL.cpp',
- 'libANGLE/renderer/null/QueryNULL.h',
- 'libANGLE/renderer/null/RenderbufferNULL.cpp',
- 'libANGLE/renderer/null/RenderbufferNULL.h',
- 'libANGLE/renderer/null/SamplerNULL.cpp',
- 'libANGLE/renderer/null/SamplerNULL.h',
- 'libANGLE/renderer/null/ShaderNULL.cpp',
- 'libANGLE/renderer/null/ShaderNULL.h',
- 'libANGLE/renderer/null/SurfaceNULL.cpp',
- 'libANGLE/renderer/null/SurfaceNULL.h',
- 'libANGLE/renderer/null/TextureNULL.cpp',
- 'libANGLE/renderer/null/TextureNULL.h',
- 'libANGLE/renderer/null/TransformFeedbackNULL.cpp',
- 'libANGLE/renderer/null/TransformFeedbackNULL.h',
- 'libANGLE/renderer/null/VertexArrayNULL.cpp',
- 'libANGLE/renderer/null/VertexArrayNULL.h',
- ],
'libglesv2_sources':
[
'common/angleutils.h',
@@ -707,12 +655,12 @@
'type': 'static_library',
'dependencies':
[
- 'translator',
+ 'translator_static',
'commit_id',
'angle_common',
'angle_image_util',
],
- 'includes': [ '../gyp/common_defines.gypi', ],
+ 'includes': [ '../build/common_defines.gypi', ],
'include_dirs':
[
'.',
@@ -741,7 +689,6 @@
],
'defines':
[
- 'LIBANGLE_IMPLEMENTATION',
'GL_GLEXT_PROTOTYPES',
'ANGLE_PRELOADED_D3DCOMPILER_MODULE_NAMES={ "d3dcompiler_47.dll", "d3dcompiler_46.dll", "d3dcompiler_43.dll" }',
],
@@ -1012,17 +959,6 @@
'ANGLE_ENABLE_VULKAN',
],
}],
- ['angle_enable_null==1',
- {
- 'sources':
- [
- '<@(libangle_null_sources)',
- ],
- 'defines':
- [
- 'ANGLE_ENABLE_NULL',
- ],
- }],
['angle_build_winrt==0 and OS=="win"',
{
'dependencies':
@@ -1040,7 +976,7 @@
'target_name': 'libGLESv2',
'type': '<(angle_gl_library_type)',
'dependencies': [ 'libANGLE', 'angle_common' ],
- 'includes': [ '../gyp/common_defines.gypi', ],
+ 'includes': [ '../build/common_defines.gypi', ],
'sources':
[
'<@(libglesv2_sources)',
diff --git a/gfx/angle/src/libGLESv2/entry_points_egl.cpp b/gfx/angle/src/libGLESv2/entry_points_egl.cpp
index dc0ccb5f7..1ed04eaf1 100755
--- a/gfx/angle/src/libGLESv2/entry_points_egl.cpp
+++ b/gfx/angle/src/libGLESv2/entry_points_egl.cpp
@@ -17,15 +17,12 @@
#include "libANGLE/Context.h"
#include "libANGLE/Display.h"
#include "libANGLE/Texture.h"
-#include "libANGLE/Thread.h"
#include "libANGLE/Surface.h"
#include "libANGLE/validationEGL.h"
#include "common/debug.h"
#include "common/version.h"
-#include "platform/Platform.h"
-
#include <EGL/eglext.h>
namespace egl
@@ -35,10 +32,9 @@ namespace egl
EGLint EGLAPIENTRY GetError(void)
{
EVENT("()");
- Thread *thread = GetCurrentThread();
- EGLint error = thread->getError();
- thread->setError(Error(EGL_SUCCESS));
+ EGLint error = GetGlobalError();
+ SetGlobalError(Error(EGL_SUCCESS));
return error;
}
@@ -51,58 +47,58 @@ EGLDisplay EGLAPIENTRY GetDisplay(EGLNativeDisplayType display_id)
EGLBoolean EGLAPIENTRY Initialize(EGLDisplay dpy, EGLint *major, EGLint *minor)
{
- EVENT("(EGLDisplay dpy = 0x%0.8p, EGLint *major = 0x%0.8p, EGLint *minor = 0x%0.8p)", dpy,
- major, minor);
- Thread *thread = GetCurrentThread();
+ EVENT("(EGLDisplay dpy = 0x%0.8p, EGLint *major = 0x%0.8p, EGLint *minor = 0x%0.8p)",
+ dpy, major, minor);
Display *display = static_cast<Display *>(dpy);
if (dpy == EGL_NO_DISPLAY || !Display::isValidDisplay(display))
{
- thread->setError(Error(EGL_BAD_DISPLAY));
+ SetGlobalError(Error(EGL_BAD_DISPLAY));
return EGL_FALSE;
}
Error error = display->initialize();
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
if (major) *major = 1;
if (minor) *minor = 4;
- thread->setError(Error(EGL_SUCCESS));
+ SetGlobalError(Error(EGL_SUCCESS));
return EGL_TRUE;
}
EGLBoolean EGLAPIENTRY Terminate(EGLDisplay dpy)
{
EVENT("(EGLDisplay dpy = 0x%0.8p)", dpy);
- Thread *thread = GetCurrentThread();
Display *display = static_cast<Display *>(dpy);
if (dpy == EGL_NO_DISPLAY || !Display::isValidDisplay(display))
{
- thread->setError(Error(EGL_BAD_DISPLAY));
+ SetGlobalError(Error(EGL_BAD_DISPLAY));
return EGL_FALSE;
}
- if (display->isValidContext(thread->getContext()))
+ gl::Context *context = GetGlobalContext();
+
+ if (display->isValidContext(context))
{
- thread->setCurrent(nullptr, nullptr, nullptr, nullptr);
+ SetGlobalContext(NULL);
+ SetGlobalDisplay(NULL);
}
display->terminate();
- thread->setError(Error(EGL_SUCCESS));
+ SetGlobalError(Error(EGL_SUCCESS));
return EGL_TRUE;
}
const char *EGLAPIENTRY QueryString(EGLDisplay dpy, EGLint name)
{
EVENT("(EGLDisplay dpy = 0x%0.8p, EGLint name = %d)", dpy, name);
- Thread *thread = GetCurrentThread();
Display *display = static_cast<Display*>(dpy);
if (!(display == EGL_NO_DISPLAY && name == EGL_EXTENSIONS))
@@ -110,7 +106,7 @@ const char *EGLAPIENTRY QueryString(EGLDisplay dpy, EGLint name)
Error error = ValidateDisplay(display);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return NULL;
}
}
@@ -138,34 +134,32 @@ const char *EGLAPIENTRY QueryString(EGLDisplay dpy, EGLint name)
result = "1.4 (ANGLE " ANGLE_VERSION_STRING ")";
break;
default:
- thread->setError(Error(EGL_BAD_PARAMETER));
- return NULL;
+ SetGlobalError(Error(EGL_BAD_PARAMETER));
+ return NULL;
}
- thread->setError(Error(EGL_SUCCESS));
+ SetGlobalError(Error(EGL_SUCCESS));
return result;
}
EGLBoolean EGLAPIENTRY GetConfigs(EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config)
{
- EVENT(
- "(EGLDisplay dpy = 0x%0.8p, EGLConfig *configs = 0x%0.8p, "
- "EGLint config_size = %d, EGLint *num_config = 0x%0.8p)",
- dpy, configs, config_size, num_config);
- Thread *thread = GetCurrentThread();
+ EVENT("(EGLDisplay dpy = 0x%0.8p, EGLConfig *configs = 0x%0.8p, "
+ "EGLint config_size = %d, EGLint *num_config = 0x%0.8p)",
+ dpy, configs, config_size, num_config);
Display *display = static_cast<Display*>(dpy);
Error error = ValidateDisplay(display);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
if (!num_config)
{
- thread->setError(Error(EGL_BAD_PARAMETER));
+ SetGlobalError(Error(EGL_BAD_PARAMETER));
return EGL_FALSE;
}
@@ -180,30 +174,28 @@ EGLBoolean EGLAPIENTRY GetConfigs(EGLDisplay dpy, EGLConfig *configs, EGLint con
}
*num_config = static_cast<EGLint>(filteredConfigs.size());
- thread->setError(Error(EGL_SUCCESS));
+ SetGlobalError(Error(EGL_SUCCESS));
return EGL_TRUE;
}
EGLBoolean EGLAPIENTRY ChooseConfig(EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config)
{
- EVENT(
- "(EGLDisplay dpy = 0x%0.8p, const EGLint *attrib_list = 0x%0.8p, "
- "EGLConfig *configs = 0x%0.8p, EGLint config_size = %d, EGLint *num_config = 0x%0.8p)",
- dpy, attrib_list, configs, config_size, num_config);
- Thread *thread = GetCurrentThread();
+ EVENT("(EGLDisplay dpy = 0x%0.8p, const EGLint *attrib_list = 0x%0.8p, "
+ "EGLConfig *configs = 0x%0.8p, EGLint config_size = %d, EGLint *num_config = 0x%0.8p)",
+ dpy, attrib_list, configs, config_size, num_config);
Display *display = static_cast<Display*>(dpy);
Error error = ValidateDisplay(display);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
if (!num_config)
{
- thread->setError(Error(EGL_BAD_PARAMETER));
+ SetGlobalError(Error(EGL_BAD_PARAMETER));
return EGL_FALSE;
}
@@ -219,17 +211,14 @@ EGLBoolean EGLAPIENTRY ChooseConfig(EGLDisplay dpy, const EGLint *attrib_list, E
}
*num_config = static_cast<EGLint>(filteredConfigs.size());
- thread->setError(Error(EGL_SUCCESS));
+ SetGlobalError(Error(EGL_SUCCESS));
return EGL_TRUE;
}
EGLBoolean EGLAPIENTRY GetConfigAttrib(EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value)
{
- EVENT(
- "(EGLDisplay dpy = 0x%0.8p, EGLConfig config = 0x%0.8p, EGLint attribute = %d, EGLint "
- "*value = 0x%0.8p)",
- dpy, config, attribute, value);
- Thread *thread = GetCurrentThread();
+ EVENT("(EGLDisplay dpy = 0x%0.8p, EGLConfig config = 0x%0.8p, EGLint attribute = %d, EGLint *value = 0x%0.8p)",
+ dpy, config, attribute, value);
Display *display = static_cast<Display*>(dpy);
Config *configuration = static_cast<Config*>(config);
@@ -237,27 +226,24 @@ EGLBoolean EGLAPIENTRY GetConfigAttrib(EGLDisplay dpy, EGLConfig config, EGLint
Error error = ValidateConfig(display, configuration);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
if (!display->getConfigAttrib(configuration, attribute, value))
{
- thread->setError(Error(EGL_BAD_ATTRIBUTE));
+ SetGlobalError(Error(EGL_BAD_ATTRIBUTE));
return EGL_FALSE;
}
- thread->setError(Error(EGL_SUCCESS));
+ SetGlobalError(Error(EGL_SUCCESS));
return EGL_TRUE;
}
EGLSurface EGLAPIENTRY CreateWindowSurface(EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint *attrib_list)
{
- EVENT(
- "(EGLDisplay dpy = 0x%0.8p, EGLConfig config = 0x%0.8p, EGLNativeWindowType win = 0x%0.8p, "
- "const EGLint *attrib_list = 0x%0.8p)",
- dpy, config, win, attrib_list);
- Thread *thread = GetCurrentThread();
+ EVENT("(EGLDisplay dpy = 0x%0.8p, EGLConfig config = 0x%0.8p, EGLNativeWindowType win = 0x%0.8p, "
+ "const EGLint *attrib_list = 0x%0.8p)", dpy, config, win, attrib_list);
Display *display = static_cast<Display*>(dpy);
Config *configuration = static_cast<Config*>(config);
@@ -266,7 +252,7 @@ EGLSurface EGLAPIENTRY CreateWindowSurface(EGLDisplay dpy, EGLConfig config, EGL
Error error = ValidateCreateWindowSurface(display, configuration, win, attributes);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_NO_SURFACE;
}
@@ -274,7 +260,7 @@ EGLSurface EGLAPIENTRY CreateWindowSurface(EGLDisplay dpy, EGLConfig config, EGL
error = display->createWindowSurface(configuration, win, attributes, &surface);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_NO_SURFACE;
}
@@ -283,11 +269,8 @@ EGLSurface EGLAPIENTRY CreateWindowSurface(EGLDisplay dpy, EGLConfig config, EGL
EGLSurface EGLAPIENTRY CreatePbufferSurface(EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list)
{
- EVENT(
- "(EGLDisplay dpy = 0x%0.8p, EGLConfig config = 0x%0.8p, const EGLint *attrib_list = "
- "0x%0.8p)",
- dpy, config, attrib_list);
- Thread *thread = GetCurrentThread();
+ EVENT("(EGLDisplay dpy = 0x%0.8p, EGLConfig config = 0x%0.8p, const EGLint *attrib_list = 0x%0.8p)",
+ dpy, config, attrib_list);
Display *display = static_cast<Display*>(dpy);
Config *configuration = static_cast<Config*>(config);
@@ -296,7 +279,7 @@ EGLSurface EGLAPIENTRY CreatePbufferSurface(EGLDisplay dpy, EGLConfig config, co
Error error = ValidateCreatePbufferSurface(display, configuration, attributes);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_NO_SURFACE;
}
@@ -304,7 +287,7 @@ EGLSurface EGLAPIENTRY CreatePbufferSurface(EGLDisplay dpy, EGLConfig config, co
error = display->createPbufferSurface(configuration, attributes, &surface);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_NO_SURFACE;
}
@@ -315,7 +298,6 @@ EGLSurface EGLAPIENTRY CreatePixmapSurface(EGLDisplay dpy, EGLConfig config, EGL
{
EVENT("(EGLDisplay dpy = 0x%0.8p, EGLConfig config = 0x%0.8p, EGLNativePixmapType pixmap = 0x%0.8p, "
"const EGLint *attrib_list = 0x%0.8p)", dpy, config, pixmap, attrib_list);
- Thread *thread = GetCurrentThread();
Display *display = static_cast<Display*>(dpy);
Config *configuration = static_cast<Config*>(config);
@@ -323,20 +305,19 @@ EGLSurface EGLAPIENTRY CreatePixmapSurface(EGLDisplay dpy, EGLConfig config, EGL
Error error = ValidateConfig(display, configuration);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_NO_SURFACE;
}
UNIMPLEMENTED(); // FIXME
- thread->setError(Error(EGL_SUCCESS));
+ SetGlobalError(Error(EGL_SUCCESS));
return EGL_NO_SURFACE;
}
EGLBoolean EGLAPIENTRY DestroySurface(EGLDisplay dpy, EGLSurface surface)
{
EVENT("(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p)", dpy, surface);
- Thread *thread = GetCurrentThread();
Display *display = static_cast<Display*>(dpy);
Surface *eglSurface = static_cast<Surface*>(surface);
@@ -344,19 +325,19 @@ EGLBoolean EGLAPIENTRY DestroySurface(EGLDisplay dpy, EGLSurface surface)
Error error = ValidateSurface(display, eglSurface);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
if (surface == EGL_NO_SURFACE)
{
- thread->setError(Error(EGL_BAD_SURFACE));
+ SetGlobalError(Error(EGL_BAD_SURFACE));
return EGL_FALSE;
}
display->destroySurface((Surface*)surface);
- thread->setError(Error(EGL_SUCCESS));
+ SetGlobalError(Error(EGL_SUCCESS));
return EGL_TRUE;
}
@@ -364,7 +345,6 @@ EGLBoolean EGLAPIENTRY QuerySurface(EGLDisplay dpy, EGLSurface surface, EGLint a
{
EVENT("(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p, EGLint attribute = %d, EGLint *value = 0x%0.8p)",
dpy, surface, attribute, value);
- Thread *thread = GetCurrentThread();
Display *display = static_cast<Display*>(dpy);
Surface *eglSurface = (Surface*)surface;
@@ -372,13 +352,13 @@ EGLBoolean EGLAPIENTRY QuerySurface(EGLDisplay dpy, EGLSurface surface, EGLint a
Error error = ValidateSurface(display, eglSurface);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
if (surface == EGL_NO_SURFACE)
{
- thread->setError(Error(EGL_BAD_SURFACE));
+ SetGlobalError(Error(EGL_BAD_SURFACE));
return EGL_FALSE;
}
@@ -435,7 +415,7 @@ EGLBoolean EGLAPIENTRY QuerySurface(EGLDisplay dpy, EGLSurface surface, EGLint a
case EGL_POST_SUB_BUFFER_SUPPORTED_NV:
if (!display->getExtensions().postSubBuffer)
{
- thread->setError(Error(EGL_BAD_ATTRIBUTE));
+ SetGlobalError(Error(EGL_BAD_ATTRIBUTE));
return EGL_FALSE;
}
*value = eglSurface->isPostSubBufferSupported();
@@ -443,7 +423,7 @@ EGLBoolean EGLAPIENTRY QuerySurface(EGLDisplay dpy, EGLSurface surface, EGLint a
case EGL_FIXED_SIZE_ANGLE:
if (!display->getExtensions().windowFixedSize)
{
- thread->setError(Error(EGL_BAD_ATTRIBUTE));
+ SetGlobalError(Error(EGL_BAD_ATTRIBUTE));
return EGL_FALSE;
}
*value = eglSurface->isFixedSize();
@@ -451,7 +431,7 @@ EGLBoolean EGLAPIENTRY QuerySurface(EGLDisplay dpy, EGLSurface surface, EGLint a
case EGL_FLEXIBLE_SURFACE_COMPATIBILITY_SUPPORTED_ANGLE:
if (!display->getExtensions().flexibleSurfaceCompatibility)
{
- thread->setError(
+ SetGlobalError(
Error(EGL_BAD_ATTRIBUTE,
"EGL_FLEXIBLE_SURFACE_COMPATIBILITY_SUPPORTED_ANGLE cannot be used without "
"EGL_ANGLE_flexible_surface_compatibility support."));
@@ -462,9 +442,9 @@ EGLBoolean EGLAPIENTRY QuerySurface(EGLDisplay dpy, EGLSurface surface, EGLint a
case EGL_SURFACE_ORIENTATION_ANGLE:
if (!display->getExtensions().surfaceOrientation)
{
- thread->setError(Error(EGL_BAD_ATTRIBUTE,
- "EGL_SURFACE_ORIENTATION_ANGLE cannot be queried without "
- "EGL_ANGLE_surface_orientation support."));
+ SetGlobalError(Error(EGL_BAD_ATTRIBUTE,
+ "EGL_SURFACE_ORIENTATION_ANGLE cannot be queried without "
+ "EGL_ANGLE_surface_orientation support."));
return EGL_FALSE;
}
*value = eglSurface->getOrientation();
@@ -472,19 +452,19 @@ EGLBoolean EGLAPIENTRY QuerySurface(EGLDisplay dpy, EGLSurface surface, EGLint a
case EGL_DIRECT_COMPOSITION_ANGLE:
if (!display->getExtensions().directComposition)
{
- thread->setError(Error(EGL_BAD_ATTRIBUTE,
- "EGL_DIRECT_COMPOSITION_ANGLE cannot be used without "
- "EGL_ANGLE_direct_composition support."));
+ SetGlobalError(Error(EGL_BAD_ATTRIBUTE,
+ "EGL_DIRECT_COMPOSITION_ANGLE cannot be used without "
+ "EGL_ANGLE_direct_composition support."));
return EGL_FALSE;
}
*value = eglSurface->directComposition();
break;
default:
- thread->setError(Error(EGL_BAD_ATTRIBUTE));
- return EGL_FALSE;
+ SetGlobalError(Error(EGL_BAD_ATTRIBUTE));
+ return EGL_FALSE;
}
- thread->setError(Error(EGL_SUCCESS));
+ SetGlobalError(Error(EGL_SUCCESS));
return EGL_TRUE;
}
@@ -492,7 +472,6 @@ EGLContext EGLAPIENTRY CreateContext(EGLDisplay dpy, EGLConfig config, EGLContex
{
EVENT("(EGLDisplay dpy = 0x%0.8p, EGLConfig config = 0x%0.8p, EGLContext share_context = 0x%0.8p, "
"const EGLint *attrib_list = 0x%0.8p)", dpy, config, share_context, attrib_list);
- Thread *thread = GetCurrentThread();
Display *display = static_cast<Display*>(dpy);
Config *configuration = static_cast<Config*>(config);
@@ -502,7 +481,7 @@ EGLContext EGLAPIENTRY CreateContext(EGLDisplay dpy, EGLConfig config, EGLContex
Error error = ValidateCreateContext(display, configuration, sharedGLContext, attributes);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_NO_CONTEXT;
}
@@ -510,18 +489,17 @@ EGLContext EGLAPIENTRY CreateContext(EGLDisplay dpy, EGLConfig config, EGLContex
error = display->createContext(configuration, sharedGLContext, attributes, &context);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_NO_CONTEXT;
}
- thread->setError(Error(EGL_SUCCESS));
+ SetGlobalError(Error(EGL_SUCCESS));
return static_cast<EGLContext>(context);
}
EGLBoolean EGLAPIENTRY DestroyContext(EGLDisplay dpy, EGLContext ctx)
{
EVENT("(EGLDisplay dpy = 0x%0.8p, EGLContext ctx = 0x%0.8p)", dpy, ctx);
- Thread *thread = GetCurrentThread();
Display *display = static_cast<Display*>(dpy);
gl::Context *context = static_cast<gl::Context*>(ctx);
@@ -529,24 +507,25 @@ EGLBoolean EGLAPIENTRY DestroyContext(EGLDisplay dpy, EGLContext ctx)
Error error = ValidateContext(display, context);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
if (ctx == EGL_NO_CONTEXT)
{
- thread->setError(Error(EGL_BAD_CONTEXT));
+ SetGlobalError(Error(EGL_BAD_CONTEXT));
return EGL_FALSE;
}
- if (context == thread->getContext())
+ if (context == GetGlobalContext())
{
- thread->setCurrent(nullptr, thread->getDrawSurface(), thread->getReadSurface(), nullptr);
+ SetGlobalDisplay(NULL);
+ SetGlobalContext(NULL);
}
display->destroyContext(context);
- thread->setError(Error(EGL_SUCCESS));
+ SetGlobalError(Error(EGL_SUCCESS));
return EGL_TRUE;
}
@@ -554,7 +533,6 @@ EGLBoolean EGLAPIENTRY MakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface r
{
EVENT("(EGLDisplay dpy = 0x%0.8p, EGLSurface draw = 0x%0.8p, EGLSurface read = 0x%0.8p, EGLContext ctx = 0x%0.8p)",
dpy, draw, read, ctx);
- Thread *thread = GetCurrentThread();
Display *display = static_cast<Display*>(dpy);
gl::Context *context = static_cast<gl::Context*>(ctx);
@@ -563,13 +541,13 @@ EGLBoolean EGLAPIENTRY MakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface r
// error is generated.
if (ctx == EGL_NO_CONTEXT && (draw != EGL_NO_SURFACE || read != EGL_NO_SURFACE))
{
- thread->setError(Error(EGL_BAD_MATCH));
+ SetGlobalError(Error(EGL_BAD_MATCH));
return EGL_FALSE;
}
if (ctx != EGL_NO_CONTEXT && draw == EGL_NO_SURFACE && read == EGL_NO_SURFACE)
{
- thread->setError(Error(EGL_BAD_MATCH));
+ SetGlobalError(Error(EGL_BAD_MATCH));
return EGL_FALSE;
}
@@ -577,21 +555,21 @@ EGLBoolean EGLAPIENTRY MakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface r
// EGL_BAD_MATCH error is generated.
if ((read == EGL_NO_SURFACE) != (draw == EGL_NO_SURFACE))
{
- thread->setError(Error(
+ SetGlobalError(Error(
EGL_BAD_MATCH, "read and draw must both be valid surfaces, or both be EGL_NO_SURFACE"));
return EGL_FALSE;
}
if (dpy == EGL_NO_DISPLAY || !Display::isValidDisplay(display))
{
- thread->setError(Error(EGL_BAD_DISPLAY, "'dpy' not a valid EGLDisplay handle"));
+ SetGlobalError(Error(EGL_BAD_DISPLAY, "'dpy' not a valid EGLDisplay handle"));
return EGL_FALSE;
}
// EGL 1.5 spec: dpy can be uninitialized if all other parameters are null
if (!display->isInitialized() && (ctx != EGL_NO_CONTEXT || draw != EGL_NO_SURFACE || read != EGL_NO_SURFACE))
{
- thread->setError(Error(EGL_NOT_INITIALIZED, "'dpy' not initialized"));
+ SetGlobalError(Error(EGL_NOT_INITIALIZED, "'dpy' not initialized"));
return EGL_FALSE;
}
@@ -600,14 +578,14 @@ EGLBoolean EGLAPIENTRY MakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface r
Error error = ValidateContext(display, context);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
}
if (display->isInitialized() && display->testDeviceLost())
{
- thread->setError(Error(EGL_CONTEXT_LOST));
+ SetGlobalError(Error(EGL_CONTEXT_LOST));
return EGL_FALSE;
}
@@ -617,7 +595,7 @@ EGLBoolean EGLAPIENTRY MakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface r
Error error = ValidateSurface(display, drawSurface);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
}
@@ -628,7 +606,7 @@ EGLBoolean EGLAPIENTRY MakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface r
Error error = ValidateSurface(display, readSurface);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
}
@@ -640,7 +618,7 @@ EGLBoolean EGLAPIENTRY MakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface r
context->getConfig(), readSurface->getType());
if (readCompatError.isError())
{
- thread->setError(readCompatError);
+ SetGlobalError(readCompatError);
return EGL_FALSE;
}
}
@@ -656,7 +634,7 @@ EGLBoolean EGLAPIENTRY MakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface r
context->getConfig(), drawSurface->getType());
if (drawCompatError.isError())
{
- thread->setError(drawCompatError);
+ SetGlobalError(drawCompatError);
return EGL_FALSE;
}
}
@@ -665,12 +643,16 @@ EGLBoolean EGLAPIENTRY MakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface r
Error makeCurrentError = display->makeCurrent(drawSurface, readSurface, context);
if (makeCurrentError.isError())
{
- thread->setError(makeCurrentError);
+ SetGlobalError(makeCurrentError);
return EGL_FALSE;
}
- gl::Context *previousContext = thread->getContext();
- thread->setCurrent(display, drawSurface, readSurface, context);
+ gl::Context *previousContext = GetGlobalContext();
+
+ SetGlobalDisplay(display);
+ SetGlobalDrawSurface(drawSurface);
+ SetGlobalReadSurface(readSurface);
+ SetGlobalContext(context);
// Release the surface from the previously-current context, to allow
// destroyed surfaces to delete themselves.
@@ -679,28 +661,27 @@ EGLBoolean EGLAPIENTRY MakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface r
previousContext->releaseSurface();
}
- thread->setError(Error(EGL_SUCCESS));
+ SetGlobalError(Error(EGL_SUCCESS));
return EGL_TRUE;
}
EGLSurface EGLAPIENTRY GetCurrentSurface(EGLint readdraw)
{
EVENT("(EGLint readdraw = %d)", readdraw);
- Thread *thread = GetCurrentThread();
if (readdraw == EGL_READ)
{
- thread->setError(Error(EGL_SUCCESS));
- return thread->getReadSurface();
+ SetGlobalError(Error(EGL_SUCCESS));
+ return GetGlobalReadSurface();
}
else if (readdraw == EGL_DRAW)
{
- thread->setError(Error(EGL_SUCCESS));
- return thread->getDrawSurface();
+ SetGlobalError(Error(EGL_SUCCESS));
+ return GetGlobalDrawSurface();
}
else
{
- thread->setError(Error(EGL_BAD_PARAMETER));
+ SetGlobalError(Error(EGL_BAD_PARAMETER));
return EGL_NO_SURFACE;
}
}
@@ -708,11 +689,10 @@ EGLSurface EGLAPIENTRY GetCurrentSurface(EGLint readdraw)
EGLDisplay EGLAPIENTRY GetCurrentDisplay(void)
{
EVENT("()");
- Thread *thread = GetCurrentThread();
- EGLDisplay dpy = thread->getDisplay();
+ EGLDisplay dpy = GetGlobalDisplay();
- thread->setError(Error(EGL_SUCCESS));
+ SetGlobalError(Error(EGL_SUCCESS));
return dpy;
}
@@ -720,7 +700,6 @@ EGLBoolean EGLAPIENTRY QueryContext(EGLDisplay dpy, EGLContext ctx, EGLint attri
{
EVENT("(EGLDisplay dpy = 0x%0.8p, EGLContext ctx = 0x%0.8p, EGLint attribute = %d, EGLint *value = 0x%0.8p)",
dpy, ctx, attribute, value);
- Thread *thread = GetCurrentThread();
Display *display = static_cast<Display*>(dpy);
gl::Context *context = static_cast<gl::Context*>(ctx);
@@ -728,7 +707,7 @@ EGLBoolean EGLAPIENTRY QueryContext(EGLDisplay dpy, EGLContext ctx, EGLint attri
Error error = ValidateContext(display, context);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
@@ -747,25 +726,24 @@ EGLBoolean EGLAPIENTRY QueryContext(EGLDisplay dpy, EGLContext ctx, EGLint attri
*value = context->getRenderBuffer();
break;
default:
- thread->setError(Error(EGL_BAD_ATTRIBUTE));
- return EGL_FALSE;
+ SetGlobalError(Error(EGL_BAD_ATTRIBUTE));
+ return EGL_FALSE;
}
- thread->setError(Error(EGL_SUCCESS));
+ SetGlobalError(Error(EGL_SUCCESS));
return EGL_TRUE;
}
EGLBoolean EGLAPIENTRY WaitGL(void)
{
EVENT("()");
- Thread *thread = GetCurrentThread();
- Display *display = thread->getDisplay();
+ Display *display = GetGlobalDisplay();
Error error = ValidateDisplay(display);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
@@ -774,49 +752,47 @@ EGLBoolean EGLAPIENTRY WaitGL(void)
error = display->waitClient();
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
- thread->setError(Error(EGL_SUCCESS));
+ SetGlobalError(Error(EGL_SUCCESS));
return EGL_TRUE;
}
EGLBoolean EGLAPIENTRY WaitNative(EGLint engine)
{
EVENT("(EGLint engine = %d)", engine);
- Thread *thread = GetCurrentThread();
- Display *display = thread->getDisplay();
+ Display *display = GetGlobalDisplay();
Error error = ValidateDisplay(display);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
if (engine != EGL_CORE_NATIVE_ENGINE)
{
- thread->setError(
+ SetGlobalError(
Error(EGL_BAD_PARAMETER, "the 'engine' parameter has an unrecognized value"));
}
- error = display->waitNative(engine, thread->getDrawSurface(), thread->getReadSurface());
+ error = display->waitNative(engine, GetGlobalDrawSurface(), GetGlobalReadSurface());
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
- thread->setError(Error(EGL_SUCCESS));
+ SetGlobalError(Error(EGL_SUCCESS));
return EGL_TRUE;
}
EGLBoolean EGLAPIENTRY SwapBuffers(EGLDisplay dpy, EGLSurface surface)
{
EVENT("(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p)", dpy, surface);
- Thread *thread = GetCurrentThread();
Display *display = static_cast<Display*>(dpy);
Surface *eglSurface = (Surface*)surface;
@@ -824,37 +800,36 @@ EGLBoolean EGLAPIENTRY SwapBuffers(EGLDisplay dpy, EGLSurface surface)
Error error = ValidateSurface(display, eglSurface);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
if (display->testDeviceLost())
{
- thread->setError(Error(EGL_CONTEXT_LOST));
+ SetGlobalError(Error(EGL_CONTEXT_LOST));
return EGL_FALSE;
}
if (surface == EGL_NO_SURFACE)
{
- thread->setError(Error(EGL_BAD_SURFACE));
+ SetGlobalError(Error(EGL_BAD_SURFACE));
return EGL_FALSE;
}
error = eglSurface->swap();
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
- thread->setError(Error(EGL_SUCCESS));
+ SetGlobalError(Error(EGL_SUCCESS));
return EGL_TRUE;
}
EGLBoolean EGLAPIENTRY CopyBuffers(EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target)
{
EVENT("(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p, EGLNativePixmapType target = 0x%0.8p)", dpy, surface, target);
- Thread *thread = GetCurrentThread();
Display *display = static_cast<Display*>(dpy);
Surface *eglSurface = static_cast<Surface*>(surface);
@@ -862,19 +837,19 @@ EGLBoolean EGLAPIENTRY CopyBuffers(EGLDisplay dpy, EGLSurface surface, EGLNative
Error error = ValidateSurface(display, eglSurface);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
if (display->testDeviceLost())
{
- thread->setError(Error(EGL_CONTEXT_LOST));
+ SetGlobalError(Error(EGL_CONTEXT_LOST));
return EGL_FALSE;
}
UNIMPLEMENTED(); // FIXME
- thread->setError(Error(EGL_SUCCESS));
+ SetGlobalError(Error(EGL_SUCCESS));
return 0;
}
@@ -882,7 +857,6 @@ EGLBoolean EGLAPIENTRY CopyBuffers(EGLDisplay dpy, EGLSurface surface, EGLNative
EGLBoolean EGLAPIENTRY BindTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer)
{
EVENT("(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p, EGLint buffer = %d)", dpy, surface, buffer);
- Thread *thread = GetCurrentThread();
Display *display = static_cast<Display*>(dpy);
Surface *eglSurface = static_cast<Surface*>(surface);
@@ -890,35 +864,35 @@ EGLBoolean EGLAPIENTRY BindTexImage(EGLDisplay dpy, EGLSurface surface, EGLint b
Error error = ValidateSurface(display, eglSurface);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
if (buffer != EGL_BACK_BUFFER)
{
- thread->setError(Error(EGL_BAD_PARAMETER));
+ SetGlobalError(Error(EGL_BAD_PARAMETER));
return EGL_FALSE;
}
if (surface == EGL_NO_SURFACE || eglSurface->getType() == EGL_WINDOW_BIT)
{
- thread->setError(Error(EGL_BAD_SURFACE));
+ SetGlobalError(Error(EGL_BAD_SURFACE));
return EGL_FALSE;
}
if (eglSurface->getBoundTexture())
{
- thread->setError(Error(EGL_BAD_ACCESS));
+ SetGlobalError(Error(EGL_BAD_ACCESS));
return EGL_FALSE;
}
if (eglSurface->getTextureFormat() == EGL_NO_TEXTURE)
{
- thread->setError(Error(EGL_BAD_MATCH));
+ SetGlobalError(Error(EGL_BAD_MATCH));
return EGL_FALSE;
}
- gl::Context *context = thread->getContext();
+ gl::Context *context = GetGlobalContext();
if (context)
{
gl::Texture *textureObject = context->getTargetTexture(GL_TEXTURE_2D);
@@ -926,19 +900,19 @@ EGLBoolean EGLAPIENTRY BindTexImage(EGLDisplay dpy, EGLSurface surface, EGLint b
if (textureObject->getImmutableFormat())
{
- thread->setError(Error(EGL_BAD_MATCH));
+ SetGlobalError(Error(EGL_BAD_MATCH));
return EGL_FALSE;
}
error = eglSurface->bindTexImage(textureObject, buffer);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
}
- thread->setError(Error(EGL_SUCCESS));
+ SetGlobalError(Error(EGL_SUCCESS));
return EGL_TRUE;
}
@@ -946,7 +920,6 @@ EGLBoolean EGLAPIENTRY SurfaceAttrib(EGLDisplay dpy, EGLSurface surface, EGLint
{
EVENT("(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p, EGLint attribute = %d, EGLint value = %d)",
dpy, surface, attribute, value);
- Thread *thread = GetCurrentThread();
Display *display = static_cast<Display*>(dpy);
Surface *eglSurface = static_cast<Surface*>(surface);
@@ -954,20 +927,19 @@ EGLBoolean EGLAPIENTRY SurfaceAttrib(EGLDisplay dpy, EGLSurface surface, EGLint
Error error = ValidateSurface(display, eglSurface);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
UNIMPLEMENTED(); // FIXME
- thread->setError(Error(EGL_SUCCESS));
+ SetGlobalError(Error(EGL_SUCCESS));
return EGL_TRUE;
}
EGLBoolean EGLAPIENTRY ReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer)
{
EVENT("(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p, EGLint buffer = %d)", dpy, surface, buffer);
- Thread *thread = GetCurrentThread();
Display *display = static_cast<Display*>(dpy);
Surface *eglSurface = static_cast<Surface*>(surface);
@@ -975,25 +947,25 @@ EGLBoolean EGLAPIENTRY ReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLin
Error error = ValidateSurface(display, eglSurface);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
if (buffer != EGL_BACK_BUFFER)
{
- thread->setError(Error(EGL_BAD_PARAMETER));
+ SetGlobalError(Error(EGL_BAD_PARAMETER));
return EGL_FALSE;
}
if (surface == EGL_NO_SURFACE || eglSurface->getType() == EGL_WINDOW_BIT)
{
- thread->setError(Error(EGL_BAD_SURFACE));
+ SetGlobalError(Error(EGL_BAD_SURFACE));
return EGL_FALSE;
}
if (eglSurface->getTextureFormat() == EGL_NO_TEXTURE)
{
- thread->setError(Error(EGL_BAD_MATCH));
+ SetGlobalError(Error(EGL_BAD_MATCH));
return EGL_FALSE;
}
@@ -1004,34 +976,33 @@ EGLBoolean EGLAPIENTRY ReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLin
error = eglSurface->releaseTexImage(buffer);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
}
- thread->setError(Error(EGL_SUCCESS));
+ SetGlobalError(Error(EGL_SUCCESS));
return EGL_TRUE;
}
EGLBoolean EGLAPIENTRY SwapInterval(EGLDisplay dpy, EGLint interval)
{
EVENT("(EGLDisplay dpy = 0x%0.8p, EGLint interval = %d)", dpy, interval);
- Thread *thread = GetCurrentThread();
Display *display = static_cast<Display*>(dpy);
Error error = ValidateDisplay(display);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
- Surface *draw_surface = static_cast<Surface *>(thread->getDrawSurface());
+ Surface *draw_surface = static_cast<Surface*>(GetGlobalDrawSurface());
if (draw_surface == NULL)
{
- thread->setError(Error(EGL_BAD_SURFACE));
+ SetGlobalError(Error(EGL_BAD_SURFACE));
return EGL_FALSE;
}
@@ -1040,7 +1011,7 @@ EGLBoolean EGLAPIENTRY SwapInterval(EGLDisplay dpy, EGLint interval)
draw_surface->setSwapInterval(clampedInterval);
- thread->setError(Error(EGL_SUCCESS));
+ SetGlobalError(Error(EGL_SUCCESS));
return EGL_TRUE;
}
@@ -1049,35 +1020,33 @@ EGLBoolean EGLAPIENTRY SwapInterval(EGLDisplay dpy, EGLint interval)
EGLBoolean EGLAPIENTRY BindAPI(EGLenum api)
{
EVENT("(EGLenum api = 0x%X)", api);
- Thread *thread = GetCurrentThread();
switch (api)
{
case EGL_OPENGL_API:
case EGL_OPENVG_API:
- thread->setError(Error(EGL_BAD_PARAMETER));
- return EGL_FALSE; // Not supported by this implementation
+ SetGlobalError(Error(EGL_BAD_PARAMETER));
+ return EGL_FALSE; // Not supported by this implementation
case EGL_OPENGL_ES_API:
break;
default:
- thread->setError(Error(EGL_BAD_PARAMETER));
- return EGL_FALSE;
+ SetGlobalError(Error(EGL_BAD_PARAMETER));
+ return EGL_FALSE;
}
- thread->setAPI(api);
+ SetGlobalAPI(api);
- thread->setError(Error(EGL_SUCCESS));
+ SetGlobalError(Error(EGL_SUCCESS));
return EGL_TRUE;
}
EGLenum EGLAPIENTRY QueryAPI(void)
{
EVENT("()");
- Thread *thread = GetCurrentThread();
- EGLenum API = thread->getAPI();
+ EGLenum API = GetGlobalAPI();
- thread->setError(Error(EGL_SUCCESS));
+ SetGlobalError(Error(EGL_SUCCESS));
return API;
}
@@ -1086,7 +1055,6 @@ EGLSurface EGLAPIENTRY CreatePbufferFromClientBuffer(EGLDisplay dpy, EGLenum buf
EVENT("(EGLDisplay dpy = 0x%0.8p, EGLenum buftype = 0x%X, EGLClientBuffer buffer = 0x%0.8p, "
"EGLConfig config = 0x%0.8p, const EGLint *attrib_list = 0x%0.8p)",
dpy, buftype, buffer, config, attrib_list);
- Thread *thread = GetCurrentThread();
Display *display = static_cast<Display*>(dpy);
Config *configuration = static_cast<Config*>(config);
@@ -1095,16 +1063,15 @@ EGLSurface EGLAPIENTRY CreatePbufferFromClientBuffer(EGLDisplay dpy, EGLenum buf
Error error = ValidateCreatePbufferFromClientBuffer(display, buftype, buffer, configuration, attributes);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_NO_SURFACE;
}
egl::Surface *surface = nullptr;
- error = display->createPbufferFromClientBuffer(configuration, buftype, buffer, attributes,
- &surface);
+ error = display->createPbufferFromClientBuffer(configuration, buffer, attributes, &surface);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_NO_SURFACE;
}
@@ -1114,36 +1081,34 @@ EGLSurface EGLAPIENTRY CreatePbufferFromClientBuffer(EGLDisplay dpy, EGLenum buf
EGLBoolean EGLAPIENTRY ReleaseThread(void)
{
EVENT("()");
- Thread *thread = GetCurrentThread();
MakeCurrent(EGL_NO_DISPLAY, EGL_NO_CONTEXT, EGL_NO_SURFACE, EGL_NO_SURFACE);
- thread->setError(Error(EGL_SUCCESS));
+ SetGlobalError(Error(EGL_SUCCESS));
return EGL_TRUE;
}
EGLBoolean EGLAPIENTRY WaitClient(void)
{
EVENT("()");
- Thread *thread = GetCurrentThread();
- Display *display = thread->getDisplay();
+ Display *display = GetGlobalDisplay();
Error error = ValidateDisplay(display);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
error = display->waitClient();
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
- thread->setError(Error(EGL_SUCCESS));
+ SetGlobalError(Error(EGL_SUCCESS));
return EGL_TRUE;
}
@@ -1151,11 +1116,10 @@ EGLBoolean EGLAPIENTRY WaitClient(void)
EGLContext EGLAPIENTRY GetCurrentContext(void)
{
EVENT("()");
- Thread *thread = GetCurrentThread();
- gl::Context *context = thread->getContext();
+ gl::Context *context = GetGlobalContext();
- thread->setError(Error(EGL_SUCCESS));
+ SetGlobalError(Error(EGL_SUCCESS));
return static_cast<EGLContext>(context);
}
@@ -1163,40 +1127,32 @@ EGLContext EGLAPIENTRY GetCurrentContext(void)
EGLSync EGLAPIENTRY CreateSync(EGLDisplay dpy, EGLenum type, const EGLAttrib *attrib_list)
{
EVENT("(EGLDisplay dpy = 0x%0.8p, EGLenum type = 0x%X, const EGLint* attrib_list = 0x%0.8p)", dpy, type, attrib_list);
- Thread *thread = GetCurrentThread();
UNIMPLEMENTED();
- thread->setError(Error(EGL_BAD_DISPLAY, "eglCreateSync unimplemented."));
return EGL_NO_SYNC;
}
EGLBoolean EGLAPIENTRY DestroySync(EGLDisplay dpy, EGLSync sync)
{
EVENT("(EGLDisplay dpy = 0x%0.8p, EGLSync sync = 0x%0.8p)", dpy, sync);
- Thread *thread = GetCurrentThread();
UNIMPLEMENTED();
- thread->setError(Error(EGL_BAD_DISPLAY, "eglDestroySync unimplemented."));
return EGL_FALSE;
}
EGLint EGLAPIENTRY ClientWaitSync(EGLDisplay dpy, EGLSync sync, EGLint flags, EGLTime timeout)
{
EVENT("(EGLDisplay dpy = 0x%0.8p, EGLSync sync = 0x%0.8p, EGLint flags = 0x%X, EGLTime timeout = %d)", dpy, sync, flags, timeout);
- Thread *thread = GetCurrentThread();
UNIMPLEMENTED();
- thread->setError(Error(EGL_BAD_DISPLAY, "eglClientWaitSync unimplemented."));
return 0;
}
EGLBoolean EGLAPIENTRY GetSyncAttrib(EGLDisplay dpy, EGLSync sync, EGLint attribute, EGLAttrib *value)
{
EVENT("(EGLDisplay dpy = 0x%0.8p, EGLSync sync = 0x%0.8p, EGLint attribute = 0x%X, EGLAttrib *value = 0x%0.8p)", dpy, sync, attribute, value);
- Thread *thread = GetCurrentThread();
UNIMPLEMENTED();
- thread->setError(Error(EGL_BAD_DISPLAY, "eglSyncAttrib unimplemented."));
return EGL_FALSE;
}
@@ -1205,20 +1161,16 @@ EGLImage EGLAPIENTRY CreateImage(EGLDisplay dpy, EGLContext ctx, EGLenum target,
EVENT("(EGLDisplay dpy = 0x%0.8p, EGLContext ctx = 0x%0.8p, EGLenum target = 0x%X, "
"EGLClientBuffer buffer = 0x%0.8p, const EGLAttrib *attrib_list = 0x%0.8p)",
dpy, ctx, target, buffer, attrib_list);
- Thread *thread = GetCurrentThread();
UNIMPLEMENTED();
- thread->setError(Error(EGL_BAD_DISPLAY, "eglCreateImage unimplemented."));
return EGL_NO_IMAGE;
}
EGLBoolean EGLAPIENTRY DestroyImage(EGLDisplay dpy, EGLImage image)
{
EVENT("(EGLDisplay dpy = 0x%0.8p, EGLImage image = 0x%0.8p)", dpy, image);
- Thread *thread = GetCurrentThread();
UNIMPLEMENTED();
- thread->setError(Error(EGL_BAD_DISPLAY, "eglDestroyImage unimplemented."));
return EGL_FALSE;
}
@@ -1226,10 +1178,8 @@ EGLDisplay EGLAPIENTRY GetPlatformDisplay(EGLenum platform, void *native_display
{
EVENT("(EGLenum platform = %d, void* native_display = 0x%0.8p, const EGLint* attrib_list = 0x%0.8p)",
platform, native_display, attrib_list);
- Thread *thread = GetCurrentThread();
UNIMPLEMENTED();
- thread->setError(Error(EGL_BAD_DISPLAY, "eglGetPlatformDisplay unimplemented."));
return EGL_NO_DISPLAY;
}
@@ -1237,10 +1187,8 @@ EGLSurface EGLAPIENTRY CreatePlatformWindowSurface(EGLDisplay dpy, EGLConfig con
{
EVENT("(EGLDisplay dpy = 0x%0.8p, EGLConfig config = 0x%0.8p, void* native_window = 0x%0.8p, const EGLint* attrib_list = 0x%0.8p)",
dpy, config, native_window, attrib_list);
- Thread *thread = GetCurrentThread();
UNIMPLEMENTED();
- thread->setError(Error(EGL_BAD_DISPLAY, "eglCreatePlatformWindowSurface unimplemented."));
return EGL_NO_SURFACE;
}
@@ -1248,27 +1196,22 @@ EGLSurface EGLAPIENTRY CreatePlatformPixmapSurface(EGLDisplay dpy, EGLConfig con
{
EVENT("(EGLDisplay dpy = 0x%0.8p, EGLConfig config = 0x%0.8p, void* native_pixmap = 0x%0.8p, const EGLint* attrib_list = 0x%0.8p)",
dpy, config, native_pixmap, attrib_list);
- Thread *thread = GetCurrentThread();
UNIMPLEMENTED();
- thread->setError(Error(EGL_BAD_DISPLAY, "eglCraetePlatformPixmaSurface unimplemented."));
return EGL_NO_SURFACE;
}
EGLBoolean EGLAPIENTRY WaitSync(EGLDisplay dpy, EGLSync sync, EGLint flags)
{
EVENT("(EGLDisplay dpy = 0x%0.8p, EGLSync sync = 0x%0.8p, EGLint flags = 0x%X)", dpy, sync, flags);
- Thread *thread = GetCurrentThread();
UNIMPLEMENTED();
- thread->setError(Error(EGL_BAD_DISPLAY, "eglWaitSync unimplemented."));
return EGL_FALSE;
}
__eglMustCastToProperFunctionPointerType EGLAPIENTRY GetProcAddress(const char *procname)
{
EVENT("(const char *procname = \"%s\")", procname);
- Thread *thread = GetCurrentThread();
typedef std::map<std::string, __eglMustCastToProperFunctionPointerType> ProcAddressMap;
auto generateProcAddressMap = []()
@@ -1277,9 +1220,6 @@ __eglMustCastToProperFunctionPointerType EGLAPIENTRY GetProcAddress(const char *
#define INSERT_PROC_ADDRESS(ns, proc) \
map[#ns #proc] = reinterpret_cast<__eglMustCastToProperFunctionPointerType>(ns::proc)
-#define INSERT_PROC_ADDRESS_NO_NS(name, proc) \
- map[name] = reinterpret_cast<__eglMustCastToProperFunctionPointerType>(proc)
-
// GLES2 core
INSERT_PROC_ADDRESS(gl, ActiveTexture);
INSERT_PROC_ADDRESS(gl, AttachShader);
@@ -1532,74 +1472,6 @@ __eglMustCastToProperFunctionPointerType EGLAPIENTRY GetProcAddress(const char *
INSERT_PROC_ADDRESS(gl, CopyTextureCHROMIUM);
INSERT_PROC_ADDRESS(gl, CopySubTextureCHROMIUM);
- // GL_CHROMIUM_copy_compressed_texture
- INSERT_PROC_ADDRESS(gl, CompressedCopyTextureCHROMIUM);
-
- // GL_ANGLE_webgl_compatibility
- INSERT_PROC_ADDRESS(gl, EnableExtensionANGLE);
-
- // GL_ANGLE_robust_client_memory
- INSERT_PROC_ADDRESS(gl, GetBooleanvRobustANGLE);
- INSERT_PROC_ADDRESS(gl, GetBufferParameterivRobustANGLE);
- INSERT_PROC_ADDRESS(gl, GetFloatvRobustANGLE);
- INSERT_PROC_ADDRESS(gl, GetFramebufferAttachmentParameterivRobustANGLE);
- INSERT_PROC_ADDRESS(gl, GetIntegervRobustANGLE);
- INSERT_PROC_ADDRESS(gl, GetProgramivRobustANGLE);
- INSERT_PROC_ADDRESS(gl, GetRenderbufferParameterivRobustANGLE);
- INSERT_PROC_ADDRESS(gl, GetShaderivRobustANGLE);
- INSERT_PROC_ADDRESS(gl, GetTexParameterfvRobustANGLE);
- INSERT_PROC_ADDRESS(gl, GetTexParameterivRobustANGLE);
- INSERT_PROC_ADDRESS(gl, GetUniformfvRobustANGLE);
- INSERT_PROC_ADDRESS(gl, GetUniformivRobustANGLE);
- INSERT_PROC_ADDRESS(gl, GetVertexAttribfvRobustANGLE);
- INSERT_PROC_ADDRESS(gl, GetVertexAttribivRobustANGLE);
- INSERT_PROC_ADDRESS(gl, GetVertexAttribPointervRobustANGLE);
- INSERT_PROC_ADDRESS(gl, ReadPixelsRobustANGLE);
- INSERT_PROC_ADDRESS(gl, TexImage2DRobustANGLE);
- INSERT_PROC_ADDRESS(gl, TexParameterfvRobustANGLE);
- INSERT_PROC_ADDRESS(gl, TexParameterivRobustANGLE);
- INSERT_PROC_ADDRESS(gl, TexSubImage2DRobustANGLE);
- INSERT_PROC_ADDRESS(gl, TexImage3DRobustANGLE);
- INSERT_PROC_ADDRESS(gl, TexSubImage3DRobustANGLE);
- INSERT_PROC_ADDRESS(gl, GetQueryivRobustANGLE);
- INSERT_PROC_ADDRESS(gl, GetQueryObjectuivRobustANGLE);
- INSERT_PROC_ADDRESS(gl, GetBufferPointervRobustANGLE);
- INSERT_PROC_ADDRESS(gl, GetIntegeri_vRobustANGLE);
- INSERT_PROC_ADDRESS(gl, GetInternalformativRobustANGLE);
- INSERT_PROC_ADDRESS(gl, GetVertexAttribIivRobustANGLE);
- INSERT_PROC_ADDRESS(gl, GetVertexAttribIuivRobustANGLE);
- INSERT_PROC_ADDRESS(gl, GetUniformuivRobustANGLE);
- INSERT_PROC_ADDRESS(gl, GetActiveUniformBlockivRobustANGLE);
- INSERT_PROC_ADDRESS(gl, GetInteger64vRobustANGLE);
- INSERT_PROC_ADDRESS(gl, GetInteger64i_vRobustANGLE);
- INSERT_PROC_ADDRESS(gl, GetBufferParameteri64vRobustANGLE);
- INSERT_PROC_ADDRESS(gl, SamplerParameterivRobustANGLE);
- INSERT_PROC_ADDRESS(gl, SamplerParameterfvRobustANGLE);
- INSERT_PROC_ADDRESS(gl, GetSamplerParameterivRobustANGLE);
- INSERT_PROC_ADDRESS(gl, GetSamplerParameterfvRobustANGLE);
- INSERT_PROC_ADDRESS(gl, GetFramebufferParameterivRobustANGLE);
- INSERT_PROC_ADDRESS(gl, GetProgramInterfaceivRobustANGLE);
- INSERT_PROC_ADDRESS(gl, GetBooleani_vRobustANGLE);
- INSERT_PROC_ADDRESS(gl, GetMultisamplefvRobustANGLE);
- INSERT_PROC_ADDRESS(gl, GetTexLevelParameterivRobustANGLE);
- INSERT_PROC_ADDRESS(gl, GetTexLevelParameterfvRobustANGLE);
- INSERT_PROC_ADDRESS(gl, GetPointervRobustANGLERobustANGLE);
- INSERT_PROC_ADDRESS(gl, ReadnPixelsRobustANGLE);
- INSERT_PROC_ADDRESS(gl, GetnUniformfvRobustANGLE);
- INSERT_PROC_ADDRESS(gl, GetnUniformivRobustANGLE);
- INSERT_PROC_ADDRESS(gl, GetnUniformuivRobustANGLE);
- INSERT_PROC_ADDRESS(gl, TexParameterIivRobustANGLE);
- INSERT_PROC_ADDRESS(gl, TexParameterIuivRobustANGLE);
- INSERT_PROC_ADDRESS(gl, GetTexParameterIivRobustANGLE);
- INSERT_PROC_ADDRESS(gl, GetTexParameterIuivRobustANGLE);
- INSERT_PROC_ADDRESS(gl, SamplerParameterIivRobustANGLE);
- INSERT_PROC_ADDRESS(gl, SamplerParameterIuivRobustANGLE);
- INSERT_PROC_ADDRESS(gl, GetSamplerParameterIivRobustANGLE);
- INSERT_PROC_ADDRESS(gl, GetSamplerParameterIuivRobustANGLE);
- INSERT_PROC_ADDRESS(gl, GetQueryObjectivRobustANGLE);
- INSERT_PROC_ADDRESS(gl, GetQueryObjecti64vRobustANGLE);
- INSERT_PROC_ADDRESS(gl, GetQueryObjectui64vRobustANGLE);
-
// GLES3 core
INSERT_PROC_ADDRESS(gl, ReadBuffer);
INSERT_PROC_ADDRESS(gl, DrawRangeElements);
@@ -1671,8 +1543,8 @@ __eglMustCastToProperFunctionPointerType EGLAPIENTRY GetProcAddress(const char *
INSERT_PROC_ADDRESS(gl, UniformBlockBinding);
INSERT_PROC_ADDRESS(gl, DrawArraysInstanced);
INSERT_PROC_ADDRESS(gl, DrawElementsInstanced);
- // FenceSync is the name of a class, the function has an added _ to prevent a name conflict.
- INSERT_PROC_ADDRESS_NO_NS("glFenceSync", gl::FenceSync_);
+ map["glFenceSync"] =
+ reinterpret_cast<__eglMustCastToProperFunctionPointerType>(gl::FenceSync_);
INSERT_PROC_ADDRESS(gl, IsSync);
INSERT_PROC_ADDRESS(gl, DeleteSync);
INSERT_PROC_ADDRESS(gl, ClientWaitSync);
@@ -1872,24 +1744,21 @@ __eglMustCastToProperFunctionPointerType EGLAPIENTRY GetProcAddress(const char *
INSERT_PROC_ADDRESS(egl, CreateStreamProducerD3DTextureNV12ANGLE);
INSERT_PROC_ADDRESS(egl, StreamPostD3DTextureNV12ANGLE);
- // EGL_EXT_swap_buffers_with_damage
- INSERT_PROC_ADDRESS(egl, SwapBuffersWithDamageEXT);
-
- // angle::Platform related entry points
- INSERT_PROC_ADDRESS_NO_NS("ANGLEPlatformInitialize", ANGLEPlatformInitialize);
- INSERT_PROC_ADDRESS_NO_NS("ANGLEPlatformShutdown", ANGLEPlatformShutdown);
-
#undef INSERT_PROC_ADDRESS
-#undef INSERT_PROC_ADDRESS_NO_NS
-
return map;
};
static const ProcAddressMap procAddressMap = generateProcAddressMap();
- thread->setError(Error(EGL_SUCCESS));
auto iter = procAddressMap.find(procname);
- return iter != procAddressMap.end() ? iter->second : nullptr;
+ if (iter != procAddressMap.end())
+ {
+ return iter->second;
+ }
+ else
+ {
+ return nullptr;
+ }
}
}
diff --git a/gfx/angle/src/libGLESv2/entry_points_egl_ext.cpp b/gfx/angle/src/libGLESv2/entry_points_egl_ext.cpp
index b18a10d92..3b7a9c870 100755
--- a/gfx/angle/src/libGLESv2/entry_points_egl_ext.cpp
+++ b/gfx/angle/src/libGLESv2/entry_points_egl_ext.cpp
@@ -14,7 +14,6 @@
#include "libANGLE/Device.h"
#include "libANGLE/Surface.h"
#include "libANGLE/Stream.h"
-#include "libANGLE/Thread.h"
#include "libANGLE/validationEGL.h"
#include "common/debug.h"
@@ -27,7 +26,6 @@ EGLBoolean EGLAPIENTRY QuerySurfacePointerANGLE(EGLDisplay dpy, EGLSurface surfa
{
EVENT("(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p, EGLint attribute = %d, void **value = 0x%0.8p)",
dpy, surface, attribute, value);
- Thread *thread = GetCurrentThread();
Display *display = static_cast<Display*>(dpy);
Surface *eglSurface = static_cast<Surface*>(surface);
@@ -35,19 +33,19 @@ EGLBoolean EGLAPIENTRY QuerySurfacePointerANGLE(EGLDisplay dpy, EGLSurface surfa
Error error = ValidateSurface(display, eglSurface);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
if (!display->getExtensions().querySurfacePointer)
{
- thread->setError(Error(EGL_SUCCESS));
+ SetGlobalError(Error(EGL_SUCCESS));
return EGL_FALSE;
}
if (surface == EGL_NO_SURFACE)
{
- thread->setError(Error(EGL_BAD_SURFACE));
+ SetGlobalError(Error(EGL_BAD_SURFACE));
return EGL_FALSE;
}
@@ -57,24 +55,24 @@ EGLBoolean EGLAPIENTRY QuerySurfacePointerANGLE(EGLDisplay dpy, EGLSurface surfa
case EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE:
if (!display->getExtensions().surfaceD3DTexture2DShareHandle)
{
- thread->setError(Error(EGL_BAD_ATTRIBUTE));
+ SetGlobalError(Error(EGL_BAD_ATTRIBUTE));
return EGL_FALSE;
}
break;
case EGL_DXGI_KEYED_MUTEX_ANGLE:
if (!display->getExtensions().keyedMutex)
{
- thread->setError(Error(EGL_BAD_ATTRIBUTE));
+ SetGlobalError(Error(EGL_BAD_ATTRIBUTE));
return EGL_FALSE;
}
break;
default:
- thread->setError(Error(EGL_BAD_ATTRIBUTE));
- return EGL_FALSE;
+ SetGlobalError(Error(EGL_BAD_ATTRIBUTE));
+ return EGL_FALSE;
}
error = eglSurface->querySurfacePointerANGLE(attribute, value);
- thread->setError(error);
+ SetGlobalError(error);
return (error.isError() ? EGL_FALSE : EGL_TRUE);
}
@@ -83,11 +81,10 @@ EGLBoolean EGLAPIENTRY QuerySurfacePointerANGLE(EGLDisplay dpy, EGLSurface surfa
EGLBoolean EGLAPIENTRY PostSubBufferNV(EGLDisplay dpy, EGLSurface surface, EGLint x, EGLint y, EGLint width, EGLint height)
{
EVENT("(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p, EGLint x = %d, EGLint y = %d, EGLint width = %d, EGLint height = %d)", dpy, surface, x, y, width, height);
- Thread *thread = GetCurrentThread();
if (x < 0 || y < 0 || width < 0 || height < 0)
{
- thread->setError(Error(EGL_BAD_PARAMETER));
+ SetGlobalError(Error(EGL_BAD_PARAMETER));
return EGL_FALSE;
}
@@ -97,37 +94,37 @@ EGLBoolean EGLAPIENTRY PostSubBufferNV(EGLDisplay dpy, EGLSurface surface, EGLin
Error error = ValidateSurface(display, eglSurface);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
if (display->testDeviceLost())
{
- thread->setError(Error(EGL_CONTEXT_LOST));
+ SetGlobalError(Error(EGL_CONTEXT_LOST));
return EGL_FALSE;
}
if (surface == EGL_NO_SURFACE)
{
- thread->setError(Error(EGL_BAD_SURFACE));
+ SetGlobalError(Error(EGL_BAD_SURFACE));
return EGL_FALSE;
}
if (!display->getExtensions().postSubBuffer)
{
// Spec is not clear about how this should be handled.
- thread->setError(Error(EGL_SUCCESS));
+ SetGlobalError(Error(EGL_SUCCESS));
return EGL_TRUE;
}
error = eglSurface->postSubBuffer(x, y, width, height);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
- thread->setError(Error(EGL_SUCCESS));
+ SetGlobalError(Error(EGL_SUCCESS));
return EGL_TRUE;
}
@@ -136,7 +133,6 @@ EGLDisplay EGLAPIENTRY GetPlatformDisplayEXT(EGLenum platform, void *native_disp
{
EVENT("(EGLenum platform = %d, void* native_display = 0x%0.8p, const EGLint* attrib_list = 0x%0.8p)",
platform, native_display, attrib_list);
- Thread *thread = GetCurrentThread();
const ClientExtensions &clientExtensions = Display::getClientExtensions();
@@ -145,20 +141,20 @@ EGLDisplay EGLAPIENTRY GetPlatformDisplayEXT(EGLenum platform, void *native_disp
case EGL_PLATFORM_ANGLE_ANGLE:
if (!clientExtensions.platformANGLE)
{
- thread->setError(Error(EGL_BAD_PARAMETER));
+ SetGlobalError(Error(EGL_BAD_PARAMETER));
return EGL_NO_DISPLAY;
}
break;
case EGL_PLATFORM_DEVICE_EXT:
if (!clientExtensions.platformDevice)
{
- thread->setError(Error(EGL_BAD_PARAMETER, "Platform Device extension is not active"));
+ SetGlobalError(Error(EGL_BAD_PARAMETER, "Platform Device extension is not active"));
return EGL_NO_DISPLAY;
}
break;
default:
- thread->setError(Error(EGL_BAD_CONFIG));
- return EGL_NO_DISPLAY;
+ SetGlobalError(Error(EGL_BAD_CONFIG));
+ return EGL_NO_DISPLAY;
}
if (platform == EGL_PLATFORM_ANGLE_ANGLE)
@@ -187,7 +183,7 @@ EGLDisplay EGLAPIENTRY GetPlatformDisplayEXT(EGLenum platform, void *native_disp
case EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE:
if (!clientExtensions.platformANGLED3D)
{
- thread->setError(Error(EGL_BAD_ATTRIBUTE));
+ SetGlobalError(Error(EGL_BAD_ATTRIBUTE));
return EGL_NO_DISPLAY;
}
break;
@@ -196,25 +192,14 @@ EGLDisplay EGLAPIENTRY GetPlatformDisplayEXT(EGLenum platform, void *native_disp
case EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE:
if (!clientExtensions.platformANGLEOpenGL)
{
- thread->setError(Error(EGL_BAD_ATTRIBUTE));
- return EGL_NO_DISPLAY;
- }
- break;
-
- case EGL_PLATFORM_ANGLE_TYPE_NULL_ANGLE:
- if (!clientExtensions.platformANGLENULL)
- {
- thread->setError(Error(EGL_BAD_ATTRIBUTE,
- "Display type "
- "EGL_PLATFORM_ANGLE_TYPE_NULL_ANGLE "
- "requires EGL_ANGLE_platform_angle_null."));
+ SetGlobalError(Error(EGL_BAD_ATTRIBUTE));
return EGL_NO_DISPLAY;
}
break;
default:
- thread->setError(Error(EGL_BAD_ATTRIBUTE));
- return EGL_NO_DISPLAY;
+ SetGlobalError(Error(EGL_BAD_ATTRIBUTE));
+ return EGL_NO_DISPLAY;
}
platformType = curAttrib[1];
break;
@@ -240,8 +225,8 @@ EGLDisplay EGLAPIENTRY GetPlatformDisplayEXT(EGLenum platform, void *native_disp
case EGL_FALSE:
break;
default:
- thread->setError(Error(EGL_BAD_ATTRIBUTE));
- return EGL_NO_DISPLAY;
+ SetGlobalError(Error(EGL_BAD_ATTRIBUTE));
+ return EGL_NO_DISPLAY;
}
enableAutoTrimSpecified = true;
break;
@@ -249,7 +234,7 @@ EGLDisplay EGLAPIENTRY GetPlatformDisplayEXT(EGLenum platform, void *native_disp
case EGL_EXPERIMENTAL_PRESENT_PATH_ANGLE:
if (!clientExtensions.experimentalPresentPath)
{
- thread->setError(
+ SetGlobalError(
Error(EGL_BAD_ATTRIBUTE,
"EGL_ANGLE_experimental_present_path extension not active"));
return EGL_NO_DISPLAY;
@@ -261,7 +246,7 @@ EGLDisplay EGLAPIENTRY GetPlatformDisplayEXT(EGLenum platform, void *native_disp
case EGL_EXPERIMENTAL_PRESENT_PATH_COPY_ANGLE:
break;
default:
- thread->setError(
+ SetGlobalError(
Error(EGL_BAD_ATTRIBUTE,
"Invalid value for EGL_EXPERIMENTAL_PRESENT_PATH_ANGLE"));
return EGL_NO_DISPLAY;
@@ -283,10 +268,10 @@ EGLDisplay EGLAPIENTRY GetPlatformDisplayEXT(EGLenum platform, void *native_disp
break;
default:
- thread->setError(Error(EGL_BAD_ATTRIBUTE,
- "Invalid value for "
- "EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE "
- "attrib"));
+ SetGlobalError(Error(EGL_BAD_ATTRIBUTE,
+ "Invalid value for "
+ "EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE "
+ "attrib"));
return EGL_NO_DISPLAY;
}
deviceType = curAttrib[1];
@@ -300,14 +285,14 @@ EGLDisplay EGLAPIENTRY GetPlatformDisplayEXT(EGLenum platform, void *native_disp
if (!majorVersionSpecified && minorVersionSpecified)
{
- thread->setError(Error(EGL_BAD_ATTRIBUTE));
+ SetGlobalError(Error(EGL_BAD_ATTRIBUTE));
return EGL_NO_DISPLAY;
}
if (deviceType == EGL_PLATFORM_ANGLE_DEVICE_TYPE_WARP_ANGLE &&
platformType != EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE)
{
- thread->setError(
+ SetGlobalError(
Error(EGL_BAD_ATTRIBUTE,
"EGL_PLATFORM_ANGLE_DEVICE_TYPE_WARP_ANGLE requires a device type of "
"EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE."));
@@ -316,7 +301,7 @@ EGLDisplay EGLAPIENTRY GetPlatformDisplayEXT(EGLenum platform, void *native_disp
if (enableAutoTrimSpecified && platformType != EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE)
{
- thread->setError(
+ SetGlobalError(
Error(EGL_BAD_ATTRIBUTE,
"EGL_PLATFORM_ANGLE_ENABLE_AUTOMATIC_TRIM_ANGLE requires a device type of "
"EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE."));
@@ -325,23 +310,23 @@ EGLDisplay EGLAPIENTRY GetPlatformDisplayEXT(EGLenum platform, void *native_disp
if (presentPathSpecified && platformType != EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE)
{
- thread->setError(Error(EGL_BAD_ATTRIBUTE,
- "EGL_EXPERIMENTAL_PRESENT_PATH_ANGLE requires a device type of "
- "EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE."));
+ SetGlobalError(Error(EGL_BAD_ATTRIBUTE,
+ "EGL_EXPERIMENTAL_PRESENT_PATH_ANGLE requires a device type of "
+ "EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE."));
return EGL_NO_DISPLAY;
}
if (deviceTypeSpecified && platformType != EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE &&
platformType != EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE)
{
- thread->setError(
+ SetGlobalError(
Error(EGL_BAD_ATTRIBUTE,
"EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE requires a device type of "
"EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE or EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE."));
return EGL_NO_DISPLAY;
}
- thread->setError(Error(EGL_SUCCESS));
+ SetGlobalError(Error(EGL_SUCCESS));
return Display::GetDisplayFromAttribs(native_display,
AttributeMap::CreateFromIntArray(attrib_list));
}
@@ -350,13 +335,13 @@ EGLDisplay EGLAPIENTRY GetPlatformDisplayEXT(EGLenum platform, void *native_disp
Device *eglDevice = reinterpret_cast<Device *>(native_display);
if (eglDevice == nullptr || !Device::IsValidDevice(eglDevice))
{
- thread->setError(Error(EGL_BAD_ATTRIBUTE,
- "native_display should be a valid EGL device if platform equals "
- "EGL_PLATFORM_DEVICE_EXT"));
+ SetGlobalError(Error(EGL_BAD_ATTRIBUTE,
+ "native_display should be a valid EGL device if platform equals "
+ "EGL_PLATFORM_DEVICE_EXT"));
return EGL_NO_DISPLAY;
}
- thread->setError(Error(EGL_SUCCESS));
+ SetGlobalError(Error(EGL_SUCCESS));
return Display::GetDisplayFromDevice(native_display);
}
else
@@ -371,12 +356,11 @@ EGLBoolean EGLAPIENTRY QueryDeviceAttribEXT(EGLDeviceEXT device, EGLint attribut
{
EVENT("(EGLDeviceEXT device = 0x%0.8p, EGLint attribute = %d, EGLAttrib *value = 0x%0.8p)",
device, attribute, value);
- Thread *thread = GetCurrentThread();
Device *dev = static_cast<Device*>(device);
if (dev == EGL_NO_DEVICE_EXT || !Device::IsValidDevice(dev))
{
- thread->setError(Error(EGL_BAD_ACCESS));
+ SetGlobalError(Error(EGL_BAD_ACCESS));
return EGL_FALSE;
}
@@ -385,9 +369,9 @@ EGLBoolean EGLAPIENTRY QueryDeviceAttribEXT(EGLDeviceEXT device, EGLint attribut
Display *owningDisplay = dev->getOwningDisplay();
if (owningDisplay != nullptr && !owningDisplay->getExtensions().deviceQuery)
{
- thread->setError(Error(EGL_BAD_ACCESS,
- "Device wasn't created using eglCreateDeviceANGLE, and the Display "
- "that created it doesn't support device querying"));
+ SetGlobalError(Error(EGL_BAD_ACCESS,
+ "Device wasn't created using eglCreateDeviceANGLE, and the Display "
+ "that created it doesn't support device querying"));
return EGL_FALSE;
}
@@ -400,17 +384,17 @@ EGLBoolean EGLAPIENTRY QueryDeviceAttribEXT(EGLDeviceEXT device, EGLint attribut
case EGL_D3D9_DEVICE_ANGLE:
if (!dev->getExtensions().deviceD3D || dev->getType() != attribute)
{
- thread->setError(Error(EGL_BAD_ATTRIBUTE));
+ SetGlobalError(Error(EGL_BAD_ATTRIBUTE));
return EGL_FALSE;
}
error = dev->getDevice(value);
break;
default:
- thread->setError(Error(EGL_BAD_ATTRIBUTE));
- return EGL_FALSE;
+ SetGlobalError(Error(EGL_BAD_ATTRIBUTE));
+ return EGL_FALSE;
}
- thread->setError(error);
+ SetGlobalError(error);
return (error.isError() ? EGL_FALSE : EGL_TRUE);
}
@@ -419,12 +403,11 @@ const char * EGLAPIENTRY QueryDeviceStringEXT(EGLDeviceEXT device, EGLint name)
{
EVENT("(EGLDeviceEXT device = 0x%0.8p, EGLint name = %d)",
device, name);
- Thread *thread = GetCurrentThread();
Device *dev = static_cast<Device*>(device);
if (dev == EGL_NO_DEVICE_EXT || !Device::IsValidDevice(dev))
{
- thread->setError(Error(EGL_BAD_DEVICE_EXT));
+ SetGlobalError(Error(EGL_BAD_DEVICE_EXT));
return nullptr;
}
@@ -435,11 +418,11 @@ const char * EGLAPIENTRY QueryDeviceStringEXT(EGLDeviceEXT device, EGLint name)
result = dev->getExtensionString().c_str();
break;
default:
- thread->setError(Error(EGL_BAD_DEVICE_EXT));
- return nullptr;
+ SetGlobalError(Error(EGL_BAD_DEVICE_EXT));
+ return nullptr;
}
- thread->setError(Error(EGL_SUCCESS));
+ SetGlobalError(Error(EGL_SUCCESS));
return result;
}
@@ -448,20 +431,19 @@ EGLBoolean EGLAPIENTRY QueryDisplayAttribEXT(EGLDisplay dpy, EGLint attribute, E
{
EVENT("(EGLDisplay dpy = 0x%0.8p, EGLint attribute = %d, EGLAttrib *value = 0x%0.8p)",
dpy, attribute, value);
- Thread *thread = GetCurrentThread();
Display *display = static_cast<Display*>(dpy);
Error error = ValidateDisplay(display);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
if (!display->getExtensions().deviceQuery)
{
- thread->setError(Error(EGL_BAD_ACCESS));
+ SetGlobalError(Error(EGL_BAD_ACCESS));
return EGL_FALSE;
}
@@ -473,11 +455,11 @@ EGLBoolean EGLAPIENTRY QueryDisplayAttribEXT(EGLDisplay dpy, EGLint attribute, E
break;
default:
- thread->setError(Error(EGL_BAD_ATTRIBUTE));
- return EGL_FALSE;
+ SetGlobalError(Error(EGL_BAD_ATTRIBUTE));
+ return EGL_FALSE;
}
- thread->setError(error);
+ SetGlobalError(error);
return (error.isError() ? EGL_FALSE : EGL_TRUE);
}
@@ -491,7 +473,6 @@ ANGLE_EXPORT EGLImageKHR EGLAPIENTRY CreateImageKHR(EGLDisplay dpy,
"(EGLDisplay dpy = 0x%0.8p, EGLContext ctx = 0x%0.8p, EGLenum target = 0x%X, "
"EGLClientBuffer buffer = 0x%0.8p, const EGLAttrib *attrib_list = 0x%0.8p)",
dpy, ctx, target, buffer, attrib_list);
- Thread *thread = GetCurrentThread();
Display *display = static_cast<Display *>(dpy);
gl::Context *context = static_cast<gl::Context *>(ctx);
@@ -500,7 +481,7 @@ ANGLE_EXPORT EGLImageKHR EGLAPIENTRY CreateImageKHR(EGLDisplay dpy,
Error error = ValidateCreateImageKHR(display, context, target, buffer, attributes);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_NO_IMAGE;
}
@@ -508,7 +489,7 @@ ANGLE_EXPORT EGLImageKHR EGLAPIENTRY CreateImageKHR(EGLDisplay dpy,
error = display->createImage(context, target, buffer, attributes, &image);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_NO_IMAGE;
}
@@ -518,7 +499,6 @@ ANGLE_EXPORT EGLImageKHR EGLAPIENTRY CreateImageKHR(EGLDisplay dpy,
ANGLE_EXPORT EGLBoolean EGLAPIENTRY DestroyImageKHR(EGLDisplay dpy, EGLImageKHR image)
{
EVENT("(EGLDisplay dpy = 0x%0.8p, EGLImage image = 0x%0.8p)", dpy, image);
- Thread *thread = GetCurrentThread();
Display *display = static_cast<Display *>(dpy);
Image *img = static_cast<Image *>(image);
@@ -526,7 +506,7 @@ ANGLE_EXPORT EGLBoolean EGLAPIENTRY DestroyImageKHR(EGLDisplay dpy, EGLImageKHR
Error error = ValidateDestroyImageKHR(display, img);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
@@ -543,12 +523,11 @@ ANGLE_EXPORT EGLDeviceEXT EGLAPIENTRY CreateDeviceANGLE(EGLint device_type,
"(EGLint device_type = %d, void* native_device = 0x%0.8p, const EGLAttrib* attrib_list = "
"0x%0.8p)",
device_type, native_device, attrib_list);
- Thread *thread = GetCurrentThread();
Error error = ValidateCreateDeviceANGLE(device_type, native_device, attrib_list);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_NO_DEVICE_EXT;
}
@@ -557,7 +536,7 @@ ANGLE_EXPORT EGLDeviceEXT EGLAPIENTRY CreateDeviceANGLE(EGLint device_type,
if (error.isError())
{
ASSERT(device == nullptr);
- thread->setError(error);
+ SetGlobalError(error);
return EGL_NO_DEVICE_EXT;
}
@@ -567,14 +546,13 @@ ANGLE_EXPORT EGLDeviceEXT EGLAPIENTRY CreateDeviceANGLE(EGLint device_type,
ANGLE_EXPORT EGLBoolean EGLAPIENTRY ReleaseDeviceANGLE(EGLDeviceEXT device)
{
EVENT("(EGLDeviceEXT device = 0x%0.8p)", device);
- Thread *thread = GetCurrentThread();
Device *dev = static_cast<Device *>(device);
Error error = ValidateReleaseDeviceANGLE(dev);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
@@ -587,7 +565,6 @@ ANGLE_EXPORT EGLBoolean EGLAPIENTRY ReleaseDeviceANGLE(EGLDeviceEXT device)
EGLStreamKHR EGLAPIENTRY CreateStreamKHR(EGLDisplay dpy, const EGLint *attrib_list)
{
EVENT("(EGLDisplay dpy = 0x%0.8p, const EGLAttrib* attrib_list = 0x%0.8p)", dpy, attrib_list);
- Thread *thread = GetCurrentThread();
Display *display = static_cast<Display *>(dpy);
AttributeMap attributes = AttributeMap::CreateFromIntArray(attrib_list);
@@ -595,7 +572,7 @@ EGLStreamKHR EGLAPIENTRY CreateStreamKHR(EGLDisplay dpy, const EGLint *attrib_li
Error error = ValidateCreateStreamKHR(display, attributes);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_NO_STREAM_KHR;
}
@@ -603,18 +580,17 @@ EGLStreamKHR EGLAPIENTRY CreateStreamKHR(EGLDisplay dpy, const EGLint *attrib_li
error = display->createStream(attributes, &stream);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_NO_STREAM_KHR;
}
- thread->setError(error);
+ SetGlobalError(error);
return static_cast<EGLStreamKHR>(stream);
}
EGLBoolean EGLAPIENTRY DestroyStreamKHR(EGLDisplay dpy, EGLStreamKHR stream)
{
EVENT("(EGLDisplay dpy = 0x%0.8p, EGLStreamKHR = 0x%0.8p)", dpy, stream);
- Thread *thread = GetCurrentThread();
Display *display = static_cast<Display *>(dpy);
Stream *streamObject = static_cast<Stream *>(stream);
@@ -622,12 +598,12 @@ EGLBoolean EGLAPIENTRY DestroyStreamKHR(EGLDisplay dpy, EGLStreamKHR stream)
Error error = ValidateDestroyStreamKHR(display, streamObject);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
display->destroyStream(streamObject);
- thread->setError(error);
+ SetGlobalError(error);
return EGL_TRUE;
}
@@ -640,7 +616,6 @@ EGLBoolean EGLAPIENTRY StreamAttribKHR(EGLDisplay dpy,
"(EGLDisplay dpy = 0x%0.8p, EGLStreamKHR stream = 0x%0.8p, EGLenum attribute = 0x%X, "
"EGLint value = 0x%X)",
dpy, stream, attribute, value);
- Thread *thread = GetCurrentThread();
Display *display = static_cast<Display *>(dpy);
Stream *streamObject = static_cast<Stream *>(stream);
@@ -648,7 +623,7 @@ EGLBoolean EGLAPIENTRY StreamAttribKHR(EGLDisplay dpy,
Error error = ValidateStreamAttribKHR(display, streamObject, attribute, value);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
@@ -664,7 +639,7 @@ EGLBoolean EGLAPIENTRY StreamAttribKHR(EGLDisplay dpy,
UNREACHABLE();
}
- thread->setError(error);
+ SetGlobalError(error);
return EGL_TRUE;
}
@@ -677,7 +652,6 @@ EGLBoolean EGLAPIENTRY QueryStreamKHR(EGLDisplay dpy,
"(EGLDisplay dpy = 0x%0.8p, EGLStreamKHR stream = 0x%0.8p, EGLenum attribute = 0x%X, "
"EGLint value = 0x%0.8p)",
dpy, stream, attribute, value);
- Thread *thread = GetCurrentThread();
Display *display = static_cast<Display *>(dpy);
Stream *streamObject = static_cast<Stream *>(stream);
@@ -685,7 +659,7 @@ EGLBoolean EGLAPIENTRY QueryStreamKHR(EGLDisplay dpy,
Error error = ValidateQueryStreamKHR(display, streamObject, attribute, value);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
@@ -704,7 +678,7 @@ EGLBoolean EGLAPIENTRY QueryStreamKHR(EGLDisplay dpy,
UNREACHABLE();
}
- thread->setError(error);
+ SetGlobalError(error);
return EGL_TRUE;
}
@@ -717,7 +691,6 @@ EGLBoolean EGLAPIENTRY QueryStreamu64KHR(EGLDisplay dpy,
"(EGLDisplay dpy = 0x%0.8p, EGLStreamKHR stream = 0x%0.8p, EGLenum attribute = 0x%X, "
"EGLuint64KHR value = 0x%0.8p)",
dpy, stream, attribute, value);
- Thread *thread = GetCurrentThread();
Display *display = static_cast<Display *>(dpy);
Stream *streamObject = static_cast<Stream *>(stream);
@@ -725,7 +698,7 @@ EGLBoolean EGLAPIENTRY QueryStreamu64KHR(EGLDisplay dpy,
Error error = ValidateQueryStreamu64KHR(display, streamObject, attribute, value);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
@@ -741,15 +714,13 @@ EGLBoolean EGLAPIENTRY QueryStreamu64KHR(EGLDisplay dpy,
UNREACHABLE();
}
- thread->setError(error);
+ SetGlobalError(error);
return EGL_TRUE;
}
EGLBoolean EGLAPIENTRY StreamConsumerGLTextureExternalKHR(EGLDisplay dpy, EGLStreamKHR stream)
{
EVENT("(EGLDisplay dpy = 0x%0.8p, EGLStreamKHR = 0x%0.8p)", dpy, stream);
- Thread *thread = GetCurrentThread();
-
Display *display = static_cast<Display *>(dpy);
Stream *streamObject = static_cast<Stream *>(stream);
gl::Context *context = gl::GetValidGlobalContext();
@@ -757,26 +728,24 @@ EGLBoolean EGLAPIENTRY StreamConsumerGLTextureExternalKHR(EGLDisplay dpy, EGLStr
Error error = ValidateStreamConsumerGLTextureExternalKHR(display, context, streamObject);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
error = streamObject->createConsumerGLTextureExternal(AttributeMap(), context);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
- thread->setError(error);
+ SetGlobalError(error);
return EGL_TRUE;
}
EGLBoolean EGLAPIENTRY StreamConsumerAcquireKHR(EGLDisplay dpy, EGLStreamKHR stream)
{
EVENT("(EGLDisplay dpy = 0x%0.8p, EGLStreamKHR = 0x%0.8p)", dpy, stream);
- Thread *thread = GetCurrentThread();
-
Display *display = static_cast<Display *>(dpy);
Stream *streamObject = static_cast<Stream *>(stream);
gl::Context *context = gl::GetValidGlobalContext();
@@ -784,26 +753,24 @@ EGLBoolean EGLAPIENTRY StreamConsumerAcquireKHR(EGLDisplay dpy, EGLStreamKHR str
Error error = ValidateStreamConsumerAcquireKHR(display, context, streamObject);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
error = streamObject->consumerAcquire();
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
- thread->setError(error);
+ SetGlobalError(error);
return EGL_TRUE;
}
EGLBoolean EGLAPIENTRY StreamConsumerReleaseKHR(EGLDisplay dpy, EGLStreamKHR stream)
{
EVENT("(EGLDisplay dpy = 0x%0.8p, EGLStreamKHR = 0x%0.8p)", dpy, stream);
- Thread *thread = GetCurrentThread();
-
Display *display = static_cast<Display *>(dpy);
Stream *streamObject = static_cast<Stream *>(stream);
gl::Context *context = gl::GetValidGlobalContext();
@@ -811,18 +778,18 @@ EGLBoolean EGLAPIENTRY StreamConsumerReleaseKHR(EGLDisplay dpy, EGLStreamKHR str
Error error = ValidateStreamConsumerReleaseKHR(display, context, streamObject);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
error = streamObject->consumerRelease();
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
- thread->setError(error);
+ SetGlobalError(error);
return EGL_TRUE;
}
@@ -833,8 +800,6 @@ EGLBoolean EGLAPIENTRY StreamConsumerGLTextureExternalAttribsNV(EGLDisplay dpy,
EVENT(
"(EGLDisplay dpy = 0x%0.8p, EGLStreamKHR stream = 0x%0.8p, EGLAttrib attrib_list = 0x%0.8p",
dpy, stream, attrib_list);
- Thread *thread = GetCurrentThread();
-
Display *display = static_cast<Display *>(dpy);
Stream *streamObject = static_cast<Stream *>(stream);
gl::Context *context = gl::GetValidGlobalContext();
@@ -844,18 +809,18 @@ EGLBoolean EGLAPIENTRY StreamConsumerGLTextureExternalAttribsNV(EGLDisplay dpy,
attributes);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
error = streamObject->createConsumerGLTextureExternal(attributes, context);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
- thread->setError(error);
+ SetGlobalError(error);
return EGL_TRUE;
}
@@ -866,8 +831,6 @@ EGLBoolean EGLAPIENTRY CreateStreamProducerD3DTextureNV12ANGLE(EGLDisplay dpy,
EVENT(
"(EGLDisplay dpy = 0x%0.8p, EGLStreamKHR stream = 0x%0.8p, EGLAttrib attrib_list = 0x%0.8p",
dpy, stream, attrib_list);
- Thread *thread = GetCurrentThread();
-
Display *display = static_cast<Display *>(dpy);
Stream *streamObject = static_cast<Stream *>(stream);
AttributeMap attributes = AttributeMap::CreateFromAttribArray(attrib_list);
@@ -876,18 +839,18 @@ EGLBoolean EGLAPIENTRY CreateStreamProducerD3DTextureNV12ANGLE(EGLDisplay dpy,
ValidateCreateStreamProducerD3DTextureNV12ANGLE(display, streamObject, attributes);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
error = streamObject->createProducerD3D11TextureNV12(attributes);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
- thread->setError(error);
+ SetGlobalError(error);
return EGL_TRUE;
}
@@ -900,8 +863,6 @@ EGLBoolean EGLAPIENTRY StreamPostD3DTextureNV12ANGLE(EGLDisplay dpy,
"(EGLDisplay dpy = 0x%0.8p, EGLStreamKHR stream = 0x%0.8p, void* texture = 0x%0.8p, "
"EGLAttrib attrib_list = 0x%0.8p",
dpy, stream, texture, attrib_list);
- Thread *thread = GetCurrentThread();
-
Display *display = static_cast<Display *>(dpy);
Stream *streamObject = static_cast<Stream *>(stream);
AttributeMap attributes = AttributeMap::CreateFromAttribArray(attrib_list);
@@ -909,49 +870,18 @@ EGLBoolean EGLAPIENTRY StreamPostD3DTextureNV12ANGLE(EGLDisplay dpy,
Error error = ValidateStreamPostD3DTextureNV12ANGLE(display, streamObject, texture, attributes);
if (error.isError())
{
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
error = streamObject->postD3D11NV12Texture(texture, attributes);
if (error.isError())
{
- thread->setError(error);
- return EGL_FALSE;
- }
-
- thread->setError(error);
- return EGL_TRUE;
-}
-
-ANGLE_EXPORT EGLBoolean SwapBuffersWithDamageEXT(EGLDisplay dpy,
- EGLSurface surface,
- EGLint *rects,
- EGLint n_rects)
-{
- EVENT(
- "(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p, EGLint *rects = 0x%0.8p, EGLint "
- "n_rects = %d)",
- dpy, surface, rects, n_rects);
- Thread *thread = GetCurrentThread();
-
- Display *display = static_cast<Display *>(dpy);
- Surface *eglSurface = static_cast<Surface *>(surface);
-
- Error error = ValidateSwapBuffersWithDamageEXT(display, eglSurface, rects, n_rects);
- if (error.isError())
- {
- thread->setError(error);
- return EGL_FALSE;
- }
-
- error = eglSurface->swapWithDamage(rects, n_rects);
- if (error.isError())
- {
- thread->setError(error);
+ SetGlobalError(error);
return EGL_FALSE;
}
+ SetGlobalError(error);
return EGL_TRUE;
}
}
diff --git a/gfx/angle/src/libGLESv2/entry_points_egl_ext.h b/gfx/angle/src/libGLESv2/entry_points_egl_ext.h
index eb57ad05e..4ec0450bf 100755
--- a/gfx/angle/src/libGLESv2/entry_points_egl_ext.h
+++ b/gfx/angle/src/libGLESv2/entry_points_egl_ext.h
@@ -79,13 +79,6 @@ ANGLE_EXPORT EGLBoolean EGLAPIENTRY StreamPostD3DTextureNV12ANGLE(EGLDisplay dpy
EGLStreamKHR stream,
void *texture,
const EGLAttrib *attrib_list);
-
-// EGL_EXT_swap_buffers_with_damage
-ANGLE_EXPORT EGLBoolean SwapBuffersWithDamageEXT(EGLDisplay dpy,
- EGLSurface surface,
- EGLint *rects,
- EGLint n_rects);
-
} // namespace egl
#endif // LIBGLESV2_ENTRYPOINTSEGLEXT_H_
diff --git a/gfx/angle/src/libGLESv2/entry_points_gles_2_0.cpp b/gfx/angle/src/libGLESv2/entry_points_gles_2_0.cpp
index ca6129800..c3e9ad875 100755
--- a/gfx/angle/src/libGLESv2/entry_points_gles_2_0.cpp
+++ b/gfx/angle/src/libGLESv2/entry_points_gles_2_0.cpp
@@ -28,7 +28,6 @@
#include "libANGLE/validationES2.h"
#include "libANGLE/validationES3.h"
#include "libANGLE/queryconversions.h"
-#include "libANGLE/queryutils.h"
#include "common/debug.h"
#include "common/utilities.h"
@@ -44,8 +43,9 @@ void GL_APIENTRY ActiveTexture(GLenum texture)
Context *context = GetValidGlobalContext();
if (context)
{
- if (!context->skipValidation() && !ValidateActiveTexture(context, texture))
+ if (texture < GL_TEXTURE0 || texture > GL_TEXTURE0 + context->getCaps().maxCombinedTextureImageUnits - 1)
{
+ context->handleError(Error(GL_INVALID_ENUM));
return;
}
@@ -60,12 +60,23 @@ void GL_APIENTRY AttachShader(GLuint program, GLuint shader)
Context *context = GetValidGlobalContext();
if (context)
{
- if (!context->skipValidation() && !ValidateAttachShader(context, program, shader))
+ Program *programObject = GetValidProgram(context, program);
+ if (!programObject)
{
return;
}
- context->attachShader(program, shader);
+ Shader *shaderObject = GetValidShader(context, shader);
+ if (!shaderObject)
+ {
+ return;
+ }
+
+ if (!programObject->attachShader(shaderObject))
+ {
+ context->handleError(Error(GL_INVALID_OPERATION));
+ return;
+ }
}
}
@@ -76,13 +87,26 @@ void GL_APIENTRY BindAttribLocation(GLuint program, GLuint index, const GLchar*
Context *context = GetValidGlobalContext();
if (context)
{
- if (!context->skipValidation() &&
- !ValidateBindAttribLocation(context, program, index, name))
+ if (index >= MAX_VERTEX_ATTRIBS)
{
+ context->handleError(Error(GL_INVALID_VALUE));
return;
}
- context->bindAttribLocation(program, index, name);
+ Program *programObject = GetValidProgram(context, program);
+
+ if (!programObject)
+ {
+ return;
+ }
+
+ if (strncmp(name, "gl_", 3) == 0)
+ {
+ context->handleError(Error(GL_INVALID_OPERATION));
+ return;
+ }
+
+ programObject->bindAttributeLocation(index, name);
}
}
@@ -93,12 +117,43 @@ void GL_APIENTRY BindBuffer(GLenum target, GLuint buffer)
Context *context = GetValidGlobalContext();
if (context)
{
- if (!context->skipValidation() && !ValidateBindBuffer(context, target, buffer))
+ if (!ValidBufferTarget(context, target))
{
+ context->handleError(Error(GL_INVALID_ENUM));
return;
}
- context->bindBuffer(target, buffer);
+ switch (target)
+ {
+ case GL_ARRAY_BUFFER:
+ context->bindArrayBuffer(buffer);
+ return;
+ case GL_ELEMENT_ARRAY_BUFFER:
+ context->bindElementArrayBuffer(buffer);
+ return;
+ case GL_COPY_READ_BUFFER:
+ context->bindCopyReadBuffer(buffer);
+ return;
+ case GL_COPY_WRITE_BUFFER:
+ context->bindCopyWriteBuffer(buffer);
+ return;
+ case GL_PIXEL_PACK_BUFFER:
+ context->bindPixelPackBuffer(buffer);
+ return;
+ case GL_PIXEL_UNPACK_BUFFER:
+ context->bindPixelUnpackBuffer(buffer);
+ return;
+ case GL_UNIFORM_BUFFER:
+ context->bindGenericUniformBuffer(buffer);
+ return;
+ case GL_TRANSFORM_FEEDBACK_BUFFER:
+ context->bindGenericTransformFeedbackBuffer(buffer);
+ return;
+
+ default:
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
}
}
@@ -109,12 +164,21 @@ void GL_APIENTRY BindFramebuffer(GLenum target, GLuint framebuffer)
Context *context = GetValidGlobalContext();
if (context)
{
- if (!context->skipValidation() && !ValidateBindFramebuffer(context, target, framebuffer))
+ if (!ValidFramebufferTarget(target))
{
+ context->handleError(Error(GL_INVALID_ENUM));
return;
}
- context->bindFramebuffer(target, framebuffer);
+ if (target == GL_READ_FRAMEBUFFER_ANGLE || target == GL_FRAMEBUFFER)
+ {
+ context->bindReadFramebuffer(framebuffer);
+ }
+
+ if (target == GL_DRAW_FRAMEBUFFER_ANGLE || target == GL_FRAMEBUFFER)
+ {
+ context->bindDrawFramebuffer(framebuffer);
+ }
}
}
@@ -125,12 +189,13 @@ void GL_APIENTRY BindRenderbuffer(GLenum target, GLuint renderbuffer)
Context *context = GetValidGlobalContext();
if (context)
{
- if (!context->skipValidation() && !ValidateBindRenderbuffer(context, target, renderbuffer))
+ if (target != GL_RENDERBUFFER)
{
+ context->handleError(Error(GL_INVALID_ENUM));
return;
}
- context->bindRenderbuffer(target, renderbuffer);
+ context->bindRenderbuffer(renderbuffer);
}
}
@@ -141,7 +206,7 @@ void GL_APIENTRY BindTexture(GLenum target, GLuint texture)
Context *context = GetValidGlobalContext();
if (context)
{
- if (!context->skipValidation() && !ValidateBindTexture(context, target, texture))
+ if (!ValidateBindTexture(context, target, texture))
{
return;
}
@@ -164,18 +229,7 @@ void GL_APIENTRY BlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclamp
void GL_APIENTRY BlendEquation(GLenum mode)
{
- EVENT("(GLenum mode = 0x%X)", mode);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!context->skipValidation() && !ValidateBlendEquation(context, mode))
- {
- return;
- }
-
- context->blendEquation(mode);
- }
+ BlendEquationSeparate(mode, mode);
}
void GL_APIENTRY BlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha)
@@ -185,9 +239,31 @@ void GL_APIENTRY BlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha)
Context *context = GetValidGlobalContext();
if (context)
{
- if (!context->skipValidation() &&
- !ValidateBlendEquationSeparate(context, modeRGB, modeAlpha))
+ switch (modeRGB)
{
+ case GL_FUNC_ADD:
+ case GL_FUNC_SUBTRACT:
+ case GL_FUNC_REVERSE_SUBTRACT:
+ case GL_MIN:
+ case GL_MAX:
+ break;
+
+ default:
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+
+ switch (modeAlpha)
+ {
+ case GL_FUNC_ADD:
+ case GL_FUNC_SUBTRACT:
+ case GL_FUNC_REVERSE_SUBTRACT:
+ case GL_MIN:
+ case GL_MAX:
+ break;
+
+ default:
+ context->handleError(Error(GL_INVALID_ENUM));
return;
}
@@ -197,18 +273,7 @@ void GL_APIENTRY BlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha)
void GL_APIENTRY BlendFunc(GLenum sfactor, GLenum dfactor)
{
- EVENT("(GLenum sfactor = 0x%X, GLenum dfactor = 0x%X)", sfactor, dfactor);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!context->skipValidation() && !ValidateBlendFunc(context, sfactor, dfactor))
- {
- return;
- }
-
- context->blendFunc(sfactor, dfactor);
- }
+ BlendFuncSeparate(sfactor, dfactor, sfactor, dfactor);
}
void GL_APIENTRY BlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
@@ -219,10 +284,135 @@ void GL_APIENTRY BlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha
Context *context = GetValidGlobalContext();
if (context)
{
- if (!context->skipValidation() &&
- !ValidateBlendFuncSeparate(context, srcRGB, dstRGB, srcAlpha, dstAlpha))
+ switch (srcRGB)
{
- return;
+ case GL_ZERO:
+ case GL_ONE:
+ case GL_SRC_COLOR:
+ case GL_ONE_MINUS_SRC_COLOR:
+ case GL_DST_COLOR:
+ case GL_ONE_MINUS_DST_COLOR:
+ case GL_SRC_ALPHA:
+ case GL_ONE_MINUS_SRC_ALPHA:
+ case GL_DST_ALPHA:
+ case GL_ONE_MINUS_DST_ALPHA:
+ case GL_CONSTANT_COLOR:
+ case GL_ONE_MINUS_CONSTANT_COLOR:
+ case GL_CONSTANT_ALPHA:
+ case GL_ONE_MINUS_CONSTANT_ALPHA:
+ case GL_SRC_ALPHA_SATURATE:
+ break;
+
+ default:
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+
+ switch (dstRGB)
+ {
+ case GL_ZERO:
+ case GL_ONE:
+ case GL_SRC_COLOR:
+ case GL_ONE_MINUS_SRC_COLOR:
+ case GL_DST_COLOR:
+ case GL_ONE_MINUS_DST_COLOR:
+ case GL_SRC_ALPHA:
+ case GL_ONE_MINUS_SRC_ALPHA:
+ case GL_DST_ALPHA:
+ case GL_ONE_MINUS_DST_ALPHA:
+ case GL_CONSTANT_COLOR:
+ case GL_ONE_MINUS_CONSTANT_COLOR:
+ case GL_CONSTANT_ALPHA:
+ case GL_ONE_MINUS_CONSTANT_ALPHA:
+ break;
+
+ case GL_SRC_ALPHA_SATURATE:
+ if (context->getClientMajorVersion() < 3)
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+ break;
+
+ default:
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+
+ switch (srcAlpha)
+ {
+ case GL_ZERO:
+ case GL_ONE:
+ case GL_SRC_COLOR:
+ case GL_ONE_MINUS_SRC_COLOR:
+ case GL_DST_COLOR:
+ case GL_ONE_MINUS_DST_COLOR:
+ case GL_SRC_ALPHA:
+ case GL_ONE_MINUS_SRC_ALPHA:
+ case GL_DST_ALPHA:
+ case GL_ONE_MINUS_DST_ALPHA:
+ case GL_CONSTANT_COLOR:
+ case GL_ONE_MINUS_CONSTANT_COLOR:
+ case GL_CONSTANT_ALPHA:
+ case GL_ONE_MINUS_CONSTANT_ALPHA:
+ case GL_SRC_ALPHA_SATURATE:
+ break;
+
+ default:
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+
+ switch (dstAlpha)
+ {
+ case GL_ZERO:
+ case GL_ONE:
+ case GL_SRC_COLOR:
+ case GL_ONE_MINUS_SRC_COLOR:
+ case GL_DST_COLOR:
+ case GL_ONE_MINUS_DST_COLOR:
+ case GL_SRC_ALPHA:
+ case GL_ONE_MINUS_SRC_ALPHA:
+ case GL_DST_ALPHA:
+ case GL_ONE_MINUS_DST_ALPHA:
+ case GL_CONSTANT_COLOR:
+ case GL_ONE_MINUS_CONSTANT_COLOR:
+ case GL_CONSTANT_ALPHA:
+ case GL_ONE_MINUS_CONSTANT_ALPHA:
+ break;
+
+ case GL_SRC_ALPHA_SATURATE:
+ if (context->getClientMajorVersion() < 3)
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+ break;
+
+ default:
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+
+ if (context->getLimitations().noSimultaneousConstantColorAndAlphaBlendFunc)
+ {
+ bool constantColorUsed =
+ (srcRGB == GL_CONSTANT_COLOR || srcRGB == GL_ONE_MINUS_CONSTANT_COLOR ||
+ dstRGB == GL_CONSTANT_COLOR || dstRGB == GL_ONE_MINUS_CONSTANT_COLOR);
+
+ bool constantAlphaUsed =
+ (srcRGB == GL_CONSTANT_ALPHA || srcRGB == GL_ONE_MINUS_CONSTANT_ALPHA ||
+ dstRGB == GL_CONSTANT_ALPHA || dstRGB == GL_ONE_MINUS_CONSTANT_ALPHA);
+
+ if (constantColorUsed && constantAlphaUsed)
+ {
+ ERR(
+ "Simultaneous use of GL_CONSTANT_ALPHA/GL_ONE_MINUS_CONSTANT_ALPHA and "
+ "GL_CONSTANT_COLOR/GL_ONE_MINUS_CONSTANT_COLOR not supported by this "
+ "implementation.");
+ context->handleError(Error(GL_INVALID_OPERATION));
+ return;
+ }
}
context->blendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha);
@@ -237,12 +427,57 @@ void GL_APIENTRY BufferData(GLenum target, GLsizeiptr size, const GLvoid* data,
Context *context = GetValidGlobalContext();
if (context)
{
- if (!context->skipValidation() && !ValidateBufferData(context, target, size, data, usage))
+ if (size < 0)
+ {
+ context->handleError(Error(GL_INVALID_VALUE));
+ return;
+ }
+
+ switch (usage)
+ {
+ case GL_STREAM_DRAW:
+ case GL_STATIC_DRAW:
+ case GL_DYNAMIC_DRAW:
+ break;
+
+ case GL_STREAM_READ:
+ case GL_STREAM_COPY:
+ case GL_STATIC_READ:
+ case GL_STATIC_COPY:
+ case GL_DYNAMIC_READ:
+ case GL_DYNAMIC_COPY:
+ if (context->getClientMajorVersion() < 3)
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+ break;
+
+ default:
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+
+ if (!ValidBufferTarget(context, target))
{
+ context->handleError(Error(GL_INVALID_ENUM));
return;
}
- context->bufferData(target, size, data, usage);
+ Buffer *buffer = context->getGLState().getTargetBuffer(target);
+
+ if (!buffer)
+ {
+ context->handleError(Error(GL_INVALID_OPERATION));
+ return;
+ }
+
+ Error error = buffer->bufferData(data, size, usage);
+ if (error.isError())
+ {
+ context->handleError(error);
+ return;
+ }
}
}
@@ -254,13 +489,58 @@ void GL_APIENTRY BufferSubData(GLenum target, GLintptr offset, GLsizeiptr size,
Context *context = GetValidGlobalContext();
if (context)
{
- if (!context->skipValidation() &&
- !ValidateBufferSubData(context, target, offset, size, data))
+ if (size < 0 || offset < 0)
+ {
+ context->handleError(Error(GL_INVALID_VALUE));
+ return;
+ }
+
+ if (!ValidBufferTarget(context, target))
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+
+ Buffer *buffer = context->getGLState().getTargetBuffer(target);
+
+ if (!buffer)
+ {
+ context->handleError(Error(GL_INVALID_OPERATION));
+ return;
+ }
+
+ if (buffer->isMapped())
+ {
+ context->handleError(Error(GL_INVALID_OPERATION));
+ return;
+ }
+
+ // Check for possible overflow of size + offset
+ angle::CheckedNumeric<size_t> checkedSize(size);
+ checkedSize += offset;
+ if (!checkedSize.IsValid())
+ {
+ context->handleError(Error(GL_OUT_OF_MEMORY));
+ return;
+ }
+
+ if (size + offset > buffer->getSize())
+ {
+ context->handleError(Error(GL_INVALID_VALUE));
+ return;
+ }
+
+ if (data == NULL)
{
return;
}
- context->bufferSubData(target, offset, size, data);
+ Error error = buffer->bufferSubData(data, size, offset);
+ if (error.isError())
+ {
+ context->handleError(error);
+ return;
+ }
}
}
@@ -360,7 +640,7 @@ void GL_APIENTRY CompileShader(GLuint shader)
{
return;
}
- shaderObject->compile(context);
+ shaderObject->compile(context->getCompiler());
}
}
@@ -727,8 +1007,9 @@ void GL_APIENTRY Disable(GLenum cap)
Context *context = GetValidGlobalContext();
if (context)
{
- if (!context->skipValidation() && !ValidateDisable(context, cap))
+ if (!ValidCap(context, cap))
{
+ context->handleError(Error(GL_INVALID_ENUM));
return;
}
@@ -760,7 +1041,7 @@ void GL_APIENTRY DrawArrays(GLenum mode, GLint first, GLsizei count)
Context *context = GetValidGlobalContext();
if (context)
{
- if (!ValidateDrawArrays(context, mode, first, count, 1))
+ if (!ValidateDrawArrays(context, mode, first, count, 0))
{
return;
}
@@ -783,7 +1064,7 @@ void GL_APIENTRY DrawElements(GLenum mode, GLsizei count, GLenum type, const GLv
if (context)
{
IndexRange indexRange;
- if (!ValidateDrawElements(context, mode, count, type, indices, 1, &indexRange))
+ if (!ValidateDrawElements(context, mode, count, type, indices, 0, &indexRange))
{
return;
}
@@ -804,11 +1085,26 @@ void GL_APIENTRY Enable(GLenum cap)
Context *context = GetValidGlobalContext();
if (context)
{
- if (!context->skipValidation() && !ValidateEnable(context, cap))
+ if (!ValidCap(context, cap))
{
+ context->handleError(Error(GL_INVALID_ENUM));
return;
}
+ if (context->getLimitations().noSampleAlphaToCoverageSupport)
+ {
+ if (cap == GL_SAMPLE_ALPHA_TO_COVERAGE)
+ {
+ const char *errorMessage = "Current renderer doesn't support alpha-to-coverage";
+ context->handleError(Error(GL_INVALID_OPERATION, errorMessage));
+
+ // We also output an error message to the debugger window if tracing is active, so that developers can see the error message.
+ ERR("%s", errorMessage);
+
+ return;
+ }
+ }
+
context->enable(cap);
}
}
@@ -1160,14 +1456,53 @@ void GL_APIENTRY GetBufferParameteriv(GLenum target, GLenum pname, GLint* params
Context *context = GetValidGlobalContext();
if (context)
{
- if (!context->skipValidation() &&
- !ValidateGetBufferParameteriv(context, target, pname, params))
+ if (!ValidBufferTarget(context, target))
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+
+ if (!ValidBufferParameter(context, pname))
{
+ context->handleError(Error(GL_INVALID_ENUM));
return;
}
Buffer *buffer = context->getGLState().getTargetBuffer(target);
- QueryBufferParameteriv(buffer, pname, params);
+
+ if (!buffer)
+ {
+ // A null buffer means that "0" is bound to the requested buffer target
+ context->handleError(Error(GL_INVALID_OPERATION));
+ return;
+ }
+
+ switch (pname)
+ {
+ case GL_BUFFER_USAGE:
+ *params = static_cast<GLint>(buffer->getUsage());
+ break;
+ case GL_BUFFER_SIZE:
+ *params = clampCast<GLint>(buffer->getSize());
+ break;
+ case GL_BUFFER_ACCESS_FLAGS:
+ *params = buffer->getAccessFlags();
+ break;
+ case GL_BUFFER_ACCESS_OES:
+ *params = buffer->getAccess();
+ break;
+ case GL_BUFFER_MAPPED:
+ static_assert(GL_BUFFER_MAPPED == GL_BUFFER_MAPPED_OES, "GL enums should be equal.");
+ *params = static_cast<GLint>(buffer->isMapped());
+ break;
+ case GL_BUFFER_MAP_OFFSET:
+ *params = clampCast<GLint>(buffer->getMapOffset());
+ break;
+ case GL_BUFFER_MAP_LENGTH:
+ *params = clampCast<GLint>(buffer->getMapLength());
+ break;
+ default: UNREACHABLE(); break;
+ }
}
}
@@ -1218,16 +1553,259 @@ void GL_APIENTRY GetFramebufferAttachmentParameteriv(GLenum target, GLenum attac
Context *context = GetValidGlobalContext();
if (context)
{
- GLsizei numParams = 0;
- if (!context->skipValidation() &&
- !ValidateGetFramebufferAttachmentParameteriv(context, target, attachment, pname,
- &numParams))
+ if (!ValidFramebufferTarget(target))
{
+ context->handleError(Error(GL_INVALID_ENUM));
return;
}
+ int clientVersion = context->getClientMajorVersion();
+
+ switch (pname)
+ {
+ case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE:
+ case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME:
+ case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL:
+ case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE:
+ break;
+
+ case GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING:
+ if (clientVersion < 3 && !context->getExtensions().sRGB)
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+ break;
+
+ case GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE:
+ case GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE:
+ case GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE:
+ case GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE:
+ case GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE:
+ case GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE:
+ case GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE:
+ case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER:
+ if (clientVersion < 3)
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+ break;
+
+ default:
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+
+ // Determine if the attachment is a valid enum
+ switch (attachment)
+ {
+ case GL_BACK:
+ case GL_FRONT:
+ case GL_DEPTH:
+ case GL_STENCIL:
+ case GL_DEPTH_STENCIL_ATTACHMENT:
+ if (clientVersion < 3)
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+ break;
+
+ case GL_DEPTH_ATTACHMENT:
+ case GL_STENCIL_ATTACHMENT:
+ break;
+
+ default:
+ if (attachment < GL_COLOR_ATTACHMENT0_EXT ||
+ (attachment - GL_COLOR_ATTACHMENT0_EXT) >= context->getCaps().maxColorAttachments)
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+ break;
+ }
+
const Framebuffer *framebuffer = context->getGLState().getTargetFramebuffer(target);
- QueryFramebufferAttachmentParameteriv(framebuffer, attachment, pname, params);
+ ASSERT(framebuffer);
+
+ if (framebuffer->id() == 0)
+ {
+ if (clientVersion < 3)
+ {
+ context->handleError(Error(GL_INVALID_OPERATION));
+ return;
+ }
+
+ switch (attachment)
+ {
+ case GL_BACK:
+ case GL_DEPTH:
+ case GL_STENCIL:
+ break;
+
+ default:
+ context->handleError(Error(GL_INVALID_OPERATION));
+ return;
+ }
+ }
+ else
+ {
+ if (attachment >= GL_COLOR_ATTACHMENT0_EXT && attachment <= GL_COLOR_ATTACHMENT15_EXT)
+ {
+ // Valid attachment query
+ }
+ else
+ {
+ switch (attachment)
+ {
+ case GL_DEPTH_ATTACHMENT:
+ case GL_STENCIL_ATTACHMENT:
+ break;
+
+ case GL_DEPTH_STENCIL_ATTACHMENT:
+ if (!framebuffer->hasValidDepthStencil())
+ {
+ context->handleError(Error(GL_INVALID_OPERATION));
+ return;
+ }
+ break;
+
+ default:
+ context->handleError(Error(GL_INVALID_OPERATION));
+ return;
+ }
+ }
+ }
+
+ const FramebufferAttachment *attachmentObject = framebuffer->getAttachment(attachment);
+ if (attachmentObject)
+ {
+ ASSERT(attachmentObject->type() == GL_RENDERBUFFER ||
+ attachmentObject->type() == GL_TEXTURE ||
+ attachmentObject->type() == GL_FRAMEBUFFER_DEFAULT);
+
+ switch (pname)
+ {
+ case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE:
+ *params = attachmentObject->type();
+ break;
+
+ case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME:
+ if (attachmentObject->type() != GL_RENDERBUFFER && attachmentObject->type() != GL_TEXTURE)
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+ *params = attachmentObject->id();
+ break;
+
+ case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL:
+ if (attachmentObject->type() != GL_TEXTURE)
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+ *params = attachmentObject->mipLevel();
+ break;
+
+ case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE:
+ if (attachmentObject->type() != GL_TEXTURE)
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+ *params = attachmentObject->cubeMapFace();
+ break;
+
+ case GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE:
+ *params = attachmentObject->getRedSize();
+ break;
+
+ case GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE:
+ *params = attachmentObject->getGreenSize();
+ break;
+
+ case GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE:
+ *params = attachmentObject->getBlueSize();
+ break;
+
+ case GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE:
+ *params = attachmentObject->getAlphaSize();
+ break;
+
+ case GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE:
+ *params = attachmentObject->getDepthSize();
+ break;
+
+ case GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE:
+ *params = attachmentObject->getStencilSize();
+ break;
+
+ case GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE:
+ if (attachment == GL_DEPTH_STENCIL_ATTACHMENT)
+ {
+ context->handleError(Error(GL_INVALID_OPERATION));
+ return;
+ }
+ *params = attachmentObject->getComponentType();
+ break;
+
+ case GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING:
+ *params = attachmentObject->getColorEncoding();
+ break;
+
+ case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER:
+ if (attachmentObject->type() != GL_TEXTURE)
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+ *params = attachmentObject->layer();
+ break;
+
+ default:
+ UNREACHABLE();
+ break;
+ }
+ }
+ else
+ {
+ // ES 2.0.25 spec pg 127 states that if the value of FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE
+ // is NONE, then querying any other pname will generate INVALID_ENUM.
+
+ // ES 3.0.2 spec pg 235 states that if the attachment type is none,
+ // GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME will return zero and be an
+ // INVALID_OPERATION for all other pnames
+
+ switch (pname)
+ {
+ case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE:
+ *params = GL_NONE;
+ break;
+
+ case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME:
+ if (clientVersion < 3)
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+ *params = 0;
+ break;
+
+ default:
+ if (clientVersion < 3)
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+ else
+ {
+ context->handleError(Error(GL_INVALID_OPERATION));
+ return;
+ }
+ }
+ }
}
}
@@ -1264,15 +1842,83 @@ void GL_APIENTRY GetProgramiv(GLuint program, GLenum pname, GLint* params)
Context *context = GetValidGlobalContext();
if (context)
{
- GLsizei numParams = 0;
- if (!context->skipValidation() &&
- !ValidateGetProgramiv(context, program, pname, &numParams))
+ Program *programObject = GetValidProgram(context, program);
+
+ if (!programObject)
{
return;
}
- Program *programObject = context->getProgram(program);
- QueryProgramiv(programObject, pname, params);
+ if (context->getClientMajorVersion() < 3)
+ {
+ switch (pname)
+ {
+ case GL_ACTIVE_UNIFORM_BLOCKS:
+ case GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH:
+ case GL_TRANSFORM_FEEDBACK_BUFFER_MODE:
+ case GL_TRANSFORM_FEEDBACK_VARYINGS:
+ case GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH:
+ case GL_PROGRAM_BINARY_RETRIEVABLE_HINT:
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+ }
+
+ switch (pname)
+ {
+ case GL_DELETE_STATUS:
+ *params = programObject->isFlaggedForDeletion();
+ return;
+ case GL_LINK_STATUS:
+ *params = programObject->isLinked();
+ return;
+ case GL_VALIDATE_STATUS:
+ *params = programObject->isValidated();
+ return;
+ case GL_INFO_LOG_LENGTH:
+ *params = programObject->getInfoLogLength();
+ return;
+ case GL_ATTACHED_SHADERS:
+ *params = programObject->getAttachedShadersCount();
+ return;
+ case GL_ACTIVE_ATTRIBUTES:
+ *params = programObject->getActiveAttributeCount();
+ return;
+ case GL_ACTIVE_ATTRIBUTE_MAX_LENGTH:
+ *params = programObject->getActiveAttributeMaxLength();
+ return;
+ case GL_ACTIVE_UNIFORMS:
+ *params = programObject->getActiveUniformCount();
+ return;
+ case GL_ACTIVE_UNIFORM_MAX_LENGTH:
+ *params = programObject->getActiveUniformMaxLength();
+ return;
+ case GL_PROGRAM_BINARY_LENGTH_OES:
+ *params = programObject->getBinaryLength();
+ return;
+ case GL_ACTIVE_UNIFORM_BLOCKS:
+ *params = programObject->getActiveUniformBlockCount();
+ return;
+ case GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH:
+ *params = programObject->getActiveUniformBlockMaxLength();
+ break;
+ case GL_TRANSFORM_FEEDBACK_BUFFER_MODE:
+ *params = programObject->getTransformFeedbackBufferMode();
+ break;
+ case GL_TRANSFORM_FEEDBACK_VARYINGS:
+ *params = programObject->getTransformFeedbackVaryingCount();
+ break;
+ case GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH:
+ *params = programObject->getTransformFeedbackVaryingMaxLength();
+ break;
+ case GL_PROGRAM_BINARY_RETRIEVABLE_HINT:
+ *params = programObject->getBinaryRetrievableHint();
+ break;
+
+ default:
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
}
}
@@ -1307,14 +1953,64 @@ void GL_APIENTRY GetRenderbufferParameteriv(GLenum target, GLenum pname, GLint*
Context *context = GetValidGlobalContext();
if (context)
{
- if (!context->skipValidation() &&
- !ValidateGetRenderbufferParameteriv(context, target, pname, params))
+ if (target != GL_RENDERBUFFER)
{
+ context->handleError(Error(GL_INVALID_ENUM));
return;
}
- Renderbuffer *renderbuffer = context->getGLState().getCurrentRenderbuffer();
- QueryRenderbufferiv(renderbuffer, pname, params);
+ if (context->getGLState().getRenderbufferId() == 0)
+ {
+ context->handleError(Error(GL_INVALID_OPERATION));
+ return;
+ }
+
+ Renderbuffer *renderbuffer =
+ context->getRenderbuffer(context->getGLState().getRenderbufferId());
+
+ switch (pname)
+ {
+ case GL_RENDERBUFFER_WIDTH:
+ *params = renderbuffer->getWidth();
+ break;
+ case GL_RENDERBUFFER_HEIGHT:
+ *params = renderbuffer->getHeight();
+ break;
+ case GL_RENDERBUFFER_INTERNAL_FORMAT:
+ *params = renderbuffer->getFormat().info->internalFormat;
+ break;
+ case GL_RENDERBUFFER_RED_SIZE:
+ *params = renderbuffer->getRedSize();
+ break;
+ case GL_RENDERBUFFER_GREEN_SIZE:
+ *params = renderbuffer->getGreenSize();
+ break;
+ case GL_RENDERBUFFER_BLUE_SIZE:
+ *params = renderbuffer->getBlueSize();
+ break;
+ case GL_RENDERBUFFER_ALPHA_SIZE:
+ *params = renderbuffer->getAlphaSize();
+ break;
+ case GL_RENDERBUFFER_DEPTH_SIZE:
+ *params = renderbuffer->getDepthSize();
+ break;
+ case GL_RENDERBUFFER_STENCIL_SIZE:
+ *params = renderbuffer->getStencilSize();
+ break;
+
+ case GL_RENDERBUFFER_SAMPLES_ANGLE:
+ if (!context->getExtensions().framebufferMultisample)
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+ *params = renderbuffer->getSamples();
+ break;
+
+ default:
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
}
}
@@ -1325,13 +2021,37 @@ void GL_APIENTRY GetShaderiv(GLuint shader, GLenum pname, GLint* params)
Context *context = GetValidGlobalContext();
if (context)
{
- if (!context->skipValidation() && !ValidateGetShaderiv(context, shader, pname, params))
+ Shader *shaderObject = GetValidShader(context, shader);
+ if (!shaderObject)
{
return;
}
- Shader *shaderObject = context->getShader(shader);
- QueryShaderiv(shaderObject, pname, params);
+ switch (pname)
+ {
+ case GL_SHADER_TYPE:
+ *params = shaderObject->getType();
+ return;
+ case GL_DELETE_STATUS:
+ *params = shaderObject->isFlaggedForDeletion();
+ return;
+ case GL_COMPILE_STATUS:
+ *params = shaderObject->isCompiled() ? GL_TRUE : GL_FALSE;
+ return;
+ case GL_INFO_LOG_LENGTH:
+ *params = shaderObject->getInfoLogLength();
+ return;
+ case GL_SHADER_SOURCE_LENGTH:
+ *params = shaderObject->getSourceLength();
+ return;
+ case GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE:
+ *params = shaderObject->getTranslatedSourceWithDebugInfoLength();
+ return;
+
+ default:
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
}
}
@@ -1471,7 +2191,7 @@ const GLubyte *GL_APIENTRY GetString(GLenum name)
return reinterpret_cast<const GLubyte *>("Google Inc.");
case GL_RENDERER:
- return reinterpret_cast<const GLubyte *>(context->getRendererString());
+ return reinterpret_cast<const GLubyte *>(context->getRendererString().c_str());
case GL_VERSION:
if (context->getClientMajorVersion() == 2)
@@ -1498,7 +2218,7 @@ const GLubyte *GL_APIENTRY GetString(GLenum name)
}
case GL_EXTENSIONS:
- return reinterpret_cast<const GLubyte *>(context->getExtensionString());
+ return reinterpret_cast<const GLubyte *>(context->getExtensionString().c_str());
default:
context->handleError(Error(GL_INVALID_ENUM));
@@ -1516,14 +2236,153 @@ void GL_APIENTRY GetTexParameterfv(GLenum target, GLenum pname, GLfloat* params)
Context *context = GetValidGlobalContext();
if (context)
{
- if (!context->skipValidation() &&
- !ValidateGetTexParameterfv(context, target, pname, params))
+ if (!ValidTextureTarget(context, target) && !ValidTextureExternalTarget(context, target))
{
+ context->handleError(Error(GL_INVALID_ENUM, "Invalid texture target"));
return;
}
Texture *texture = context->getTargetTexture(target);
- QueryTexParameterfv(texture, pname, params);
+
+ if (!texture)
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+
+ switch (pname)
+ {
+ case GL_TEXTURE_MAG_FILTER:
+ *params = (GLfloat)texture->getMagFilter();
+ break;
+ case GL_TEXTURE_MIN_FILTER:
+ *params = (GLfloat)texture->getMinFilter();
+ break;
+ case GL_TEXTURE_WRAP_S:
+ *params = (GLfloat)texture->getWrapS();
+ break;
+ case GL_TEXTURE_WRAP_T:
+ *params = (GLfloat)texture->getWrapT();
+ break;
+ case GL_TEXTURE_WRAP_R:
+ if (context->getClientMajorVersion() < 3)
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+ *params = (GLfloat)texture->getWrapR();
+ break;
+ case GL_TEXTURE_IMMUTABLE_FORMAT:
+ // Exposed to ES2.0 through EXT_texture_storage, no client version validation.
+ *params = (GLfloat)(texture->getImmutableFormat() ? GL_TRUE : GL_FALSE);
+ break;
+ case GL_TEXTURE_IMMUTABLE_LEVELS:
+ if (context->getClientMajorVersion() < 3)
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+ *params = (GLfloat)texture->getImmutableLevels();
+ break;
+ case GL_TEXTURE_USAGE_ANGLE:
+ *params = (GLfloat)texture->getUsage();
+ break;
+ case GL_TEXTURE_MAX_ANISOTROPY_EXT:
+ if (!context->getExtensions().textureFilterAnisotropic)
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+ *params = (GLfloat)texture->getMaxAnisotropy();
+ break;
+ case GL_TEXTURE_SWIZZLE_R:
+ if (context->getClientMajorVersion() < 3)
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+ *params = (GLfloat)texture->getSwizzleRed();
+ break;
+ case GL_TEXTURE_SWIZZLE_G:
+ if (context->getClientMajorVersion() < 3)
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+ *params = (GLfloat)texture->getSwizzleGreen();
+ break;
+ case GL_TEXTURE_SWIZZLE_B:
+ if (context->getClientMajorVersion() < 3)
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+ *params = (GLfloat)texture->getSwizzleBlue();
+ break;
+ case GL_TEXTURE_SWIZZLE_A:
+ if (context->getClientMajorVersion() < 3)
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+ *params = (GLfloat)texture->getSwizzleAlpha();
+ break;
+ case GL_TEXTURE_BASE_LEVEL:
+ if (context->getClientMajorVersion() < 3)
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+ *params = (GLfloat)texture->getBaseLevel();
+ break;
+ case GL_TEXTURE_MAX_LEVEL:
+ if (context->getClientMajorVersion() < 3)
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+ *params = (GLfloat)texture->getMaxLevel();
+ break;
+ case GL_TEXTURE_MIN_LOD:
+ if (context->getClientMajorVersion() < 3)
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+ *params = texture->getSamplerState().minLod;
+ break;
+ case GL_TEXTURE_MAX_LOD:
+ if (context->getClientMajorVersion() < 3)
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+ *params = texture->getSamplerState().maxLod;
+ break;
+ case GL_TEXTURE_COMPARE_MODE:
+ if (context->getClientMajorVersion() < 3)
+ {
+ context->handleError(
+ Error(GL_INVALID_ENUM,
+ "GL_TEXTURE_COMPARE_MODE not available in ES versions < 3.0"));
+ return;
+ }
+ *params = static_cast<GLfloat>(texture->getCompareMode());
+ break;
+ case GL_TEXTURE_COMPARE_FUNC:
+ if (context->getClientMajorVersion() < 3)
+ {
+ context->handleError(
+ Error(GL_INVALID_ENUM,
+ "GL_TEXTURE_COMPARE_FUNC not available in ES versions < 3.0"));
+ return;
+ }
+ *params = static_cast<GLfloat>(texture->getCompareFunc());
+ break;
+ default:
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
}
}
@@ -1534,14 +2393,153 @@ void GL_APIENTRY GetTexParameteriv(GLenum target, GLenum pname, GLint* params)
Context *context = GetValidGlobalContext();
if (context)
{
- if (!context->skipValidation() &&
- !ValidateGetTexParameteriv(context, target, pname, params))
+ if (!ValidTextureTarget(context, target) && !ValidTextureExternalTarget(context, target))
{
+ context->handleError(Error(GL_INVALID_ENUM, "Invalid texture target"));
return;
}
Texture *texture = context->getTargetTexture(target);
- QueryTexParameteriv(texture, pname, params);
+
+ if (!texture)
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+
+ switch (pname)
+ {
+ case GL_TEXTURE_MAG_FILTER:
+ *params = texture->getSamplerState().magFilter;
+ break;
+ case GL_TEXTURE_MIN_FILTER:
+ *params = texture->getSamplerState().minFilter;
+ break;
+ case GL_TEXTURE_WRAP_S:
+ *params = texture->getSamplerState().wrapS;
+ break;
+ case GL_TEXTURE_WRAP_T:
+ *params = texture->getSamplerState().wrapT;
+ break;
+ case GL_TEXTURE_WRAP_R:
+ if (context->getClientMajorVersion() < 3)
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+ *params = texture->getSamplerState().wrapR;
+ break;
+ case GL_TEXTURE_IMMUTABLE_FORMAT:
+ // Exposed to ES2.0 through EXT_texture_storage, no client version validation.
+ *params = texture->getImmutableFormat() ? GL_TRUE : GL_FALSE;
+ break;
+ case GL_TEXTURE_IMMUTABLE_LEVELS:
+ if (context->getClientMajorVersion() < 3)
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+ *params = static_cast<GLint>(texture->getImmutableLevels());
+ break;
+ case GL_TEXTURE_USAGE_ANGLE:
+ *params = texture->getUsage();
+ break;
+ case GL_TEXTURE_MAX_ANISOTROPY_EXT:
+ if (!context->getExtensions().textureFilterAnisotropic)
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+ *params = (GLint)texture->getMaxAnisotropy();
+ break;
+ case GL_TEXTURE_SWIZZLE_R:
+ if (context->getClientMajorVersion() < 3)
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+ *params = texture->getSwizzleRed();
+ break;
+ case GL_TEXTURE_SWIZZLE_G:
+ if (context->getClientMajorVersion() < 3)
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+ *params = texture->getSwizzleGreen();
+ break;
+ case GL_TEXTURE_SWIZZLE_B:
+ if (context->getClientMajorVersion() < 3)
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+ *params = texture->getSwizzleBlue();
+ break;
+ case GL_TEXTURE_SWIZZLE_A:
+ if (context->getClientMajorVersion() < 3)
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+ *params = texture->getSwizzleAlpha();
+ break;
+ case GL_TEXTURE_BASE_LEVEL:
+ if (context->getClientMajorVersion() < 3)
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+ *params = texture->getBaseLevel();
+ break;
+ case GL_TEXTURE_MAX_LEVEL:
+ if (context->getClientMajorVersion() < 3)
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+ *params = texture->getMaxLevel();
+ break;
+ case GL_TEXTURE_MIN_LOD:
+ if (context->getClientMajorVersion() < 3)
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+ *params = iround<GLint>(texture->getMinLod());
+ break;
+ case GL_TEXTURE_MAX_LOD:
+ if (context->getClientMajorVersion() < 3)
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+ *params = iround<GLint>(texture->getMaxLod());
+ break;
+ case GL_TEXTURE_COMPARE_MODE:
+ if (context->getClientMajorVersion() < 3)
+ {
+ context->handleError(
+ Error(GL_INVALID_ENUM,
+ "GL_TEXTURE_COMPARE_MODE not available in ES versions < 3.0"));
+ return;
+ }
+ *params = texture->getCompareMode();
+ break;
+ case GL_TEXTURE_COMPARE_FUNC:
+ if (context->getClientMajorVersion() < 3)
+ {
+ context->handleError(
+ Error(GL_INVALID_ENUM,
+ "GL_TEXTURE_COMPARE_FUNC not available in ES versions < 3.0"));
+ return;
+ }
+ *params = texture->getCompareFunc();
+ break;
+ default:
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
}
}
@@ -1621,16 +2619,32 @@ void GL_APIENTRY GetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params)
Context *context = GetValidGlobalContext();
if (context)
{
- if (!context->skipValidation() && !ValidateGetVertexAttribfv(context, index, pname, params))
+ if (index >= MAX_VERTEX_ATTRIBS)
{
+ context->handleError(Error(GL_INVALID_VALUE));
return;
}
- const VertexAttribCurrentValueData &currentValues =
- context->getGLState().getVertexAttribCurrentValue(index);
- const VertexAttribute &attrib =
- context->getGLState().getVertexArray()->getVertexAttribute(index);
- QueryVertexAttribfv(attrib, currentValues, pname, params);
+ if (!ValidateGetVertexAttribParameters(context, pname))
+ {
+ return;
+ }
+
+ if (pname == GL_CURRENT_VERTEX_ATTRIB)
+ {
+ const VertexAttribCurrentValueData &currentValueData =
+ context->getGLState().getVertexAttribCurrentValue(index);
+ for (int i = 0; i < 4; ++i)
+ {
+ params[i] = currentValueData.FloatValues[i];
+ }
+ }
+ else
+ {
+ const VertexAttribute &attribState =
+ context->getGLState().getVertexArray()->getVertexAttribute(index);
+ *params = QuerySingleVertexAttributeParameter<GLfloat>(attribState, pname);
+ }
}
}
@@ -1641,16 +2655,33 @@ void GL_APIENTRY GetVertexAttribiv(GLuint index, GLenum pname, GLint* params)
Context *context = GetValidGlobalContext();
if (context)
{
- if (!context->skipValidation() && !ValidateGetVertexAttribiv(context, index, pname, params))
+ if (index >= MAX_VERTEX_ATTRIBS)
{
+ context->handleError(Error(GL_INVALID_VALUE));
return;
}
- const VertexAttribCurrentValueData &currentValues =
- context->getGLState().getVertexAttribCurrentValue(index);
- const VertexAttribute &attrib =
- context->getGLState().getVertexArray()->getVertexAttribute(index);
- QueryVertexAttribiv(attrib, currentValues, pname, params);
+ if (!ValidateGetVertexAttribParameters(context, pname))
+ {
+ return;
+ }
+
+ if (pname == GL_CURRENT_VERTEX_ATTRIB)
+ {
+ const VertexAttribCurrentValueData &currentValueData =
+ context->getGLState().getVertexAttribCurrentValue(index);
+ for (int i = 0; i < 4; ++i)
+ {
+ float currentValue = currentValueData.FloatValues[i];
+ params[i] = iround<GLint>(currentValue);
+ }
+ }
+ else
+ {
+ const VertexAttribute &attribState =
+ context->getGLState().getVertexArray()->getVertexAttribute(index);
+ *params = QuerySingleVertexAttributeParameter<GLint>(attribState, pname);
+ }
}
}
@@ -1661,15 +2692,19 @@ void GL_APIENTRY GetVertexAttribPointerv(GLuint index, GLenum pname, GLvoid** po
Context *context = GetValidGlobalContext();
if (context)
{
- if (!context->skipValidation() &&
- !ValidateGetVertexAttribPointerv(context, index, pname, pointer))
+ if (index >= MAX_VERTEX_ATTRIBS)
{
+ context->handleError(Error(GL_INVALID_VALUE));
return;
}
- const VertexAttribute &attrib =
- context->getGLState().getVertexArray()->getVertexAttribute(index);
- QueryVertexAttribPointerv(attrib, pname, pointer);
+ if (pname != GL_VERTEX_ATTRIB_ARRAY_POINTER)
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+
+ *pointer = const_cast<GLvoid *>(context->getGLState().getVertexAttribPointer(index));
}
}
@@ -1732,8 +2767,9 @@ GLboolean GL_APIENTRY IsEnabled(GLenum cap)
Context *context = GetValidGlobalContext();
if (context)
{
- if (!context->skipValidation() && !ValidateIsEnabled(context, cap))
+ if (!ValidCap(context, cap))
{
+ context->handleError(Error(GL_INVALID_ENUM));
return GL_FALSE;
}
@@ -2288,34 +3324,56 @@ void GL_APIENTRY TexParameterf(GLenum target, GLenum pname, GLfloat param)
Context *context = GetValidGlobalContext();
if (context)
{
- if (!context->skipValidation() && !ValidateTexParameterf(context, target, pname, param))
+ if (!ValidTextureTarget(context, target) && !ValidTextureExternalTarget(context, target))
{
+ context->handleError(Error(GL_INVALID_ENUM, "Invalid texture target"));
return;
}
- Texture *texture = context->getTargetTexture(target);
- SetTexParameterf(texture, pname, param);
- }
-}
+ if (!ValidateTexParamParameters(context, target, pname, static_cast<GLint>(param)))
+ {
+ return;
+ }
-void GL_APIENTRY TexParameterfv(GLenum target, GLenum pname, const GLfloat *params)
-{
- EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, const GLfloat* params = 0x%0.8p)", target,
- pname, params);
+ Texture *texture = context->getTargetTexture(target);
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!context->skipValidation() && !ValidateTexParameterfv(context, target, pname, params))
+ if (!texture)
{
+ context->handleError(Error(GL_INVALID_ENUM));
return;
}
- Texture *texture = context->getTargetTexture(target);
- SetTexParameterfv(texture, pname, params);
+ // clang-format off
+ switch (pname)
+ {
+ case GL_TEXTURE_WRAP_S: texture->setWrapS(uiround<GLenum>(param)); break;
+ case GL_TEXTURE_WRAP_T: texture->setWrapT(uiround<GLenum>(param)); break;
+ case GL_TEXTURE_WRAP_R: texture->setWrapR(uiround<GLenum>(param)); break;
+ case GL_TEXTURE_MIN_FILTER: texture->setMinFilter(uiround<GLenum>(param)); break;
+ case GL_TEXTURE_MAG_FILTER: texture->setMagFilter(uiround<GLenum>(param)); break;
+ case GL_TEXTURE_USAGE_ANGLE: texture->setUsage(uiround<GLenum>(param)); break;
+ case GL_TEXTURE_MAX_ANISOTROPY_EXT: texture->setMaxAnisotropy(std::min(param, context->getExtensions().maxTextureAnisotropy)); break;
+ case GL_TEXTURE_COMPARE_MODE: texture->setCompareMode(uiround<GLenum>(param)); break;
+ case GL_TEXTURE_COMPARE_FUNC: texture->setCompareFunc(uiround<GLenum>(param)); break;
+ case GL_TEXTURE_SWIZZLE_R: texture->setSwizzleRed(uiround<GLenum>(param)); break;
+ case GL_TEXTURE_SWIZZLE_G: texture->setSwizzleGreen(uiround<GLenum>(param)); break;
+ case GL_TEXTURE_SWIZZLE_B: texture->setSwizzleBlue(uiround<GLenum>(param)); break;
+ case GL_TEXTURE_SWIZZLE_A: texture->setSwizzleAlpha(uiround<GLenum>(param)); break;
+ case GL_TEXTURE_BASE_LEVEL: texture->setBaseLevel(uiround<GLuint>(param)); break;
+ case GL_TEXTURE_MAX_LEVEL: texture->setMaxLevel(uiround<GLuint>(param)); break;
+ case GL_TEXTURE_MIN_LOD: texture->setMinLod(param); break;
+ case GL_TEXTURE_MAX_LOD: texture->setMaxLod(param); break;
+ default: UNREACHABLE(); break;
+ }
+ // clang-format on
}
}
+void GL_APIENTRY TexParameterfv(GLenum target, GLenum pname, const GLfloat* params)
+{
+ TexParameterf(target, pname, (GLfloat)*params);
+}
+
void GL_APIENTRY TexParameteri(GLenum target, GLenum pname, GLint param)
{
EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint param = %d)", target, pname, param);
@@ -2323,34 +3381,56 @@ void GL_APIENTRY TexParameteri(GLenum target, GLenum pname, GLint param)
Context *context = GetValidGlobalContext();
if (context)
{
- if (!context->skipValidation() && !ValidateTexParameteri(context, target, pname, param))
+ if (!ValidTextureTarget(context, target) && !ValidTextureExternalTarget(context, target))
{
+ context->handleError(Error(GL_INVALID_ENUM, "Invalid Texture target"));
return;
}
- Texture *texture = context->getTargetTexture(target);
- SetTexParameteri(texture, pname, param);
- }
-}
+ if (!ValidateTexParamParameters(context, target, pname, param))
+ {
+ return;
+ }
-void GL_APIENTRY TexParameteriv(GLenum target, GLenum pname, const GLint *params)
-{
- EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, const GLint* params = 0x%0.8p)", target,
- pname, params);
+ Texture *texture = context->getTargetTexture(target);
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!context->skipValidation() && !ValidateTexParameteriv(context, target, pname, params))
+ if (!texture)
{
+ context->handleError(Error(GL_INVALID_ENUM));
return;
}
- Texture *texture = context->getTargetTexture(target);
- SetTexParameteriv(texture, pname, params);
+ // clang-format off
+ switch (pname)
+ {
+ case GL_TEXTURE_WRAP_S: texture->setWrapS(static_cast<GLenum>(param)); break;
+ case GL_TEXTURE_WRAP_T: texture->setWrapT(static_cast<GLenum>(param)); break;
+ case GL_TEXTURE_WRAP_R: texture->setWrapR(static_cast<GLenum>(param)); break;
+ case GL_TEXTURE_MIN_FILTER: texture->setMinFilter(static_cast<GLenum>(param)); break;
+ case GL_TEXTURE_MAG_FILTER: texture->setMagFilter(static_cast<GLenum>(param)); break;
+ case GL_TEXTURE_USAGE_ANGLE: texture->setUsage(static_cast<GLenum>(param)); break;
+ case GL_TEXTURE_MAX_ANISOTROPY_EXT: texture->setMaxAnisotropy(std::min(static_cast<GLfloat>(param), context->getExtensions().maxTextureAnisotropy)); break;
+ case GL_TEXTURE_COMPARE_MODE: texture->setCompareMode(static_cast<GLenum>(param)); break;
+ case GL_TEXTURE_COMPARE_FUNC: texture->setCompareFunc(static_cast<GLenum>(param)); break;
+ case GL_TEXTURE_SWIZZLE_R: texture->setSwizzleRed(static_cast<GLenum>(param)); break;
+ case GL_TEXTURE_SWIZZLE_G: texture->setSwizzleGreen(static_cast<GLenum>(param)); break;
+ case GL_TEXTURE_SWIZZLE_B: texture->setSwizzleBlue(static_cast<GLenum>(param)); break;
+ case GL_TEXTURE_SWIZZLE_A: texture->setSwizzleAlpha(static_cast<GLenum>(param)); break;
+ case GL_TEXTURE_BASE_LEVEL: texture->setBaseLevel(static_cast<GLuint>(param)); break;
+ case GL_TEXTURE_MAX_LEVEL: texture->setMaxLevel(static_cast<GLuint>(param)); break;
+ case GL_TEXTURE_MIN_LOD: texture->setMinLod(static_cast<GLfloat>(param)); break;
+ case GL_TEXTURE_MAX_LOD: texture->setMaxLod(static_cast<GLfloat>(param)); break;
+ default: UNREACHABLE(); break;
+ }
+ // clang-format on
}
}
+void GL_APIENTRY TexParameteriv(GLenum target, GLenum pname, const GLint* params)
+{
+ TexParameteri(target, pname, *params);
+}
+
void GL_APIENTRY TexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
GLenum format, GLenum type, const GLvoid* pixels)
{
diff --git a/gfx/angle/src/libGLESv2/entry_points_gles_2_0_ext.cpp b/gfx/angle/src/libGLESv2/entry_points_gles_2_0_ext.cpp
index bf96affdb..cfd64c8f5 100755
--- a/gfx/angle/src/libGLESv2/entry_points_gles_2_0_ext.cpp
+++ b/gfx/angle/src/libGLESv2/entry_points_gles_2_0_ext.cpp
@@ -16,15 +16,10 @@
#include "libANGLE/Framebuffer.h"
#include "libANGLE/Shader.h"
#include "libANGLE/Query.h"
-#include "libANGLE/queryconversions.h"
-#include "libANGLE/queryutils.h"
-#include "libANGLE/Thread.h"
-#include "libANGLE/VertexArray.h"
#include "libANGLE/validationES.h"
#include "libANGLE/validationES2.h"
#include "libANGLE/validationES3.h"
-#include "libANGLE/validationES31.h"
#include "common/debug.h"
#include "common/utilities.h"
@@ -32,19 +27,6 @@
namespace gl
{
-namespace
-{
-
-void SetRobustLengthParam(GLsizei *length, GLsizei value)
-{
- if (length)
- {
- *length = value;
- }
-}
-
-} // anonymous namespace
-
void GL_APIENTRY GenQueriesEXT(GLsizei n, GLuint *ids)
{
EVENT("(GLsizei n = %d, GLuint* ids = 0x%0.8p)", n, ids);
@@ -188,7 +170,12 @@ void GL_APIENTRY GetQueryObjectivEXT(GLuint id, GLenum pname, GLint *params)
return;
}
- context->getQueryObjectiv(id, pname, params);
+ Error error = context->getQueryObjectiv(id, pname, params);
+ if (error.isError())
+ {
+ context->handleError(error);
+ return;
+ }
}
}
@@ -204,7 +191,12 @@ void GL_APIENTRY GetQueryObjectuivEXT(GLuint id, GLenum pname, GLuint *params)
return;
}
- context->getQueryObjectuiv(id, pname, params);
+ Error error = context->getQueryObjectuiv(id, pname, params);
+ if (error.isError())
+ {
+ context->handleError(error);
+ return;
+ }
}
}
@@ -220,7 +212,12 @@ void GL_APIENTRY GetQueryObjecti64vEXT(GLuint id, GLenum pname, GLint64 *params)
return;
}
- context->getQueryObjecti64v(id, pname, params);
+ Error error = context->getQueryObjecti64v(id, pname, params);
+ if (error.isError())
+ {
+ context->handleError(error);
+ return;
+ }
}
}
@@ -236,7 +233,12 @@ void GL_APIENTRY GetQueryObjectui64vEXT(GLuint id, GLenum pname, GLuint64 *param
return;
}
- context->getQueryObjectui64v(id, pname, params);
+ Error error = context->getQueryObjectui64v(id, pname, params);
+ if (error.isError())
+ {
+ context->handleError(error);
+ return;
+ }
}
}
@@ -991,11 +993,10 @@ ANGLE_EXPORT void GL_APIENTRY EGLImageTargetTexture2DOES(GLenum target, GLeglIma
{
EVENT("(GLenum target = 0x%X, GLeglImageOES image = 0x%0.8p)", target, image);
- egl::Thread *thread = egl::GetCurrentThread();
- Context *context = thread->getValidContext();
+ Context *context = GetValidGlobalContext();
if (context)
{
- egl::Display *display = thread->getDisplay();
+ egl::Display *display = egl::GetGlobalDisplay();
egl::Image *imageObject = reinterpret_cast<egl::Image *>(image);
if (!ValidateEGLImageTargetTexture2DOES(context, display, target, imageObject))
{
@@ -1017,11 +1018,10 @@ ANGLE_EXPORT void GL_APIENTRY EGLImageTargetRenderbufferStorageOES(GLenum target
{
EVENT("(GLenum target = 0x%X, GLeglImageOES image = 0x%0.8p)", target, image);
- egl::Thread *thread = egl::GetCurrentThread();
- Context *context = thread->getValidContext();
+ Context *context = GetValidGlobalContext();
if (context)
{
- egl::Display *display = thread->getDisplay();
+ egl::Display *display = egl::GetGlobalDisplay();
egl::Image *imageObject = reinterpret_cast<egl::Image *>(image);
if (!ValidateEGLImageTargetRenderbufferStorageOES(context, display, target, imageObject))
{
@@ -1935,1442 +1935,4 @@ ANGLE_EXPORT void GL_APIENTRY CopySubTextureCHROMIUM(GLuint sourceId,
}
}
-ANGLE_EXPORT void GL_APIENTRY CompressedCopyTextureCHROMIUM(GLuint sourceId, GLuint destId)
-{
- EVENT("(GLuint sourceId = %u, GLuint destId = %u)", sourceId, destId);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!context->skipValidation() &&
- !ValidateCompressedCopyTextureCHROMIUM(context, sourceId, destId))
- {
- return;
- }
-
- context->compressedCopyTextureCHROMIUM(sourceId, destId);
- }
-}
-
-GL_APICALL GLboolean GL_APIENTRY EnableExtensionANGLE(const GLchar *name)
-{
- EVENT("(const GLchar *name = %p)", name);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!context->skipValidation() && !ValidateEnableExtensionANGLE(context, name))
- {
- return GL_FALSE;
- }
-
- return context->enableExtension(name) ? GL_TRUE : GL_FALSE;
- }
-
- return GL_FALSE;
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetBooleanvRobustANGLE(GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLboolean *params)
-{
- EVENT(
- "(GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, GLboolean* params "
- "= 0x%0.8p)",
- pname, bufSize, length, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- GLenum nativeType;
- unsigned int numParams = 0;
- if (!ValidateRobustStateQuery(context, pname, bufSize, &nativeType, &numParams))
- {
- return;
- }
-
- if (nativeType == GL_BOOL)
- {
- context->getBooleanv(pname, params);
- }
- else
- {
- CastStateValues(context, nativeType, pname, numParams, params);
- }
-
- SetRobustLengthParam(length, numParams);
- }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetBufferParameterivRobustANGLE(GLenum target,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params)
-{
- EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint* params = 0x%0.8p)", target, pname,
- params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- GLsizei numParams = 0;
- if (!ValidateGetBufferParameterivRobustANGLE(context, target, pname, bufSize, &numParams,
- params))
- {
- return;
- }
-
- Buffer *buffer = context->getGLState().getTargetBuffer(target);
- QueryBufferParameteriv(buffer, pname, params);
- SetRobustLengthParam(length, numParams);
- }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetFloatvRobustANGLE(GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLfloat *params)
-{
- EVENT(
- "(GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, GLfloat* params = "
- "0x%0.8p)",
- pname, bufSize, length, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- GLenum nativeType;
- unsigned int numParams = 0;
- if (!ValidateRobustStateQuery(context, pname, bufSize, &nativeType, &numParams))
- {
- return;
- }
-
- if (nativeType == GL_FLOAT)
- {
- context->getFloatv(pname, params);
- }
- else
- {
- CastStateValues(context, nativeType, pname, numParams, params);
- }
-
- SetRobustLengthParam(length, numParams);
- }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetFramebufferAttachmentParameterivRobustANGLE(GLenum target,
- GLenum attachment,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params)
-{
- EVENT(
- "(GLenum target = 0x%X, GLenum attachment = 0x%X, GLenum pname = 0x%X, GLsizei bufsize = "
- "%d, GLsizei* length = 0x%0.8p, GLint* params = 0x%0.8p)",
- target, attachment, pname, bufSize, length, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- GLsizei numParams = 0;
- if (!ValidateGetFramebufferAttachmentParameterivRobustANGLE(context, target, attachment,
- pname, bufSize, &numParams))
- {
- return;
- }
-
- const Framebuffer *framebuffer = context->getGLState().getTargetFramebuffer(target);
- QueryFramebufferAttachmentParameteriv(framebuffer, attachment, pname, params);
- SetRobustLengthParam(length, numParams);
- }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetIntegervRobustANGLE(GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *data)
-{
- EVENT(
- "(GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, GLint* params = "
- "0x%0.8p)",
- pname, bufSize, length, data);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- GLenum nativeType;
- unsigned int numParams = 0;
- if (!ValidateRobustStateQuery(context, pname, bufSize, &nativeType, &numParams))
- {
- return;
- }
-
- if (nativeType == GL_INT)
- {
- context->getIntegerv(pname, data);
- }
- else
- {
- CastStateValues(context, nativeType, pname, numParams, data);
- }
- SetRobustLengthParam(length, numParams);
- }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetProgramivRobustANGLE(GLuint program,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params)
-{
- EVENT(
- "(GLuint program = %d, GLenum pname = %d, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, "
- "GLint* params = 0x%0.8p)",
- program, pname, bufSize, length, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- GLsizei numParams = 0;
- if (!ValidateGetProgramivRobustANGLE(context, program, pname, bufSize, &numParams))
- {
- return;
- }
-
- Program *programObject = context->getProgram(program);
- QueryProgramiv(programObject, pname, params);
- SetRobustLengthParam(length, numParams);
- }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetRenderbufferParameterivRobustANGLE(GLenum target,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params)
-{
- EVENT(
- "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = "
- "0x%0.8p, GLint* params = 0x%0.8p)",
- target, pname, bufSize, length, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- GLsizei numParams = 0;
- if (!ValidateGetRenderbufferParameterivRobustANGLE(context, target, pname, bufSize,
- &numParams, params))
- {
- return;
- }
-
- Renderbuffer *renderbuffer = context->getGLState().getCurrentRenderbuffer();
- QueryRenderbufferiv(renderbuffer, pname, params);
- SetRobustLengthParam(length, numParams);
- }
-}
-
-ANGLE_EXPORT void GL_APIENTRY
-GetShaderivRobustANGLE(GLuint shader, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params)
-{
- EVENT(
- "(GLuint shader = %d, GLenum pname = %d, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, "
- "GLint* params = 0x%0.8p)",
- shader, pname, bufSize, length, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- GLsizei numParams = 0;
- if (!ValidateGetShaderivRobustANGLE(context, shader, pname, bufSize, &numParams, params))
- {
- return;
- }
-
- Shader *shaderObject = context->getShader(shader);
- QueryShaderiv(shaderObject, pname, params);
- SetRobustLengthParam(length, numParams);
- }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetTexParameterfvRobustANGLE(GLenum target,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLfloat *params)
-{
- EVENT(
- "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = "
- "0x%0.8p, GLfloat* params = 0x%0.8p)",
- target, pname, bufSize, length, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- GLsizei numParams = 0;
- if (!ValidateGetTexParameterfvRobustANGLE(context, target, pname, bufSize, &numParams,
- params))
- {
- return;
- }
-
- Texture *texture = context->getTargetTexture(target);
- QueryTexParameterfv(texture, pname, params);
- SetRobustLengthParam(length, numParams);
- }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetTexParameterivRobustANGLE(GLenum target,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params)
-{
- EVENT(
- "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = "
- "0x%0.8p, GLfloat* params = 0x%0.8p)",
- target, pname, bufSize, length, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- GLsizei numParams = 0;
- if (!ValidateGetTexParameterivRobustANGLE(context, target, pname, bufSize, &numParams,
- params))
- {
- return;
- }
-
- Texture *texture = context->getTargetTexture(target);
- QueryTexParameteriv(texture, pname, params);
- SetRobustLengthParam(length, numParams);
- }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetUniformfvRobustANGLE(GLuint program,
- GLint location,
- GLsizei bufSize,
- GLsizei *length,
- GLfloat *params)
-{
- EVENT(
- "(GLuint program = %d, GLint location = %d, GLsizei bufsize = %d, GLsizei* length = "
- "0x%0.8p, GLfloat* params = 0x%0.8p)",
- program, location, bufSize, length, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- GLsizei writeLength = 0;
- if (!ValidateGetUniformfvRobustANGLE(context, program, location, bufSize, &writeLength,
- params))
- {
- return;
- }
-
- Program *programObject = context->getProgram(program);
- ASSERT(programObject);
-
- programObject->getUniformfv(location, params);
- SetRobustLengthParam(length, writeLength);
- }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetUniformivRobustANGLE(GLuint program,
- GLint location,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params)
-{
- EVENT(
- "(GLuint program = %d, GLint location = %d, GLsizei bufsize = %d, GLsizei* length = "
- "0x%0.8p, GLint* params = 0x%0.8p)",
- program, location, bufSize, length, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- GLsizei writeLength = 0;
- if (!ValidateGetUniformivRobustANGLE(context, program, location, bufSize, &writeLength,
- params))
- {
- return;
- }
-
- Program *programObject = context->getProgram(program);
- ASSERT(programObject);
-
- programObject->getUniformiv(location, params);
- SetRobustLengthParam(length, writeLength);
- }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetVertexAttribfvRobustANGLE(GLuint index,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLfloat *params)
-{
- EVENT(
- "(GLuint index = %d, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, "
- "GLfloat* params = 0x%0.8p)",
- index, pname, bufSize, length, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- GLsizei writeLength = 0;
- if (!ValidateGetVertexAttribfvRobustANGLE(context, index, pname, bufSize, &writeLength,
- params))
- {
- return;
- }
-
- const VertexAttribCurrentValueData &currentValues =
- context->getGLState().getVertexAttribCurrentValue(index);
- const VertexAttribute &attrib =
- context->getGLState().getVertexArray()->getVertexAttribute(index);
- QueryVertexAttribfv(attrib, currentValues, pname, params);
- SetRobustLengthParam(length, writeLength);
- }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetVertexAttribivRobustANGLE(GLuint index,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params)
-{
- EVENT(
- "(GLuint index = %d, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, "
- "GLint* params = 0x%0.8p)",
- index, pname, bufSize, length, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- GLsizei writeLength = 0;
- if (!ValidateGetVertexAttribivRobustANGLE(context, index, pname, bufSize, &writeLength,
- params))
- {
- return;
- }
-
- const VertexAttribCurrentValueData &currentValues =
- context->getGLState().getVertexAttribCurrentValue(index);
- const VertexAttribute &attrib =
- context->getGLState().getVertexArray()->getVertexAttribute(index);
- QueryVertexAttribiv(attrib, currentValues, pname, params);
- SetRobustLengthParam(length, writeLength);
- }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetVertexAttribPointervRobustANGLE(GLuint index,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- void **pointer)
-{
- EVENT(
- "(GLuint index = %d, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, "
- "GLvoid** pointer = 0x%0.8p)",
- index, pname, bufSize, length, pointer);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- GLsizei writeLength = 0;
- if (!ValidateGetVertexAttribPointervRobustANGLE(context, index, pname, bufSize,
- &writeLength, pointer))
- {
- return;
- }
-
- const VertexAttribute &attrib =
- context->getGLState().getVertexArray()->getVertexAttribute(index);
- QueryVertexAttribPointerv(attrib, pname, pointer);
- SetRobustLengthParam(length, writeLength);
- }
-}
-
-ANGLE_EXPORT void GL_APIENTRY ReadPixelsRobustANGLE(GLint x,
- GLint y,
- GLsizei width,
- GLsizei height,
- GLenum format,
- GLenum type,
- GLsizei bufSize,
- GLsizei *length,
- void *pixels)
-{
- EVENT(
- "(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d, "
- "GLenum format = 0x%X, GLenum type = 0x%X, GLsizei bufsize = %d, GLsizei* length = "
- "0x%0.8p, GLvoid* pixels = 0x%0.8p)",
- x, y, width, height, format, type, bufSize, length, pixels);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- GLsizei writeLength = 0;
- if (!ValidateReadPixelsRobustANGLE(context, x, y, width, height, format, type, bufSize,
- &writeLength, pixels))
- {
- return;
- }
-
- context->readPixels(x, y, width, height, format, type, pixels);
-
- SetRobustLengthParam(length, writeLength);
- }
-}
-
-ANGLE_EXPORT void GL_APIENTRY TexImage2DRobustANGLE(GLenum target,
- GLint level,
- GLint internalformat,
- GLsizei width,
- GLsizei height,
- GLint border,
- GLenum format,
- GLenum type,
- GLsizei bufSize,
- const void *pixels)
-{
- EVENT(
- "(GLenum target = 0x%X, GLint level = %d, GLint internalformat = %d, GLsizei width = %d, "
- "GLsizei height = %d, GLint border = %d, GLenum format = 0x%X, GLenum type = 0x%X, GLsizei "
- "bufSize = %d, const GLvoid* pixels = 0x%0.8p)",
- target, level, internalformat, width, height, border, format, type, bufSize, pixels);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateTexImage2DRobust(context, target, level, internalformat, width, height, border,
- format, type, bufSize, pixels))
- {
- return;
- }
-
- context->texImage2D(target, level, internalformat, width, height, border, format, type,
- pixels);
- }
-}
-
-ANGLE_EXPORT void GL_APIENTRY TexParameterfvRobustANGLE(GLenum target,
- GLenum pname,
- GLsizei bufSize,
- const GLfloat *params)
-{
- EVENT(
- "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufsize = %d, GLfloat* params = "
- "0x%0.8p)",
- target, pname, bufSize, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateTexParameterfvRobustANGLE(context, target, pname, bufSize, params))
- {
- return;
- }
-
- Texture *texture = context->getTargetTexture(target);
- SetTexParameterfv(texture, pname, params);
- }
-}
-
-ANGLE_EXPORT void GL_APIENTRY TexParameterivRobustANGLE(GLenum target,
- GLenum pname,
- GLsizei bufSize,
- const GLint *params)
-{
- EVENT(
- "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufsize = %d, GLfloat* params = "
- "0x%0.8p)",
- target, pname, bufSize, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateTexParameterivRobustANGLE(context, target, pname, bufSize, params))
- {
- return;
- }
-
- Texture *texture = context->getTargetTexture(target);
- SetTexParameteriv(texture, pname, params);
- }
-}
-
-ANGLE_EXPORT void GL_APIENTRY TexSubImage2DRobustANGLE(GLenum target,
- GLint level,
- GLint xoffset,
- GLint yoffset,
- GLsizei width,
- GLsizei height,
- GLenum format,
- GLenum type,
- GLsizei bufSize,
- const void *pixels)
-{
- EVENT(
- "(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "
- "GLsizei width = %d, GLsizei height = %d, GLenum format = 0x%X, GLenum type = 0x%X, "
- "GLsizei bufsize = %d, const GLvoid* pixels = 0x%0.8p)",
- target, level, xoffset, yoffset, width, height, format, type, bufSize, pixels);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateTexSubImage2DRobustANGLE(context, target, level, xoffset, yoffset, width,
- height, format, type, bufSize, pixels))
- {
- return;
- }
-
- context->texSubImage2D(target, level, xoffset, yoffset, width, height, format, type,
- pixels);
- }
-}
-
-ANGLE_EXPORT void GL_APIENTRY TexImage3DRobustANGLE(GLenum target,
- GLint level,
- GLint internalformat,
- GLsizei width,
- GLsizei height,
- GLsizei depth,
- GLint border,
- GLenum format,
- GLenum type,
- GLsizei bufSize,
- const void *pixels)
-{
- EVENT(
- "(GLenum target = 0x%X, GLint level = %d, GLint internalformat = %d, GLsizei width = %d, "
- "GLsizei height = %d, GLsizei depth = %d, GLint border = %d, GLenum format = 0x%X, "
- "GLenum type = 0x%X, GLsizei bufsize = %d, const GLvoid* pixels = 0x%0.8p)",
- target, level, internalformat, width, height, depth, border, format, type, bufSize, pixels);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateTexImage3DRobustANGLE(context, target, level, internalformat, width, height,
- depth, border, format, type, bufSize, pixels))
- {
- return;
- }
-
- context->texImage3D(target, level, internalformat, width, height, depth, border, format,
- type, pixels);
- }
-}
-
-ANGLE_EXPORT void GL_APIENTRY TexSubImage3DRobustANGLE(GLenum target,
- GLint level,
- GLint xoffset,
- GLint yoffset,
- GLint zoffset,
- GLsizei width,
- GLsizei height,
- GLsizei depth,
- GLenum format,
- GLenum type,
- GLsizei bufSize,
- const void *pixels)
-{
- EVENT(
- "(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "
- "GLint zoffset = %d, GLsizei width = %d, GLsizei height = %d, GLsizei depth = %d, "
- "GLenum format = 0x%X, GLenum type = 0x%X, GLsizei bufsize = %d, const GLvoid* pixels = "
- "0x%0.8p)",
- target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, bufSize,
- pixels);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateTexSubImage3DRobustANGLE(context, target, level, xoffset, yoffset, zoffset,
- width, height, depth, format, type, bufSize, pixels))
- {
- return;
- }
-
- context->texSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth,
- format, type, pixels);
- }
-}
-
-ANGLE_EXPORT void GL_APIENTRY
-GetQueryivRobustANGLE(GLenum target, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params)
-{
- EVENT(
- "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = "
- "0x%0.8p, GLint* params = 0x%0.8p)",
- target, pname, bufSize, length, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- GLsizei numParams = 0;
- if (!ValidateGetQueryivRobustANGLE(context, target, pname, bufSize, &numParams, params))
- {
- return;
- }
-
- context->getQueryiv(target, pname, params);
- SetRobustLengthParam(length, numParams);
- }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetQueryObjectuivRobustANGLE(GLuint id,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLuint *params)
-{
- EVENT(
- "(GLuint id = %u, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, "
- "GLint* params = 0x%0.8p)",
- id, pname, bufSize, length, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- GLsizei numParams = 0;
- if (!ValidateGetQueryObjectuivRobustANGLE(context, id, pname, bufSize, &numParams, params))
- {
- return;
- }
-
- context->getQueryObjectuiv(id, pname, params);
- SetRobustLengthParam(length, numParams);
- }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetBufferPointervRobustANGLE(GLenum target,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- void **params)
-{
- EVENT(
- "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = "
- "0x%0.8p, GLvoid** params = 0x%0.8p)",
- target, pname, bufSize, length, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- GLsizei numParams = 0;
- if (!ValidateGetBufferPointervRobustANGLE(context, target, pname, bufSize, &numParams,
- params))
- {
- return;
- }
-
- context->getBufferPointerv(target, pname, params);
- SetRobustLengthParam(length, numParams);
- }
-}
-
-ANGLE_EXPORT void GL_APIENTRY
-GetIntegeri_vRobustANGLE(GLenum target, GLuint index, GLsizei bufSize, GLsizei *length, GLint *data)
-{
- EVENT(
- "(GLenum target = 0x%X, GLuint index = %u, GLsizei bufsize = %d, GLsizei* length = "
- "0x%0.8p, GLint* data = 0x%0.8p)",
- target, index, bufSize, length, data);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- GLsizei numParams = 0;
- if (!ValidateGetIntegeri_vRobustANGLE(context, target, index, bufSize, &numParams, data))
- {
- return;
- }
-
- context->getIntegeri_v(target, index, data);
- SetRobustLengthParam(length, numParams);
- }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetInternalformativRobustANGLE(GLenum target,
- GLenum internalformat,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params)
-{
- EVENT(
- "(GLenum target = 0x%X, GLenum internalformat = 0x%X, GLenum pname = 0x%X, GLsizei bufSize "
- "= %d, GLsizei* length = 0x%0.8p, GLint* params = 0x%0.8p)",
- target, internalformat, pname, bufSize, length, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- GLsizei numParams = 0;
- if (!ValidateGetInternalFormativRobustANGLE(context, target, internalformat, pname, bufSize,
- &numParams, params))
- {
- return;
- }
-
- const TextureCaps &formatCaps = context->getTextureCaps().get(internalformat);
- QueryInternalFormativ(formatCaps, pname, bufSize, params);
- SetRobustLengthParam(length, numParams);
- }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetVertexAttribIivRobustANGLE(GLuint index,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params)
-{
- EVENT(
- "(GLuint index = %u, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, "
- "GLint* params = 0x%0.8p)",
- index, pname, bufSize, length, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- GLsizei writeLength = 0;
- if (!ValidateGetVertexAttribIivRobustANGLE(context, index, pname, bufSize, &writeLength,
- params))
- {
- return;
- }
-
- const VertexAttribCurrentValueData &currentValues =
- context->getGLState().getVertexAttribCurrentValue(index);
- const VertexAttribute &attrib =
- context->getGLState().getVertexArray()->getVertexAttribute(index);
- QueryVertexAttribIiv(attrib, currentValues, pname, params);
- SetRobustLengthParam(length, writeLength);
- }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetVertexAttribIuivRobustANGLE(GLuint index,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLuint *params)
-{
- EVENT(
- "(GLuint index = %u, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, "
- "GLuint* params = 0x%0.8p)",
- index, pname, bufSize, length, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- GLsizei writeLength = 0;
- if (!ValidateGetVertexAttribIuivRobustANGLE(context, index, pname, bufSize, &writeLength,
- params))
- {
- return;
- }
-
- const VertexAttribCurrentValueData &currentValues =
- context->getGLState().getVertexAttribCurrentValue(index);
- const VertexAttribute &attrib =
- context->getGLState().getVertexArray()->getVertexAttribute(index);
- QueryVertexAttribIuiv(attrib, currentValues, pname, params);
- SetRobustLengthParam(length, writeLength);
- }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetUniformuivRobustANGLE(GLuint program,
- GLint location,
- GLsizei bufSize,
- GLsizei *length,
- GLuint *params)
-{
- EVENT(
- "(GLuint program = %u, GLint location = %d, GLsizei bufsize = %d, GLsizei* length = "
- "0x%0.8p, GLuint* params = 0x%0.8p)",
- program, location, bufSize, length, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- GLsizei writeLength = 0;
- if (!ValidateGetUniformuivRobustANGLE(context, program, location, bufSize, &writeLength,
- params))
- {
- return;
- }
-
- Program *programObject = context->getProgram(program);
- ASSERT(programObject);
-
- programObject->getUniformuiv(location, params);
- SetRobustLengthParam(length, writeLength);
- }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetActiveUniformBlockivRobustANGLE(GLuint program,
- GLuint uniformBlockIndex,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params)
-{
- EVENT(
- "(GLuint program = %u, GLuint uniformBlockIndex = %u, GLenum pname = 0x%X, GLsizei bufsize "
- "= %d, GLsizei* length = 0x%0.8p, GLint* params = 0x%0.8p)",
- program, uniformBlockIndex, pname, bufSize, length, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- GLsizei writeLength = 0;
- if (!ValidateGetActiveUniformBlockivRobustANGLE(context, program, uniformBlockIndex, pname,
- bufSize, &writeLength, params))
- {
- return;
- }
-
- const Program *programObject = context->getProgram(program);
- QueryActiveUniformBlockiv(programObject, uniformBlockIndex, pname, params);
- SetRobustLengthParam(length, writeLength);
- }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetInteger64vRobustANGLE(GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint64 *data)
-{
- EVENT(
- "(GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, GLint64* params = "
- "0x%0.8p)",
- pname, bufSize, length, data);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- GLenum nativeType;
- unsigned int numParams = 0;
- if (!ValidateRobustStateQuery(context, pname, bufSize, &nativeType, &numParams))
- {
- return;
- }
-
- if (nativeType == GL_INT_64_ANGLEX)
- {
- context->getInteger64v(pname, data);
- }
- else
- {
- CastStateValues(context, nativeType, pname, numParams, data);
- }
- SetRobustLengthParam(length, numParams);
- }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetInteger64i_vRobustANGLE(GLenum target,
- GLuint index,
- GLsizei bufSize,
- GLsizei *length,
- GLint64 *data)
-{
- EVENT(
- "(GLenum target = 0x%X, GLuint index = %u, GLsizei bufsize = %d, GLsizei* length = "
- "0x%0.8p, GLint64* data = 0x%0.8p)",
- target, index, bufSize, length, data);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- GLsizei numParams = 0;
- if (!ValidateGetInteger64i_vRobustANGLE(context, target, index, bufSize, &numParams, data))
- {
- return;
- }
-
- context->getInteger64i_v(target, index, data);
- SetRobustLengthParam(length, numParams);
- }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetBufferParameteri64vRobustANGLE(GLenum target,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint64 *params)
-{
- EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint64* params = 0x%0.8p)", target, pname,
- bufSize, length, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- GLsizei numParams = 0;
- if (!ValidateGetBufferParameteri64vRobustANGLE(context, target, pname, bufSize, &numParams,
- params))
- {
- return;
- }
-
- Buffer *buffer = context->getGLState().getTargetBuffer(target);
- QueryBufferParameteri64v(buffer, pname, params);
- SetRobustLengthParam(length, numParams);
- }
-}
-
-ANGLE_EXPORT void GL_APIENTRY SamplerParameterivRobustANGLE(GLuint sampler,
- GLenum pname,
- GLsizei bufSize,
- const GLint *param)
-{
- EVENT(
- "(GLuint sampler = %u, GLenum pname = 0x%X, GLsizei bufsize = %d, const GLint* params = "
- "0x%0.8p)",
- sampler, pname, bufSize, param);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateSamplerParameterivRobustANGLE(context, sampler, pname, bufSize, param))
- {
- return;
- }
-
- context->samplerParameteriv(sampler, pname, param);
- }
-}
-
-ANGLE_EXPORT void GL_APIENTRY SamplerParameterfvRobustANGLE(GLuint sampler,
- GLenum pname,
- GLsizei bufSize,
- const GLfloat *param)
-{
- EVENT(
- "(GLuint sampler = %u, GLenum pname = 0x%X, GLsizei bufsize = %d, const GLfloat* params = "
- "0x%0.8p)",
- sampler, pname, bufSize, param);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateSamplerParameterfvRobustANGLE(context, sampler, pname, bufSize, param))
- {
- return;
- }
-
- context->samplerParameterfv(sampler, pname, param);
- }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetSamplerParameterivRobustANGLE(GLuint sampler,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params)
-{
- EVENT(
- "(GLuint sampler = %u, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = "
- "0x%0.8p, GLint* params = 0x%0.8p)",
- sampler, pname, bufSize, length, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- GLsizei numParams = 0;
- if (!ValidateGetSamplerParameterivRobustANGLE(context, sampler, pname, bufSize, &numParams,
- params))
- {
- return;
- }
-
- context->getSamplerParameteriv(sampler, pname, params);
- SetRobustLengthParam(length, numParams);
- }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetSamplerParameterfvRobustANGLE(GLuint sampler,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLfloat *params)
-{
- EVENT(
- "(GLuint sample = %ur, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = "
- "0x%0.8p, GLfloat* params = 0x%0.8p)",
- sampler, pname, bufSize, length, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- GLsizei numParams = 0;
- if (!ValidateGetSamplerParameterfvRobustANGLE(context, sampler, pname, bufSize, &numParams,
- params))
- {
- return;
- }
-
- context->getSamplerParameterfv(sampler, pname, params);
- SetRobustLengthParam(length, numParams);
- }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetFramebufferParameterivRobustANGLE(GLenum target,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params)
-{
- EVENT(
- "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = "
- "0x%0.8p, GLint* params = 0x%0.8p)",
- target, pname, bufSize, length, params);
- UNIMPLEMENTED();
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetProgramInterfaceivRobustANGLE(GLuint program,
- GLenum programInterface,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params)
-{
- EVENT(
- "(GLuint program = %u, GLenum programInterface = 0x%X, GLenum pname = 0x%X, GLsizei "
- "bufsize = %d, GLsizei* length = 0x%0.8p, GLint* params = 0x%0.8p)",
- program, programInterface, pname, bufSize, length, params);
- UNIMPLEMENTED();
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetBooleani_vRobustANGLE(GLenum target,
- GLuint index,
- GLsizei bufSize,
- GLsizei *length,
- GLboolean *data)
-{
- EVENT(
- "(GLenum target = 0x%X, GLuint index = %u, GLsizei bufsize = %d, GLsizei* length = "
- "0x%0.8p, GLboolean* data = 0x%0.8p)",
- target, index, bufSize, length, data);
- Context *context = GetValidGlobalContext();
- if (context)
- {
- GLsizei numParams = 0;
- if (!ValidateGetBooleani_vRobustANGLE(context, target, index, bufSize, &numParams, data))
- {
- return;
- }
-
- context->getBooleani_v(target, index, data);
- SetRobustLengthParam(length, numParams);
- }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetMultisamplefvRobustANGLE(GLenum pname,
- GLuint index,
- GLsizei bufSize,
- GLsizei *length,
- GLfloat *val)
-{
- EVENT(
- "(GLenum pname = 0x%X, GLuint index = %u, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, "
- "GLfloat* val = 0x%0.8p)",
- pname, index, bufSize, length, val);
- UNIMPLEMENTED();
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetTexLevelParameterivRobustANGLE(GLenum target,
- GLint level,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params)
-{
- EVENT(
- "(GLenum target = 0x%X, GLint level = %d, GLenum pname = 0x%X, GLsizei bufsize = %d, "
- "GLsizei* length = 0x%0.8p, GLint* params = 0x%0.8p)",
- target, level, pname, bufSize, length, params);
- UNIMPLEMENTED();
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetTexLevelParameterfvRobustANGLE(GLenum target,
- GLint level,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLfloat *params)
-{
- EVENT(
- "(GLenum target = 0x%X, GLint level = %d, GLenum pname = 0x%X, GLsizei bufsize = %d, "
- "GLsizei* length = 0x%0.8p, GLfloat* params = 0x%0.8p)",
- target, level, pname, bufSize, length, params);
- UNIMPLEMENTED();
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetPointervRobustANGLERobustANGLE(GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- void **params)
-{
- EVENT(
- "(GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, void **params = "
- "0x%0.8p)",
- pname, bufSize, length, params);
- UNIMPLEMENTED();
-}
-
-ANGLE_EXPORT void GL_APIENTRY ReadnPixelsRobustANGLE(GLint x,
- GLint y,
- GLsizei width,
- GLsizei height,
- GLenum format,
- GLenum type,
- GLsizei bufSize,
- GLsizei *length,
- void *data)
-{
- EVENT(
- "(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d, "
- "GLenum format = 0x%X, GLenum type = 0x%X, GLsizei bufsize = %d, GLsizei* length = "
- "0x%0.8p, GLvoid *data = 0x%0.8p)",
- x, y, width, height, format, type, bufSize, length, data);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- GLsizei writeLength = 0;
- if (!ValidateReadnPixelsRobustANGLE(context, x, y, width, height, format, type, bufSize,
- &writeLength, data))
- {
- return;
- }
-
- context->readPixels(x, y, width, height, format, type, data);
-
- SetRobustLengthParam(length, writeLength);
- }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetnUniformfvRobustANGLE(GLuint program,
- GLint location,
- GLsizei bufSize,
- GLsizei *length,
- GLfloat *params)
-{
- EVENT(
- "(GLuint program = %d, GLint location = %d, GLsizei bufsize = %d, GLsizei* length = "
- "0x%0.8p, GLfloat* params = 0x%0.8p)",
- program, location, bufSize, length, params);
- UNIMPLEMENTED();
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetnUniformivRobustANGLE(GLuint program,
- GLint location,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params)
-{
- EVENT(
- "(GLuint program = %d, GLint location = %d, GLsizei bufsize = %d, GLsizei* length = "
- "0x%0.8p, GLint* params = 0x%0.8p)",
- program, location, bufSize, length, params);
- UNIMPLEMENTED();
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetnUniformuivRobustANGLE(GLuint program,
- GLint location,
- GLsizei bufSize,
- GLsizei *length,
- GLuint *params)
-{
- EVENT(
- "(GLuint program = %u, GLint location = %d, GLsizei bufsize = %d, GLsizei* length = "
- "0x%0.8p, GLuint* params = 0x%0.8p)",
- program, location, bufSize, length, params);
- UNIMPLEMENTED();
-}
-
-ANGLE_EXPORT void GL_APIENTRY TexParameterIivRobustANGLE(GLenum target,
- GLenum pname,
- GLsizei bufSize,
- const GLint *params)
-{
- EVENT(
- "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufsize = %d, const GLint *params = "
- "0x%0.8p)",
- target, pname, bufSize, params);
- UNIMPLEMENTED();
-}
-
-ANGLE_EXPORT void GL_APIENTRY TexParameterIuivRobustANGLE(GLenum target,
- GLenum pname,
- GLsizei bufSize,
- const GLuint *params)
-{
- EVENT(
- "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufsize = %d, const GLuint *params = "
- "0x%0.8p)",
- target, pname, bufSize, params);
- UNIMPLEMENTED();
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetTexParameterIivRobustANGLE(GLenum target,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params)
-{
- EVENT(
- "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = "
- "0x%0.8p, GLint *params = 0x%0.8p)",
- target, pname, bufSize, length, params);
- UNIMPLEMENTED();
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetTexParameterIuivRobustANGLE(GLenum target,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLuint *params)
-{
- EVENT(
- "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = "
- "0x%0.8p, GLuint *params = 0x%0.8p)",
- target, pname, bufSize, length, params);
- UNIMPLEMENTED();
-}
-
-ANGLE_EXPORT void GL_APIENTRY SamplerParameterIivRobustANGLE(GLuint sampler,
- GLenum pname,
- GLsizei bufSize,
- const GLint *param)
-{
- EVENT(
- "(GLuint sampler = %d, GLenum pname = 0x%X, GLsizei bufsize = %d, const GLint *param = "
- "0x%0.8p)",
- sampler, pname, bufSize, param);
- UNIMPLEMENTED();
-}
-
-ANGLE_EXPORT void GL_APIENTRY SamplerParameterIuivRobustANGLE(GLuint sampler,
- GLenum pname,
- GLsizei bufSize,
- const GLuint *param)
-{
- EVENT(
- "(GLuint sampler = %d, GLenum pname = 0x%X, GLsizei bufsize = %d, const GLuint *param = "
- "0x%0.8p)",
- sampler, pname, bufSize, param);
- UNIMPLEMENTED();
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetSamplerParameterIivRobustANGLE(GLuint sampler,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params)
-{
- EVENT(
- "(GLuint sampler = %d, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = "
- "0x%0.8p, GLint *params = 0x%0.8p)",
- sampler, pname, bufSize, length, params);
- UNIMPLEMENTED();
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetSamplerParameterIuivRobustANGLE(GLuint sampler,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLuint *params)
-{
- EVENT(
- "(GLuint sampler = %d, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = "
- "0x%0.8p, GLuint *params = 0x%0.8p)",
- sampler, pname, bufSize, length, params);
- UNIMPLEMENTED();
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetQueryObjectivRobustANGLE(GLuint id,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params)
-{
- EVENT(
- "(GLuint id = %d, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, "
- "GLuint *params = 0x%0.8p)",
- id, pname, bufSize, length, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- GLsizei numParams = 0;
- if (!ValidateGetQueryObjectivRobustANGLE(context, id, pname, bufSize, &numParams, params))
- {
- return;
- }
-
- context->getQueryObjectiv(id, pname, params);
- SetRobustLengthParam(length, numParams);
- }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetQueryObjecti64vRobustANGLE(GLuint id,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint64 *params)
-{
- EVENT(
- "(GLuint id = %d, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, "
- "GLint64 *params = 0x%0.8p)",
- id, pname, bufSize, length, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- GLsizei numParams = 0;
- if (!ValidateGetQueryObjecti64vRobustANGLE(context, id, pname, bufSize, &numParams, params))
- {
- return;
- }
-
- context->getQueryObjecti64v(id, pname, params);
- SetRobustLengthParam(length, numParams);
- }
-}
-
-ANGLE_EXPORT void GL_APIENTRY GetQueryObjectui64vRobustANGLE(GLuint id,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLuint64 *params)
-{
- EVENT(
- "(GLuint id = %d, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, "
- "GLuint64 *params = 0x%0.8p)",
- id, pname, bufSize, length, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- GLsizei numParams = 0;
- if (!ValidateGetQueryObjectui64vRobustANGLE(context, id, pname, bufSize, &numParams,
- params))
- {
- return;
- }
-
- context->getQueryObjectui64v(id, pname, params);
- SetRobustLengthParam(length, numParams);
- }
-}
-
} // gl
diff --git a/gfx/angle/src/libGLESv2/entry_points_gles_2_0_ext.h b/gfx/angle/src/libGLESv2/entry_points_gles_2_0_ext.h
index 69d549224..86216d2a5 100755
--- a/gfx/angle/src/libGLESv2/entry_points_gles_2_0_ext.h
+++ b/gfx/angle/src/libGLESv2/entry_points_gles_2_0_ext.h
@@ -259,338 +259,6 @@ ANGLE_EXPORT void GL_APIENTRY CopySubTextureCHROMIUM(GLuint sourceId,
GLboolean unpackPremultiplyAlpha,
GLboolean unpackUnmultiplyAlpha);
-// GL_CHROMIUM_copy_compressed_texture
-ANGLE_EXPORT void GL_APIENTRY CompressedCopyTextureCHROMIUM(GLuint sourceId, GLuint destId);
-
-// GL_ANGLE_webgl_compatibility
-GL_APICALL GLboolean GL_APIENTRY EnableExtensionANGLE(const GLchar *name);
-
-// GL_ANGLE_robust_client_memory
-ANGLE_EXPORT void GL_APIENTRY GetBooleanvRobustANGLE(GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLboolean *data);
-ANGLE_EXPORT void GL_APIENTRY GetBufferParameterivRobustANGLE(GLenum target,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params);
-ANGLE_EXPORT void GL_APIENTRY GetFloatvRobustANGLE(GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLfloat *data);
-ANGLE_EXPORT void GL_APIENTRY GetFramebufferAttachmentParameterivRobustANGLE(GLenum target,
- GLenum attachment,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params);
-ANGLE_EXPORT void GL_APIENTRY GetIntegervRobustANGLE(GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *data);
-ANGLE_EXPORT void GL_APIENTRY GetProgramivRobustANGLE(GLuint program,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params);
-ANGLE_EXPORT void GL_APIENTRY GetRenderbufferParameterivRobustANGLE(GLenum target,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params);
-ANGLE_EXPORT void GL_APIENTRY GetShaderivRobustANGLE(GLuint shader,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params);
-ANGLE_EXPORT void GL_APIENTRY GetTexParameterfvRobustANGLE(GLenum target,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLfloat *params);
-ANGLE_EXPORT void GL_APIENTRY GetTexParameterivRobustANGLE(GLenum target,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params);
-ANGLE_EXPORT void GL_APIENTRY GetUniformfvRobustANGLE(GLuint program,
- GLint location,
- GLsizei bufSize,
- GLsizei *length,
- GLfloat *params);
-ANGLE_EXPORT void GL_APIENTRY GetUniformivRobustANGLE(GLuint program,
- GLint location,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params);
-ANGLE_EXPORT void GL_APIENTRY GetVertexAttribfvRobustANGLE(GLuint index,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLfloat *params);
-ANGLE_EXPORT void GL_APIENTRY GetVertexAttribivRobustANGLE(GLuint index,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params);
-ANGLE_EXPORT void GL_APIENTRY GetVertexAttribPointervRobustANGLE(GLuint index,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- void **pointer);
-ANGLE_EXPORT void GL_APIENTRY ReadPixelsRobustANGLE(GLint x,
- GLint y,
- GLsizei width,
- GLsizei height,
- GLenum format,
- GLenum type,
- GLsizei bufSize,
- GLsizei *length,
- void *pixels);
-ANGLE_EXPORT void GL_APIENTRY TexImage2DRobustANGLE(GLenum target,
- GLint level,
- GLint internalformat,
- GLsizei width,
- GLsizei height,
- GLint border,
- GLenum format,
- GLenum type,
- GLsizei bufSize,
- const void *pixels);
-ANGLE_EXPORT void GL_APIENTRY TexParameterfvRobustANGLE(GLenum target,
- GLenum pname,
- GLsizei bufSize,
- const GLfloat *params);
-ANGLE_EXPORT void GL_APIENTRY TexParameterivRobustANGLE(GLenum target,
- GLenum pname,
- GLsizei bufSize,
- const GLint *params);
-ANGLE_EXPORT void GL_APIENTRY TexSubImage2DRobustANGLE(GLenum target,
- GLint level,
- GLint xoffset,
- GLint yoffset,
- GLsizei width,
- GLsizei height,
- GLenum format,
- GLenum type,
- GLsizei bufSize,
- const void *pixels);
-
-ANGLE_EXPORT void GL_APIENTRY TexImage3DRobustANGLE(GLenum target,
- GLint level,
- GLint internalformat,
- GLsizei width,
- GLsizei height,
- GLsizei depth,
- GLint border,
- GLenum format,
- GLenum type,
- GLsizei bufSize,
- const void *pixels);
-ANGLE_EXPORT void GL_APIENTRY TexSubImage3DRobustANGLE(GLenum target,
- GLint level,
- GLint xoffset,
- GLint yoffset,
- GLint zoffset,
- GLsizei width,
- GLsizei height,
- GLsizei depth,
- GLenum format,
- GLenum type,
- GLsizei bufSize,
- const void *pixels);
-ANGLE_EXPORT void GL_APIENTRY
-GetQueryivRobustANGLE(GLenum target, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params);
-ANGLE_EXPORT void GL_APIENTRY GetQueryObjectuivRobustANGLE(GLuint id,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLuint *params);
-ANGLE_EXPORT void GL_APIENTRY GetBufferPointervRobustANGLE(GLenum target,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- void **params);
-ANGLE_EXPORT void GL_APIENTRY GetIntegeri_vRobustANGLE(GLenum target,
- GLuint index,
- GLsizei bufSize,
- GLsizei *length,
- GLint *data);
-ANGLE_EXPORT void GL_APIENTRY GetInternalformativRobustANGLE(GLenum target,
- GLenum internalformat,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params);
-ANGLE_EXPORT void GL_APIENTRY GetVertexAttribIivRobustANGLE(GLuint index,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params);
-ANGLE_EXPORT void GL_APIENTRY GetVertexAttribIuivRobustANGLE(GLuint index,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLuint *params);
-ANGLE_EXPORT void GL_APIENTRY GetUniformuivRobustANGLE(GLuint program,
- GLint location,
- GLsizei bufSize,
- GLsizei *length,
- GLuint *params);
-ANGLE_EXPORT void GL_APIENTRY GetActiveUniformBlockivRobustANGLE(GLuint program,
- GLuint uniformBlockIndex,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params);
-ANGLE_EXPORT void GL_APIENTRY GetInteger64vRobustANGLE(GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint64 *data);
-ANGLE_EXPORT void GL_APIENTRY GetInteger64i_vRobustANGLE(GLenum target,
- GLuint index,
- GLsizei bufSize,
- GLsizei *length,
- GLint64 *data);
-ANGLE_EXPORT void GL_APIENTRY GetBufferParameteri64vRobustANGLE(GLenum target,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint64 *params);
-ANGLE_EXPORT void GL_APIENTRY SamplerParameterivRobustANGLE(GLuint sampler,
- GLenum pname,
- GLsizei bufSize,
- const GLint *param);
-ANGLE_EXPORT void GL_APIENTRY SamplerParameterfvRobustANGLE(GLuint sampler,
- GLenum pname,
- GLsizei bufSize,
- const GLfloat *param);
-ANGLE_EXPORT void GL_APIENTRY GetSamplerParameterivRobustANGLE(GLuint sampler,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params);
-ANGLE_EXPORT void GL_APIENTRY GetSamplerParameterfvRobustANGLE(GLuint sampler,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLfloat *params);
-
-ANGLE_EXPORT void GL_APIENTRY GetFramebufferParameterivRobustANGLE(GLenum target,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params);
-ANGLE_EXPORT void GL_APIENTRY GetProgramInterfaceivRobustANGLE(GLuint program,
- GLenum programInterface,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params);
-ANGLE_EXPORT void GL_APIENTRY GetBooleani_vRobustANGLE(GLenum target,
- GLuint index,
- GLsizei bufSize,
- GLsizei *length,
- GLboolean *data);
-ANGLE_EXPORT void GL_APIENTRY GetMultisamplefvRobustANGLE(GLenum pname,
- GLuint index,
- GLsizei bufSize,
- GLsizei *length,
- GLfloat *val);
-ANGLE_EXPORT void GL_APIENTRY GetTexLevelParameterivRobustANGLE(GLenum target,
- GLint level,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params);
-ANGLE_EXPORT void GL_APIENTRY GetTexLevelParameterfvRobustANGLE(GLenum target,
- GLint level,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLfloat *params);
-
-ANGLE_EXPORT void GL_APIENTRY GetPointervRobustANGLERobustANGLE(GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- void **params);
-ANGLE_EXPORT void GL_APIENTRY ReadnPixelsRobustANGLE(GLint x,
- GLint y,
- GLsizei width,
- GLsizei height,
- GLenum format,
- GLenum type,
- GLsizei bufSize,
- GLsizei *length,
- void *data);
-ANGLE_EXPORT void GL_APIENTRY GetnUniformfvRobustANGLE(GLuint program,
- GLint location,
- GLsizei bufSize,
- GLsizei *length,
- GLfloat *params);
-ANGLE_EXPORT void GL_APIENTRY GetnUniformivRobustANGLE(GLuint program,
- GLint location,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params);
-ANGLE_EXPORT void GL_APIENTRY GetnUniformuivRobustANGLE(GLuint program,
- GLint location,
- GLsizei bufSize,
- GLsizei *length,
- GLuint *params);
-ANGLE_EXPORT void GL_APIENTRY TexParameterIivRobustANGLE(GLenum target,
- GLenum pname,
- GLsizei bufSize,
- const GLint *params);
-ANGLE_EXPORT void GL_APIENTRY TexParameterIuivRobustANGLE(GLenum target,
- GLenum pname,
- GLsizei bufSize,
- const GLuint *params);
-ANGLE_EXPORT void GL_APIENTRY GetTexParameterIivRobustANGLE(GLenum target,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params);
-ANGLE_EXPORT void GL_APIENTRY GetTexParameterIuivRobustANGLE(GLenum target,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLuint *params);
-ANGLE_EXPORT void GL_APIENTRY SamplerParameterIivRobustANGLE(GLuint sampler,
- GLenum pname,
- GLsizei bufSize,
- const GLint *param);
-ANGLE_EXPORT void GL_APIENTRY SamplerParameterIuivRobustANGLE(GLuint sampler,
- GLenum pname,
- GLsizei bufSize,
- const GLuint *param);
-ANGLE_EXPORT void GL_APIENTRY GetSamplerParameterIivRobustANGLE(GLuint sampler,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params);
-ANGLE_EXPORT void GL_APIENTRY GetSamplerParameterIuivRobustANGLE(GLuint sampler,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLuint *params);
-ANGLE_EXPORT void GL_APIENTRY GetQueryObjectivRobustANGLE(GLuint id,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint *params);
-ANGLE_EXPORT void GL_APIENTRY GetQueryObjecti64vRobustANGLE(GLuint id,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLint64 *params);
-ANGLE_EXPORT void GL_APIENTRY GetQueryObjectui64vRobustANGLE(GLuint id,
- GLenum pname,
- GLsizei bufSize,
- GLsizei *length,
- GLuint64 *params);
-
} // namespace gl
#endif // LIBGLESV2_ENTRYPOINTGLES20EXT_H_
diff --git a/gfx/angle/src/libGLESv2/entry_points_gles_3_0.cpp b/gfx/angle/src/libGLESv2/entry_points_gles_3_0.cpp
index b0b485e36..dabb33452 100755
--- a/gfx/angle/src/libGLESv2/entry_points_gles_3_0.cpp
+++ b/gfx/angle/src/libGLESv2/entry_points_gles_3_0.cpp
@@ -22,7 +22,6 @@
#include "libANGLE/validationES.h"
#include "libANGLE/validationES3.h"
#include "libANGLE/queryconversions.h"
-#include "libANGLE/queryutils.h"
#include "common/debug.h"
@@ -310,7 +309,12 @@ void GL_APIENTRY GetQueryObjectuiv(GLuint id, GLenum pname, GLuint* params)
return;
}
- context->getQueryObjectuiv(id, pname, params);
+ Error error = context->getQueryObjectuiv(id, pname, params);
+ if (error.isError())
+ {
+ context->handleError(error);
+ return;
+ }
}
}
@@ -755,13 +759,6 @@ void GL_APIENTRY BindBufferRange(GLenum target, GLuint index, GLuint buffer, GLi
return;
}
- if (!context->getGLState().isBindGeneratesResourceEnabled() &&
- !context->isBufferGenerated(buffer))
- {
- context->handleError(Error(GL_INVALID_OPERATION, "Buffer was not generated"));
- return;
- }
-
switch (target)
{
case GL_TRANSFORM_FEEDBACK_BUFFER:
@@ -844,13 +841,6 @@ void GL_APIENTRY BindBufferBase(GLenum target, GLuint index, GLuint buffer)
return;
}
- if (!context->getGLState().isBindGeneratesResourceEnabled() &&
- !context->isBufferGenerated(buffer))
- {
- context->handleError(Error(GL_INVALID_OPERATION, "Buffer was not generated"));
- return;
- }
-
switch (target)
{
case GL_TRANSFORM_FEEDBACK_BUFFER:
@@ -1033,17 +1023,38 @@ void GL_APIENTRY GetVertexAttribIiv(GLuint index, GLenum pname, GLint* params)
Context *context = GetValidGlobalContext();
if (context)
{
- if (!context->skipValidation() &&
- !ValidateGetVertexAttribIiv(context, index, pname, params))
+ if (context->getClientMajorVersion() < 3)
{
+ context->handleError(Error(GL_INVALID_OPERATION));
return;
}
- const VertexAttribCurrentValueData &currentValues =
- context->getGLState().getVertexAttribCurrentValue(index);
- const VertexAttribute &attrib =
- context->getGLState().getVertexArray()->getVertexAttribute(index);
- QueryVertexAttribIiv(attrib, currentValues, pname, params);
+ if (index >= MAX_VERTEX_ATTRIBS)
+ {
+ context->handleError(Error(GL_INVALID_VALUE));
+ return;
+ }
+
+ if (!ValidateGetVertexAttribParameters(context, pname))
+ {
+ return;
+ }
+
+ if (pname == GL_CURRENT_VERTEX_ATTRIB)
+ {
+ const VertexAttribCurrentValueData &currentValueData =
+ context->getGLState().getVertexAttribCurrentValue(index);
+ for (int i = 0; i < 4; ++i)
+ {
+ params[i] = currentValueData.IntValues[i];
+ }
+ }
+ else
+ {
+ const VertexAttribute &attribState =
+ context->getGLState().getVertexArray()->getVertexAttribute(index);
+ *params = QuerySingleVertexAttributeParameter<GLint>(attribState, pname);
+ }
}
}
@@ -1055,17 +1066,38 @@ void GL_APIENTRY GetVertexAttribIuiv(GLuint index, GLenum pname, GLuint* params)
Context *context = GetValidGlobalContext();
if (context)
{
- if (!context->skipValidation() &&
- !ValidateGetVertexAttribIuiv(context, index, pname, params))
+ if (context->getClientMajorVersion() < 3)
{
+ context->handleError(Error(GL_INVALID_OPERATION));
return;
}
- const VertexAttribCurrentValueData &currentValues =
- context->getGLState().getVertexAttribCurrentValue(index);
- const VertexAttribute &attrib =
- context->getGLState().getVertexArray()->getVertexAttribute(index);
- QueryVertexAttribIuiv(attrib, currentValues, pname, params);
+ if (index >= MAX_VERTEX_ATTRIBS)
+ {
+ context->handleError(Error(GL_INVALID_VALUE));
+ return;
+ }
+
+ if (!ValidateGetVertexAttribParameters(context, pname))
+ {
+ return;
+ }
+
+ if (pname == GL_CURRENT_VERTEX_ATTRIB)
+ {
+ const VertexAttribCurrentValueData &currentValueData =
+ context->getGLState().getVertexAttribCurrentValue(index);
+ for (int i = 0; i < 4; ++i)
+ {
+ params[i] = currentValueData.UnsignedIntValues[i];
+ }
+ }
+ else
+ {
+ const VertexAttribute &attribState =
+ context->getGLState().getVertexArray()->getVertexAttribute(index);
+ *params = QuerySingleVertexAttributeParameter<GLuint>(attribState, pname);
+ }
}
}
@@ -1409,7 +1441,7 @@ const GLubyte *GL_APIENTRY GetStringi(GLenum name, GLuint index)
return NULL;
}
- return reinterpret_cast<const GLubyte *>(context->getExtensionString(index));
+ return reinterpret_cast<const GLubyte*>(context->getExtensionString(index).c_str());
}
return NULL;
@@ -1423,14 +1455,58 @@ void GL_APIENTRY CopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintp
Context *context = GetValidGlobalContext();
if (context)
{
- if (!context->skipValidation() &&
- !ValidateCopyBufferSubData(context, readTarget, writeTarget, readOffset, writeOffset,
- size))
+ if (context->getClientMajorVersion() < 3)
+ {
+ context->handleError(Error(GL_INVALID_OPERATION));
+ return;
+ }
+
+ if (!ValidBufferTarget(context, readTarget) || !ValidBufferTarget(context, writeTarget))
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+
+ Buffer *readBuffer = context->getGLState().getTargetBuffer(readTarget);
+ Buffer *writeBuffer = context->getGLState().getTargetBuffer(writeTarget);
+
+ if (!readBuffer || !writeBuffer)
+ {
+ context->handleError(Error(GL_INVALID_OPERATION));
+ return;
+ }
+
+ // Verify that readBuffer and writeBuffer are not currently mapped
+ if (readBuffer->isMapped() || writeBuffer->isMapped())
+ {
+ context->handleError(Error(GL_INVALID_OPERATION));
+ return;
+ }
+
+ if (readOffset < 0 || writeOffset < 0 || size < 0 ||
+ static_cast<unsigned int>(readOffset + size) > readBuffer->getSize() ||
+ static_cast<unsigned int>(writeOffset + size) > writeBuffer->getSize())
+ {
+ context->handleError(Error(GL_INVALID_VALUE));
+ return;
+ }
+
+ if (readBuffer == writeBuffer && std::abs(readOffset - writeOffset) < size)
{
+ context->handleError(Error(GL_INVALID_VALUE));
return;
}
- context->copyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size);
+ // if size is zero, the copy is a successful no-op
+ if (size > 0)
+ {
+ Error error = writeBuffer->copyBufferSubData(readBuffer, readOffset, writeOffset, size);
+ if (error.isError())
+ {
+ context->handleError(error);
+ return;
+ }
+ }
}
}
@@ -1580,14 +1656,43 @@ void GL_APIENTRY GetActiveUniformBlockiv(GLuint program, GLuint uniformBlockInde
Context *context = GetValidGlobalContext();
if (context)
{
- if (!context->skipValidation() &&
- !ValidateGetActiveUniformBlockiv(context, program, uniformBlockIndex, pname, params))
+ if (context->getClientMajorVersion() < 3)
{
+ context->handleError(Error(GL_INVALID_OPERATION));
return;
}
+ Program *programObject = GetValidProgram(context, program);
+
+ if (!programObject)
+ {
+ return;
+ }
+
+ if (uniformBlockIndex >= programObject->getActiveUniformBlockCount())
+ {
+ context->handleError(Error(GL_INVALID_VALUE));
+ return;
+ }
+
+ switch (pname)
+ {
+ case GL_UNIFORM_BLOCK_BINDING:
+ *params = static_cast<GLint>(programObject->getUniformBlockBinding(uniformBlockIndex));
+ break;
+
+ case GL_UNIFORM_BLOCK_DATA_SIZE:
+ case GL_UNIFORM_BLOCK_NAME_LENGTH:
+ case GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS:
+ case GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES:
+ case GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER:
+ case GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER:
+ programObject->getActiveUniformBlockiv(uniformBlockIndex, pname, params);
+ break;
- const Program *programObject = context->getProgram(program);
- QueryActiveUniformBlockiv(programObject, uniformBlockIndex, pname, params);
+ default:
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
}
}
@@ -1994,14 +2099,55 @@ void GL_APIENTRY GetBufferParameteri64v(GLenum target, GLenum pname, GLint64* pa
Context *context = GetValidGlobalContext();
if (context)
{
- if (!context->skipValidation() &&
- !ValidateGetBufferParameteri64v(context, target, pname, params))
+ if (context->getClientMajorVersion() < 3)
+ {
+ context->handleError(Error(GL_INVALID_OPERATION));
+ return;
+ }
+
+ if (!ValidBufferTarget(context, target))
{
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+
+ if (!ValidBufferParameter(context, pname))
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
return;
}
Buffer *buffer = context->getGLState().getTargetBuffer(target);
- QueryBufferParameteri64v(buffer, pname, params);
+
+ if (!buffer)
+ {
+ // A null buffer means that "0" is bound to the requested buffer target
+ context->handleError(Error(GL_INVALID_OPERATION));
+ return;
+ }
+
+ switch (pname)
+ {
+ case GL_BUFFER_USAGE:
+ *params = static_cast<GLint64>(buffer->getUsage());
+ break;
+ case GL_BUFFER_SIZE:
+ *params = buffer->getSize();
+ break;
+ case GL_BUFFER_ACCESS_FLAGS:
+ *params = static_cast<GLint64>(buffer->getAccessFlags());
+ break;
+ case GL_BUFFER_MAPPED:
+ *params = static_cast<GLint64>(buffer->isMapped());
+ break;
+ case GL_BUFFER_MAP_OFFSET:
+ *params = buffer->getMapOffset();
+ break;
+ case GL_BUFFER_MAP_LENGTH:
+ *params = buffer->getMapLength();
+ break;
+ default: UNREACHABLE(); break;
+ }
}
}
@@ -2110,20 +2256,7 @@ void GL_APIENTRY SamplerParameteri(GLuint sampler, GLenum pname, GLint param)
void GL_APIENTRY SamplerParameteriv(GLuint sampler, GLenum pname, const GLint* param)
{
- EVENT("(GLuint sampler = %u, GLenum pname = 0x%X, const GLint* params = 0x%0.8p)", sampler,
- pname, param);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!context->skipValidation() &&
- !ValidateSamplerParameteriv(context, sampler, pname, param))
- {
- return;
- }
-
- context->samplerParameteriv(sampler, pname, param);
- }
+ SamplerParameteri(sampler, pname, *param);
}
void GL_APIENTRY SamplerParameterf(GLuint sampler, GLenum pname, GLfloat param)
@@ -2145,37 +2278,34 @@ void GL_APIENTRY SamplerParameterf(GLuint sampler, GLenum pname, GLfloat param)
void GL_APIENTRY SamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat* param)
{
- EVENT("(GLuint sampler = %u, GLenum pname = 0x%X, const GLfloat* params = 0x%0.8p)", sampler,
- pname, param);
+ SamplerParameterf(sampler, pname, *param);
+}
+
+void GL_APIENTRY GetSamplerParameteriv(GLuint sampler, GLenum pname, GLint* params)
+{
+ EVENT("(GLuint sampler = %u, GLenum pname = 0x%X, GLint* params = 0x%0.8p)", sampler, pname, params);
Context *context = GetValidGlobalContext();
if (context)
{
- if (!context->skipValidation() &&
- !ValidateSamplerParameterfv(context, sampler, pname, param))
+ if (context->getClientMajorVersion() < 3)
{
+ context->handleError(Error(GL_INVALID_OPERATION));
return;
}
- context->samplerParameterfv(sampler, pname, param);
- }
-}
-
-void GL_APIENTRY GetSamplerParameteriv(GLuint sampler, GLenum pname, GLint *params)
-{
- EVENT("(GLuint sampler = %u, GLenum pname = 0x%X, GLint* params = 0x%0.8p)", sampler, pname,
- params);
+ if (!ValidateSamplerObjectParameter(context, pname))
+ {
+ return;
+ }
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!context->skipValidation() &&
- !ValidateGetSamplerParameteriv(context, sampler, pname, params))
+ if (!context->isSampler(sampler))
{
+ context->handleError(Error(GL_INVALID_OPERATION));
return;
}
- context->getSamplerParameteriv(sampler, pname, params);
+ *params = context->getSamplerParameteri(sampler, pname);
}
}
@@ -2186,13 +2316,24 @@ void GL_APIENTRY GetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat* pa
Context *context = GetValidGlobalContext();
if (context)
{
- if (!context->skipValidation() &&
- !ValidateGetSamplerParameterfv(context, sampler, pname, params))
+ if (context->getClientMajorVersion() < 3)
{
+ context->handleError(Error(GL_INVALID_OPERATION));
return;
}
- context->getSamplerParameterfv(sampler, pname, params);
+ if (!ValidateSamplerObjectParameter(context, pname))
+ {
+ return;
+ }
+
+ if (!context->isSampler(sampler))
+ {
+ context->handleError(Error(GL_INVALID_OPERATION));
+ return;
+ }
+
+ *params = context->getSamplerParameterf(sampler, pname);
}
}
@@ -2561,14 +2702,55 @@ void GL_APIENTRY GetInternalformativ(GLenum target, GLenum internalformat, GLenu
Context *context = GetValidGlobalContext();
if (context)
{
- if (!context->skipValidation() &&
- !ValidateGetInternalFormativ(context, target, internalformat, pname, bufSize, params))
+ if (context->getClientMajorVersion() < 3)
{
+ context->handleError(Error(GL_INVALID_OPERATION));
return;
}
const TextureCaps &formatCaps = context->getTextureCaps().get(internalformat);
- QueryInternalFormativ(formatCaps, pname, bufSize, params);
+ if (!formatCaps.renderable)
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+
+ if (target != GL_RENDERBUFFER)
+ {
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
+
+ if (bufSize < 0)
+ {
+ context->handleError(Error(GL_INVALID_VALUE));
+ return;
+ }
+
+ switch (pname)
+ {
+ case GL_NUM_SAMPLE_COUNTS:
+ if (bufSize != 0)
+ {
+ *params = static_cast<GLint>(formatCaps.sampleCounts.size());
+ }
+ break;
+
+ case GL_SAMPLES:
+ {
+ size_t returnCount = std::min<size_t>(bufSize, formatCaps.sampleCounts.size());
+ auto sampleReverseIt = formatCaps.sampleCounts.rbegin();
+ for (size_t sampleIndex = 0; sampleIndex < returnCount; ++sampleIndex)
+ {
+ params[sampleIndex] = *sampleReverseIt++;;
+ }
+ }
+ break;
+
+ default:
+ context->handleError(Error(GL_INVALID_ENUM));
+ return;
+ }
}
}
diff --git a/gfx/angle/src/libGLESv2/global_state.cpp b/gfx/angle/src/libGLESv2/global_state.cpp
index bc776b1f7..fa681bde1 100755
--- a/gfx/angle/src/libGLESv2/global_state.cpp
+++ b/gfx/angle/src/libGLESv2/global_state.cpp
@@ -8,141 +8,229 @@
#include "libGLESv2/global_state.h"
+#include "libANGLE/Context.h"
+#include "libANGLE/Error.h"
+
#include "common/debug.h"
#include "common/platform.h"
#include "common/tls.h"
-#include "libANGLE/Thread.h"
-
-namespace gl
+namespace
{
-Context *GetGlobalContext()
+static TLSIndex currentTLS = TLS_INVALID_INDEX;
+
+struct Current
+{
+ EGLint error;
+ EGLenum API;
+ egl::Display *display;
+ egl::Surface *drawSurface;
+ egl::Surface *readSurface;
+ gl::Context *context;
+};
+
+Current *AllocateCurrent()
{
- egl::Thread *thread = egl::GetCurrentThread();
- return thread->getContext();
+ ASSERT(currentTLS != TLS_INVALID_INDEX);
+ if (currentTLS == TLS_INVALID_INDEX)
+ {
+ return NULL;
+ }
+
+ Current *current = new Current();
+ current->error = EGL_SUCCESS;
+ current->API = EGL_OPENGL_ES_API;
+ current->display = reinterpret_cast<egl::Display*>(EGL_NO_DISPLAY);
+ current->drawSurface = reinterpret_cast<egl::Surface*>(EGL_NO_SURFACE);
+ current->readSurface = reinterpret_cast<egl::Surface*>(EGL_NO_SURFACE);
+ current->context = reinterpret_cast<gl::Context*>(EGL_NO_CONTEXT);
+
+ if (!SetTLSValue(currentTLS, current))
+ {
+ ERR("Could not set thread local storage.");
+ return NULL;
+ }
+
+ return current;
}
-Context *GetValidGlobalContext()
+Current *GetCurrentData()
{
- egl::Thread *thread = egl::GetCurrentThread();
- return thread->getValidContext();
+ // Create a TLS index if one has not been created for this DLL
+ if (currentTLS == TLS_INVALID_INDEX)
+ {
+ currentTLS = CreateTLSIndex();
+ }
+
+ Current *current = reinterpret_cast<Current*>(GetTLSValue(currentTLS));
+
+ // ANGLE issue 488: when the dll is loaded after thread initialization,
+ // thread local storage (current) might not exist yet.
+ return (current ? current : AllocateCurrent());
}
-} // namespace gl
+#ifdef ANGLE_PLATFORM_WINDOWS
-namespace egl
+void DeallocateCurrent()
{
+ Current *current = reinterpret_cast<Current*>(GetTLSValue(currentTLS));
+ SafeDelete(current);
+ SetTLSValue(currentTLS, NULL);
+}
-namespace
+extern "C" BOOL WINAPI DllMain(HINSTANCE, DWORD reason, LPVOID)
{
+ switch (reason)
+ {
+ case DLL_PROCESS_ATTACH:
+ currentTLS = CreateTLSIndex();
+ if (currentTLS == TLS_INVALID_INDEX)
+ {
+ return FALSE;
+ }
+ AllocateCurrent();
+ break;
-static TLSIndex threadTLS = TLS_INVALID_INDEX;
+ case DLL_THREAD_ATTACH:
+ AllocateCurrent();
+ break;
-Thread *AllocateCurrentThread()
-{
- ASSERT(threadTLS != TLS_INVALID_INDEX);
- if (threadTLS == TLS_INVALID_INDEX)
- {
- return nullptr;
- }
+ case DLL_THREAD_DETACH:
+ DeallocateCurrent();
+ break;
- Thread *thread = new Thread();
- if (!SetTLSValue(threadTLS, thread))
- {
- ERR("Could not set thread local storage.");
- return nullptr;
+ case DLL_PROCESS_DETACH:
+ DeallocateCurrent();
+ if (currentTLS != TLS_INVALID_INDEX)
+ {
+ DestroyTLSIndex(currentTLS);
+ currentTLS = TLS_INVALID_INDEX;
+ }
+ break;
}
- return thread;
+ return TRUE;
}
+#endif
-} // anonymous namespace
+}
-Thread *GetCurrentThread()
+namespace gl
{
- // Create a TLS index if one has not been created for this DLL
- if (threadTLS == TLS_INVALID_INDEX)
+
+Context *GetGlobalContext()
+{
+ Current *current = GetCurrentData();
+
+ return current->context;
+}
+
+Context *GetValidGlobalContext()
+{
+ gl::Context *context = GetGlobalContext();
+ if (context)
{
- threadTLS = CreateTLSIndex();
+ if (context->isContextLost())
+ {
+ context->handleError(gl::Error(GL_OUT_OF_MEMORY, "Context has been lost."));
+ return nullptr;
+ }
+ else
+ {
+ return context;
+ }
}
+ return nullptr;
+}
- Thread *current = static_cast<Thread *>(GetTLSValue(threadTLS));
+}
- // ANGLE issue 488: when the dll is loaded after thread initialization,
- // thread local storage (current) might not exist yet.
- return (current ? current : AllocateCurrentThread());
+namespace egl
+{
+
+void SetGlobalError(const Error &error)
+{
+ Current *current = GetCurrentData();
+
+ current->error = error.getCode();
}
-} // namespace egl
+EGLint GetGlobalError()
+{
+ Current *current = GetCurrentData();
-#ifdef ANGLE_PLATFORM_WINDOWS
-namespace egl
+ return current->error;
+}
+
+EGLenum GetGlobalAPI()
{
+ Current *current = GetCurrentData();
-namespace
+ return current->API;
+}
+
+void SetGlobalAPI(EGLenum API)
{
+ Current *current = GetCurrentData();
-bool DeallocateCurrentThread()
+ current->API = API;
+}
+
+void SetGlobalDisplay(Display *dpy)
{
- Thread *thread = static_cast<Thread *>(GetTLSValue(threadTLS));
- SafeDelete(thread);
- return SetTLSValue(threadTLS, nullptr);
+ Current *current = GetCurrentData();
+
+ current->display = dpy;
}
-bool InitializeProcess()
+Display *GetGlobalDisplay()
{
- threadTLS = CreateTLSIndex();
- if (threadTLS == TLS_INVALID_INDEX)
- {
- return false;
- }
+ Current *current = GetCurrentData();
- return AllocateCurrentThread() != nullptr;
+ return current->display;
}
-bool TerminateProcess()
+void SetGlobalDrawSurface(Surface *surface)
{
- if (!DeallocateCurrentThread())
- {
- return false;
- }
+ Current *current = GetCurrentData();
- if (threadTLS != TLS_INVALID_INDEX)
- {
- TLSIndex tlsCopy = threadTLS;
- threadTLS = TLS_INVALID_INDEX;
+ current->drawSurface = surface;
+}
- if (!DestroyTLSIndex(tlsCopy))
- {
- return false;
- }
- }
+Surface *GetGlobalDrawSurface()
+{
+ Current *current = GetCurrentData();
+
+ return current->drawSurface;
+}
- return true;
+void SetGlobalReadSurface(Surface *surface)
+{
+ Current *current = GetCurrentData();
+
+ current->readSurface = surface;
}
-} // anonymous namespace
+Surface *GetGlobalReadSurface()
+{
+ Current *current = GetCurrentData();
-} // namespace egl
+ return current->readSurface;
+}
-extern "C" BOOL WINAPI DllMain(HINSTANCE, DWORD reason, LPVOID)
+void SetGlobalContext(gl::Context *context)
{
- switch (reason)
- {
- case DLL_PROCESS_ATTACH:
- return static_cast<BOOL>(egl::InitializeProcess());
+ Current *current = GetCurrentData();
- case DLL_THREAD_ATTACH:
- return static_cast<BOOL>(egl::AllocateCurrentThread() != nullptr);
+ current->context = context;
+}
- case DLL_THREAD_DETACH:
- return static_cast<BOOL>(egl::DeallocateCurrentThread());
+gl::Context *GetGlobalContext()
+{
+ Current *current = GetCurrentData();
- case DLL_PROCESS_DETACH:
- return static_cast<BOOL>(egl::TerminateProcess());
- }
+ return current->context;
+}
- return TRUE;
}
-#endif // ANGLE_PLATFORM_WINDOWS
diff --git a/gfx/angle/src/libGLESv2/global_state.h b/gfx/angle/src/libGLESv2/global_state.h
index 3e3740c90..db202539c 100755
--- a/gfx/angle/src/libGLESv2/global_state.h
+++ b/gfx/angle/src/libGLESv2/global_state.h
@@ -9,6 +9,8 @@
#ifndef LIBGLESV2_GLOBALSTATE_H_
#define LIBGLESV2_GLOBALSTATE_H_
+#include <EGL/egl.h>
+
namespace gl
{
class Context;
@@ -16,14 +18,32 @@ class Context;
Context *GetGlobalContext();
Context *GetValidGlobalContext();
-} // namespace gl
+}
namespace egl
{
-class Thread;
+class Error;
+class Display;
+class Surface;
+
+void SetGlobalError(const Error &error);
+EGLint GetGlobalError();
+
+void SetGlobalAPI(EGLenum API);
+EGLenum GetGlobalAPI();
+
+void SetGlobalDisplay(Display *dpy);
+Display *GetGlobalDisplay();
+
+void SetGlobalDrawSurface(Surface *surface);
+Surface *GetGlobalDrawSurface();
+
+void SetGlobalReadSurface(Surface *surface);
+Surface *GetGlobalReadSurface();
-Thread *GetCurrentThread();
+void SetGlobalContext(gl::Context *context);
+gl::Context *GetGlobalContext();
-} // namespace egl
+}
#endif // LIBGLESV2_GLOBALSTATE_H_
diff --git a/gfx/angle/src/libGLESv2/moz.build b/gfx/angle/src/libGLESv2/moz.build
index 08c60c213..1d40b3b67 100755
--- a/gfx/angle/src/libGLESv2/moz.build
+++ b/gfx/angle/src/libGLESv2/moz.build
@@ -39,6 +39,9 @@ if CONFIG['GNU_CXX']:
'-Wno-shadow-local',
]
+if CONFIG['MOZ_DIRECTX_SDK_PATH'] and not CONFIG['MOZ_HAS_WINSDK_WITH_D3D']:
+ LOCAL_INCLUDES += ['%' + '%s/include/' % CONFIG['MOZ_DIRECTX_SDK_PATH']]
+
DEFINES['_CRT_SECURE_NO_DEPRECATE'] = True
DEFINES['_HAS_EXCEPTIONS'] = 0
@@ -70,6 +73,11 @@ DEFINES['ANGLE_ENABLE_KEYEDMUTEX'] = "1"
if CONFIG['MOZ_HAS_WINSDK_WITH_D3D']:
OS_LIBS += [ 'd3d9', 'dxguid' ]
+else:
+ EXTRA_DSO_LDOPTS += [
+ '\'%s/lib/%s/d3d9.lib\'' % (CONFIG['MOZ_DIRECTX_SDK_PATH'], CONFIG['MOZ_D3D_CPU_SUFFIX']),
+ '\'%s/lib/%s/dxguid.lib\'' % (CONFIG['MOZ_DIRECTX_SDK_PATH'], CONFIG['MOZ_D3D_CPU_SUFFIX']),
+ ]
GeckoSharedLibrary('libGLESv2', linkage=None)
diff --git a/gfx/angle/src/tests/BUILD.gn b/gfx/angle/src/tests/BUILD.gn
index cd6c60d82..d4899da2c 100755
--- a/gfx/angle/src/tests/BUILD.gn
+++ b/gfx/angle/src/tests/BUILD.gn
@@ -4,7 +4,7 @@
import("//testing/test.gni")
import("//build/config/chromecast_build.gni")
-import("//third_party/angle/gni/angle.gni")
+import("//third_party/angle/build/angle_common.gni")
unittests_gypi = exec_script("//build/gypi_to_gn.py",
[
@@ -37,7 +37,7 @@ test("angle_unittests") {
"//testing/gtest",
"//third_party/angle:libANGLE",
"//third_party/angle:preprocessor",
- "//third_party/angle:translator",
+ "//third_party/angle:translator_static",
]
}
@@ -97,7 +97,7 @@ if (is_win || is_linux || is_mac || is_android) {
"//third_party/angle:libEGL",
"//third_party/angle:libGLESv2",
"//third_party/angle:preprocessor",
- "//third_party/angle:translator",
+ "//third_party/angle:translator_static",
]
}
}
@@ -303,7 +303,6 @@ if (build_angle_deqp_tests) {
shared_library(shared_library_name) {
deps = [
":angle_deqp_libtester",
- "//third_party/angle:angle_util",
]
configs -= deqp_undefine_configs
diff --git a/gfx/angle/src/tests/angle_end2end_tests.gypi b/gfx/angle/src/tests/angle_end2end_tests.gypi
index 56705ba12..9941e9606 100755
--- a/gfx/angle/src/tests/angle_end2end_tests.gypi
+++ b/gfx/angle/src/tests/angle_end2end_tests.gypi
@@ -15,7 +15,6 @@
{
'angle_end2end_tests_sources':
[
- '<(angle_path)/src/tests/gl_tests/BindGeneratesResourceTest.cpp',
'<(angle_path)/src/tests/gl_tests/BindUniformLocationTest.cpp',
'<(angle_path)/src/tests/gl_tests/BlendMinMaxTest.cpp',
'<(angle_path)/src/tests/gl_tests/BlitFramebufferANGLETest.cpp',
@@ -24,7 +23,6 @@
'<(angle_path)/src/tests/gl_tests/ClearTest.cpp',
'<(angle_path)/src/tests/gl_tests/ColorMaskTest.cpp',
'<(angle_path)/src/tests/gl_tests/ComputeShaderTest.cpp',
- '<(angle_path)/src/tests/gl_tests/CopyCompressedTextureTest.cpp',
'<(angle_path)/src/tests/gl_tests/CopyTexImageTest.cpp',
'<(angle_path)/src/tests/gl_tests/CopyTextureTest.cpp',
'<(angle_path)/src/tests/gl_tests/CubeMapTextureTest.cpp',
@@ -62,10 +60,8 @@
'<(angle_path)/src/tests/gl_tests/ProgramBinaryTest.cpp',
'<(angle_path)/src/tests/gl_tests/ReadPixelsTest.cpp',
'<(angle_path)/src/tests/gl_tests/RendererTest.cpp',
- '<(angle_path)/src/tests/gl_tests/RobustClientMemoryTest.cpp',
'<(angle_path)/src/tests/gl_tests/SimpleOperationTest.cpp',
'<(angle_path)/src/tests/gl_tests/SixteenBppTextureTest.cpp',
- '<(angle_path)/src/tests/gl_tests/SRGBFramebufferTest.cpp',
'<(angle_path)/src/tests/gl_tests/SRGBTextureTest.cpp',
'<(angle_path)/src/tests/gl_tests/StateChangeTest.cpp',
'<(angle_path)/src/tests/gl_tests/SwizzleTest.cpp',
@@ -79,7 +75,6 @@
'<(angle_path)/src/tests/gl_tests/UnpackRowLength.cpp',
'<(angle_path)/src/tests/gl_tests/VertexAttributeTest.cpp',
'<(angle_path)/src/tests/gl_tests/ViewportTest.cpp',
- '<(angle_path)/src/tests/gl_tests/WebGLCompatibilityTest.cpp',
'<(angle_path)/src/tests/egl_tests/EGLContextCompatibilityTest.cpp',
'<(angle_path)/src/tests/egl_tests/EGLContextSharingTest.cpp',
'<(angle_path)/src/tests/egl_tests/EGLQueryContextTest.cpp',
@@ -97,7 +92,6 @@
'angle_end2end_tests_win_sources':
[
'<(angle_path)/src/tests/gl_tests/D3DImageFormatConversionTest.cpp',
- '<(angle_path)/src/tests/gl_tests/D3DTextureTest.cpp',
'<(angle_path)/src/tests/gl_tests/D3D11EmulatedIndexedBufferTest.cpp',
'<(angle_path)/src/tests/gl_tests/D3D11FormatTablesTest.cpp',
'<(angle_path)/src/tests/gl_tests/D3D11InputLayoutCacheTest.cpp',
diff --git a/gfx/angle/src/tests/angle_perftests.gypi b/gfx/angle/src/tests/angle_perftests.gypi
index 6a86da9c0..5252adde8 100755
--- a/gfx/angle/src/tests/angle_perftests.gypi
+++ b/gfx/angle/src/tests/angle_perftests.gypi
@@ -27,7 +27,6 @@
'<(angle_path)/src/tests/perf_tests/PointSprites.cpp',
'<(angle_path)/src/tests/perf_tests/TexSubImage.cpp',
'<(angle_path)/src/tests/perf_tests/TextureSampling.cpp',
- '<(angle_path)/src/tests/perf_tests/TexturesPerf.cpp',
'<(angle_path)/src/tests/perf_tests/UniformsPerf.cpp',
'<(angle_path)/src/tests/perf_tests/third_party/perf/perf_test.cc',
'<(angle_path)/src/tests/perf_tests/third_party/perf/perf_test.h',
diff --git a/gfx/angle/src/tests/angle_unittests.gypi b/gfx/angle/src/tests/angle_unittests.gypi
index b22490173..9eeb21e9c 100755
--- a/gfx/angle/src/tests/angle_unittests.gypi
+++ b/gfx/angle/src/tests/angle_unittests.gypi
@@ -42,6 +42,7 @@
'<(angle_path)/src/libANGLE/validationES_unittest.cpp',
'<(angle_path)/src/tests/angle_unittests_utils.h',
'<(angle_path)/src/tests/compiler_tests/API_test.cpp',
+ '<(angle_path)/src/tests/compiler_tests/BuiltInFunctionEmulator_test.cpp',
'<(angle_path)/src/tests/compiler_tests/CollectVariables_test.cpp',
'<(angle_path)/src/tests/compiler_tests/ConstantFolding_test.cpp',
'<(angle_path)/src/tests/compiler_tests/DebugShaderPrecision_test.cpp',
@@ -56,12 +57,9 @@
'<(angle_path)/src/tests/compiler_tests/Pack_Unpack_test.cpp',
'<(angle_path)/src/tests/compiler_tests/PruneEmptyDeclarations_test.cpp',
'<(angle_path)/src/tests/compiler_tests/PruneUnusedFunctions_test.cpp',
- '<(angle_path)/src/tests/compiler_tests/QualificationOrderESSL31_test.cpp',
- '<(angle_path)/src/tests/compiler_tests/QualificationOrder_test.cpp',
'<(angle_path)/src/tests/compiler_tests/RecordConstantPrecision_test.cpp',
'<(angle_path)/src/tests/compiler_tests/RemovePow_test.cpp',
'<(angle_path)/src/tests/compiler_tests/ShaderExtension_test.cpp',
- '<(angle_path)/src/tests/compiler_tests/ShaderImage_test.cpp',
'<(angle_path)/src/tests/compiler_tests/ShaderVariable_test.cpp',
'<(angle_path)/src/tests/compiler_tests/ShCompile_test.cpp',
'<(angle_path)/src/tests/compiler_tests/TypeTracking_test.cpp',
@@ -101,7 +99,7 @@
[
'<(angle_path)/src/angle.gyp:libANGLE',
'<(angle_path)/src/angle.gyp:preprocessor',
- '<(angle_path)/src/angle.gyp:translator',
+ '<(angle_path)/src/angle.gyp:translator_static',
'<(angle_path)/src/tests/tests.gyp:angle_test_support',
],
'include_dirs':
diff --git a/gfx/angle/src/tests/angle_unittests_main.cpp b/gfx/angle/src/tests/angle_unittests_main.cpp
index 1b44dbbcc..c52df1487 100755
--- a/gfx/angle/src/tests/angle_unittests_main.cpp
+++ b/gfx/angle/src/tests/angle_unittests_main.cpp
@@ -10,17 +10,17 @@
class CompilerTestEnvironment : public testing::Environment
{
public:
- void SetUp() override
+ virtual void SetUp()
{
- if (!sh::Initialize())
+ if (!ShInitialize())
{
FAIL() << "Failed to initialize the compiler.";
}
}
- void TearDown() override
+ virtual void TearDown()
{
- if (!sh::Finalize())
+ if (!ShFinalize())
{
FAIL() << "Failed to finalize the compiler.";
}
diff --git a/gfx/angle/src/tests/angle_unittests_utils.h b/gfx/angle/src/tests/angle_unittests_utils.h
index 790d3455d..487c1685c 100755
--- a/gfx/angle/src/tests/angle_unittests_utils.h
+++ b/gfx/angle/src/tests/angle_unittests_utils.h
@@ -41,7 +41,7 @@ class NullFactory : public GLImplFactory
RenderbufferImpl *createRenderbuffer() override { return nullptr; }
// Buffer creation
- BufferImpl *createBuffer(const gl::BufferState &state) override { return nullptr; }
+ BufferImpl *createBuffer() override { return nullptr; }
// Vertex Array creation
VertexArrayImpl *createVertexArray(const gl::VertexArrayState &data) override
@@ -80,7 +80,7 @@ class MockGLFactory : public GLImplFactory
MOCK_METHOD1(createFramebuffer, FramebufferImpl *(const gl::FramebufferState &));
MOCK_METHOD1(createTexture, TextureImpl *(const gl::TextureState &));
MOCK_METHOD0(createRenderbuffer, RenderbufferImpl *());
- MOCK_METHOD1(createBuffer, BufferImpl *(const gl::BufferState &));
+ MOCK_METHOD0(createBuffer, BufferImpl *());
MOCK_METHOD1(createVertexArray, VertexArrayImpl *(const gl::VertexArrayState &));
MOCK_METHOD1(createQuery, QueryImpl *(GLenum type));
MOCK_METHOD0(createFenceNV, FenceNVImpl *());
@@ -103,10 +103,9 @@ class MockEGLFactory : public EGLImplFactory
SurfaceImpl *(const egl::SurfaceState &,
const egl::Config *,
const egl::AttributeMap &));
- MOCK_METHOD5(createPbufferFromClientBuffer,
+ MOCK_METHOD4(createPbufferFromClientBuffer,
SurfaceImpl *(const egl::SurfaceState &,
const egl::Config *,
- EGLenum,
EGLClientBuffer,
const egl::AttributeMap &));
MOCK_METHOD4(createPixmapSurface,
diff --git a/gfx/angle/src/tests/compiler_tests/API_test.cpp b/gfx/angle/src/tests/compiler_tests/API_test.cpp
index 090e31ebc..217a260fa 100755
--- a/gfx/angle/src/tests/compiler_tests/API_test.cpp
+++ b/gfx/angle/src/tests/compiler_tests/API_test.cpp
@@ -15,11 +15,11 @@ TEST(APITest, CompareShBuiltInResources)
{
ShBuiltInResources a_resources;
memset(&a_resources, 88, sizeof(a_resources));
- sh::InitBuiltInResources(&a_resources);
+ ShInitBuiltInResources(&a_resources);
ShBuiltInResources b_resources;
memset(&b_resources, 77, sizeof(b_resources));
- sh::InitBuiltInResources(&b_resources);
+ ShInitBuiltInResources(&b_resources);
EXPECT_TRUE(memcmp(&a_resources, &b_resources, sizeof(a_resources)) == 0);
}
diff --git a/gfx/angle/src/tests/compiler_tests/BuiltInFunctionEmulator_test.cpp b/gfx/angle/src/tests/compiler_tests/BuiltInFunctionEmulator_test.cpp
new file mode 100644
index 000000000..edf979f53
--- /dev/null
+++ b/gfx/angle/src/tests/compiler_tests/BuiltInFunctionEmulator_test.cpp
@@ -0,0 +1,43 @@
+//
+// Copyright (c) 2015 The ANGLE Project Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+// BuiltInFunctionEmulator_test.cpp:
+// Tests for writing the code for built-in function emulation.
+//
+
+#include "angle_gl.h"
+#include "gtest/gtest.h"
+#include "GLSLANG/ShaderLang.h"
+#include "tests/test_utils/compiler_test.h"
+
+namespace
+{
+
+// Test for the SH_EMULATE_BUILT_IN_FUNCTIONS flag.
+class EmulateBuiltInFunctionsTest : public MatchOutputCodeTest
+{
+ public:
+ EmulateBuiltInFunctionsTest()
+ : MatchOutputCodeTest(GL_VERTEX_SHADER,
+ SH_EMULATE_BUILT_IN_FUNCTIONS,
+ SH_GLSL_COMPATIBILITY_OUTPUT)
+ {
+ }
+};
+
+TEST_F(EmulateBuiltInFunctionsTest, DotEmulated)
+{
+ const std::string shaderString =
+ "precision mediump float;\n"
+ "uniform float u;\n"
+ "void main()\n"
+ "{\n"
+ " gl_Position = vec4(dot(u, 1.0), 1.0, 1.0, 1.0);\n"
+ "}\n";
+ compile(shaderString);
+ ASSERT_TRUE(foundInCode("webgl_dot_emu("));
+}
+
+} // namespace
diff --git a/gfx/angle/src/tests/compiler_tests/CollectVariables_test.cpp b/gfx/angle/src/tests/compiler_tests/CollectVariables_test.cpp
index a93411668..f29374f54 100755
--- a/gfx/angle/src/tests/compiler_tests/CollectVariables_test.cpp
+++ b/gfx/angle/src/tests/compiler_tests/CollectVariables_test.cpp
@@ -14,21 +14,19 @@
#include "GLSLANG/ShaderLang.h"
#include "compiler/translator/TranslatorGLSL.h"
-using namespace sh;
-
#define EXPECT_GLENUM_EQ(expected, actual) \
- EXPECT_EQ(static_cast<::GLenum>(expected), static_cast<::GLenum>(actual))
+ EXPECT_EQ(static_cast<GLenum>(expected), static_cast<GLenum>(actual))
class CollectVariablesTest : public testing::Test
{
public:
- CollectVariablesTest(::GLenum shaderType) : mShaderType(shaderType) {}
+ CollectVariablesTest(GLenum shaderType) : mShaderType(shaderType) {}
protected:
void SetUp() override
{
ShBuiltInResources resources;
- InitBuiltInResources(&resources);
+ ShInitBuiltInResources(&resources);
resources.MaxDrawBuffers = 8;
initTranslator(resources);
@@ -47,10 +45,10 @@ class CollectVariablesTest : public testing::Test
const char *shaderStrings[] = { shaderString.c_str() };
ASSERT_TRUE(mTranslator->compile(shaderStrings, 1, SH_VARIABLES));
- const std::vector<Uniform> &uniforms = mTranslator->getUniforms();
+ const std::vector<sh::Uniform> &uniforms = mTranslator->getUniforms();
ASSERT_EQ(1u, uniforms.size());
- const Uniform &uniform = uniforms[0];
+ const sh::Uniform &uniform = uniforms[0];
EXPECT_EQ("gl_DepthRange", uniform.name);
ASSERT_TRUE(uniform.isStruct());
ASSERT_EQ(3u, uniform.fields.size());
@@ -92,7 +90,7 @@ class CollectVariablesTest : public testing::Test
void validateOutputVariableForShader(const std::string &shaderString,
unsigned int varIndex,
const char *varName,
- const OutputVariable **outResult)
+ const sh::OutputVariable **outResult)
{
const char *shaderStrings[] = {shaderString.c_str()};
ASSERT_TRUE(mTranslator->compile(shaderStrings, 1, SH_VARIABLES))
@@ -100,7 +98,7 @@ class CollectVariablesTest : public testing::Test
const auto &outputVariables = mTranslator->getOutputVariables();
ASSERT_LT(varIndex, outputVariables.size());
- const OutputVariable &outputVariable = outputVariables[varIndex];
+ const sh::OutputVariable &outputVariable = outputVariables[varIndex];
EXPECT_EQ(-1, outputVariable.location);
EXPECT_TRUE(outputVariable.staticUse);
EXPECT_EQ(varName, outputVariable.name);
@@ -113,7 +111,7 @@ class CollectVariablesTest : public testing::Test
ASSERT_TRUE(mTranslator->compile(shaderStrings, 1, SH_VARIABLES));
}
- ::GLenum mShaderType;
+ GLenum mShaderType;
std::unique_ptr<TranslatorGLSL> mTranslator;
};
@@ -144,7 +142,7 @@ TEST_F(CollectFragmentVariablesTest, SimpleOutputVar)
const auto &outputVariables = mTranslator->getOutputVariables();
ASSERT_EQ(1u, outputVariables.size());
- const OutputVariable &outputVariable = outputVariables[0];
+ const sh::OutputVariable &outputVariable = outputVariables[0];
EXPECT_EQ(0u, outputVariable.arraySize);
EXPECT_EQ(-1, outputVariable.location);
@@ -169,7 +167,7 @@ TEST_F(CollectFragmentVariablesTest, LocationOutputVar)
const auto &outputVariables = mTranslator->getOutputVariables();
ASSERT_EQ(1u, outputVariables.size());
- const OutputVariable &outputVariable = outputVariables[0];
+ const sh::OutputVariable &outputVariable = outputVariables[0];
EXPECT_EQ(0u, outputVariable.arraySize);
EXPECT_EQ(5, outputVariable.location);
@@ -190,10 +188,10 @@ TEST_F(CollectVertexVariablesTest, LocationAttribute)
compile(shaderString);
- const std::vector<Attribute> &attributes = mTranslator->getAttributes();
+ const std::vector<sh::Attribute> &attributes = mTranslator->getAttributes();
ASSERT_EQ(1u, attributes.size());
- const Attribute &attribute = attributes[0];
+ const sh::Attribute &attribute = attributes[0];
EXPECT_EQ(0u, attribute.arraySize);
EXPECT_EQ(5, attribute.location);
@@ -216,20 +214,20 @@ TEST_F(CollectVertexVariablesTest, SimpleInterfaceBlock)
compile(shaderString);
- const std::vector<InterfaceBlock> &interfaceBlocks = mTranslator->getInterfaceBlocks();
+ const std::vector<sh::InterfaceBlock> &interfaceBlocks = mTranslator->getInterfaceBlocks();
ASSERT_EQ(1u, interfaceBlocks.size());
- const InterfaceBlock &interfaceBlock = interfaceBlocks[0];
+ const sh::InterfaceBlock &interfaceBlock = interfaceBlocks[0];
EXPECT_EQ(0u, interfaceBlock.arraySize);
EXPECT_FALSE(interfaceBlock.isRowMajorLayout);
- EXPECT_EQ(BLOCKLAYOUT_SHARED, interfaceBlock.layout);
+ EXPECT_EQ(sh::BLOCKLAYOUT_SHARED, interfaceBlock.layout);
EXPECT_EQ("b", interfaceBlock.name);
EXPECT_TRUE(interfaceBlock.staticUse);
ASSERT_EQ(1u, interfaceBlock.fields.size());
- const InterfaceBlockField &field = interfaceBlock.fields[0];
+ const sh::InterfaceBlockField &field = interfaceBlock.fields[0];
EXPECT_GLENUM_EQ(GL_HIGH_FLOAT, field.precision);
EXPECT_TRUE(field.staticUse);
@@ -252,21 +250,21 @@ TEST_F(CollectVertexVariablesTest, SimpleInstancedInterfaceBlock)
compile(shaderString);
- const std::vector<InterfaceBlock> &interfaceBlocks = mTranslator->getInterfaceBlocks();
+ const std::vector<sh::InterfaceBlock> &interfaceBlocks = mTranslator->getInterfaceBlocks();
ASSERT_EQ(1u, interfaceBlocks.size());
- const InterfaceBlock &interfaceBlock = interfaceBlocks[0];
+ const sh::InterfaceBlock &interfaceBlock = interfaceBlocks[0];
EXPECT_EQ(0u, interfaceBlock.arraySize);
EXPECT_FALSE(interfaceBlock.isRowMajorLayout);
- EXPECT_EQ(BLOCKLAYOUT_SHARED, interfaceBlock.layout);
+ EXPECT_EQ(sh::BLOCKLAYOUT_SHARED, interfaceBlock.layout);
EXPECT_EQ("b", interfaceBlock.name);
EXPECT_EQ("blockInstance", interfaceBlock.instanceName);
EXPECT_TRUE(interfaceBlock.staticUse);
ASSERT_EQ(1u, interfaceBlock.fields.size());
- const InterfaceBlockField &field = interfaceBlock.fields[0];
+ const sh::InterfaceBlockField &field = interfaceBlock.fields[0];
EXPECT_GLENUM_EQ(GL_HIGH_FLOAT, field.precision);
EXPECT_TRUE(field.staticUse);
@@ -290,27 +288,27 @@ TEST_F(CollectVertexVariablesTest, StructInterfaceBlock)
compile(shaderString);
- const std::vector<InterfaceBlock> &interfaceBlocks = mTranslator->getInterfaceBlocks();
+ const std::vector<sh::InterfaceBlock> &interfaceBlocks = mTranslator->getInterfaceBlocks();
ASSERT_EQ(1u, interfaceBlocks.size());
- const InterfaceBlock &interfaceBlock = interfaceBlocks[0];
+ const sh::InterfaceBlock &interfaceBlock = interfaceBlocks[0];
EXPECT_EQ(0u, interfaceBlock.arraySize);
EXPECT_FALSE(interfaceBlock.isRowMajorLayout);
- EXPECT_EQ(BLOCKLAYOUT_SHARED, interfaceBlock.layout);
+ EXPECT_EQ(sh::BLOCKLAYOUT_SHARED, interfaceBlock.layout);
EXPECT_EQ("b", interfaceBlock.name);
EXPECT_TRUE(interfaceBlock.staticUse);
ASSERT_EQ(1u, interfaceBlock.fields.size());
- const InterfaceBlockField &field = interfaceBlock.fields[0];
+ const sh::InterfaceBlockField &field = interfaceBlock.fields[0];
EXPECT_TRUE(field.isStruct());
EXPECT_TRUE(field.staticUse);
EXPECT_EQ("s", field.name);
EXPECT_FALSE(field.isRowMajorLayout);
- const ShaderVariable &member = field.fields[0];
+ const sh::ShaderVariable &member = field.fields[0];
// NOTE: we don't currently mark struct members as statically used or not
EXPECT_FALSE(member.isStruct());
@@ -333,28 +331,28 @@ TEST_F(CollectVertexVariablesTest, StructInstancedInterfaceBlock)
compile(shaderString);
- const std::vector<InterfaceBlock> &interfaceBlocks = mTranslator->getInterfaceBlocks();
+ const std::vector<sh::InterfaceBlock> &interfaceBlocks = mTranslator->getInterfaceBlocks();
ASSERT_EQ(1u, interfaceBlocks.size());
- const InterfaceBlock &interfaceBlock = interfaceBlocks[0];
+ const sh::InterfaceBlock &interfaceBlock = interfaceBlocks[0];
EXPECT_EQ(0u, interfaceBlock.arraySize);
EXPECT_FALSE(interfaceBlock.isRowMajorLayout);
- EXPECT_EQ(BLOCKLAYOUT_SHARED, interfaceBlock.layout);
+ EXPECT_EQ(sh::BLOCKLAYOUT_SHARED, interfaceBlock.layout);
EXPECT_EQ("b", interfaceBlock.name);
EXPECT_EQ("instanceName", interfaceBlock.instanceName);
EXPECT_TRUE(interfaceBlock.staticUse);
ASSERT_EQ(1u, interfaceBlock.fields.size());
- const InterfaceBlockField &field = interfaceBlock.fields[0];
+ const sh::InterfaceBlockField &field = interfaceBlock.fields[0];
EXPECT_TRUE(field.isStruct());
EXPECT_TRUE(field.staticUse);
EXPECT_EQ("s", field.name);
EXPECT_FALSE(field.isRowMajorLayout);
- const ShaderVariable &member = field.fields[0];
+ const sh::ShaderVariable &member = field.fields[0];
// NOTE: we don't currently mark struct members as statically used or not
EXPECT_FALSE(member.isStruct());
@@ -377,27 +375,27 @@ TEST_F(CollectVertexVariablesTest, NestedStructRowMajorInterfaceBlock)
compile(shaderString);
- const std::vector<InterfaceBlock> &interfaceBlocks = mTranslator->getInterfaceBlocks();
+ const std::vector<sh::InterfaceBlock> &interfaceBlocks = mTranslator->getInterfaceBlocks();
ASSERT_EQ(1u, interfaceBlocks.size());
- const InterfaceBlock &interfaceBlock = interfaceBlocks[0];
+ const sh::InterfaceBlock &interfaceBlock = interfaceBlocks[0];
EXPECT_EQ(0u, interfaceBlock.arraySize);
EXPECT_TRUE(interfaceBlock.isRowMajorLayout);
- EXPECT_EQ(BLOCKLAYOUT_SHARED, interfaceBlock.layout);
+ EXPECT_EQ(sh::BLOCKLAYOUT_SHARED, interfaceBlock.layout);
EXPECT_EQ("b", interfaceBlock.name);
EXPECT_TRUE(interfaceBlock.staticUse);
ASSERT_EQ(1u, interfaceBlock.fields.size());
- const InterfaceBlockField &field = interfaceBlock.fields[0];
+ const sh::InterfaceBlockField &field = interfaceBlock.fields[0];
EXPECT_TRUE(field.isStruct());
EXPECT_TRUE(field.staticUse);
EXPECT_EQ("s", field.name);
EXPECT_TRUE(field.isRowMajorLayout);
- const ShaderVariable &member = field.fields[0];
+ const sh::ShaderVariable &member = field.fields[0];
// NOTE: we don't currently mark struct members as statically used or not
EXPECT_FALSE(member.isStruct());
@@ -419,10 +417,10 @@ TEST_F(CollectVertexVariablesTest, VaryingInterpolation)
compile(shaderString);
- const std::vector<Varying> &varyings = mTranslator->getVaryings();
+ const std::vector<sh::Varying> &varyings = mTranslator->getVaryings();
ASSERT_EQ(2u, varyings.size());
- const Varying *varying = &varyings[0];
+ const sh::Varying *varying = &varyings[0];
if (varying->name == "gl_Position")
{
@@ -434,7 +432,7 @@ TEST_F(CollectVertexVariablesTest, VaryingInterpolation)
EXPECT_TRUE(varying->staticUse);
EXPECT_GLENUM_EQ(GL_FLOAT, varying->type);
EXPECT_EQ("vary", varying->name);
- EXPECT_EQ(INTERPOLATION_CENTROID, varying->interpolation);
+ EXPECT_EQ(sh::INTERPOLATION_CENTROID, varying->interpolation);
}
// Test for builtin uniform "gl_DepthRange" (Vertex shader)
@@ -471,7 +469,7 @@ TEST_F(CollectFragmentVariablesTest, OutputVarESSL1FragColor)
" gl_FragColor = vec4(1.0);\n"
"}\n";
- const OutputVariable *outputVariable = nullptr;
+ const sh::OutputVariable *outputVariable = nullptr;
validateOutputVariableForShader(fragColorShader, 0u, "gl_FragColor", &outputVariable);
ASSERT_NE(outputVariable, nullptr);
EXPECT_EQ(0u, outputVariable->arraySize);
@@ -497,7 +495,7 @@ TEST_F(CollectFragmentVariablesTest, OutputVarESSL1FragData)
resources.MaxDrawBuffers = kMaxDrawBuffers;
initTranslator(resources);
- const OutputVariable *outputVariable = nullptr;
+ const sh::OutputVariable *outputVariable = nullptr;
validateOutputVariableForShader(fragDataShader, 0u, "gl_FragData", &outputVariable);
ASSERT_NE(outputVariable, nullptr);
EXPECT_EQ(kMaxDrawBuffers, outputVariable->arraySize);
@@ -520,7 +518,7 @@ TEST_F(CollectFragmentVariablesTest, OutputVarESSL1FragDepthMediump)
resources.EXT_frag_depth = 1;
initTranslator(resources);
- const OutputVariable *outputVariable = nullptr;
+ const sh::OutputVariable *outputVariable = nullptr;
validateOutputVariableForShader(fragDepthShader, 0u, "gl_FragDepthEXT", &outputVariable);
ASSERT_NE(outputVariable, nullptr);
EXPECT_EQ(0u, outputVariable->arraySize);
@@ -543,7 +541,7 @@ TEST_F(CollectFragmentVariablesTest, OutputVarESSL1FragDepthHighp)
resources.FragmentPrecisionHigh = 1;
initTranslator(resources);
- const OutputVariable *outputVariable = nullptr;
+ const sh::OutputVariable *outputVariable = nullptr;
validateOutputVariableForShader(fragDepthHighShader, 0u, "gl_FragDepthEXT", &outputVariable);
ASSERT_NE(outputVariable, nullptr);
EXPECT_EQ(0u, outputVariable->arraySize);
@@ -566,7 +564,7 @@ TEST_F(CollectFragmentVariablesTest, OutputVarESSL3FragDepthHighp)
resources.EXT_frag_depth = 1;
initTranslator(resources);
- const OutputVariable *outputVariable = nullptr;
+ const sh::OutputVariable *outputVariable = nullptr;
validateOutputVariableForShader(fragDepthHighShader, 0u, "gl_FragDepth", &outputVariable);
ASSERT_NE(outputVariable, nullptr);
EXPECT_EQ(0u, outputVariable->arraySize);
@@ -594,7 +592,7 @@ TEST_F(CollectFragmentVariablesTest, OutputVarESSL1EXTBlendFuncExtendedSecondary
resources.MaxDualSourceDrawBuffers = resources.MaxDrawBuffers;
initTranslator(resources);
- const OutputVariable *outputVariable = nullptr;
+ const sh::OutputVariable *outputVariable = nullptr;
validateOutputVariableForShader(secondaryFragColorShader, 0u, "gl_FragColor", &outputVariable);
ASSERT_NE(outputVariable, nullptr);
EXPECT_EQ(0u, outputVariable->arraySize);
@@ -632,7 +630,7 @@ TEST_F(CollectFragmentVariablesTest, OutputVarESSL1EXTBlendFuncExtendedSecondary
resources.MaxDualSourceDrawBuffers = resources.MaxDrawBuffers;
initTranslator(resources);
- const OutputVariable *outputVariable = nullptr;
+ const sh::OutputVariable *outputVariable = nullptr;
validateOutputVariableForShader(secondaryFragDataShader, 0u, "gl_FragData", &outputVariable);
ASSERT_NE(outputVariable, nullptr);
EXPECT_EQ(kMaxDrawBuffers, outputVariable->arraySize);
@@ -660,7 +658,7 @@ class CollectHashedVertexVariablesTest : public CollectVertexVariablesTest
{
// Initialize the translate with a hash function
ShBuiltInResources resources;
- sh::InitBuiltInResources(&resources);
+ ShInitBuiltInResources(&resources);
resources.HashFunction = SimpleTestHash;
initTranslator(resources);
}
@@ -679,14 +677,14 @@ TEST_F(CollectHashedVertexVariablesTest, InstancedInterfaceBlock)
compile(shaderString);
- const std::vector<InterfaceBlock> &interfaceBlocks = mTranslator->getInterfaceBlocks();
+ const std::vector<sh::InterfaceBlock> &interfaceBlocks = mTranslator->getInterfaceBlocks();
ASSERT_EQ(1u, interfaceBlocks.size());
- const InterfaceBlock &interfaceBlock = interfaceBlocks[0];
+ const sh::InterfaceBlock &interfaceBlock = interfaceBlocks[0];
EXPECT_EQ(0u, interfaceBlock.arraySize);
EXPECT_FALSE(interfaceBlock.isRowMajorLayout);
- EXPECT_EQ(BLOCKLAYOUT_SHARED, interfaceBlock.layout);
+ EXPECT_EQ(sh::BLOCKLAYOUT_SHARED, interfaceBlock.layout);
EXPECT_EQ("blockName", interfaceBlock.name);
EXPECT_EQ("blockInstance", interfaceBlock.instanceName);
EXPECT_EQ("webgl_9", interfaceBlock.mappedName);
@@ -694,7 +692,7 @@ TEST_F(CollectHashedVertexVariablesTest, InstancedInterfaceBlock)
ASSERT_EQ(1u, interfaceBlock.fields.size());
- const InterfaceBlockField &field = interfaceBlock.fields[0];
+ const sh::InterfaceBlockField &field = interfaceBlock.fields[0];
EXPECT_GLENUM_EQ(GL_HIGH_FLOAT, field.precision);
EXPECT_TRUE(field.staticUse);
@@ -722,7 +720,7 @@ TEST_F(CollectHashedVertexVariablesTest, StructUniform)
const auto &uniforms = mTranslator->getUniforms();
ASSERT_EQ(1u, uniforms.size());
- const Uniform &uniform = uniforms[0];
+ const sh::Uniform &uniform = uniforms[0];
EXPECT_EQ(0u, uniform.arraySize);
EXPECT_EQ("u", uniform.name);
@@ -731,7 +729,7 @@ TEST_F(CollectHashedVertexVariablesTest, StructUniform)
ASSERT_EQ(1u, uniform.fields.size());
- const ShaderVariable &field = uniform.fields[0];
+ const sh::ShaderVariable &field = uniform.fields[0];
EXPECT_GLENUM_EQ(GL_HIGH_FLOAT, field.precision);
// EXPECT_TRUE(field.staticUse); // we don't yet support struct static use
diff --git a/gfx/angle/src/tests/compiler_tests/ConstantFolding_test.cpp b/gfx/angle/src/tests/compiler_tests/ConstantFolding_test.cpp
index 4c5baffe7..1185613de 100755
--- a/gfx/angle/src/tests/compiler_tests/ConstantFolding_test.cpp
+++ b/gfx/angle/src/tests/compiler_tests/ConstantFolding_test.cpp
@@ -15,8 +15,6 @@
#include "compiler/translator/PoolAlloc.h"
#include "compiler/translator/TranslatorESSL.h"
-using namespace sh;
-
template <typename T>
class ConstantFinder : public TIntermTraverser
{
@@ -109,7 +107,7 @@ class ConstantFoldingTest : public testing::Test
allocator.push();
SetGlobalPoolAllocator(&allocator);
ShBuiltInResources resources;
- InitBuiltInResources(&resources);
+ ShInitBuiltInResources(&resources);
mTranslatorESSL = new TranslatorESSL(GL_FRAGMENT_SHADER, SH_GLES3_SPEC);
ASSERT_TRUE(mTranslatorESSL->Init(resources));
@@ -794,271 +792,3 @@ TEST_F(ConstantFoldingTest, FoldNonSquareOuterProduct)
std::vector<float> result(outputElements, outputElements + 6);
ASSERT_TRUE(constantColumnMajorMatrixFoundInAST(result));
}
-
-// Test that folding bit shift left with non-matching signedness works.
-TEST_F(ConstantFoldingTest, FoldBitShiftLeftDifferentSignedness)
-{
- const std::string &shaderString =
- "#version 300 es\n"
- "precision mediump float;\n"
- "out vec4 my_FragColor;\n"
- "void main()\n"
- "{\n"
- " uint u = 0xffffffffu << 31;\n"
- " my_FragColor = vec4(u);\n"
- "}\n";
- compile(shaderString);
- ASSERT_TRUE(constantFoundInAST(0x80000000u));
-}
-
-// Test that folding bit shift right with non-matching signedness works.
-TEST_F(ConstantFoldingTest, FoldBitShiftRightDifferentSignedness)
-{
- const std::string &shaderString =
- "#version 300 es\n"
- "precision mediump float;\n"
- "out vec4 my_FragColor;\n"
- "void main()\n"
- "{\n"
- " uint u = 0xffffffffu >> 30;\n"
- " my_FragColor = vec4(u);\n"
- "}\n";
- compile(shaderString);
- ASSERT_TRUE(constantFoundInAST(0x3u));
-}
-
-// Test that folding signed bit shift right extends the sign bit.
-// ESSL 3.00.6 section 5.9 Expressions.
-TEST_F(ConstantFoldingTest, FoldBitShiftRightExtendSignBit)
-{
- const std::string &shaderString =
- "#version 300 es\n"
- "precision mediump float;\n"
- "out vec4 my_FragColor;\n"
- "void main()\n"
- "{\n"
- " const int i = 0x8fffe000 >> 6;\n"
- " uint u = uint(i);"
- " my_FragColor = vec4(u);\n"
- "}\n";
- compile(shaderString);
- // The bits of the operand are 0x8fffe000 = 1000 1111 1111 1111 1110 0000 0000 0000
- // After shifting, they become 1111 1110 0011 1111 1111 1111 1000 0000 = 0xfe3fff80
- ASSERT_TRUE(constantFoundInAST(0xfe3fff80u));
-}
-
-// Signed bit shift left should interpret its operand as a bit pattern. As a consequence a number
-// may turn from positive to negative when shifted left.
-// ESSL 3.00.6 section 5.9 Expressions.
-TEST_F(ConstantFoldingTest, FoldBitShiftLeftInterpretedAsBitPattern)
-{
- const std::string &shaderString =
- "#version 300 es\n"
- "precision mediump float;\n"
- "out vec4 my_FragColor;\n"
- "void main()\n"
- "{\n"
- " const int i = 0x1fffffff << 3;\n"
- " uint u = uint(i);"
- " my_FragColor = vec4(u);\n"
- "}\n";
- compile(shaderString);
- ASSERT_TRUE(constantFoundInAST(0xfffffff8u));
-}
-
-// Test that dividing the minimum signed integer by -1 works.
-// ESSL 3.00.6 section 4.1.3 Integers:
-// "However, for the case where the minimum representable value is divided by -1, it is allowed to
-// return either the minimum representable value or the maximum representable value."
-TEST_F(ConstantFoldingTest, FoldDivideMinimumIntegerByMinusOne)
-{
- const std::string &shaderString =
- "#version 300 es\n"
- "precision mediump float;\n"
- "out vec4 my_FragColor;\n"
- "void main()\n"
- "{\n"
- " int i = 0x80000000 / (-1);\n"
- " my_FragColor = vec4(i);\n"
- "}\n";
- compile(shaderString);
- ASSERT_TRUE(constantFoundInAST(0x7fffffff) || constantFoundInAST(-0x7fffffff - 1));
-}
-
-// Test that folding an unsigned integer addition that overflows works.
-// ESSL 3.00.6 section 4.1.3 Integers:
-// "For all precisions, operations resulting in overflow or underflow will not cause any exception,
-// nor will they saturate, rather they will 'wrap' to yield the low-order n bits of the result where
-// n is the size in bits of the integer."
-TEST_F(ConstantFoldingTest, FoldUnsignedIntegerAddOverflow)
-{
- const std::string &shaderString =
- "#version 300 es\n"
- "precision mediump float;\n"
- "out vec4 my_FragColor;\n"
- "void main()\n"
- "{\n"
- " uint u = 0xffffffffu + 43u;\n"
- " my_FragColor = vec4(u);\n"
- "}\n";
- compile(shaderString);
- ASSERT_TRUE(constantFoundInAST(42u));
-}
-
-// Test that folding a signed integer addition that overflows works.
-// ESSL 3.00.6 section 4.1.3 Integers:
-// "For all precisions, operations resulting in overflow or underflow will not cause any exception,
-// nor will they saturate, rather they will 'wrap' to yield the low-order n bits of the result where
-// n is the size in bits of the integer."
-TEST_F(ConstantFoldingTest, FoldSignedIntegerAddOverflow)
-{
- const std::string &shaderString =
- "#version 300 es\n"
- "precision mediump float;\n"
- "out vec4 my_FragColor;\n"
- "void main()\n"
- "{\n"
- " int i = 0x7fffffff + 4;\n"
- " my_FragColor = vec4(i);\n"
- "}\n";
- compile(shaderString);
- ASSERT_TRUE(constantFoundInAST(-0x7ffffffd));
-}
-
-// Test that folding an unsigned integer subtraction that overflows works.
-// ESSL 3.00.6 section 4.1.3 Integers:
-// "For all precisions, operations resulting in overflow or underflow will not cause any exception,
-// nor will they saturate, rather they will 'wrap' to yield the low-order n bits of the result where
-// n is the size in bits of the integer."
-TEST_F(ConstantFoldingTest, FoldUnsignedIntegerDiffOverflow)
-{
- const std::string &shaderString =
- "#version 300 es\n"
- "precision mediump float;\n"
- "out vec4 my_FragColor;\n"
- "void main()\n"
- "{\n"
- " uint u = 0u - 5u;\n"
- " my_FragColor = vec4(u);\n"
- "}\n";
- compile(shaderString);
- ASSERT_TRUE(constantFoundInAST(0xfffffffbu));
-}
-
-// Test that folding a signed integer subtraction that overflows works.
-// ESSL 3.00.6 section 4.1.3 Integers:
-// "For all precisions, operations resulting in overflow or underflow will not cause any exception,
-// nor will they saturate, rather they will 'wrap' to yield the low-order n bits of the result where
-// n is the size in bits of the integer."
-TEST_F(ConstantFoldingTest, FoldSignedIntegerDiffOverflow)
-{
- const std::string &shaderString =
- "#version 300 es\n"
- "precision mediump float;\n"
- "out vec4 my_FragColor;\n"
- "void main()\n"
- "{\n"
- " int i = -0x7fffffff - 7;\n"
- " my_FragColor = vec4(i);\n"
- "}\n";
- compile(shaderString);
- ASSERT_TRUE(constantFoundInAST(0x7ffffffa));
-}
-
-// Test that folding an unsigned integer multiplication that overflows works.
-// ESSL 3.00.6 section 4.1.3 Integers:
-// "For all precisions, operations resulting in overflow or underflow will not cause any exception,
-// nor will they saturate, rather they will 'wrap' to yield the low-order n bits of the result where
-// n is the size in bits of the integer."
-TEST_F(ConstantFoldingTest, FoldUnsignedIntegerMultiplyOverflow)
-{
- const std::string &shaderString =
- "#version 300 es\n"
- "precision mediump float;\n"
- "out vec4 my_FragColor;\n"
- "void main()\n"
- "{\n"
- " uint u = 0xffffffffu * 10u;\n"
- " my_FragColor = vec4(u);\n"
- "}\n";
- compile(shaderString);
- ASSERT_TRUE(constantFoundInAST(0xfffffff6u));
-}
-
-// Test that folding a signed integer multiplication that overflows works.
-// ESSL 3.00.6 section 4.1.3 Integers:
-// "For all precisions, operations resulting in overflow or underflow will not cause any exception,
-// nor will they saturate, rather they will 'wrap' to yield the low-order n bits of the result where
-// n is the size in bits of the integer."
-TEST_F(ConstantFoldingTest, FoldSignedIntegerMultiplyOverflow)
-{
- const std::string &shaderString =
- "#version 300 es\n"
- "precision mediump float;\n"
- "out vec4 my_FragColor;\n"
- "void main()\n"
- "{\n"
- " int i = 0x7fffffff * 42;\n"
- " my_FragColor = vec4(i);\n"
- "}\n";
- compile(shaderString);
- ASSERT_TRUE(constantFoundInAST(-42));
-}
-
-// Test that folding of negating the minimum representable integer works. Note that in the test
-// "0x80000000" is a negative literal, and the minus sign before it is the negation operator.
-// ESSL 3.00.6 section 4.1.3 Integers:
-// "For all precisions, operations resulting in overflow or underflow will not cause any exception,
-// nor will they saturate, rather they will 'wrap' to yield the low-order n bits of the result where
-// n is the size in bits of the integer."
-TEST_F(ConstantFoldingTest, FoldMinimumSignedIntegerNegation)
-{
- const std::string &shaderString =
- "#version 300 es\n"
- "precision mediump float;\n"
- "out vec4 my_FragColor;\n"
- "void main()\n"
- "{\n"
- " int i = -0x80000000;\n"
- " my_FragColor = vec4(i);\n"
- "}\n";
- compile(shaderString);
- // Negating the minimum signed integer overflows the positive range, so it wraps back to itself.
- ASSERT_TRUE(constantFoundInAST(-0x7fffffff - 1));
-}
-
-// Test that folding of shifting the minimum representable integer works.
-TEST_F(ConstantFoldingTest, FoldMinimumSignedIntegerRightShift)
-{
- const std::string &shaderString =
- "#version 300 es\n"
- "precision mediump float;\n"
- "out vec4 my_FragColor;\n"
- "void main()\n"
- "{\n"
- " int i = (0x80000000 >> 1);\n"
- " int j = (0x80000000 >> 7);\n"
- " my_FragColor = vec4(i, j, i, j);\n"
- "}\n";
- compile(shaderString);
- ASSERT_TRUE(constantFoundInAST(-0x40000000));
- ASSERT_TRUE(constantFoundInAST(-0x01000000));
-}
-
-// Test that folding of shifting by 0 works.
-TEST_F(ConstantFoldingTest, FoldShiftByZero)
-{
- const std::string &shaderString =
- "#version 300 es\n"
- "precision mediump float;\n"
- "out vec4 my_FragColor;\n"
- "void main()\n"
- "{\n"
- " int i = (3 >> 0);\n"
- " int j = (73 << 0);\n"
- " my_FragColor = vec4(i, j, i, j);\n"
- "}\n";
- compile(shaderString);
- ASSERT_TRUE(constantFoundInAST(3));
- ASSERT_TRUE(constantFoundInAST(73));
-}
diff --git a/gfx/angle/src/tests/compiler_tests/DebugShaderPrecision_test.cpp b/gfx/angle/src/tests/compiler_tests/DebugShaderPrecision_test.cpp
index d1bee424a..dbaffa5d4 100755
--- a/gfx/angle/src/tests/compiler_tests/DebugShaderPrecision_test.cpp
+++ b/gfx/angle/src/tests/compiler_tests/DebugShaderPrecision_test.cpp
@@ -12,8 +12,6 @@
#include "GLSLANG/ShaderLang.h"
#include "tests/test_utils/compiler_test.h"
-using namespace sh;
-
class DebugShaderPrecisionTest : public MatchOutputCodeTest
{
public:
@@ -1025,23 +1023,3 @@ TEST_F(DebugShaderPrecisionTest, ModfOutParameter)
ASSERT_TRUE(foundInAllGLSLCode("modf(angle_frm(u), o)"));
ASSERT_TRUE(foundInHLSLCode("modf(angle_frm(_u), _o)"));
}
-
-#if defined(ANGLE_ENABLE_HLSL)
-// Tests precision emulation with HLSL 3.0 output -- should error gracefully.
-TEST(DebugShaderPrecisionNegativeTest, HLSL3Unsupported)
-{
- const std::string &shaderString =
- "precision mediump float;\n"
- "uniform float u;\n"
- "void main() {\n"
- " gl_FragColor = vec4(u);\n"
- "}\n";
- std::string infoLog;
- std::string translatedCode;
- ShBuiltInResources resources;
- sh::InitBuiltInResources(&resources);
- resources.WEBGL_debug_shader_precision = 1;
- ASSERT_FALSE(compileTestShader(GL_FRAGMENT_SHADER, SH_GLES3_SPEC, SH_HLSL_3_0_OUTPUT,
- shaderString, &resources, 0, &translatedCode, &infoLog));
-}
-#endif // defined(ANGLE_ENABLE_HLSL)
diff --git a/gfx/angle/src/tests/compiler_tests/EXT_blend_func_extended_test.cpp b/gfx/angle/src/tests/compiler_tests/EXT_blend_func_extended_test.cpp
index 3ac0ff6d8..40aeed28d 100755
--- a/gfx/angle/src/tests/compiler_tests/EXT_blend_func_extended_test.cpp
+++ b/gfx/angle/src/tests/compiler_tests/EXT_blend_func_extended_test.cpp
@@ -124,7 +124,7 @@ class EXTBlendFuncExtendedTest
protected:
virtual void SetUp()
{
- sh::InitBuiltInResources(&mResources);
+ ShInitBuiltInResources(&mResources);
// EXT_draw_buffers is used in some of the shaders for test purposes.
mResources.EXT_draw_buffers = 1;
mResources.NV_draw_buffers = 2;
@@ -137,7 +137,7 @@ class EXTBlendFuncExtendedTest
{
if (mCompiler)
{
- sh::Destruct(mCompiler);
+ ShDestruct(mCompiler);
mCompiler = NULL;
}
}
@@ -145,8 +145,8 @@ class EXTBlendFuncExtendedTest
void InitializeCompiler()
{
DestroyCompiler();
- mCompiler = sh::ConstructCompiler(GL_FRAGMENT_SHADER, testing::get<0>(GetParam()),
- SH_GLSL_COMPATIBILITY_OUTPUT, &mResources);
+ mCompiler = ShConstructCompiler(GL_FRAGMENT_SHADER, testing::get<0>(GetParam()),
+ SH_GLSL_COMPATIBILITY_OUTPUT, &mResources);
ASSERT_TRUE(mCompiler != NULL) << "Compiler could not be constructed.";
}
@@ -163,12 +163,12 @@ class EXTBlendFuncExtendedTest
const char *shader)
{
const char *shaderStrings[] = {version, pragma, shader};
- bool success = sh::Compile(mCompiler, shaderStrings, 3, 0);
+ bool success = ShCompile(mCompiler, shaderStrings, 3, 0);
if (success)
{
return ::testing::AssertionSuccess() << "Compilation success";
}
- return ::testing::AssertionFailure() << sh::GetInfoLog(mCompiler);
+ return ::testing::AssertionFailure() << ShGetInfoLog(mCompiler);
}
protected:
diff --git a/gfx/angle/src/tests/compiler_tests/EmulateGLFragColorBroadcast_test.cpp b/gfx/angle/src/tests/compiler_tests/EmulateGLFragColorBroadcast_test.cpp
index 07cf3fd68..dc286b814 100755
--- a/gfx/angle/src/tests/compiler_tests/EmulateGLFragColorBroadcast_test.cpp
+++ b/gfx/angle/src/tests/compiler_tests/EmulateGLFragColorBroadcast_test.cpp
@@ -12,8 +12,6 @@
#include "GLSLANG/ShaderLang.h"
#include "tests/test_utils/compiler_test.h"
-using namespace sh;
-
namespace
{
diff --git a/gfx/angle/src/tests/compiler_tests/ExpressionLimit_test.cpp b/gfx/angle/src/tests/compiler_tests/ExpressionLimit_test.cpp
index 8f7d7ef4f..5d80f2acf 100755
--- a/gfx/angle/src/tests/compiler_tests/ExpressionLimit_test.cpp
+++ b/gfx/angle/src/tests/compiler_tests/ExpressionLimit_test.cpp
@@ -32,7 +32,7 @@ protected:
// Set up the per compile resources
static void GenerateResources(ShBuiltInResources *res)
{
- sh::InitBuiltInResources(res);
+ ShInitBuiltInResources(res);
res->MaxVertexAttribs = 8;
res->MaxVertexUniformVectors = 128;
@@ -176,17 +176,17 @@ protected:
// to the issue we are testing.
bool CheckShaderCompilation(ShHandle compiler,
const char *source,
- ShCompileOptions compileOptions,
+ int compileOptions,
const char *expected_error)
{
- bool success = sh::Compile(compiler, &source, 1, compileOptions) != 0;
- if (success)
- {
- success = !expected_error;
+ bool success = ShCompile(compiler, &source, 1, compileOptions) != 0;
+ if (success)
+ {
+ success = !expected_error;
}
else
{
- std::string log = sh::GetInfoLog(compiler);
+ std::string log = ShGetInfoLog(compiler);
if (expected_error)
success = log.find(expected_error) != std::string::npos;
@@ -211,8 +211,9 @@ TEST_F(ExpressionLimitTest, ExpressionComplexity)
{
ShShaderSpec spec = SH_WEBGL_SPEC;
ShShaderOutput output = SH_ESSL_OUTPUT;
- ShHandle vertexCompiler = sh::ConstructCompiler(GL_FRAGMENT_SHADER, spec, output, &resources);
- ShCompileOptions compileOptions = SH_LIMIT_EXPRESSION_COMPLEXITY;
+ ShHandle vertexCompiler = ShConstructCompiler(
+ GL_FRAGMENT_SHADER, spec, output, &resources);
+ int compileOptions = SH_LIMIT_EXPRESSION_COMPLEXITY;
// Test expression under the limit passes.
EXPECT_TRUE(CheckShaderCompilation(
@@ -232,15 +233,16 @@ TEST_F(ExpressionLimitTest, ExpressionComplexity)
GenerateShaderWithLongExpression(
kMaxExpressionComplexity + 10).c_str(),
compileOptions & ~SH_LIMIT_EXPRESSION_COMPLEXITY, NULL));
- sh::Destruct(vertexCompiler);
+ ShDestruct(vertexCompiler);
}
TEST_F(ExpressionLimitTest, UnusedExpressionComplexity)
{
ShShaderSpec spec = SH_WEBGL_SPEC;
ShShaderOutput output = SH_ESSL_OUTPUT;
- ShHandle vertexCompiler = sh::ConstructCompiler(GL_FRAGMENT_SHADER, spec, output, &resources);
- ShCompileOptions compileOptions = SH_LIMIT_EXPRESSION_COMPLEXITY;
+ ShHandle vertexCompiler = ShConstructCompiler(
+ GL_FRAGMENT_SHADER, spec, output, &resources);
+ int compileOptions = SH_LIMIT_EXPRESSION_COMPLEXITY;
// Test expression under the limit passes.
EXPECT_TRUE(CheckShaderCompilation(
@@ -260,15 +262,16 @@ TEST_F(ExpressionLimitTest, UnusedExpressionComplexity)
GenerateShaderWithUnusedLongExpression(
kMaxExpressionComplexity + 10).c_str(),
compileOptions & ~SH_LIMIT_EXPRESSION_COMPLEXITY, NULL));
- sh::Destruct(vertexCompiler);
+ ShDestruct(vertexCompiler);
}
TEST_F(ExpressionLimitTest, CallStackDepth)
{
ShShaderSpec spec = SH_WEBGL_SPEC;
ShShaderOutput output = SH_ESSL_OUTPUT;
- ShHandle vertexCompiler = sh::ConstructCompiler(GL_FRAGMENT_SHADER, spec, output, &resources);
- ShCompileOptions compileOptions = SH_LIMIT_CALL_STACK_DEPTH;
+ ShHandle vertexCompiler = ShConstructCompiler(
+ GL_FRAGMENT_SHADER, spec, output, &resources);
+ int compileOptions = SH_LIMIT_CALL_STACK_DEPTH;
// Test call stack under the limit passes.
EXPECT_TRUE(CheckShaderCompilation(
@@ -288,15 +291,16 @@ TEST_F(ExpressionLimitTest, CallStackDepth)
GenerateShaderWithDeepFunctionStack(
kMaxCallStackDepth + 10).c_str(),
compileOptions & ~SH_LIMIT_CALL_STACK_DEPTH, NULL));
- sh::Destruct(vertexCompiler);
+ ShDestruct(vertexCompiler);
}
TEST_F(ExpressionLimitTest, UnusedCallStackDepth)
{
ShShaderSpec spec = SH_WEBGL_SPEC;
ShShaderOutput output = SH_ESSL_OUTPUT;
- ShHandle vertexCompiler = sh::ConstructCompiler(GL_FRAGMENT_SHADER, spec, output, &resources);
- ShCompileOptions compileOptions = SH_LIMIT_CALL_STACK_DEPTH;
+ ShHandle vertexCompiler = ShConstructCompiler(
+ GL_FRAGMENT_SHADER, spec, output, &resources);
+ int compileOptions = SH_LIMIT_CALL_STACK_DEPTH;
// Test call stack under the limit passes.
EXPECT_TRUE(CheckShaderCompilation(
@@ -316,15 +320,16 @@ TEST_F(ExpressionLimitTest, UnusedCallStackDepth)
GenerateShaderWithUnusedDeepFunctionStack(
kMaxCallStackDepth + 10).c_str(),
compileOptions & ~SH_LIMIT_CALL_STACK_DEPTH, NULL));
- sh::Destruct(vertexCompiler);
+ ShDestruct(vertexCompiler);
}
TEST_F(ExpressionLimitTest, Recursion)
{
ShShaderSpec spec = SH_WEBGL_SPEC;
ShShaderOutput output = SH_ESSL_OUTPUT;
- ShHandle vertexCompiler = sh::ConstructCompiler(GL_FRAGMENT_SHADER, spec, output, &resources);
- ShCompileOptions compileOptions = 0;
+ ShHandle vertexCompiler = ShConstructCompiler(
+ GL_FRAGMENT_SHADER, spec, output, &resources);
+ int compileOptions = 0;
static const char* shaderWithRecursion0 = SHADER(
precision mediump float;
@@ -531,15 +536,15 @@ TEST_F(ExpressionLimitTest, Recursion)
EXPECT_TRUE(CheckShaderCompilation(
vertexCompiler, shaderWithNoRecursion,
compileOptions | SH_LIMIT_CALL_STACK_DEPTH, NULL));
- sh::Destruct(vertexCompiler);
+ ShDestruct(vertexCompiler);
}
TEST_F(ExpressionLimitTest, FunctionParameterCount)
{
ShShaderSpec spec = SH_WEBGL_SPEC;
ShShaderOutput output = SH_ESSL_OUTPUT;
- ShHandle compiler = sh::ConstructCompiler(GL_FRAGMENT_SHADER, spec, output, &resources);
- ShCompileOptions compileOptions = SH_LIMIT_EXPRESSION_COMPLEXITY;
+ ShHandle compiler = ShConstructCompiler(GL_FRAGMENT_SHADER, spec, output, &resources);
+ int compileOptions = SH_LIMIT_EXPRESSION_COMPLEXITY;
// Test parameters under the limit succeeds.
EXPECT_TRUE(CheckShaderCompilation(
@@ -553,5 +558,5 @@ TEST_F(ExpressionLimitTest, FunctionParameterCount)
EXPECT_TRUE(CheckShaderCompilation(
compiler, GenerateShaderWithFunctionParameters(kMaxFunctionParameters + 1).c_str(),
compileOptions & ~SH_LIMIT_EXPRESSION_COMPLEXITY, nullptr));
- sh::Destruct(compiler);
+ ShDestruct(compiler);
}
diff --git a/gfx/angle/src/tests/compiler_tests/FragDepth_test.cpp b/gfx/angle/src/tests/compiler_tests/FragDepth_test.cpp
index 1d3e358ca..d3c87987a 100755
--- a/gfx/angle/src/tests/compiler_tests/FragDepth_test.cpp
+++ b/gfx/angle/src/tests/compiler_tests/FragDepth_test.cpp
@@ -23,7 +23,7 @@ class FragDepthTest : public testing::TestWithParam<bool>
protected:
void SetUp() override
{
- sh::InitBuiltInResources(&mResources);
+ ShInitBuiltInResources(&mResources);
mCompiler = nullptr;
mResources.EXT_frag_depth = GetParam();
}
@@ -33,7 +33,7 @@ class FragDepthTest : public testing::TestWithParam<bool>
{
if (mCompiler)
{
- sh::Destruct(mCompiler);
+ ShDestruct(mCompiler);
mCompiler = nullptr;
}
}
@@ -41,8 +41,8 @@ class FragDepthTest : public testing::TestWithParam<bool>
void InitializeCompiler()
{
DestroyCompiler();
- mCompiler = sh::ConstructCompiler(GL_FRAGMENT_SHADER, SH_GLES3_SPEC,
- SH_GLSL_COMPATIBILITY_OUTPUT, &mResources);
+ mCompiler = ShConstructCompiler(GL_FRAGMENT_SHADER, SH_GLES3_SPEC,
+ SH_GLSL_COMPATIBILITY_OUTPUT, &mResources);
ASSERT_TRUE(mCompiler != nullptr) << "Compiler could not be constructed.";
}
@@ -51,12 +51,12 @@ class FragDepthTest : public testing::TestWithParam<bool>
const char *shader)
{
const char *shaderStrings[] = {version, pragma, shader};
- bool success = sh::Compile(mCompiler, shaderStrings, 3, 0);
+ bool success = ShCompile(mCompiler, shaderStrings, 3, 0);
if (success)
{
return ::testing::AssertionSuccess() << "Compilation success";
}
- return ::testing::AssertionFailure() << sh::GetInfoLog(mCompiler);
+ return ::testing::AssertionFailure() << ShGetInfoLog(mCompiler);
}
protected:
diff --git a/gfx/angle/src/tests/compiler_tests/GLSLCompatibilityOutput_test.cpp b/gfx/angle/src/tests/compiler_tests/GLSLCompatibilityOutput_test.cpp
index 8adec774a..326d70d29 100755
--- a/gfx/angle/src/tests/compiler_tests/GLSLCompatibilityOutput_test.cpp
+++ b/gfx/angle/src/tests/compiler_tests/GLSLCompatibilityOutput_test.cpp
@@ -12,8 +12,6 @@
#include "GLSLANG/ShaderLang.h"
#include "tests/test_utils/compiler_test.h"
-using namespace sh;
-
class GLSLCompatibilityOutputTest : public MatchOutputCodeTest
{
public:
diff --git a/gfx/angle/src/tests/compiler_tests/IntermNode_test.cpp b/gfx/angle/src/tests/compiler_tests/IntermNode_test.cpp
index 1a14ad86c..b0f7404d3 100755
--- a/gfx/angle/src/tests/compiler_tests/IntermNode_test.cpp
+++ b/gfx/angle/src/tests/compiler_tests/IntermNode_test.cpp
@@ -13,8 +13,6 @@
#include "compiler/translator/IntermNode.h"
#include "compiler/translator/PoolAlloc.h"
-using namespace sh;
-
class IntermNodeTest : public testing::Test
{
public:
@@ -149,8 +147,10 @@ TEST_F(IntermNodeTest, DeepCopyBinaryNode)
{
TType type(EbtFloat, EbpHigh);
- TIntermBinary *original = new TIntermBinary(EOpAdd, createTestSymbol(), createTestSymbol());
+ TIntermBinary *original = new TIntermBinary(EOpAdd);
original->setLine(getTestSourceLoc());
+ original->setLeft(createTestSymbol());
+ original->setRight(createTestSymbol());
TIntermTyped *copyTyped = original->deepCopy();
TIntermBinary *copy = copyTyped->getAsBinaryNode();
ASSERT_NE(nullptr, copy);
@@ -168,8 +168,9 @@ TEST_F(IntermNodeTest, DeepCopyUnaryNode)
{
TType type(EbtFloat, EbpHigh);
- TIntermUnary *original = new TIntermUnary(EOpPreIncrement, createTestSymbol());
+ TIntermUnary *original = new TIntermUnary(EOpPreIncrement);
original->setLine(getTestSourceLoc());
+ original->setOperand(createTestSymbol());
TIntermTyped *copyTyped = original->deepCopy();
TIntermUnary *copy = copyTyped->getAsUnaryNode();
ASSERT_NE(nullptr, copy);
@@ -209,24 +210,24 @@ TEST_F(IntermNodeTest, DeepCopyAggregateNode)
}
}
-// Check that the deep copy of a ternary node is an actual copy with the same attributes as the
+// Check that the deep copy of a selection node is an actual copy with the same attributes as the
// original. Child nodes also need to be copies with the same attributes as the original children.
-TEST_F(IntermNodeTest, DeepCopyTernaryNode)
+TEST_F(IntermNodeTest, DeepCopySelectionNode)
{
TType type(EbtFloat, EbpHigh);
- TIntermTernary *original = new TIntermTernary(createTestSymbol(TType(EbtBool, EbpUndefined)),
- createTestSymbol(), createTestSymbol());
+ TIntermSelection *original = new TIntermSelection(
+ createTestSymbol(TType(EbtBool, EbpUndefined)), createTestSymbol(), createTestSymbol());
original->setLine(getTestSourceLoc());
TIntermTyped *copyTyped = original->deepCopy();
- TIntermTernary *copy = copyTyped->getAsTernaryNode();
+ TIntermSelection *copy = copyTyped->getAsSelectionNode();
ASSERT_NE(nullptr, copy);
ASSERT_NE(original, copy);
checkTestSourceLoc(copy->getLine());
checkTypeEqualWithQualifiers(original->getType(), copy->getType());
checkSymbolCopy(original->getCondition(), copy->getCondition());
- checkSymbolCopy(original->getTrueExpression(), copy->getTrueExpression());
- checkSymbolCopy(original->getFalseExpression(), copy->getFalseExpression());
+ checkSymbolCopy(original->getTrueBlock(), copy->getTrueBlock());
+ checkSymbolCopy(original->getFalseBlock(), copy->getFalseBlock());
}
diff --git a/gfx/angle/src/tests/compiler_tests/MalformedShader_test.cpp b/gfx/angle/src/tests/compiler_tests/MalformedShader_test.cpp
index e84fc7014..51ad72a0f 100755
--- a/gfx/angle/src/tests/compiler_tests/MalformedShader_test.cpp
+++ b/gfx/angle/src/tests/compiler_tests/MalformedShader_test.cpp
@@ -12,8 +12,6 @@
#include "GLSLANG/ShaderLang.h"
#include "compiler/translator/TranslatorESSL.h"
-using namespace sh;
-
class MalformedShaderTest : public testing::Test
{
public:
@@ -23,7 +21,7 @@ class MalformedShaderTest : public testing::Test
virtual void SetUp()
{
ShBuiltInResources resources;
- sh::InitBuiltInResources(&resources);
+ ShInitBuiltInResources(&resources);
mTranslator = new TranslatorESSL(GL_FRAGMENT_SHADER, SH_GLES3_SPEC);
ASSERT_TRUE(mTranslator->Init(resources));
@@ -53,7 +51,7 @@ class MalformedShaderTest : public testing::Test
protected:
std::string mInfoLog;
TranslatorESSL *mTranslator;
- ShCompileOptions mExtraCompileOptions;
+ int mExtraCompileOptions;
};
class MalformedVertexShaderTest : public MalformedShaderTest
@@ -65,7 +63,7 @@ class MalformedVertexShaderTest : public MalformedShaderTest
void SetUp() override
{
ShBuiltInResources resources;
- sh::InitBuiltInResources(&resources);
+ ShInitBuiltInResources(&resources);
mTranslator = new TranslatorESSL(GL_VERTEX_SHADER, SH_GLES3_SPEC);
ASSERT_TRUE(mTranslator->Init(resources));
@@ -81,7 +79,7 @@ class MalformedWebGL2ShaderTest : public MalformedShaderTest
void SetUp() override
{
ShBuiltInResources resources;
- sh::InitBuiltInResources(&resources);
+ ShInitBuiltInResources(&resources);
mTranslator = new TranslatorESSL(GL_FRAGMENT_SHADER, SH_WEBGL2_SPEC);
ASSERT_TRUE(mTranslator->Init(resources));
@@ -97,7 +95,7 @@ class MalformedWebGL1ShaderTest : public MalformedShaderTest
void SetUp() override
{
ShBuiltInResources resources;
- sh::InitBuiltInResources(&resources);
+ ShInitBuiltInResources(&resources);
mTranslator = new TranslatorESSL(GL_FRAGMENT_SHADER, SH_WEBGL_SPEC);
ASSERT_TRUE(mTranslator->Init(resources));
@@ -113,7 +111,7 @@ class MalformedVertexShaderGLES31Test : public MalformedShaderTest
void SetUp() override
{
ShBuiltInResources resources;
- sh::InitBuiltInResources(&resources);
+ ShInitBuiltInResources(&resources);
mTranslator = new TranslatorESSL(GL_VERTEX_SHADER, SH_GLES3_1_SPEC);
ASSERT_TRUE(mTranslator->Init(resources));
}
@@ -128,7 +126,7 @@ class MalformedFragmentShaderGLES31Test : public MalformedShaderTest
void SetUp() override
{
ShBuiltInResources resources;
- sh::InitBuiltInResources(&resources);
+ ShInitBuiltInResources(&resources);
mTranslator = new TranslatorESSL(GL_FRAGMENT_SHADER, SH_GLES3_1_SPEC);
ASSERT_TRUE(mTranslator->Init(resources));
}
@@ -143,7 +141,7 @@ class MalformedComputeShaderTest : public MalformedShaderTest
void SetUp() override
{
ShBuiltInResources resources;
- sh::InitBuiltInResources(&resources);
+ ShInitBuiltInResources(&resources);
mTranslator = new TranslatorESSL(GL_COMPUTE_SHADER, SH_GLES3_1_SPEC);
ASSERT_TRUE(mTranslator->Init(resources));
}
@@ -2325,7 +2323,7 @@ TEST_F(MalformedComputeShaderTest, CorrectUsageOfComputeBuiltins)
}
}
-// It is illegal to write to a special variable.
+// It is illegal to write to a special variable
TEST_F(MalformedComputeShaderTest, SpecialVariableNumWorkGroups)
{
const std::string &shaderString =
@@ -2341,7 +2339,7 @@ TEST_F(MalformedComputeShaderTest, SpecialVariableNumWorkGroups)
}
}
-// It is illegal to write to a special variable.
+// It is illegal to write to a special variable
TEST_F(MalformedComputeShaderTest, SpecialVariableWorkGroupID)
{
const std::string &shaderString =
@@ -2357,7 +2355,7 @@ TEST_F(MalformedComputeShaderTest, SpecialVariableWorkGroupID)
}
}
-// It is illegal to write to a special variable.
+// It is illegal to write to a special variable
TEST_F(MalformedComputeShaderTest, SpecialVariableLocalInvocationID)
{
const std::string &shaderString =
@@ -2373,7 +2371,7 @@ TEST_F(MalformedComputeShaderTest, SpecialVariableLocalInvocationID)
}
}
-// It is illegal to write to a special variable.
+// It is illegal to write to a special variable
TEST_F(MalformedComputeShaderTest, SpecialVariableGlobalInvocationID)
{
const std::string &shaderString =
@@ -2389,7 +2387,7 @@ TEST_F(MalformedComputeShaderTest, SpecialVariableGlobalInvocationID)
}
}
-// It is illegal to write to a special variable.
+// It is illegal to write to a special variable
TEST_F(MalformedComputeShaderTest, SpecialVariableLocalInvocationIndex)
{
const std::string &shaderString =
@@ -2405,7 +2403,7 @@ TEST_F(MalformedComputeShaderTest, SpecialVariableLocalInvocationIndex)
}
}
-// It is illegal to write to a special variable.
+// It is illegal to write to a special variable
TEST_F(MalformedComputeShaderTest, SpecialVariableWorkGroupSize)
{
const std::string &shaderString =
@@ -2437,722 +2435,3 @@ TEST_F(MalformedShaderTest, SamplerUnaryOperator)
FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
}
}
-
-// Invariant cannot be used with a work group size declaration.
-TEST_F(MalformedComputeShaderTest, InvariantBlockSize)
-{
- const std::string &shaderString =
- "#version 310 es\n"
- "invariant layout(local_size_x = 15) in;\n"
- "void main() {\n"
- "}\n";
-
- if (compile(shaderString))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// Invariant cannot be used with a non-output variable in ESSL3.
-TEST_F(MalformedShaderTest, InvariantNonOuput)
-{
- const std::string &shaderString =
- "#version 300 es\n"
- "invariant int value;\n"
- "void main() {\n"
- "}\n";
-
- if (compile(shaderString))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// Invariant declaration should follow the following format "invariant <out variable name>".
-// Test having an incorrect qualifier in the invariant declaration.
-TEST_F(MalformedShaderTest, InvariantDeclarationWithStorageQualifier)
-{
- const std::string &shaderString =
- "#version 300 es\n"
- "precision mediump float;\n"
- "out vec4 foo;\n"
- "invariant centroid foo;\n"
- "void main() {\n"
- "}\n";
- if (compile(shaderString))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// Invariant declaration should follow the following format "invariant <out variable name>".
-// Test having an incorrect precision qualifier in the invariant declaration.
-TEST_F(MalformedShaderTest, InvariantDeclarationWithPrecisionQualifier)
-{
- const std::string &shaderString =
- "#version 300 es\n"
- "precision mediump float;\n"
- "out vec4 foo;\n"
- "invariant highp foo;\n"
- "void main() {\n"
- "}\n";
- if (compile(shaderString))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// Invariant declaration should follow the following format "invariant <out variable name>".
-// Test having an incorrect layout qualifier in the invariant declaration.
-TEST_F(MalformedShaderTest, InvariantDeclarationWithLayoutQualifier)
-{
- const std::string &shaderString =
- "#version 300 es\n"
- "precision mediump float;\n"
- "out vec4 foo;\n"
- "invariant layout(location=0) foo;\n"
- "void main() {\n"
- "}\n";
- if (compile(shaderString))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// Variable declaration with both invariant and layout qualifiers is not valid in the formal grammar
-// provided in the ESSL 3.00 spec. ESSL 3.10 starts allowing this combination, but ESSL 3.00 should
-// still disallow it.
-TEST_F(MalformedShaderTest, VariableDeclarationWithInvariantAndLayoutQualifierESSL300)
-{
- const std::string &shaderString =
- "#version 300 es\n"
- "precision mediump float;\n"
- "invariant layout(location = 0) out vec4 my_FragColor;\n"
- "void main() {\n"
- "}\n";
- if (compile(shaderString))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// Bit shift with a rhs value > 31 has an undefined result in the GLSL spec. We disallow it.
-// ESSL 3.00.6 section 5.9.
-TEST_F(MalformedShaderTest, ShiftBy32)
-{
- const std::string &shaderString =
- "#version 300 es\n"
- "precision mediump float;\n"
- "void main() {\n"
- " uint u = 1u << 32u;\n"
- "}\n";
- if (compile(shaderString))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// Test that deferring global variable init works with an empty main().
-TEST_F(MalformedShaderTest, DeferGlobalVariableInitWithEmptyMain)
-{
- const std::string &shaderString =
- "precision mediump float;\n"
- "uniform float u;\n"
- "float foo = u;\n"
- "void main() {}\n";
- if (!compile(shaderString))
- {
- FAIL() << "Shader compilation failed, expecting success " << mInfoLog;
- }
-}
-
-// Test that pruning empty declarations from loop init expression works.
-TEST_F(MalformedShaderTest, EmptyDeclarationAsLoopInit)
-{
- const std::string &shaderString =
- "#version 300 es\n"
- "precision mediump float;\n"
- "out vec4 my_FragColor;\n"
- "void main()\n"
- "{\n"
- " int i = 0;\n"
- " for (int; i < 3; i++)\n"
- " {\n"
- " my_FragColor = vec4(i);\n"
- " }\n"
- "}\n";
- if (!compile(shaderString))
- {
- FAIL() << "Shader compilation failed, expecting success " << mInfoLog;
- }
-}
-// r32f, r32i, r32ui do not require either the writeonly or readonly memory qualifiers.
-// GLSL ES 3.10, Revision 4, 4.9 Memory Access Qualifiers
-TEST_F(MalformedFragmentShaderGLES31Test, ImageR32FNoMemoryQualifier)
-{
- const std::string &shaderString =
- "#version 310 es\n"
- "precision mediump float;\n"
- "precision mediump image2D;\n"
- "in vec4 myInput;\n"
- "layout(r32f) uniform image2D myImage;\n"
- "void main() {\n"
- "}\n";
-
- if (!compile(shaderString))
- {
- FAIL() << "Shader compilation failed, expecting success " << mInfoLog;
- }
-}
-
-// Images which do not have r32f, r32i or r32ui as internal format, must have readonly or writeonly
-// specified.
-// GLSL ES 3.10, Revision 4, 4.9 Memory Access Qualifiers
-TEST_F(MalformedFragmentShaderGLES31Test, ImageR32FWithCorrectMemoryQualifier)
-{
- const std::string &shaderString =
- "#version 310 es\n"
- "precision mediump float;\n"
- "precision mediump image2D;\n"
- "in vec4 myInput;\n"
- "layout(rgba32f) uniform image2D myImage;\n"
- "void main() {\n"
- "}\n";
-
- if (compile(shaderString))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// It is a compile-time error to call imageStore when the image is qualified as readonly.
-// GLSL ES 3.10 Revision 4, 4.9 Memory Access Qualifiers
-TEST_F(MalformedFragmentShaderGLES31Test, StoreInReadOnlyImage)
-{
- const std::string &shaderString =
- "#version 310 es\n"
- "precision mediump float;\n"
- "precision mediump image2D;\n"
- "in vec4 myInput;\n"
- "layout(r32f) uniform readonly image2D myImage;\n"
- "void main() {\n"
- " imageStore(myImage, ivec2(0), vec4(1.0));\n"
- "}\n";
-
- if (compile(shaderString))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// It is a compile-time error to call imageLoad when the image is qualified as writeonly.
-// GLSL ES 3.10 Revision 4, 4.9 Memory Access Qualifiers
-TEST_F(MalformedFragmentShaderGLES31Test, LoadFromWriteOnlyImage)
-{
- const std::string &shaderString =
- "#version 310 es\n"
- "precision mediump float;\n"
- "precision mediump image2D;\n"
- "in vec4 myInput;\n"
- "layout(r32f) uniform writeonly image2D myImage;\n"
- "void main() {\n"
- " imageLoad(myImage, ivec2(0));\n"
- "}\n";
-
- if (compile(shaderString))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// A valid declaration and usage of an image3D.
-TEST_F(MalformedFragmentShaderGLES31Test, ValidImage3D)
-{
- const std::string &shaderString =
- "#version 310 es\n"
- "precision mediump float;\n"
- "precision mediump image3D;\n"
- "in vec4 myInput;\n"
- "layout(rgba32f) uniform readonly image3D myImage;\n"
- "void main() {\n"
- " imageLoad(myImage, ivec3(0));\n"
- "}\n";
-
- if (!compile(shaderString))
- {
- FAIL() << "Shader compilation failed, expecting success " << mInfoLog;
- }
-}
-
-// A valid declaration and usage of an imageCube.
-TEST_F(MalformedFragmentShaderGLES31Test, ValidImageCube)
-{
- const std::string &shaderString =
- "#version 310 es\n"
- "precision mediump float;\n"
- "precision mediump imageCube;\n"
- "in vec4 myInput;\n"
- "layout(rgba32f) uniform readonly imageCube myImage;\n"
- "void main() {\n"
- " imageLoad(myImage, ivec3(0));\n"
- "}\n";
-
- if (!compile(shaderString))
- {
- FAIL() << "Shader compilation failed, expecting success " << mInfoLog;
- }
-}
-
-// A valid declaration and usage of an image2DArray.
-TEST_F(MalformedFragmentShaderGLES31Test, ValidImage2DArray)
-{
- const std::string &shaderString =
- "#version 310 es\n"
- "precision mediump float;\n"
- "precision mediump image2DArray;\n"
- "in vec4 myInput;\n"
- "layout(rgba32f) uniform readonly image2DArray myImage;\n"
- "void main() {\n"
- " imageLoad(myImage, ivec3(0));\n"
- "}\n";
-
- if (!compile(shaderString))
- {
- FAIL() << "Shader compilation failed, expecting success " << mInfoLog;
- }
-}
-
-// Images cannot be l-values.
-// GLSL ES 3.10 Revision 4, 4.1.7 Opaque Types
-TEST_F(MalformedFragmentShaderGLES31Test, ImageLValueFunctionDefinitionInOut)
-{
- const std::string &shaderString =
- "#version 310 es\n"
- "precision mediump float;\n"
- "precision mediump image2D;\n"
- "void myFunc(inout image2D someImage) {}\n"
- "void main() {\n"
- "}\n";
-
- if (compile(shaderString))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// Cannot assign to images.
-// GLSL ES 3.10 Revision 4, 4.1.7 Opaque Types
-TEST_F(MalformedFragmentShaderGLES31Test, ImageAssignment)
-{
- const std::string &shaderString =
- "#version 310 es\n"
- "precision mediump float;\n"
- "precision mediump image2D;\n"
- "layout(rgba32f) uniform readonly image2D myImage;\n"
- "layout(rgba32f) uniform readonly image2D myImage2;\n"
- "void main() {\n"
- " myImage = myImage2;\n"
- "}\n";
-
- if (compile(shaderString))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// Passing an image qualifier to a function should not be able to discard the readonly qualifier.
-// GLSL ES 3.10 Revision 4, 4.9 Memory Access Qualifiers
-TEST_F(MalformedFragmentShaderGLES31Test, ReadOnlyQualifierMissingInFunctionArgument)
-{
- const std::string &shaderString =
- "#version 310 es\n"
- "precision mediump float;\n"
- "precision mediump image2D;\n"
- "layout(rgba32f) uniform readonly image2D myImage;\n"
- "void myFunc(in image2D someImage) {}\n"
- "void main() {\n"
- " myFunc(myImage);\n"
- "}\n";
-
- if (compile(shaderString))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// Passing an image qualifier to a function should not be able to discard the writeonly qualifier.
-// GLSL ES 3.10 Revision 4, 4.9 Memory Access Qualifiers
-TEST_F(MalformedFragmentShaderGLES31Test, WriteOnlyQualifierMissingInFunctionArgument)
-{
- const std::string &shaderString =
- "#version 310 es\n"
- "precision mediump float;\n"
- "precision mediump image2D;\n"
- "layout(rgba32f) uniform writeonly image2D myImage;\n"
- "void myFunc(in image2D someImage) {}\n"
- "void main() {\n"
- " myFunc(myImage);\n"
- "}\n";
-
- if (compile(shaderString))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// Passing an image parameter as an argument to another function should not be able to discard the
-// writeonly qualifier.
-// GLSL ES 3.10 Revision 4, 4.9 Memory Access Qualifiers
-TEST_F(MalformedFragmentShaderGLES31Test, DiscardWriteonlyInFunctionBody)
-{
- const std::string &shaderString =
- "#version 310 es\n"
- "precision mediump float;\n"
- "precision mediump image2D;\n"
- "layout(rgba32f) uniform writeonly image2D myImage;\n"
- "void myFunc1(in image2D someImage) {}\n"
- "void myFunc2(in writeonly image2D someImage) { myFunc1(someImage); }\n"
- "void main() {\n"
- " myFunc2(myImage);\n"
- "}\n";
-
- if (compile(shaderString))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// The memory qualifiers for the image declaration and function argument match and the test should
-// pass.
-TEST_F(MalformedFragmentShaderGLES31Test, CorrectImageMemoryQualifierSpecified)
-{
- const std::string &shaderString =
- "#version 310 es\n"
- "precision mediump float;\n"
- "precision mediump image2D;\n"
- "layout(r32f) uniform image2D myImage;\n"
- "void myFunc(in image2D someImage) {}\n"
- "void main() {\n"
- " myFunc(myImage);\n"
- "}\n";
-
- if (!compile(shaderString))
- {
- FAIL() << "Shader compilation failed, expecting success " << mInfoLog;
- }
-}
-
-// The test adds additional qualifiers to the argument in the function header.
-// This is correct since no memory qualifiers are discarded upon the function call.
-// GLSL ES 3.10 Revision 4, 4.9 Memory Access Qualifiers
-TEST_F(MalformedFragmentShaderGLES31Test, CorrectImageMemoryQualifierSpecified2)
-{
- const std::string &shaderString =
- "#version 310 es\n"
- "precision mediump float;\n"
- "precision mediump image2D;\n"
- "layout(r32f) uniform image2D myImage;\n"
- "void myFunc(in readonly writeonly image2D someImage) {}\n"
- "void main() {\n"
- " myFunc(myImage);\n"
- "}\n";
-
- if (!compile(shaderString))
- {
- FAIL() << "Shader compilation failed, expecting success " << mInfoLog;
- }
-}
-
-// Images are not allowed in structs.
-// GLSL ES 3.10 Revision 4, 4.1.8 Structures
-TEST_F(MalformedFragmentShaderGLES31Test, ImageInStruct)
-{
- const std::string &shaderString =
- "#version 310 es\n"
- "precision mediump float;\n"
- "precision mediump image2D;\n"
- "struct myStruct { layout(r32f) image2D myImage; };\n"
- "void main() {\n"
- "}\n";
-
- if (compile(shaderString))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// Images are not allowed in interface blocks.
-// GLSL ES 3.10 Revision 4, 4.3.9 Interface Blocks
-TEST_F(MalformedFragmentShaderGLES31Test, ImageInInterfaceBlock)
-{
- const std::string &shaderString =
- "#version 310 es\n"
- "precision mediump float;\n"
- "precision mediump image2D;\n"
- "uniform myBlock { layout(r32f) image2D myImage; };\n"
- "void main() {\n"
- "}\n";
-
- if (compile(shaderString))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// Readonly used with an interface block.
-TEST_F(MalformedFragmentShaderGLES31Test, ReadonlyWithInterfaceBlock)
-{
- const std::string &shaderString =
- "#version 310 es\n"
- "precision mediump float;\n"
- "uniform readonly myBlock { float something; };\n"
- "void main() {\n"
- "}\n";
-
- if (compile(shaderString))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// Readonly used with an invariant.
-TEST_F(MalformedFragmentShaderGLES31Test, ReadonlyWithInvariant)
-{
- const std::string &shaderString =
- "#version 310 es\n"
- "precision mediump float;\n"
- "out vec4 something;\n"
- "invariant readonly something;\n"
- "void main() {\n"
- "}\n";
-
- if (compile(shaderString))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// Readonly used with a member of a structure.
-TEST_F(MalformedFragmentShaderGLES31Test, ReadonlyWithStructMember)
-{
- const std::string &shaderString =
- "#version 310 es\n"
- "precision mediump float;\n"
- "out vec4 something;\n"
- "struct MyStruct { readonly float myMember; };\n"
- "void main() {\n"
- "}\n";
-
- if (compile(shaderString))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// It should not be possible to use an internal format layout qualifier with an interface block.
-TEST_F(MalformedFragmentShaderGLES31Test, ImageInternalFormatWithInterfaceBlock)
-{
- const std::string &shaderString =
- "#version 310 es\n"
- "precision mediump float;\n"
- "out vec4 something;\n"
- "layout(rgba32f) uniform MyStruct { float myMember; };\n"
- "void main() {\n"
- "}\n";
-
- if (compile(shaderString))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// It should not be possible to use an internal format layout qualifier with a uniform without a
-// type.
-TEST_F(MalformedFragmentShaderGLES31Test, ImageInternalFormatInGlobalLayoutQualifier)
-{
- const std::string &shaderString =
- "#version 310 es\n"
- "precision mediump float;\n"
- "out vec4 something;\n"
- "layout(rgba32f) uniform;\n"
- "void main() {\n"
- "}\n";
-
- if (compile(shaderString))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// ESSL 1.00 section 4.1.7.
-// Samplers are not allowed as operands for most operations. Test this for ternary operator.
-TEST_F(MalformedShaderTest, SamplerAsTernaryOperand)
-{
- const std::string &shaderString =
- "precision mediump float;\n"
- "uniform bool u;\n"
- "uniform sampler2D s1;\n"
- "uniform sampler2D s2;\n"
- "void main() {\n"
- " gl_FragColor = texture2D(u ? s1 : s2, vec2(0, 0));\n"
- "}\n";
-
- if (compile(shaderString))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// ESSL 1.00.17 section 4.5.2.
-// ESSL 3.00.6 section 4.5.3.
-// Precision must be specified for floats. Test this with a declaration with no qualifiers.
-TEST_F(MalformedShaderTest, FloatDeclarationNoQualifiersNoPrecision)
-{
- const std::string &shaderString =
- "vec4 foo = vec4(0.0);\n"
- "void main()\n"
- "{\n"
- " gl_FragColor = foo;\n"
- "}\n";
-
- if (compile(shaderString))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// Check compiler doesn't crash on incorrect unsized array declarations.
-TEST_F(MalformedShaderTest, IncorrectUnsizedArray)
-{
- const std::string &shaderString =
- "#version 300 es\n"
- "precision mediump float;\n"
- "float foo[] = 0.0;\n"
- "out vec4 my_FragColor;\n"
- "void main()\n"
- "{\n"
- " foo[0] = 1.0;\n"
- " my_FragColor = vec4(foo[0]);\n"
- "}\n";
-
- if (compile(shaderString))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// Check compiler doesn't crash when a bvec is on the right hand side of a logical operator.
-// ESSL 3.00.6 section 5.9.
-TEST_F(MalformedShaderTest, LogicalOpRHSIsBVec)
-{
- const std::string &shaderString =
- "#version 300 es\n"
- "void main()\n"
- "{\n"
- " bool b;\n"
- " bvec3 b3;\n"
- " b && b3;\n"
- "}\n";
-
- if (compile(shaderString))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// Check compiler doesn't crash when there's an unsized array constructor with no parameters.
-// ESSL 3.00.6 section 4.1.9: Array size must be greater than zero.
-TEST_F(MalformedShaderTest, UnsizedArrayConstructorNoParameters)
-{
- const std::string &shaderString =
- "#version 300 es\n"
- "void main()\n"
- "{\n"
- " int[]();\n"
- "}\n";
-
- if (compile(shaderString))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// Passing an image parameter as an argument to another function should not be able to discard the
-// coherent qualifier.
-TEST_F(MalformedFragmentShaderGLES31Test, CoherentQualifierMissingInFunctionArgument)
-{
- const std::string &shaderString =
- "#version 310 es\n"
- "precision mediump float;\n"
- "precision mediump image2D;\n"
- "layout(r32f) uniform coherent image2D myImage;\n"
- "void myFunc(in image2D someImage) {}\n"
- "void main() {\n"
- " myFunc(myImage);\n"
- "}\n";
-
- if (compile(shaderString))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// Passing an image parameter as an argument to another function should not be able to discard the
-// volatile qualifier.
-TEST_F(MalformedFragmentShaderGLES31Test, VolatileQualifierMissingInFunctionArgument)
-{
- const std::string &shaderString =
- "#version 310 es\n"
- "precision mediump float;\n"
- "precision mediump image2D;\n"
- "layout(r32f) uniform volatile image2D myImage;\n"
- "void myFunc(in image2D someImage) {}\n"
- "void main() {\n"
- " myFunc(myImage);\n"
- "}\n";
-
- if (compile(shaderString))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// The restrict qualifier can be discarded from a function argument.
-// GLSL ES 3.10 Revision 4, 4.9 Memory Access Qualifiers
-TEST_F(MalformedFragmentShaderGLES31Test, RestrictQualifierDiscardedInFunctionArgument)
-{
- const std::string &shaderString =
- "#version 310 es\n"
- "precision mediump float;\n"
- "precision mediump image2D;\n"
- "layout(r32f) uniform restrict image2D myImage;\n"
- "void myFunc(in image2D someImage) {}\n"
- "void main() {\n"
- " myFunc(myImage);\n"
- "}\n";
-
- if (!compile(shaderString))
- {
- FAIL() << "Shader compilation failed, expecting success " << mInfoLog;
- }
-}
-
-// Function image arguments can be overqualified.
-// GLSL ES 3.10 Revision 4, 4.9 Memory Access Qualifiers
-TEST_F(MalformedFragmentShaderGLES31Test, OverqualifyingImageParameter)
-{
- const std::string &shaderString =
- "#version 310 es\n"
- "precision mediump float;\n"
- "precision mediump image2D;\n"
- "layout(r32f) uniform image2D myImage;\n"
- "void myFunc(in coherent volatile image2D someImage) {}\n"
- "void main() {\n"
- " myFunc(myImage);\n"
- "}\n";
-
- if (!compile(shaderString))
- {
- FAIL() << "Shader compilation failed, expecting success " << mInfoLog;
- }
-} \ No newline at end of file
diff --git a/gfx/angle/src/tests/compiler_tests/NV_draw_buffers_test.cpp b/gfx/angle/src/tests/compiler_tests/NV_draw_buffers_test.cpp
index 13a44fd59..49c43c93c 100755
--- a/gfx/angle/src/tests/compiler_tests/NV_draw_buffers_test.cpp
+++ b/gfx/angle/src/tests/compiler_tests/NV_draw_buffers_test.cpp
@@ -12,8 +12,6 @@
#include "GLSLANG/ShaderLang.h"
#include "tests/test_utils/compiler_test.h"
-using namespace sh;
-
class NVDrawBuffersTest : public MatchOutputCodeTest
{
public:
diff --git a/gfx/angle/src/tests/compiler_tests/Pack_Unpack_test.cpp b/gfx/angle/src/tests/compiler_tests/Pack_Unpack_test.cpp
index a6333e78e..85673d5f7 100755
--- a/gfx/angle/src/tests/compiler_tests/Pack_Unpack_test.cpp
+++ b/gfx/angle/src/tests/compiler_tests/Pack_Unpack_test.cpp
@@ -12,8 +12,6 @@
#include "GLSLANG/ShaderLang.h"
#include "tests/test_utils/compiler_test.h"
-using namespace sh;
-
namespace
{
diff --git a/gfx/angle/src/tests/compiler_tests/PruneEmptyDeclarations_test.cpp b/gfx/angle/src/tests/compiler_tests/PruneEmptyDeclarations_test.cpp
index 6b59e0cd5..4652117c4 100755
--- a/gfx/angle/src/tests/compiler_tests/PruneEmptyDeclarations_test.cpp
+++ b/gfx/angle/src/tests/compiler_tests/PruneEmptyDeclarations_test.cpp
@@ -12,8 +12,6 @@
#include "GLSLANG/ShaderLang.h"
#include "tests/test_utils/compiler_test.h"
-using namespace sh;
-
namespace
{
diff --git a/gfx/angle/src/tests/compiler_tests/PruneUnusedFunctions_test.cpp b/gfx/angle/src/tests/compiler_tests/PruneUnusedFunctions_test.cpp
index fe710d8e6..8880abe3f 100755
--- a/gfx/angle/src/tests/compiler_tests/PruneUnusedFunctions_test.cpp
+++ b/gfx/angle/src/tests/compiler_tests/PruneUnusedFunctions_test.cpp
@@ -12,8 +12,6 @@
#include "GLSLANG/ShaderLang.h"
#include "tests/test_utils/compiler_test.h"
-using namespace sh;
-
namespace
{
diff --git a/gfx/angle/src/tests/compiler_tests/QualificationOrderESSL31_test.cpp b/gfx/angle/src/tests/compiler_tests/QualificationOrderESSL31_test.cpp
deleted file mode 100644
index dd3aa9a65..000000000
--- a/gfx/angle/src/tests/compiler_tests/QualificationOrderESSL31_test.cpp
+++ /dev/null
@@ -1,184 +0,0 @@
-//
-// Copyright (c) 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// QualificationOrderESSL31_test.cpp:
-// OpenGL ES 3.1 removes the strict order of qualifiers imposed by the grammar.
-// This file contains tests for invalid order and usage of qualifiers in GLSL ES 3.10.
-
-#include "gtest/gtest.h"
-
-#include "angle_gl.h"
-#include "compiler/translator/TranslatorESSL.h"
-#include "GLSLANG/ShaderLang.h"
-#include "tests/test_utils/compiler_test.h"
-
-using namespace sh;
-
-class QualificationVertexShaderTestESSL31 : public testing::Test
-{
- public:
- QualificationVertexShaderTestESSL31() {}
- protected:
- virtual void SetUp()
- {
- ShBuiltInResources resources;
- InitBuiltInResources(&resources);
-
- mTranslator = new TranslatorESSL(GL_VERTEX_SHADER, SH_GLES3_1_SPEC);
- ASSERT_TRUE(mTranslator->Init(resources));
- }
-
- virtual void TearDown() { delete mTranslator; }
-
- // Return true when compilation succeeds
- bool compile(const std::string &shaderString)
- {
- const char *shaderStrings[] = {shaderString.c_str()};
- mASTRoot = mTranslator->compileTreeForTesting(shaderStrings, 1,
- SH_INTERMEDIATE_TREE | SH_VARIABLES);
- TInfoSink &infoSink = mTranslator->getInfoSink();
- mInfoLog = infoSink.info.c_str();
- return mASTRoot != nullptr;
- }
-
- const TIntermSymbol *findSymbolInAST(const TString &symbolName, TBasicType basicType)
- {
- return FindSymbolNode(mASTRoot, symbolName, basicType);
- }
-
- protected:
- TranslatorESSL *mTranslator;
- TIntermNode *mASTRoot;
- std::string mInfoLog;
-};
-
-// GLSL ES 3.10 has relaxed checks on qualifier order. Any order is correct.
-TEST_F(QualificationVertexShaderTestESSL31, CentroidOut)
-{
- const std::string &shaderString =
- "#version 310 es\n"
- "precision lowp float;\n"
- "out centroid float something;\n"
- "void main(){\n"
- " something = 1.0;\n"
- "}\n";
- if (!compile(shaderString))
- {
- FAIL() << "Shader compilation failed, expecting success" << mInfoLog;
- }
- else
- {
- const TIntermSymbol *node = findSymbolInAST("something", EbtFloat);
- ASSERT_NE(nullptr, node);
-
- const TType &type = node->getType();
- EXPECT_EQ(EvqCentroidOut, type.getQualifier());
- }
-}
-
-// GLSL ES 3.10 has relaxed checks on qualifier order. Any order is correct.
-TEST_F(QualificationVertexShaderTestESSL31, AllQualifiersMixed)
-{
- const std::string &shaderString =
- "#version 310 es\n"
- "precision lowp float;\n"
- "highp out invariant centroid flat vec4 something;\n"
- "void main(){\n"
- "}\n";
- if (!compile(shaderString))
- {
- FAIL() << "Shader compilation failed, expecting success" << mInfoLog;
- }
- else
- {
- const TIntermSymbol *node = findSymbolInAST("something", EbtFloat);
- ASSERT_NE(nullptr, node);
-
- const TType &type = node->getType();
- EXPECT_TRUE(type.isInvariant());
- EXPECT_EQ(EvqFlatOut, type.getQualifier());
- EXPECT_EQ(EbpHigh, type.getPrecision());
- }
-}
-
-// GLSL ES 3.10 allows multiple layout qualifiers to be specified.
-TEST_F(QualificationVertexShaderTestESSL31, MultipleLayouts)
-{
- const std::string &shaderString =
- "#version 310 es\n"
- "precision lowp float;\n"
- "in layout(location=1) layout(location=2) vec4 something;\n"
- "void main(){\n"
- "}\n";
- if (!compile(shaderString))
- {
- FAIL() << "Shader compilation failed, expecting success" << mInfoLog;
- }
- else
- {
- const TIntermSymbol *node = findSymbolInAST("something", EbtFloat);
- ASSERT_NE(nullptr, node);
-
- const TType &type = node->getType();
- EXPECT_EQ(EvqVertexIn, type.getQualifier());
- EXPECT_EQ(2, type.getLayoutQualifier().location);
- }
-}
-
-// The test checks layout qualifier overriding when multiple layouts are specified.
-TEST_F(QualificationVertexShaderTestESSL31, MultipleLayoutsInterfaceBlock)
-{
- const std::string &shaderString =
- "#version 310 es\n"
- "precision lowp float;\n"
- "out float someValue;\n"
- "layout(shared) layout(std140) layout(column_major) uniform MyInterface\n"
- "{ vec4 something; } MyInterfaceName;\n"
- "void main(){\n"
- " someValue = MyInterfaceName.something.r;\n"
- "}\n";
- if (!compile(shaderString))
- {
- FAIL() << "Shader compilation failed, expecting success" << mInfoLog;
- }
- else
- {
- const TIntermSymbol *node = findSymbolInAST("MyInterfaceName", EbtInterfaceBlock);
- ASSERT_NE(nullptr, node);
-
- const TType &type = node->getType();
- TLayoutQualifier layoutQualifier = type.getLayoutQualifier();
- EXPECT_EQ(EbsStd140, layoutQualifier.blockStorage);
- EXPECT_EQ(EmpColumnMajor, layoutQualifier.matrixPacking);
- }
-}
-
-// The test checks layout qualifier overriding when multiple layouts are specified.
-TEST_F(QualificationVertexShaderTestESSL31, MultipleLayoutsInterfaceBlock2)
-{
- const std::string &shaderString =
- "#version 310 es\n"
- "precision lowp float;\n"
- "out float someValue;\n"
- "layout(row_major) layout(std140) layout(shared) uniform MyInterface\n"
- "{ vec4 something; } MyInterfaceName;\n"
- "void main(){\n"
- " someValue = MyInterfaceName.something.r;\n"
- "}\n";
- if (!compile(shaderString))
- {
- FAIL() << "Shader compilation failed, expecting success" << mInfoLog;
- }
- else
- {
- const TIntermSymbol *node = findSymbolInAST("MyInterfaceName", EbtInterfaceBlock);
- ASSERT_NE(nullptr, node);
-
- const TType &type = node->getType();
- TLayoutQualifier layoutQualifier = type.getLayoutQualifier();
- EXPECT_EQ(EbsShared, layoutQualifier.blockStorage);
- EXPECT_EQ(EmpRowMajor, layoutQualifier.matrixPacking);
- }
-}
diff --git a/gfx/angle/src/tests/compiler_tests/QualificationOrder_test.cpp b/gfx/angle/src/tests/compiler_tests/QualificationOrder_test.cpp
deleted file mode 100644
index 33ecbf77d..000000000
--- a/gfx/angle/src/tests/compiler_tests/QualificationOrder_test.cpp
+++ /dev/null
@@ -1,571 +0,0 @@
-//
-// Copyright (c) 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// QualificationOrder_test.cpp:
-// OpenGL ES 3.1 removes the strict order of qualifiers imposed by the grammar.
-// This file contains tests for invalid order and usage of qualifiers.
-
-#include "angle_gl.h"
-#include "gtest/gtest.h"
-#include "GLSLANG/ShaderLang.h"
-#include "compiler/translator/TranslatorESSL.h"
-
-using namespace sh;
-
-class QualificationOrderShaderTest : public testing::Test
-{
- public:
- QualificationOrderShaderTest() {}
-
- protected:
- virtual void SetUp() {}
-
- virtual void TearDown() {}
-
- // Return true when compilation succeeds
- bool compile(const std::string &shaderString, ::GLenum shaderType, ShShaderSpec spec)
- {
- ShBuiltInResources resources;
- InitBuiltInResources(&resources);
- resources.MaxDrawBuffers = (spec == SH_GLES2_SPEC) ? 1 : 8;
-
- TranslatorESSL *translator = new TranslatorESSL(shaderType, spec);
- EXPECT_TRUE(translator->Init(resources));
-
- const char *shaderStrings[] = {shaderString.c_str()};
- bool compilationSuccess = translator->compile(shaderStrings, 1, SH_INTERMEDIATE_TREE);
- TInfoSink &infoSink = translator->getInfoSink();
- mInfoLog = infoSink.info.c_str();
-
- delete translator;
-
- return compilationSuccess;
- }
-
- protected:
- std::string mInfoLog;
-};
-
-// Repeating centroid qualifier is invalid.
-TEST_F(QualificationOrderShaderTest, RepeatingCentroid)
-{
- const std::string &shaderString =
- "#version 300 es\n"
- "precision mediump float;\n"
- "flat centroid centroid in float myValue;\n"
- "void main() {\n"
- "}\n";
-
- if (compile(shaderString, GL_FRAGMENT_SHADER, SH_GLES3_1_SPEC))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// Repeating uniform storage qualifiers is invalid.
-TEST_F(QualificationOrderShaderTest, RepeatingUniforms)
-{
- const std::string &shaderString =
- "#version 300 es\n"
- "precision mediump float;\n"
- "uniform uniform float myValue;\n"
- "void main() {\n"
- "}\n";
-
- if (compile(shaderString, GL_FRAGMENT_SHADER, SH_GLES3_1_SPEC))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// Repeating varying storage qualifiers is invalid.
-TEST_F(QualificationOrderShaderTest, RepeatingVaryings)
-{
- const std::string &shaderString =
- "precision mediump float;\n"
- "varying varying vec4 myColor;\n"
- "void main() {\n"
- "}\n";
-
- if (compile(shaderString, GL_FRAGMENT_SHADER, SH_GLES3_1_SPEC))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// Layout qualifier should be before the storage qualifiers.
-TEST_F(QualificationOrderShaderTest, WrongOrderQualifiers)
-{
- const std::string &shaderString =
- "#version 300 es\n"
- "precision mediump float;\n"
- "out layout(location=1) vec4 myColor;\n"
- "void main() {\n"
- "}\n";
-
- if (compile(shaderString, GL_FRAGMENT_SHADER, SH_GLES3_1_SPEC))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// Centroid out is the correct order. Out centroid is incorrect.
-TEST_F(QualificationOrderShaderTest, WrongOrderCentroidOut)
-{
- const std::string &shaderString =
- "#version 300 es\n"
- "precision mediump float;\n"
- "in vec4 uv;\n"
- "out centroid vec4 position;\n"
- "void main() {\n"
- "position = uv;\n"
- "gl_Position = uv;\n"
- "}\n";
-
- if (compile(shaderString, GL_VERTEX_SHADER, SH_GLES3_SPEC))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// Centroid in is the correct order. In centroid is incorrect.
-TEST_F(QualificationOrderShaderTest, WrongOrderCentroidIn)
-{
- const std::string &shaderString =
- "#version 300 es\n"
- "precision mediump float;\n"
- "in centroid vec4 colorIN;\n"
- "out vec4 colorOUT;\n"
- "void main() {\n"
- "colorOUT = colorIN;\n"
- "}\n";
-
- if (compile(shaderString, GL_FRAGMENT_SHADER, SH_GLES3_SPEC))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// Type cannot be before the storage qualifier.
-TEST_F(QualificationOrderShaderTest, WrongOrderTypeStorage)
-{
- const std::string &shaderString =
- "#version 300 es\n"
- "precision mediump float;\n"
- "centroid in vec4 colorIN;\n"
- "vec4 out colorOUT;\n"
- "void main() {\n"
- "colorOUT = colorIN;\n"
- "}\n";
-
- if (compile(shaderString, GL_FRAGMENT_SHADER, SH_GLES3_SPEC))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// A variable cannot have two conflicting storage qualifiers.
-TEST_F(QualificationOrderShaderTest, RepeatingDifferentStorageQualifiers)
-{
- const std::string &shaderString =
- "#version 300 es\n"
- "precision mediump float;\n"
- "centroid in vec4 colorIN;\n"
- "uniform out vec4 colorOUT;\n"
- "void main() {\n"
- "colorOUT = colorIN;\n"
- "}\n";
-
- if (compile(shaderString, GL_FRAGMENT_SHADER, SH_GLES3_SPEC))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// A variable cannot have two different layout qualifiers.
-TEST_F(QualificationOrderShaderTest, RepeatingLayoutQualifiers)
-{
- const std::string &shaderString =
- "#version 300 es\n"
- "precision mediump float;\n"
- "in vec4 colorIN;\n"
- "layout(location=0) layout(location=0) out vec4 colorOUT;\n"
- "void main() {\n"
- "colorOUT = colorIN;\n"
- "}\n";
-
- if (compile(shaderString, GL_FRAGMENT_SHADER, SH_GLES3_SPEC))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// A variable cannot have repeating invariant qualifiers.
-TEST_F(QualificationOrderShaderTest, RepeatingInvariantQualifiers)
-{
- const std::string &shaderString =
- "#version 300 es\n"
- "precision mediump float;\n"
- "in vec4 colorIN;\n"
- "invariant invariant out vec4 colorOUT;\n"
- "void main() {\n"
- "colorOUT = colorIN;\n"
- "}\n";
-
- if (compile(shaderString, GL_FRAGMENT_SHADER, SH_GLES3_SPEC))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// A variable cannot have repeating storage qualifiers.
-TEST_F(QualificationOrderShaderTest, RepeatingAttributes)
-{
- const std::string &shaderString =
- "precision mediump float;\n"
- "attribute attribute vec4 positionIN;\n"
- "void main() {\n"
- "gl_Position = positionIN;\n"
- "}\n";
-
- if (compile(shaderString, GL_VERTEX_SHADER, SH_GLES3_SPEC))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// Wrong order for invariant varying. It should be 'invariant varying', not 'varying invariant'.
-TEST_F(QualificationOrderShaderTest, VaryingInvariantWrongOrder)
-{
- const std::string &shaderString =
- "precision mediump float;\n"
- "attribute vec4 positionIN;\n"
- "varying invariant vec4 dataOUT;\n"
- "void main() {\n"
- "gl_Position = positionIN;\n"
- "dataOUT = 0.5 * dataOUT + vec4(0.5);\n"
- "}\n";
-
- if (compile(shaderString, GL_VERTEX_SHADER, SH_GLES3_SPEC))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// A variable cannot have repeating storage qualifiers.
-TEST_F(QualificationOrderShaderTest, AttributeVaryingMix)
-{
- const std::string &shaderString1 =
- "precision mediump float;\n"
- "attribute varying vec4 positionIN;\n"
- "void main() {\n"
- "gl_Position = positionIN;\n"
- "}\n";
-
- const std::string &shaderString2 =
- "precision mediump float;\n"
- "varying attribute vec4 positionIN;\n"
- "void main() {\n"
- "gl_Position = positionIN;\n"
- "}\n";
-
- if (compile(shaderString1, GL_VERTEX_SHADER, SH_GLES3_SPEC))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-
- if (compile(shaderString2, GL_VERTEX_SHADER, SH_GLES3_SPEC))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// A variable cannot have repeating interpolation qualifiers.
-TEST_F(QualificationOrderShaderTest, RepeatingInterpolationQualifiers)
-{
- const std::string &shaderString =
- "#version 300 es\n"
- "precision mediump float;\n"
- "in vec4 positionIN;\n"
- "flat flat out vec4 dataOUT;\n"
- "void main() {\n"
- "gl_Position = positionIN;\n"
- "dataOUT = 0.5 * dataOUT + vec4(0.5);\n"
- "}\n";
-
- if (compile(shaderString, GL_VERTEX_SHADER, SH_GLES3_SPEC))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// Wrong order for the interpolation and storage qualifier. The correct order is interpolation
-// qualifier and then storage qualifier.
-TEST_F(QualificationOrderShaderTest, WrongOrderInterpolationStorageQualifiers)
-{
- const std::string &shaderString =
- "#version 300 es\n"
- "precision mediump float;\n"
- "in vec4 positionIN;\n"
- "out flat vec4 dataOUT;\n"
- "void main() {\n"
- "gl_Position = positionIN;\n"
- "dataOUT = 0.5 * dataOUT + vec4(0.5);\n"
- "}\n";
-
- if (compile(shaderString, GL_VERTEX_SHADER, SH_GLES3_SPEC))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// The correct order is invariant, interpolation, storage.
-TEST_F(QualificationOrderShaderTest, WrongOrderInvariantInterpolationStorageQualifiers)
-{
- const std::string &shaderString =
- "#version 300 es\n"
- "precision mediump float;\n"
- "in vec4 positionIN;\n"
- "flat invariant out vec4 dataOUT;\n"
- "void main() {\n"
- "gl_Position = positionIN;\n"
- "dataOUT = 0.5 * dataOUT + vec4(0.5);\n"
- "}\n";
-
- if (compile(shaderString, GL_VERTEX_SHADER, SH_GLES3_SPEC))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// The invariant qualifer has to be before the storage qualifiers.
-TEST_F(QualificationOrderShaderTest, WrongOrderInvariantNotFirst)
-{
- const std::string &shaderString =
- "#version 300 es\n"
- "precision mediump float;\n"
- "in vec4 positionIN;\n"
- "centroid out invariant vec4 dataOUT;\n"
- "void main() {\n"
- "gl_Position = positionIN;\n"
- "dataOUT = 0.5 * dataOUT + vec4(0.5);\n"
- "}\n";
-
- if (compile(shaderString, GL_VERTEX_SHADER, SH_GLES3_SPEC))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// The precision qualifier is after the storage qualifiers.
-TEST_F(QualificationOrderShaderTest, WrongOrderPrecision)
-{
- const std::string &shaderString =
- "#version 300 es\n"
- "precision mediump float;\n"
- "in vec4 positionIN;\n"
- "highp centroid out vec4 dataOUT;\n"
- "void main() {\n"
- "gl_Position = positionIN;\n"
- "dataOUT = 0.5 * dataOUT + vec4(0.5);\n"
- "}\n";
-
- if (compile(shaderString, GL_VERTEX_SHADER, SH_GLES3_SPEC))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// A variable cannot have multiple declarations of the 'in' storage qualifier.
-TEST_F(QualificationOrderShaderTest, RepeatingInQualifier)
-{
- const std::string &shaderString =
- "#version 300 es\n"
- "precision mediump float;\n"
- "in in vec4 positionIN;\n"
- "void main() {\n"
- "gl_Position = positionIN;\n"
- "}\n";
-
- if (compile(shaderString, GL_VERTEX_SHADER, SH_GLES3_SPEC))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// A variable cannot have multiple declarations of the 'attribute' storage qualifier.
-TEST_F(QualificationOrderShaderTest, RepeatingAttributeQualifier)
-{
- const std::string &shaderString =
- "precision mediump float;\n"
- "attribute attribute vec4 positionIN;\n"
- "void main() {\n"
- "gl_Position = positionIN;\n"
- "}\n";
-
- if (compile(shaderString, GL_VERTEX_SHADER, SH_GLES3_SPEC))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// Vertex input cannot be qualified with invariant.
-TEST_F(QualificationOrderShaderTest, InvariantVertexInput)
-{
- const std::string &shaderString =
- "precision mediump float;\n"
- "invariant attribute vec4 positionIN;\n"
- "void main() {\n"
- "gl_Position = positionIN;\n"
- "}\n";
-
- if (compile(shaderString, GL_VERTEX_SHADER, SH_GLES3_SPEC))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
-
-// Cannot have a function parameter with the invariant qualifier.
-TEST_F(QualificationOrderShaderTest, InvalidFunctionParametersInvariant)
-{
- const std::string &shaderString =
- "precision lowp float;\n"
- "varying float value;\n"
- "float foo0 (invariant in float x) {\n"
- " return 2.0*x;\n"
- "}\n"
- "void main()\n"
- "{\n"
- " gl_FragColor = vec4(foo0(value));\n"
- "}\n";
-
- if (compile(shaderString, GL_FRAGMENT_SHADER, SH_GLES3_SPEC))
- {
- FAIL() << "Shader compilation succeeded, expecting failure" << mInfoLog;
- }
-}
-
-// Cannot have a function parameter with the attribute qualifier.
-TEST_F(QualificationOrderShaderTest, InvalidFunctionParametersAttribute)
-{
- const std::string &shaderString =
- "precision lowp float;\n"
- "varying float value;\n"
- "float foo0 (attribute float x) {\n"
- " return 2.0*x;\n"
- "}\n"
- "void main()\n"
- "{\n"
- " gl_FragColor = vec4(foo0(value));\n"
- "}\n";
-
- if (compile(shaderString, GL_FRAGMENT_SHADER, SH_GLES3_SPEC))
- {
- FAIL() << "Shader compilation succeeded, expecting failure" << mInfoLog;
- }
-}
-
-// Cannot have a function parameter with the varying qualifier.
-TEST_F(QualificationOrderShaderTest, InvalidFunctionParametersVarying)
-{
- const std::string &shaderString =
- "precision lowp float;\n"
- "varying float value;\n"
- "float foo0 (varying float x) {\n"
- " return 2.0*x;\n"
- "}\n"
- "void main()\n"
- "{\n"
- " gl_FragColor = vec4(foo0(value));\n"
- "}\n";
-
- if (compile(shaderString, GL_FRAGMENT_SHADER, SH_GLES3_SPEC))
- {
- FAIL() << "Shader compilation succeeded, expecting failure" << mInfoLog;
- }
-}
-
-// Cannot have a function parameter with the layout qualifier
-TEST_F(QualificationOrderShaderTest, InvalidFunctionParametersLayout)
-{
- const std::string &shaderString =
- "#version 300 es\n"
- "precision lowp float;\n"
- "in float value;\n"
- "float foo0 (layout(location = 3) in float x) {\n"
- " return 2.0*x;\n"
- "}\n"
- "out vec4 colorOUT;\n"
- "void main()\n"
- "{\n"
- " colorOUT = vec4(foo0(value));\n"
- "}\n";
-
- if (compile(shaderString, GL_FRAGMENT_SHADER, SH_GLES3_SPEC))
- {
- FAIL() << "Shader compilation succeeded, expecting failure" << mInfoLog;
- }
-}
-
-// Cannot have a function parameter with the centroid qualifier
-TEST_F(QualificationOrderShaderTest, InvalidFunctionParametersCentroidIn)
-{
- const std::string &shaderString =
- "#version 300 es\n"
- "precision lowp float;\n"
- "in float value;\n"
- "float foo0 (centroid in float x) {\n"
- " return 2.0*x;\n"
- "}\n"
- "out vec4 colorOUT;\n"
- "void main()\n"
- "{\n"
- " colorOUT = vec4(foo0(value));\n"
- "}\n";
-
- if (compile(shaderString, GL_FRAGMENT_SHADER, SH_GLES3_SPEC))
- {
- FAIL() << "Shader compilation succeeded, expecting failure" << mInfoLog;
- }
-}
-
-// Cannot have a function parameter with the flat qualifier
-TEST_F(QualificationOrderShaderTest, InvalidFunctionParametersFlatIn)
-{
- const std::string &shaderString =
- "#version 300 es\n"
- "precision lowp float;\n"
- "in float value;\n"
- "float foo0 (flat in float x) {\n"
- " return 2.0*x;\n"
- "}\n"
- "out vec4 colorOUT;\n"
- "void main()\n"
- "{\n"
- " colorOUT = vec4(foo0(value));\n"
- "}\n";
-
- if (compile(shaderString, GL_FRAGMENT_SHADER, SH_GLES3_SPEC))
- {
- FAIL() << "Shader compilation succeeded, expecting failure" << mInfoLog;
- }
-}
-
-// Output layout location qualifier can't appear more than once within a declaration.
-// GLSL ES 3.00.6 section 4.3.8.2 Output Layout Qualifiers.
-TEST_F(QualificationOrderShaderTest, TwoOutputLocations)
-{
- const std::string &shaderString =
- "#version 300 es\n"
- "precision mediump float;\n"
- "layout(location=1, location=2) out vec4 myColor;\n"
- "void main() {\n"
- "}\n";
-
- if (compile(shaderString, GL_FRAGMENT_SHADER, SH_GLES3_SPEC))
- {
- FAIL() << "Shader compilation succeeded, expecting failure " << mInfoLog;
- }
-}
diff --git a/gfx/angle/src/tests/compiler_tests/RecordConstantPrecision_test.cpp b/gfx/angle/src/tests/compiler_tests/RecordConstantPrecision_test.cpp
index 2cd2bfdf4..783a93c10 100755
--- a/gfx/angle/src/tests/compiler_tests/RecordConstantPrecision_test.cpp
+++ b/gfx/angle/src/tests/compiler_tests/RecordConstantPrecision_test.cpp
@@ -12,8 +12,6 @@
#include "GLSLANG/ShaderLang.h"
#include "tests/test_utils/compiler_test.h"
-using namespace sh;
-
class RecordConstantPrecisionTest : public MatchOutputCodeTest
{
public:
@@ -33,7 +31,7 @@ TEST_F(RecordConstantPrecisionTest, HigherPrecisionConstantAsParameter)
" gl_FragColor = vec4(b);\n"
"}\n";
compile(shaderString);
- ASSERT_TRUE(foundInCode("const highp float webgl_angle_s"));
+ ASSERT_TRUE(foundInCode("const highp float s"));
ASSERT_FALSE(foundInCode("fract(4096.5"));
ASSERT_FALSE(foundInCode("fract((4096.5"));
}
@@ -51,7 +49,7 @@ TEST_F(RecordConstantPrecisionTest, EqualPrecisionConstantAsParameter)
" gl_FragColor = vec4(b);\n"
"}\n";
compile(shaderString);
- ASSERT_FALSE(foundInCode("const mediump float webgl_angle_s"));
+ ASSERT_FALSE(foundInCode("const mediump float s"));
ASSERT_TRUE(foundInCode("fract((4096.5"));
}
@@ -69,7 +67,7 @@ TEST_F(RecordConstantPrecisionTest, FoldedBinaryConstantPrecisionIsHigher)
" gl_FragColor = vec4(b);\n"
"}\n";
compile(shaderString);
- ASSERT_TRUE(foundInCode("const highp float webgl_angle_s"));
+ ASSERT_TRUE(foundInCode("const highp float s"));
ASSERT_FALSE(foundInCode("fract(4096.5"));
ASSERT_FALSE(foundInCode("fract((4096.5"));
}
@@ -89,7 +87,7 @@ TEST_F(RecordConstantPrecisionTest, FoldedUnaryConstantPrecisionIsHigher)
" gl_FragColor = vec4(b);\n"
"}\n";
compile(shaderString);
- ASSERT_TRUE(foundInCode("const highp float webgl_angle_s"));
+ ASSERT_TRUE(foundInCode("const highp float s"));
ASSERT_FALSE(foundInCode("sin(0.5"));
ASSERT_FALSE(foundInCode("sin((0.5"));
}
diff --git a/gfx/angle/src/tests/compiler_tests/RemovePow_test.cpp b/gfx/angle/src/tests/compiler_tests/RemovePow_test.cpp
index 8367ac745..2434f09a0 100755
--- a/gfx/angle/src/tests/compiler_tests/RemovePow_test.cpp
+++ b/gfx/angle/src/tests/compiler_tests/RemovePow_test.cpp
@@ -13,8 +13,6 @@
#include "compiler/translator/NodeSearch.h"
#include "compiler/translator/TranslatorGLSL.h"
-using namespace sh;
-
class RemovePowTest : public testing::Test
{
public:
@@ -26,9 +24,8 @@ class RemovePowTest : public testing::Test
allocator.push();
SetGlobalPoolAllocator(&allocator);
ShBuiltInResources resources;
- sh::InitBuiltInResources(&resources);
- mTranslatorGLSL =
- new sh::TranslatorGLSL(GL_FRAGMENT_SHADER, SH_GLES2_SPEC, SH_GLSL_COMPATIBILITY_OUTPUT);
+ ShInitBuiltInResources(&resources);
+ mTranslatorGLSL = new TranslatorGLSL(GL_FRAGMENT_SHADER, SH_GLES2_SPEC, SH_GLSL_COMPATIBILITY_OUTPUT);
ASSERT_TRUE(mTranslatorGLSL->Init(resources));
}
@@ -58,7 +55,7 @@ class RemovePowTest : public testing::Test
}
private:
- sh::TranslatorGLSL *mTranslatorGLSL;
+ TranslatorGLSL *mTranslatorGLSL;
TIntermNode *mASTRoot;
TPoolAllocator allocator;
diff --git a/gfx/angle/src/tests/compiler_tests/ShCompile_test.cpp b/gfx/angle/src/tests/compiler_tests/ShCompile_test.cpp
index 21e4a3cbe..2a514a9e4 100755
--- a/gfx/angle/src/tests/compiler_tests/ShCompile_test.cpp
+++ b/gfx/angle/src/tests/compiler_tests/ShCompile_test.cpp
@@ -4,7 +4,7 @@
// found in the LICENSE file.
//
// ShCompile_test.cpp
-// Test the sh::Compile interface with different parameters.
+// Test the ShCompile interface with different parameters.
//
#include "angle_gl.h"
@@ -19,9 +19,9 @@ class ShCompileTest : public testing::Test
protected:
void SetUp() override
{
- sh::InitBuiltInResources(&mResources);
- mCompiler = sh::ConstructCompiler(GL_FRAGMENT_SHADER, SH_WEBGL_SPEC,
- SH_GLSL_COMPATIBILITY_OUTPUT, &mResources);
+ ShInitBuiltInResources(&mResources);
+ mCompiler = ShConstructCompiler(GL_FRAGMENT_SHADER, SH_WEBGL_SPEC,
+ SH_GLSL_COMPATIBILITY_OUTPUT, &mResources);
ASSERT_TRUE(mCompiler != nullptr) << "Compiler could not be constructed.";
}
@@ -29,15 +29,15 @@ class ShCompileTest : public testing::Test
{
if (mCompiler)
{
- sh::Destruct(mCompiler);
+ ShDestruct(mCompiler);
mCompiler = nullptr;
}
}
void testCompile(const char **shaderStrings, int stringCount, bool expectation)
{
- bool success = sh::Compile(mCompiler, shaderStrings, stringCount, 0);
- const std::string &compileLog = sh::GetInfoLog(mCompiler);
+ bool success = ShCompile(mCompiler, shaderStrings, stringCount, 0);
+ const std::string &compileLog = ShGetInfoLog(mCompiler);
EXPECT_EQ(expectation, success) << compileLog;
}
@@ -46,7 +46,7 @@ class ShCompileTest : public testing::Test
ShHandle mCompiler;
};
-// Test calling sh::Compile with more than one shader source string.
+// Test calling ShCompile with more than one shader source string.
TEST_F(ShCompileTest, MultipleShaderStrings)
{
const std::string &shaderString1 =
@@ -61,7 +61,7 @@ TEST_F(ShCompileTest, MultipleShaderStrings)
testCompile(shaderStrings, 2, true);
}
-// Test calling sh::Compile with a tokens split into different shader source strings.
+// Test calling ShCompile with a tokens split into different shader source strings.
TEST_F(ShCompileTest, TokensSplitInShaderStrings)
{
const std::string &shaderString1 =
diff --git a/gfx/angle/src/tests/compiler_tests/ShaderExtension_test.cpp b/gfx/angle/src/tests/compiler_tests/ShaderExtension_test.cpp
index eb2d9b9bd..a23de3dee 100755
--- a/gfx/angle/src/tests/compiler_tests/ShaderExtension_test.cpp
+++ b/gfx/angle/src/tests/compiler_tests/ShaderExtension_test.cpp
@@ -52,7 +52,7 @@ class ShaderExtensionTest : public testing::Test
protected:
virtual void SetUp()
{
- sh::InitBuiltInResources(&mResources);
+ ShInitBuiltInResources(&mResources);
mCompiler = NULL;
}
@@ -65,7 +65,7 @@ class ShaderExtensionTest : public testing::Test
{
if (mCompiler)
{
- sh::Destruct(mCompiler);
+ ShDestruct(mCompiler);
mCompiler = NULL;
}
}
@@ -73,15 +73,15 @@ class ShaderExtensionTest : public testing::Test
void InitializeCompiler()
{
DestroyCompiler();
- mCompiler = sh::ConstructCompiler(GL_FRAGMENT_SHADER, SH_WEBGL_SPEC,
- SH_GLSL_COMPATIBILITY_OUTPUT, &mResources);
+ mCompiler = ShConstructCompiler(GL_FRAGMENT_SHADER, SH_WEBGL_SPEC,
+ SH_GLSL_COMPATIBILITY_OUTPUT, &mResources);
ASSERT_TRUE(mCompiler != NULL) << "Compiler could not be constructed.";
}
void TestShaderExtension(const char **shaderStrings, int stringCount, bool expectation)
{
- bool success = sh::Compile(mCompiler, shaderStrings, stringCount, 0);
- const std::string &compileLog = sh::GetInfoLog(mCompiler);
+ bool success = ShCompile(mCompiler, shaderStrings, stringCount, 0);
+ const std::string& compileLog = ShGetInfoLog(mCompiler);
EXPECT_EQ(expectation, success) << compileLog;
}
diff --git a/gfx/angle/src/tests/compiler_tests/ShaderImage_test.cpp b/gfx/angle/src/tests/compiler_tests/ShaderImage_test.cpp
deleted file mode 100644
index b069c6547..000000000
--- a/gfx/angle/src/tests/compiler_tests/ShaderImage_test.cpp
+++ /dev/null
@@ -1,259 +0,0 @@
-//
-// Copyright (c) 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// ShaderImage_test.cpp:
-// Tests for images
-//
-
-#include "angle_gl.h"
-#include "gtest/gtest.h"
-#include "GLSLANG/ShaderLang.h"
-#include "compiler/translator/TranslatorESSL.h"
-#include "tests/test_utils/compiler_test.h"
-
-using namespace sh;
-
-namespace
-{
-
-// Checks that the imageStore call with mangled name imageStoreMangledName exists in the AST.
-// Further each argument is checked whether it matches the expected properties given the compiled
-// shader.
-void CheckImageStoreCall(TIntermNode *astRoot,
- const TString &imageStoreMangledName,
- TBasicType imageType,
- int storeLocationNominalSize,
- TBasicType storeValueType,
- int storeValueNominalSize)
-{
- const TIntermAggregate *imageStoreFunctionCall =
- FindFunctionCallNode(astRoot, imageStoreMangledName);
- ASSERT_NE(nullptr, imageStoreFunctionCall);
-
- const TIntermSequence *storeArguments = imageStoreFunctionCall->getSequence();
- ASSERT_EQ(3u, storeArguments->size());
-
- const TIntermTyped *storeArgument1Typed = (*storeArguments)[0]->getAsTyped();
- ASSERT_EQ(imageType, storeArgument1Typed->getBasicType());
-
- const TIntermTyped *storeArgument2Typed = (*storeArguments)[1]->getAsTyped();
- ASSERT_EQ(EbtInt, storeArgument2Typed->getBasicType());
- ASSERT_EQ(storeLocationNominalSize, storeArgument2Typed->getNominalSize());
-
- const TIntermTyped *storeArgument3Typed = (*storeArguments)[2]->getAsTyped();
- ASSERT_EQ(storeValueType, storeArgument3Typed->getBasicType());
- ASSERT_EQ(storeValueNominalSize, storeArgument3Typed->getNominalSize());
-}
-
-// Checks that the imageLoad call with mangled name imageLoadMangledName exists in the AST.
-// Further each argument is checked whether it matches the expected properties given the compiled
-// shader.
-void CheckImageLoadCall(TIntermNode *astRoot,
- const TString &imageLoadMangledName,
- TBasicType imageType,
- int loadLocationNominalSize)
-{
- const TIntermAggregate *imageLoadFunctionCall =
- FindFunctionCallNode(astRoot, imageLoadMangledName);
- ASSERT_NE(nullptr, imageLoadFunctionCall);
-
- const TIntermSequence *loadArguments = imageLoadFunctionCall->getSequence();
- ASSERT_EQ(2u, loadArguments->size());
-
- const TIntermTyped *loadArgument1Typed = (*loadArguments)[0]->getAsTyped();
- ASSERT_EQ(imageType, loadArgument1Typed->getBasicType());
-
- const TIntermTyped *loadArgument2Typed = (*loadArguments)[1]->getAsTyped();
- ASSERT_EQ(EbtInt, loadArgument2Typed->getBasicType());
- ASSERT_EQ(loadLocationNominalSize, loadArgument2Typed->getNominalSize());
-}
-
-// Checks whether the image is properly exported as a uniform by the compiler.
-void CheckExportedImageUniform(const std::vector<sh::Uniform> &uniforms,
- size_t uniformIndex,
- ::GLenum imageTypeGL,
- const TString &imageName)
-{
- ASSERT_EQ(1u, uniforms.size());
-
- const auto &imageUniform = uniforms[uniformIndex];
- ASSERT_EQ(imageTypeGL, imageUniform.type);
- ASSERT_STREQ(imageUniform.name.c_str(), imageName.c_str());
-}
-
-// Checks whether the image is saved in the AST as a node with the correct properties given the
-// shader.
-void CheckImageDeclaration(TIntermNode *astRoot,
- const TString &imageName,
- TBasicType imageType,
- TLayoutImageInternalFormat internalFormat,
- bool readonly,
- bool writeonly,
- bool coherent,
- bool restrictQualifier,
- bool volatileQualifier)
-{
- const TIntermSymbol *myImageNode = FindSymbolNode(astRoot, imageName, imageType);
- ASSERT_NE(nullptr, myImageNode);
-
- const TType &myImageType = myImageNode->getType();
- TLayoutQualifier myImageLayoutQualifier = myImageType.getLayoutQualifier();
- ASSERT_EQ(internalFormat, myImageLayoutQualifier.imageInternalFormat);
- TMemoryQualifier myImageMemoryQualifier = myImageType.getMemoryQualifier();
- ASSERT_EQ(readonly, myImageMemoryQualifier.readonly);
- ASSERT_EQ(writeonly, myImageMemoryQualifier.writeonly);
- ASSERT_EQ(coherent, myImageMemoryQualifier.coherent);
- ASSERT_EQ(restrictQualifier, myImageMemoryQualifier.restrictQualifier);
- ASSERT_EQ(volatileQualifier, myImageMemoryQualifier.volatileQualifier);
-}
-
-} // namespace
-
-class ShaderImageTest : public testing::Test
-{
- public:
- ShaderImageTest() {}
-
- protected:
- virtual void SetUp()
- {
- ShBuiltInResources resources;
- sh::InitBuiltInResources(&resources);
-
- mTranslator = new sh::TranslatorESSL(GL_COMPUTE_SHADER, SH_GLES3_1_SPEC);
- ASSERT_TRUE(mTranslator->Init(resources));
- }
-
- virtual void TearDown() { delete mTranslator; }
-
- // Return true when compilation succeeds
- bool compile(const std::string &shaderString)
- {
- const char *shaderStrings[] = {shaderString.c_str()};
- mASTRoot = mTranslator->compileTreeForTesting(shaderStrings, 1,
- SH_INTERMEDIATE_TREE | SH_VARIABLES);
- TInfoSink &infoSink = mTranslator->getInfoSink();
- mInfoLog = infoSink.info.c_str();
- return mASTRoot != nullptr;
- }
-
- protected:
- std::string mTranslatedCode;
- std::string mInfoLog;
- sh::TranslatorESSL *mTranslator;
- TIntermNode *mASTRoot;
-};
-
-// Test that an image2D is properly parsed and exported as a uniform.
-TEST_F(ShaderImageTest, Image2DDeclaration)
-{
- const std::string &shaderString =
- "#version 310 es\n"
- "layout(local_size_x = 4) in;\n"
- "layout(rgba32f) uniform highp readonly image2D myImage;\n"
- "void main() {\n"
- " ivec2 sz = imageSize(myImage);\n"
- "}";
- if (!compile(shaderString))
- {
- FAIL() << "Shader compilation failed" << mInfoLog;
- }
-
- CheckExportedImageUniform(mTranslator->getUniforms(), 0, GL_IMAGE_2D, "myImage");
- CheckImageDeclaration(mASTRoot, "myImage", EbtImage2D, EiifRGBA32F, true, false, false, false,
- false);
-}
-
-// Test that an image3D is properly parsed and exported as a uniform.
-TEST_F(ShaderImageTest, Image3DDeclaration)
-{
- const std::string &shaderString =
- "#version 310 es\n"
- "layout(local_size_x = 4) in;\n"
- "layout(rgba32ui) uniform highp writeonly readonly uimage3D myImage;\n"
- "void main() {\n"
- " ivec3 sz = imageSize(myImage);\n"
- "}";
- if (!compile(shaderString))
- {
- FAIL() << "Shader compilation failed" << mInfoLog;
- }
-
- CheckExportedImageUniform(mTranslator->getUniforms(), 0, GL_UNSIGNED_INT_IMAGE_3D, "myImage");
- CheckImageDeclaration(mASTRoot, "myImage", EbtUImage3D, EiifRGBA32UI, true, true, false, false,
- false);
-}
-
-// Check that imageLoad calls get correctly parsed.
-TEST_F(ShaderImageTest, ImageLoad)
-{
- const std::string &shaderString =
- "#version 310 es\n"
- "layout(local_size_x = 4) in;\n"
- "layout(rgba32f) uniform highp readonly image2D my2DImageInput;\n"
- "layout(rgba32i) uniform highp readonly iimage3D my3DImageInput;\n"
- "void main() {\n"
- " vec4 result = imageLoad(my2DImageInput, ivec2(gl_LocalInvocationID.xy));\n"
- " ivec4 result2 = imageLoad(my3DImageInput, ivec3(gl_LocalInvocationID.xyz));\n"
- "}";
- if (!compile(shaderString))
- {
- FAIL() << "Shader compilation failed" << mInfoLog;
- }
-
- // imageLoad call with image2D passed
- CheckImageLoadCall(mASTRoot, "imageLoad(im21;vi2;", EbtImage2D, 2);
-
- // imageLoad call with image3D passed
- CheckImageLoadCall(mASTRoot, "imageLoad(iim31;vi3;", EbtIImage3D, 3);
-}
-
-// Check that imageStore calls get correctly parsed.
-TEST_F(ShaderImageTest, ImageStore)
-{
- const std::string &shaderString =
- "#version 310 es\n"
- "layout(local_size_x = 4) in;\n"
- "layout(rgba32f) uniform highp writeonly image2D my2DImageOutput;\n"
- "layout(rgba32ui) uniform highp writeonly uimage2DArray my2DImageArrayOutput;\n"
- "void main() {\n"
- " imageStore(my2DImageOutput, ivec2(gl_LocalInvocationID.xy), vec4(0.0));\n"
- " imageStore(my2DImageArrayOutput, ivec3(gl_LocalInvocationID.xyz), uvec4(0));\n"
- "}";
- if (!compile(shaderString))
- {
- FAIL() << "Shader compilation failed" << mInfoLog;
- }
-
- // imageStore call with image2D
- CheckImageStoreCall(mASTRoot, "imageStore(im21;vi2;vf4;", EbtImage2D, 2, EbtFloat, 4);
-
- // imageStore call with image2DArray
- CheckImageStoreCall(mASTRoot, "imageStore(uim2a1;vi3;vu4;", EbtUImage2DArray, 3, EbtUInt, 4);
-}
-
-// Check that memory qualifiers are correctly parsed.
-TEST_F(ShaderImageTest, ImageMemoryQualifiers)
-{
- const std::string &shaderString =
- "#version 310 es\n"
- "layout(local_size_x = 4) in;"
- "layout(rgba32f) uniform highp coherent readonly image2D image1;\n"
- "layout(rgba32f) uniform highp volatile writeonly image2D image2;\n"
- "layout(rgba32f) uniform highp volatile restrict readonly writeonly image2D image3;\n"
- "void main() {\n"
- "}";
- if (!compile(shaderString))
- {
- FAIL() << "Shader compilation failed" << mInfoLog;
- }
-
- CheckImageDeclaration(mASTRoot, "image1", EbtImage2D, EiifRGBA32F, true, false, true, false,
- false);
- CheckImageDeclaration(mASTRoot, "image2", EbtImage2D, EiifRGBA32F, false, true, true, false,
- true);
- CheckImageDeclaration(mASTRoot, "image3", EbtImage2D, EiifRGBA32F, true, true, true, true,
- true);
-}
diff --git a/gfx/angle/src/tests/compiler_tests/ShaderVariable_test.cpp b/gfx/angle/src/tests/compiler_tests/ShaderVariable_test.cpp
index 53dd93fe4..6b90f1f5d 100755
--- a/gfx/angle/src/tests/compiler_tests/ShaderVariable_test.cpp
+++ b/gfx/angle/src/tests/compiler_tests/ShaderVariable_test.cpp
@@ -229,10 +229,10 @@ TEST(ShaderVariableTest, IsSameVaryingWithDifferentInvariance)
TEST(ShaderVariableTest, InvariantDoubleDeleteBug)
{
ShBuiltInResources resources;
- sh::InitBuiltInResources(&resources);
+ ShInitBuiltInResources(&resources);
- ShHandle compiler = sh::ConstructCompiler(GL_VERTEX_SHADER, SH_GLES2_SPEC,
- SH_GLSL_COMPATIBILITY_OUTPUT, &resources);
+ ShHandle compiler = ShConstructCompiler(GL_VERTEX_SHADER, SH_GLES2_SPEC,
+ SH_GLSL_COMPATIBILITY_OUTPUT, &resources);
EXPECT_NE(static_cast<ShHandle>(0), compiler);
const char *program[] =
@@ -246,18 +246,18 @@ TEST(ShaderVariableTest, InvariantDoubleDeleteBug)
"}"
};
- EXPECT_TRUE(sh::Compile(compiler, program, 1, SH_OBJECT_CODE));
- EXPECT_TRUE(sh::Compile(compiler, program, 1, SH_OBJECT_CODE));
- sh::Destruct(compiler);
+ EXPECT_TRUE(ShCompile(compiler, program, 1, SH_OBJECT_CODE));
+ EXPECT_TRUE(ShCompile(compiler, program, 1, SH_OBJECT_CODE));
+ ShDestruct(compiler);
}
TEST(ShaderVariableTest, IllegalInvariantVarying)
{
ShBuiltInResources resources;
- sh::InitBuiltInResources(&resources);
+ ShInitBuiltInResources(&resources);
- ShHandle compiler = sh::ConstructCompiler(GL_VERTEX_SHADER, SH_GLES2_SPEC,
- SH_GLSL_COMPATIBILITY_OUTPUT, &resources);
+ ShHandle compiler = ShConstructCompiler(GL_VERTEX_SHADER, SH_GLES2_SPEC,
+ SH_GLSL_COMPATIBILITY_OUTPUT, &resources);
EXPECT_NE(static_cast<ShHandle>(0), compiler);
const char *program1[] =
@@ -284,17 +284,17 @@ TEST(ShaderVariableTest, IllegalInvariantVarying)
"}"
};
- EXPECT_TRUE(sh::Compile(compiler, program1, 1, SH_VARIABLES));
- EXPECT_FALSE(sh::Compile(compiler, program2, 1, SH_VARIABLES));
+ EXPECT_TRUE(ShCompile(compiler, program1, 1, SH_VARIABLES));
+ EXPECT_FALSE(ShCompile(compiler, program2, 1, SH_VARIABLES));
}
TEST(ShaderVariableTest, InvariantLeakAcrossShaders)
{
ShBuiltInResources resources;
- sh::InitBuiltInResources(&resources);
+ ShInitBuiltInResources(&resources);
- ShHandle compiler = sh::ConstructCompiler(GL_VERTEX_SHADER, SH_GLES2_SPEC,
- SH_GLSL_COMPATIBILITY_OUTPUT, &resources);
+ ShHandle compiler = ShConstructCompiler(GL_VERTEX_SHADER, SH_GLES2_SPEC,
+ SH_GLSL_COMPATIBILITY_OUTPUT, &resources);
EXPECT_NE(static_cast<ShHandle>(0), compiler);
const char *program1[] =
@@ -313,15 +313,15 @@ TEST(ShaderVariableTest, InvariantLeakAcrossShaders)
"}"
};
- EXPECT_TRUE(sh::Compile(compiler, program1, 1, SH_VARIABLES));
- const std::vector<sh::Varying> *varyings = sh::GetVaryings(compiler);
+ EXPECT_TRUE(ShCompile(compiler, program1, 1, SH_VARIABLES));
+ const std::vector<sh::Varying> *varyings = ShGetVaryings(compiler);
for (const sh::Varying &varying : *varyings)
{
if (varying.name == "v_varying")
EXPECT_TRUE(varying.isInvariant);
}
- EXPECT_TRUE(sh::Compile(compiler, program2, 1, SH_VARIABLES));
- varyings = sh::GetVaryings(compiler);
+ EXPECT_TRUE(ShCompile(compiler, program2, 1, SH_VARIABLES));
+ varyings = ShGetVaryings(compiler);
for (const sh::Varying &varying : *varyings)
{
if (varying.name == "v_varying")
@@ -332,10 +332,10 @@ TEST(ShaderVariableTest, InvariantLeakAcrossShaders)
TEST(ShaderVariableTest, GlobalInvariantLeakAcrossShaders)
{
ShBuiltInResources resources;
- sh::InitBuiltInResources(&resources);
+ ShInitBuiltInResources(&resources);
- ShHandle compiler = sh::ConstructCompiler(GL_VERTEX_SHADER, SH_GLES2_SPEC,
- SH_GLSL_COMPATIBILITY_OUTPUT, &resources);
+ ShHandle compiler = ShConstructCompiler(GL_VERTEX_SHADER, SH_GLES2_SPEC,
+ SH_GLSL_COMPATIBILITY_OUTPUT, &resources);
EXPECT_NE(static_cast<ShHandle>(0), compiler);
const char *program1[] =
@@ -354,15 +354,15 @@ TEST(ShaderVariableTest, GlobalInvariantLeakAcrossShaders)
"}"
};
- EXPECT_TRUE(sh::Compile(compiler, program1, 1, SH_VARIABLES));
- const std::vector<sh::Varying> *varyings = sh::GetVaryings(compiler);
+ EXPECT_TRUE(ShCompile(compiler, program1, 1, SH_VARIABLES));
+ const std::vector<sh::Varying> *varyings = ShGetVaryings(compiler);
for (const sh::Varying &varying : *varyings)
{
if (varying.name == "v_varying")
EXPECT_TRUE(varying.isInvariant);
}
- EXPECT_TRUE(sh::Compile(compiler, program2, 1, SH_VARIABLES));
- varyings = sh::GetVaryings(compiler);
+ EXPECT_TRUE(ShCompile(compiler, program2, 1, SH_VARIABLES));
+ varyings = ShGetVaryings(compiler);
for (const sh::Varying &varying : *varyings)
{
if (varying.name == "v_varying")
@@ -374,10 +374,10 @@ TEST(ShaderVariableTest, BuiltinInvariantVarying)
{
ShBuiltInResources resources;
- sh::InitBuiltInResources(&resources);
+ ShInitBuiltInResources(&resources);
- ShHandle compiler = sh::ConstructCompiler(GL_VERTEX_SHADER, SH_GLES2_SPEC,
- SH_GLSL_COMPATIBILITY_OUTPUT, &resources);
+ ShHandle compiler = ShConstructCompiler(GL_VERTEX_SHADER, SH_GLES2_SPEC,
+ SH_GLSL_COMPATIBILITY_OUTPUT, &resources);
EXPECT_NE(static_cast<ShHandle>(0), compiler);
const char *program1[] =
@@ -401,21 +401,21 @@ TEST(ShaderVariableTest, BuiltinInvariantVarying)
"}"
};
- EXPECT_TRUE(sh::Compile(compiler, program1, 1, SH_VARIABLES));
- const std::vector<sh::Varying> *varyings = sh::GetVaryings(compiler);
+ EXPECT_TRUE(ShCompile(compiler, program1, 1, SH_VARIABLES));
+ const std::vector<sh::Varying> *varyings = ShGetVaryings(compiler);
for (const sh::Varying &varying : *varyings)
{
if (varying.name == "gl_Position")
EXPECT_TRUE(varying.isInvariant);
}
- EXPECT_TRUE(sh::Compile(compiler, program2, 1, SH_VARIABLES));
- varyings = sh::GetVaryings(compiler);
+ EXPECT_TRUE(ShCompile(compiler, program2, 1, SH_VARIABLES));
+ varyings = ShGetVaryings(compiler);
for (const sh::Varying &varying : *varyings)
{
if (varying.name == "gl_Position")
EXPECT_FALSE(varying.isInvariant);
}
- EXPECT_FALSE(sh::Compile(compiler, program3, 1, SH_VARIABLES));
+ EXPECT_FALSE(ShCompile(compiler, program3, 1, SH_VARIABLES));
}
} // namespace sh
diff --git a/gfx/angle/src/tests/compiler_tests/TypeTracking_test.cpp b/gfx/angle/src/tests/compiler_tests/TypeTracking_test.cpp
index ac8ee70f6..516c94a16 100755
--- a/gfx/angle/src/tests/compiler_tests/TypeTracking_test.cpp
+++ b/gfx/angle/src/tests/compiler_tests/TypeTracking_test.cpp
@@ -13,32 +13,33 @@
#include "GLSLANG/ShaderLang.h"
#include "compiler/translator/TranslatorESSL.h"
-using namespace sh;
-
class TypeTrackingTest : public testing::Test
{
public:
TypeTrackingTest() {}
protected:
- void SetUp() override
+ virtual void SetUp()
{
ShBuiltInResources resources;
- InitBuiltInResources(&resources);
+ ShInitBuiltInResources(&resources);
resources.FragmentPrecisionHigh = 1;
mTranslator = new TranslatorESSL(GL_FRAGMENT_SHADER, SH_GLES3_SPEC);
ASSERT_TRUE(mTranslator->Init(resources));
}
- void TearDown() override { delete mTranslator; }
+ virtual void TearDown()
+ {
+ delete mTranslator;
+ }
void compile(const std::string& shaderString)
{
const char *shaderStrings[] = { shaderString.c_str() };
bool compilationSuccess = mTranslator->compile(shaderStrings, 1, SH_INTERMEDIATE_TREE);
TInfoSink &infoSink = mTranslator->getInfoSink();
- mInfoLog = RemoveSymbolIdsFromInfoLog(infoSink.info.c_str());
+ mInfoLog = infoSink.info.c_str();
if (!compilationSuccess)
FAIL() << "Shader compilation failed " << mInfoLog;
}
@@ -54,23 +55,6 @@ class TypeTrackingTest : public testing::Test
}
private:
- // Remove symbol ids from info log - the tests don't care about them.
- static std::string RemoveSymbolIdsFromInfoLog(const char *infoLog)
- {
- std::string filteredLog(infoLog);
- size_t idPrefixPos = 0u;
- do
- {
- idPrefixPos = filteredLog.find(" (symbol id");
- if (idPrefixPos != std::string::npos)
- {
- size_t idSuffixPos = filteredLog.find(")", idPrefixPos);
- filteredLog.erase(idPrefixPos, idSuffixPos - idPrefixPos + 1u);
- }
- } while (idPrefixPos != std::string::npos);
- return filteredLog;
- }
-
TranslatorESSL *mTranslator;
std::string mInfoLog;
};
diff --git a/gfx/angle/src/tests/compiler_tests/UnrollFlatten_test.cpp b/gfx/angle/src/tests/compiler_tests/UnrollFlatten_test.cpp
index 78f388a44..3819c3bea 100755
--- a/gfx/angle/src/tests/compiler_tests/UnrollFlatten_test.cpp
+++ b/gfx/angle/src/tests/compiler_tests/UnrollFlatten_test.cpp
@@ -14,8 +14,6 @@
#include "GLSLANG/ShaderLang.h"
#include "tests/test_utils/compiler_test.h"
-using namespace sh;
-
namespace
{
diff --git a/gfx/angle/src/tests/compiler_tests/WorkGroupSize_test.cpp b/gfx/angle/src/tests/compiler_tests/WorkGroupSize_test.cpp
index 980617f84..f2a9d4e8d 100755
--- a/gfx/angle/src/tests/compiler_tests/WorkGroupSize_test.cpp
+++ b/gfx/angle/src/tests/compiler_tests/WorkGroupSize_test.cpp
@@ -13,8 +13,6 @@
#include "compiler/translator/TranslatorESSL.h"
#include "tests/test_utils/compiler_test.h"
-using namespace sh;
-
class WorkGroupSizeTest : public testing::Test
{
public:
@@ -24,7 +22,7 @@ class WorkGroupSizeTest : public testing::Test
void SetUp() override
{
ShBuiltInResources resources;
- InitBuiltInResources(&resources);
+ ShInitBuiltInResources(&resources);
mTranslator = new TranslatorESSL(GL_COMPUTE_SHADER, SH_GLES3_1_SPEC);
ASSERT_TRUE(mTranslator->Init(resources));
@@ -58,7 +56,7 @@ TEST_F(WorkGroupSizeTest, OnlyLocalSizeXSpecified)
compile(shaderString);
- const WorkGroupSize &localSize = mTranslator->getComputeShaderLocalSize();
+ const sh::WorkGroupSize &localSize = mTranslator->getComputeShaderLocalSize();
ASSERT_EQ(5, localSize[0]);
ASSERT_EQ(1, localSize[1]);
ASSERT_EQ(1, localSize[2]);
@@ -75,7 +73,7 @@ TEST_F(WorkGroupSizeTest, LocalSizeXandZ)
compile(shaderString);
- const WorkGroupSize &localSize = mTranslator->getComputeShaderLocalSize();
+ const sh::WorkGroupSize &localSize = mTranslator->getComputeShaderLocalSize();
ASSERT_EQ(5, localSize[0]);
ASSERT_EQ(1, localSize[1]);
ASSERT_EQ(10, localSize[2]);
@@ -92,7 +90,7 @@ TEST_F(WorkGroupSizeTest, LocalSizeAll)
compile(shaderString);
- const WorkGroupSize &localSize = mTranslator->getComputeShaderLocalSize();
+ const sh::WorkGroupSize &localSize = mTranslator->getComputeShaderLocalSize();
ASSERT_EQ(5, localSize[0]);
ASSERT_EQ(15, localSize[1]);
ASSERT_EQ(10, localSize[2]);
diff --git a/gfx/angle/src/tests/deqp.gypi b/gfx/angle/src/tests/deqp.gypi
index 1c1e3e5e2..8be7d60cb 100755
--- a/gfx/angle/src/tests/deqp.gypi
+++ b/gfx/angle/src/tests/deqp.gypi
@@ -1250,7 +1250,7 @@
{
'target_name': 'angle_zlib',
'type': 'static_library',
- 'includes': [ '../../gyp/common_defines.gypi', ],
+ 'includes': [ '../../build/common_defines.gypi', ],
'include_dirs':
[
'<(zlib_path)',
@@ -1326,7 +1326,7 @@
{
'target_name': 'angle_libpng',
'type': 'static_library',
- 'includes': [ '../../gyp/common_defines.gypi', ],
+ 'includes': [ '../../build/common_defines.gypi', ],
'dependencies':
[
'angle_zlib'
@@ -1547,7 +1547,6 @@
'AdditionalOptions':
[
'/bigobj', # needed for glsBuiltinPrecisionTests.cpp
- '/wd4251', # needed for angle_util STL objects not having DLL interface
],
},
},
@@ -1763,7 +1762,6 @@
[
'angle_test_support',
'<(angle_path)/util/util.gyp:angle_util',
- '<(angle_path)/src/angle.gyp:angle_common',
],
'export_dependent_settings':
[
@@ -1842,7 +1840,7 @@
{
'target_name': 'angle_deqp_gtest_gles2_tests',
'type': 'executable',
- 'includes': [ '../../gyp/common_defines.gypi', ],
+ 'includes': [ '../../build/common_defines.gypi', ],
'dependencies':
[
'angle_deqp_gtest_support',
@@ -1857,7 +1855,7 @@
{
'target_name': 'angle_deqp_gtest_gles3_tests',
'type': 'executable',
- 'includes': [ '../../gyp/common_defines.gypi', ],
+ 'includes': [ '../../build/common_defines.gypi', ],
'dependencies':
[
'angle_deqp_gtest_support',
@@ -1872,7 +1870,7 @@
{
'target_name': 'angle_deqp_gtest_gles31_tests',
'type': 'executable',
- 'includes': [ '../../gyp/common_defines.gypi', ],
+ 'includes': [ '../../build/common_defines.gypi', ],
'dependencies':
[
'angle_deqp_gtest_support',
@@ -1887,7 +1885,7 @@
{
'target_name': 'angle_deqp_gtest_egl_tests',
'type': 'executable',
- 'includes': [ '../../gyp/common_defines.gypi', ],
+ 'includes': [ '../../build/common_defines.gypi', ],
'dependencies':
[
'angle_deqp_gtest_support',
diff --git a/gfx/angle/src/tests/deqp_support/angle_deqp_gtest.cpp b/gfx/angle/src/tests/deqp_support/angle_deqp_gtest.cpp
index 89f3f8a42..f3dbb5cad 100755
--- a/gfx/angle/src/tests/deqp_support/angle_deqp_gtest.cpp
+++ b/gfx/angle/src/tests/deqp_support/angle_deqp_gtest.cpp
@@ -45,50 +45,6 @@ const char *g_TestExpectationsFiles[] = {
"deqp_gles31_test_expectations.txt", "deqp_egl_test_expectations.txt",
};
-using APIInfo = std::pair<const char *, gpu::GPUTestConfig::API>;
-
-const APIInfo g_eglDisplayAPIs[] = {
- {"angle-d3d9", gpu::GPUTestConfig::kAPID3D9},
- {"angle-d3d11", gpu::GPUTestConfig::kAPID3D11},
- {"angle-gl", gpu::GPUTestConfig::kAPIGLDesktop},
- {"angle-gles", gpu::GPUTestConfig::kAPIGLES},
-};
-
-const APIInfo *g_initAPI = nullptr;
-
-// Returns the default API for a platform.
-const char *GetDefaultAPIName()
-{
-#if defined(ANGLE_PLATFORM_WINDOWS)
- return "angle-d3d11";
-#elif defined(ANGLE_PLATFORM_APPLE) || defined(ANGLE_PLATFORM_LINUX)
- return "angle-gl";
-#elif defined(ANGLE_PLATFORM_ANDROID)
- return "angle-gles";
-#else
-#error Unknown platform.
-#endif
-}
-
-const APIInfo *FindAPIInfo(const std::string &arg)
-{
- for (auto &displayAPI : g_eglDisplayAPIs)
- {
- if (arg == displayAPI.first)
- {
- return &displayAPI;
- }
- }
- return nullptr;
-}
-
-const APIInfo *GetDefaultAPIInfo()
-{
- const APIInfo *defaultInfo = FindAPIInfo(GetDefaultAPIName());
- ASSERT(defaultInfo);
- return defaultInfo;
-}
-
// During the CaseList initialization we cannot use the GTEST FAIL macro to quit the program because
// the initialization is called outside of tests the first time.
void Die()
@@ -206,16 +162,6 @@ void dEQPCaseList::initialize()
Die();
}
- // Set the API from the command line, or using the default platform API.
- if (g_initAPI)
- {
- mTestConfig.set_api(g_initAPI->second);
- }
- else
- {
- mTestConfig.set_api(GetDefaultAPIInfo()->second);
- }
-
std::ifstream caseListStream(caseListPath);
if (caseListStream.fail())
{
@@ -269,7 +215,13 @@ class dEQPTest : public testing::TestWithParam<size_t>
return sCaseList;
}
- static void SetUpTestCase();
+ static void SetUpTestCase()
+ {
+ sPasses = 0;
+ sFails = 0;
+ sUnexpectedPasses = 0;
+ }
+
static void TearDownTestCase();
protected:
@@ -311,33 +263,6 @@ unsigned int dEQPTest<TestModuleIndex>::sUnexpectedPasses = 0;
// static
template <size_t TestModuleIndex>
-void dEQPTest<TestModuleIndex>::SetUpTestCase()
-{
- sPasses = 0;
- sFails = 0;
- sUnexpectedPasses = 0;
-
- int argc = 0;
- std::vector<const char *> argv;
-
- // Reserve one argument for the binary name.
- argc++;
- argv.push_back("");
-
- // Add init api.
- argc++;
- argv.push_back(g_initAPI ? g_initAPI->first : GetDefaultAPIName());
-
- // Init the platform.
- if (!deqp_libtester_init_platform(argc, argv.data()))
- {
- std::cout << "Aborting test due to dEQP initialization error." << std::endl;
- exit(1);
- }
-}
-
-// static
-template <size_t TestModuleIndex>
void dEQPTest<TestModuleIndex>::TearDownTestCase()
{
unsigned int total = sPasses + sFails;
@@ -354,10 +279,9 @@ void dEQPTest<TestModuleIndex>::TearDownTestCase()
{
std::cout << sUnexpectedPasses << " tests unexpectedly passed." << std::endl;
}
-
- deqp_libtester_shutdown_platform();
}
+// TODO(jmadill): add different platform configs, or ability to choose platform
#define ANGLE_INSTANTIATE_DEQP_TEST_CASE(DEQP_TEST, N) \
class DEQP_TEST : public dEQPTest<N> \
{ \
@@ -385,69 +309,4 @@ ANGLE_INSTANTIATE_DEQP_TEST_CASE(dEQP_GLES31, 2);
ANGLE_INSTANTIATE_DEQP_TEST_CASE(dEQP_EGL, 3);
#endif
-const char *g_deqpEGLString = "--deqp-egl-display-type=";
-const char *g_angleEGLString = "--use-angle=";
-
-void HandleDisplayType(const char *displayTypeString)
-{
- std::stringstream argStream;
-
- if (g_initAPI)
- {
- std::cout << "Cannot specify two EGL displays!" << std::endl;
- exit(1);
- }
-
- if (strncmp(displayTypeString, "angle-", strlen("angle-")) != 0)
- {
- argStream << "angle-";
- }
-
- argStream << displayTypeString;
- std::string arg = argStream.str();
-
- g_initAPI = FindAPIInfo(arg);
-
- if (!g_initAPI)
- {
- std::cout << "Unknown ANGLE back-end API: " << displayTypeString << std::endl;
- exit(1);
- }
-}
-
-void DeleteArg(int *argc, int argIndex, char **argv)
-{
- (*argc)--;
- for (int moveIndex = argIndex; moveIndex < *argc; ++moveIndex)
- {
- argv[moveIndex] = argv[moveIndex + 1];
- }
-}
-
} // anonymous namespace
-
-// Called from main() to process command-line arguments.
-namespace angle
-{
-void InitTestHarness(int *argc, char **argv)
-{
- int argIndex = 0;
- while (argIndex < *argc)
- {
- if (strncmp(argv[argIndex], g_deqpEGLString, strlen(g_deqpEGLString)) == 0)
- {
- HandleDisplayType(argv[argIndex] + strlen(g_deqpEGLString));
- DeleteArg(argc, argIndex, argv);
- }
- else if (strncmp(argv[argIndex], g_angleEGLString, strlen(g_angleEGLString)) == 0)
- {
- HandleDisplayType(argv[argIndex] + strlen(g_angleEGLString));
- DeleteArg(argc, argIndex, argv);
- }
- else
- {
- argIndex++;
- }
- }
-}
-} // namespace angle
diff --git a/gfx/angle/src/tests/deqp_support/angle_deqp_gtest_main.cpp b/gfx/angle/src/tests/deqp_support/angle_deqp_gtest_main.cpp
index e72417f0a..154820a26 100755
--- a/gfx/angle/src/tests/deqp_support/angle_deqp_gtest_main.cpp
+++ b/gfx/angle/src/tests/deqp_support/angle_deqp_gtest_main.cpp
@@ -8,17 +8,12 @@
#include <gtest/gtest.h>
-// Defined in angle_deqp_gtest.cpp. Declared here so we don't need to make a header that we import
-// in Chromium.
-namespace angle
-{
-void InitTestHarness(int *argc, char **argv);
-} // namespace angle
+#include "angle_deqp_libtester.h"
int main(int argc, char **argv)
{
- angle::InitTestHarness(&argc, argv);
testing::InitGoogleTest(&argc, argv);
int rt = RUN_ALL_TESTS();
+ deqp_libtester_shutdown_platform();
return rt;
}
diff --git a/gfx/angle/src/tests/deqp_support/angle_deqp_libtester.h b/gfx/angle/src/tests/deqp_support/angle_deqp_libtester.h
index 7f35ddb06..3e60f74fe 100755
--- a/gfx/angle/src/tests/deqp_support/angle_deqp_libtester.h
+++ b/gfx/angle/src/tests/deqp_support/angle_deqp_libtester.h
@@ -28,7 +28,6 @@
// Exported to the tester app.
ANGLE_LIBTESTER_EXPORT int deqp_libtester_main(int argc, const char *argv[]);
-ANGLE_LIBTESTER_EXPORT bool deqp_libtester_init_platform(int argc, const char *argv[]);
ANGLE_LIBTESTER_EXPORT void deqp_libtester_shutdown_platform();
ANGLE_LIBTESTER_EXPORT bool deqp_libtester_run(const char *caseName);
diff --git a/gfx/angle/src/tests/deqp_support/angle_deqp_libtester_main.cpp b/gfx/angle/src/tests/deqp_support/angle_deqp_libtester_main.cpp
index 90727f390..f5407d570 100755
--- a/gfx/angle/src/tests/deqp_support/angle_deqp_libtester_main.cpp
+++ b/gfx/angle/src/tests/deqp_support/angle_deqp_libtester_main.cpp
@@ -81,25 +81,20 @@ deBool deIsDir(const char *filename)
#error TODO(jmadill): support other platforms
#endif
-bool FindDataDir(std::string *dataDirOut)
+bool FindDataDir(std::string *dataDir)
{
for (auto searchDir : g_dEQPDataSearchDirs)
{
if (deIsDir((std::string(searchDir) + "/gles2").c_str()))
{
- *dataDirOut = searchDir;
+ *dataDir = searchDir;
return true;
}
- std::stringstream dirStream;
- dirStream << angle::GetExecutableDirectory() << "/" << searchDir;
- std::string dataDir = dirStream.str();
- dirStream << "/gles2";
- std::string searchPath = dirStream.str();
-
- if (deIsDir(searchPath.c_str()))
+ std::string directory = angle::GetExecutableDirectory() + "/" + searchDir;
+ if (deIsDir((directory + "/gles2").c_str()))
{
- *dataDirOut = dataDir;
+ *dataDir = directory;
return true;
}
}
@@ -117,9 +112,7 @@ std::string GetLogFileName(std::string deqpDataDir)
#endif
}
-} // anonymous namespace
-
-ANGLE_LIBTESTER_EXPORT bool deqp_libtester_init_platform(int argc, const char *argv[])
+bool InitPlatform(int argc, const char *argv[])
{
try
{
@@ -158,10 +151,12 @@ ANGLE_LIBTESTER_EXPORT bool deqp_libtester_init_platform(int argc, const char *a
return true;
}
+} // anonymous namespace
+
// Exported to the tester app.
ANGLE_LIBTESTER_EXPORT int deqp_libtester_main(int argc, const char *argv[])
{
- if (!deqp_libtester_init_platform(argc, argv))
+ if (!InitPlatform(argc, argv))
{
tcu::die("Could not initialize the dEQP platform");
}
@@ -190,25 +185,18 @@ ANGLE_LIBTESTER_EXPORT int deqp_libtester_main(int argc, const char *argv[])
ANGLE_LIBTESTER_EXPORT void deqp_libtester_shutdown_platform()
{
delete g_executor;
- g_executor = nullptr;
delete g_root;
- g_root = nullptr;
delete g_testCtx;
- g_testCtx = nullptr;
delete g_log;
- g_log = nullptr;
delete g_archive;
- g_archive = nullptr;
delete g_cmdLine;
- g_cmdLine = nullptr;
delete g_platform;
- g_platform = nullptr;
}
ANGLE_LIBTESTER_EXPORT bool deqp_libtester_run(const char *caseName)
{
const char *emptyString = "";
- if (g_platform == nullptr && !deqp_libtester_init_platform(1, &emptyString))
+ if (g_platform == nullptr && !InitPlatform(1, &emptyString))
{
tcu::die("Failed to initialize platform.");
}
diff --git a/gfx/angle/src/tests/deqp_support/deqp_egl_test_expectations.txt b/gfx/angle/src/tests/deqp_support/deqp_egl_test_expectations.txt
index 789d3a6fe..45fc543bb 100755
--- a/gfx/angle/src/tests/deqp_support/deqp_egl_test_expectations.txt
+++ b/gfx/angle/src/tests/deqp_support/deqp_egl_test_expectations.txt
@@ -35,66 +35,66 @@
////////////////////////////////////////////////////////////////////////////////
// TODO(jmadill): Triage these into permananent and temporary failures.
-1340 WIN : dEQP-EGL.functional.query_surface.simple.window.rgb565_no_depth_no_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.simple.window.rgb565_depth_no_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.simple.window.rgb565_depth_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.simple.window.rgb888_no_depth_no_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.simple.window.rgb888_depth_no_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.simple.window.rgb888_depth_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.simple.window.rgba4444_no_depth_no_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.simple.window.rgba4444_depth_no_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.simple.window.rgba4444_depth_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.simple.window.rgba5551_no_depth_no_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.simple.window.rgba5551_depth_no_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.simple.window.rgba5551_depth_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.simple.window.rgba8888_no_depth_no_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.simple.window.rgba8888_depth_no_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.simple.window.rgba8888_depth_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.simple.pbuffer.rgb565_no_depth_no_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.simple.pbuffer.rgb565_depth_no_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.simple.pbuffer.rgb565_depth_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.simple.pbuffer.rgb888_no_depth_no_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.simple.pbuffer.rgb888_depth_no_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.simple.pbuffer.rgb888_depth_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.simple.pbuffer.rgba4444_no_depth_no_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.simple.pbuffer.rgba4444_depth_no_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.simple.pbuffer.rgba4444_depth_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.simple.pbuffer.rgba5551_no_depth_no_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.simple.pbuffer.rgba5551_depth_no_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.simple.pbuffer.rgba5551_depth_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.simple.pbuffer.rgba8888_no_depth_no_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.simple.pbuffer.rgba8888_depth_no_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.simple.pbuffer.rgba8888_depth_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.window.rgb565_no_depth_no_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.window.rgb565_depth_no_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.window.rgb565_depth_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.window.rgb888_no_depth_no_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.window.rgb888_depth_no_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.window.rgb888_depth_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.window.rgba4444_no_depth_no_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.window.rgba4444_depth_no_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.window.rgba4444_depth_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.window.rgba5551_no_depth_no_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.window.rgba5551_depth_no_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.window.rgba5551_depth_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.window.rgba8888_no_depth_no_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.window.rgba8888_depth_no_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.window.rgba8888_depth_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.pbuffer.rgb565_no_depth_no_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.pbuffer.rgb565_depth_no_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.pbuffer.rgb565_depth_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.pbuffer.rgb888_no_depth_no_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.pbuffer.rgb888_depth_no_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.pbuffer.rgb888_depth_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.pbuffer.rgba4444_no_depth_no_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.pbuffer.rgba4444_depth_no_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.pbuffer.rgba4444_depth_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.pbuffer.rgba5551_no_depth_no_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.pbuffer.rgba5551_depth_no_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.pbuffer.rgba5551_depth_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.pbuffer.rgba8888_no_depth_no_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.pbuffer.rgba8888_depth_no_stencil = SKIP
-1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.pbuffer.rgba8888_depth_stencil = SKIP
+1340 WIN : dEQP-EGL.functional.query_surface.simple.window.rgb565_no_depth_no_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.simple.window.rgb565_depth_no_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.simple.window.rgb565_depth_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.simple.window.rgb888_no_depth_no_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.simple.window.rgb888_depth_no_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.simple.window.rgb888_depth_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.simple.window.rgba4444_no_depth_no_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.simple.window.rgba4444_depth_no_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.simple.window.rgba4444_depth_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.simple.window.rgba5551_no_depth_no_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.simple.window.rgba5551_depth_no_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.simple.window.rgba5551_depth_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.simple.window.rgba8888_no_depth_no_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.simple.window.rgba8888_depth_no_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.simple.window.rgba8888_depth_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.simple.pbuffer.rgb565_no_depth_no_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.simple.pbuffer.rgb565_depth_no_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.simple.pbuffer.rgb565_depth_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.simple.pbuffer.rgb888_no_depth_no_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.simple.pbuffer.rgb888_depth_no_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.simple.pbuffer.rgb888_depth_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.simple.pbuffer.rgba4444_no_depth_no_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.simple.pbuffer.rgba4444_depth_no_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.simple.pbuffer.rgba4444_depth_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.simple.pbuffer.rgba5551_no_depth_no_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.simple.pbuffer.rgba5551_depth_no_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.simple.pbuffer.rgba5551_depth_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.simple.pbuffer.rgba8888_no_depth_no_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.simple.pbuffer.rgba8888_depth_no_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.simple.pbuffer.rgba8888_depth_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.window.rgb565_no_depth_no_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.window.rgb565_depth_no_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.window.rgb565_depth_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.window.rgb888_no_depth_no_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.window.rgb888_depth_no_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.window.rgb888_depth_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.window.rgba4444_no_depth_no_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.window.rgba4444_depth_no_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.window.rgba4444_depth_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.window.rgba5551_no_depth_no_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.window.rgba5551_depth_no_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.window.rgba5551_depth_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.window.rgba8888_no_depth_no_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.window.rgba8888_depth_no_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.window.rgba8888_depth_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.pbuffer.rgb565_no_depth_no_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.pbuffer.rgb565_depth_no_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.pbuffer.rgb565_depth_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.pbuffer.rgb888_no_depth_no_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.pbuffer.rgb888_depth_no_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.pbuffer.rgb888_depth_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.pbuffer.rgba4444_no_depth_no_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.pbuffer.rgba4444_depth_no_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.pbuffer.rgba4444_depth_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.pbuffer.rgba5551_no_depth_no_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.pbuffer.rgba5551_depth_no_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.pbuffer.rgba5551_depth_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.pbuffer.rgba8888_no_depth_no_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.pbuffer.rgba8888_depth_no_stencil = FAIL
+1340 WIN : dEQP-EGL.functional.query_surface.set_attribute.pbuffer.rgba8888_depth_stencil = FAIL
1340 WIN : dEQP-EGL.functional.query_config.get_configs.get_configs_bounds = FAIL
1340 WIN : dEQP-EGL.functional.choose_config.simple.selection_only.buffer_size = FAIL
1340 WIN : dEQP-EGL.functional.choose_config.simple.selection_only.red_size = FAIL
@@ -174,9 +174,9 @@
1340 WIN : dEQP-EGL.functional.image.modify.renderbuffer_rgb5_a1_tex_subimage_rgba8 = FAIL
1340 WIN : dEQP-EGL.functional.image.modify.renderbuffer_rgb5_a1_tex_subimage_rgba4 = FAIL
1340 WIN : dEQP-EGL.functional.image.modify.renderbuffer_rgb565_tex_subimage_rgb8 = FAIL
-1340 WIN : dEQP-EGL.functional.negative_api.choose_config = SKIP
+1340 WIN : dEQP-EGL.functional.negative_api.choose_config = FAIL
1340 WIN : dEQP-EGL.functional.negative_api.get_display = FAIL
-1340 WIN : dEQP-EGL.functional.negative_api.surface_attrib = SKIP
+1340 WIN : dEQP-EGL.functional.negative_api.surface_attrib = FAIL
1340 WIN : dEQP-EGL.functional.negative_api.swap_interval = FAIL
1340 WIN : dEQP-EGL.functional.swap_buffers.rgb565_no_depth_no_stencil = FAIL
1340 WIN : dEQP-EGL.functional.swap_buffers.rgb565_depth_no_stencil = FAIL
@@ -254,7 +254,3 @@
1340 WIN : dEQP-EGL.functional.native_coord_mapping.native_window.rgba8888_depth_stencil_clear = FAIL
1340 WIN : dEQP-EGL.functional.native_coord_mapping.native_window.rgba8888_depth_stencil_render = FAIL
1340 WIN : dEQP-EGL.functional.get_proc_address.extension.egl_ext_platform_base = FAIL
-1340 WIN : dEQP-EGL.functional.preserve_swap.preserve.no_read_before_swap.* = SKIP
-1340 WIN : dEQP-EGL.functional.preserve_swap.preserve.read_before_swap.* = SKIP
-1340 WIN : dEQP-EGL.functional.resize.back_buffer.* = SKIP
-1340 WIN : dEQP-EGL.functional.resize.pixel_density.* = SKIP
diff --git a/gfx/angle/src/tests/deqp_support/deqp_gles2_test_expectations.txt b/gfx/angle/src/tests/deqp_support/deqp_gles2_test_expectations.txt
index b0ca48b72..5ea0f1348 100755
--- a/gfx/angle/src/tests/deqp_support/deqp_gles2_test_expectations.txt
+++ b/gfx/angle/src/tests/deqp_support/deqp_gles2_test_expectations.txt
@@ -35,7 +35,7 @@
998 WIN LINUX MAC : dEQP-GLES2.stress.* = SKIP
// Tests that we fail because they're not in line with the WebGL spec
-1335 WIN LINUX MAC ANDROID : dEQP-GLES2.functional.shaders.preprocessor.conditional_inclusion.basic_2* = FAIL
+1335 WIN LINUX MAC : dEQP-GLES2.functional.shaders.preprocessor.conditional_inclusion.basic_2* = FAIL
////////////////////////////////////////////////////////////////////////////////
//
@@ -45,6 +45,11 @@
// Windows only failures
+// These tests crash for unknown reason under a newer D3DCompiler_47.dll
+// TODO(jmadill): Figure out if we can solve these crashes
+1252 WIN : dEQP-GLES2.functional.shaders.random.trigonometric.vertex.63 = SKIP
+1252 WIN : dEQP-GLES2.functional.shaders.random.trigonometric.fragment.63 = SKIP
+
// TODO(jmadill): triage these into temporary and permanent suppressions
1027 WIN : dEQP-GLES2.functional.fbo.render.color_clear.rbo_rgb5_a1 = FAIL
@@ -64,6 +69,7 @@
1027 WIN : dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgb_stencil_index8 = FAIL
1027 WIN : dEQP-GLES2.functional.fbo.render.recreate_colorbuffer.no_rebind_tex2d_rgba_stencil_index8 = FAIL
1033 WIN : dEQP-GLES2.functional.polygon_offset.fixed16_render_with_units = FAIL
+1017 WIN : dEQP-GLES2.functional.shaders.loops.for_constant_iterations.nested_sequence_* = FAIL
1017 WIN : dEQP-GLES2.functional.shaders.loops.for_constant_iterations.nested_tricky_dataflow_* = FAIL
1017 WIN : dEQP-GLES2.functional.shaders.loops.while_constant_iterations.nested_tricky_dataflow_* = FAIL
1017 WIN : dEQP-GLES2.functional.shaders.loops.do_while_constant_iterations.nested_tricky_dataflow_* = FAIL
@@ -123,51 +129,29 @@
1143 LINUX : dEQP-GLES2.functional.texture.mipmap.cube.projected.linear_nearest = FAIL
// Mac specific failures
+1143 MAC : dEQP-GLES2.functional.shaders.invariance.mediump.common_subexpression_1 = FAIL
+1143 MAC : dEQP-GLES2.functional.shaders.invariance.highp.common_subexpression_1 = FAIL
+1143 MAC : dEQP-GLES2.functional.shaders.preprocessor.pragmas.pragma_* = FAIL
+1143 MAC : dEQP-GLES2.functional.shaders.linkage.varying_4 = FAIL
1143 MAC : dEQP-GLES2.functional.shaders.scoping.valid.local_int_variable_hides_struct_type_* = FAIL
1143 MAC : dEQP-GLES2.functional.shaders.scoping.valid.local_struct_variable_hides_struct_type_* = FAIL
1143 MAC : dEQP-GLES2.functional.shaders.scoping.valid.function_parameter_hides_struct_type_* = FAIL
+1143 MAC : dEQP-GLES2.functional.shaders.invariance.highp.common_subexpression_3 = FAIL
+1143 MAC : dEQP-GLES2.functional.shaders.invariance.highp.loop_0 = FAIL
+1143 MAC : dEQP-GLES2.functional.shaders.invariance.highp.loop_1 = FAIL
+1143 MAC : dEQP-GLES2.functional.shaders.invariance.mediump.common_subexpression_3 = FAIL
+1143 MAC : dEQP-GLES2.functional.shaders.invariance.mediump.loop_0 = FAIL
+1143 MAC : dEQP-GLES2.functional.shaders.invariance.mediump.loop_1 = FAIL
+1143 MAC : dEQP-GLES2.functional.shaders.invariance.lowp.common_subexpression_1 = FAIL
+1143 MAC : dEQP-GLES2.functional.shaders.invariance.lowp.common_subexpression_3 = FAIL
+1143 MAC : dEQP-GLES2.functional.shaders.invariance.lowp.loop_0 = FAIL
+1143 MAC : dEQP-GLES2.functional.shaders.invariance.lowp.loop_1 = FAIL
+1143 MAC : dEQP-GLES2.functional.shaders.random.trigonometric.vertex.43 = FAIL
1143 MAC : dEQP-GLES2.functional.shaders.random.trigonometric.vertex.65 = FAIL
-
-// Android only failures
-1484 ANDROID : dEQP-GLES2.functional.vertex_arrays.* = SKIP
-1485 ANDROID : dEQP-GLES2.functional.clipping.triangle_vertex.clip_three.clip_neg_x_neg_z_and_pos_x_pos_z_and_neg_x_neg_y_pos_z = FAIL
-1486 ANDROID : dEQP-GLES2.functional.fbo.completeness.attachment_combinations.none_none_none_tex = FAIL
-1486 ANDROID : dEQP-GLES2.functional.fbo.completeness.attachment_combinations.none_none_rbo_tex = FAIL
-1486 ANDROID : dEQP-GLES2.functional.fbo.completeness.attachment_combinations.none_none_tex_none = FAIL
-1486 ANDROID : dEQP-GLES2.functional.fbo.completeness.attachment_combinations.none_none_tex_rbo = FAIL
-1486 ANDROID : dEQP-GLES2.functional.fbo.completeness.attachment_combinations.none_none_tex_tex = FAIL
-1486 ANDROID : dEQP-GLES2.functional.fbo.completeness.attachment_combinations.rbo_none_none_tex = FAIL
-1486 ANDROID : dEQP-GLES2.functional.fbo.completeness.attachment_combinations.rbo_none_rbo_tex = FAIL
-1486 ANDROID : dEQP-GLES2.functional.fbo.completeness.attachment_combinations.rbo_none_tex_none = FAIL
-1486 ANDROID : dEQP-GLES2.functional.fbo.completeness.attachment_combinations.rbo_none_tex_rbo = FAIL
-1486 ANDROID : dEQP-GLES2.functional.fbo.completeness.attachment_combinations.rbo_none_tex_tex = FAIL
-1486 ANDROID : dEQP-GLES2.functional.fbo.completeness.attachment_combinations.tex_none_none_tex = FAIL
-1486 ANDROID : dEQP-GLES2.functional.fbo.completeness.attachment_combinations.tex_none_rbo_tex = FAIL
-1486 ANDROID : dEQP-GLES2.functional.fbo.completeness.attachment_combinations.tex_none_tex_none = FAIL
-1486 ANDROID : dEQP-GLES2.functional.fbo.completeness.attachment_combinations.tex_none_tex_rbo = FAIL
-1486 ANDROID : dEQP-GLES2.functional.fbo.completeness.attachment_combinations.tex_none_tex_tex = FAIL
-1487 ANDROID : dEQP-GLES2.functional.fbo.completeness.renderable.texture.color0.depth_stencil_unsigned_int_24_8 = FAIL
-1487 ANDROID : dEQP-GLES2.functional.fbo.completeness.renderable.texture.color0.srgb8 = FAIL
-1487 ANDROID : dEQP-GLES2.functional.fbo.completeness.renderable.texture.stencil.depth_stencil_unsigned_int_24_8 = FAIL
-1487 ANDROID : dEQP-GLES2.functional.fbo.completeness.renderable.texture.stencil.srgb8 = FAIL
-1487 ANDROID : dEQP-GLES2.functional.fbo.completeness.renderable.texture.depth.depth_stencil_unsigned_int_24_8 = FAIL
-1487 ANDROID : dEQP-GLES2.functional.fbo.completeness.renderable.texture.depth.srgb8 = FAIL
-1488 ANDROID : dEQP-GLES2.functional.shaders.return.conditional_return_always_vertex = FAIL
-1488 ANDROID : dEQP-GLES2.functional.shaders.return.conditional_return_always_fragment = FAIL
-1488 ANDROID : dEQP-GLES2.functional.shaders.return.output_write_always_vertex = FAIL
-1488 ANDROID : dEQP-GLES2.functional.shaders.return.output_write_always_fragment = FAIL
-1489 ANDROID : dEQP-GLES2.functional.texture.mipmap.2d.generate.a8_fastest = FAIL
-1489 ANDROID : dEQP-GLES2.functional.texture.mipmap.2d.generate.a8_nicest = FAIL
-1489 ANDROID : dEQP-GLES2.functional.texture.mipmap.2d.generate.l8_fastest = FAIL
-1489 ANDROID : dEQP-GLES2.functional.texture.mipmap.2d.generate.l8_nicest = FAIL
-1489 ANDROID : dEQP-GLES2.functional.texture.mipmap.2d.generate.la88_fastest = FAIL
-1489 ANDROID : dEQP-GLES2.functional.texture.mipmap.2d.generate.la88_nicest = FAIL
-1489 ANDROID : dEQP-GLES2.functional.texture.mipmap.cube.generate.a8_fastest = FAIL
-1489 ANDROID : dEQP-GLES2.functional.texture.mipmap.cube.generate.a8_nicest = FAIL
-1489 ANDROID : dEQP-GLES2.functional.texture.mipmap.cube.generate.l8_fastest = FAIL
-1489 ANDROID : dEQP-GLES2.functional.texture.mipmap.cube.generate.l8_nicest = FAIL
-1489 ANDROID : dEQP-GLES2.functional.texture.mipmap.cube.generate.la88_fastest = FAIL
-1489 ANDROID : dEQP-GLES2.functional.texture.mipmap.cube.generate.la88_nicest = FAIL
+1143 MAC : dEQP-GLES2.functional.texture.size.cube.256x256_rgba4444 = FAIL
+1143 MAC : dEQP-GLES2.functional.texture.size.cube.512x512_rgba4444 = FAIL
+1143 MAC : dEQP-GLES2.functional.texture.mipmap.cube.projected.linear_linear = FAIL
+1143 MAC : dEQP-GLES2.functional.texture.specification.basic_copyteximage2d.cube_* = FAIL
// Windows and Linux failures
1020 WIN LINUX : dEQP-GLES2.functional.texture.mipmap.cube.projected.linear_linear = FAIL
@@ -193,11 +177,9 @@
1028 WIN LINUX MAC : dEQP-GLES2.functional.fbo.completeness.renderable.texture.color0.rgba_half_float_oes = FAIL
1028 WIN LINUX MAC : dEQP-GLES2.functional.fbo.completeness.renderable.texture.color0.srgb8 = FAIL
1028 WIN LINUX MAC : dEQP-GLES2.functional.fbo.completeness.renderable.texture.stencil.srgb8 = FAIL
-1028 WIN LINUX MAC : dEQP-GLES2.functional.fbo.completeness.renderable.texture.stencil.srgb8_alpha8 = FAIL
1028 WIN LINUX MAC : dEQP-GLES2.functional.fbo.completeness.renderable.texture.depth.depth_component_unsigned_short = FAIL
1028 WIN LINUX MAC : dEQP-GLES2.functional.fbo.completeness.renderable.texture.depth.depth_component_unsigned_int = FAIL
1028 WIN LINUX MAC : dEQP-GLES2.functional.fbo.completeness.renderable.texture.depth.srgb8 = FAIL
-1028 WIN LINUX MAC : dEQP-GLES2.functional.fbo.completeness.renderable.texture.depth.srgb8_alpha8 = FAIL
1128 WIN LINUX MAC : dEQP-GLES2.functional.negative_api.texture.compressedtexsubimage2d_invalid_size = FAIL
1029 WIN LINUX MAC : dEQP-GLES2.functional.negative_api.texture.teximage2d_invalid_format = FAIL
1029 WIN LINUX MAC : dEQP-GLES2.functional.negative_api.texture.teximage2d_invalid_internalformat = FAIL
diff --git a/gfx/angle/src/tests/deqp_support/deqp_gles31_test_expectations.txt b/gfx/angle/src/tests/deqp_support/deqp_gles31_test_expectations.txt
index 84d327692..49acb746e 100755
--- a/gfx/angle/src/tests/deqp_support/deqp_gles31_test_expectations.txt
+++ b/gfx/angle/src/tests/deqp_support/deqp_gles31_test_expectations.txt
@@ -23,11506 +23,5 @@
// 91531 MAC WIN LINUX : conformance_more_* = SKIP
// 91532 MAC NVIDIA 0x0640 : tex_image_and_sub_image_2d_with_video = PASS FAIL
-// Crashing Tests
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.image.image2d.vertex_binding_array = SKIP
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.image.image2d.vertex_binding_max_array = SKIP
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.image.image2d.fragment_binding_array = SKIP
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.image.image2d.fragment_binding_max_array = SKIP
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.image.image3d.vertex_binding_array = SKIP
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.image.image3d.vertex_binding_max_array = SKIP
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.image.image3d.fragment_binding_array = SKIP
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.image.image3d.fragment_binding_max_array = SKIP
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.negative.image.image2d.vertex_binding_over_max_array = SKIP
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.negative.image.image2d.fragment_binding_over_max_array = SKIP
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.negative.image.image2d.binding_contradictory_array = SKIP
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.negative.image.image3d.vertex_binding_over_max_array = SKIP
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.negative.image.image3d.fragment_binding_over_max_array = SKIP
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.negative.image.image3d.binding_contradictory_array = SKIP
-
-// Failing Tests
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_var.compute.num_work_groups = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_var.compute.work_group_size = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_var.compute.work_group_id = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_var.compute.local_invocation_id = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_var.compute.global_invocation_id = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_var.compute.local_invocation_index = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.abs.float_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.abs.float_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.abs.float_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.abs.vec2_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.abs.vec2_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.abs.vec2_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.abs.vec3_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.abs.vec3_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.abs.vec3_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.abs.vec4_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.abs.vec4_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.abs.vec4_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.abs.int_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.abs.int_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.abs.int_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.abs.ivec2_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.abs.ivec2_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.abs.ivec2_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.abs.ivec3_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.abs.ivec3_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.abs.ivec3_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.abs.ivec4_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.abs.ivec4_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.abs.ivec4_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.sign.float_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.sign.float_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.sign.float_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.sign.vec2_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.sign.vec2_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.sign.vec2_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.sign.vec3_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.sign.vec3_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.sign.vec3_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.sign.vec4_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.sign.vec4_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.sign.vec4_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.sign.int_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.sign.int_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.sign.int_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.sign.ivec2_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.sign.ivec2_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.sign.ivec2_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.sign.ivec3_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.sign.ivec3_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.sign.ivec3_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.sign.ivec4_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.sign.ivec4_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.sign.ivec4_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.floor.float_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.floor.float_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.floor.float_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.floor.vec2_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.floor.vec2_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.floor.vec2_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.floor.vec3_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.floor.vec3_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.floor.vec3_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.floor.vec4_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.floor.vec4_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.floor.vec4_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.trunc.float_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.trunc.float_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.trunc.float_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.trunc.vec2_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.trunc.vec2_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.trunc.vec2_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.trunc.vec3_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.trunc.vec3_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.trunc.vec3_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.trunc.vec4_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.trunc.vec4_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.trunc.vec4_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.round.float_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.round.float_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.round.float_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.round.vec2_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.round.vec2_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.round.vec2_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.round.vec3_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.round.vec3_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.round.vec3_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.round.vec4_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.round.vec4_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.round.vec4_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.roundeven.float_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.roundeven.float_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.roundeven.float_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.roundeven.vec2_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.roundeven.vec2_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.roundeven.vec2_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.roundeven.vec3_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.roundeven.vec3_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.roundeven.vec3_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.roundeven.vec4_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.roundeven.vec4_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.roundeven.vec4_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ceil.float_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ceil.float_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ceil.float_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ceil.vec2_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ceil.vec2_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ceil.vec2_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ceil.vec3_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ceil.vec3_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ceil.vec3_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ceil.vec4_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ceil.vec4_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ceil.vec4_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.fract.float_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.fract.float_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.fract.float_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.fract.vec2_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.fract.vec2_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.fract.vec2_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.fract.vec3_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.fract.vec3_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.fract.vec3_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.fract.vec4_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.fract.vec4_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.fract.vec4_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.modf.float_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.modf.float_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.modf.float_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.modf.vec2_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.modf.vec2_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.modf.vec2_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.modf.vec3_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.modf.vec3_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.modf.vec3_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.modf.vec4_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.modf.vec4_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.modf.vec4_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.isnan.float_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.isnan.float_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.isnan.float_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.isnan.vec2_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.isnan.vec2_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.isnan.vec2_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.isnan.vec3_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.isnan.vec3_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.isnan.vec3_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.isnan.vec4_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.isnan.vec4_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.isnan.vec4_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.isinf.float_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.isinf.float_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.isinf.float_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.isinf.vec2_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.isinf.vec2_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.isinf.vec2_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.isinf.vec3_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.isinf.vec3_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.isinf.vec3_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.isinf.vec4_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.isinf.vec4_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.isinf.vec4_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.floatbitstoint.float_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.floatbitstoint.float_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.floatbitstoint.float_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.floatbitstoint.vec2_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.floatbitstoint.vec2_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.floatbitstoint.vec2_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.floatbitstoint.vec3_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.floatbitstoint.vec3_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.floatbitstoint.vec3_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.floatbitstoint.vec4_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.floatbitstoint.vec4_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.floatbitstoint.vec4_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.floatbitstouint.float_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.floatbitstouint.float_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.floatbitstouint.float_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.floatbitstouint.vec2_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.floatbitstouint.vec2_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.floatbitstouint.vec2_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.floatbitstouint.vec3_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.floatbitstouint.vec3_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.floatbitstouint.vec3_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.floatbitstouint.vec4_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.floatbitstouint.vec4_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.floatbitstouint.vec4_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.frexp.float_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.frexp.float_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.frexp.float_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.frexp.float_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.frexp.float_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.frexp.float_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.frexp.float_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.frexp.float_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.frexp.float_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.frexp.vec2_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.frexp.vec2_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.frexp.vec2_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.frexp.vec2_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.frexp.vec2_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.frexp.vec2_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.frexp.vec2_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.frexp.vec2_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.frexp.vec2_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.frexp.vec3_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.frexp.vec3_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.frexp.vec3_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.frexp.vec3_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.frexp.vec3_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.frexp.vec3_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.frexp.vec3_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.frexp.vec3_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.frexp.vec3_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.frexp.vec4_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.frexp.vec4_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.frexp.vec4_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.frexp.vec4_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.frexp.vec4_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.frexp.vec4_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.frexp.vec4_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.frexp.vec4_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.frexp.vec4_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ldexp.float_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ldexp.float_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ldexp.float_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ldexp.float_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ldexp.float_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ldexp.float_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ldexp.float_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ldexp.float_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ldexp.float_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ldexp.vec2_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ldexp.vec2_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ldexp.vec2_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ldexp.vec2_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ldexp.vec2_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ldexp.vec2_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ldexp.vec2_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ldexp.vec2_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ldexp.vec2_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ldexp.vec3_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ldexp.vec3_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ldexp.vec3_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ldexp.vec3_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ldexp.vec3_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ldexp.vec3_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ldexp.vec3_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ldexp.vec3_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ldexp.vec3_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ldexp.vec4_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ldexp.vec4_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ldexp.vec4_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ldexp.vec4_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ldexp.vec4_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ldexp.vec4_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ldexp.vec4_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ldexp.vec4_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.ldexp.vec4_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.intbitstofloat.int_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.intbitstofloat.ivec2_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.intbitstofloat.ivec3_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.uintbitstofloat.uint_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.uintbitstofloat.uvec2_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.common.uintbitstofloat.uvec3_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.pack_unpack.packsnorm4x8_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.pack_unpack.packsnorm4x8_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.pack_unpack.packsnorm4x8_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.pack_unpack.packsnorm4x8_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.pack_unpack.packsnorm4x8_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.pack_unpack.packsnorm4x8_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.pack_unpack.packsnorm4x8_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.pack_unpack.packsnorm4x8_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.pack_unpack.packsnorm4x8_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.pack_unpack.unpacksnorm4x8_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.pack_unpack.unpacksnorm4x8_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.pack_unpack.unpacksnorm4x8_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.pack_unpack.packunorm4x8_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.pack_unpack.packunorm4x8_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.pack_unpack.packunorm4x8_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.pack_unpack.packunorm4x8_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.pack_unpack.packunorm4x8_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.pack_unpack.packunorm4x8_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.pack_unpack.packunorm4x8_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.pack_unpack.packunorm4x8_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.pack_unpack.packunorm4x8_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.pack_unpack.unpackunorm4x8_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.pack_unpack.unpackunorm4x8_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.pack_unpack.unpackunorm4x8_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.pack_unpack.packsnorm2x16_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.pack_unpack.packsnorm2x16_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.pack_unpack.packsnorm2x16_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.pack_unpack.unpacksnorm2x16_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.pack_unpack.packunorm2x16_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.pack_unpack.packunorm2x16_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.pack_unpack.packunorm2x16_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.pack_unpack.unpackunorm2x16_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.pack_unpack.packhalf2x16_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.pack_unpack.unpackhalf2x16_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.uaddcarry.uint_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.uaddcarry.uint_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.uaddcarry.uint_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.uaddcarry.uint_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.uaddcarry.uint_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.uaddcarry.uint_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.uaddcarry.uint_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.uaddcarry.uint_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.uaddcarry.uint_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.uaddcarry.uvec2_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.uaddcarry.uvec2_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.uaddcarry.uvec2_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.uaddcarry.uvec2_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.uaddcarry.uvec2_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.uaddcarry.uvec2_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.uaddcarry.uvec2_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.uaddcarry.uvec2_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.uaddcarry.uvec2_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.uaddcarry.uvec3_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.uaddcarry.uvec3_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.uaddcarry.uvec3_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.uaddcarry.uvec3_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.uaddcarry.uvec3_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.uaddcarry.uvec3_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.uaddcarry.uvec3_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.uaddcarry.uvec3_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.uaddcarry.uvec3_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.uaddcarry.uvec4_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.uaddcarry.uvec4_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.uaddcarry.uvec4_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.uaddcarry.uvec4_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.uaddcarry.uvec4_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.uaddcarry.uvec4_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.uaddcarry.uvec4_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.uaddcarry.uvec4_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.uaddcarry.uvec4_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.usubborrow.uint_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.usubborrow.uint_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.usubborrow.uint_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.usubborrow.uint_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.usubborrow.uint_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.usubborrow.uint_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.usubborrow.uint_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.usubborrow.uint_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.usubborrow.uint_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.usubborrow.uvec2_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.usubborrow.uvec2_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.usubborrow.uvec2_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.usubborrow.uvec2_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.usubborrow.uvec2_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.usubborrow.uvec2_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.usubborrow.uvec2_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.usubborrow.uvec2_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.usubborrow.uvec2_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.usubborrow.uvec3_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.usubborrow.uvec3_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.usubborrow.uvec3_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.usubborrow.uvec3_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.usubborrow.uvec3_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.usubborrow.uvec3_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.usubborrow.uvec3_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.usubborrow.uvec3_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.usubborrow.uvec3_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.usubborrow.uvec4_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.usubborrow.uvec4_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.usubborrow.uvec4_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.usubborrow.uvec4_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.usubborrow.uvec4_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.usubborrow.uvec4_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.usubborrow.uvec4_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.usubborrow.uvec4_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.usubborrow.uvec4_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.umulextended.uint_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.umulextended.uint_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.umulextended.uint_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.umulextended.uvec2_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.umulextended.uvec2_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.umulextended.uvec2_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.umulextended.uvec3_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.umulextended.uvec3_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.umulextended.uvec3_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.umulextended.uvec4_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.umulextended.uvec4_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.umulextended.uvec4_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.imulextended.int_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.imulextended.int_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.imulextended.int_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.imulextended.ivec2_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.imulextended.ivec2_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.imulextended.ivec2_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.imulextended.ivec3_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.imulextended.ivec3_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.imulextended.ivec3_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.imulextended.ivec4_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.imulextended.ivec4_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.imulextended.ivec4_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.int_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.int_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.int_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.int_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.int_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.int_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.int_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.int_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.int_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.ivec2_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.ivec2_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.ivec2_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.ivec2_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.ivec2_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.ivec2_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.ivec2_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.ivec2_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.ivec2_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.ivec3_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.ivec3_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.ivec3_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.ivec3_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.ivec3_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.ivec3_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.ivec3_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.ivec3_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.ivec3_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.ivec4_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.ivec4_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.ivec4_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.ivec4_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.ivec4_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.ivec4_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.ivec4_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.ivec4_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.ivec4_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.uint_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.uint_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.uint_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.uint_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.uint_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.uint_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.uint_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.uint_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.uint_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.uvec2_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.uvec2_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.uvec2_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.uvec2_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.uvec2_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.uvec2_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.uvec2_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.uvec2_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.uvec2_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.uvec3_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.uvec3_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.uvec3_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.uvec3_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.uvec3_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.uvec3_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.uvec3_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.uvec3_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.uvec3_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.uvec4_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.uvec4_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.uvec4_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.uvec4_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.uvec4_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.uvec4_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.uvec4_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.uvec4_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldextract.uvec4_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.int_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.int_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.int_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.int_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.int_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.int_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.int_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.int_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.int_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.ivec2_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.ivec2_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.ivec2_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.ivec2_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.ivec2_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.ivec2_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.ivec2_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.ivec2_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.ivec2_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.ivec3_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.ivec3_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.ivec3_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.ivec3_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.ivec3_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.ivec3_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.ivec3_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.ivec3_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.ivec3_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.ivec4_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.ivec4_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.ivec4_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.ivec4_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.ivec4_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.ivec4_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.ivec4_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.ivec4_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.ivec4_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.uint_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.uint_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.uint_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.uint_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.uint_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.uint_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.uint_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.uint_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.uint_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.uvec2_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.uvec2_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.uvec2_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.uvec2_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.uvec2_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.uvec2_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.uvec2_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.uvec2_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.uvec2_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.uvec3_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.uvec3_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.uvec3_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.uvec3_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.uvec3_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.uvec3_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.uvec3_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.uvec3_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.uvec3_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.uvec4_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.uvec4_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.uvec4_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.uvec4_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.uvec4_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.uvec4_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.uvec4_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.uvec4_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldinsert.uvec4_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.int_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.int_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.int_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.int_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.int_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.int_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.int_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.int_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.int_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.ivec2_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.ivec2_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.ivec2_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.ivec2_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.ivec2_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.ivec2_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.ivec2_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.ivec2_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.ivec2_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.ivec3_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.ivec3_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.ivec3_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.ivec3_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.ivec3_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.ivec3_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.ivec3_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.ivec3_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.ivec3_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.ivec4_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.ivec4_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.ivec4_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.ivec4_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.ivec4_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.ivec4_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.ivec4_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.ivec4_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.ivec4_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.uint_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.uint_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.uint_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.uint_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.uint_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.uint_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.uint_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.uint_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.uint_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.uvec2_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.uvec2_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.uvec2_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.uvec2_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.uvec2_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.uvec2_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.uvec2_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.uvec2_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.uvec2_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.uvec3_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.uvec3_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.uvec3_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.uvec3_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.uvec3_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.uvec3_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.uvec3_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.uvec3_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.uvec3_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.uvec4_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.uvec4_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.uvec4_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.uvec4_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.uvec4_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.uvec4_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.uvec4_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.uvec4_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitfieldreverse.uvec4_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.int_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.int_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.int_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.int_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.int_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.int_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.int_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.int_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.int_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.ivec2_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.ivec2_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.ivec2_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.ivec2_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.ivec2_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.ivec2_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.ivec2_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.ivec2_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.ivec2_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.ivec3_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.ivec3_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.ivec3_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.ivec3_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.ivec3_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.ivec3_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.ivec3_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.ivec3_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.ivec3_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.ivec4_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.ivec4_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.ivec4_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.ivec4_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.ivec4_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.ivec4_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.ivec4_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.ivec4_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.ivec4_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.uint_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.uint_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.uint_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.uint_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.uint_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.uint_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.uint_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.uint_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.uint_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.uvec2_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.uvec2_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.uvec2_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.uvec2_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.uvec2_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.uvec2_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.uvec2_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.uvec2_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.uvec2_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.uvec3_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.uvec3_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.uvec3_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.uvec3_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.uvec3_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.uvec3_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.uvec3_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.uvec3_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.uvec3_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.uvec4_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.uvec4_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.uvec4_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.uvec4_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.uvec4_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.uvec4_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.uvec4_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.uvec4_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.bitcount.uvec4_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.int_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.int_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.int_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.int_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.int_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.int_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.int_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.int_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.int_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.ivec2_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.ivec2_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.ivec2_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.ivec2_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.ivec2_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.ivec2_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.ivec2_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.ivec2_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.ivec2_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.ivec3_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.ivec3_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.ivec3_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.ivec3_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.ivec3_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.ivec3_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.ivec3_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.ivec3_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.ivec3_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.ivec4_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.ivec4_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.ivec4_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.ivec4_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.ivec4_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.ivec4_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.ivec4_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.ivec4_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.ivec4_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.uint_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.uint_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.uint_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.uint_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.uint_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.uint_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.uint_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.uint_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.uint_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.uvec2_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.uvec2_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.uvec2_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.uvec2_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.uvec2_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.uvec2_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.uvec2_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.uvec2_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.uvec2_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.uvec3_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.uvec3_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.uvec3_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.uvec3_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.uvec3_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.uvec3_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.uvec3_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.uvec3_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.uvec3_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.uvec4_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.uvec4_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.uvec4_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.uvec4_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.uvec4_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.uvec4_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.uvec4_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.uvec4_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findlsb.uvec4_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.int_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.int_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.int_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.int_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.int_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.int_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.int_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.int_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.int_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.ivec2_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.ivec2_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.ivec2_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.ivec2_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.ivec2_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.ivec2_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.ivec2_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.ivec2_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.ivec2_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.ivec3_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.ivec3_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.ivec3_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.ivec3_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.ivec3_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.ivec3_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.ivec3_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.ivec3_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.ivec3_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.ivec4_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.ivec4_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.ivec4_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.ivec4_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.ivec4_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.ivec4_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.ivec4_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.ivec4_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.ivec4_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.uint_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.uint_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.uint_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.uint_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.uint_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.uint_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.uint_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.uint_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.uint_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.uvec2_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.uvec2_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.uvec2_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.uvec2_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.uvec2_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.uvec2_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.uvec2_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.uvec2_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.uvec2_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.uvec3_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.uvec3_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.uvec3_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.uvec3_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.uvec3_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.uvec3_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.uvec3_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.uvec3_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.uvec3_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.uvec4_lowp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.uvec4_lowp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.uvec4_lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.uvec4_mediump_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.uvec4_mediump_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.uvec4_mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.uvec4_highp_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.uvec4_highp_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.uvec4_highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.add.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.add.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.add.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.add.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.add.mediump_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.add.mediump_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.add.mediump_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.add.mediump_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.add.highp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.add.highp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.add.highp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.add.highp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sub.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sub.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sub.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sub.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sub.mediump_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sub.mediump_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sub.mediump_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sub.mediump_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sub.highp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sub.highp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sub.highp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sub.highp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.mul.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.mul.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.mul.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.mul.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.mul.mediump_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.mul.mediump_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.mul.mediump_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.mul.mediump_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.mul.highp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.mul.highp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.mul.highp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.mul.highp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.div.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.div.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.div.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.div.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.div.mediump_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.div.mediump_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.div.mediump_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.div.mediump_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.radians.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.radians.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.radians.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.radians.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.radians.mediump_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.radians.mediump_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.radians.mediump_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.radians.mediump_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.radians.highp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.radians.highp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.radians.highp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.radians.highp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.degrees.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.degrees.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.degrees.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.degrees.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.degrees.mediump_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.degrees.mediump_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.degrees.mediump_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.degrees.mediump_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.degrees.highp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.degrees.highp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.degrees.highp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.degrees.highp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sin.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sin.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sin.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sin.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sin.highp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sin.highp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sin.highp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sin.highp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.cos.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.cos.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.cos.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.cos.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.cos.highp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.cos.highp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.cos.highp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.cos.highp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.tan.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.tan.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.tan.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.tan.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.tan.highp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.tan.highp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.tan.highp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.tan.highp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.asin.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.asin.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.asin.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.asin.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.asin.mediump_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.asin.mediump_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.asin.mediump_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.asin.mediump_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.asin.highp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.asin.highp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.asin.highp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.asin.highp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.acos.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.acos.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.acos.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.acos.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.acos.highp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.acos.highp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.acos.highp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.acos.highp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.atan2.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.atan2.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.atan2.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.atan2.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.atan.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.atan.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.atan.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.atan.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.atan.highp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.atan.highp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.atan.highp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.atan.highp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sinh.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sinh.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sinh.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sinh.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sinh.mediump_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sinh.mediump_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sinh.mediump_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sinh.mediump_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sinh.highp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sinh.highp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sinh.highp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sinh.highp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.cosh.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.cosh.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.cosh.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.cosh.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.cosh.mediump_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.cosh.mediump_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.cosh.mediump_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.cosh.mediump_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.cosh.highp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.cosh.highp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.cosh.highp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.cosh.highp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.tanh.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.tanh.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.tanh.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.tanh.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.tanh.mediump_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.tanh.mediump_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.tanh.mediump_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.tanh.mediump_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.tanh.highp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.tanh.highp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.tanh.highp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.tanh.highp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.asinh.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.asinh.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.asinh.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.asinh.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.asinh.mediump_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.asinh.mediump_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.asinh.mediump_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.asinh.mediump_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.asinh.highp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.asinh.highp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.asinh.highp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.asinh.highp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.acosh.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.acosh.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.acosh.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.acosh.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.acosh.mediump_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.acosh.mediump_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.acosh.mediump_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.acosh.mediump_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.atanh.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.atanh.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.atanh.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.atanh.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.atanh.mediump_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.atanh.mediump_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.atanh.mediump_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.atanh.mediump_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.pow.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.pow.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.pow.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.pow.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.pow.mediump_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.pow.mediump_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.pow.mediump_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.pow.mediump_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.pow.highp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.pow.highp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.pow.highp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.pow.highp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.exp.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.exp.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.exp.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.exp.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.exp.mediump_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.exp.mediump_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.exp.mediump_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.exp.mediump_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.exp.highp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.exp.highp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.exp.highp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.exp.highp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.log.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.log.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.log.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.log.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.log.mediump_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.log.mediump_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.log.mediump_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.log.mediump_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.log.highp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.log.highp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.log.highp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.log.highp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.exp2.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.exp2.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.exp2.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.exp2.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.exp2.mediump_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.exp2.mediump_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.exp2.mediump_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.exp2.mediump_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.exp2.highp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.exp2.highp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.exp2.highp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.exp2.highp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.log2.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.log2.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.log2.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.log2.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.log2.mediump_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.log2.mediump_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.log2.mediump_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.log2.mediump_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.log2.highp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.log2.highp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.log2.highp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.log2.highp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sqrt.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sqrt.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sqrt.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sqrt.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sqrt.mediump_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sqrt.mediump_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sqrt.mediump_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sqrt.mediump_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sqrt.highp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sqrt.highp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sqrt.highp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sqrt.highp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.inversesqrt.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.inversesqrt.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.inversesqrt.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.inversesqrt.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.inversesqrt.mediump_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.inversesqrt.mediump_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.inversesqrt.mediump_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.inversesqrt.mediump_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.inversesqrt.highp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.inversesqrt.highp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.inversesqrt.highp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.inversesqrt.highp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.abs.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.abs.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.abs.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.abs.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.abs.mediump_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.abs.mediump_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.abs.mediump_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.abs.mediump_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.abs.highp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.abs.highp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.abs.highp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.abs.highp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sign.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sign.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sign.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sign.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sign.mediump_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sign.mediump_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sign.mediump_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sign.mediump_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sign.highp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sign.highp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sign.highp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.sign.highp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.floor.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.floor.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.floor.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.floor.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.floor.mediump_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.floor.mediump_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.floor.mediump_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.floor.mediump_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.floor.highp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.floor.highp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.floor.highp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.floor.highp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.trunc.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.trunc.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.trunc.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.trunc.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.trunc.mediump_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.trunc.mediump_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.trunc.mediump_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.trunc.mediump_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.trunc.highp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.trunc.highp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.trunc.highp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.trunc.highp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.round.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.round.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.round.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.round.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.round.mediump_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.round.mediump_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.round.mediump_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.round.mediump_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.round.highp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.round.highp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.round.highp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.round.highp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.roundeven.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.roundeven.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.roundeven.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.roundeven.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.roundeven.mediump_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.roundeven.mediump_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.roundeven.mediump_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.roundeven.mediump_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.roundeven.highp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.roundeven.highp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.roundeven.highp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.roundeven.highp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ceil.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ceil.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ceil.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ceil.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ceil.mediump_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ceil.mediump_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ceil.mediump_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ceil.mediump_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ceil.highp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ceil.highp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ceil.highp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ceil.highp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.fract.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.fract.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.fract.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.fract.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.fract.mediump_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.fract.mediump_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.fract.mediump_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.fract.mediump_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.fract.highp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.fract.highp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.fract.highp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.fract.highp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.mod.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.mod.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.mod.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.mod.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.mod.mediump_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.mod.mediump_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.mod.mediump_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.mod.mediump_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.modf.lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.modf.mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.modf.highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.min.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.min.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.min.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.min.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.min.mediump_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.min.mediump_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.min.mediump_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.min.mediump_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.max.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.max.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.max.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.max.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.max.mediump_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.max.mediump_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.max.mediump_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.max.mediump_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.clamp.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.clamp.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.clamp.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.clamp.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.clamp.mediump_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.clamp.mediump_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.clamp.mediump_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.clamp.mediump_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.mix.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.mix.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.mix.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.mix.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.mix.mediump_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.mix.mediump_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.mix.mediump_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.mix.mediump_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.mix.highp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.mix.highp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.mix.highp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.mix.highp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.step.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.step.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.step.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.step.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.step.mediump_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.step.mediump_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.step.mediump_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.step.mediump_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.step.highp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.step.highp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.step.highp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.step.highp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.smoothstep.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.smoothstep.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.smoothstep.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.smoothstep.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.length.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.length.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.length.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.length.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.length.mediump_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.length.mediump_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.length.mediump_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.length.mediump_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.length.highp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.length.highp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.length.highp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.length.highp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.distance.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.distance.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.distance.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.distance.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.distance.mediump_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.distance.mediump_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.distance.mediump_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.distance.mediump_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.distance.highp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.distance.highp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.distance.highp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.distance.highp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.dot.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.dot.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.dot.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.dot.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.dot.mediump_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.dot.mediump_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.dot.mediump_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.dot.mediump_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.dot.highp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.dot.highp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.dot.highp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.cross.lowp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.cross.mediump_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.cross.highp_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.normalize.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.normalize.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.normalize.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.normalize.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.normalize.mediump_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.normalize.mediump_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.normalize.mediump_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.normalize.mediump_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.normalize.highp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.normalize.highp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.normalize.highp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.normalize.highp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.faceforward.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.faceforward.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.faceforward.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.faceforward.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.faceforward.mediump_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.faceforward.mediump_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.faceforward.mediump_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.faceforward.mediump_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.faceforward.highp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.faceforward.highp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.faceforward.highp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.faceforward.highp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.reflect.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.reflect.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.reflect.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.reflect.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.reflect.mediump_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.reflect.mediump_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.reflect.mediump_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.reflect.highp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.reflect.highp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.refract.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.refract.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.refract.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.refract.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.refract.mediump_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.refract.mediump_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.refract.mediump_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.refract.mediump_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.refract.highp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.refract.highp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.refract.highp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.refract.highp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.matrixcompmult.lowp_compute.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.matrixcompmult.lowp_compute.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.matrixcompmult.lowp_compute.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.matrixcompmult.lowp_compute.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.matrixcompmult.lowp_compute.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.matrixcompmult.lowp_compute.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.matrixcompmult.lowp_compute.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.matrixcompmult.lowp_compute.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.matrixcompmult.lowp_compute.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.matrixcompmult.mediump_compute.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.matrixcompmult.mediump_compute.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.matrixcompmult.mediump_compute.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.matrixcompmult.mediump_compute.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.matrixcompmult.mediump_compute.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.matrixcompmult.mediump_compute.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.matrixcompmult.mediump_compute.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.matrixcompmult.mediump_compute.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.matrixcompmult.mediump_compute.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.matrixcompmult.highp_compute.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.matrixcompmult.highp_compute.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.matrixcompmult.highp_compute.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.matrixcompmult.highp_compute.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.matrixcompmult.highp_compute.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.matrixcompmult.highp_compute.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.matrixcompmult.highp_compute.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.matrixcompmult.highp_compute.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.matrixcompmult.highp_compute.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.outerproduct.lowp_compute.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.outerproduct.lowp_compute.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.outerproduct.lowp_compute.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.outerproduct.lowp_compute.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.outerproduct.lowp_compute.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.outerproduct.lowp_compute.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.outerproduct.lowp_compute.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.outerproduct.lowp_compute.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.outerproduct.lowp_compute.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.outerproduct.mediump_compute.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.outerproduct.mediump_compute.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.outerproduct.mediump_compute.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.outerproduct.mediump_compute.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.outerproduct.mediump_compute.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.outerproduct.mediump_compute.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.outerproduct.mediump_compute.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.outerproduct.mediump_compute.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.outerproduct.mediump_compute.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.outerproduct.highp_compute.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.outerproduct.highp_compute.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.outerproduct.highp_compute.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.outerproduct.highp_compute.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.outerproduct.highp_compute.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.outerproduct.highp_compute.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.outerproduct.highp_compute.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.outerproduct.highp_compute.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.outerproduct.highp_compute.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.transpose.lowp_compute.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.transpose.lowp_compute.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.transpose.lowp_compute.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.transpose.lowp_compute.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.transpose.lowp_compute.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.transpose.lowp_compute.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.transpose.lowp_compute.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.transpose.lowp_compute.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.transpose.lowp_compute.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.transpose.mediump_compute.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.transpose.mediump_compute.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.transpose.mediump_compute.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.transpose.mediump_compute.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.transpose.mediump_compute.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.transpose.mediump_compute.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.transpose.mediump_compute.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.transpose.mediump_compute.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.transpose.mediump_compute.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.transpose.highp_compute.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.transpose.highp_compute.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.transpose.highp_compute.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.transpose.highp_compute.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.transpose.highp_compute.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.transpose.highp_compute.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.transpose.highp_compute.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.transpose.highp_compute.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.transpose.highp_compute.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.determinant.lowp_compute.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.determinant.mediump_compute.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.determinant.highp_compute.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.inverse.lowp_compute.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.inverse.mediump_compute.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.frexp.lowp_vertex.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.frexp.lowp_vertex.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.frexp.lowp_vertex.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.frexp.lowp_vertex.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.frexp.lowp_fragment.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.frexp.lowp_fragment.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.frexp.lowp_fragment.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.frexp.lowp_fragment.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.frexp.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.frexp.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.frexp.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.frexp.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.frexp.mediump_vertex.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.frexp.mediump_vertex.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.frexp.mediump_vertex.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.frexp.mediump_vertex.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.frexp.mediump_fragment.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.frexp.mediump_fragment.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.frexp.mediump_fragment.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.frexp.mediump_fragment.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.frexp.mediump_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.frexp.mediump_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.frexp.mediump_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.frexp.mediump_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.frexp.highp_vertex.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.frexp.highp_vertex.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.frexp.highp_vertex.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.frexp.highp_vertex.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.frexp.highp_fragment.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.frexp.highp_fragment.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.frexp.highp_fragment.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.frexp.highp_fragment.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.frexp.highp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.frexp.highp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.frexp.highp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.frexp.highp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ldexp.lowp_vertex.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ldexp.lowp_vertex.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ldexp.lowp_vertex.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ldexp.lowp_vertex.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ldexp.lowp_fragment.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ldexp.lowp_fragment.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ldexp.lowp_fragment.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ldexp.lowp_fragment.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ldexp.lowp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ldexp.lowp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ldexp.lowp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ldexp.lowp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ldexp.mediump_vertex.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ldexp.mediump_vertex.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ldexp.mediump_vertex.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ldexp.mediump_vertex.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ldexp.mediump_fragment.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ldexp.mediump_fragment.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ldexp.mediump_fragment.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ldexp.mediump_fragment.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ldexp.mediump_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ldexp.mediump_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ldexp.mediump_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ldexp.mediump_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ldexp.highp_vertex.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ldexp.highp_vertex.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ldexp.highp_vertex.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ldexp.highp_vertex.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ldexp.highp_fragment.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ldexp.highp_fragment.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ldexp.highp_fragment.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ldexp.highp_fragment.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ldexp.highp_compute.scalar = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ldexp.highp_compute.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ldexp.highp_compute.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_functions.precision.ldexp.highp_compute.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.sampler.const_literal.compute.sampler2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.sampler.const_literal.compute.samplercube = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.sampler.const_literal.compute.sampler2darray = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.sampler.const_literal.compute.sampler3d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.sampler.const_literal.compute.sampler2dshadow = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.sampler.const_literal.compute.samplercubeshadow = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.sampler.const_literal.compute.sampler2darrayshadow = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.sampler.const_literal.compute.isampler2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.sampler.const_literal.compute.isamplercube = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.sampler.const_literal.compute.isampler2darray = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.sampler.const_literal.compute.isampler3d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.sampler.const_literal.compute.usampler2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.sampler.const_literal.compute.usamplercube = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.sampler.const_literal.compute.usampler2darray = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.sampler.const_literal.compute.usampler3d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.sampler.const_expression.compute.sampler2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.sampler.const_expression.compute.samplercube = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.sampler.const_expression.compute.sampler2darray = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.sampler.const_expression.compute.sampler3d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.sampler.const_expression.compute.sampler2dshadow = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.sampler.const_expression.compute.samplercubeshadow = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.sampler.const_expression.compute.sampler2darrayshadow = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.sampler.const_expression.compute.isampler2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.sampler.const_expression.compute.isamplercube = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.sampler.const_expression.compute.isampler2darray = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.sampler.const_expression.compute.isampler3d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.sampler.const_expression.compute.usampler2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.sampler.const_expression.compute.usamplercube = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.sampler.const_expression.compute.usampler2darray = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.sampler.const_expression.compute.usampler3d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.ubo.const_literal_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.ubo.const_literal_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.ubo.const_literal_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.ubo.const_expression_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.ubo.const_expression_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.ubo.const_expression_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.ssbo.const_literal_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.ssbo.const_literal_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.ssbo.const_literal_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.ssbo.const_expression_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.ssbo.const_expression_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.ssbo.const_expression_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.atomic_counter.const_literal_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.atomic_counter.const_literal_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.atomic_counter.const_literal_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.atomic_counter.const_expression_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.atomic_counter.const_expression_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.opaque_type_indexing.atomic_counter.const_expression_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.functions.overloading.arrays_of_arrays_size_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.functions.overloading.arrays_of_arrays_size_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.explicit.float_3x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.explicit.float_3x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.explicit.float_3x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.explicit.float_3x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.explicit.int_3x1_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.explicit.int_3x1_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.explicit.int_4x4x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.explicit.int_4x4x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.explicit.bool_3x3x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.explicit.bool_3x3x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.explicit.bool_2x1x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.explicit.bool_2x1x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.explicit.struct_3x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.explicit.struct_3x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.explicit.struct_4x1x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.explicit.struct_4x1x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.explicit.vec3_4x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.explicit.vec3_4x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.explicit.ivec3_3x2x1_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.explicit.ivec3_3x2x1_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.explicit.bvec3_1x2x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.explicit.bvec3_1x2x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.explicit.mat3_3x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.explicit.mat3_3x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.explicit.mat3_3x3x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.explicit.mat3_3x3x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.explicit.mat3_3x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.explicit.mat3_3x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.explicit.high_dimensional_array_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.explicit.high_dimensional_array_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.implicit.float_3x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.implicit.float_3x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.implicit.float_3x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.implicit.float_3x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.implicit.int_3x1_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.implicit.int_3x1_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.implicit.int_4x4x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.implicit.int_4x4x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.implicit.bool_3x3x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.implicit.bool_3x3x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.implicit.bool_2x1x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.implicit.bool_2x1x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.implicit.struct_3x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.implicit.struct_3x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.implicit.struct_4x1x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.implicit.struct_4x1x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.implicit.vec3_4x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.implicit.vec3_4x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.implicit.ivec3_3x2x1_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.implicit.ivec3_3x2x1_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.implicit.bvec3_1x2x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.implicit.bvec3_1x2x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.implicit.mat3_3x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.implicit.mat3_3x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.implicit.mat3_3x3x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.implicit.mat3_3x3x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.implicit.mat3_3x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.implicit.mat3_3x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.implicit.int_high_dimensional_array_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.constructor.implicit.int_high_dimensional_array_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.return.explicit.float_3x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.return.explicit.float_3x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.return.explicit.int_2x2x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.return.explicit.int_2x2x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.return.explicit.bool_3x2x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.return.explicit.bool_3x2x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.return.explicit.vec3_2x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.return.explicit.vec3_2x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.return.explicit.struct_3x1x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.return.explicit.struct_3x1x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.return.explicit.ivec3_3x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.return.explicit.ivec3_3x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.return.explicit.bvec4_4x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.return.explicit.bvec4_4x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.return.explicit.mat3_3x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.return.explicit.mat3_3x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.return.explicit.mat3_3x3x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.return.explicit.mat3_3x3x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.return.explicit.mat3_3x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.return.explicit.mat3_3x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.return.implicit.float_3x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.return.implicit.float_3x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.return.implicit.int_2x2x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.return.implicit.int_2x2x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.return.implicit.bool_3x2x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.return.implicit.bool_3x2x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.return.implicit.vec3_2x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.return.implicit.vec3_2x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.return.implicit.struct_3x1x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.return.implicit.struct_3x1x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.return.implicit.ivec3_3x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.return.implicit.ivec3_3x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.return.implicit.bvec4_4x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.return.implicit.bvec4_4x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.return.implicit.mat3_3x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.return.implicit.mat3_3x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.return.implicit.mat3_3x3x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.return.implicit.mat3_3x3x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.return.implicit.mat3_3x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.return.implicit.mat3_3x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.in.float_3x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.in.float_3x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.in.int_2x2x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.in.int_2x2x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.in.bool_3x2x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.in.bool_3x2x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.in.vec3_2x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.in.vec3_2x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.in.struct_3x1x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.in.struct_3x1x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.in.ivec3_3x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.in.ivec3_3x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.in.bvec4_4x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.in.bvec4_4x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.in.mat3_3x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.in.mat3_3x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.in.mat3_3x3x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.in.mat3_3x3x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.in.mat3_3x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.in.mat3_3x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.out.float_3x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.out.float_3x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.out.int_2x2x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.out.int_2x2x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.out.bool_3x2x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.out.bool_3x2x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.out.vec3_2x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.out.vec3_2x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.out.struct_3x1x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.out.struct_3x1x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.out.ivec3_3x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.out.ivec3_3x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.out.bvec4_4x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.out.bvec4_4x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.out.mat3_3x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.out.mat3_3x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.out.mat3_3x3x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.out.mat3_3x3x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.out.mat3_3x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.out.mat3_3x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.unnamed.float_3x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.unnamed.float_3x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.unnamed.int_2x2x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.unnamed.int_2x2x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.unnamed.bool_3x2x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.unnamed.bool_3x2x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.unnamed.vec3_2x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.unnamed.vec3_2x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.unnamed.struct_3x1x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.unnamed.struct_3x1x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.unnamed.ivec3_3x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.unnamed.ivec3_3x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.unnamed.bvec4_4x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.unnamed.bvec4_4x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.unnamed.mat3_3x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.unnamed.mat3_3x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.unnamed.mat3_3x3x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.unnamed.mat3_3x3x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.unnamed.mat3_3x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.parameter.unnamed.mat3_3x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.implicit_size.float_3x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.implicit_size.float_3x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.implicit_size.int_2x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.implicit_size.int_2x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.implicit_size.bool_3x3x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.implicit_size.bool_3x3x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.implicit_size.struct_5x5x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.implicit_size.struct_5x5x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.implicit_size.vec3_1x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.implicit_size.vec3_1x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.implicit_size.ivec3_3x1x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.implicit_size.ivec3_3x1x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.implicit_size.bvec3_3x1_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.implicit_size.bvec3_3x1_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.implicit_size.mat3_3x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.implicit_size.mat3_3x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.implicit_size.mat3_3x3x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.implicit_size.mat3_3x3x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.implicit_size.mat3_3x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.implicit_size.mat3_3x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.explicit_to_explicit.float_3x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.explicit_to_explicit.float_3x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.explicit_to_explicit.int_2x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.explicit_to_explicit.int_2x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.explicit_to_explicit.bool_3x3x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.explicit_to_explicit.bool_3x3x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.explicit_to_explicit.struct_5x5x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.explicit_to_explicit.struct_5x5x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.explicit_to_explicit.vec3_1x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.explicit_to_explicit.vec3_1x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.explicit_to_explicit.ivec3_3x1x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.explicit_to_explicit.ivec3_3x1x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.explicit_to_explicit.bvec3_3x1_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.explicit_to_explicit.bvec3_3x1_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.explicit_to_explicit.mat3_3x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.explicit_to_explicit.mat3_3x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.explicit_to_explicit.mat3_3x3x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.explicit_to_explicit.mat3_3x3x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.explicit_to_explicit.mat3_3x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.explicit_to_explicit.mat3_3x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.explicit_to_implicit.float_3x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.explicit_to_implicit.float_3x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.explicit_to_implicit.int_2x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.explicit_to_implicit.int_2x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.explicit_to_implicit.bool_3x3x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.explicit_to_implicit.bool_3x3x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.explicit_to_implicit.struct_5x5x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.explicit_to_implicit.struct_5x5x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.explicit_to_implicit.vec3_1x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.explicit_to_implicit.vec3_1x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.explicit_to_implicit.ivec3_3x1x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.explicit_to_implicit.ivec3_3x1x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.explicit_to_implicit.bvec3_3x1_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.explicit_to_implicit.bvec3_3x1_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.explicit_to_implicit.mat3_3x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.explicit_to_implicit.mat3_3x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.explicit_to_implicit.mat3_3x3x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.explicit_to_implicit.mat3_3x3x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.explicit_to_implicit.mat3_3x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.explicit_to_implicit.mat3_3x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.implicit_to_explicit.float_3x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.implicit_to_explicit.float_3x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.implicit_to_explicit.int_2x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.implicit_to_explicit.int_2x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.implicit_to_explicit.bool_3x3x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.implicit_to_explicit.bool_3x3x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.implicit_to_explicit.struct_5x5x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.implicit_to_explicit.struct_5x5x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.implicit_to_explicit.vec3_1x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.implicit_to_explicit.vec3_1x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.implicit_to_explicit.ivec3_3x1x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.implicit_to_explicit.ivec3_3x1x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.implicit_to_explicit.bvec3_3x1_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.implicit_to_explicit.bvec3_3x1_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.implicit_to_explicit.mat3_3x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.implicit_to_explicit.mat3_3x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.implicit_to_explicit.mat3_3x3x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.implicit_to_explicit.mat3_3x3x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.implicit_to_explicit.mat3_3x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.implicit_to_explicit.mat3_3x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.implicit_to_implicit.float_3x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.implicit_to_implicit.float_3x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.implicit_to_implicit.int_2x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.implicit_to_implicit.int_2x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.implicit_to_implicit.bool_3x3x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.implicit_to_implicit.bool_3x3x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.implicit_to_implicit.struct_5x5x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.implicit_to_implicit.struct_5x5x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.implicit_to_implicit.vec3_1x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.implicit_to_implicit.vec3_1x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.implicit_to_implicit.ivec3_3x1x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.implicit_to_implicit.ivec3_3x1x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.implicit_to_implicit.bvec3_3x1_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.implicit_to_implicit.bvec3_3x1_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.implicit_to_implicit.mat3_3x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.implicit_to_implicit.mat3_3x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.implicit_to_implicit.mat3_3x3x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.implicit_to_implicit.mat3_3x3x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.implicit_to_implicit.mat3_3x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.assignment.implicit_to_implicit.mat3_3x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.length.float_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.length.float_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.length.int_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.length.int_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.length.bool_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.length.bool_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.length.struct_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.length.struct_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.length.mat3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.length.mat3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.length.constant_expression_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.length.constant_expression_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.array_access.constant_expression_access_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.array_access.constant_expression_access_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.array_access.dynamic_expression_access_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.array_access.dynamic_expression_access_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.single_statement_multiple_declarations.explicit_constructor.float_2_dimensions_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.single_statement_multiple_declarations.explicit_constructor.float_2_dimensions_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.single_statement_multiple_declarations.explicit_constructor.int_3_dimensions_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.single_statement_multiple_declarations.explicit_constructor.int_3_dimensions_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.single_statement_multiple_declarations.implicit_constructor.float_2_dimensions_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.single_statement_multiple_declarations.implicit_constructor.float_2_dimensions_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.single_statement_multiple_declarations.implicit_constructor.int_3_dimensions_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.arrays_of_arrays.single_statement_multiple_declarations.implicit_constructor.int_3_dimensions_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.linkage.shader_storage_block.mismatch_number_of_declarations = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.linkage.shader_storage_block.mismatch_order = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.linkage.shader_storage_block.mismatch_type = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.linkage.shader_storage_block.mismatch_member_name = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.linkage.shader_storage_block.mismatch_member_unsized_sized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.linkage.shader_storage_block.mismatch_member_array_size = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.linkage.shader_storage_block.mismatch_with_and_without_instance_name = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.linkage.shader_storage_block.mismatch_block_array_size = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_constants.core.max_vertex_attribs = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_constants.core.max_vertex_uniform_vectors = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_constants.core.max_vertex_output_vectors = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_constants.core.max_fragment_input_vectors = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_constants.core.max_fragment_uniform_vectors = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_constants.core.max_draw_buffers = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_constants.core.max_vertex_texture_image_units = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_constants.core.max_combined_texture_image_units = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_constants.core.max_texture_image_units = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_constants.core.min_program_texel_offset = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_constants.core.max_program_texel_offset = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_constants.core.max_image_units = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_constants.core.max_vertex_image_uniforms = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_constants.core.max_fragment_image_uniforms = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_constants.core.max_compute_image_uniforms = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_constants.core.max_combined_image_uniforms = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_constants.core.max_combined_shader_output_resources = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_constants.core.max_compute_uniform_components = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_constants.core.max_compute_texture_image_units = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_constants.core.max_compute_atomic_counters = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_constants.core.max_compute_atomic_counter_buffers = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_constants.core.max_vertex_atomic_counters = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_constants.core.max_fragment_atomic_counters = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_constants.core.max_combined_atomic_counters = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_constants.core.max_atomic_counter_bindings = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_constants.core.max_vertex_atomic_counter_buffers = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_constants.core.max_fragment_atomic_counter_buffers = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_constants.core.max_combined_atomic_counter_buffers = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_constants.core.max_atomic_counter_buffer_size = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_constants.core.max_compute_work_group_count = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.builtin_constants.core.max_compute_work_group_size = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.value.triangles = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.value.lines = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.value.wide_lines = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.value.points = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.value.wide_points = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.value.triangles_4_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.value.lines_4_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.value.wide_lines_4_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.value.points_4_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.value.wide_points_4_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.value.triangles_8_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.value.lines_8_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.value.wide_lines_8_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.value.points_8_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.value.wide_points_8_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.value.triangles_max_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.value.lines_max_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.value.wide_lines_max_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.value.points_max_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.value.wide_points_max_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.triangles_dfdx = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.triangles_dfdy = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.triangles_fwidth = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.lines_dfdx = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.lines_dfdy = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.lines_fwidth = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.wide_lines_dfdx = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.wide_lines_dfdy = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.wide_lines_fwidth = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.points_dfdx = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.points_dfdy = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.points_fwidth = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.wide_points_dfdx = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.wide_points_dfdy = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.wide_points_fwidth = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.triangles_4_samples_dfdx = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.triangles_4_samples_dfdy = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.triangles_4_samples_fwidth = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.lines_4_samples_dfdx = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.lines_4_samples_dfdy = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.lines_4_samples_fwidth = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.wide_lines_4_samples_dfdx = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.wide_lines_4_samples_dfdy = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.wide_lines_4_samples_fwidth = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.points_4_samples_dfdx = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.points_4_samples_dfdy = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.points_4_samples_fwidth = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.wide_points_4_samples_dfdx = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.wide_points_4_samples_dfdy = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.wide_points_4_samples_fwidth = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.triangles_8_samples_dfdx = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.triangles_8_samples_dfdy = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.triangles_8_samples_fwidth = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.lines_8_samples_dfdx = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.lines_8_samples_dfdy = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.lines_8_samples_fwidth = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.wide_lines_8_samples_dfdx = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.wide_lines_8_samples_dfdy = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.wide_lines_8_samples_fwidth = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.points_8_samples_dfdx = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.points_8_samples_dfdy = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.points_8_samples_fwidth = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.wide_points_8_samples_dfdx = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.wide_points_8_samples_dfdy = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.wide_points_8_samples_fwidth = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.triangles_max_samples_dfdx = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.triangles_max_samples_dfdy = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.triangles_max_samples_fwidth = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.lines_max_samples_dfdx = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.lines_max_samples_dfdy = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.lines_max_samples_fwidth = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.wide_lines_max_samples_dfdx = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.wide_lines_max_samples_dfdy = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.wide_lines_max_samples_fwidth = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.points_max_samples_dfdx = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.points_max_samples_dfdy = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.points_max_samples_fwidth = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.wide_points_max_samples_dfdx = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.wide_points_max_samples_dfdy = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.shaders.helper_invocation.derivate.wide_points_max_samples_fwidth = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.basic.empty = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.basic.ubo_to_ssbo_single_invocation = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.basic.ubo_to_ssbo_single_group = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.basic.ubo_to_ssbo_multiple_invocations = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.basic.ubo_to_ssbo_multiple_groups = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.basic.copy_ssbo_single_invocation = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.basic.copy_ssbo_multiple_invocations = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.basic.copy_ssbo_multiple_groups = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.basic.ssbo_rw_single_invocation = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.basic.ssbo_rw_multiple_groups = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.basic.ssbo_unsized_arr_single_invocation = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.basic.ssbo_unsized_arr_multiple_groups = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.basic.write_multiple_arr_single_invocation = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.basic.write_multiple_arr_multiple_groups = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.basic.write_multiple_unsized_arr_single_invocation = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.basic.write_multiple_unsized_arr_multiple_groups = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.basic.ssbo_local_barrier_single_invocation = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.basic.ssbo_local_barrier_single_group = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.basic.ssbo_local_barrier_multiple_groups = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.basic.ssbo_cmd_barrier_single = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.basic.ssbo_cmd_barrier_multiple = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.basic.shared_var_single_invocation = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.basic.shared_var_single_group = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.basic.shared_var_multiple_invocations = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.basic.shared_var_multiple_groups = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.basic.shared_atomic_op_single_invocation = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.basic.shared_atomic_op_single_group = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.basic.shared_atomic_op_multiple_invocations = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.basic.shared_atomic_op_multiple_groups = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.basic.copy_image_to_ssbo_small = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.basic.copy_image_to_ssbo_large = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.basic.copy_ssbo_to_image_small = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.basic.copy_ssbo_to_image_large = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.basic.image_barrier_single = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.basic.image_barrier_multiple = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.basic.atomic_counter_single_invocation = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.basic.atomic_counter_single_group = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.basic.atomic_counter_multiple_invocations = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.basic.atomic_counter_multiple_groups = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.float_lowp = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.float_mediump = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.float_highp = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.vec2_lowp = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.vec2_mediump = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.vec2_highp = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.vec3_lowp = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.vec3_mediump = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.vec3_highp = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.vec4_lowp = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.vec4_mediump = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.vec4_highp = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.mat2_lowp = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.mat2_mediump = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.mat2_highp = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.mat2x3_lowp = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.mat2x3_mediump = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.mat2x3_highp = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.mat2x4_lowp = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.mat2x4_mediump = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.mat2x4_highp = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.mat3x2_lowp = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.mat3x2_mediump = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.mat3x2_highp = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.mat3_lowp = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.mat3_mediump = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.mat3_highp = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.mat3x4_lowp = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.mat3x4_mediump = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.mat3x4_highp = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.mat4x2_lowp = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.mat4x2_mediump = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.mat4x2_highp = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.mat4x3_lowp = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.mat4x3_mediump = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.mat4x3_highp = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.mat4_lowp = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.mat4_mediump = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.mat4_highp = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.int_lowp = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.int_mediump = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.int_highp = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.ivec2_lowp = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.ivec2_mediump = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.ivec2_highp = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.ivec3_lowp = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.ivec3_mediump = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.ivec3_highp = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.ivec4_lowp = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.ivec4_mediump = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.ivec4_highp = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.uint_lowp = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.uint_mediump = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.uint_highp = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.uvec2_lowp = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.uvec2_mediump = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.uvec2_highp = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.uvec3_lowp = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.uvec3_mediump = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.uvec3_highp = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.uvec4_lowp = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.uvec4_mediump = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.uvec4_highp = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.bvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.basic_type.bvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.work_group_size.float_1_1_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.work_group_size.float_64_1_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.work_group_size.float_1_64_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.work_group_size.float_1_1_64 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.work_group_size.float_128_1_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.work_group_size.float_1_128_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.work_group_size.float_13_2_4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.work_group_size.vec4_1_1_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.work_group_size.vec4_64_1_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.work_group_size.vec4_1_64_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.work_group_size.vec4_1_1_64 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.work_group_size.vec4_128_1_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.work_group_size.vec4_1_128_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.work_group_size.vec4_13_2_4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.work_group_size.mat4_1_1_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.work_group_size.mat4_64_1_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.work_group_size.mat4_1_64_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.work_group_size.mat4_1_1_64 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.work_group_size.mat4_128_1_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.work_group_size.mat4_1_128_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.work_group_size.mat4_13_2_4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.add.lowp_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.add.lowp_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.add.mediump_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.add.mediump_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.add.highp_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.add.highp_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.min.lowp_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.min.lowp_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.min.mediump_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.min.mediump_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.min.highp_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.min.highp_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.max.lowp_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.max.lowp_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.max.mediump_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.max.mediump_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.max.highp_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.max.highp_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.and.lowp_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.and.lowp_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.and.mediump_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.and.mediump_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.and.highp_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.and.highp_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.or.lowp_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.or.lowp_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.or.mediump_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.or.mediump_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.or.highp_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.or.highp_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.xor.lowp_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.xor.lowp_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.xor.mediump_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.xor.mediump_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.xor.highp_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.xor.highp_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.exchange.lowp_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.exchange.lowp_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.exchange.mediump_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.exchange.mediump_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.exchange.highp_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.exchange.highp_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.compswap.lowp_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.compswap.lowp_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.compswap.mediump_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.compswap.mediump_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.compswap.highp_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.shared_var.atomic.compswap.highp_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.indirect_dispatch.upload_buffer.single_invocation = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.indirect_dispatch.upload_buffer.multiple_groups = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.indirect_dispatch.upload_buffer.multiple_groups_multiple_invocations = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.indirect_dispatch.upload_buffer.small_offset = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.indirect_dispatch.upload_buffer.large_offset = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.indirect_dispatch.upload_buffer.large_offset_multiple_invocations = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.indirect_dispatch.upload_buffer.empty_command = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.indirect_dispatch.upload_buffer.multi_dispatch = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.indirect_dispatch.upload_buffer.multi_dispatch_reuse_command = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.indirect_dispatch.gen_in_compute.single_invocation = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.indirect_dispatch.gen_in_compute.multiple_groups = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.indirect_dispatch.gen_in_compute.multiple_groups_multiple_invocations = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.indirect_dispatch.gen_in_compute.small_offset = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.indirect_dispatch.gen_in_compute.large_offset = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.indirect_dispatch.gen_in_compute.large_offset_multiple_invocations = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.indirect_dispatch.gen_in_compute.empty_command = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.indirect_dispatch.gen_in_compute.multi_dispatch = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.compute.indirect_dispatch.gen_in_compute.multi_dispatch_reuse_command = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_arrays_indirect.first.first_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_arrays_indirect.first.first_3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_arrays_indirect.first.first_17 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_arrays_indirect.points.single_attribute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_arrays_indirect.points.multiple_attributes = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_arrays_indirect.points.instanced_attributes = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_arrays_indirect.points.default_attribute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_arrays_indirect.triangles.single_attribute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_arrays_indirect.triangles.multiple_attributes = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_arrays_indirect.triangles.instanced_attributes = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_arrays_indirect.triangles.default_attribute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_arrays_indirect.triangle_fan.single_attribute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_arrays_indirect.triangle_fan.multiple_attributes = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_arrays_indirect.triangle_fan.instanced_attributes = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_arrays_indirect.triangle_fan.default_attribute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_arrays_indirect.triangle_strip.single_attribute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_arrays_indirect.triangle_strip.multiple_attributes = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_arrays_indirect.triangle_strip.instanced_attributes = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_arrays_indirect.triangle_strip.default_attribute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_arrays_indirect.lines.single_attribute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_arrays_indirect.lines.multiple_attributes = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_arrays_indirect.lines.instanced_attributes = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_arrays_indirect.lines.default_attribute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_arrays_indirect.line_strip.single_attribute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_arrays_indirect.line_strip.multiple_attributes = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_arrays_indirect.line_strip.instanced_attributes = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_arrays_indirect.line_strip.default_attribute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_arrays_indirect.line_loop.single_attribute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_arrays_indirect.line_loop.multiple_attributes = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_arrays_indirect.line_loop.instanced_attributes = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_arrays_indirect.line_loop.default_attribute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_elements_indirect.indices.index_byte = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_elements_indirect.indices.index_short = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_elements_indirect.indices.index_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_elements_indirect.base_vertex.index_byte = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_elements_indirect.base_vertex.index_short = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_elements_indirect.base_vertex.index_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_elements_indirect.base_vertex.index_neg_byte = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_elements_indirect.base_vertex.index_neg_short = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_elements_indirect.base_vertex.index_neg_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_elements_indirect.points.single_attribute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_elements_indirect.points.multiple_attributes = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_elements_indirect.points.instanced_attributes = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_elements_indirect.points.default_attribute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_elements_indirect.triangles.single_attribute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_elements_indirect.triangles.multiple_attributes = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_elements_indirect.triangles.instanced_attributes = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_elements_indirect.triangles.default_attribute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_elements_indirect.triangle_fan.single_attribute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_elements_indirect.triangle_fan.multiple_attributes = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_elements_indirect.triangle_fan.instanced_attributes = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_elements_indirect.triangle_fan.default_attribute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_elements_indirect.triangle_strip.single_attribute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_elements_indirect.triangle_strip.multiple_attributes = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_elements_indirect.triangle_strip.instanced_attributes = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_elements_indirect.triangle_strip.default_attribute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_elements_indirect.lines.single_attribute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_elements_indirect.lines.multiple_attributes = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_elements_indirect.lines.instanced_attributes = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_elements_indirect.lines.default_attribute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_elements_indirect.line_strip.single_attribute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_elements_indirect.line_strip.multiple_attributes = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_elements_indirect.line_strip.instanced_attributes = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_elements_indirect.line_strip.default_attribute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_elements_indirect.line_loop.single_attribute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_elements_indirect.line_loop.multiple_attributes = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_elements_indirect.line_loop.instanced_attributes = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.draw_elements_indirect.line_loop.default_attribute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.instancing.draw_arrays_indirect_grid_2x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.instancing.draw_arrays_indirect_grid_5x5 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.instancing.draw_arrays_indirect_grid_10x10 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.instancing.draw_arrays_indirect_grid_32x32 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.instancing.draw_arrays_indirect_grid_100x100 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.instancing.draw_elements_indirect_grid_2x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.instancing.draw_elements_indirect_grid_5x5 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.instancing.draw_elements_indirect_grid_10x10 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.instancing.draw_elements_indirect_grid_32x32 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.instancing.draw_elements_indirect_grid_100x100 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.separate.drawarrays_compute_cmd = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.separate.drawarrays_compute_data = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.separate.drawarrays_compute_cmd_and_data = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.separate.drawelements_compute_cmd = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.separate.drawelements_compute_data = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.separate.drawelements_compute_indices = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.separate.drawelements_compute_cmd_and_data = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.separate.drawelements_compute_cmd_and_indices = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.separate.drawelements_compute_data_and_indices = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.separate.drawelements_compute_cmd_and_data_and_indices = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.combined.drawarrays_compute_cmd_and_data = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.combined.drawelements_compute_cmd_and_data = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.combined.drawelements_compute_cmd_and_indices = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.combined.drawelements_compute_data_and_indices = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.combined.drawelements_compute_cmd_and_data_and_indices = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawarrays_separate_grid_100x100_drawcount_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawarrays_separate_grid_200x200_drawcount_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawarrays_separate_grid_500x500_drawcount_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawarrays_separate_grid_1000x1000_drawcount_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawarrays_separate_grid_1200x1200_drawcount_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawarrays_separate_grid_1500x1500_drawcount_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawarrays_separate_grid_100x100_drawcount_8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawarrays_separate_grid_200x200_drawcount_8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawarrays_separate_grid_500x500_drawcount_8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawarrays_separate_grid_1000x1000_drawcount_8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawarrays_separate_grid_1200x1200_drawcount_8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawarrays_separate_grid_1500x1500_drawcount_8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawarrays_separate_grid_100x100_drawcount_200 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawarrays_separate_grid_200x200_drawcount_800 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawarrays_separate_grid_500x500_drawcount_2500 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawarrays_separate_grid_1000x1000_drawcount_5000 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawarrays_combined_grid_100x100_drawcount_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawarrays_combined_grid_200x200_drawcount_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawarrays_combined_grid_500x500_drawcount_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawarrays_combined_grid_1000x1000_drawcount_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawarrays_combined_grid_1200x1200_drawcount_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawarrays_combined_grid_1500x1500_drawcount_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawarrays_combined_grid_100x100_drawcount_8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawarrays_combined_grid_200x200_drawcount_8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawarrays_combined_grid_500x500_drawcount_8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawarrays_combined_grid_1000x1000_drawcount_8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawarrays_combined_grid_1200x1200_drawcount_8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawarrays_combined_grid_1500x1500_drawcount_8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawarrays_combined_grid_100x100_drawcount_200 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawarrays_combined_grid_200x200_drawcount_800 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawarrays_combined_grid_500x500_drawcount_2500 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawarrays_combined_grid_1000x1000_drawcount_5000 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawelements_separate_grid_100x100_drawcount_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawelements_separate_grid_200x200_drawcount_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawelements_separate_grid_500x500_drawcount_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawelements_separate_grid_100x100_drawcount_8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawelements_separate_grid_200x200_drawcount_8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawelements_separate_grid_500x500_drawcount_8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawelements_separate_grid_100x100_drawcount_200 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawelements_separate_grid_200x200_drawcount_800 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawelements_separate_grid_500x500_drawcount_2500 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawelements_combined_grid_100x100_drawcount_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawelements_combined_grid_200x200_drawcount_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawelements_combined_grid_500x500_drawcount_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawelements_combined_grid_100x100_drawcount_8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawelements_combined_grid_200x200_drawcount_8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawelements_combined_grid_500x500_drawcount_8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawelements_combined_grid_100x100_drawcount_200 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawelements_combined_grid_200x200_drawcount_800 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.compute_interop.large.drawelements_combined_grid_500x500_drawcount_2500 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.0 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.5 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.6 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.7 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.10 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.11 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.12 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.13 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.14 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.15 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.17 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.18 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.19 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.20 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.21 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.22 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.24 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.25 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.27 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.28 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.29 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.30 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.31 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.32 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.35 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.36 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.37 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.38 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.39 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.40 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.42 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.43 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.44 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.45 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.46 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.47 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.48 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.49 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.50 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.51 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.52 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.53 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.54 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.55 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.56 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.57 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.random.61 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.negative.command_bad_alignment_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.negative.command_bad_alignment_2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.negative.command_bad_alignment_3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.negative.command_offset_partially_in_buffer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.negative.command_offset_not_in_buffer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.negative.command_offset_not_in_buffer_unsigned32_wrap = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.negative.command_offset_not_in_buffer_signed32_wrap = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.negative.client_vertex_attrib_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.negative.default_vao = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.negative.invalid_mode_draw_arrays = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.negative.invalid_mode_draw_elements = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.draw_indirect.negative.invalid_type_draw_elements = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.lowp_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.mediump_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.highp_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.lowp_vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.mediump_vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.highp_vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.lowp_vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.mediump_vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.highp_vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.lowp_vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.mediump_vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.highp_vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.lowp_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.mediump_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.highp_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.lowp_ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.mediump_ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.highp_ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.lowp_ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.mediump_ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.highp_ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.lowp_ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.mediump_ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.highp_ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.lowp_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.mediump_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.highp_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.lowp_uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.mediump_uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.highp_uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.lowp_uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.mediump_uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.highp_uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.lowp_uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.mediump_uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.highp_uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.bvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.bvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.lowp_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.mediump_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.highp_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.row_major_lowp_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.row_major_mediump_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.row_major_highp_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.column_major_lowp_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.column_major_mediump_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.column_major_highp_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.lowp_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.mediump_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.highp_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.row_major_lowp_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.row_major_mediump_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.row_major_highp_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.column_major_lowp_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.column_major_mediump_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.column_major_highp_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.lowp_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.mediump_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.highp_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.row_major_lowp_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.row_major_mediump_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.row_major_highp_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.column_major_lowp_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.column_major_mediump_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.column_major_highp_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.lowp_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.mediump_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.highp_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.row_major_lowp_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.row_major_mediump_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.row_major_highp_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.column_major_lowp_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.column_major_mediump_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.column_major_highp_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.lowp_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.mediump_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.highp_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.row_major_lowp_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.row_major_mediump_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.row_major_highp_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.column_major_lowp_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.column_major_mediump_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.column_major_highp_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.lowp_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.mediump_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.highp_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.row_major_lowp_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.row_major_mediump_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.row_major_highp_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.column_major_lowp_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.column_major_mediump_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.column_major_highp_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.lowp_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.mediump_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.highp_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.row_major_lowp_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.row_major_mediump_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.row_major_highp_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.column_major_lowp_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.column_major_mediump_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.column_major_highp_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.lowp_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.mediump_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.highp_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.row_major_lowp_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.row_major_mediump_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.row_major_highp_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.column_major_lowp_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.column_major_mediump_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.column_major_highp_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.lowp_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.mediump_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.highp_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.row_major_lowp_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.row_major_mediump_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.row_major_highp_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.column_major_lowp_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.column_major_mediump_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.shared.column_major_highp_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.lowp_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.mediump_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.highp_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.lowp_vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.mediump_vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.highp_vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.lowp_vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.mediump_vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.highp_vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.lowp_vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.mediump_vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.highp_vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.lowp_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.mediump_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.highp_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.lowp_ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.mediump_ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.highp_ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.lowp_ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.mediump_ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.highp_ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.lowp_ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.mediump_ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.highp_ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.lowp_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.mediump_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.highp_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.lowp_uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.mediump_uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.highp_uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.lowp_uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.mediump_uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.highp_uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.lowp_uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.mediump_uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.highp_uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.bvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.bvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.lowp_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.mediump_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.highp_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.row_major_lowp_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.row_major_mediump_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.row_major_highp_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.column_major_lowp_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.column_major_mediump_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.column_major_highp_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.lowp_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.mediump_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.highp_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.row_major_lowp_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.row_major_mediump_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.row_major_highp_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.column_major_lowp_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.column_major_mediump_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.column_major_highp_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.lowp_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.mediump_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.highp_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.row_major_lowp_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.row_major_mediump_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.row_major_highp_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.column_major_lowp_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.column_major_mediump_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.column_major_highp_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.lowp_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.mediump_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.highp_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.row_major_lowp_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.row_major_mediump_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.row_major_highp_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.column_major_lowp_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.column_major_mediump_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.column_major_highp_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.lowp_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.mediump_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.highp_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.row_major_lowp_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.row_major_mediump_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.row_major_highp_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.column_major_lowp_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.column_major_mediump_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.column_major_highp_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.lowp_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.mediump_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.highp_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.row_major_lowp_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.row_major_mediump_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.row_major_highp_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.column_major_lowp_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.column_major_mediump_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.column_major_highp_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.lowp_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.mediump_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.highp_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.row_major_lowp_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.row_major_mediump_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.row_major_highp_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.column_major_lowp_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.column_major_mediump_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.column_major_highp_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.lowp_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.mediump_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.highp_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.row_major_lowp_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.row_major_mediump_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.row_major_highp_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.column_major_lowp_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.column_major_mediump_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.column_major_highp_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.lowp_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.mediump_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.highp_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.row_major_lowp_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.row_major_mediump_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.row_major_highp_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.column_major_lowp_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.column_major_mediump_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.packed.column_major_highp_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.lowp_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.mediump_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.highp_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.lowp_vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.mediump_vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.highp_vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.lowp_vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.mediump_vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.highp_vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.lowp_vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.mediump_vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.highp_vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.lowp_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.mediump_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.highp_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.lowp_ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.mediump_ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.highp_ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.lowp_ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.mediump_ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.highp_ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.lowp_ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.mediump_ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.highp_ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.lowp_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.mediump_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.highp_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.lowp_uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.mediump_uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.highp_uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.lowp_uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.mediump_uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.highp_uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.lowp_uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.mediump_uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.highp_uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.bvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.bvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.lowp_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.mediump_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.highp_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.row_major_lowp_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.row_major_mediump_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.row_major_highp_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.column_major_lowp_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.column_major_mediump_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.column_major_highp_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.lowp_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.mediump_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.highp_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.row_major_lowp_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.row_major_mediump_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.row_major_highp_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.column_major_lowp_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.column_major_mediump_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.column_major_highp_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.lowp_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.mediump_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.highp_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.row_major_lowp_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.row_major_mediump_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.row_major_highp_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.column_major_lowp_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.column_major_mediump_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.column_major_highp_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.lowp_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.mediump_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.highp_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.row_major_lowp_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.row_major_mediump_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.row_major_highp_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.column_major_lowp_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.column_major_mediump_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.column_major_highp_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.lowp_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.mediump_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.highp_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.row_major_lowp_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.row_major_mediump_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.row_major_highp_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.column_major_lowp_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.column_major_mediump_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.column_major_highp_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.lowp_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.mediump_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.highp_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.row_major_lowp_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.row_major_mediump_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.row_major_highp_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.column_major_lowp_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.column_major_mediump_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.column_major_highp_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.lowp_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.mediump_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.highp_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.row_major_lowp_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.row_major_mediump_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.row_major_highp_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.column_major_lowp_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.column_major_mediump_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.column_major_highp_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.lowp_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.mediump_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.highp_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.row_major_lowp_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.row_major_mediump_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.row_major_highp_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.column_major_lowp_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.column_major_mediump_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.column_major_highp_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.lowp_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.mediump_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.highp_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.row_major_lowp_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.row_major_mediump_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.row_major_highp_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.column_major_lowp_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.column_major_mediump_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std140.column_major_highp_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.lowp_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.mediump_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.highp_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.lowp_vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.mediump_vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.highp_vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.lowp_vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.mediump_vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.highp_vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.lowp_vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.mediump_vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.highp_vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.lowp_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.mediump_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.highp_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.lowp_ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.mediump_ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.highp_ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.lowp_ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.mediump_ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.highp_ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.lowp_ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.mediump_ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.highp_ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.lowp_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.mediump_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.highp_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.lowp_uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.mediump_uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.highp_uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.lowp_uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.mediump_uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.highp_uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.lowp_uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.mediump_uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.highp_uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.bvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.bvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.lowp_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.mediump_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.highp_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.row_major_lowp_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.row_major_mediump_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.row_major_highp_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.column_major_lowp_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.column_major_mediump_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.column_major_highp_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.lowp_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.mediump_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.highp_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.row_major_lowp_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.row_major_mediump_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.row_major_highp_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.column_major_lowp_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.column_major_mediump_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.column_major_highp_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.lowp_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.mediump_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.highp_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.row_major_lowp_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.row_major_mediump_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.row_major_highp_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.column_major_lowp_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.column_major_mediump_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.column_major_highp_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.lowp_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.mediump_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.highp_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.row_major_lowp_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.row_major_mediump_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.row_major_highp_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.column_major_lowp_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.column_major_mediump_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.column_major_highp_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.lowp_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.mediump_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.highp_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.row_major_lowp_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.row_major_mediump_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.row_major_highp_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.column_major_lowp_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.column_major_mediump_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.column_major_highp_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.lowp_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.mediump_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.highp_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.row_major_lowp_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.row_major_mediump_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.row_major_highp_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.column_major_lowp_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.column_major_mediump_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.column_major_highp_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.lowp_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.mediump_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.highp_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.row_major_lowp_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.row_major_mediump_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.row_major_highp_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.column_major_lowp_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.column_major_mediump_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.column_major_highp_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.lowp_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.mediump_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.highp_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.row_major_lowp_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.row_major_mediump_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.row_major_highp_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.column_major_lowp_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.column_major_mediump_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.column_major_highp_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.lowp_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.mediump_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.highp_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.row_major_lowp_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.row_major_mediump_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.row_major_highp_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.column_major_lowp_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.column_major_mediump_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_type.std430.column_major_highp_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.shared.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.shared.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.shared.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.shared.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.shared.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.shared.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.shared.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.shared.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.shared.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.shared.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.shared.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.shared.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.shared.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.shared.bvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.shared.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.shared.bvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.shared.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.shared.row_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.shared.column_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.shared.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.shared.row_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.shared.column_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.shared.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.shared.row_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.shared.column_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.shared.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.shared.row_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.shared.column_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.shared.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.shared.row_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.shared.column_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.shared.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.shared.row_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.shared.column_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.shared.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.shared.row_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.shared.column_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.shared.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.shared.row_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.shared.column_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.shared.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.shared.row_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.shared.column_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.packed.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.packed.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.packed.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.packed.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.packed.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.packed.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.packed.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.packed.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.packed.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.packed.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.packed.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.packed.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.packed.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.packed.bvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.packed.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.packed.bvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.packed.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.packed.row_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.packed.column_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.packed.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.packed.row_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.packed.column_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.packed.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.packed.row_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.packed.column_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.packed.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.packed.row_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.packed.column_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.packed.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.packed.row_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.packed.column_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.packed.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.packed.row_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.packed.column_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.packed.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.packed.row_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.packed.column_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.packed.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.packed.row_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.packed.column_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.packed.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.packed.row_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.packed.column_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std140.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std140.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std140.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std140.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std140.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std140.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std140.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std140.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std140.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std140.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std140.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std140.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std140.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std140.bvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std140.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std140.bvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std140.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std140.row_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std140.column_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std140.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std140.row_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std140.column_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std140.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std140.row_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std140.column_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std140.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std140.row_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std140.column_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std140.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std140.row_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std140.column_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std140.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std140.row_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std140.column_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std140.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std140.row_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std140.column_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std140.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std140.row_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std140.column_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std140.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std140.row_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std140.column_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std430.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std430.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std430.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std430.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std430.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std430.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std430.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std430.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std430.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std430.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std430.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std430.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std430.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std430.bvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std430.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std430.bvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std430.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std430.row_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std430.column_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std430.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std430.row_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std430.column_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std430.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std430.row_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std430.column_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std430.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std430.row_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std430.column_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std430.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std430.row_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std430.column_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std430.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std430.row_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std430.column_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std430.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std430.row_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std430.column_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std430.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std430.row_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std430.column_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std430.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std430.row_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_basic_array.std430.column_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.shared.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.shared.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.shared.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.shared.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.shared.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.shared.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.shared.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.shared.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.shared.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.shared.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.shared.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.shared.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.shared.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.shared.bvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.shared.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.shared.bvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.shared.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.shared.row_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.shared.column_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.shared.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.shared.row_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.shared.column_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.shared.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.shared.row_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.shared.column_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.shared.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.shared.row_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.shared.column_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.shared.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.shared.row_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.shared.column_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.shared.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.shared.row_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.shared.column_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.shared.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.shared.row_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.shared.column_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.shared.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.shared.row_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.shared.column_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.shared.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.shared.row_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.shared.column_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.packed.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.packed.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.packed.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.packed.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.packed.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.packed.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.packed.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.packed.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.packed.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.packed.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.packed.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.packed.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.packed.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.packed.bvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.packed.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.packed.bvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.packed.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.packed.row_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.packed.column_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.packed.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.packed.row_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.packed.column_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.packed.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.packed.row_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.packed.column_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.packed.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.packed.row_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.packed.column_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.packed.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.packed.row_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.packed.column_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.packed.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.packed.row_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.packed.column_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.packed.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.packed.row_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.packed.column_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.packed.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.packed.row_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.packed.column_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.packed.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.packed.row_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.packed.column_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std140.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std140.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std140.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std140.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std140.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std140.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std140.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std140.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std140.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std140.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std140.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std140.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std140.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std140.bvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std140.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std140.bvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std140.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std140.row_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std140.column_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std140.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std140.row_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std140.column_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std140.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std140.row_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std140.column_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std140.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std140.row_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std140.column_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std140.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std140.row_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std140.column_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std140.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std140.row_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std140.column_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std140.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std140.row_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std140.column_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std140.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std140.row_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std140.column_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std140.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std140.row_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std140.column_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std430.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std430.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std430.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std430.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std430.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std430.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std430.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std430.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std430.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std430.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std430.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std430.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std430.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std430.bvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std430.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std430.bvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std430.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std430.row_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std430.column_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std430.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std430.row_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std430.column_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std430.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std430.row_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std430.column_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std430.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std430.row_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std430.column_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std430.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std430.row_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std430.column_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std430.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std430.row_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std430.column_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std430.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std430.row_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std430.column_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std430.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std430.row_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std430.column_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std430.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std430.row_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.std430.column_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.shared.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.shared.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.shared.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.shared.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.shared.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.shared.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.shared.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.shared.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.shared.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.shared.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.shared.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.shared.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.shared.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.shared.bvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.shared.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.shared.bvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.shared.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.shared.row_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.shared.column_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.shared.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.shared.row_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.shared.column_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.shared.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.shared.row_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.shared.column_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.shared.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.shared.row_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.shared.column_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.shared.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.shared.row_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.shared.column_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.shared.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.shared.row_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.shared.column_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.shared.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.shared.row_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.shared.column_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.shared.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.shared.row_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.shared.column_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.shared.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.shared.row_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.shared.column_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.packed.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.packed.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.packed.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.packed.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.packed.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.packed.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.packed.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.packed.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.packed.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.packed.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.packed.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.packed.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.packed.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.packed.bvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.packed.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.packed.bvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.packed.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.packed.row_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.packed.column_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.packed.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.packed.row_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.packed.column_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.packed.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.packed.row_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.packed.column_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.packed.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.packed.row_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.packed.column_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.packed.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.packed.row_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.packed.column_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.packed.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.packed.row_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.packed.column_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.packed.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.packed.row_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.packed.column_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.packed.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.packed.row_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.packed.column_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.packed.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.packed.row_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.packed.column_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std140.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std140.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std140.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std140.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std140.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std140.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std140.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std140.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std140.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std140.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std140.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std140.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std140.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std140.bvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std140.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std140.bvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std140.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std140.row_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std140.column_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std140.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std140.row_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std140.column_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std140.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std140.row_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std140.column_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std140.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std140.row_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std140.column_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std140.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std140.row_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std140.column_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std140.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std140.row_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std140.column_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std140.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std140.row_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std140.column_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std140.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std140.row_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std140.column_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std140.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std140.row_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std140.column_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std430.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std430.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std430.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std430.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std430.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std430.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std430.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std430.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std430.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std430.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std430.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std430.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std430.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std430.bvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std430.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std430.bvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std430.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std430.row_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std430.column_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std430.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std430.row_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std430.column_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std430.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std430.row_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std430.column_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std430.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std430.row_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std430.column_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std430.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std430.row_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std430.column_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std430.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std430.row_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std430.column_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std430.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std430.row_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std430.column_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std430.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std430.row_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std430.column_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std430.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std430.row_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_array.std430.column_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.shared.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.shared.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.shared.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.shared.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.shared.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.shared.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.shared.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.shared.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.shared.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.shared.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.shared.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.shared.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.shared.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.shared.bvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.shared.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.shared.bvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.shared.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.shared.row_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.shared.column_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.shared.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.shared.row_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.shared.column_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.shared.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.shared.row_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.shared.column_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.shared.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.shared.row_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.shared.column_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.shared.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.shared.row_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.shared.column_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.shared.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.shared.row_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.shared.column_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.shared.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.shared.row_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.shared.column_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.shared.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.shared.row_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.shared.column_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.shared.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.shared.row_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.shared.column_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.packed.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.packed.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.packed.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.packed.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.packed.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.packed.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.packed.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.packed.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.packed.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.packed.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.packed.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.packed.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.packed.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.packed.bvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.packed.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.packed.bvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.packed.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.packed.row_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.packed.column_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.packed.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.packed.row_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.packed.column_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.packed.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.packed.row_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.packed.column_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.packed.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.packed.row_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.packed.column_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.packed.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.packed.row_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.packed.column_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.packed.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.packed.row_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.packed.column_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.packed.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.packed.row_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.packed.column_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.packed.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.packed.row_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.packed.column_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.packed.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.packed.row_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.packed.column_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std140.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std140.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std140.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std140.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std140.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std140.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std140.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std140.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std140.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std140.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std140.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std140.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std140.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std140.bvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std140.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std140.bvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std140.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std140.row_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std140.column_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std140.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std140.row_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std140.column_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std140.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std140.row_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std140.column_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std140.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std140.row_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std140.column_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std140.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std140.row_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std140.column_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std140.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std140.row_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std140.column_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std140.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std140.row_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std140.column_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std140.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std140.row_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std140.column_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std140.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std140.row_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std140.column_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std430.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std430.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std430.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std430.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std430.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std430.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std430.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std430.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std430.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std430.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std430.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std430.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std430.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std430.bvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std430.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std430.bvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std430.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std430.row_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std430.column_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std430.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std430.row_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std430.column_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std430.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std430.row_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std430.column_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std430.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std430.row_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std430.column_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std430.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std430.row_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std430.column_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std430.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std430.row_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std430.column_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std430.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std430.row_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std430.column_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std430.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std430.row_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std430.column_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std430.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std430.row_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_array.std430.column_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.shared.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.shared.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.shared.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.shared.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.shared.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.shared.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.shared.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.shared.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.shared.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.shared.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.shared.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.shared.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.shared.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.shared.bvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.shared.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.shared.bvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.shared.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.shared.row_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.shared.column_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.shared.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.shared.row_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.shared.column_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.shared.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.shared.row_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.shared.column_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.shared.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.shared.row_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.shared.column_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.shared.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.shared.row_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.shared.column_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.shared.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.shared.row_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.shared.column_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.shared.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.shared.row_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.shared.column_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.shared.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.shared.row_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.shared.column_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.shared.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.shared.row_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.shared.column_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.packed.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.packed.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.packed.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.packed.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.packed.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.packed.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.packed.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.packed.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.packed.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.packed.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.packed.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.packed.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.packed.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.packed.bvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.packed.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.packed.bvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.packed.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.packed.row_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.packed.column_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.packed.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.packed.row_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.packed.column_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.packed.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.packed.row_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.packed.column_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.packed.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.packed.row_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.packed.column_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.packed.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.packed.row_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.packed.column_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.packed.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.packed.row_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.packed.column_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.packed.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.packed.row_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.packed.column_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.packed.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.packed.row_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.packed.column_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.packed.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.packed.row_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.packed.column_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std140.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std140.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std140.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std140.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std140.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std140.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std140.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std140.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std140.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std140.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std140.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std140.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std140.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std140.bvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std140.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std140.bvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std140.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std140.row_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std140.column_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std140.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std140.row_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std140.column_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std140.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std140.row_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std140.column_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std140.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std140.row_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std140.column_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std140.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std140.row_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std140.column_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std140.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std140.row_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std140.column_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std140.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std140.row_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std140.column_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std140.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std140.row_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std140.column_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std140.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std140.row_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std140.column_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std430.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std430.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std430.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std430.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std430.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std430.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std430.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std430.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std430.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std430.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std430.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std430.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std430.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std430.bvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std430.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std430.bvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std430.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std430.row_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std430.column_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std430.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std430.row_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std430.column_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std430.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std430.row_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std430.column_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std430.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std430.row_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std430.column_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std430.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std430.row_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std430.column_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std430.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std430.row_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std430.column_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std430.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std430.row_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std430.column_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std430.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std430.row_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std430.column_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std430.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std430.row_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.3_level_unsized_array.std430.column_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_struct.per_block_buffer.shared = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_struct.per_block_buffer.shared_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_struct.per_block_buffer.packed = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_struct.per_block_buffer.packed_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_struct.per_block_buffer.std140 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_struct.per_block_buffer.std140_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_struct.per_block_buffer.std430 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_struct.per_block_buffer.std430_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_struct.single_buffer.shared_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_struct.single_buffer.packed_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_struct.single_buffer.std140_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_struct.single_buffer.std430_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_struct_array.per_block_buffer.shared = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_struct_array.per_block_buffer.shared_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_struct_array.per_block_buffer.packed = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_struct_array.per_block_buffer.packed_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_struct_array.per_block_buffer.std140 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_struct_array.per_block_buffer.std140_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_struct_array.per_block_buffer.std430 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_struct_array.per_block_buffer.std430_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_struct_array.single_buffer.shared_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_struct_array.single_buffer.packed_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_struct_array.single_buffer.std140_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_struct_array.single_buffer.std430_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_nested_struct.per_block_buffer.shared = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_nested_struct.per_block_buffer.shared_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_nested_struct.per_block_buffer.packed = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_nested_struct.per_block_buffer.packed_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_nested_struct.per_block_buffer.std140 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_nested_struct.per_block_buffer.std140_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_nested_struct.per_block_buffer.std430 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_nested_struct.per_block_buffer.std430_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_nested_struct.single_buffer.shared_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_nested_struct.single_buffer.packed_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_nested_struct.single_buffer.std140_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_nested_struct.single_buffer.std430_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_nested_struct_array.per_block_buffer.shared = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_nested_struct_array.per_block_buffer.shared_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_nested_struct_array.per_block_buffer.packed = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_nested_struct_array.per_block_buffer.packed_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_nested_struct_array.per_block_buffer.std140 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_nested_struct_array.per_block_buffer.std140_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_nested_struct_array.per_block_buffer.std430 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_nested_struct_array.per_block_buffer.std430_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_nested_struct_array.single_buffer.shared_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_nested_struct_array.single_buffer.packed_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_nested_struct_array.single_buffer.std140_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.single_nested_struct_array.single_buffer.std430_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.unsized_struct_array.per_block_buffer.shared = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.unsized_struct_array.per_block_buffer.shared_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.unsized_struct_array.per_block_buffer.packed = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.unsized_struct_array.per_block_buffer.packed_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.unsized_struct_array.per_block_buffer.std140 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.unsized_struct_array.per_block_buffer.std140_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.unsized_struct_array.per_block_buffer.std430 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.unsized_struct_array.per_block_buffer.std430_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.unsized_struct_array.single_buffer.shared_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.unsized_struct_array.single_buffer.packed_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.unsized_struct_array.single_buffer.std140_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.unsized_struct_array.single_buffer.std430_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_unsized_struct_array.per_block_buffer.shared = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_unsized_struct_array.per_block_buffer.shared_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_unsized_struct_array.per_block_buffer.packed = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_unsized_struct_array.per_block_buffer.packed_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_unsized_struct_array.per_block_buffer.std140 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_unsized_struct_array.per_block_buffer.std140_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_unsized_struct_array.per_block_buffer.std430 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_unsized_struct_array.per_block_buffer.std430_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_unsized_struct_array.single_buffer.shared_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_unsized_struct_array.single_buffer.packed_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_unsized_struct_array.single_buffer.std140_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.2_level_unsized_struct_array.single_buffer.std430_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.unsized_nested_struct_array.per_block_buffer.shared = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.unsized_nested_struct_array.per_block_buffer.shared_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.unsized_nested_struct_array.per_block_buffer.packed = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.unsized_nested_struct_array.per_block_buffer.packed_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.unsized_nested_struct_array.per_block_buffer.std140 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.unsized_nested_struct_array.per_block_buffer.std140_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.unsized_nested_struct_array.per_block_buffer.std430 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.unsized_nested_struct_array.per_block_buffer.std430_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.unsized_nested_struct_array.single_buffer.shared_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.unsized_nested_struct_array.single_buffer.packed_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.unsized_nested_struct_array.single_buffer.std140_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.unsized_nested_struct_array.single_buffer.std430_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.shared.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.shared.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.shared.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.shared.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.shared.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.shared.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.shared.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.shared.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.shared.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.shared.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.shared.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.shared.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.shared.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.shared.bvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.shared.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.shared.bvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.shared.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.shared.row_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.shared.column_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.shared.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.shared.row_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.shared.column_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.shared.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.shared.row_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.shared.column_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.shared.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.shared.row_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.shared.column_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.shared.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.shared.row_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.shared.column_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.shared.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.shared.row_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.shared.column_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.shared.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.shared.row_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.shared.column_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.shared.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.shared.row_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.shared.column_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.shared.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.shared.row_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.shared.column_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.packed.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.packed.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.packed.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.packed.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.packed.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.packed.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.packed.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.packed.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.packed.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.packed.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.packed.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.packed.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.packed.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.packed.bvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.packed.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.packed.bvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.packed.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.packed.row_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.packed.column_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.packed.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.packed.row_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.packed.column_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.packed.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.packed.row_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.packed.column_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.packed.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.packed.row_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.packed.column_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.packed.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.packed.row_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.packed.column_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.packed.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.packed.row_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.packed.column_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.packed.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.packed.row_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.packed.column_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.packed.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.packed.row_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.packed.column_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.packed.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.packed.row_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.packed.column_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std140.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std140.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std140.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std140.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std140.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std140.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std140.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std140.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std140.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std140.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std140.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std140.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std140.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std140.bvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std140.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std140.bvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std140.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std140.row_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std140.column_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std140.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std140.row_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std140.column_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std140.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std140.row_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std140.column_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std140.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std140.row_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std140.column_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std140.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std140.row_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std140.column_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std140.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std140.row_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std140.column_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std140.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std140.row_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std140.column_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std140.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std140.row_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std140.column_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std140.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std140.row_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std140.column_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std430.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std430.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std430.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std430.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std430.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std430.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std430.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std430.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std430.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std430.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std430.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std430.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std430.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std430.bvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std430.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std430.bvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std430.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std430.row_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std430.column_major_mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std430.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std430.row_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std430.column_major_mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std430.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std430.row_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std430.column_major_mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std430.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std430.row_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std430.column_major_mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std430.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std430.row_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std430.column_major_mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std430.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std430.row_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std430.column_major_mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std430.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std430.row_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std430.column_major_mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std430.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std430.row_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std430.column_major_mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std430.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std430.row_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.instance_array_basic_type.std430.column_major_mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.multi_basic_types.per_block_buffer.shared = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.multi_basic_types.per_block_buffer.shared_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.multi_basic_types.per_block_buffer.packed = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.multi_basic_types.per_block_buffer.packed_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.multi_basic_types.per_block_buffer.std140 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.multi_basic_types.per_block_buffer.std140_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.multi_basic_types.per_block_buffer.std430 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.multi_basic_types.per_block_buffer.std430_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.multi_basic_types.single_buffer.shared = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.multi_basic_types.single_buffer.shared_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.multi_basic_types.single_buffer.packed = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.multi_basic_types.single_buffer.packed_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.multi_basic_types.single_buffer.std140 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.multi_basic_types.single_buffer.std140_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.multi_basic_types.single_buffer.std430 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.multi_basic_types.single_buffer.std430_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.multi_nested_struct.per_block_buffer.shared = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.multi_nested_struct.per_block_buffer.shared_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.multi_nested_struct.per_block_buffer.packed = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.multi_nested_struct.per_block_buffer.packed_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.multi_nested_struct.per_block_buffer.std140 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.multi_nested_struct.per_block_buffer.std140_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.multi_nested_struct.per_block_buffer.std430 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.multi_nested_struct.per_block_buffer.std430_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.multi_nested_struct.single_buffer.shared = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.multi_nested_struct.single_buffer.shared_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.multi_nested_struct.single_buffer.packed = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.multi_nested_struct.single_buffer.packed_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.multi_nested_struct.single_buffer.std140 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.multi_nested_struct.single_buffer.std140_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.multi_nested_struct.single_buffer.std430 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.multi_nested_struct.single_buffer.std430_instance_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.scalar_types.0 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.scalar_types.1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.scalar_types.2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.scalar_types.3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.scalar_types.4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.scalar_types.5 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.scalar_types.6 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.scalar_types.7 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.scalar_types.8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.scalar_types.9 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.scalar_types.10 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.scalar_types.11 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.scalar_types.12 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.scalar_types.13 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.scalar_types.14 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.scalar_types.15 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.scalar_types.16 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.scalar_types.17 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.scalar_types.18 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.scalar_types.19 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.scalar_types.20 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.scalar_types.21 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.scalar_types.22 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.scalar_types.23 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.scalar_types.24 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.vector_types.0 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.vector_types.1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.vector_types.2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.vector_types.3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.vector_types.4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.vector_types.5 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.vector_types.6 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.vector_types.7 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.vector_types.8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.vector_types.9 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.vector_types.10 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.vector_types.11 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.vector_types.12 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.vector_types.13 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.vector_types.14 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.vector_types.15 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.vector_types.16 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.vector_types.17 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.vector_types.18 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.vector_types.19 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.vector_types.20 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.vector_types.21 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.vector_types.22 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.vector_types.23 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.vector_types.24 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_types.0 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_types.1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_types.2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_types.3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_types.4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_types.5 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_types.6 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_types.7 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_types.8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_types.9 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_types.10 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_types.11 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_types.12 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_types.13 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_types.14 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_types.15 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_types.16 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_types.17 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_types.18 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_types.19 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_types.20 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_types.21 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_types.22 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_types.23 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_types.24 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_arrays.0 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_arrays.1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_arrays.2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_arrays.3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_arrays.4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_arrays.5 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_arrays.6 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_arrays.7 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_arrays.8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_arrays.9 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_arrays.10 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_arrays.11 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_arrays.12 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_arrays.13 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_arrays.14 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_arrays.15 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_arrays.16 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_arrays.17 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_arrays.18 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_arrays.19 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_arrays.20 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_arrays.21 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_arrays.22 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_arrays.23 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_arrays.24 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.unsized_arrays.0 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.unsized_arrays.1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.unsized_arrays.2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.unsized_arrays.3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.unsized_arrays.4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.unsized_arrays.5 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.unsized_arrays.6 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.unsized_arrays.7 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.unsized_arrays.8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.unsized_arrays.9 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.unsized_arrays.10 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.unsized_arrays.11 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.unsized_arrays.12 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.unsized_arrays.13 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.unsized_arrays.14 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.unsized_arrays.15 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.unsized_arrays.16 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.unsized_arrays.17 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.unsized_arrays.18 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.unsized_arrays.19 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.unsized_arrays.20 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.unsized_arrays.21 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.unsized_arrays.22 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.unsized_arrays.23 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.unsized_arrays.24 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.arrays_of_arrays.0 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.arrays_of_arrays.1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.arrays_of_arrays.2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.arrays_of_arrays.3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.arrays_of_arrays.4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.arrays_of_arrays.5 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.arrays_of_arrays.6 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.arrays_of_arrays.7 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.arrays_of_arrays.8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.arrays_of_arrays.9 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.arrays_of_arrays.10 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.arrays_of_arrays.11 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.arrays_of_arrays.12 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.arrays_of_arrays.13 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.arrays_of_arrays.14 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.arrays_of_arrays.15 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.arrays_of_arrays.16 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.arrays_of_arrays.17 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.arrays_of_arrays.18 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.arrays_of_arrays.19 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.arrays_of_arrays.20 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.arrays_of_arrays.21 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.arrays_of_arrays.22 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.arrays_of_arrays.23 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.arrays_of_arrays.24 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_instance_arrays.0 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_instance_arrays.1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_instance_arrays.2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_instance_arrays.3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_instance_arrays.4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_instance_arrays.5 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_instance_arrays.6 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_instance_arrays.7 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_instance_arrays.8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_instance_arrays.9 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_instance_arrays.10 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_instance_arrays.11 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_instance_arrays.12 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_instance_arrays.13 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_instance_arrays.14 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_instance_arrays.15 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_instance_arrays.16 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_instance_arrays.17 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_instance_arrays.18 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_instance_arrays.19 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_instance_arrays.20 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_instance_arrays.21 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_instance_arrays.22 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_instance_arrays.23 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.basic_instance_arrays.24 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs.0 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs.1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs.2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs.3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs.4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs.5 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs.6 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs.7 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs.8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs.9 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs.10 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs.11 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs.12 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs.13 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs.14 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs.15 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs.16 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs.17 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs.18 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs.19 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs.20 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs.21 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs.22 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs.23 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs.24 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays.0 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays.1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays.2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays.3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays.4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays.5 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays.6 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays.7 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays.8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays.9 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays.10 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays.11 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays.12 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays.13 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays.14 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays.15 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays.16 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays.17 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays.18 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays.19 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays.20 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays.21 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays.22 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays.23 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays.24 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_instance_arrays.0 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_instance_arrays.1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_instance_arrays.2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_instance_arrays.3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_instance_arrays.4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_instance_arrays.5 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_instance_arrays.6 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_instance_arrays.7 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_instance_arrays.8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_instance_arrays.9 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_instance_arrays.10 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_instance_arrays.11 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_instance_arrays.12 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_instance_arrays.13 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_instance_arrays.14 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_instance_arrays.15 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_instance_arrays.16 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_instance_arrays.17 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_instance_arrays.18 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_instance_arrays.19 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_instance_arrays.20 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_instance_arrays.21 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_instance_arrays.22 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_instance_arrays.23 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_instance_arrays.24 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays_instance_arrays.0 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays_instance_arrays.1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays_instance_arrays.2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays_instance_arrays.3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays_instance_arrays.4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays_instance_arrays.5 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays_instance_arrays.6 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays_instance_arrays.7 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays_instance_arrays.8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays_instance_arrays.9 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays_instance_arrays.10 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays_instance_arrays.11 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays_instance_arrays.12 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays_instance_arrays.13 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays_instance_arrays.14 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays_instance_arrays.15 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays_instance_arrays.16 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays_instance_arrays.17 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays_instance_arrays.18 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays_instance_arrays.19 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays_instance_arrays.20 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays_instance_arrays.21 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays_instance_arrays.22 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays_instance_arrays.23 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.nested_structs_arrays_instance_arrays.24 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.0 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.5 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.6 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.7 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.9 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.10 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.11 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.12 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.13 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.14 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.15 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.16 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.17 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.18 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.19 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.20 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.21 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.22 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.23 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.24 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.25 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.26 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.27 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.28 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.29 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.30 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.31 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.32 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.33 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.34 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.35 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.36 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.37 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.38 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.39 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.40 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.41 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.42 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.43 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.44 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.45 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.46 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.47 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.48 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_per_block_buffers.49 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.0 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.5 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.6 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.7 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.9 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.10 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.11 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.12 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.13 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.14 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.15 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.16 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.17 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.18 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.19 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.20 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.21 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.22 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.23 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.24 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.25 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.26 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.27 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.28 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.29 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.30 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.31 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.32 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.33 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.34 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.35 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.36 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.37 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.38 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.39 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.40 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.41 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.42 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.43 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.44 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.45 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.46 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.47 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.48 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.49 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.add.lowp_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.add.lowp_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.add.mediump_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.add.mediump_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.add.highp_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.add.highp_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.min.lowp_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.min.lowp_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.min.mediump_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.min.mediump_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.min.highp_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.min.highp_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.max.lowp_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.max.lowp_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.max.mediump_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.max.mediump_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.max.highp_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.max.highp_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.and.lowp_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.and.lowp_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.and.mediump_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.and.mediump_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.and.highp_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.and.highp_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.or.lowp_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.or.lowp_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.or.mediump_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.or.mediump_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.or.highp_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.or.highp_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.xor.lowp_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.xor.lowp_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.xor.mediump_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.xor.mediump_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.xor.highp_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.xor.highp_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.exchange.lowp_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.exchange.lowp_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.exchange.mediump_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.exchange.mediump_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.exchange.highp_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.exchange.highp_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.compswap.lowp_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.compswap.lowp_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.compswap.mediump_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.compswap.mediump_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.compswap.highp_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.atomic.compswap.highp_int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.array_length.sized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.array_length.sized_writeonly_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.array_length.sized_readonly_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.array_length.unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.array_length.unsized_writeonly_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ssbo.array_length.unsized_readonly_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.float_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.float_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.float_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.vec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.vec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.vec2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.vec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.vec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.vec3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.vec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.vec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.vec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.int_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.int_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.int_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.ivec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.ivec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.ivec2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.ivec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.ivec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.ivec3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.ivec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.ivec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.ivec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.uint_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.uint_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.uint_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.uvec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.uvec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.uvec2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.uvec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.uvec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.uvec3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.uvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.uvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.uvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.bool_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.bool_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.bool_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.bvec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.bvec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.bvec2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.bvec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.bvec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.bvec3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.bvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.bvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.bvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.mat2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.mat2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.mat2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.row_major_mat2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.row_major_mat2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.row_major_mat2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.column_major_mat2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.column_major_mat2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.column_major_mat2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.mat3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.mat3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.mat3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.row_major_mat3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.row_major_mat3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.row_major_mat3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.column_major_mat3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.column_major_mat3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.column_major_mat3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.mat4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.mat4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.mat4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.row_major_mat4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.row_major_mat4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.row_major_mat4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.column_major_mat4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.column_major_mat4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.column_major_mat4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.mat2x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.mat2x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.mat2x3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.row_major_mat2x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.row_major_mat2x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.row_major_mat2x3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.column_major_mat2x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.column_major_mat2x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.column_major_mat2x3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.mat2x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.mat2x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.mat2x4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.row_major_mat2x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.row_major_mat2x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.row_major_mat2x4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.column_major_mat2x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.column_major_mat2x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.column_major_mat2x4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.mat3x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.mat3x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.mat3x2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.row_major_mat3x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.row_major_mat3x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.row_major_mat3x2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.column_major_mat3x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.column_major_mat3x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.column_major_mat3x2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.mat3x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.mat3x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.mat3x4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.row_major_mat3x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.row_major_mat3x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.row_major_mat3x4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.column_major_mat3x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.column_major_mat3x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.column_major_mat3x4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.mat4x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.mat4x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.mat4x2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.row_major_mat4x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.row_major_mat4x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.row_major_mat4x2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.column_major_mat4x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.column_major_mat4x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.column_major_mat4x2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.mat4x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.mat4x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.mat4x3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.row_major_mat4x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.row_major_mat4x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.row_major_mat4x3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.column_major_mat4x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.column_major_mat4x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.shared.column_major_mat4x3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.float_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.float_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.vec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.vec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.vec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.vec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.vec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.vec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.int_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.int_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.ivec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.ivec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.ivec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.ivec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.ivec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.ivec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.uint_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.uint_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.uvec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.uvec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.uvec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.uvec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.uvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.uvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.bool_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.bool_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.bvec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.bvec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.bvec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.bvec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.bvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.bvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.mat2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.mat2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.row_major_mat2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.row_major_mat2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.column_major_mat2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.column_major_mat2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.mat3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.mat3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.row_major_mat3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.row_major_mat3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.column_major_mat3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.column_major_mat3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.mat4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.mat4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.row_major_mat4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.row_major_mat4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.column_major_mat4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.column_major_mat4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.mat2x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.mat2x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.row_major_mat2x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.row_major_mat2x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.column_major_mat2x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.column_major_mat2x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.mat2x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.mat2x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.row_major_mat2x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.row_major_mat2x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.column_major_mat2x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.column_major_mat2x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.mat3x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.mat3x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.row_major_mat3x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.row_major_mat3x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.column_major_mat3x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.column_major_mat3x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.mat3x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.mat3x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.row_major_mat3x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.row_major_mat3x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.column_major_mat3x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.column_major_mat3x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.mat4x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.mat4x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.row_major_mat4x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.row_major_mat4x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.column_major_mat4x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.column_major_mat4x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.mat4x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.mat4x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.row_major_mat4x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.row_major_mat4x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.column_major_mat4x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.packed.column_major_mat4x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.float_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.float_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.float_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.vec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.vec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.vec2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.vec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.vec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.vec3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.vec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.vec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.vec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.int_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.int_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.int_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.ivec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.ivec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.ivec2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.ivec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.ivec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.ivec3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.ivec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.ivec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.ivec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.uint_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.uint_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.uint_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.uvec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.uvec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.uvec2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.uvec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.uvec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.uvec3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.uvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.uvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.uvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.bool_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.bool_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.bool_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.bvec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.bvec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.bvec2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.bvec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.bvec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.bvec3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.bvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.bvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.bvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.mat2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.mat2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.mat2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.row_major_mat2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.row_major_mat2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.row_major_mat2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.column_major_mat2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.column_major_mat2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.column_major_mat2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.mat3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.mat3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.mat3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.row_major_mat3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.row_major_mat3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.row_major_mat3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.column_major_mat3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.column_major_mat3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.column_major_mat3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.mat4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.mat4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.mat4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.row_major_mat4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.row_major_mat4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.row_major_mat4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.column_major_mat4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.column_major_mat4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.column_major_mat4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.mat2x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.mat2x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.mat2x3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.row_major_mat2x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.row_major_mat2x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.row_major_mat2x3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.column_major_mat2x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.column_major_mat2x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.column_major_mat2x3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.mat2x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.mat2x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.mat2x4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.row_major_mat2x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.row_major_mat2x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.row_major_mat2x4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.column_major_mat2x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.column_major_mat2x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.column_major_mat2x4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.mat3x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.mat3x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.mat3x2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.row_major_mat3x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.row_major_mat3x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.row_major_mat3x2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.column_major_mat3x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.column_major_mat3x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.column_major_mat3x2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.mat3x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.mat3x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.mat3x4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.row_major_mat3x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.row_major_mat3x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.row_major_mat3x4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.column_major_mat3x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.column_major_mat3x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.column_major_mat3x4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.mat4x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.mat4x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.mat4x2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.row_major_mat4x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.row_major_mat4x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.row_major_mat4x2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.column_major_mat4x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.column_major_mat4x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.column_major_mat4x2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.mat4x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.mat4x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.mat4x3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.row_major_mat4x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.row_major_mat4x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.row_major_mat4x3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.column_major_mat4x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.column_major_mat4x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_array.std140.column_major_mat4x3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.float_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.float_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.float_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.vec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.vec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.vec2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.vec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.vec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.vec3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.vec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.vec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.vec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.int_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.int_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.int_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.ivec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.ivec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.ivec2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.ivec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.ivec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.ivec3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.ivec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.ivec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.ivec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.uint_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.uint_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.uint_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.uvec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.uvec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.uvec2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.uvec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.uvec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.uvec3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.uvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.uvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.uvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.bool_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.bool_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.bool_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.bvec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.bvec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.bvec2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.bvec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.bvec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.bvec3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.bvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.bvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.bvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.mat2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.mat2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.mat2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.row_major_mat2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.row_major_mat2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.row_major_mat2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.column_major_mat2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.column_major_mat2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.column_major_mat2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.mat3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.mat3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.mat3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.row_major_mat3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.row_major_mat3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.row_major_mat3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.column_major_mat3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.column_major_mat3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.column_major_mat3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.mat4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.mat4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.mat4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.row_major_mat4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.row_major_mat4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.row_major_mat4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.column_major_mat4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.column_major_mat4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.column_major_mat4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.mat2x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.mat2x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.mat2x3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.row_major_mat2x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.row_major_mat2x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.row_major_mat2x3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.column_major_mat2x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.column_major_mat2x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.column_major_mat2x3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.mat2x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.mat2x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.mat2x4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.row_major_mat2x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.row_major_mat2x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.row_major_mat2x4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.column_major_mat2x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.column_major_mat2x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.column_major_mat2x4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.mat3x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.mat3x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.mat3x2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.row_major_mat3x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.row_major_mat3x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.row_major_mat3x2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.column_major_mat3x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.column_major_mat3x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.column_major_mat3x2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.mat3x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.mat3x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.mat3x4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.row_major_mat3x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.row_major_mat3x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.row_major_mat3x4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.column_major_mat3x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.column_major_mat3x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.column_major_mat3x4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.mat4x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.mat4x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.mat4x2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.row_major_mat4x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.row_major_mat4x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.row_major_mat4x2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.column_major_mat4x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.column_major_mat4x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.column_major_mat4x2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.mat4x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.mat4x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.mat4x3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.row_major_mat4x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.row_major_mat4x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.row_major_mat4x3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.column_major_mat4x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.column_major_mat4x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.shared.column_major_mat4x3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.float_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.float_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.vec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.vec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.vec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.vec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.vec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.vec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.int_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.int_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.ivec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.ivec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.ivec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.ivec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.ivec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.ivec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.uint_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.uint_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.uvec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.uvec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.uvec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.uvec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.uvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.uvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.bool_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.bool_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.bvec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.bvec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.bvec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.bvec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.bvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.bvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.mat2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.mat2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.row_major_mat2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.row_major_mat2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.column_major_mat2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.column_major_mat2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.mat3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.mat3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.row_major_mat3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.row_major_mat3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.column_major_mat3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.column_major_mat3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.mat4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.mat4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.row_major_mat4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.row_major_mat4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.column_major_mat4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.column_major_mat4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.mat2x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.mat2x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.row_major_mat2x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.row_major_mat2x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.column_major_mat2x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.column_major_mat2x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.mat2x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.mat2x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.row_major_mat2x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.row_major_mat2x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.column_major_mat2x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.column_major_mat2x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.mat3x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.mat3x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.row_major_mat3x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.row_major_mat3x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.column_major_mat3x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.column_major_mat3x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.mat3x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.mat3x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.row_major_mat3x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.row_major_mat3x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.column_major_mat3x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.column_major_mat3x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.mat4x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.mat4x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.row_major_mat4x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.row_major_mat4x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.column_major_mat4x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.column_major_mat4x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.mat4x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.mat4x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.row_major_mat4x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.row_major_mat4x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.column_major_mat4x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.packed.column_major_mat4x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.float_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.float_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.float_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.vec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.vec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.vec2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.vec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.vec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.vec3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.vec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.vec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.vec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.int_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.int_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.int_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.ivec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.ivec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.ivec2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.ivec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.ivec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.ivec3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.ivec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.ivec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.ivec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.uint_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.uint_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.uint_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.uvec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.uvec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.uvec2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.uvec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.uvec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.uvec3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.uvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.uvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.uvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.bool_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.bool_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.bool_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.bvec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.bvec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.bvec2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.bvec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.bvec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.bvec3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.bvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.bvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.bvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.mat2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.mat2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.mat2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.row_major_mat2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.row_major_mat2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.row_major_mat2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.column_major_mat2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.column_major_mat2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.column_major_mat2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.mat3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.mat3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.mat3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.row_major_mat3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.row_major_mat3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.row_major_mat3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.column_major_mat3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.column_major_mat3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.column_major_mat3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.mat4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.mat4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.mat4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.row_major_mat4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.row_major_mat4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.row_major_mat4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.column_major_mat4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.column_major_mat4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.column_major_mat4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.mat2x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.mat2x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.mat2x3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.row_major_mat2x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.row_major_mat2x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.row_major_mat2x3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.column_major_mat2x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.column_major_mat2x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.column_major_mat2x3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.mat2x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.mat2x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.mat2x4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.row_major_mat2x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.row_major_mat2x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.row_major_mat2x4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.column_major_mat2x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.column_major_mat2x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.column_major_mat2x4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.mat3x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.mat3x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.mat3x2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.row_major_mat3x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.row_major_mat3x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.row_major_mat3x2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.column_major_mat3x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.column_major_mat3x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.column_major_mat3x2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.mat3x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.mat3x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.mat3x4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.row_major_mat3x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.row_major_mat3x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.row_major_mat3x4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.column_major_mat3x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.column_major_mat3x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.column_major_mat3x4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.mat4x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.mat4x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.mat4x2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.row_major_mat4x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.row_major_mat4x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.row_major_mat4x2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.column_major_mat4x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.column_major_mat4x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.column_major_mat4x2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.mat4x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.mat4x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.mat4x3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.row_major_mat4x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.row_major_mat4x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.row_major_mat4x3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.column_major_mat4x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.column_major_mat4x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.3_level_array.std140.column_major_mat4x3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_struct_array.per_block_buffer.shared_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_struct_array.per_block_buffer.shared_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_struct_array.per_block_buffer.shared_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_struct_array.per_block_buffer.shared_instance_array_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_struct_array.per_block_buffer.shared_instance_array_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_struct_array.per_block_buffer.shared_instance_array_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_struct_array.per_block_buffer.packed_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_struct_array.per_block_buffer.packed_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_struct_array.per_block_buffer.packed_instance_array_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_struct_array.per_block_buffer.packed_instance_array_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_struct_array.per_block_buffer.std140_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_struct_array.per_block_buffer.std140_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_struct_array.per_block_buffer.std140_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_struct_array.per_block_buffer.std140_instance_array_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_struct_array.per_block_buffer.std140_instance_array_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_struct_array.per_block_buffer.std140_instance_array_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_struct_array.single_buffer.shared_instance_array_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_struct_array.single_buffer.shared_instance_array_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_struct_array.single_buffer.shared_instance_array_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_struct_array.single_buffer.packed_instance_array_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_struct_array.single_buffer.packed_instance_array_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_struct_array.single_buffer.std140_instance_array_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_struct_array.single_buffer.std140_instance_array_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.2_level_struct_array.single_buffer.std140_instance_array_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.random.basic_type_arrays.4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.random.basic_type_arrays.10 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.random.all_per_block_buffers.1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.random.all_per_block_buffers.7 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.random.all_per_block_buffers.10 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.random.all_per_block_buffers.13 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.random.all_per_block_buffers.18 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.random.all_per_block_buffers.20 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.random.all_per_block_buffers.29 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.random.all_per_block_buffers.41 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.random.all_shared_buffer.1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.random.all_shared_buffer.8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.random.all_shared_buffer.22 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.random.all_shared_buffer.37 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.ubo.random.all_shared_buffer.38 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.store.rgba32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.store.rgba16f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.store.r32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.store.rgba32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.store.rgba16ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.store.rgba8ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.store.r32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.store.rgba32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.store.rgba16i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.store.rgba8i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.store.r32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.store.rgba8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.store.rgba8_snorm = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.load_store.rgba32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.load_store.rgba16f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.load_store.r32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.load_store.rgba32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.load_store.rgba16ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.load_store.rgba8ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.load_store.r32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.load_store.rgba32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.load_store.rgba16i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.load_store.rgba8i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.load_store.r32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.load_store.rgba8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.load_store.rgba8_snorm = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.qualifiers.coherent_r32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.qualifiers.volatile_r32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.qualifiers.coherent_r32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.qualifiers.volatile_r32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.qualifiers.coherent_r32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.qualifiers.volatile_r32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.qualifiers.restrict = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba32f_rgba32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba32f_rgba32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba16f_rgba16ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba16f_rgba16i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.r32f_rgba8ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.r32f_r32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.r32f_rgba8i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.r32f_r32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.r32f_rgba8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.r32f_rgba8_snorm = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba32ui_rgba32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba32ui_rgba32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba16ui_rgba16f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba16ui_rgba16i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba8ui_r32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba8ui_r32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba8ui_rgba8i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba8ui_r32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba8ui_rgba8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba8ui_rgba8_snorm = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.r32ui_r32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.r32ui_rgba8ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.r32ui_rgba8i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.r32ui_r32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.r32ui_rgba8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.r32ui_rgba8_snorm = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba32i_rgba32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba32i_rgba32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba16i_rgba16f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba16i_rgba16ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba8i_r32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba8i_rgba8ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba8i_r32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba8i_r32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba8i_rgba8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba8i_rgba8_snorm = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.r32i_r32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.r32i_rgba8ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.r32i_r32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.r32i_rgba8i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.r32i_rgba8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.r32i_rgba8_snorm = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba8_r32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba8_rgba8ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba8_r32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba8_rgba8i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba8_r32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba8_rgba8_snorm = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba8_snorm_r32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba8_snorm_rgba8ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba8_snorm_r32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba8_snorm_rgba8i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba8_snorm_r32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba8_snorm_rgba8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.image_size.readonly_32x32 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.image_size.readonly_12x34 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.image_size.readonly_1x1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.image_size.readonly_7x1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.image_size.writeonly_32x32 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.image_size.writeonly_12x34 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.image_size.writeonly_1x1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.image_size.writeonly_7x1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.image_size.readonly_writeonly_32x32 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.image_size.readonly_writeonly_12x34 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.image_size.readonly_writeonly_1x1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d.image_size.readonly_writeonly_7x1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.store.rgba32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.store.rgba32f_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.store.rgba16f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.store.rgba16f_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.store.r32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.store.r32f_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.store.rgba32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.store.rgba32ui_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.store.rgba16ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.store.rgba16ui_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.store.rgba8ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.store.rgba8ui_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.store.r32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.store.r32ui_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.store.rgba32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.store.rgba32i_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.store.rgba16i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.store.rgba16i_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.store.rgba8i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.store.rgba8i_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.store.r32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.store.r32i_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.store.rgba8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.store.rgba8_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.store.rgba8_snorm = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.store.rgba8_snorm_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.load_store.rgba32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.load_store.rgba32f_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.load_store.rgba16f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.load_store.rgba16f_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.load_store.r32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.load_store.r32f_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.load_store.rgba32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.load_store.rgba32ui_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.load_store.rgba16ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.load_store.rgba16ui_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.load_store.rgba8ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.load_store.rgba8ui_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.load_store.r32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.load_store.r32ui_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.load_store.rgba32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.load_store.rgba32i_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.load_store.rgba16i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.load_store.rgba16i_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.load_store.rgba8i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.load_store.rgba8i_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.load_store.r32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.load_store.r32i_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.load_store.rgba8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.load_store.rgba8_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.load_store.rgba8_snorm = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.load_store.rgba8_snorm_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.qualifiers.coherent_r32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.qualifiers.volatile_r32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.qualifiers.coherent_r32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.qualifiers.volatile_r32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.qualifiers.coherent_r32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.qualifiers.volatile_r32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.qualifiers.restrict = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.rgba32f_rgba32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.rgba32f_rgba32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.rgba16f_rgba16ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.rgba16f_rgba16i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.r32f_rgba8ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.r32f_r32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.r32f_rgba8i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.r32f_r32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.r32f_rgba8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.r32f_rgba8_snorm = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.rgba32ui_rgba32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.rgba32ui_rgba32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.rgba16ui_rgba16f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.rgba16ui_rgba16i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.rgba8ui_r32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.rgba8ui_r32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.rgba8ui_rgba8i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.rgba8ui_r32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.rgba8ui_rgba8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.rgba8ui_rgba8_snorm = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.r32ui_r32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.r32ui_rgba8ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.r32ui_rgba8i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.r32ui_r32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.r32ui_rgba8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.r32ui_rgba8_snorm = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.rgba32i_rgba32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.rgba32i_rgba32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.rgba16i_rgba16f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.rgba16i_rgba16ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.rgba8i_r32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.rgba8i_rgba8ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.rgba8i_r32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.rgba8i_r32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.rgba8i_rgba8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.rgba8i_rgba8_snorm = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.r32i_r32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.r32i_rgba8ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.r32i_r32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.r32i_rgba8i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.r32i_rgba8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.r32i_rgba8_snorm = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.rgba8_r32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.rgba8_rgba8ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.rgba8_r32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.rgba8_rgba8i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.rgba8_r32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.rgba8_rgba8_snorm = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.rgba8_snorm_r32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.rgba8_snorm_rgba8ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.rgba8_snorm_r32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.rgba8_snorm_rgba8i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.rgba8_snorm_r32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.rgba8_snorm_rgba8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.image_size.readonly_32x32 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.image_size.readonly_12x12 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.image_size.readonly_1x1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.image_size.readonly_7x7 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.image_size.writeonly_32x32 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.image_size.writeonly_12x12 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.image_size.writeonly_1x1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.image_size.writeonly_7x7 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.image_size.readonly_writeonly_32x32 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.image_size.readonly_writeonly_12x12 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.image_size.readonly_writeonly_1x1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.cube.image_size.readonly_writeonly_7x7 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.store.rgba32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.store.rgba32f_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.store.rgba16f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.store.rgba16f_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.store.r32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.store.r32f_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.store.rgba32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.store.rgba32ui_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.store.rgba16ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.store.rgba16ui_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.store.rgba8ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.store.rgba8ui_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.store.r32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.store.r32ui_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.store.rgba32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.store.rgba32i_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.store.rgba16i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.store.rgba16i_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.store.rgba8i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.store.rgba8i_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.store.r32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.store.r32i_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.store.rgba8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.store.rgba8_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.store.rgba8_snorm = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.store.rgba8_snorm_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.load_store.rgba32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.load_store.rgba32f_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.load_store.rgba16f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.load_store.rgba16f_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.load_store.r32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.load_store.r32f_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.load_store.rgba32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.load_store.rgba32ui_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.load_store.rgba16ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.load_store.rgba16ui_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.load_store.rgba8ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.load_store.rgba8ui_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.load_store.r32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.load_store.r32ui_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.load_store.rgba32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.load_store.rgba32i_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.load_store.rgba16i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.load_store.rgba16i_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.load_store.rgba8i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.load_store.rgba8i_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.load_store.r32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.load_store.r32i_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.load_store.rgba8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.load_store.rgba8_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.load_store.rgba8_snorm = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.load_store.rgba8_snorm_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.qualifiers.coherent_r32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.qualifiers.volatile_r32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.qualifiers.coherent_r32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.qualifiers.volatile_r32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.qualifiers.coherent_r32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.qualifiers.volatile_r32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.qualifiers.restrict = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba32f_rgba32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba32f_rgba32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba16f_rgba16ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba16f_rgba16i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.r32f_rgba8ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.r32f_r32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.r32f_rgba8i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.r32f_r32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.r32f_rgba8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.r32f_rgba8_snorm = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba32ui_rgba32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba32ui_rgba32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba16ui_rgba16f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba16ui_rgba16i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba8ui_r32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba8ui_r32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba8ui_rgba8i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba8ui_r32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba8ui_rgba8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba8ui_rgba8_snorm = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.r32ui_r32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.r32ui_rgba8ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.r32ui_rgba8i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.r32ui_r32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.r32ui_rgba8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.r32ui_rgba8_snorm = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba32i_rgba32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba32i_rgba32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba16i_rgba16f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba16i_rgba16ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba8i_r32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba8i_rgba8ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba8i_r32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba8i_r32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba8i_rgba8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba8i_rgba8_snorm = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.r32i_r32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.r32i_rgba8ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.r32i_r32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.r32i_rgba8i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.r32i_rgba8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.r32i_rgba8_snorm = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba8_r32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba8_rgba8ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba8_r32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba8_rgba8i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba8_r32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba8_rgba8_snorm = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba8_snorm_r32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba8_snorm_rgba8ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba8_snorm_r32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba8_snorm_rgba8i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba8_snorm_r32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba8_snorm_rgba8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.image_size.readonly_32x32x32 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.image_size.readonly_12x34x56 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.image_size.readonly_1x1x1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.image_size.readonly_7x1x1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.image_size.writeonly_32x32x32 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.image_size.writeonly_12x34x56 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.image_size.writeonly_1x1x1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.image_size.writeonly_7x1x1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.image_size.readonly_writeonly_32x32x32 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.image_size.readonly_writeonly_12x34x56 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.image_size.readonly_writeonly_1x1x1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.3d.image_size.readonly_writeonly_7x1x1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.store.rgba32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.store.rgba32f_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.store.rgba16f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.store.rgba16f_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.store.r32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.store.r32f_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.store.rgba32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.store.rgba32ui_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.store.rgba16ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.store.rgba16ui_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.store.rgba8ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.store.rgba8ui_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.store.r32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.store.r32ui_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.store.rgba32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.store.rgba32i_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.store.rgba16i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.store.rgba16i_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.store.rgba8i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.store.rgba8i_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.store.r32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.store.r32i_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.store.rgba8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.store.rgba8_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.store.rgba8_snorm = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.store.rgba8_snorm_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.load_store.rgba32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.load_store.rgba32f_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.load_store.rgba16f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.load_store.rgba16f_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.load_store.r32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.load_store.r32f_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.load_store.rgba32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.load_store.rgba32ui_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.load_store.rgba16ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.load_store.rgba16ui_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.load_store.rgba8ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.load_store.rgba8ui_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.load_store.r32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.load_store.r32ui_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.load_store.rgba32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.load_store.rgba32i_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.load_store.rgba16i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.load_store.rgba16i_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.load_store.rgba8i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.load_store.rgba8i_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.load_store.r32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.load_store.r32i_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.load_store.rgba8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.load_store.rgba8_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.load_store.rgba8_snorm = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.load_store.rgba8_snorm_single_layer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.qualifiers.coherent_r32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.qualifiers.volatile_r32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.qualifiers.coherent_r32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.qualifiers.volatile_r32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.qualifiers.coherent_r32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.qualifiers.volatile_r32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.qualifiers.restrict = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba32f_rgba32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba32f_rgba32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba16f_rgba16ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba16f_rgba16i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.r32f_rgba8ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.r32f_r32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.r32f_rgba8i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.r32f_r32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.r32f_rgba8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.r32f_rgba8_snorm = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba32ui_rgba32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba32ui_rgba32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba16ui_rgba16f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba16ui_rgba16i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba8ui_r32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba8ui_r32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba8ui_rgba8i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba8ui_r32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba8ui_rgba8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba8ui_rgba8_snorm = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.r32ui_r32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.r32ui_rgba8ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.r32ui_rgba8i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.r32ui_r32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.r32ui_rgba8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.r32ui_rgba8_snorm = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba32i_rgba32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba32i_rgba32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba16i_rgba16f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba16i_rgba16ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba8i_r32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba8i_rgba8ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba8i_r32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba8i_r32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba8i_rgba8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba8i_rgba8_snorm = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.r32i_r32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.r32i_rgba8ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.r32i_r32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.r32i_rgba8i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.r32i_rgba8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.r32i_rgba8_snorm = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba8_r32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba8_rgba8ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba8_r32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba8_rgba8i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba8_r32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba8_rgba8_snorm = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba8_snorm_r32f = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba8_snorm_rgba8ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba8_snorm_r32ui = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba8_snorm_rgba8i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba8_snorm_r32i = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba8_snorm_rgba8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.image_size.readonly_32x32x32 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.image_size.readonly_12x34x56 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.image_size.readonly_1x1x1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.image_size.readonly_7x1x1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.image_size.writeonly_32x32x32 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.image_size.writeonly_12x34x56 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.image_size.writeonly_1x1x1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.image_size.writeonly_7x1x1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.image_size.readonly_writeonly_32x32x32 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.image_size.readonly_writeonly_12x34x56 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.image_size.readonly_writeonly_1x1x1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.image_load_store.2d_array.image_size.readonly_writeonly_7x1x1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get.1_counter_1_call_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get.1_counter_1_call_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get.1_counter_1_call_5000_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get.1_counter_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get.1_counter_5_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get.1_counter_100_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get.1_counter_100_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get.4_counters_1_call_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get.4_counters_1_call_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get.4_counters_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get.4_counters_5_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get.4_counters_100_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get.4_counters_100_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get.8_counters_1_call_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get.8_counters_1_call_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get.8_counters_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get.8_counters_5_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get.8_counters_100_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get.8_counters_100_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_branch.1_counter_1_call_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_branch.1_counter_1_call_5000_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_branch.1_counter_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_branch.1_counter_5_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_branch.1_counter_100_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_branch.1_counter_100_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_branch.4_counters_1_call_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_branch.4_counters_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_branch.4_counters_5_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_branch.4_counters_100_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_branch.4_counters_100_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_branch.8_counters_1_call_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_branch.8_counters_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_branch.8_counters_5_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_branch.8_counters_100_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_branch.8_counters_100_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc.1_counter_1_call_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc.1_counter_1_call_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc.1_counter_1_call_5000_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc.1_counter_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc.1_counter_5_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc.1_counter_100_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc.1_counter_100_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc.4_counters_1_call_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc.4_counters_1_call_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc.4_counters_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc.4_counters_5_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc.4_counters_100_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc.4_counters_100_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc.8_counters_1_call_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc.8_counters_1_call_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc.8_counters_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc.8_counters_5_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc.8_counters_100_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc.8_counters_100_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_branch.1_counter_1_call_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_branch.1_counter_1_call_5000_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_branch.1_counter_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_branch.1_counter_5_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_branch.1_counter_100_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_branch.1_counter_100_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_branch.4_counters_1_call_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_branch.4_counters_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_branch.4_counters_5_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_branch.4_counters_100_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_branch.4_counters_100_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_branch.8_counters_1_call_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_branch.8_counters_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_branch.8_counters_5_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_branch.8_counters_100_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_branch.8_counters_100_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.dec.1_counter_1_call_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.dec.1_counter_1_call_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.dec.1_counter_1_call_5000_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.dec.1_counter_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.dec.1_counter_5_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.dec.1_counter_100_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.dec.1_counter_100_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.dec.4_counters_1_call_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.dec.4_counters_1_call_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.dec.4_counters_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.dec.4_counters_5_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.dec.4_counters_100_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.dec.4_counters_100_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.dec.8_counters_1_call_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.dec.8_counters_1_call_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.dec.8_counters_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.dec.8_counters_5_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.dec.8_counters_100_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.dec.8_counters_100_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.dec_branch.1_counter_1_call_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.dec_branch.1_counter_1_call_5000_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.dec_branch.1_counter_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.dec_branch.1_counter_5_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.dec_branch.1_counter_100_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.dec_branch.1_counter_100_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.dec_branch.4_counters_1_call_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.dec_branch.4_counters_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.dec_branch.4_counters_5_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.dec_branch.4_counters_100_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.dec_branch.4_counters_100_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.dec_branch.8_counters_1_call_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.dec_branch.8_counters_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.dec_branch.8_counters_5_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.dec_branch.8_counters_100_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.dec_branch.8_counters_100_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc.1_counter_1_call_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc.1_counter_1_call_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc.1_counter_1_call_5000_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc.1_counter_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc.1_counter_5_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc.1_counter_100_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc.1_counter_100_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc.4_counters_1_call_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc.4_counters_1_call_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc.4_counters_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc.4_counters_5_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc.4_counters_100_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc.4_counters_100_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc.8_counters_1_call_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc.8_counters_1_call_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc.8_counters_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc.8_counters_5_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc.8_counters_100_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc.8_counters_100_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_branch.1_counter_1_call_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_branch.1_counter_1_call_5000_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_branch.1_counter_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_branch.1_counter_5_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_branch.1_counter_100_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_branch.1_counter_100_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_branch.4_counters_1_call_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_branch.4_counters_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_branch.4_counters_5_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_branch.4_counters_100_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_branch.4_counters_100_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_branch.8_counters_1_call_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_branch.8_counters_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_branch.8_counters_5_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_branch.8_counters_100_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_branch.8_counters_100_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_dec.1_counter_1_call_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_dec.1_counter_1_call_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_dec.1_counter_1_call_5000_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_dec.1_counter_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_dec.1_counter_5_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_dec.1_counter_100_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_dec.1_counter_100_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_dec.4_counters_1_call_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_dec.4_counters_1_call_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_dec.4_counters_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_dec.4_counters_5_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_dec.4_counters_100_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_dec.4_counters_100_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_dec.8_counters_1_call_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_dec.8_counters_1_call_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_dec.8_counters_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_dec.8_counters_5_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_dec.8_counters_100_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_dec.8_counters_100_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_dec_branch.1_counter_1_call_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_dec_branch.1_counter_1_call_5000_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_dec_branch.1_counter_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_dec_branch.1_counter_5_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_dec_branch.1_counter_100_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_dec_branch.1_counter_100_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_dec_branch.4_counters_1_call_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_dec_branch.4_counters_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_dec_branch.4_counters_5_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_dec_branch.4_counters_100_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_dec_branch.4_counters_100_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_dec_branch.8_counters_1_call_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_dec_branch.8_counters_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_dec_branch.8_counters_5_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_dec_branch.8_counters_100_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_dec_branch.8_counters_100_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_dec.1_counter_1_call_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_dec.1_counter_1_call_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_dec.1_counter_1_call_5000_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_dec.1_counter_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_dec.1_counter_5_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_dec.1_counter_100_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_dec.1_counter_100_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_dec.4_counters_1_call_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_dec.4_counters_1_call_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_dec.4_counters_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_dec.4_counters_5_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_dec.4_counters_100_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_dec.4_counters_100_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_dec.8_counters_1_call_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_dec.8_counters_1_call_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_dec.8_counters_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_dec.8_counters_5_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_dec.8_counters_100_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_dec.8_counters_100_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_dec_branch.1_counter_1_call_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_dec_branch.1_counter_1_call_5000_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_dec_branch.1_counter_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_dec_branch.1_counter_5_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_dec_branch.1_counter_100_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_dec_branch.1_counter_100_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_dec_branch.4_counters_1_call_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_dec_branch.4_counters_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_dec_branch.4_counters_5_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_dec_branch.4_counters_100_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_dec_branch.4_counters_100_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_dec_branch.8_counters_1_call_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_dec_branch.8_counters_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_dec_branch.8_counters_5_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_dec_branch.8_counters_100_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.inc_dec_branch.8_counters_100_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_dec.1_counter_1_call_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_dec.1_counter_1_call_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_dec.1_counter_1_call_5000_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_dec.1_counter_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_dec.1_counter_5_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_dec.1_counter_100_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_dec.1_counter_100_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_dec.4_counters_1_call_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_dec.4_counters_1_call_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_dec.4_counters_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_dec.4_counters_5_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_dec.4_counters_100_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_dec.4_counters_100_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_dec.8_counters_1_call_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_dec.8_counters_1_call_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_dec.8_counters_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_dec.8_counters_5_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_dec.8_counters_100_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_dec.8_counters_100_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_dec_branch.1_counter_1_call_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_dec_branch.1_counter_1_call_5000_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_dec_branch.1_counter_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_dec_branch.1_counter_5_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_dec_branch.1_counter_100_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_dec_branch.1_counter_100_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_dec_branch.4_counters_1_call_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_dec_branch.4_counters_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_dec_branch.4_counters_5_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_dec_branch.4_counters_100_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_dec_branch.4_counters_100_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_dec_branch.8_counters_1_call_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_dec_branch.8_counters_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_dec_branch.8_counters_5_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_dec_branch.8_counters_100_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.get_inc_dec_branch.8_counters_100_calls_10_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.reverse_offset.get_inc.8_counters_1_call_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.reverse_offset.get_inc.8_counters_1_call_1000_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.reverse_offset.get_inc.8_counters_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.reverse_offset.get_inc.8_counters_5_calls_1000_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.reverse_offset.get_dec.8_counters_1_call_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.reverse_offset.get_dec.8_counters_1_call_1000_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.reverse_offset.get_dec.8_counters_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.reverse_offset.get_dec.8_counters_5_calls_1000_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.reverse_offset.inc_dec.8_counters_1_call_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.reverse_offset.inc_dec.8_counters_1_call_1000_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.reverse_offset.inc_dec.8_counters_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.reverse_offset.inc_dec.8_counters_5_calls_1000_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.first_offset_set.get_inc.8_counters_1_call_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.first_offset_set.get_inc.8_counters_1_call_1000_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.first_offset_set.get_inc.8_counters_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.first_offset_set.get_inc.8_counters_5_calls_1000_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.first_offset_set.get_dec.8_counters_1_call_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.first_offset_set.get_dec.8_counters_1_call_1000_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.first_offset_set.get_dec.8_counters_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.first_offset_set.get_dec.8_counters_5_calls_1000_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.first_offset_set.inc_dec.8_counters_1_call_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.first_offset_set.inc_dec.8_counters_1_call_1000_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.first_offset_set.inc_dec.8_counters_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.first_offset_set.inc_dec.8_counters_5_calls_1000_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.default_offset_set.get_inc.8_counters_1_call_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.default_offset_set.get_inc.8_counters_1_call_1000_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.default_offset_set.get_inc.8_counters_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.default_offset_set.get_inc.8_counters_5_calls_1000_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.default_offset_set.get_dec.8_counters_1_call_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.default_offset_set.get_dec.8_counters_1_call_1000_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.default_offset_set.get_dec.8_counters_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.default_offset_set.get_dec.8_counters_5_calls_1000_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.default_offset_set.inc_dec.8_counters_1_call_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.default_offset_set.inc_dec.8_counters_1_call_1000_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.default_offset_set.inc_dec.8_counters_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.default_offset_set.inc_dec.8_counters_5_calls_1000_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.reset_default_offset.get_inc.8_counters_1_call_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.reset_default_offset.get_inc.8_counters_1_call_1000_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.reset_default_offset.get_inc.8_counters_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.reset_default_offset.get_inc.8_counters_5_calls_1000_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.reset_default_offset.get_dec.8_counters_1_call_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.reset_default_offset.get_dec.8_counters_1_call_1000_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.reset_default_offset.get_dec.8_counters_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.reset_default_offset.get_dec.8_counters_5_calls_1000_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.reset_default_offset.inc_dec.8_counters_1_call_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.reset_default_offset.inc_dec.8_counters_1_call_1000_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.reset_default_offset.inc_dec.8_counters_5_calls_1_thread = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.atomic_counter.layout.reset_default_offset.inc_dec.8_counters_5_calls_1000_threads = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.stencil_texturing.format.depth32f_stencil8_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.stencil_texturing.format.depth32f_stencil8_2d_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.stencil_texturing.format.depth32f_stencil8_cube = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.stencil_texturing.format.depth24_stencil8_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.stencil_texturing.format.depth24_stencil8_2d_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.stencil_texturing.format.depth24_stencil8_cube = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.stencil_texturing.render.depth32f_stencil8_clear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.stencil_texturing.render.depth32f_stencil8_draw = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.stencil_texturing.render.depth24_stencil8_clear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.stencil_texturing.render.depth24_stencil8_draw = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.stencil_texturing.misc.compare_mode_effect = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.stencil_texturing.misc.base_level = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_1.sample_position = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_1.sample_mask_only = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_1.sample_mask_and_alpha_to_coverage = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_1.sample_mask_and_sample_coverage = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_1.sample_mask_and_sample_coverage_and_alpha_to_coverage = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_1.sample_mask_non_effective_bits = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_2.sample_position = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_2.sample_mask_only = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_2.sample_mask_and_alpha_to_coverage = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_2.sample_mask_and_sample_coverage = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_2.sample_mask_and_sample_coverage_and_alpha_to_coverage = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_2.sample_mask_non_effective_bits = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_3.sample_position = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_3.sample_mask_only = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_3.sample_mask_and_alpha_to_coverage = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_3.sample_mask_and_sample_coverage = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_3.sample_mask_and_sample_coverage_and_alpha_to_coverage = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_3.sample_mask_non_effective_bits = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_4.sample_position = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_4.sample_mask_only = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_4.sample_mask_and_alpha_to_coverage = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_4.sample_mask_and_sample_coverage = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_4.sample_mask_and_sample_coverage_and_alpha_to_coverage = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_4.sample_mask_non_effective_bits = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_8.sample_position = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_8.sample_mask_only = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_8.sample_mask_and_alpha_to_coverage = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_8.sample_mask_and_sample_coverage = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_8.sample_mask_and_sample_coverage_and_alpha_to_coverage = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_8.sample_mask_non_effective_bits = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_10.sample_position = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_10.sample_mask_only = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_10.sample_mask_and_alpha_to_coverage = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_10.sample_mask_and_sample_coverage = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_10.sample_mask_and_sample_coverage_and_alpha_to_coverage = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_10.sample_mask_non_effective_bits = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_12.sample_position = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_12.sample_mask_only = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_12.sample_mask_and_alpha_to_coverage = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_12.sample_mask_and_sample_coverage = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_12.sample_mask_and_sample_coverage_and_alpha_to_coverage = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_12.sample_mask_non_effective_bits = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_13.sample_position = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_13.sample_mask_only = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_13.sample_mask_and_alpha_to_coverage = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_13.sample_mask_and_sample_coverage = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_13.sample_mask_and_sample_coverage_and_alpha_to_coverage = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_13.sample_mask_non_effective_bits = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_16.sample_position = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_16.sample_mask_only = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_16.sample_mask_and_alpha_to_coverage = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_16.sample_mask_and_sample_coverage = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_16.sample_mask_and_sample_coverage_and_alpha_to_coverage = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.samples_16.sample_mask_non_effective_bits = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.negative.fbo_attach_different_sample_count_tex_tex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.negative.fbo_attach_different_sample_count_tex_rbo = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.negative.fbo_attach_different_fixed_state_tex_tex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.negative.fbo_attach_different_fixed_state_tex_rbo = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.negative.fbo_attach_non_zero_level = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.negative.texture_min_filter = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.negative.texture_mag_filter = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.negative.texture_wrap_s = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.negative.texture_wrap_t = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.negative.texture_wrap_r = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.negative.texture_min_lod = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.negative.texture_max_lod = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.negative.texture_compare_mode = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.negative.texture_compare_func = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.negative.texture_base_level = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.negative.texture_high_sample_count = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.multisample.negative.texture_zero_sample_count = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8.size_pot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8.size_pot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8.size_pot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8.size_npot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8.size_npot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8.size_npot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8.texture_swizzle.red_green_blue_alpha = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8.texture_swizzle.green_blue_alpha_zero = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8.texture_swizzle.blue_alpha_zero_one = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8.texture_swizzle.alpha_zero_one_red = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8.texture_swizzle.zero_one_red_green = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8.texture_swizzle.one_red_green_blue = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8.filter_mode.min_linear_mag_linear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8.filter_mode.min_nearest_mipmap_nearest_mag_linear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8.filter_mode.min_nearest_mipmap_linear_mag_linear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8.filter_mode.min_linear_mipmap_nearest_mag_linear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8.filter_mode.min_linear_mipmap_linear_mag_linear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8.base_level.level_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8.base_level.level_2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8.incomplete.mipmap_incomplete = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8ui.size_pot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8ui.size_pot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8ui.size_pot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8ui.size_npot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8ui.size_npot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8ui.size_npot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8ui.texture_swizzle.red_green_blue_alpha = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8ui.texture_swizzle.green_blue_alpha_zero = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8ui.texture_swizzle.blue_alpha_zero_one = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8ui.texture_swizzle.alpha_zero_one_red = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8ui.texture_swizzle.zero_one_red_green = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8ui.texture_swizzle.one_red_green_blue = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8ui.filter_mode.min_nearest_mipmap_nearest_mag_nearest = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8ui.base_level.level_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8ui.base_level.level_2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8i.size_pot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8i.size_pot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8i.size_pot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8i.size_npot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8i.size_npot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8i.size_npot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8i.texture_swizzle.red_green_blue_alpha = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8i.texture_swizzle.green_blue_alpha_zero = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8i.texture_swizzle.blue_alpha_zero_one = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8i.texture_swizzle.alpha_zero_one_red = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8i.texture_swizzle.zero_one_red_green = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8i.texture_swizzle.one_red_green_blue = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8i.filter_mode.min_nearest_mipmap_nearest_mag_nearest = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8i.base_level.level_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.rgba8i.base_level.level_2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.depth32f.size_pot.compare_less.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.depth32f.size_pot.compare_greater.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.depth32f.size_npot.compare_less.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.depth32f.size_npot.compare_less.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.depth32f.size_npot.compare_less.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.depth32f.size_npot.compare_greater.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.depth32f.size_npot.compare_greater.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.depth32f.size_npot.compare_greater.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.depth32f.filter_mode.min_linear_mag_linear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.depth32f.filter_mode.min_nearest_mipmap_nearest_mag_linear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.depth32f.filter_mode.min_nearest_mipmap_linear_mag_linear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.depth32f.filter_mode.min_linear_mipmap_nearest_mag_linear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.depth32f.filter_mode.min_linear_mipmap_linear_mag_linear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.depth32f.base_level.level_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d.depth32f.base_level.level_2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8.size_pot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8.size_pot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8.size_pot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8.size_npot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8.size_npot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8.size_npot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8.texture_swizzle.red_green_blue_alpha = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8.texture_swizzle.green_blue_alpha_zero = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8.texture_swizzle.blue_alpha_zero_one = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8.texture_swizzle.alpha_zero_one_red = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8.texture_swizzle.zero_one_red_green = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8.texture_swizzle.one_red_green_blue = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8.filter_mode.min_linear_mag_linear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8.filter_mode.min_nearest_mipmap_nearest_mag_linear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8.filter_mode.min_nearest_mipmap_linear_mag_linear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8.filter_mode.min_linear_mipmap_nearest_mag_linear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8.filter_mode.min_linear_mipmap_linear_mag_linear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8.base_level.level_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8.base_level.level_2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8.incomplete.mipmap_incomplete = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8ui.size_pot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8ui.size_pot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8ui.size_pot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8ui.size_npot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8ui.size_npot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8ui.size_npot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8ui.texture_swizzle.red_green_blue_alpha = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8ui.texture_swizzle.green_blue_alpha_zero = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8ui.texture_swizzle.blue_alpha_zero_one = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8ui.texture_swizzle.alpha_zero_one_red = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8ui.texture_swizzle.zero_one_red_green = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8ui.texture_swizzle.one_red_green_blue = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8ui.filter_mode.min_nearest_mipmap_nearest_mag_nearest = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8ui.base_level.level_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8ui.base_level.level_2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8i.size_pot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8i.size_pot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8i.size_pot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8i.size_npot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8i.size_npot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8i.size_npot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8i.texture_swizzle.red_green_blue_alpha = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8i.texture_swizzle.green_blue_alpha_zero = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8i.texture_swizzle.blue_alpha_zero_one = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8i.texture_swizzle.alpha_zero_one_red = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8i.texture_swizzle.zero_one_red_green = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8i.texture_swizzle.one_red_green_blue = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8i.filter_mode.min_nearest_mipmap_nearest_mag_nearest = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8i.base_level.level_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8i.base_level.level_2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.depth32f.size_pot.compare_less.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.depth32f.size_pot.compare_less.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.depth32f.size_pot.compare_less.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.depth32f.size_pot.compare_greater.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.depth32f.size_pot.compare_greater.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.depth32f.size_pot.compare_greater.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.depth32f.size_npot.compare_less.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.depth32f.size_npot.compare_less.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.depth32f.size_npot.compare_less.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.depth32f.size_npot.compare_greater.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.depth32f.size_npot.compare_greater.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.depth32f.size_npot.compare_greater.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.depth32f.filter_mode.min_linear_mag_linear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.depth32f.filter_mode.min_nearest_mipmap_nearest_mag_linear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.depth32f.filter_mode.min_nearest_mipmap_linear_mag_linear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.depth32f.filter_mode.min_linear_mipmap_nearest_mag_linear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.depth32f.filter_mode.min_linear_mipmap_linear_mag_linear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.depth32f.base_level.level_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.2d_array.depth32f.base_level.level_2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.size_pot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.size_pot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.size_pot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.size_npot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.size_npot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.size_npot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.no_corners.size_pot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.no_corners.size_pot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.no_corners.size_pot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.no_corners.size_npot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.no_corners.size_npot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.no_corners.size_npot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.texture_swizzle.red_green_blue_alpha = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.texture_swizzle.green_blue_alpha_zero = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.texture_swizzle.blue_alpha_zero_one = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.texture_swizzle.alpha_zero_one_red = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.texture_swizzle.zero_one_red_green = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.texture_swizzle.one_red_green_blue = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.filter_mode.min_linear_mag_linear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.filter_mode.min_nearest_mipmap_nearest_mag_linear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.filter_mode.min_nearest_mipmap_linear_mag_linear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.filter_mode.min_linear_mipmap_nearest_mag_linear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.filter_mode.min_linear_mipmap_linear_mag_linear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.base_level.level_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.base_level.level_2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.incomplete.mipmap_incomplete = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.size_pot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.size_pot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.size_pot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.size_npot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.size_npot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.size_npot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.no_corners.size_pot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.no_corners.size_pot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.no_corners.size_pot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.no_corners.size_npot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.no_corners.size_npot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.no_corners.size_npot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.texture_swizzle.red_green_blue_alpha = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.texture_swizzle.green_blue_alpha_zero = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.texture_swizzle.blue_alpha_zero_one = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.texture_swizzle.alpha_zero_one_red = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.texture_swizzle.zero_one_red_green = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.texture_swizzle.one_red_green_blue = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.filter_mode.min_nearest_mipmap_nearest_mag_nearest = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.base_level.level_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8ui.base_level.level_2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.size_pot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.size_pot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.size_pot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.size_npot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.size_npot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.size_npot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.no_corners.size_pot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.no_corners.size_pot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.no_corners.size_pot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.no_corners.size_npot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.no_corners.size_npot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.no_corners.size_npot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.texture_swizzle.red_green_blue_alpha = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.texture_swizzle.green_blue_alpha_zero = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.texture_swizzle.blue_alpha_zero_one = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.texture_swizzle.alpha_zero_one_red = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.texture_swizzle.zero_one_red_green = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.texture_swizzle.one_red_green_blue = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.filter_mode.min_nearest_mipmap_nearest_mag_nearest = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.base_level.level_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.rgba8i.base_level.level_2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.no_corners.size_pot.compare_less.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.no_corners.size_pot.compare_less.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.no_corners.size_pot.compare_less.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.no_corners.size_pot.compare_greater.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.no_corners.size_pot.compare_greater.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.no_corners.size_pot.compare_greater.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.no_corners.size_npot.compare_less.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.no_corners.size_npot.compare_less.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.no_corners.size_npot.compare_less.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.no_corners.size_npot.compare_greater.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.no_corners.size_npot.compare_greater.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.no_corners.size_npot.compare_greater.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.rgba8.size_pot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.rgba8.size_pot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.rgba8.size_pot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.rgba8.size_npot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.rgba8.size_npot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.rgba8.size_npot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.rgba8ui.size_pot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.rgba8ui.size_pot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.rgba8ui.size_pot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.rgba8ui.size_npot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.rgba8ui.size_npot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.rgba8ui.size_npot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.rgba8i.size_pot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.rgba8i.size_pot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.rgba8i.size_pot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.rgba8i.size_npot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.rgba8i.size_npot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.rgba8i.size_npot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.depth32f.size_pot.compare_less.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.depth32f.size_pot.compare_less.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.depth32f.size_pot.compare_less.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.depth32f.size_pot.compare_greater.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.depth32f.size_pot.compare_greater.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.depth32f.size_pot.compare_greater.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.depth32f.size_npot.compare_less.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.depth32f.size_npot.compare_less.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.depth32f.size_npot.compare_less.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.depth32f.size_npot.compare_greater.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.depth32f.size_npot.compare_greater.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.depth32f.size_npot.compare_greater.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.rgba8.size_pot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.rgba8.size_pot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.rgba8.size_pot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.rgba8.size_npot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.rgba8.size_npot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.rgba8.size_npot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.rgba8ui.size_pot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.rgba8ui.size_pot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.rgba8ui.size_pot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.rgba8ui.size_npot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.rgba8ui.size_npot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.rgba8ui.size_npot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.rgba8i.size_pot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.rgba8i.size_pot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.rgba8i.size_pot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.rgba8i.size_npot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.rgba8i.size_npot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.rgba8i.size_npot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.depth32f.size_pot.compare_less.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.depth32f.size_pot.compare_less.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.depth32f.size_pot.compare_less.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.depth32f.size_pot.compare_greater.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.depth32f.size_pot.compare_greater.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.depth32f.size_pot.compare_greater.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.depth32f.size_npot.compare_less.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.depth32f.size_npot.compare_less.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.depth32f.size_npot.compare_less.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.depth32f.size_npot.compare_greater.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.depth32f.size_npot.compare_greater.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.depth32f.size_npot.compare_greater.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8.size_pot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8.size_pot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8.size_pot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8.size_npot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8.size_npot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8.size_npot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8.texture_swizzle.red_green_blue_alpha = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8.texture_swizzle.green_blue_alpha_zero = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8.texture_swizzle.blue_alpha_zero_one = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8.texture_swizzle.alpha_zero_one_red = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8.texture_swizzle.zero_one_red_green = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8.texture_swizzle.one_red_green_blue = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8.filter_mode.min_linear_mag_linear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8.filter_mode.min_nearest_mipmap_nearest_mag_linear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8.filter_mode.min_nearest_mipmap_linear_mag_linear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8.filter_mode.min_linear_mipmap_nearest_mag_linear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8.filter_mode.min_linear_mipmap_linear_mag_linear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8.base_level.level_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8.base_level.level_2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8.incomplete.mipmap_incomplete = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8ui.size_pot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8ui.size_pot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8ui.size_pot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8ui.size_npot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8ui.size_npot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8ui.size_npot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8ui.texture_swizzle.red_green_blue_alpha = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8ui.texture_swizzle.green_blue_alpha_zero = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8ui.texture_swizzle.blue_alpha_zero_one = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8ui.texture_swizzle.alpha_zero_one_red = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8ui.texture_swizzle.zero_one_red_green = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8ui.texture_swizzle.one_red_green_blue = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8ui.filter_mode.min_nearest_mipmap_nearest_mag_nearest = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8ui.base_level.level_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8ui.base_level.level_2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8i.size_pot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8i.size_pot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8i.size_pot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8i.size_npot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8i.size_npot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8i.size_npot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8i.texture_swizzle.red_green_blue_alpha = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8i.texture_swizzle.green_blue_alpha_zero = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8i.texture_swizzle.blue_alpha_zero_one = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8i.texture_swizzle.alpha_zero_one_red = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8i.texture_swizzle.zero_one_red_green = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8i.texture_swizzle.one_red_green_blue = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8i.filter_mode.min_nearest_mipmap_nearest_mag_nearest = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8i.base_level.level_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8i.base_level.level_2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.depth32f.size_pot.compare_less.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.depth32f.size_pot.compare_less.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.depth32f.size_pot.compare_less.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.depth32f.size_pot.compare_greater.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.depth32f.size_pot.compare_greater.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.depth32f.size_pot.compare_greater.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.depth32f.size_npot.compare_less.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.depth32f.size_npot.compare_less.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.depth32f.size_npot.compare_less.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.depth32f.size_npot.compare_greater.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.depth32f.size_npot.compare_greater.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.depth32f.size_npot.compare_greater.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.depth32f.filter_mode.min_linear_mag_linear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.depth32f.filter_mode.min_nearest_mipmap_nearest_mag_linear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.depth32f.filter_mode.min_nearest_mipmap_linear_mag_linear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.depth32f.filter_mode.min_linear_mipmap_nearest_mag_linear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.depth32f.filter_mode.min_linear_mipmap_linear_mag_linear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.depth32f.base_level.level_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.depth32f.base_level.level_2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8.size_pot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8.size_pot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8.size_pot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8.size_npot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8.size_npot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8.size_npot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8.texture_swizzle.red_green_blue_alpha = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8.texture_swizzle.green_blue_alpha_zero = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8.texture_swizzle.blue_alpha_zero_one = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8.texture_swizzle.alpha_zero_one_red = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8.texture_swizzle.zero_one_red_green = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8.texture_swizzle.one_red_green_blue = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8.filter_mode.min_linear_mag_linear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8.filter_mode.min_nearest_mipmap_nearest_mag_linear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8.filter_mode.min_nearest_mipmap_linear_mag_linear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8.filter_mode.min_linear_mipmap_nearest_mag_linear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8.filter_mode.min_linear_mipmap_linear_mag_linear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8.base_level.level_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8.base_level.level_2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8.incomplete.mipmap_incomplete = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8ui.size_pot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8ui.size_pot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8ui.size_pot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8ui.size_npot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8ui.size_npot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8ui.size_npot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8ui.texture_swizzle.red_green_blue_alpha = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8ui.texture_swizzle.green_blue_alpha_zero = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8ui.texture_swizzle.blue_alpha_zero_one = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8ui.texture_swizzle.alpha_zero_one_red = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8ui.texture_swizzle.zero_one_red_green = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8ui.texture_swizzle.one_red_green_blue = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8ui.filter_mode.min_nearest_mipmap_nearest_mag_nearest = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8ui.base_level.level_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8ui.base_level.level_2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8i.size_pot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8i.size_pot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8i.size_pot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8i.size_npot.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8i.size_npot.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8i.size_npot.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8i.texture_swizzle.red_green_blue_alpha = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8i.texture_swizzle.green_blue_alpha_zero = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8i.texture_swizzle.blue_alpha_zero_one = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8i.texture_swizzle.alpha_zero_one_red = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8i.texture_swizzle.zero_one_red_green = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8i.texture_swizzle.one_red_green_blue = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8i.filter_mode.min_nearest_mipmap_nearest_mag_nearest = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8i.base_level.level_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8i.base_level.level_2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.depth32f.size_pot.compare_less.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.depth32f.size_pot.compare_less.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.depth32f.size_pot.compare_less.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.depth32f.size_pot.compare_greater.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.depth32f.size_pot.compare_greater.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.depth32f.size_pot.compare_greater.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.depth32f.size_npot.compare_less.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.depth32f.size_npot.compare_less.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.depth32f.size_npot.compare_less.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.depth32f.size_npot.compare_greater.clamp_to_edge_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.depth32f.size_npot.compare_greater.repeat_mirrored_repeat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.depth32f.size_npot.compare_greater.mirrored_repeat_clamp_to_edge = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.depth32f.filter_mode.min_linear_mag_linear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.depth32f.filter_mode.min_nearest_mipmap_nearest_mag_linear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.depth32f.filter_mode.min_nearest_mipmap_linear_mag_linear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.depth32f.filter_mode.min_linear_mipmap_nearest_mag_linear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.depth32f.filter_mode.min_linear_mipmap_linear_mag_linear = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.depth32f.base_level.level_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.depth32f.base_level.level_2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.boolean.sample_mask_isenabled = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.boolean.sample_mask_getboolean = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.boolean.sample_mask_getinteger = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.boolean.sample_mask_getinteger64 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.boolean.sample_mask_getfloat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.integer.texture_binding_2d_multisample_getboolean = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.integer.texture_binding_2d_multisample_getinteger = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.integer.texture_binding_2d_multisample_getinteger64 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.integer.texture_binding_2d_multisample_getfloat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.integer.draw_indirect_buffer_binding_getboolean = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.integer.draw_indirect_buffer_binding_getinteger = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.integer.draw_indirect_buffer_binding_getinteger64 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.integer.draw_indirect_buffer_binding_getfloat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.integer.atomic_counter_buffer_binding_getboolean = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.integer.atomic_counter_buffer_binding_getinteger = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.integer.atomic_counter_buffer_binding_getinteger64 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.integer.atomic_counter_buffer_binding_getfloat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.integer.shader_storage_buffer_binding_getboolean = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.integer.shader_storage_buffer_binding_getinteger = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.integer.shader_storage_buffer_binding_getinteger64 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.integer.shader_storage_buffer_binding_getfloat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.integer.dispatch_indirect_buffer_binding_getboolean = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.integer.dispatch_indirect_buffer_binding_getinteger = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.integer.dispatch_indirect_buffer_binding_getinteger64 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.integer.dispatch_indirect_buffer_binding_getfloat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.integer.program_pipeline_binding_getboolean = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.integer.program_pipeline_binding_getinteger = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.integer.program_pipeline_binding_getinteger64 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.integer.program_pipeline_binding_getfloat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.indexed.sample_mask_value_getbooleani_v = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.indexed.sample_mask_value_getintegeri_v = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.indexed.sample_mask_value_getinteger64i_v = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.indexed.atomic_counter_buffer_binding_getbooleani_v = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.indexed.atomic_counter_buffer_binding_getintegeri_v = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.indexed.atomic_counter_buffer_binding_getinteger64i_v = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.indexed.atomic_counter_buffer_start_getbooleani_v = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.indexed.atomic_counter_buffer_start_getintegeri_v = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.indexed.atomic_counter_buffer_start_getinteger64i_v = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.indexed.atomic_counter_buffer_size_getbooleani_v = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.indexed.atomic_counter_buffer_size_getintegeri_v = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.indexed.atomic_counter_buffer_size_getinteger64i_v = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.indexed.shader_storage_buffer_binding_getbooleani_v = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.indexed.shader_storage_buffer_binding_getintegeri_v = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.indexed.shader_storage_buffer_binding_getinteger64i_v = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.indexed.shader_storage_buffer_start_getbooleani_v = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.indexed.shader_storage_buffer_start_getintegeri_v = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.indexed.shader_storage_buffer_start_getinteger64i_v = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.indexed.shader_storage_buffer_size_getbooleani_v = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.indexed.shader_storage_buffer_size_getintegeri_v = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.indexed.shader_storage_buffer_size_getinteger64i_v = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.indexed.image_binding_name_getbooleani_v = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.indexed.image_binding_name_getintegeri_v = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.indexed.image_binding_name_getinteger64i_v = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.indexed.image_binding_level_getbooleani_v = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.indexed.image_binding_level_getintegeri_v = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.indexed.image_binding_level_getinteger64i_v = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.indexed.image_binding_layered_getbooleani_v = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.indexed.image_binding_layered_getintegeri_v = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.indexed.image_binding_layered_getinteger64i_v = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.indexed.image_binding_layer_getbooleani_v = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.indexed.image_binding_layer_getintegeri_v = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.indexed.image_binding_layer_getinteger64i_v = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.indexed.image_binding_access_getbooleani_v = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.indexed.image_binding_access_getintegeri_v = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.indexed.image_binding_access_getinteger64i_v = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.indexed.image_binding_format_getbooleani_v = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.indexed.image_binding_format_getintegeri_v = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.indexed.image_binding_format_getinteger64i_v = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture.texture_2d.depth_stencil_mode_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture.texture_2d.depth_stencil_mode_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture.texture_3d.depth_stencil_mode_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture.texture_3d.depth_stencil_mode_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture.texture_2d_array.depth_stencil_mode_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture.texture_2d_array.depth_stencil_mode_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture.texture_cube_map.depth_stencil_mode_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture.texture_cube_map.depth_stencil_mode_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.is_texture = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_swizzle_r_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_swizzle_r_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_swizzle_g_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_swizzle_g_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_swizzle_b_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_swizzle_b_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_swizzle_a_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_swizzle_a_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_base_level_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_base_level_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_max_level_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_max_level_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_immutable_levels_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_immutable_levels_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_immutable_format_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.texture_immutable_format_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.depth_stencil_mode_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture.texture_2d_multisample.depth_stencil_mode_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d.samples_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d.samples_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d.fixed_sample_locations_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d.fixed_sample_locations_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d.width_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d.width_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d.height_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d.height_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d.depth_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d.depth_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d.internal_format_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d.internal_format_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d.red_size_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d.red_size_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d.green_size_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d.green_size_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d.blue_size_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d.blue_size_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d.alpha_size_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d.alpha_size_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d.depth_size_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d.depth_size_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d.stencil_size_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d.stencil_size_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d.shared_size_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d.shared_size_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d.red_type_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d.red_type_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d.green_type_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d.green_type_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d.blue_type_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d.blue_type_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d.alpha_type_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d.alpha_type_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d.depth_type_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d.depth_type_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d.compressed_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d.compressed_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_3d.samples_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_3d.samples_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_3d.fixed_sample_locations_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_3d.fixed_sample_locations_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_3d.width_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_3d.width_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_3d.height_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_3d.height_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_3d.depth_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_3d.depth_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_3d.internal_format_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_3d.internal_format_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_3d.red_size_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_3d.red_size_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_3d.green_size_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_3d.green_size_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_3d.blue_size_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_3d.blue_size_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_3d.alpha_size_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_3d.alpha_size_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_3d.depth_size_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_3d.depth_size_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_3d.stencil_size_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_3d.stencil_size_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_3d.shared_size_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_3d.shared_size_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_3d.red_type_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_3d.red_type_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_3d.green_type_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_3d.green_type_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_3d.blue_type_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_3d.blue_type_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_3d.alpha_type_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_3d.alpha_type_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_3d.depth_type_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_3d.depth_type_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_3d.compressed_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_3d.compressed_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_array.samples_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_array.samples_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_array.fixed_sample_locations_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_array.fixed_sample_locations_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_array.width_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_array.width_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_array.height_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_array.height_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_array.depth_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_array.depth_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_array.internal_format_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_array.internal_format_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_array.red_size_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_array.red_size_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_array.green_size_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_array.green_size_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_array.blue_size_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_array.blue_size_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_array.alpha_size_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_array.alpha_size_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_array.depth_size_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_array.depth_size_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_array.stencil_size_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_array.stencil_size_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_array.shared_size_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_array.shared_size_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_array.red_type_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_array.red_type_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_array.green_type_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_array.green_type_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_array.blue_type_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_array.blue_type_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_array.alpha_type_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_array.alpha_type_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_array.depth_type_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_array.depth_type_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_array.compressed_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_array.compressed_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_cube_map.samples_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_cube_map.samples_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_cube_map.fixed_sample_locations_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_cube_map.fixed_sample_locations_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_cube_map.width_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_cube_map.width_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_cube_map.height_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_cube_map.height_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_cube_map.depth_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_cube_map.depth_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_cube_map.internal_format_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_cube_map.internal_format_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_cube_map.red_size_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_cube_map.red_size_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_cube_map.green_size_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_cube_map.green_size_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_cube_map.blue_size_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_cube_map.blue_size_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_cube_map.alpha_size_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_cube_map.alpha_size_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_cube_map.depth_size_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_cube_map.depth_size_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_cube_map.stencil_size_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_cube_map.stencil_size_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_cube_map.shared_size_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_cube_map.shared_size_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_cube_map.red_type_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_cube_map.red_type_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_cube_map.green_type_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_cube_map.green_type_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_cube_map.blue_type_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_cube_map.blue_type_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_cube_map.alpha_type_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_cube_map.alpha_type_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_cube_map.depth_type_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_cube_map.depth_type_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_cube_map.compressed_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_cube_map.compressed_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_multisample.samples_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_multisample.samples_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_multisample.fixed_sample_locations_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_multisample.fixed_sample_locations_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_multisample.width_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_multisample.width_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_multisample.height_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_multisample.height_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_multisample.depth_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_multisample.depth_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_multisample.internal_format_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_multisample.internal_format_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_multisample.red_size_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_multisample.red_size_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_multisample.green_size_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_multisample.green_size_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_multisample.blue_size_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_multisample.blue_size_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_multisample.alpha_size_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_multisample.alpha_size_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_multisample.depth_size_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_multisample.depth_size_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_multisample.stencil_size_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_multisample.stencil_size_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_multisample.shared_size_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_multisample.shared_size_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_multisample.red_type_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_multisample.red_type_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_multisample.green_type_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_multisample.green_type_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_multisample.blue_type_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_multisample.blue_type_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_multisample.alpha_type_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_multisample.alpha_type_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_multisample.depth_type_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_multisample.depth_type_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_multisample.compressed_integer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.texture_level.texture_2d_multisample.compressed_float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.shader.sampler_type = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.renderbuffer.rgb10_a2ui_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.renderbuffer.r8i_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.renderbuffer.r8ui_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.renderbuffer.r16i_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.renderbuffer.r16ui_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.renderbuffer.r32i_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.renderbuffer.r32ui_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.renderbuffer.rg8i_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.renderbuffer.rg8ui_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.renderbuffer.rg16i_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.renderbuffer.rg16ui_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.renderbuffer.rg32i_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.renderbuffer.rg32ui_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.renderbuffer.rgba8i_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.renderbuffer.rgba8ui_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.renderbuffer.rgba16i_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.renderbuffer.rgba16ui_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.renderbuffer.rgba32i_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.renderbuffer.rgba32ui_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.r8_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.rg8_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.rgb8_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.rgb565_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.rgba4_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.rgb5_a1_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.rgba8_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.rgb10_a2_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.rgb10_a2ui_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.srgb8_alpha8_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.r8i_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.r8ui_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.r16i_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.r16ui_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.r32i_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.r32ui_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.rg8i_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.rg8ui_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.rg16i_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.rg16ui_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.rg32i_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.rg32ui_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.rgba8i_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.rgba8ui_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.rgba16i_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.rgba16ui_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.rgba32i_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.rgba32ui_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.depth_component16_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.depth_component24_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.depth_component32f_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.depth24_stencil8_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.depth32f_stencil8_samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.partial_query.num_sample_counts = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.internal_format.partial_query.samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.vertex_attribute_binding.vertex_attrib.vertex_attrib_binding = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.vertex_attribute_binding.vertex_attrib.vertex_attrib_relative_offset = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.vertex_attribute_binding.vertex_attrib.vertex_attrib_binding_getvertexattribfv = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.vertex_attribute_binding.vertex_attrib.vertex_attrib_relative_offset_getvertexattribfv = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.vertex_attribute_binding.vertex_attrib.vertex_attrib_binding_getvertexattribiiv = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.vertex_attribute_binding.vertex_attrib.vertex_attrib_relative_offset_getvertexattribiiv = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.vertex_attribute_binding.vertex_attrib.vertex_attrib_binding_getvertexattribiuiv = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.vertex_attribute_binding.vertex_attrib.vertex_attrib_relative_offset_getvertexattribiuiv = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.vertex_attribute_binding.indexed.vertex_binding_divisor_getintegeri = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.vertex_attribute_binding.indexed.vertex_binding_offset_getintegeri = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.vertex_attribute_binding.indexed.vertex_binding_stride_getintegeri = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.vertex_attribute_binding.indexed.vertex_binding_buffer_getintegeri = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.vertex_attribute_binding.indexed.vertex_binding_divisor_getintegeri64 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.vertex_attribute_binding.indexed.vertex_binding_offset_getintegeri64 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.vertex_attribute_binding.indexed.vertex_binding_stride_getintegeri64 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.vertex_attribute_binding.indexed.vertex_binding_buffer_getintegeri64 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.vertex_attribute_binding.indexed.vertex_binding_divisor_getboolean = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.vertex_attribute_binding.indexed.vertex_binding_offset_getboolean = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.vertex_attribute_binding.indexed.vertex_binding_stride_getboolean = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.vertex_attribute_binding.indexed.vertex_binding_buffer_getboolean = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.vertex_attribute_binding.indexed.vertex_binding_divisor_mixed = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.vertex_attribute_binding.indexed.vertex_binding_offset_mixed = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.vertex_attribute_binding.indexed.vertex_binding_stride_mixed = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.vertex_attribute_binding.indexed.vertex_binding_buffer_mixed = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.framebuffer_default.framebuffer_default_width_get_framebuffer_parameteriv = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.framebuffer_default.framebuffer_default_height_get_framebuffer_parameteriv = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.framebuffer_default.framebuffer_default_samples_get_framebuffer_parameteriv = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.framebuffer_default.framebuffer_default_fixed_sample_locations_get_framebuffer_parameteriv = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.program.program_separable_get_programiv = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.program.compute_work_group_size_get_programiv = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.program.active_atomic_counter_buffers_get_programiv = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.program_pipeline.active_program_get_program_pipelineiv = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.program_pipeline.vertex_shader_get_program_pipelineiv = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.program_pipeline.fragment_shader_get_program_pipelineiv = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.program_pipeline.compute_shader_get_program_pipelineiv = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.program_pipeline.validate_status_get_program_pipelineiv = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.state_query.program_pipeline.info_log = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.in_invocation.image_write_read = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.in_invocation.image_read_write = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.in_invocation.image_overwrite = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.in_invocation.image_alias_write = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.in_invocation.image_alias_overwrite = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.in_invocation.ssbo_write_read = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.in_invocation.ssbo_read_write = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.in_invocation.ssbo_overwrite = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.in_invocation.ssbo_alias_write = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.in_invocation.ssbo_alias_overwrite = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.in_invocation.ssbo_atomic_write_read = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.in_invocation.ssbo_atomic_read_write = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.in_invocation.ssbo_atomic_overwrite = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.in_invocation.ssbo_atomic_alias_write = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.in_invocation.ssbo_atomic_alias_overwrite = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_invocation.image_write_read = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_invocation.image_read_write = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_invocation.image_overwrite = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_invocation.image_alias_write = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_invocation.image_alias_overwrite = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_invocation.ssbo_write_read = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_invocation.ssbo_read_write = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_invocation.ssbo_overwrite = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_invocation.ssbo_alias_write = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_invocation.ssbo_alias_overwrite = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_invocation.ssbo_atomic_write_read = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_invocation.ssbo_atomic_read_write = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_invocation.ssbo_atomic_overwrite = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_invocation.ssbo_atomic_alias_write = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_invocation.ssbo_atomic_alias_overwrite = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.with_memory_barrier.image_write_read = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.with_memory_barrier.image_read_write = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.with_memory_barrier.image_overwrite = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.with_memory_barrier.image_multiple_write_read = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.with_memory_barrier.image_multiple_interleaved_write_read = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.with_memory_barrier.image_multiple_unrelated_write_read_ordered = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.with_memory_barrier.image_multiple_unrelated_write_read_non_ordered = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.with_memory_barrier.ssbo_write_read = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.with_memory_barrier.ssbo_read_write = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.with_memory_barrier.ssbo_overwrite = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.with_memory_barrier.ssbo_multiple_write_read = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.with_memory_barrier.ssbo_multiple_interleaved_write_read = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.with_memory_barrier.ssbo_multiple_unrelated_write_read_ordered = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.with_memory_barrier.ssbo_multiple_unrelated_write_read_non_ordered = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.with_memory_barrier.ssbo_atomic_write_read = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.with_memory_barrier.ssbo_atomic_read_write = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.with_memory_barrier.ssbo_atomic_overwrite = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.with_memory_barrier.ssbo_atomic_multiple_write_read = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.with_memory_barrier.ssbo_atomic_multiple_interleaved_write_read = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.with_memory_barrier.ssbo_atomic_multiple_unrelated_write_read_ordered = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.with_memory_barrier.ssbo_atomic_multiple_unrelated_write_read_non_ordered = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.without_memory_barrier.ssbo_atomic_dispatch_2_calls_1k_invocations = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.without_memory_barrier.ssbo_atomic_dispatch_5_calls_1k_invocations = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.without_memory_barrier.ssbo_atomic_dispatch_100_calls_1k_invocations = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.without_memory_barrier.ssbo_atomic_dispatch_2_calls_4k_invocations = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.without_memory_barrier.ssbo_atomic_dispatch_5_calls_4k_invocations = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.without_memory_barrier.ssbo_atomic_dispatch_100_calls_4k_invocations = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.without_memory_barrier.ssbo_atomic_dispatch_2_calls_32k_invocations = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.without_memory_barrier.ssbo_atomic_dispatch_5_calls_32k_invocations = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.without_memory_barrier.ssbo_atomic_dispatch_100_calls_32k_invocations = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.without_memory_barrier.atomic_counter_dispatch_2_calls_32_invocations = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.without_memory_barrier.atomic_counter_dispatch_5_calls_32_invocations = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.without_memory_barrier.atomic_counter_dispatch_100_calls_32_invocations = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.without_memory_barrier.atomic_counter_dispatch_2_calls_128_invocations = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.without_memory_barrier.atomic_counter_dispatch_5_calls_128_invocations = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.without_memory_barrier.atomic_counter_dispatch_100_calls_128_invocations = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.without_memory_barrier.atomic_counter_dispatch_2_calls_1k_invocations = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.without_memory_barrier.atomic_counter_dispatch_5_calls_1k_invocations = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.without_memory_barrier.atomic_counter_dispatch_100_calls_1k_invocations = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.without_memory_barrier.ssbo_atomic_counter_mixed_dispatch_2_calls_32_invocations = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.without_memory_barrier.ssbo_atomic_counter_mixed_dispatch_5_calls_32_invocations = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.without_memory_barrier.ssbo_atomic_counter_mixed_dispatch_100_calls_32_invocations = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.without_memory_barrier.ssbo_atomic_counter_mixed_dispatch_2_calls_128_invocations = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.without_memory_barrier.ssbo_atomic_counter_mixed_dispatch_5_calls_128_invocations = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.without_memory_barrier.ssbo_atomic_counter_mixed_dispatch_100_calls_128_invocations = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.without_memory_barrier.ssbo_atomic_counter_mixed_dispatch_2_calls_1k_invocations = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.without_memory_barrier.ssbo_atomic_counter_mixed_dispatch_5_calls_1k_invocations = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.synchronization.inter_call.without_memory_barrier.ssbo_atomic_counter_mixed_dispatch_100_calls_1k_invocations = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.geometry_shading.query.geometry_linked_vertices_out = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.geometry_shading.query.geometry_linked_input_type = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.geometry_shading.query.geometry_linked_output_type = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.geometry_shading.query.geometry_shader_invocations = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.vertex_attribute_binding.usage.single_binding.elements_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.vertex_attribute_binding.usage.single_binding.elements_2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.vertex_attribute_binding.usage.single_binding.elements_2_share_elements = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.vertex_attribute_binding.usage.single_binding.offset_elements_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.vertex_attribute_binding.usage.single_binding.offset_elements_2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.vertex_attribute_binding.usage.single_binding.offset_elements_2_share_elements = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.vertex_attribute_binding.usage.single_binding.unaligned_offset_elements_1_aligned_elements = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.vertex_attribute_binding.usage.multiple_bindings.basic = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.vertex_attribute_binding.usage.multiple_bindings.zero_stride = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.vertex_attribute_binding.usage.multiple_bindings.instanced = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.vertex_attribute_binding.usage.multiple_bindings.aliasing_buffer_zero_stride = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.vertex_attribute_binding.usage.multiple_bindings.aliasing_buffer_instanced = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.vertex_attribute_binding.usage.mixed_usage.mixed_attribs_basic = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.vertex_attribute_binding.usage.mixed_usage.mixed_attribs_instanced_binding = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.vertex_attribute_binding.usage.mixed_usage.mixed_attribs_instanced_attrib = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.vertex_attribute_binding.usage.mixed_usage.mixed_api_change_buffer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.vertex_attribute_binding.usage.mixed_usage.mixed_api_change_buffer_offset = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.vertex_attribute_binding.usage.mixed_usage.mixed_api_change_buffer_stride = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.vertex_attribute_binding.usage.mixed_usage.mixed_api_change_binding_point = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.vertex_attribute_binding.negative.vertex_attrib_format_large_offset = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.vertex_attribute_binding.negative.bind_vertex_buffer_large_stride = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.vertex_attribute_binding.negative.bind_vertex_buffer_negative_stride = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.vertex_attribute_binding.negative.bind_vertex_buffer_negative_offset = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.vertex_attribute_binding.negative.vertex_attrib_binding_invalid_attr = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.vertex_attribute_binding.negative.vertex_attrib_binding_invalid_binding = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.float_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.float_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.float_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.vec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.vec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.vec2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.vec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.vec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.vec3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.vec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.vec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.vec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat2_row_major_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat2_row_major_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat2_row_major_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat2x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat2x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat2x3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat2x3_row_major_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat2x3_row_major_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat2x3_row_major_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat2x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat2x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat2x4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat2x4_row_major_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat2x4_row_major_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat2x4_row_major_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat3x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat3x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat3x2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat3x2_row_major_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat3x2_row_major_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat3x2_row_major_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat3_row_major_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat3_row_major_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat3_row_major_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat3x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat3x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat3x4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat3x4_row_major_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat3x4_row_major_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat3x4_row_major_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat4x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat4x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat4x2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat4x2_row_major_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat4x2_row_major_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat4x2_row_major_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat4x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat4x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat4x3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat4x3_row_major_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat4x3_row_major_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat4x3_row_major_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat4_row_major_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat4_row_major_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.mat4_row_major_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.int_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.int_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.int_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.ivec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.ivec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.ivec2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.ivec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.ivec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.ivec3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.ivec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.ivec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.ivec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.uint_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.uint_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.uint_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.uvec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.uvec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.uvec2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.uvec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.uvec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.uvec3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.uvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.uvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.uvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.bool_api_float_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.bool_api_float_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.bool_api_float_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.bool_api_int_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.bool_api_int_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.bool_api_int_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.bool_api_uint_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.bool_api_uint_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.bool_api_uint_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.bvec2_api_float_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.bvec2_api_float_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.bvec2_api_float_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.bvec2_api_int_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.bvec2_api_int_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.bvec2_api_int_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.bvec2_api_uint_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.bvec2_api_uint_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.bvec2_api_uint_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.bvec3_api_float_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.bvec3_api_float_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.bvec3_api_float_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.bvec3_api_int_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.bvec3_api_int_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.bvec3_api_int_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.bvec3_api_uint_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.bvec3_api_uint_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.bvec3_api_uint_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.bvec4_api_float_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.bvec4_api_float_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.bvec4_api_float_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.bvec4_api_int_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.bvec4_api_int_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.bvec4_api_int_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.bvec4_api_uint_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.bvec4_api_uint_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.bvec4_api_uint_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.sampler2D_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.sampler2D_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.sampler2D_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.samplerCube_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.samplerCube_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic.samplerCube_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array.float_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array.float_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array.float_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array.vec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array.vec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array.vec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array.mat4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array.mat4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array.mat4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array.mat4_row_major_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array.mat4_row_major_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array.mat4_row_major_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array.int_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array.int_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array.int_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array.ivec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array.ivec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array.ivec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array.uint_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array.uint_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array.uint_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array.uvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array.uvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array.uvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array.bool_api_float_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array.bool_api_float_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array.bool_api_float_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array.bool_api_int_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array.bool_api_int_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array.bool_api_int_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array.bool_api_uint_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array.bool_api_uint_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array.bool_api_uint_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array.bvec4_api_float_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array.bvec4_api_float_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array.bvec4_api_float_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array.bvec4_api_int_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array.bvec4_api_int_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array.bvec4_api_int_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array.bvec4_api_uint_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array.bvec4_api_uint_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array.bvec4_api_uint_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array.sampler2D_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array.sampler2D_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array.sampler2D_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array_first_elem_without_brackets.float_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array_first_elem_without_brackets.float_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array_first_elem_without_brackets.float_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array_first_elem_without_brackets.vec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array_first_elem_without_brackets.vec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array_first_elem_without_brackets.vec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array_first_elem_without_brackets.mat4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array_first_elem_without_brackets.mat4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array_first_elem_without_brackets.mat4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array_first_elem_without_brackets.mat4_row_major_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array_first_elem_without_brackets.mat4_row_major_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array_first_elem_without_brackets.mat4_row_major_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array_first_elem_without_brackets.int_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array_first_elem_without_brackets.int_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array_first_elem_without_brackets.int_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array_first_elem_without_brackets.ivec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array_first_elem_without_brackets.ivec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array_first_elem_without_brackets.ivec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array_first_elem_without_brackets.uint_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array_first_elem_without_brackets.uint_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array_first_elem_without_brackets.uint_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array_first_elem_without_brackets.uvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array_first_elem_without_brackets.uvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array_first_elem_without_brackets.uvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array_first_elem_without_brackets.bool_api_float_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array_first_elem_without_brackets.bool_api_float_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array_first_elem_without_brackets.bool_api_float_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array_first_elem_without_brackets.bool_api_int_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array_first_elem_without_brackets.bool_api_int_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array_first_elem_without_brackets.bool_api_int_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array_first_elem_without_brackets.bool_api_uint_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array_first_elem_without_brackets.bool_api_uint_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array_first_elem_without_brackets.bool_api_uint_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array_first_elem_without_brackets.bvec4_api_float_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array_first_elem_without_brackets.bvec4_api_float_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array_first_elem_without_brackets.bvec4_api_float_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array_first_elem_without_brackets.bvec4_api_int_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array_first_elem_without_brackets.bvec4_api_int_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array_first_elem_without_brackets.bvec4_api_int_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array_first_elem_without_brackets.bvec4_api_uint_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array_first_elem_without_brackets.bvec4_api_uint_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array_first_elem_without_brackets.bvec4_api_uint_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array_first_elem_without_brackets.sampler2D_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array_first_elem_without_brackets.sampler2D_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_array_first_elem_without_brackets.sampler2D_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_struct.float_vec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_struct.float_vec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_struct.float_vec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_struct.mat4_mat2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_struct.mat4_mat2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_struct.mat4_mat2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_struct.int_ivec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_struct.int_ivec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_struct.int_ivec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_struct.uint_uvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_struct.uint_uvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_struct.uint_uvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_struct.bool_bvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_struct.bool_bvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_struct.bool_bvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_struct.sampler2D_samplerCube_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_struct.sampler2D_samplerCube_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.basic_struct.sampler2D_samplerCube_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.struct_in_array.float_vec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.struct_in_array.float_vec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.struct_in_array.float_vec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.struct_in_array.mat4_mat2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.struct_in_array.mat4_mat2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.struct_in_array.mat4_mat2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.struct_in_array.int_ivec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.struct_in_array.int_ivec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.struct_in_array.int_ivec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.struct_in_array.uint_uvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.struct_in_array.uint_uvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.struct_in_array.uint_uvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.struct_in_array.bool_bvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.struct_in_array.bool_bvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.struct_in_array.bool_bvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.struct_in_array.sampler2D_samplerCube_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.struct_in_array.sampler2D_samplerCube_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.struct_in_array.sampler2D_samplerCube_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.array_in_struct.float_vec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.array_in_struct.float_vec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.array_in_struct.float_vec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.array_in_struct.mat4_mat2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.array_in_struct.mat4_mat2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.array_in_struct.mat4_mat2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.array_in_struct.int_ivec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.array_in_struct.int_ivec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.array_in_struct.int_ivec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.array_in_struct.uint_uvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.array_in_struct.uint_uvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.array_in_struct.uint_uvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.array_in_struct.bool_bvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.array_in_struct.bool_bvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.array_in_struct.bool_bvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.array_in_struct.sampler2D_samplerCube_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.array_in_struct.sampler2D_samplerCube_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.array_in_struct.sampler2D_samplerCube_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.nested_structs_arrays.float_vec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.nested_structs_arrays.float_vec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.nested_structs_arrays.float_vec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.nested_structs_arrays.mat4_mat2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.nested_structs_arrays.mat4_mat2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.nested_structs_arrays.mat4_mat2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.nested_structs_arrays.int_ivec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.nested_structs_arrays.int_ivec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.nested_structs_arrays.int_ivec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.nested_structs_arrays.uint_uvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.nested_structs_arrays.uint_uvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.nested_structs_arrays.uint_uvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.nested_structs_arrays.bool_bvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.nested_structs_arrays.bool_bvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.nested_structs_arrays.bool_bvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.nested_structs_arrays.sampler2D_samplerCube_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.nested_structs_arrays.sampler2D_samplerCube_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.nested_structs_arrays.sampler2D_samplerCube_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.multiple_basic.vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.multiple_basic.fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.multiple_basic.both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.multiple_basic_array.vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.multiple_basic_array.fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.multiple_basic_array.both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.multiple_nested_structs_arrays.vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.multiple_nested_structs_arrays.fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.get_uniform.multiple_nested_structs_arrays.both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.float_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.float_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.float_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.vec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.vec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.vec2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.vec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.vec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.vec3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.vec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.vec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.vec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat2_row_major_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat2_row_major_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat2_row_major_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat2x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat2x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat2x3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat2x3_row_major_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat2x3_row_major_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat2x3_row_major_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat2x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat2x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat2x4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat2x4_row_major_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat2x4_row_major_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat2x4_row_major_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat3x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat3x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat3x2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat3x2_row_major_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat3x2_row_major_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat3x2_row_major_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat3_row_major_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat3_row_major_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat3_row_major_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat3x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat3x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat3x4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat3x4_row_major_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat3x4_row_major_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat3x4_row_major_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat4x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat4x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat4x2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat4x2_row_major_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat4x2_row_major_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat4x2_row_major_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat4x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat4x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat4x3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat4x3_row_major_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat4x3_row_major_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat4x3_row_major_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat4_row_major_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat4_row_major_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.mat4_row_major_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.int_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.int_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.int_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.ivec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.ivec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.ivec2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.ivec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.ivec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.ivec3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.ivec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.ivec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.ivec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.uint_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.uint_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.uint_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.uvec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.uvec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.uvec2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.uvec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.uvec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.uvec3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.uvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.uvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.uvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.bool_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.bool_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.bool_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.bvec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.bvec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.bvec2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.bvec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.bvec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.bvec3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.bvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.bvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.bvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.sampler2D_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.sampler2D_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.sampler2D_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.samplerCube_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.samplerCube_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic.samplerCube_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_array.float_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_array.float_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_array.float_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_array.vec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_array.vec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_array.vec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_array.mat4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_array.mat4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_array.mat4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_array.mat4_row_major_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_array.mat4_row_major_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_array.mat4_row_major_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_array.int_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_array.int_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_array.int_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_array.ivec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_array.ivec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_array.ivec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_array.uint_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_array.uint_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_array.uint_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_array.uvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_array.uvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_array.uvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_array.bool_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_array.bool_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_array.bool_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_array.bvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_array.bvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_array.bvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_array.sampler2D_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_array.sampler2D_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_array.sampler2D_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_struct.float_vec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_struct.float_vec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_struct.float_vec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_struct.mat4_mat2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_struct.mat4_mat2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_struct.mat4_mat2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_struct.int_ivec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_struct.int_ivec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_struct.int_ivec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_struct.uint_uvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_struct.uint_uvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_struct.uint_uvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_struct.bool_bvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_struct.bool_bvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_struct.bool_bvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_struct.sampler2D_samplerCube_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_struct.sampler2D_samplerCube_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.basic_struct.sampler2D_samplerCube_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.struct_in_array.float_vec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.struct_in_array.float_vec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.struct_in_array.float_vec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.struct_in_array.mat4_mat2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.struct_in_array.mat4_mat2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.struct_in_array.mat4_mat2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.struct_in_array.int_ivec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.struct_in_array.int_ivec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.struct_in_array.int_ivec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.struct_in_array.uint_uvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.struct_in_array.uint_uvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.struct_in_array.uint_uvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.struct_in_array.bool_bvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.struct_in_array.bool_bvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.struct_in_array.bool_bvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.struct_in_array.sampler2D_samplerCube_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.struct_in_array.sampler2D_samplerCube_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.struct_in_array.sampler2D_samplerCube_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.array_in_struct.float_vec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.array_in_struct.float_vec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.array_in_struct.float_vec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.array_in_struct.mat4_mat2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.array_in_struct.mat4_mat2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.array_in_struct.mat4_mat2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.array_in_struct.int_ivec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.array_in_struct.int_ivec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.array_in_struct.int_ivec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.array_in_struct.uint_uvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.array_in_struct.uint_uvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.array_in_struct.uint_uvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.array_in_struct.bool_bvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.array_in_struct.bool_bvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.array_in_struct.bool_bvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.array_in_struct.sampler2D_samplerCube_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.array_in_struct.sampler2D_samplerCube_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.array_in_struct.sampler2D_samplerCube_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.nested_structs_arrays.float_vec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.nested_structs_arrays.float_vec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.nested_structs_arrays.float_vec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.nested_structs_arrays.mat4_mat2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.nested_structs_arrays.mat4_mat2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.nested_structs_arrays.mat4_mat2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.nested_structs_arrays.int_ivec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.nested_structs_arrays.int_ivec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.nested_structs_arrays.int_ivec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.nested_structs_arrays.uint_uvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.nested_structs_arrays.uint_uvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.nested_structs_arrays.uint_uvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.nested_structs_arrays.bool_bvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.nested_structs_arrays.bool_bvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.nested_structs_arrays.bool_bvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.nested_structs_arrays.sampler2D_samplerCube_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.nested_structs_arrays.sampler2D_samplerCube_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.nested_structs_arrays.sampler2D_samplerCube_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.multiple_basic.vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.multiple_basic.fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.multiple_basic.both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.multiple_basic_array.vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.multiple_basic_array.fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.multiple_basic_array.both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.multiple_nested_structs_arrays.vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.multiple_nested_structs_arrays.fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_pointer.render.multiple_nested_structs_arrays.both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.float_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.float_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.float_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.vec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.vec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.vec2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.vec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.vec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.vec3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.vec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.vec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.vec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.int_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.int_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.int_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.ivec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.ivec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.ivec2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.ivec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.ivec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.ivec3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.ivec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.ivec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.ivec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.uint_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.uint_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.uint_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.uvec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.uvec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.uvec2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.uvec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.uvec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.uvec3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.uvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.uvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.uvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.bool_api_float_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.bool_api_float_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.bool_api_float_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.bool_api_int_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.bool_api_int_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.bool_api_int_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.bool_api_uint_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.bool_api_uint_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.bool_api_uint_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.bvec2_api_float_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.bvec2_api_float_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.bvec2_api_float_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.bvec2_api_int_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.bvec2_api_int_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.bvec2_api_int_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.bvec2_api_uint_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.bvec2_api_uint_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.bvec2_api_uint_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.bvec3_api_float_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.bvec3_api_float_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.bvec3_api_float_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.bvec3_api_int_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.bvec3_api_int_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.bvec3_api_int_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.bvec3_api_uint_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.bvec3_api_uint_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.bvec3_api_uint_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.bvec4_api_float_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.bvec4_api_float_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.bvec4_api_float_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.bvec4_api_int_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.bvec4_api_int_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.bvec4_api_int_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.bvec4_api_uint_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.bvec4_api_uint_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.bvec4_api_uint_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.sampler2D_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.sampler2D_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.sampler2D_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.samplerCube_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.samplerCube_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic.samplerCube_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array.float_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array.float_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array.float_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array.vec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array.vec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array.vec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array.int_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array.int_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array.int_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array.ivec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array.ivec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array.ivec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array.uint_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array.uint_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array.uint_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array.uvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array.uvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array.uvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array.bool_api_float_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array.bool_api_float_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array.bool_api_float_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array.bool_api_int_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array.bool_api_int_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array.bool_api_int_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array.bool_api_uint_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array.bool_api_uint_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array.bool_api_uint_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array.bvec4_api_float_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array.bvec4_api_float_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array.bvec4_api_float_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array.bvec4_api_int_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array.bvec4_api_int_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array.bvec4_api_int_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array.bvec4_api_uint_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array.bvec4_api_uint_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array.bvec4_api_uint_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array.sampler2D_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array.sampler2D_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array.sampler2D_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array_first_elem_without_brackets.float_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array_first_elem_without_brackets.float_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array_first_elem_without_brackets.float_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array_first_elem_without_brackets.vec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array_first_elem_without_brackets.vec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array_first_elem_without_brackets.vec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array_first_elem_without_brackets.int_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array_first_elem_without_brackets.int_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array_first_elem_without_brackets.int_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array_first_elem_without_brackets.ivec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array_first_elem_without_brackets.ivec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array_first_elem_without_brackets.ivec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array_first_elem_without_brackets.uint_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array_first_elem_without_brackets.uint_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array_first_elem_without_brackets.uint_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array_first_elem_without_brackets.uvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array_first_elem_without_brackets.uvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array_first_elem_without_brackets.uvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array_first_elem_without_brackets.bool_api_float_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array_first_elem_without_brackets.bool_api_float_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array_first_elem_without_brackets.bool_api_float_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array_first_elem_without_brackets.bool_api_int_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array_first_elem_without_brackets.bool_api_int_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array_first_elem_without_brackets.bool_api_int_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array_first_elem_without_brackets.bool_api_uint_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array_first_elem_without_brackets.bool_api_uint_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array_first_elem_without_brackets.bool_api_uint_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array_first_elem_without_brackets.bvec4_api_float_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array_first_elem_without_brackets.bvec4_api_float_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array_first_elem_without_brackets.bvec4_api_float_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array_first_elem_without_brackets.bvec4_api_int_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array_first_elem_without_brackets.bvec4_api_int_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array_first_elem_without_brackets.bvec4_api_int_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array_first_elem_without_brackets.bvec4_api_uint_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array_first_elem_without_brackets.bvec4_api_uint_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array_first_elem_without_brackets.bvec4_api_uint_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array_first_elem_without_brackets.sampler2D_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array_first_elem_without_brackets.sampler2D_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_array_first_elem_without_brackets.sampler2D_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_struct.float_vec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_struct.float_vec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_struct.float_vec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_struct.int_ivec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_struct.int_ivec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_struct.int_ivec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_struct.uint_uvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_struct.uint_uvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_struct.uint_uvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_struct.bool_bvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_struct.bool_bvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_struct.bool_bvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_struct.sampler2D_samplerCube_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_struct.sampler2D_samplerCube_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.basic_struct.sampler2D_samplerCube_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.struct_in_array.float_vec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.struct_in_array.float_vec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.struct_in_array.float_vec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.struct_in_array.int_ivec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.struct_in_array.int_ivec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.struct_in_array.int_ivec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.struct_in_array.uint_uvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.struct_in_array.uint_uvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.struct_in_array.uint_uvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.struct_in_array.bool_bvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.struct_in_array.bool_bvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.struct_in_array.bool_bvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.struct_in_array.sampler2D_samplerCube_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.struct_in_array.sampler2D_samplerCube_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.struct_in_array.sampler2D_samplerCube_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.array_in_struct.float_vec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.array_in_struct.float_vec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.array_in_struct.float_vec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.array_in_struct.int_ivec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.array_in_struct.int_ivec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.array_in_struct.int_ivec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.array_in_struct.uint_uvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.array_in_struct.uint_uvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.array_in_struct.uint_uvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.array_in_struct.bool_bvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.array_in_struct.bool_bvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.array_in_struct.bool_bvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.array_in_struct.sampler2D_samplerCube_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.array_in_struct.sampler2D_samplerCube_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.array_in_struct.sampler2D_samplerCube_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.nested_structs_arrays.float_vec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.nested_structs_arrays.float_vec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.nested_structs_arrays.float_vec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.nested_structs_arrays.int_ivec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.nested_structs_arrays.int_ivec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.nested_structs_arrays.int_ivec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.nested_structs_arrays.uint_uvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.nested_structs_arrays.uint_uvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.nested_structs_arrays.uint_uvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.nested_structs_arrays.bool_bvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.nested_structs_arrays.bool_bvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.nested_structs_arrays.bool_bvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.nested_structs_arrays.sampler2D_samplerCube_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.nested_structs_arrays.sampler2D_samplerCube_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.nested_structs_arrays.sampler2D_samplerCube_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.multiple_basic_array.vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.multiple_basic_array.fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.multiple_basic_array.both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.multiple_nested_structs_arrays.vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.multiple_nested_structs_arrays.fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.get_uniform.multiple_nested_structs_arrays.both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.float_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.float_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.float_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.vec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.vec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.vec2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.vec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.vec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.vec3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.vec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.vec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.vec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.int_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.int_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.int_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.ivec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.ivec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.ivec2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.ivec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.ivec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.ivec3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.ivec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.ivec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.ivec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.uint_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.uint_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.uint_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.uvec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.uvec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.uvec2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.uvec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.uvec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.uvec3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.uvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.uvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.uvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.bool_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.bool_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.bool_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.bvec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.bvec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.bvec2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.bvec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.bvec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.bvec3_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.bvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.bvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.bvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.sampler2D_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.sampler2D_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.sampler2D_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.samplerCube_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.samplerCube_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic.samplerCube_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic_array.float_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic_array.float_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic_array.float_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic_array.vec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic_array.vec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic_array.vec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic_array.int_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic_array.int_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic_array.int_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic_array.ivec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic_array.ivec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic_array.ivec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic_array.uint_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic_array.uint_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic_array.uint_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic_array.uvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic_array.uvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic_array.uvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic_array.bool_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic_array.bool_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic_array.bool_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic_array.bvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic_array.bvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic_array.bvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic_array.sampler2D_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic_array.sampler2D_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic_array.sampler2D_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic_struct.float_vec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic_struct.float_vec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic_struct.float_vec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic_struct.int_ivec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic_struct.int_ivec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic_struct.int_ivec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic_struct.uint_uvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic_struct.uint_uvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic_struct.uint_uvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic_struct.bool_bvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic_struct.bool_bvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic_struct.bool_bvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic_struct.sampler2D_samplerCube_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic_struct.sampler2D_samplerCube_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.basic_struct.sampler2D_samplerCube_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.struct_in_array.float_vec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.struct_in_array.float_vec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.struct_in_array.float_vec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.struct_in_array.int_ivec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.struct_in_array.int_ivec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.struct_in_array.int_ivec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.struct_in_array.uint_uvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.struct_in_array.uint_uvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.struct_in_array.uint_uvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.struct_in_array.bool_bvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.struct_in_array.bool_bvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.struct_in_array.bool_bvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.struct_in_array.sampler2D_samplerCube_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.struct_in_array.sampler2D_samplerCube_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.struct_in_array.sampler2D_samplerCube_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.array_in_struct.float_vec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.array_in_struct.float_vec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.array_in_struct.float_vec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.array_in_struct.int_ivec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.array_in_struct.int_ivec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.array_in_struct.int_ivec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.array_in_struct.uint_uvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.array_in_struct.uint_uvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.array_in_struct.uint_uvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.array_in_struct.bool_bvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.array_in_struct.bool_bvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.array_in_struct.bool_bvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.array_in_struct.sampler2D_samplerCube_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.array_in_struct.sampler2D_samplerCube_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.array_in_struct.sampler2D_samplerCube_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.nested_structs_arrays.float_vec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.nested_structs_arrays.float_vec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.nested_structs_arrays.float_vec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.nested_structs_arrays.int_ivec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.nested_structs_arrays.int_ivec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.nested_structs_arrays.int_ivec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.nested_structs_arrays.uint_uvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.nested_structs_arrays.uint_uvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.nested_structs_arrays.uint_uvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.nested_structs_arrays.bool_bvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.nested_structs_arrays.bool_bvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.nested_structs_arrays.bool_bvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.nested_structs_arrays.sampler2D_samplerCube_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.nested_structs_arrays.sampler2D_samplerCube_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.nested_structs_arrays.sampler2D_samplerCube_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.multiple_basic_array.vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.multiple_basic_array.fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.multiple_basic_array.both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.multiple_nested_structs_arrays.vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.multiple_nested_structs_arrays.fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.by_value.render.multiple_nested_structs_arrays.both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.basic_array.float_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.basic_array.float_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.basic_array.float_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.basic_array.vec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.basic_array.vec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.basic_array.vec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.basic_array.mat4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.basic_array.mat4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.basic_array.mat4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.basic_array.int_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.basic_array.int_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.basic_array.int_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.basic_array.ivec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.basic_array.ivec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.basic_array.ivec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.basic_array.uint_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.basic_array.uint_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.basic_array.uint_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.basic_array.uvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.basic_array.uvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.basic_array.uvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.basic_array.bool_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.basic_array.bool_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.basic_array.bool_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.basic_array.bvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.basic_array.bvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.basic_array.bvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.basic_array.sampler2D_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.basic_array.sampler2D_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.basic_array.sampler2D_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.array_in_struct.float_vec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.array_in_struct.float_vec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.array_in_struct.float_vec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.array_in_struct.mat4_mat2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.array_in_struct.mat4_mat2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.array_in_struct.mat4_mat2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.array_in_struct.int_ivec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.array_in_struct.int_ivec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.array_in_struct.int_ivec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.array_in_struct.uint_uvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.array_in_struct.uint_uvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.array_in_struct.uint_uvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.array_in_struct.bool_bvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.array_in_struct.bool_bvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.array_in_struct.bool_bvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.array_in_struct.sampler2D_samplerCube_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.array_in_struct.sampler2D_samplerCube_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.array_in_struct.sampler2D_samplerCube_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.multiple_basic_array.vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.multiple_basic_array.fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_full.multiple_basic_array.both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.basic_array.float_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.basic_array.float_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.basic_array.float_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.basic_array.vec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.basic_array.vec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.basic_array.vec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.basic_array.mat4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.basic_array.mat4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.basic_array.mat4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.basic_array.int_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.basic_array.int_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.basic_array.int_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.basic_array.ivec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.basic_array.ivec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.basic_array.ivec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.basic_array.uint_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.basic_array.uint_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.basic_array.uint_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.basic_array.uvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.basic_array.uvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.basic_array.uvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.basic_array.bool_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.basic_array.bool_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.basic_array.bool_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.basic_array.bvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.basic_array.bvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.basic_array.bvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.basic_array.sampler2D_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.basic_array.sampler2D_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.basic_array.sampler2D_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.array_in_struct.float_vec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.array_in_struct.float_vec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.array_in_struct.float_vec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.array_in_struct.mat4_mat2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.array_in_struct.mat4_mat2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.array_in_struct.mat4_mat2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.array_in_struct.int_ivec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.array_in_struct.int_ivec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.array_in_struct.int_ivec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.array_in_struct.uint_uvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.array_in_struct.uint_uvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.array_in_struct.uint_uvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.array_in_struct.bool_bvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.array_in_struct.bool_bvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.array_in_struct.bool_bvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.array_in_struct.sampler2D_samplerCube_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.array_in_struct.sampler2D_samplerCube_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.array_in_struct.sampler2D_samplerCube_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.multiple_basic_array.vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.multiple_basic_array.fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.basic_array_assign_partial.multiple_basic_array.both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.unused_uniforms.float_vec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.unused_uniforms.float_vec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.unused_uniforms.float_vec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.unused_uniforms.mat4_mat2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.unused_uniforms.mat4_mat2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.unused_uniforms.mat4_mat2_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.unused_uniforms.int_ivec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.unused_uniforms.int_ivec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.unused_uniforms.int_ivec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.unused_uniforms.uint_uvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.unused_uniforms.uint_uvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.unused_uniforms.uint_uvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.unused_uniforms.bool_bvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.unused_uniforms.bool_bvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.unused_uniforms.bool_bvec4_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.unused_uniforms.sampler2D_samplerCube_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.unused_uniforms.sampler2D_samplerCube_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_uniform.unused_uniforms.sampler2D_samplerCube_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.pipeline.different_constant_separate_programs = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.pipeline.different_constant_separate_programs_add_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.pipeline.different_constant_separate_programs_add_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.pipeline.different_constant_separate_programs_add_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.pipeline.different_constant_single_program = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.pipeline.different_constant_single_program_add_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.pipeline.different_uniform_separate_programs = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.pipeline.different_uniform_separate_programs_add_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.pipeline.different_uniform_separate_programs_add_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.pipeline.different_uniform_separate_programs_add_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.pipeline.different_uniform_single_program = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.pipeline.different_uniform_single_program_add_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.pipeline.same_constant_separate_programs = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.pipeline.same_constant_separate_programs_add_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.pipeline.same_constant_separate_programs_add_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.pipeline.same_constant_separate_programs_add_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.pipeline.same_uniform_separate_programs = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.pipeline.same_uniform_separate_programs_add_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.pipeline.same_uniform_separate_programs_add_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.pipeline.same_uniform_separate_programs_add_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.program_uniform.separate_programs = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.program_uniform.separate_programs_add_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.program_uniform.separate_programs_add_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.program_uniform.separate_programs_add_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.program_uniform.single_program = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.program_uniform.single_program_add_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.create_shader_program.separate_programs = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.create_shader_program.separate_programs_add_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.create_shader_program.separate_programs_add_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.create_shader_program.separate_programs_add_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.create_shader_program.single_program_add_both = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.interface.same_name_vertex_smooth_fragment_smooth = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.interface.same_name_vertex_smooth_fragment_centroid = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.interface.same_name_vertex_smooth = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.interface.same_name_vertex_flat_fragment_flat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.interface.same_name_vertex_centroid_fragment_smooth = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.interface.same_name_vertex_centroid_fragment_centroid = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.interface.same_name_vertex_centroid = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.interface.same_name_fragment_smooth = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.interface.same_name_fragment_centroid = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.interface.same_name = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.interface.same_location_vertex_smooth_fragment_smooth = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.interface.same_location_vertex_smooth_fragment_centroid = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.interface.same_location_vertex_smooth = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.interface.same_location_vertex_flat_fragment_flat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.interface.same_location_vertex_centroid_fragment_smooth = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.interface.same_location_vertex_centroid_fragment_centroid = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.interface.same_location_vertex_centroid = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.interface.same_location_fragment_smooth = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.interface.same_location_fragment_centroid = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.interface.same_location = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.0 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.5 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.6 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.7 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.9 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.10 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.11 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.12 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.13 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.14 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.15 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.16 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.17 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.18 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.19 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.20 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.21 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.22 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.23 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.24 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.25 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.26 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.27 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.28 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.29 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.30 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.31 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.32 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.33 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.34 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.35 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.36 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.37 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.38 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.39 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.40 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.41 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.42 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.43 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.44 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.45 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.46 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.47 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.48 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.49 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.50 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.51 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.52 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.53 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.54 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.55 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.56 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.57 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.58 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.59 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.60 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.61 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.62 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.63 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.64 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.65 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.66 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.67 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.68 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.69 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.70 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.71 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.72 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.73 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.74 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.75 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.76 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.77 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.78 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.79 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.80 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.81 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.82 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.83 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.84 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.85 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.86 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.87 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.88 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.89 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.90 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.91 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.92 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.93 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.94 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.95 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.96 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.97 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.98 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.99 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.100 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.101 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.102 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.103 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.104 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.105 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.106 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.107 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.108 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.109 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.110 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.111 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.112 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.113 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.114 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.115 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.116 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.117 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.118 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.119 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.120 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.121 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.122 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.123 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.124 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.125 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.126 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.random.127 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.api.current_program_priority = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.api.active_program_uniform = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.api.pipeline_programs = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.api.pipeline_active = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.validation.varying.missing_input = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.validation.varying.missing_output = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.validation.varying.mismatch_type = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.validation.varying.mismatch_precision = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.validation.varying.mismatch_explicit_location_type = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.validation.varying.mismatch_explicit_location_precision = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.validation.varying.mismatch_explicit_location = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.validation.varying.mismatch_implicit_explicit_location_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.validation.varying.mismatch_implicit_explicit_location_2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.validation.varying.mismatch_implicit_explicit_location_3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.validation.varying.match_different_struct_names = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.validation.varying.mismatch_struct_member_name = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.validation.varying.mismatch_struct_member_type = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.validation.varying.mismatch_struct_member_precision = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.validation.varying.mismatch_struct_member_order = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.validation.varying.mismatch_array_element_type = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.validation.varying.mismatch_array_length = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.validation.varying.mismatch_array_precision = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.validation.varying.mismatch_qualifier_vertex_flat_fragment_none = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.validation.varying.mismatch_qualifier_vertex_flat_fragment_smooth = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.validation.varying.mismatch_qualifier_vertex_flat_fragment_centroid = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.validation.varying.mismatch_qualifier_vertex_smooth_fragment_flat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.separate_shader.validation.varying.mismatch_qualifier_vertex_centroid_fragment_flat = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.float_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.float_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.vec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.vec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.vec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.vec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.vec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.vec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.int_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.int_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.ivec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.ivec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.ivec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.ivec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.ivec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.ivec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.uint_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.uint_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.uvec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.uvec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.uvec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.uvec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.uvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.uvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.bool_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.bool_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.bvec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.bvec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.bvec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.bvec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.bvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.bvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.mat2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.mat2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.mat2x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.mat2x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.mat2x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.mat2x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.mat3x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.mat3x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.mat3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.mat3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.mat3x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.mat3x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.mat4x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.mat4x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.mat4x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.mat4x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.mat4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.mat4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.sampler2D_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.sampler2D_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.isampler2D_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.isampler2D_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.usampler2D_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.basic.usampler2D_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.float_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.float_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.vec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.vec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.vec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.vec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.vec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.vec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.int_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.int_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.ivec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.ivec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.ivec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.ivec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.ivec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.ivec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.uint_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.uint_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.uvec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.uvec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.uvec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.uvec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.uvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.uvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.bool_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.bool_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.bvec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.bvec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.bvec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.bvec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.bvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.bvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.mat2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.mat2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.mat2x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.mat2x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.mat2x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.mat2x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.mat3x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.mat3x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.mat3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.mat3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.mat3x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.mat3x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.mat4x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.mat4x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.mat4x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.mat4x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.mat4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.mat4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.sampler2D_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.sampler2D_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.isampler2D_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.isampler2D_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.usampler2D_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.array.usampler2D_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.float_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.float_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.vec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.vec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.vec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.vec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.vec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.vec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.int_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.int_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.ivec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.ivec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.ivec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.ivec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.ivec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.ivec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.uint_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.uint_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.uvec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.uvec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.uvec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.uvec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.uvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.uvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.bool_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.bool_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.bvec2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.bvec2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.bvec3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.bvec3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.bvec4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.bvec4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.mat2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.mat2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.mat2x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.mat2x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.mat2x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.mat2x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.mat3x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.mat3x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.mat3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.mat3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.mat3x4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.mat3x4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.mat4x2_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.mat4x2_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.mat4x3_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.mat4x3_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.mat4_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.mat4_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.sampler2D_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.sampler2D_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.isampler2D_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.isampler2D_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.usampler2D_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_array.usampler2D_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.struct.case_0 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.struct.case_2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.struct.case_3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.struct.case_4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.struct.case_6 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.struct.case_7 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.struct.case_8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.struct.case_9 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.struct.case_10 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.struct.case_12 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.struct.case_13 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.struct.case_14 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.struct.case_15 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_struct.case_0 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_struct.case_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_struct.case_2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_struct.case_3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_struct.case_4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_struct.case_5 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_struct.case_6 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_struct.case_7 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_struct.case_8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_struct.case_9 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_struct.case_10 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_struct.case_11 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_struct.case_12 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_struct.case_13 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_struct.case_14 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.nested_struct.case_15 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.float_vertex_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.float_vertex_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.float_fragment_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.float_fragment_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.vec2_vertex_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.vec2_vertex_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.vec2_fragment_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.vec2_fragment_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.vec3_vertex_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.vec3_vertex_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.vec3_fragment_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.vec3_fragment_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.vec4_vertex_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.vec4_vertex_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.vec4_fragment_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.vec4_fragment_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.int_vertex_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.int_vertex_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.int_fragment_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.int_fragment_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.ivec2_vertex_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.ivec2_vertex_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.ivec2_fragment_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.ivec2_fragment_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.ivec3_vertex_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.ivec3_vertex_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.ivec3_fragment_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.ivec3_fragment_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.ivec4_vertex_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.ivec4_vertex_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.ivec4_fragment_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.ivec4_fragment_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.uint_vertex_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.uint_vertex_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.uint_fragment_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.uint_fragment_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.uvec2_vertex_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.uvec2_vertex_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.uvec2_fragment_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.uvec2_fragment_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.uvec3_vertex_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.uvec3_vertex_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.uvec3_fragment_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.uvec3_fragment_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.uvec4_vertex_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.uvec4_vertex_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.uvec4_fragment_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.uvec4_fragment_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.bool_vertex_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.bool_vertex_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.bool_fragment_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.bool_fragment_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.bvec2_vertex_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.bvec2_vertex_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.bvec2_fragment_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.bvec2_fragment_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.bvec3_vertex_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.bvec3_vertex_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.bvec3_fragment_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.bvec3_fragment_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.bvec4_vertex_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.bvec4_vertex_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.bvec4_fragment_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.bvec4_fragment_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.mat2_vertex_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.mat2_vertex_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.mat2_fragment_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.mat2_fragment_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.mat2x3_vertex_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.mat2x3_vertex_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.mat2x3_fragment_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.mat2x3_fragment_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.mat2x4_vertex_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.mat2x4_vertex_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.mat2x4_fragment_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.mat2x4_fragment_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.mat3x2_vertex_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.mat3x2_vertex_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.mat3x2_fragment_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.mat3x2_fragment_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.mat3_vertex_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.mat3_vertex_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.mat3_fragment_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.mat3_fragment_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.mat3x4_vertex_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.mat3x4_vertex_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.mat3x4_fragment_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.mat3x4_fragment_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.mat4x2_vertex_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.mat4x2_vertex_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.mat4x2_fragment_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.mat4x2_fragment_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.mat4x3_vertex_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.mat4x3_vertex_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.mat4x3_fragment_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.mat4x3_fragment_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.mat4_vertex_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.mat4_vertex_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.mat4_fragment_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.mat4_fragment_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.sampler2D_vertex_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.sampler2D_vertex_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.sampler2D_fragment_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.sampler2D_fragment_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.isampler2D_vertex_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.isampler2D_vertex_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.isampler2D_fragment_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.isampler2D_fragment_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.usampler2D_vertex_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.usampler2D_vertex_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.usampler2D_fragment_min = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.min_max.usampler2D_fragment_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.link.case_0 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.link.case_1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.link.case_2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.link.case_3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.link.case_4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.link.case_5 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.link.case_6 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.link.case_7 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.link.case_8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.uniform_location.link.case_9 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.callbacks.shader.compile_compute_shader = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.callbacks.shader_directive.primitive_bounding_box = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.callbacks.shader_directive.geometry_shader = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.callbacks.shader_directive.tessellation_shader = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.log.shader.compile_compute_shader = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.log.shader_directive.primitive_bounding_box = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.log.shader_directive.geometry_shader = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.log.shader_directive.tessellation_shader = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.get_error.buffer.read_pixels_format_mismatch = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.get_error.buffer.framebuffer_texture2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.get_error.buffer.blit_framebuffer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.get_error.buffer.invalidate_sub_framebuffer = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.get_error.buffer.renderbuffer_storage_multisample = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.copyteximage2d_invalid_format = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.copyteximage2d_inequal_width_height_cube = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.copyteximage2d_max_width_height = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.copytexsubimage2d_invalid_offset = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.texparameteri = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.texparameterf = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.texparameteriv = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.texparameterfv = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.compressedtexsubimage2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.compressedtexsubimage2d_invalid_size = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.texsubimage3d_neg_level = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.texsubimage3d_neg_offset = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.copytexsubimage3d_invalid_offset = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.compressedtexsubimage3d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.compressedtexsubimage3d_invalid_buffer_target = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.get_error.shader.compile_compute_shader = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.get_error.vertex_array.vertex_attrib_format = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.get_error.vertex_array.vertex_attrib_i_format = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.get_error.vertex_array.draw_range_elements = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.get_error.vertex_array.draw_range_elements_incomplete_primitive = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.get_error.shader_directive.primitive_bounding_box = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.get_error.shader_directive.geometry_shader = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.get_error.shader_directive.tessellation_shader = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.debug.object_labels.program_pipeline = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.size.16x16 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.size.16x64 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.size.16x256 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.size.16x1024 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.size.64x16 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.size.64x64 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.size.64x256 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.size.64x1024 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.size.256x16 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.size.256x64 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.size.256x256 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.size.256x1024 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.size.1024x16 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.size.1024x64 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.size.1024x256 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.size.1024x1024 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.npot_size.1x1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.npot_size.3x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.npot_size.15x15 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.npot_size.17x17 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.npot_size.31x31 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.npot_size.33x33 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.npot_size.63x63 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.npot_size.65x65 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.npot_size.127x127 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.npot_size.129x129 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.npot_size.255x255 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.npot_size.257x257 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.npot_size.511x511 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.npot_size.513x513 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.npot_size.1023x1023 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.npot_size.1025x1025 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.npot_size.2047x2047 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.npot_size.15x511 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.npot_size.127x15 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.npot_size.129x127 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.npot_size.511x127 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.npot_size.2047x1025 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.multisample.samples0 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.multisample.samples1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.multisample.samples2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.multisample.samples3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.multisample.samples4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.random.0 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.random.1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.random.2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.random.3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.random.4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.random.5 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.random.6 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.random.7 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.random.8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.random.9 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.random.10 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.random.11 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.random.12 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.random.13 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.random.14 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.random.15 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.interaction.256x256ms0_default_128x128ms1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.interaction.256x256ms1_default_128x128ms0 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.interaction.256x256ms0_default_512x512ms2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.interaction.256x256ms2_default_128x512ms0 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.interaction.127x127ms0_default_129x129ms0 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.interaction.17x512ms4_default_16x16ms2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.interaction.2048x2048ms4_default_1x1ms0 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.interaction.1x1ms0_default_2048x2048ms4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.maximums.width = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.maximums.height = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.maximums.size = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.maximums.samples = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.no_attachments.maximums.all = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.fbo.completeness.no_attachments = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_limited_query.resource_name_query = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_limited_query.resource_query = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.default_block.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.default_block.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.default_block.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.default_block.var_struct_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.default_block.var_struct_struct_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.default_block.var_array_struct_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.default_block.var_array_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.default_block.var_struct_array_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.default_block.var_array_array_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.default_block.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.default_block.var_struct_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.default_block.var_struct_struct_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.default_block.var_array_struct_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.default_block.var_array_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.default_block.var_struct_array_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.default_block.var_array_array_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.default_block.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.default_block.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.default_block.var_struct_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.default_block.var_struct_struct_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.default_block.var_array_struct_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.default_block.var_array_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.default_block.var_struct_array_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.default_block.var_array_array_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.default_block.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.default_block.var_struct_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.default_block.var_struct_struct_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.default_block.var_array_struct_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.default_block.var_array_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.default_block.var_struct_array_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.default_block.var_array_array_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.named_block.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.named_block.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.named_block.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.named_block.var_struct_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.named_block.var_struct_struct_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.named_block.var_array_struct_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.named_block.var_array_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.named_block.var_struct_array_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.named_block.var_array_array_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.named_block.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.named_block.var_struct_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.named_block.var_struct_struct_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.named_block.var_array_struct_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.named_block.var_array_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.named_block.var_struct_array_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.named_block.var_array_array_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.named_block.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.named_block.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.named_block.var_struct_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.named_block.var_struct_struct_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.named_block.var_array_struct_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.named_block.var_array_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.named_block.var_struct_array_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.named_block.var_array_array_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.named_block.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.named_block.var_struct_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.named_block.var_struct_struct_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.named_block.var_array_struct_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.named_block.var_array_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.named_block.var_struct_array_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.named_block.var_array_array_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.unnamed_block.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.unnamed_block.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.unnamed_block.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.unnamed_block.var_struct_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.unnamed_block.var_struct_struct_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.unnamed_block.var_array_struct_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.unnamed_block.var_array_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.unnamed_block.var_struct_array_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.unnamed_block.var_array_array_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.unnamed_block.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.unnamed_block.var_struct_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.unnamed_block.var_struct_struct_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.unnamed_block.var_array_struct_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.unnamed_block.var_array_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.unnamed_block.var_struct_array_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.unnamed_block.var_array_array_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.unnamed_block.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.unnamed_block.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.unnamed_block.var_struct_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.unnamed_block.var_struct_struct_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.unnamed_block.var_array_struct_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.unnamed_block.var_array_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.unnamed_block.var_struct_array_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.unnamed_block.var_array_array_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.unnamed_block.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.unnamed_block.var_struct_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.unnamed_block.var_struct_struct_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.unnamed_block.var_array_struct_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.unnamed_block.var_array_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.unnamed_block.var_struct_array_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.unnamed_block.var_array_array_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.block_array.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.block_array.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.block_array.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.block_array.var_struct_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.block_array.var_struct_struct_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.block_array.var_array_struct_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.block_array.var_array_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.block_array.var_struct_array_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.block_array.var_array_array_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.block_array.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.block_array.var_struct_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.block_array.var_struct_struct_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.block_array.var_array_struct_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.block_array.var_array_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.block_array.var_struct_array_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.block_array.var_array_array_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.block_array.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.block_array.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.block_array.var_struct_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.block_array.var_struct_struct_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.block_array.var_array_struct_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.block_array.var_array_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.block_array.var_struct_array_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.block_array.var_array_array_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.block_array.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.block_array.var_struct_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.block_array.var_struct_struct_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.block_array.var_array_struct_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.block_array.var_array_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.block_array.var_struct_array_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.resource_list.block_array.var_array_array_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.default_block.types.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.default_block.types.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.default_block.types.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.default_block.types.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.default_block.types.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.default_block.types.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.default_block.types.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.default_block.types.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.default_block.types.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.default_block.types.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.default_block.types.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.default_block.types.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.default_block.types.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.default_block.types.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.default_block.types.sampler_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.default_block.types.sampler_cube = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.default_block.types.sampler_2d_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.default_block.types.sampler_3d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.default_block.types.sampler_2d_shadow = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.default_block.types.isampler_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.default_block.types.usampler_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.default_block.types.sampler_2d_ms = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.default_block.types.isampler_2d_ms = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.default_block.types.image_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.default_block.types.iimage_2d_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.default_block.types.uimage_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.default_block.types.atomic_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.default_block.aggregates.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.default_block.aggregates.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.default_block.aggregates.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.default_block.aggregates.var_struct_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.default_block.aggregates.var_array_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.default_block.aggregates.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.default_block.aggregates.var_struct_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.default_block.aggregates.var_array_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.default_block.aggregates.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.default_block.aggregates.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.default_block.aggregates.var_struct_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.default_block.aggregates.var_array_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.default_block.aggregates.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.default_block.aggregates.var_struct_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.default_block.aggregates.var_array_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.named_block.types.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.named_block.types.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.named_block.types.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.named_block.types.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.named_block.types.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.named_block.types.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.named_block.types.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.named_block.types.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.named_block.types.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.named_block.types.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.named_block.types.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.named_block.types.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.named_block.types.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.named_block.types.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.named_block.aggregates.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.named_block.aggregates.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.named_block.aggregates.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.named_block.aggregates.var_struct_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.named_block.aggregates.var_array_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.named_block.aggregates.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.named_block.aggregates.var_struct_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.named_block.aggregates.var_array_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.named_block.aggregates.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.named_block.aggregates.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.named_block.aggregates.var_struct_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.named_block.aggregates.var_array_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.named_block.aggregates.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.named_block.aggregates.var_struct_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.named_block.aggregates.var_array_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.unnamed_block.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.unnamed_block.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.unnamed_block.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.unnamed_block.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.unnamed_block.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.unnamed_block.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.unnamed_block.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.block_array.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.block_array.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.block_array.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.block_array.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.block_array.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.block_array.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_size.block_array.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.types.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.types.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.types.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.types.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.types.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.types.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.types.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.types.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.types.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.types.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.types.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.types.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.types.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.types.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.types.sampler_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.types.sampler_cube = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.types.sampler_2d_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.types.sampler_3d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.types.sampler_2d_shadow = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.types.isampler_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.types.usampler_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.types.sampler_2d_ms = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.types.isampler_2d_ms = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.types.image_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.types.iimage_2d_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.types.uimage_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.types.atomic_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.aggregates.sampler2D_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.aggregates.sampler2D_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.aggregates.atomic_uint_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.aggregates.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.aggregates.float_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.aggregates.float_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.aggregates.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.aggregates.float_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.aggregates.float_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.aggregates.bool_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.aggregates.bool_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.aggregates.bvec3_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.aggregates.bvec3_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.aggregates.bvec3_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.aggregates.bvec3_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.aggregates.bvec3_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.aggregates.bvec3_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.aggregates.vec3_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.aggregates.vec3_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.aggregates.vec3_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.aggregates.vec3_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.aggregates.vec3_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.aggregates.vec3_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.aggregates.ivec3_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.aggregates.ivec3_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.aggregates.ivec3_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.aggregates.ivec3_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.aggregates.ivec3_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.default_block.aggregates.ivec3_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.named_block.types.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.named_block.types.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.named_block.types.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.named_block.types.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.named_block.types.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.named_block.types.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.named_block.types.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.named_block.types.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.named_block.types.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.named_block.types.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.named_block.types.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.named_block.types.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.named_block.types.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.named_block.types.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.named_block.aggregates.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.named_block.aggregates.float_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.named_block.aggregates.float_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.named_block.aggregates.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.named_block.aggregates.float_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.named_block.aggregates.float_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.named_block.aggregates.bool_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.named_block.aggregates.bool_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.named_block.aggregates.bvec3_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.named_block.aggregates.bvec3_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.named_block.aggregates.bvec3_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.named_block.aggregates.bvec3_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.named_block.aggregates.bvec3_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.named_block.aggregates.bvec3_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.named_block.aggregates.vec3_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.named_block.aggregates.vec3_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.named_block.aggregates.vec3_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.named_block.aggregates.vec3_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.named_block.aggregates.vec3_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.named_block.aggregates.vec3_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.named_block.aggregates.ivec3_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.named_block.aggregates.ivec3_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.named_block.aggregates.ivec3_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.named_block.aggregates.ivec3_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.named_block.aggregates.ivec3_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.named_block.aggregates.ivec3_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.unnamed_block.basic_type.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.unnamed_block.basic_type.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.unnamed_block.basic_type.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.unnamed_block.basic_type.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.unnamed_block.basic_type.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.unnamed_block.basic_type.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.unnamed_block.array.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.unnamed_block.array.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.unnamed_block.array.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.unnamed_block.array.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.unnamed_block.array.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.unnamed_block.array.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.unnamed_block.struct.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.unnamed_block.struct.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.unnamed_block.struct.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.unnamed_block.struct.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.unnamed_block.struct.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.unnamed_block.struct.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.block_array.basic_type.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.block_array.basic_type.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.block_array.basic_type.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.block_array.basic_type.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.block_array.basic_type.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.block_array.basic_type.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.block_array.array.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.block_array.array.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.block_array.array.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.block_array.array.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.block_array.array.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.block_array.array.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.block_array.struct.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.block_array.struct.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.block_array.struct.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.block_array.struct.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.block_array.struct.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.array_stride.block_array.struct.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.basic_type.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.basic_type.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.basic_type.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.basic_type.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.basic_type.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.basic_type.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.basic_type.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.basic_type.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.basic_type.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.basic_type.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.basic_type.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.basic_type.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.basic_type.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.basic_type.bvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.basic_type.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.basic_type.bvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.basic_type.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.basic_type.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.basic_type.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.basic_type.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.basic_type.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.basic_type.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.basic_type.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.basic_type.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.basic_type.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.opaque_type.sampler_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.opaque_type.sampler_cube = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.opaque_type.sampler_2d_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.opaque_type.sampler_3d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.opaque_type.sampler_2d_shadow = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.opaque_type.sampler_cube_shadow = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.opaque_type.sampler_2d_array_shadow = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.opaque_type.isampler_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.opaque_type.isampler_cube = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.opaque_type.isampler_2d_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.opaque_type.isampler_3d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.opaque_type.usampler_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.opaque_type.usampler_cube = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.opaque_type.usampler_2d_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.opaque_type.usampler_3d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.opaque_type.sampler_2d_ms = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.opaque_type.isampler_2d_ms = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.opaque_type.usampler_2d_ms = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.opaque_type.image_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.opaque_type.image_cube = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.opaque_type.image_2d_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.opaque_type.image_3d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.opaque_type.iimage_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.opaque_type.iimage_cube = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.opaque_type.iimage_2d_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.opaque_type.iimage_3d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.opaque_type.uimage_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.opaque_type.uimage_cube = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.opaque_type.uimage_2d_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.opaque_type.uimage_3d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.opaque_type.atomic_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.array.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.default_block.array.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.named_block.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.named_block.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.named_block.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.named_block.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.named_block.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.atomic_counter_buffer_index.named_block.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.block_index.default_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.block_index.named_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.block_index.unnamed_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.block_index.block_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.basic_type.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.basic_type.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.basic_type.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.basic_type.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.basic_type.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.basic_type.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.basic_type.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.basic_type.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.basic_type.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.basic_type.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.basic_type.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.basic_type.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.basic_type.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.basic_type.bvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.basic_type.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.basic_type.bvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.basic_type.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.basic_type.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.basic_type.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.basic_type.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.basic_type.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.basic_type.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.basic_type.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.basic_type.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.basic_type.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.opaque_type.sampler_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.opaque_type.sampler_cube = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.opaque_type.sampler_2d_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.opaque_type.sampler_3d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.opaque_type.sampler_2d_shadow = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.opaque_type.sampler_cube_shadow = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.opaque_type.sampler_2d_array_shadow = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.opaque_type.isampler_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.opaque_type.isampler_cube = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.opaque_type.isampler_2d_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.opaque_type.isampler_3d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.opaque_type.usampler_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.opaque_type.usampler_cube = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.opaque_type.usampler_2d_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.opaque_type.usampler_3d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.opaque_type.sampler_2d_ms = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.opaque_type.isampler_2d_ms = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.opaque_type.usampler_2d_ms = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.opaque_type.image_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.opaque_type.image_cube = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.opaque_type.image_2d_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.opaque_type.image_3d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.opaque_type.iimage_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.opaque_type.iimage_cube = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.opaque_type.iimage_2d_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.opaque_type.iimage_3d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.opaque_type.uimage_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.opaque_type.uimage_cube = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.opaque_type.uimage_2d_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.opaque_type.uimage_3d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.opaque_type.atomic_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.basic_type.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.basic_type.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.basic_type.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.basic_type.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.basic_type.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.basic_type.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.basic_type.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.basic_type.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.basic_type.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.basic_type.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.basic_type.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.basic_type.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.basic_type.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.basic_type.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.opaque_type.sampler_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.opaque_type.sampler_cube = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.opaque_type.sampler_2d_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.opaque_type.sampler_3d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.opaque_type.sampler_2d_shadow = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.opaque_type.isampler_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.opaque_type.usampler_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.opaque_type.sampler_2d_ms = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.opaque_type.isampler_2d_ms = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.opaque_type.image_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.opaque_type.iimage_2d_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.opaque_type.uimage_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.opaque_type.atomic_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.array.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.array.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.array.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.array.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.array.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.array.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.array.sampler_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.array.sampler_2d_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.array.sampler_3d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.array.isampler_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.array.image_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.array.iimage_2d_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.array.atomic_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.struct.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.struct.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.struct.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.struct.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.struct.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.struct.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.struct.sampler_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.struct.sampler_2d_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.struct.sampler_3d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.array.struct.isampler_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.struct.basic_type.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.struct.basic_type.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.struct.basic_type.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.struct.basic_type.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.struct.basic_type.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.struct.basic_type.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.struct.basic_type.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.struct.basic_type.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.struct.basic_type.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.struct.basic_type.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.struct.basic_type.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.struct.basic_type.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.struct.basic_type.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.struct.basic_type.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.struct.opaque_type.sampler_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.struct.opaque_type.sampler_cube = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.struct.opaque_type.sampler_2d_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.struct.opaque_type.sampler_3d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.struct.opaque_type.sampler_2d_shadow = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.struct.opaque_type.isampler_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.struct.opaque_type.usampler_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.struct.opaque_type.sampler_2d_ms = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.struct.opaque_type.isampler_2d_ms = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.struct.array.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.struct.array.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.struct.array.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.struct.array.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.struct.array.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.struct.array.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.struct.array.sampler_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.struct.array.sampler_2d_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.struct.array.sampler_3d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.struct.array.isampler_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.struct.struct.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.struct.struct.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.struct.struct.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.struct.struct.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.struct.struct.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.struct.struct.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.struct.struct.sampler_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.struct.struct.sampler_2d_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.struct.struct.sampler_3d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.default_block.struct.struct.isampler_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.named_block.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.named_block.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.named_block.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.named_block.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.named_block.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.named_block.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.unnamed_block.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.unnamed_block.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.unnamed_block.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.unnamed_block.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.unnamed_block.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.location.unnamed_block.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.default_block.no_qualifier.types.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.default_block.no_qualifier.types.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.default_block.no_qualifier.types.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.default_block.no_qualifier.types.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.default_block.no_qualifier.types.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.default_block.no_qualifier.types.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.default_block.no_qualifier.types.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.default_block.no_qualifier.types.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.default_block.no_qualifier.types.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.default_block.no_qualifier.types.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.default_block.no_qualifier.types.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.default_block.no_qualifier.types.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.default_block.no_qualifier.types.sampler_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.default_block.no_qualifier.types.sampler_cube = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.default_block.no_qualifier.types.sampler_2d_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.default_block.no_qualifier.types.sampler_3d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.default_block.no_qualifier.types.sampler_2d_shadow = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.default_block.no_qualifier.types.isampler_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.default_block.no_qualifier.types.usampler_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.default_block.no_qualifier.types.sampler_2d_ms = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.default_block.no_qualifier.types.isampler_2d_ms = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.default_block.no_qualifier.types.image_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.default_block.no_qualifier.types.iimage_2d_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.default_block.no_qualifier.types.uimage_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.default_block.no_qualifier.types.atomic_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.default_block.no_qualifier.aggregates.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.default_block.no_qualifier.aggregates.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.default_block.no_qualifier.aggregates.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.named_block.no_qualifier.types.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.named_block.no_qualifier.types.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.named_block.no_qualifier.types.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.named_block.no_qualifier.types.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.named_block.no_qualifier.types.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.named_block.no_qualifier.types.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.named_block.no_qualifier.types.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.named_block.no_qualifier.types.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.named_block.no_qualifier.types.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.named_block.no_qualifier.types.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.named_block.no_qualifier.types.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.named_block.no_qualifier.types.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.named_block.no_qualifier.aggregates.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.named_block.no_qualifier.aggregates.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.named_block.no_qualifier.aggregates.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.named_block.row_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.named_block.row_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.named_block.row_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.named_block.column_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.named_block.column_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.named_block.column_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.named_block_row_major.no_qualifier.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.named_block_row_major.no_qualifier.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.named_block_row_major.no_qualifier.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.named_block_row_major.row_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.named_block_row_major.row_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.named_block_row_major.row_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.named_block_row_major.column_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.named_block_row_major.column_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.named_block_row_major.column_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.named_block_col_major.no_qualifier.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.named_block_col_major.no_qualifier.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.named_block_col_major.no_qualifier.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.named_block_col_major.row_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.named_block_col_major.row_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.named_block_col_major.row_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.named_block_col_major.column_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.named_block_col_major.column_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.named_block_col_major.column_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.unnamed_block.no_qualifier.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.unnamed_block.no_qualifier.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.unnamed_block.no_qualifier.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.unnamed_block.row_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.unnamed_block.row_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.unnamed_block.row_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.unnamed_block.column_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.unnamed_block.column_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.unnamed_block.column_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.unnamed_block_row_major.no_qualifier.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.unnamed_block_row_major.no_qualifier.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.unnamed_block_row_major.no_qualifier.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.unnamed_block_row_major.row_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.unnamed_block_row_major.row_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.unnamed_block_row_major.row_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.unnamed_block_row_major.column_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.unnamed_block_row_major.column_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.unnamed_block_row_major.column_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.unnamed_block_col_major.no_qualifier.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.unnamed_block_col_major.no_qualifier.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.unnamed_block_col_major.no_qualifier.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.unnamed_block_col_major.row_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.unnamed_block_col_major.row_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.unnamed_block_col_major.row_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.unnamed_block_col_major.column_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.unnamed_block_col_major.column_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_row_major.unnamed_block_col_major.column_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.default_block.no_qualifier.types.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.default_block.no_qualifier.types.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.default_block.no_qualifier.types.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.default_block.no_qualifier.types.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.default_block.no_qualifier.types.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.default_block.no_qualifier.types.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.default_block.no_qualifier.types.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.default_block.no_qualifier.types.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.default_block.no_qualifier.types.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.default_block.no_qualifier.types.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.default_block.no_qualifier.types.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.default_block.no_qualifier.types.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.default_block.no_qualifier.types.sampler_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.default_block.no_qualifier.types.sampler_cube = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.default_block.no_qualifier.types.sampler_2d_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.default_block.no_qualifier.types.sampler_3d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.default_block.no_qualifier.types.sampler_2d_shadow = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.default_block.no_qualifier.types.isampler_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.default_block.no_qualifier.types.usampler_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.default_block.no_qualifier.types.sampler_2d_ms = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.default_block.no_qualifier.types.isampler_2d_ms = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.default_block.no_qualifier.types.image_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.default_block.no_qualifier.types.iimage_2d_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.default_block.no_qualifier.types.uimage_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.default_block.no_qualifier.types.atomic_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.default_block.no_qualifier.aggregates.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.default_block.no_qualifier.aggregates.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.default_block.no_qualifier.aggregates.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block.no_qualifier.types.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block.no_qualifier.types.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block.no_qualifier.types.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block.no_qualifier.types.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block.no_qualifier.types.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block.no_qualifier.types.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block.no_qualifier.types.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block.no_qualifier.types.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block.no_qualifier.types.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block.no_qualifier.types.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block.no_qualifier.types.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block.no_qualifier.types.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block.no_qualifier.aggregates.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block.no_qualifier.aggregates.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block.no_qualifier.aggregates.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block.row_major.matrix.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block.row_major.matrix.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block.row_major.matrix.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block.row_major.matrix.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block.row_major.matrix.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block.row_major.matrix.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block.row_major.aggregates.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block.row_major.aggregates.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block.row_major.aggregates.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block.column_major.matrix.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block.column_major.matrix.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block.column_major.matrix.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block.column_major.matrix.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block.column_major.matrix.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block.column_major.matrix.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block.column_major.aggregates.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block.column_major.aggregates.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block.column_major.aggregates.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block_row_major.no_qualifier.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block_row_major.no_qualifier.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block_row_major.no_qualifier.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block_row_major.row_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block_row_major.row_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block_row_major.row_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block_row_major.column_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block_row_major.column_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block_row_major.column_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block_col_major.no_qualifier.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block_col_major.no_qualifier.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block_col_major.no_qualifier.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block_col_major.row_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block_col_major.row_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block_col_major.row_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block_col_major.column_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block_col_major.column_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.named_block_col_major.column_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.unnamed_block.no_qualifier.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.unnamed_block.no_qualifier.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.unnamed_block.no_qualifier.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.unnamed_block.row_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.unnamed_block.row_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.unnamed_block.row_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.unnamed_block.column_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.unnamed_block.column_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.unnamed_block.column_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.unnamed_block_row_major.no_qualifier.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.unnamed_block_row_major.no_qualifier.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.unnamed_block_row_major.no_qualifier.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.unnamed_block_row_major.row_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.unnamed_block_row_major.row_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.unnamed_block_row_major.row_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.unnamed_block_row_major.column_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.unnamed_block_row_major.column_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.unnamed_block_row_major.column_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.unnamed_block_col_major.no_qualifier.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.unnamed_block_col_major.no_qualifier.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.unnamed_block_col_major.no_qualifier.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.unnamed_block_col_major.row_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.unnamed_block_col_major.row_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.unnamed_block_col_major.row_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.unnamed_block_col_major.column_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.unnamed_block_col_major.column_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.matrix_stride.unnamed_block_col_major.column_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.name_length.default_block.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.name_length.default_block.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.name_length.default_block.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.name_length.default_block.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.name_length.default_block.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.name_length.default_block.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.name_length.default_block.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.name_length.named_block.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.name_length.named_block.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.name_length.named_block.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.name_length.named_block.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.name_length.named_block.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.name_length.named_block.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.name_length.named_block.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.name_length.unnamed_block.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.name_length.unnamed_block.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.name_length.unnamed_block.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.name_length.block_array.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.name_length.block_array.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.name_length.block_array.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.bvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.bvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.sampler_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.sampler_cube = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.sampler_2d_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.sampler_3d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.sampler_2d_shadow = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.sampler_cube_shadow = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.sampler_2d_array_shadow = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.isampler_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.isampler_cube = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.isampler_2d_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.isampler_3d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.usampler_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.usampler_cube = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.usampler_2d_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.usampler_3d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.sampler_2d_ms = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.isampler_2d_ms = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.usampler_2d_ms = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.image_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.image_cube = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.image_2d_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.image_3d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.iimage_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.iimage_cube = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.iimage_2d_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.iimage_3d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.uimage_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.uimage_cube = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.uimage_2d_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.uimage_3d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.types.atomic_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.aggregates.atomic_uint_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.aggregates.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.default_block.aggregates.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.named_block.types.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.named_block.types.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.named_block.types.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.named_block.types.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.named_block.types.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.named_block.types.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.named_block.types.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.named_block.types.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.named_block.types.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.named_block.types.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.named_block.types.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.named_block.types.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.named_block.types.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.named_block.types.bvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.named_block.types.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.named_block.types.bvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.named_block.types.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.named_block.types.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.named_block.types.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.named_block.types.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.named_block.types.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.named_block.types.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.named_block.types.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.named_block.types.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.named_block.types.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.named_block.aggregates.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.named_block.aggregates.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.unnamed_block.basic_type.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.unnamed_block.basic_type.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.unnamed_block.basic_type.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.unnamed_block.basic_type.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.unnamed_block.basic_type.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.unnamed_block.basic_type.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.unnamed_block.array.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.unnamed_block.array.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.unnamed_block.array.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.unnamed_block.array.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.unnamed_block.array.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.unnamed_block.array.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.unnamed_block.struct.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.unnamed_block.struct.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.unnamed_block.struct.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.unnamed_block.struct.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.unnamed_block.struct.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.unnamed_block.struct.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.block_array.basic_type.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.block_array.basic_type.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.block_array.basic_type.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.block_array.basic_type.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.block_array.basic_type.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.block_array.basic_type.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.block_array.array.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.block_array.array.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.block_array.array.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.block_array.array.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.block_array.array.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.block_array.array.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.block_array.struct.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.block_array.struct.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.block_array.struct.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.block_array.struct.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.block_array.struct.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.offset.block_array.struct.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.compute.default_block.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.compute.default_block.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.compute.default_block.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.compute.default_block.sampler = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.compute.default_block.sampler_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.compute.default_block.sampler_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.compute.default_block.atomic_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.compute.default_block.atomic_uint_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.compute.default_block.float_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.compute.default_block.float_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.compute.default_block.float_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.compute.default_block.float_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.compute.uniform_block.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.compute.uniform_block.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.compute.uniform_block.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.compute.uniform_block.float_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.compute.uniform_block.float_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.compute.uniform_block.float_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.compute.uniform_block.float_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.compute.unnamed_block.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.compute.unnamed_block.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.compute.unnamed_block.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.compute.block_array.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.compute.block_array.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.compute.block_array.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_vertex.default_block.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_vertex.default_block.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_vertex.default_block.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_vertex.default_block.sampler = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_vertex.default_block.sampler_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_vertex.default_block.sampler_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_vertex.default_block.atomic_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_vertex.default_block.atomic_uint_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_vertex.default_block.float_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_vertex.default_block.float_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_vertex.default_block.float_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_vertex.default_block.float_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_vertex.uniform_block.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_vertex.uniform_block.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_vertex.uniform_block.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_vertex.uniform_block.float_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_vertex.uniform_block.float_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_vertex.uniform_block.float_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_vertex.uniform_block.float_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_vertex.unnamed_block.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_vertex.unnamed_block.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_vertex.unnamed_block.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_vertex.block_array.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_vertex.block_array.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_vertex.block_array.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_fragment.default_block.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_fragment.default_block.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_fragment.default_block.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_fragment.default_block.sampler = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_fragment.default_block.sampler_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_fragment.default_block.sampler_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_fragment.default_block.atomic_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_fragment.default_block.atomic_uint_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_fragment.default_block.float_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_fragment.default_block.float_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_fragment.default_block.float_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_fragment.default_block.float_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_fragment.uniform_block.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_fragment.uniform_block.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_fragment.uniform_block.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_fragment.uniform_block.float_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_fragment.uniform_block.float_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_fragment.uniform_block.float_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_fragment.uniform_block.float_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_fragment.unnamed_block.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_fragment.unnamed_block.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_fragment.unnamed_block.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_fragment.block_array.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_fragment.block_array.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.separable_fragment.block_array.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment.default_block.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment.default_block.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment.default_block.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment.default_block.sampler = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment.default_block.sampler_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment.default_block.sampler_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment.default_block.atomic_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment.default_block.atomic_uint_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment.uniform_block.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment.uniform_block.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment.uniform_block.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment.unnamed_block.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment.unnamed_block.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment.unnamed_block.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment.block_array.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment.block_array.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment.block_array.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment_only_vertex.default_block.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment_only_vertex.default_block.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment_only_vertex.default_block.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment_only_vertex.default_block.sampler = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment_only_vertex.default_block.sampler_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment_only_vertex.default_block.sampler_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment_only_vertex.default_block.atomic_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment_only_vertex.default_block.atomic_uint_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment_only_vertex.uniform_block.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment_only_vertex.uniform_block.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment_only_vertex.uniform_block.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment_only_vertex.unnamed_block.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment_only_vertex.unnamed_block.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment_only_vertex.unnamed_block.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment_only_vertex.block_array.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment_only_vertex.block_array.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment_only_vertex.block_array.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment_only_fragment.default_block.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment_only_fragment.default_block.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment_only_fragment.default_block.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment_only_fragment.default_block.sampler = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment_only_fragment.default_block.sampler_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment_only_fragment.default_block.sampler_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment_only_fragment.default_block.atomic_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment_only_fragment.default_block.atomic_uint_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment_only_fragment.uniform_block.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment_only_fragment.uniform_block.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment_only_fragment.uniform_block.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment_only_fragment.unnamed_block.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment_only_fragment.unnamed_block.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment_only_fragment.unnamed_block.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment_only_fragment.block_array.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment_only_fragment.block_array.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.referenced_by_shader.vertex_fragment_only_fragment.block_array.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.bvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.bvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.sampler_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.sampler_cube = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.sampler_2d_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.sampler_3d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.sampler_2d_shadow = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.sampler_cube_shadow = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.sampler_2d_array_shadow = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.isampler_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.isampler_cube = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.isampler_2d_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.isampler_3d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.usampler_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.usampler_cube = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.usampler_2d_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.usampler_3d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.sampler_2d_ms = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.isampler_2d_ms = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.usampler_2d_ms = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.image_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.image_cube = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.image_2d_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.image_3d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.iimage_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.iimage_cube = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.iimage_2d_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.iimage_3d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.uimage_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.uimage_cube = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.uimage_2d_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.uimage_3d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.types.atomic_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.array.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.array.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.array.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.array.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.array.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.array.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.array.sampler_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.array.sampler_2d_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.array.sampler_3d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.array.isampler_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.array.image_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.array.iimage_2d_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.array.atomic_uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.struct.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.struct.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.struct.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.struct.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.struct.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.struct.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.struct.sampler_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.struct.sampler_2d_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.struct.sampler_3d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.default_block.struct.isampler_2d = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.named_block.types.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.named_block.types.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.named_block.types.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.named_block.types.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.named_block.types.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.named_block.types.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.named_block.types.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.named_block.types.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.named_block.types.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.named_block.types.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.named_block.types.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.named_block.types.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.named_block.types.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.named_block.types.bvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.named_block.types.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.named_block.types.bvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.named_block.types.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.named_block.types.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.named_block.types.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.named_block.types.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.named_block.types.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.named_block.types.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.named_block.types.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.named_block.types.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.named_block.types.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.named_block.array.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.named_block.array.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.named_block.array.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.named_block.array.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.named_block.array.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.named_block.array.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.named_block.struct.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.named_block.struct.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.named_block.struct.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.named_block.struct.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.named_block.struct.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.named_block.struct.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.unnamed_block.basic_type.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.unnamed_block.basic_type.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.unnamed_block.basic_type.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.unnamed_block.basic_type.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.unnamed_block.basic_type.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.unnamed_block.basic_type.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.unnamed_block.array.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.unnamed_block.array.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.unnamed_block.array.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.unnamed_block.array.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.unnamed_block.array.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.unnamed_block.array.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.unnamed_block.struct.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.unnamed_block.struct.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.unnamed_block.struct.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.unnamed_block.struct.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.unnamed_block.struct.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.unnamed_block.struct.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.block_array.basic_type.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.block_array.basic_type.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.block_array.basic_type.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.block_array.basic_type.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.block_array.basic_type.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.block_array.basic_type.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.block_array.array.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.block_array.array.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.block_array.array.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.block_array.array.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.block_array.array.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.block_array.array.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.block_array.struct.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.block_array.struct.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.block_array.struct.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.block_array.struct.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.block_array.struct.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.type.block_array.struct.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.random.0 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.random.1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.random.2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.random.3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.random.4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.random.5 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.random.6 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.random.7 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.random.8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.random.9 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.random.10 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.random.11 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.random.12 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.random.13 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.random.14 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.random.15 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.random.16 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.random.17 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.random.18 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.random.19 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.random.20 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.random.21 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.random.22 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.random.23 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.random.24 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.random.25 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.random.26 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.random.27 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.random.28 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.random.29 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.random.30 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.random.31 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.random.32 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.random.33 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.random.34 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.random.35 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.random.36 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.random.37 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.random.38 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform.random.39 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform_block.resource_list.named_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform_block.resource_list.unnamed_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform_block.resource_list.block_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform_block.resource_list.block_array_single_element = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform_block.active_variables.named_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform_block.active_variables.unnamed_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform_block.active_variables.block_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform_block.buffer_binding.named_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform_block.buffer_binding.unnamed_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform_block.buffer_binding.block_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform_block.buffer_binding.named_block_explicit_binding = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform_block.buffer_binding.unnamed_block_explicit_binding = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform_block.buffer_binding.block_array_explicit_binding = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform_block.buffer_data_size.named_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform_block.buffer_data_size.unnamed_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform_block.buffer_data_size.block_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform_block.name_length.named_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform_block.name_length.unnamed_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform_block.name_length.block_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform_block.name_length.block_array_single_element = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform_block.referenced_by.compute.named_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform_block.referenced_by.compute.unnamed_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform_block.referenced_by.compute.block_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform_block.referenced_by.separable_vertex.named_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform_block.referenced_by.separable_vertex.unnamed_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform_block.referenced_by.separable_vertex.block_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform_block.referenced_by.separable_fragment.named_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform_block.referenced_by.separable_fragment.unnamed_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform_block.referenced_by.separable_fragment.block_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform_block.referenced_by.vertex_fragment.named_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform_block.referenced_by.vertex_fragment.unnamed_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform_block.referenced_by.vertex_fragment.block_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform_block.referenced_by.vertex_fragment_only_vertex.named_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform_block.referenced_by.vertex_fragment_only_vertex.unnamed_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform_block.referenced_by.vertex_fragment_only_vertex.block_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform_block.referenced_by.vertex_fragment_only_fragment.named_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform_block.referenced_by.vertex_fragment_only_fragment.unnamed_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.uniform_block.referenced_by.vertex_fragment_only_fragment.block_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.atomic_counter_buffer.resource_list = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.atomic_counter_buffer.active_variables = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.atomic_counter_buffer.buffer_binding = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.atomic_counter_buffer.buffer_data_size = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.atomic_counter_buffer.referenced_by_compute = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.atomic_counter_buffer.referenced_by_separable_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.atomic_counter_buffer.referenced_by_separable_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.atomic_counter_buffer.referenced_by_vertex_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.atomic_counter_buffer.referenced_by_vertex_fragment_only_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.atomic_counter_buffer.referenced_by_vertex_fragment_only_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.resource_list.vertex_fragment.empty = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.resource_list.vertex_fragment.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.resource_list.separable_vertex.empty = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.resource_list.separable_vertex.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.resource_list.separable_fragment.empty = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.resource_list.separable_fragment.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.resource_list.separable_fragment.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.resource_list.separable_fragment.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.resource_list.compute.empty = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.array_size.vertex_fragment.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.array_size.separable_vertex.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.array_size.separable_fragment.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.array_size.separable_fragment.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.array_size.separable_fragment.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.location.vertex_fragment.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.location.vertex_fragment.var_explicit_location = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.location.separable_vertex.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.location.separable_vertex.var_explicit_location = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.location.separable_fragment.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.location.separable_fragment.var_explicit_location = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.location.separable_fragment.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.location.separable_fragment.var_struct_explicit_location = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.location.separable_fragment.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.location.separable_fragment.var_array_explicit_location = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.name_length.vertex_fragment.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.name_length.separable_vertex.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.name_length.separable_fragment.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.name_length.separable_fragment.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.name_length.separable_fragment.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.referenced_by.referenced_by_vertex_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.referenced_by.referenced_by_separable_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.referenced_by.referenced_by_separable_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.vertex_fragment.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.vertex_fragment.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.vertex_fragment.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.vertex_fragment.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.vertex_fragment.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.vertex_fragment.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.vertex_fragment.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.vertex_fragment.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.vertex_fragment.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.vertex_fragment.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.vertex_fragment.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.vertex_fragment.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.vertex_fragment.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.vertex_fragment.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.vertex_fragment.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.vertex_fragment.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.vertex_fragment.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.vertex_fragment.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.vertex_fragment.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.vertex_fragment.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.vertex_fragment.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_vertex.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_vertex.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_vertex.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_vertex.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_vertex.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_vertex.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_vertex.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_vertex.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_vertex.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_vertex.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_vertex.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_vertex.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_vertex.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_vertex.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_vertex.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_vertex.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_vertex.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_vertex.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_vertex.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_vertex.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_vertex.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.basic_type.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.basic_type.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.basic_type.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.basic_type.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.basic_type.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.basic_type.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.basic_type.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.basic_type.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.basic_type.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.basic_type.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.basic_type.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.basic_type.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.basic_type.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.basic_type.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.basic_type.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.basic_type.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.basic_type.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.basic_type.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.basic_type.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.basic_type.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.basic_type.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.array.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.array.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.array.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.array.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.array.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.array.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.array.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.array.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.array.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.array.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.array.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.array.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.array.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.array.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.array.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.array.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.array.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.array.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.array.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.array.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.array.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.struct.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.struct.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.struct.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.struct.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.struct.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.struct.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.struct.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.struct.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.struct.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.struct.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.struct.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.struct.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.struct.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.struct.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.struct.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.struct.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.struct.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.struct.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.struct.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.struct.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_input.type.separable_fragment.struct.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.resource_list.vertex_fragment.empty = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.resource_list.vertex_fragment.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.resource_list.vertex_fragment.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.resource_list.separable_vertex.empty = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.resource_list.separable_vertex.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.resource_list.separable_vertex.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.resource_list.separable_vertex.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.resource_list.separable_fragment.empty = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.resource_list.separable_fragment.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.resource_list.separable_fragment.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.resource_list.compute.empty = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.array_size.vertex_fragment.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.array_size.vertex_fragment.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.array_size.separable_vertex.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.array_size.separable_vertex.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.array_size.separable_vertex.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.array_size.separable_fragment.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.array_size.separable_fragment.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.location.vertex_fragment.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.location.vertex_fragment.var_explicit_location = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.location.vertex_fragment.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.location.vertex_fragment.var_array_explicit_location = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.location.separable_vertex.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.location.separable_vertex.var_explicit_location = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.location.separable_vertex.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.location.separable_vertex.var_struct_explicit_location = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.location.separable_vertex.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.location.separable_vertex.var_array_explicit_location = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.location.separable_fragment.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.location.separable_fragment.var_explicit_location = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.location.separable_fragment.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.location.separable_fragment.var_array_explicit_location = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.name_length.vertex_fragment.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.name_length.vertex_fragment.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.name_length.separable_vertex.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.name_length.separable_vertex.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.name_length.separable_vertex.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.name_length.separable_fragment.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.name_length.separable_fragment.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.referenced_by.referenced_by_vertex_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.referenced_by.referenced_by_separable_vertex = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.referenced_by.referenced_by_separable_fragment = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.vertex_fragment.basic_type.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.vertex_fragment.basic_type.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.vertex_fragment.basic_type.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.vertex_fragment.basic_type.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.vertex_fragment.basic_type.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.vertex_fragment.basic_type.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.vertex_fragment.basic_type.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.vertex_fragment.basic_type.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.vertex_fragment.basic_type.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.vertex_fragment.basic_type.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.vertex_fragment.basic_type.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.vertex_fragment.basic_type.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.vertex_fragment.array.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.vertex_fragment.array.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.vertex_fragment.array.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.vertex_fragment.array.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.vertex_fragment.array.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.vertex_fragment.array.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.vertex_fragment.array.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.vertex_fragment.array.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.vertex_fragment.array.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.vertex_fragment.array.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.vertex_fragment.array.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.vertex_fragment.array.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.basic_type.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.basic_type.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.basic_type.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.basic_type.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.basic_type.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.basic_type.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.basic_type.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.basic_type.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.basic_type.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.basic_type.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.basic_type.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.basic_type.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.basic_type.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.basic_type.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.basic_type.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.basic_type.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.basic_type.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.basic_type.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.basic_type.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.basic_type.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.basic_type.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.array.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.array.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.array.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.array.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.array.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.array.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.array.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.array.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.array.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.array.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.array.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.array.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.array.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.array.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.array.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.array.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.array.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.array.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.array.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.array.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.array.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.struct.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.struct.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.struct.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.struct.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.struct.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.struct.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.struct.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.struct.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.struct.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.struct.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.struct.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.struct.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.struct.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.struct.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.struct.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.struct.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.struct.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.struct.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.struct.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.struct.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_vertex.struct.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_fragment.basic_type.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_fragment.basic_type.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_fragment.basic_type.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_fragment.basic_type.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_fragment.basic_type.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_fragment.basic_type.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_fragment.basic_type.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_fragment.basic_type.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_fragment.basic_type.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_fragment.basic_type.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_fragment.basic_type.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_fragment.basic_type.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_fragment.array.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_fragment.array.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_fragment.array.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_fragment.array.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_fragment.array.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_fragment.array.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_fragment.array.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_fragment.array.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_fragment.array.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_fragment.array.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_fragment.array.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.program_output.type.separable_fragment.array.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_fragment.builtin_gl_position = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_fragment.default_block_basic_type = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_fragment.default_block_struct_member = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_fragment.default_block_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.vertex_fragment.default_block_array_element = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_vertex.builtin_gl_position = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_vertex.default_block_basic_type = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_vertex.default_block_struct_member = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_vertex.default_block_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.resource_list.separable_vertex.default_block_array_element = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_fragment.builtin_gl_position = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_fragment.default_block_basic_type = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_fragment.default_block_struct_member = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_fragment.default_block_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.vertex_fragment.default_block_array_element = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_vertex.builtin_gl_position = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_vertex.default_block_basic_type = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_vertex.default_block_struct_member = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_vertex.default_block_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.array_size.separable_vertex.default_block_array_element = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_fragment.builtin_gl_position = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_fragment.default_block_basic_type = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_fragment.default_block_struct_member = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_fragment.default_block_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.vertex_fragment.default_block_array_element = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_vertex.builtin_gl_position = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_vertex.default_block_basic_type = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_vertex.default_block_struct_member = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_vertex.default_block_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.name_length.separable_vertex.default_block_array_element = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.builtin.gl_position = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.basic_type.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.basic_type.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.basic_type.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.basic_type.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.basic_type.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.basic_type.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.basic_type.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.basic_type.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.basic_type.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.basic_type.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.basic_type.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.basic_type.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.basic_type.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.basic_type.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.basic_type.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.basic_type.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.basic_type.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.basic_type.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.basic_type.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.basic_type.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.basic_type.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.array.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.whole_array.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.whole_array.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.whole_array.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.whole_array.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.whole_array.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.whole_array.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.whole_array.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.whole_array.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.whole_array.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.whole_array.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.whole_array.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.whole_array.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.whole_array.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.whole_array.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.whole_array.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.whole_array.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.whole_array.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.whole_array.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.whole_array.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.whole_array.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.whole_array.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.struct.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.struct.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.struct.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.struct.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.struct.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.struct.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.struct.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.struct.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.struct.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.struct.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.struct.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.struct.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.struct.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.struct.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.struct.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.struct.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.struct.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.struct.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.struct.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.struct.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.vertex_fragment.struct.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.builtin.gl_position = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.basic_type.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.basic_type.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.basic_type.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.basic_type.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.basic_type.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.basic_type.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.basic_type.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.basic_type.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.basic_type.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.basic_type.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.basic_type.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.basic_type.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.basic_type.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.basic_type.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.basic_type.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.basic_type.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.basic_type.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.basic_type.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.basic_type.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.basic_type.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.basic_type.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.array.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.whole_array.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.whole_array.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.whole_array.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.whole_array.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.whole_array.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.whole_array.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.whole_array.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.whole_array.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.whole_array.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.whole_array.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.whole_array.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.whole_array.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.whole_array.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.whole_array.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.whole_array.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.whole_array.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.whole_array.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.whole_array.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.whole_array.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.whole_array.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.whole_array.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.struct.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.struct.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.struct.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.struct.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.struct.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.struct.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.struct.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.struct.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.struct.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.struct.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.struct.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.struct.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.struct.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.struct.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.struct.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.struct.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.struct.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.struct.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.struct.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.struct.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.separable_vertex.struct.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.named_block.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.named_block.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.named_block.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.named_block.var_struct_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.named_block.var_struct_struct_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.named_block.var_array_struct_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.named_block.var_array_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.named_block.var_struct_array_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.named_block.var_array_array_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.named_block.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.named_block.var_struct_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.named_block.var_struct_struct_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.named_block.var_array_struct_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.named_block.var_array_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.named_block.var_struct_array_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.named_block.var_array_array_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.named_block.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.named_block.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.named_block.var_struct_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.named_block.var_struct_struct_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.named_block.var_array_struct_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.named_block.var_array_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.named_block.var_struct_array_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.named_block.var_array_array_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.named_block.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.named_block.var_struct_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.named_block.var_struct_struct_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.named_block.var_array_struct_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.named_block.var_array_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.named_block.var_struct_array_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.named_block.var_array_array_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.unnamed_block.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.unnamed_block.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.unnamed_block.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.unnamed_block.var_struct_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.unnamed_block.var_struct_struct_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.unnamed_block.var_array_struct_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.unnamed_block.var_array_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.unnamed_block.var_struct_array_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.unnamed_block.var_array_array_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.unnamed_block.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.unnamed_block.var_struct_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.unnamed_block.var_struct_struct_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.unnamed_block.var_array_struct_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.unnamed_block.var_array_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.unnamed_block.var_struct_array_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.unnamed_block.var_array_array_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.unnamed_block.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.unnamed_block.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.unnamed_block.var_struct_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.unnamed_block.var_struct_struct_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.unnamed_block.var_array_struct_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.unnamed_block.var_array_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.unnamed_block.var_struct_array_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.unnamed_block.var_array_array_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.unnamed_block.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.unnamed_block.var_struct_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.unnamed_block.var_struct_struct_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.unnamed_block.var_array_struct_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.unnamed_block.var_array_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.unnamed_block.var_struct_array_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.unnamed_block.var_array_array_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.block_array.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.block_array.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.block_array.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.block_array.var_struct_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.block_array.var_struct_struct_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.block_array.var_array_struct_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.block_array.var_array_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.block_array.var_struct_array_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.block_array.var_array_array_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.block_array.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.block_array.var_struct_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.block_array.var_struct_struct_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.block_array.var_array_struct_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.block_array.var_array_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.block_array.var_struct_array_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.block_array.var_array_array_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.block_array.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.block_array.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.block_array.var_struct_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.block_array.var_struct_struct_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.block_array.var_array_struct_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.block_array.var_array_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.block_array.var_struct_array_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.block_array.var_array_array_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.block_array.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.block_array.var_struct_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.block_array.var_struct_struct_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.block_array.var_array_struct_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.block_array.var_array_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.block_array.var_struct_array_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.resource_list.block_array.var_array_array_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.non_array.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.non_array.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.non_array.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.non_array.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.non_array.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.non_array.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.sized.types.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.sized.types.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.sized.types.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.sized.types.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.sized.types.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.sized.types.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.sized.types.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.sized.types.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.sized.types.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.sized.types.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.sized.types.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.sized.types.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.sized.types.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.sized.types.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.sized.aggregates.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.sized.aggregates.float_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.sized.aggregates.float_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.sized.aggregates.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.sized.aggregates.float_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.sized.aggregates.float_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.sized.aggregates.bool_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.sized.aggregates.bool_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.sized.aggregates.bvec3_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.sized.aggregates.bvec3_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.sized.aggregates.bvec3_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.sized.aggregates.bvec3_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.sized.aggregates.bvec3_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.sized.aggregates.bvec3_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.sized.aggregates.vec4_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.sized.aggregates.vec4_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.sized.aggregates.vec4_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.sized.aggregates.vec4_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.sized.aggregates.vec4_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.sized.aggregates.vec4_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.sized.aggregates.ivec2_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.sized.aggregates.ivec2_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.sized.aggregates.ivec2_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.sized.aggregates.ivec2_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.sized.aggregates.ivec2_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.sized.aggregates.ivec2_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.unsized.types.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.unsized.types.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.unsized.types.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.unsized.types.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.unsized.types.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.unsized.types.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.unsized.aggregates.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.unsized.aggregates.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.unsized.aggregates.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.unsized.aggregates.bvec3_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.unsized.aggregates.bvec3_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.unsized.aggregates.vec4_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.unsized.aggregates.vec4_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.unsized.aggregates.ivec2_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.named_block.unsized.aggregates.ivec2_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.unnamed_block.sized.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.unnamed_block.sized.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.unnamed_block.sized.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.unnamed_block.sized.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.unnamed_block.sized.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.unnamed_block.sized.bvec3_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.unnamed_block.sized.bvec3_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.unnamed_block.sized.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.unnamed_block.sized.vec4_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.unnamed_block.sized.vec4_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.unnamed_block.sized.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.unnamed_block.sized.ivec2_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.unnamed_block.sized.ivec2_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.unnamed_block.unsized.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.unnamed_block.unsized.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.unnamed_block.unsized.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.unnamed_block.unsized.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.unnamed_block.unsized.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.unnamed_block.unsized.bvec3_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.unnamed_block.unsized.bvec3_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.unnamed_block.unsized.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.unnamed_block.unsized.vec4_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.unnamed_block.unsized.vec4_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.unnamed_block.unsized.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.unnamed_block.unsized.ivec2_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.unnamed_block.unsized.ivec2_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.block_array.sized.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.block_array.sized.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.block_array.sized.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.block_array.sized.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.block_array.sized.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.block_array.sized.bvec3_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.block_array.sized.bvec3_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.block_array.sized.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.block_array.sized.vec4_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.block_array.sized.vec4_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.block_array.sized.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.block_array.sized.ivec2_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.block_array.sized.ivec2_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.block_array.unsized.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.block_array.unsized.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.block_array.unsized.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.block_array.unsized.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.block_array.unsized.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.block_array.unsized.bvec3_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.block_array.unsized.bvec3_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.block_array.unsized.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.block_array.unsized.vec4_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.block_array.unsized.vec4_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.block_array.unsized.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.block_array.unsized.ivec2_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_size.block_array.unsized.ivec2_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.non_array.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.non_array.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.non_array.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.non_array.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.non_array.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.non_array.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.sized.types.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.sized.types.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.sized.types.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.sized.types.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.sized.types.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.sized.types.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.sized.types.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.sized.types.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.sized.types.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.sized.types.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.sized.types.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.sized.types.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.sized.types.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.sized.types.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.sized.aggregates.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.sized.aggregates.float_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.sized.aggregates.float_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.sized.aggregates.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.sized.aggregates.float_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.sized.aggregates.float_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.sized.aggregates.bool_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.sized.aggregates.bool_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.sized.aggregates.bvec3_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.sized.aggregates.bvec3_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.sized.aggregates.bvec3_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.sized.aggregates.bvec3_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.sized.aggregates.bvec3_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.sized.aggregates.bvec3_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.sized.aggregates.vec4_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.sized.aggregates.vec4_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.sized.aggregates.vec4_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.sized.aggregates.vec4_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.sized.aggregates.vec4_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.sized.aggregates.vec4_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.sized.aggregates.ivec2_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.sized.aggregates.ivec2_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.sized.aggregates.ivec2_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.sized.aggregates.ivec2_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.sized.aggregates.ivec2_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.sized.aggregates.ivec2_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.unsized.types.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.unsized.types.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.unsized.types.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.unsized.types.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.unsized.types.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.unsized.types.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.unsized.aggregates.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.unsized.aggregates.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.unsized.aggregates.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.unsized.aggregates.bvec3_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.unsized.aggregates.bvec3_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.unsized.aggregates.vec4_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.unsized.aggregates.vec4_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.unsized.aggregates.ivec2_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.named_block.unsized.aggregates.ivec2_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.unnamed_block.sized.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.unnamed_block.sized.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.unnamed_block.sized.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.unnamed_block.sized.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.unnamed_block.sized.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.unnamed_block.sized.bvec3_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.unnamed_block.sized.bvec3_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.unnamed_block.sized.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.unnamed_block.sized.vec4_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.unnamed_block.sized.vec4_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.unnamed_block.sized.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.unnamed_block.sized.ivec2_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.unnamed_block.sized.ivec2_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.unnamed_block.unsized.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.unnamed_block.unsized.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.unnamed_block.unsized.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.unnamed_block.unsized.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.unnamed_block.unsized.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.unnamed_block.unsized.bvec3_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.unnamed_block.unsized.bvec3_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.unnamed_block.unsized.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.unnamed_block.unsized.vec4_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.unnamed_block.unsized.vec4_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.unnamed_block.unsized.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.unnamed_block.unsized.ivec2_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.unnamed_block.unsized.ivec2_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.block_array.sized.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.block_array.sized.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.block_array.sized.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.block_array.sized.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.block_array.sized.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.block_array.sized.bvec3_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.block_array.sized.bvec3_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.block_array.sized.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.block_array.sized.vec4_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.block_array.sized.vec4_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.block_array.sized.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.block_array.sized.ivec2_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.block_array.sized.ivec2_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.block_array.unsized.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.block_array.unsized.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.block_array.unsized.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.block_array.unsized.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.block_array.unsized.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.block_array.unsized.bvec3_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.block_array.unsized.bvec3_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.block_array.unsized.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.block_array.unsized.vec4_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.block_array.unsized.vec4_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.block_array.unsized.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.block_array.unsized.ivec2_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.array_stride.block_array.unsized.ivec2_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.block_index.named_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.block_index.unnamed_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.block_index.block_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block.types.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block.types.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block.types.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block.types.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block.types.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block.types.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block.types.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block.types.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block.types.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block.types.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block.types.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block.no_qualifier.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block.no_qualifier.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block.no_qualifier.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block.no_qualifier.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block.no_qualifier.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block.no_qualifier.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block.no_qualifier.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block.no_qualifier.var_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block.column_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block.column_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block.column_major.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block.column_major.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block.column_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block.column_major.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block.column_major.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block.column_major.var_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block.row_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block.row_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block.row_major.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block.row_major.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block.row_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block.row_major.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block.row_major.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block.row_major.var_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_row_major.no_qualifier.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_row_major.no_qualifier.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_row_major.no_qualifier.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_row_major.no_qualifier.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_row_major.no_qualifier.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_row_major.no_qualifier.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_row_major.no_qualifier.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_row_major.no_qualifier.var_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_row_major.column_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_row_major.column_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_row_major.column_major.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_row_major.column_major.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_row_major.column_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_row_major.column_major.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_row_major.column_major.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_row_major.column_major.var_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_row_major.row_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_row_major.row_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_row_major.row_major.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_row_major.row_major.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_row_major.row_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_row_major.row_major.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_row_major.row_major.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_row_major.row_major.var_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_col_major.no_qualifier.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_col_major.no_qualifier.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_col_major.no_qualifier.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_col_major.no_qualifier.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_col_major.no_qualifier.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_col_major.no_qualifier.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_col_major.no_qualifier.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_col_major.no_qualifier.var_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_col_major.column_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_col_major.column_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_col_major.column_major.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_col_major.column_major.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_col_major.column_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_col_major.column_major.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_col_major.column_major.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_col_major.column_major.var_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_col_major.row_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_col_major.row_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_col_major.row_major.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_col_major.row_major.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_col_major.row_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_col_major.row_major.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_col_major.row_major.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.named_block_col_major.row_major.var_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block.no_qualifier.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block.no_qualifier.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block.no_qualifier.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block.no_qualifier.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block.no_qualifier.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block.no_qualifier.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block.no_qualifier.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block.no_qualifier.var_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block.column_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block.column_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block.column_major.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block.column_major.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block.column_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block.column_major.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block.column_major.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block.column_major.var_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block.row_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block.row_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block.row_major.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block.row_major.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block.row_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block.row_major.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block.row_major.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block.row_major.var_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_row_major.no_qualifier.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_row_major.no_qualifier.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_row_major.no_qualifier.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_row_major.no_qualifier.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_row_major.no_qualifier.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_row_major.no_qualifier.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_row_major.no_qualifier.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_row_major.no_qualifier.var_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_row_major.column_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_row_major.column_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_row_major.column_major.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_row_major.column_major.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_row_major.column_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_row_major.column_major.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_row_major.column_major.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_row_major.column_major.var_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_row_major.row_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_row_major.row_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_row_major.row_major.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_row_major.row_major.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_row_major.row_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_row_major.row_major.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_row_major.row_major.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_row_major.row_major.var_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_col_major.no_qualifier.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_col_major.no_qualifier.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_col_major.no_qualifier.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_col_major.no_qualifier.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_col_major.no_qualifier.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_col_major.no_qualifier.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_col_major.no_qualifier.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_col_major.no_qualifier.var_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_col_major.column_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_col_major.column_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_col_major.column_major.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_col_major.column_major.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_col_major.column_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_col_major.column_major.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_col_major.column_major.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_col_major.column_major.var_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_col_major.row_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_col_major.row_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_col_major.row_major.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_col_major.row_major.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_col_major.row_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_col_major.row_major.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_col_major.row_major.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.is_row_major.unnamed_block_col_major.row_major.var_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block.types.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block.types.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block.types.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block.types.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block.types.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block.types.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block.types.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block.types.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block.types.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block.types.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block.types.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block.no_qualifier.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block.no_qualifier.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block.no_qualifier.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block.no_qualifier.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block.no_qualifier.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block.no_qualifier.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block.no_qualifier.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block.no_qualifier.var_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block.column_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block.column_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block.column_major.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block.column_major.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block.column_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block.column_major.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block.column_major.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block.column_major.var_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block.row_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block.row_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block.row_major.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block.row_major.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block.row_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block.row_major.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block.row_major.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block.row_major.var_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_row_major.no_qualifier.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_row_major.no_qualifier.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_row_major.no_qualifier.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_row_major.no_qualifier.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_row_major.no_qualifier.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_row_major.no_qualifier.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_row_major.no_qualifier.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_row_major.no_qualifier.var_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_row_major.column_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_row_major.column_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_row_major.column_major.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_row_major.column_major.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_row_major.column_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_row_major.column_major.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_row_major.column_major.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_row_major.column_major.var_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_row_major.row_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_row_major.row_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_row_major.row_major.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_row_major.row_major.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_row_major.row_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_row_major.row_major.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_row_major.row_major.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_row_major.row_major.var_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_col_major.no_qualifier.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_col_major.no_qualifier.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_col_major.no_qualifier.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_col_major.no_qualifier.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_col_major.no_qualifier.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_col_major.no_qualifier.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_col_major.no_qualifier.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_col_major.no_qualifier.var_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_col_major.column_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_col_major.column_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_col_major.column_major.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_col_major.column_major.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_col_major.column_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_col_major.column_major.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_col_major.column_major.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_col_major.column_major.var_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_col_major.row_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_col_major.row_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_col_major.row_major.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_col_major.row_major.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_col_major.row_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_col_major.row_major.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_col_major.row_major.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.named_block_col_major.row_major.var_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block.no_qualifier.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block.no_qualifier.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block.no_qualifier.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block.no_qualifier.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block.no_qualifier.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block.no_qualifier.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block.no_qualifier.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block.no_qualifier.var_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block.column_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block.column_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block.column_major.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block.column_major.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block.column_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block.column_major.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block.column_major.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block.column_major.var_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block.row_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block.row_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block.row_major.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block.row_major.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block.row_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block.row_major.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block.row_major.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block.row_major.var_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_row_major.no_qualifier.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_row_major.no_qualifier.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_row_major.no_qualifier.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_row_major.no_qualifier.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_row_major.no_qualifier.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_row_major.no_qualifier.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_row_major.no_qualifier.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_row_major.no_qualifier.var_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_row_major.column_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_row_major.column_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_row_major.column_major.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_row_major.column_major.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_row_major.column_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_row_major.column_major.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_row_major.column_major.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_row_major.column_major.var_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_row_major.row_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_row_major.row_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_row_major.row_major.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_row_major.row_major.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_row_major.row_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_row_major.row_major.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_row_major.row_major.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_row_major.row_major.var_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_col_major.no_qualifier.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_col_major.no_qualifier.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_col_major.no_qualifier.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_col_major.no_qualifier.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_col_major.no_qualifier.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_col_major.no_qualifier.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_col_major.no_qualifier.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_col_major.no_qualifier.var_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_col_major.column_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_col_major.column_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_col_major.column_major.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_col_major.column_major.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_col_major.column_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_col_major.column_major.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_col_major.column_major.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_col_major.column_major.var_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_col_major.row_major.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_col_major.row_major.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_col_major.row_major.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_col_major.row_major.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_col_major.row_major.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_col_major.row_major.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_col_major.row_major.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.matrix_stride.unnamed_block_col_major.row_major.var_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.named_block.sized.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.named_block.sized.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.named_block.sized.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.named_block.sized.var_struct_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.named_block.sized.var_array_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.named_block.sized.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.named_block.sized.var_struct_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.named_block.sized.var_array_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.named_block.sized.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.named_block.sized.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.named_block.sized.var_struct_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.named_block.sized.var_array_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.named_block.sized.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.named_block.sized.var_struct_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.named_block.sized.var_array_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.named_block.unsized.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.named_block.unsized.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.named_block.unsized.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.named_block.unsized.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.named_block.unsized.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.named_block.unsized.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.named_block.unsized.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.unnamed_block.sized.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.unnamed_block.sized.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.unnamed_block.sized.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.unnamed_block.sized.var_struct_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.unnamed_block.sized.var_array_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.unnamed_block.sized.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.unnamed_block.sized.var_struct_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.unnamed_block.sized.var_array_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.unnamed_block.sized.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.unnamed_block.sized.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.unnamed_block.sized.var_struct_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.unnamed_block.sized.var_array_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.unnamed_block.sized.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.unnamed_block.sized.var_struct_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.unnamed_block.sized.var_array_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.unnamed_block.unsized.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.unnamed_block.unsized.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.unnamed_block.unsized.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.unnamed_block.unsized.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.unnamed_block.unsized.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.unnamed_block.unsized.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.unnamed_block.unsized.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.block_array.sized.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.block_array.sized.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.block_array.sized.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.block_array.sized.var_struct_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.block_array.sized.var_array_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.block_array.sized.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.block_array.sized.var_struct_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.block_array.sized.var_array_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.block_array.sized.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.block_array.sized.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.block_array.sized.var_struct_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.block_array.sized.var_array_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.block_array.sized.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.block_array.sized.var_struct_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.block_array.sized.var_array_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.block_array.unsized.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.block_array.unsized.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.block_array.unsized.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.block_array.unsized.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.block_array.unsized.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.block_array.unsized.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.name_length.block_array.unsized.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.named_block.sized.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.named_block.sized.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.named_block.sized.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.named_block.sized.var_struct_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.named_block.sized.var_array_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.named_block.sized.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.named_block.sized.var_struct_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.named_block.sized.var_array_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.named_block.sized.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.named_block.sized.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.named_block.sized.var_struct_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.named_block.sized.var_array_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.named_block.sized.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.named_block.sized.var_struct_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.named_block.sized.var_array_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.named_block.unsized.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.named_block.unsized.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.named_block.unsized.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.named_block.unsized.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.named_block.unsized.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.named_block.unsized.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.named_block.unsized.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.unnamed_block.sized.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.unnamed_block.sized.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.unnamed_block.sized.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.unnamed_block.sized.var_struct_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.unnamed_block.sized.var_array_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.unnamed_block.sized.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.unnamed_block.sized.var_struct_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.unnamed_block.sized.var_array_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.unnamed_block.sized.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.unnamed_block.sized.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.unnamed_block.sized.var_struct_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.unnamed_block.sized.var_array_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.unnamed_block.sized.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.unnamed_block.sized.var_struct_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.unnamed_block.sized.var_array_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.unnamed_block.unsized.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.unnamed_block.unsized.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.unnamed_block.unsized.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.unnamed_block.unsized.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.unnamed_block.unsized.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.unnamed_block.unsized.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.unnamed_block.unsized.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.block_array.sized.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.block_array.sized.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.block_array.sized.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.block_array.sized.var_struct_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.block_array.sized.var_array_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.block_array.sized.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.block_array.sized.var_struct_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.block_array.sized.var_array_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.block_array.sized.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.block_array.sized.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.block_array.sized.var_struct_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.block_array.sized.var_array_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.block_array.sized.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.block_array.sized.var_struct_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.block_array.sized.var_array_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.block_array.unsized.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.block_array.unsized.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.block_array.unsized.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.block_array.unsized.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.block_array.unsized.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.block_array.unsized.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.offset.block_array.unsized.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.compute.named_block.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.compute.named_block.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.compute.named_block.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.compute.named_block.float_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.compute.named_block.float_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.compute.named_block.float_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.compute.named_block.float_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.compute.named_block.float_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.compute.named_block.float_unsized_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.compute.unnamed_block.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.compute.unnamed_block.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.compute.unnamed_block.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.compute.block_array.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.compute.block_array.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.compute.block_array.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.separable_vertex.named_block.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.separable_vertex.named_block.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.separable_vertex.named_block.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.separable_vertex.named_block.float_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.separable_vertex.named_block.float_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.separable_vertex.named_block.float_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.separable_vertex.named_block.float_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.separable_vertex.named_block.float_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.separable_vertex.named_block.float_unsized_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.separable_vertex.unnamed_block.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.separable_vertex.unnamed_block.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.separable_vertex.unnamed_block.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.separable_vertex.block_array.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.separable_vertex.block_array.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.separable_vertex.block_array.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.separable_fragment.named_block.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.separable_fragment.named_block.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.separable_fragment.named_block.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.separable_fragment.named_block.float_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.separable_fragment.named_block.float_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.separable_fragment.named_block.float_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.separable_fragment.named_block.float_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.separable_fragment.named_block.float_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.separable_fragment.named_block.float_unsized_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.separable_fragment.unnamed_block.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.separable_fragment.unnamed_block.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.separable_fragment.unnamed_block.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.separable_fragment.block_array.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.separable_fragment.block_array.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.separable_fragment.block_array.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.vertex_fragment.named_block.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.vertex_fragment.named_block.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.vertex_fragment.named_block.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.vertex_fragment.unnamed_block.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.vertex_fragment.unnamed_block.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.vertex_fragment.unnamed_block.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.vertex_fragment.block_array.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.vertex_fragment.block_array.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.vertex_fragment.block_array.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.vertex_fragment_only_vertex.named_block.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.vertex_fragment_only_vertex.named_block.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.vertex_fragment_only_vertex.named_block.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.vertex_fragment_only_vertex.unnamed_block.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.vertex_fragment_only_vertex.unnamed_block.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.vertex_fragment_only_vertex.unnamed_block.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.vertex_fragment_only_vertex.block_array.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.vertex_fragment_only_vertex.block_array.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.vertex_fragment_only_vertex.block_array.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.vertex_fragment_only_fragment.named_block.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.vertex_fragment_only_fragment.named_block.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.vertex_fragment_only_fragment.named_block.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.vertex_fragment_only_fragment.unnamed_block.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.vertex_fragment_only_fragment.unnamed_block.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.vertex_fragment_only_fragment.unnamed_block.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.vertex_fragment_only_fragment.block_array.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.vertex_fragment_only_fragment.block_array.float_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.referenced_by.vertex_fragment_only_fragment.block_array.float_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.named_block.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.named_block.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.named_block.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.named_block.var_struct_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.named_block.var_array_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.named_block.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.named_block.var_struct_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.named_block.var_array_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.named_block.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.named_block.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.named_block.var_struct_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.named_block.var_array_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.named_block.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.named_block.var_struct_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.named_block.var_array_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.named_block.var_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.named_block.var_struct_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.named_block.var_struct_struct_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.named_block.var_array_struct_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.named_block.var_array_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.named_block.var_struct_array_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.named_block.var_array_array_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.unnamed_block.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.unnamed_block.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.unnamed_block.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.unnamed_block.var_struct_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.unnamed_block.var_array_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.unnamed_block.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.unnamed_block.var_struct_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.unnamed_block.var_array_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.unnamed_block.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.unnamed_block.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.unnamed_block.var_struct_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.unnamed_block.var_array_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.unnamed_block.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.unnamed_block.var_struct_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.unnamed_block.var_array_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.unnamed_block.var_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.unnamed_block.var_struct_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.unnamed_block.var_struct_struct_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.unnamed_block.var_array_struct_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.unnamed_block.var_array_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.unnamed_block.var_struct_array_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.unnamed_block.var_array_array_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.block_array.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.block_array.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.block_array.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.block_array.var_struct_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.block_array.var_array_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.block_array.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.block_array.var_struct_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.block_array.var_array_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.block_array.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.block_array.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.block_array.var_struct_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.block_array.var_array_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.block_array.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.block_array.var_struct_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.block_array.var_array_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.block_array.var_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.block_array.var_struct_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.block_array.var_struct_struct_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.block_array.var_array_struct_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.block_array.var_array_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.block_array.var_struct_array_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_size.block_array.var_array_array_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.named_block.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.named_block.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.named_block.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.named_block.var_struct_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.named_block.var_array_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.named_block.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.named_block.var_struct_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.named_block.var_array_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.named_block.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.named_block.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.named_block.var_struct_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.named_block.var_array_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.named_block.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.named_block.var_struct_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.named_block.var_array_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.named_block.var_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.named_block.var_struct_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.named_block.var_struct_struct_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.named_block.var_array_struct_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.named_block.var_array_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.named_block.var_struct_array_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.named_block.var_array_array_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.unnamed_block.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.unnamed_block.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.unnamed_block.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.unnamed_block.var_struct_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.unnamed_block.var_array_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.unnamed_block.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.unnamed_block.var_struct_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.unnamed_block.var_array_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.unnamed_block.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.unnamed_block.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.unnamed_block.var_struct_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.unnamed_block.var_array_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.unnamed_block.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.unnamed_block.var_struct_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.unnamed_block.var_array_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.unnamed_block.var_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.unnamed_block.var_struct_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.unnamed_block.var_struct_struct_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.unnamed_block.var_array_struct_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.unnamed_block.var_array_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.unnamed_block.var_struct_array_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.unnamed_block.var_array_array_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.block_array.var = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.block_array.var_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.block_array.var_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.block_array.var_struct_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.block_array.var_array_struct_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.block_array.var_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.block_array.var_struct_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.block_array.var_array_array_struct = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.block_array.var_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.block_array.var_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.block_array.var_struct_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.block_array.var_array_struct_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.block_array.var_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.block_array.var_struct_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.block_array.var_array_array_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.block_array.var_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.block_array.var_struct_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.block_array.var_struct_struct_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.block_array.var_array_struct_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.block_array.var_array_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.block_array.var_struct_array_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.top_level_array_stride.block_array.var_array_array_unsized_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.basic_type.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.basic_type.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.basic_type.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.basic_type.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.basic_type.vec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.basic_type.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.basic_type.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.basic_type.ivec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.basic_type.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.basic_type.ivec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.basic_type.uvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.basic_type.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.basic_type.uvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.basic_type.bvec2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.basic_type.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.basic_type.bvec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.basic_type.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.basic_type.mat2x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.basic_type.mat2x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.basic_type.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.basic_type.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.basic_type.mat3x4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.basic_type.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.basic_type.mat4x3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.basic_type.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.array.basic_type.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.array.basic_type.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.array.basic_type.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.array.basic_type.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.array.basic_type.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.array.basic_type.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.array.basic_type.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.array.basic_type.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.array.basic_type.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.array.basic_type.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.array.basic_type.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.array.basic_type.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.array.basic_type.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.array.basic_type.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.array.array.basic_type.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.array.array.basic_type.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.array.array.basic_type.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.array.array.basic_type.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.array.array.basic_type.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.array.array.basic_type.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.array.array.array.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.array.array.struct.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.array.struct.basic_type.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.array.struct.basic_type.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.array.struct.basic_type.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.array.struct.basic_type.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.array.struct.basic_type.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.array.struct.basic_type.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.array.struct.array.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.array.struct.struct.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.struct.basic_type.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.struct.basic_type.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.struct.basic_type.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.struct.basic_type.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.struct.basic_type.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.struct.basic_type.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.struct.basic_type.ivec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.struct.basic_type.uvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.struct.basic_type.bvec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.struct.basic_type.mat2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.struct.basic_type.mat3x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.struct.basic_type.mat3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.struct.basic_type.mat4x2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.struct.basic_type.mat4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.struct.array.basic_type.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.struct.array.basic_type.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.struct.array.basic_type.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.struct.array.basic_type.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.struct.array.basic_type.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.struct.array.basic_type.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.struct.array.array.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.struct.array.struct.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.struct.struct.basic_type.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.struct.struct.basic_type.int = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.struct.struct.basic_type.uint = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.struct.struct.basic_type.bool = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.struct.struct.basic_type.vec3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.struct.struct.basic_type.vec4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.struct.struct.array.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.type.struct.struct.struct.float = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.random.0 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.random.1 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.random.2 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.random.3 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.random.4 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.random.5 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.random.6 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.random.7 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.random.8 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.random.9 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.random.10 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.random.11 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.random.12 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.random.13 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.random.14 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.random.15 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.random.16 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.random.17 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.random.18 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.random.19 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.random.20 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.random.21 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.random.22 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.random.23 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.random.24 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.random.25 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.random.26 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.random.27 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.random.28 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.random.29 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.random.30 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.random.31 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.random.32 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.random.33 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.random.34 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.random.35 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.random.36 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.random.37 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.random.38 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.buffer_variable.random.39 = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.shader_storage_block.resource_list.named_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.shader_storage_block.resource_list.unnamed_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.shader_storage_block.resource_list.block_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.shader_storage_block.resource_list.block_array_single_element = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.shader_storage_block.active_variables.named_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.shader_storage_block.active_variables.unnamed_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.shader_storage_block.active_variables.block_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.shader_storage_block.buffer_binding.named_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.shader_storage_block.buffer_binding.unnamed_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.shader_storage_block.buffer_binding.block_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.shader_storage_block.buffer_binding.named_block_explicit_binding = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.shader_storage_block.buffer_binding.unnamed_block_explicit_binding = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.shader_storage_block.buffer_binding.block_array_explicit_binding = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.shader_storage_block.buffer_data_size.named_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.shader_storage_block.buffer_data_size.unnamed_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.shader_storage_block.buffer_data_size.block_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.shader_storage_block.name_length.named_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.shader_storage_block.name_length.unnamed_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.shader_storage_block.name_length.block_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.shader_storage_block.name_length.block_array_single_element = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.shader_storage_block.referenced_by.compute.named_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.shader_storage_block.referenced_by.compute.unnamed_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.shader_storage_block.referenced_by.compute.block_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.shader_storage_block.referenced_by.separable_vertex.named_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.shader_storage_block.referenced_by.separable_vertex.unnamed_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.shader_storage_block.referenced_by.separable_vertex.block_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.shader_storage_block.referenced_by.separable_fragment.named_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.shader_storage_block.referenced_by.separable_fragment.unnamed_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.shader_storage_block.referenced_by.separable_fragment.block_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.shader_storage_block.referenced_by.vertex_fragment.named_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.shader_storage_block.referenced_by.vertex_fragment.unnamed_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.shader_storage_block.referenced_by.vertex_fragment.block_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.shader_storage_block.referenced_by.vertex_fragment_only_vertex.named_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.shader_storage_block.referenced_by.vertex_fragment_only_vertex.unnamed_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.shader_storage_block.referenced_by.vertex_fragment_only_vertex.block_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.shader_storage_block.referenced_by.vertex_fragment_only_fragment.named_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.shader_storage_block.referenced_by.vertex_fragment_only_fragment.unnamed_block = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.program_interface_query.shader_storage_block.referenced_by.vertex_fragment_only_fragment.block_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.sampler.sampler2d.vertex_binding_single = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.sampler.sampler2d.vertex_binding_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.sampler.sampler2d.vertex_binding_multiple = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.sampler.sampler2d.vertex_binding_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.sampler.sampler2d.vertex_binding_max_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.sampler.sampler2d.fragment_binding_single = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.sampler.sampler2d.fragment_binding_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.sampler.sampler2d.fragment_binding_multiple = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.sampler.sampler2d.fragment_binding_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.sampler.sampler2d.fragment_binding_max_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.sampler.sampler3d.vertex_binding_single = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.sampler.sampler3d.vertex_binding_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.sampler.sampler3d.vertex_binding_multiple = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.sampler.sampler3d.vertex_binding_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.sampler.sampler3d.vertex_binding_max_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.sampler.sampler3d.fragment_binding_single = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.sampler.sampler3d.fragment_binding_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.sampler.sampler3d.fragment_binding_multiple = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.sampler.sampler3d.fragment_binding_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.sampler.sampler3d.fragment_binding_max_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_single = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_multiple = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_max_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.ubo.fragment_binding_single = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.ubo.fragment_binding_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.ubo.fragment_binding_multiple = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.ubo.fragment_binding_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.ubo.fragment_binding_max_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.ssbo.vertex_binding_single = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.ssbo.vertex_binding_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.ssbo.vertex_binding_multiple = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.ssbo.vertex_binding_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.ssbo.vertex_binding_max_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.ssbo.fragment_binding_single = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.ssbo.fragment_binding_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.ssbo.fragment_binding_multiple = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.ssbo.fragment_binding_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.ssbo.fragment_binding_max_array = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.image.image2d.vertex_binding_single = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.image.image2d.vertex_binding_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.image.image2d.vertex_binding_multiple = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.image.image2d.fragment_binding_single = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.image.image2d.fragment_binding_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.image.image2d.fragment_binding_multiple = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.image.image3d.vertex_binding_single = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.image.image3d.vertex_binding_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.image.image3d.vertex_binding_multiple = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.image.image3d.fragment_binding_single = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.image.image3d.fragment_binding_max = FAIL
-1442 DEBUG RELEASE : dEQP-GLES31.functional.layout_binding.image.image3d.fragment_binding_multiple = FAIL
+1442 DEBUG : dEQP_GLES31.* = FAIL
+1442 RELEASE : dEQP_GLES31.* = FAIL
diff --git a/gfx/angle/src/tests/deqp_support/deqp_gles3_test_expectations.txt b/gfx/angle/src/tests/deqp_support/deqp_gles3_test_expectations.txt
index da30e4faa..f47fe8339 100755
--- a/gfx/angle/src/tests/deqp_support/deqp_gles3_test_expectations.txt
+++ b/gfx/angle/src/tests/deqp_support/deqp_gles3_test_expectations.txt
@@ -56,6 +56,22 @@
// TODO(jmadill): Find why this fails when run in a certain sequence, but not singly.
1098 WIN : dEQP-GLES3.functional.uniform_api.random.50 = FAIL
+// Caused by a D3D compiler bug
+1448 WIN : dEQP-GLES3.functional.shaders.loops.for_constant_iterations.nested_sequence_vertex = FAIL
+1448 WIN : dEQP-GLES3.functional.shaders.loops.for_constant_iterations.nested_sequence_fragment = FAIL
+1448 WIN : dEQP-GLES3.functional.shaders.loops.for_constant_iterations.nested_tricky_dataflow_1_vertex = FAIL
+1448 WIN : dEQP-GLES3.functional.shaders.loops.for_constant_iterations.nested_tricky_dataflow_1_fragment = FAIL
+1448 WIN : dEQP-GLES3.functional.shaders.loops.for_constant_iterations.nested_tricky_dataflow_2_vertex = FAIL
+1448 WIN : dEQP-GLES3.functional.shaders.loops.for_constant_iterations.nested_tricky_dataflow_2_fragment = FAIL
+1448 WIN : dEQP-GLES3.functional.shaders.loops.while_constant_iterations.nested_tricky_dataflow_1_vertex = FAIL
+1448 WIN : dEQP-GLES3.functional.shaders.loops.while_constant_iterations.nested_tricky_dataflow_1_fragment = FAIL
+1448 WIN : dEQP-GLES3.functional.shaders.loops.while_constant_iterations.nested_tricky_dataflow_2_vertex = FAIL
+1448 WIN : dEQP-GLES3.functional.shaders.loops.while_constant_iterations.nested_tricky_dataflow_2_fragment = FAIL
+1448 WIN : dEQP-GLES3.functional.shaders.loops.do_while_constant_iterations.nested_tricky_dataflow_1_vertex = FAIL
+1448 WIN : dEQP-GLES3.functional.shaders.loops.do_while_constant_iterations.nested_tricky_dataflow_1_fragment = FAIL
+1448 WIN : dEQP-GLES3.functional.shaders.loops.do_while_constant_iterations.nested_tricky_dataflow_2_vertex = FAIL
+1448 WIN : dEQP-GLES3.functional.shaders.loops.do_while_constant_iterations.nested_tricky_dataflow_2_fragment = FAIL
+
// Missing the SampleCmp instruction in vertex shaders.
1435 WIN : dEQP-GLES3.functional.shaders.texture_functions.texturelod.sampler2dshadow_vertex = FAIL
1435 WIN : dEQP-GLES3.functional.shaders.texture_functions.texturelodoffset.sampler2dshadow_vertex = FAIL
@@ -163,6 +179,7 @@
1096 WIN : dEQP-GLES3.functional.fragment_ops.blend.fbo_srgb.equation_src_func_dst_func.reverse_subtract_one_minus_constant_alpha_one_minus_constant_color = FAIL
1096 WIN : dEQP-GLES3.functional.fragment_ops.random.* = FAIL
1096 WIN : dEQP-GLES3.functional.fragment_ops.interaction.basic_shader.* = FAIL
+1097 WIN : dEQP-GLES3.functional.fbo.color.repeated_clear.sample.tex2d.r11f_g11f_b10f = FAIL
1098 WIN : dEQP-GLES3.functional.uniform_api.random.8 = FAIL
1098 WIN : dEQP-GLES3.functional.uniform_api.random.81 = FAIL
1101 WIN : dEQP-GLES3.functional.polygon_offset.fixed16_render_with_units = FAIL
@@ -219,6 +236,7 @@
1323 LINUX : dEQP-GLES3.functional.fbo.depth.depth_test_clamp.depth32f_stencil8 = FAIL
1323 LINUX : dEQP-GLES3.functional.fbo.depth.depth_write_clamp.depth_component32f = FAIL
1323 LINUX : dEQP-GLES3.functional.fbo.depth.depth_write_clamp.depth32f_stencil8 = FAIL
+1323 LINUX : dEQP-GLES3.functional.negative_api.state.get_integeri_v = FAIL
1323 LINUX : dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_max.primitives.points = FAIL
1323 LINUX : dEQP-GLES3.functional.state_query.integers64.max_server_wait_timeout_getfloat = FAIL
1323 LINUX : dEQP-GLES3.functional.texture.mipmap.2d.projected.linear_linear_clamp = FAIL
diff --git a/gfx/angle/src/tests/gl_tests/BindGeneratesResourceTest.cpp b/gfx/angle/src/tests/gl_tests/BindGeneratesResourceTest.cpp
deleted file mode 100644
index e8ae739f8..000000000
--- a/gfx/angle/src/tests/gl_tests/BindGeneratesResourceTest.cpp
+++ /dev/null
@@ -1,123 +0,0 @@
-//
-// Copyright 2015 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-
-// BindGeneratesResourceTest.cpp : Tests of the GL_CHROMIUM_bind_generates_resource extension.
-
-#include "test_utils/ANGLETest.h"
-
-namespace angle
-{
-
-class BindGeneratesResourceTest : public ANGLETest
-{
- protected:
- BindGeneratesResourceTest() { setBindGeneratesResource(false); }
-};
-
-// Context creation would fail if EGL_CHROMIUM_create_context_bind_generates_resource was not
-// available so the GL extension should always be present
-TEST_P(BindGeneratesResourceTest, ExtensionStringExposed)
-{
- EXPECT_TRUE(extensionEnabled("GL_CHROMIUM_bind_generates_resource"));
-}
-
-// Verify that GL_BIND_GENERATES_RESOURCE_CHROMIUM can be queried but not changed
-TEST_P(BindGeneratesResourceTest, QueryValidation)
-{
- GLint intValue = 2;
- glGetIntegerv(GL_BIND_GENERATES_RESOURCE_CHROMIUM, &intValue);
- EXPECT_GL_NO_ERROR();
- EXPECT_EQ(intValue, GL_FALSE);
-
- float floatValue = 2.0f;
- glGetFloatv(GL_BIND_GENERATES_RESOURCE_CHROMIUM, &floatValue);
- EXPECT_GL_NO_ERROR();
- EXPECT_EQ(floatValue, 0.0f);
-
- GLboolean boolValue = GL_TRUE;
- glGetBooleanv(GL_BIND_GENERATES_RESOURCE_CHROMIUM, &boolValue);
- EXPECT_GL_NO_ERROR();
- EXPECT_EQ(boolValue, GL_FALSE);
-
- boolValue = glIsEnabled(GL_BIND_GENERATES_RESOURCE_CHROMIUM);
- EXPECT_GL_NO_ERROR();
- EXPECT_EQ(boolValue, GL_FALSE);
-
- glEnable(GL_BIND_GENERATES_RESOURCE_CHROMIUM);
- EXPECT_GL_ERROR(GL_INVALID_ENUM);
-
- glDisable(GL_BIND_GENERATES_RESOURCE_CHROMIUM);
- EXPECT_GL_ERROR(GL_INVALID_ENUM);
-}
-
-// Test that buffers cannot be generated on bind
-TEST_P(BindGeneratesResourceTest, Buffers)
-{
- glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 2);
- EXPECT_GL_ERROR(GL_INVALID_OPERATION);
-
- glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
- EXPECT_GL_NO_ERROR();
-
- if (getClientMajorVersion() >= 3)
- {
- glBindBufferBase(GL_UNIFORM_BUFFER, 0, 3);
- EXPECT_GL_ERROR(GL_INVALID_OPERATION);
-
- glBindBufferBase(GL_UNIFORM_BUFFER, 0, 0);
- EXPECT_GL_NO_ERROR();
-
- glBindBufferRange(GL_UNIFORM_BUFFER, 0, 4, 1, 2);
- EXPECT_GL_ERROR(GL_INVALID_OPERATION);
-
- glBindBufferRange(GL_UNIFORM_BUFFER, 0, 0, 1, 2);
- EXPECT_GL_NO_ERROR();
- }
-}
-
-// Test that textures cannot be generated on bind
-TEST_P(BindGeneratesResourceTest, Textures)
-{
- glBindTexture(GL_TEXTURE_2D, 2);
- EXPECT_GL_ERROR(GL_INVALID_OPERATION);
-
- glBindTexture(GL_TEXTURE_2D, 0);
- EXPECT_GL_NO_ERROR();
-}
-
-// Test that framebuffers cannot be generated on bind
-TEST_P(BindGeneratesResourceTest, Framebuffers)
-{
- glBindFramebuffer(GL_FRAMEBUFFER, 2);
- EXPECT_GL_ERROR(GL_INVALID_OPERATION);
-
- glBindFramebuffer(GL_FRAMEBUFFER, 0);
- EXPECT_GL_NO_ERROR();
-}
-
-// Test that renderbuffer cannot be generated on bind
-TEST_P(BindGeneratesResourceTest, Renderbuffers)
-{
- glBindRenderbuffer(GL_RENDERBUFFER, 2);
- EXPECT_GL_ERROR(GL_INVALID_OPERATION);
-
- glBindRenderbuffer(GL_RENDERBUFFER, 0);
- EXPECT_GL_NO_ERROR();
-}
-
-// Use this to select which configurations (e.g. which renderer, which GLES major version) these
-// tests should be run against.
-ANGLE_INSTANTIATE_TEST(BindGeneratesResourceTest,
- ES2_D3D9(),
- ES2_D3D11(),
- ES3_D3D11(),
- ES2_D3D11_FL9_3(),
- ES2_OPENGL(),
- ES3_OPENGL(),
- ES2_OPENGLES(),
- ES3_OPENGLES());
-
-} // namespace
diff --git a/gfx/angle/src/tests/gl_tests/BlendMinMaxTest.cpp b/gfx/angle/src/tests/gl_tests/BlendMinMaxTest.cpp
index 39f5251e5..8ccaf9274 100755
--- a/gfx/angle/src/tests/gl_tests/BlendMinMaxTest.cpp
+++ b/gfx/angle/src/tests/gl_tests/BlendMinMaxTest.cpp
@@ -32,12 +32,13 @@ class BlendMinMaxTest : public ANGLETest
float values[4];
};
- static float getExpected(bool blendMin, float curColor, float prevColor)
+ static GLubyte getExpected(bool blendMin, float curColor, GLubyte prevColor)
{
- return blendMin ? std::min(curColor, prevColor) : std::max(curColor, prevColor);
+ GLubyte curAsUbyte = static_cast<GLubyte>((curColor * std::numeric_limits<GLubyte>::max()) + 0.5f);
+ return blendMin ? std::min<GLubyte>(curAsUbyte, prevColor) : std::max<GLubyte>(curAsUbyte, prevColor);
}
- void runTest(GLenum colorFormat, GLenum type)
+ void runTest(GLenum colorFormat)
{
if (getClientMajorVersion() < 3 && !extensionEnabled("GL_EXT_blend_minmax"))
{
@@ -54,26 +55,17 @@ class BlendMinMaxTest : public ANGLETest
SetUpFramebuffer(colorFormat);
- int minValue = 0;
- int maxValue = 1;
- if (type == GL_FLOAT)
- {
- minValue = -1024;
- maxValue = 1024;
- }
-
- const size_t colorCount = 128;
+ const size_t colorCount = 1024;
Color colors[colorCount];
for (size_t i = 0; i < colorCount; i++)
{
for (size_t j = 0; j < 4; j++)
{
- colors[i].values[j] =
- static_cast<float>(minValue + (rand() % (maxValue - minValue)));
+ colors[i].values[j] = (rand() % 255) / 255.0f;
}
}
- float prevColor[4];
+ GLubyte prevColor[4];
for (size_t i = 0; i < colorCount; i++)
{
const Color &color = colors[i];
@@ -85,37 +77,16 @@ class BlendMinMaxTest : public ANGLETest
drawQuad(mProgram, "aPosition", 0.5f);
- float pixel[4];
- if (type == GL_UNSIGNED_BYTE)
- {
- GLubyte ubytePixel[4];
- glReadPixels(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, ubytePixel);
- for (size_t componentIdx = 0; componentIdx < ArraySize(pixel); componentIdx++)
- {
- pixel[componentIdx] = ubytePixel[componentIdx] / 255.0f;
- }
- }
- else if (type == GL_FLOAT)
- {
- glReadPixels(0, 0, 1, 1, GL_RGBA, GL_FLOAT, pixel);
- }
- else
- {
- FAIL() << "Unexpected pixel type";
- }
-
if (i > 0)
{
- const float errorRange = 1.0f / 255.0f;
- for (size_t componentIdx = 0; componentIdx < ArraySize(pixel); componentIdx++)
- {
- EXPECT_NEAR(
- getExpected(blendMin, color.values[componentIdx], prevColor[componentIdx]),
- pixel[componentIdx], errorRange);
- }
+ EXPECT_PIXEL_EQ(0, 0,
+ getExpected(blendMin, color.values[0], prevColor[0]),
+ getExpected(blendMin, color.values[1], prevColor[1]),
+ getExpected(blendMin, color.values[2], prevColor[2]),
+ getExpected(blendMin, color.values[3], prevColor[3]));
}
- memcpy(prevColor, pixel, sizeof(pixel));
+ glReadPixels(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, prevColor);
}
}
@@ -171,9 +142,6 @@ class BlendMinMaxTest : public ANGLETest
glRenderbufferStorage(GL_RENDERBUFFER, colorFormat, getWindowWidth(), getWindowHeight());
glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, mColorRenderbuffer);
- glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
- glClear(GL_COLOR_BUFFER_BIT);
-
ASSERT_GL_NO_ERROR();
}
@@ -195,10 +163,10 @@ class BlendMinMaxTest : public ANGLETest
TEST_P(BlendMinMaxTest, RGBA8)
{
- runTest(GL_RGBA8, GL_UNSIGNED_BYTE);
+ runTest(GL_RGBA8);
}
-TEST_P(BlendMinMaxTest, RGBA32F)
+TEST_P(BlendMinMaxTest, RGBA32f)
{
if (getClientMajorVersion() < 3 || !extensionEnabled("GL_EXT_color_buffer_float"))
{
@@ -221,7 +189,7 @@ TEST_P(BlendMinMaxTest, RGBA32F)
return;
}
- runTest(GL_RGBA32F, GL_FLOAT);
+ runTest(GL_RGBA32F);
}
TEST_P(BlendMinMaxTest, RGBA16F)
@@ -240,16 +208,21 @@ TEST_P(BlendMinMaxTest, RGBA16F)
return;
}
- runTest(GL_RGBA16F, GL_FLOAT);
+ // TODO(geofflang): This fails because readpixels with UNSIGNED_BYTE/RGBA does not work with
+ // half float buffers (http://anglebug.com/1288)
+ if (GetParam().getRenderer() == EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE)
+ {
+ std::cout << "Test skipped on OpenGL ES targets." << std::endl;
+ return;
+ }
+
+ runTest(GL_RGBA16F);
}
// Use this to select which configurations (e.g. which renderer, which GLES major version) these tests should be run against.
ANGLE_INSTANTIATE_TEST(BlendMinMaxTest,
ES2_D3D9(),
ES2_D3D11(),
- ES3_D3D11(),
ES2_D3D11_FL9_3(),
ES2_OPENGL(),
- ES3_OPENGL(),
- ES2_OPENGLES(),
- ES3_OPENGLES());
+ ES2_OPENGLES());
diff --git a/gfx/angle/src/tests/gl_tests/BufferDataTest.cpp b/gfx/angle/src/tests/gl_tests/BufferDataTest.cpp
index 7707a4a56..572cce9c8 100755
--- a/gfx/angle/src/tests/gl_tests/BufferDataTest.cpp
+++ b/gfx/angle/src/tests/gl_tests/BufferDataTest.cpp
@@ -5,7 +5,6 @@
//
#include "test_utils/ANGLETest.h"
-#include "test_utils/gl_raii.h"
#include <stdint.h>
@@ -448,8 +447,24 @@ class BufferDataOverflowTest : public ANGLETest
{
protected:
BufferDataOverflowTest()
+ : mProgram(0)
{
}
+
+ ~BufferDataOverflowTest()
+ {
+ if (!mBuffers.empty())
+ {
+ glDeleteBuffers(static_cast<GLsizei>(mBuffers.size()), &mBuffers[0]);
+ }
+ if (mProgram != 0u)
+ {
+ glDeleteProgram(mProgram);
+ }
+ }
+
+ std::vector<GLuint> mBuffers;
+ GLuint mProgram;
};
// See description above.
@@ -457,9 +472,9 @@ TEST_P(BufferDataOverflowTest, VertexBufferIntegerOverflow)
{
// These values are special, to trigger the rounding bug.
unsigned int numItems = 0x7FFFFFE;
- constexpr GLsizei bufferCnt = 8;
+ GLsizei bufferCnt = 8;
- std::vector<GLBuffer> buffers(bufferCnt);
+ mBuffers.resize(bufferCnt);
std::stringstream vertexShaderStr;
@@ -487,27 +502,30 @@ TEST_P(BufferDataOverflowTest, VertexBufferIntegerOverflow)
" gl_FragColor = vec4(v_attrib, 0, 0, 1);\n"
"}";
- ANGLE_GL_PROGRAM(program, vertexShaderStr.str(), fragmentShader);
- glUseProgram(program.get());
+ mProgram = CompileProgram(vertexShaderStr.str(), fragmentShader);
+ ASSERT_NE(0u, mProgram);
+ glUseProgram(mProgram);
+
+ glGenBuffers(bufferCnt, &mBuffers[0]);
std::vector<GLfloat> data(numItems, 1.0f);
for (GLsizei bufferIndex = 0; bufferIndex < bufferCnt; ++bufferIndex)
{
- glBindBuffer(GL_ARRAY_BUFFER, buffers[bufferIndex].get());
+ glBindBuffer(GL_ARRAY_BUFFER, mBuffers[bufferIndex]);
glBufferData(GL_ARRAY_BUFFER, numItems * sizeof(float), &data[0], GL_DYNAMIC_DRAW);
std::stringstream attribNameStr;
attribNameStr << "attrib" << bufferIndex;
- GLint attribLocation = glGetAttribLocation(program.get(), attribNameStr.str().c_str());
+ GLint attribLocation = glGetAttribLocation(mProgram, attribNameStr.str().c_str());
ASSERT_NE(-1, attribLocation);
glVertexAttribPointer(attribLocation, 1, GL_FLOAT, GL_FALSE, 4, nullptr);
glEnableVertexAttribArray(attribLocation);
}
- GLint positionLocation = glGetAttribLocation(program.get(), "position");
+ GLint positionLocation = glGetAttribLocation(mProgram, "position");
ASSERT_NE(-1, positionLocation);
glDisableVertexAttribArray(positionLocation);
glVertexAttrib2f(positionLocation, 1.0f, 1.0f);
@@ -517,28 +535,6 @@ TEST_P(BufferDataOverflowTest, VertexBufferIntegerOverflow)
EXPECT_GL_ERROR(GL_OUT_OF_MEMORY);
}
-// Tests a security bug in our CopyBufferSubData validation (integer overflow).
-TEST_P(BufferDataOverflowTest, CopySubDataValidation)
-{
- GLBuffer readBuffer, writeBuffer;
-
- glBindBuffer(GL_COPY_READ_BUFFER, readBuffer.get());
- glBindBuffer(GL_COPY_WRITE_BUFFER, writeBuffer.get());
-
- constexpr int bufSize = 100;
-
- glBufferData(GL_COPY_READ_BUFFER, bufSize, nullptr, GL_STATIC_DRAW);
- glBufferData(GL_COPY_WRITE_BUFFER, bufSize, nullptr, GL_STATIC_DRAW);
-
- GLintptr big = std::numeric_limits<GLintptr>::max() - bufSize + 90;
-
- glCopyBufferSubData(GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER, big, 0, 50);
- EXPECT_GL_ERROR(GL_INVALID_VALUE);
-
- glCopyBufferSubData(GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER, 0, big, 50);
- EXPECT_GL_ERROR(GL_INVALID_VALUE);
-}
-
ANGLE_INSTANTIATE_TEST(BufferDataOverflowTest, ES3_D3D11());
#endif // _WIN64
diff --git a/gfx/angle/src/tests/gl_tests/CopyCompressedTextureTest.cpp b/gfx/angle/src/tests/gl_tests/CopyCompressedTextureTest.cpp
deleted file mode 100644
index 4d4151949..000000000
--- a/gfx/angle/src/tests/gl_tests/CopyCompressedTextureTest.cpp
+++ /dev/null
@@ -1,369 +0,0 @@
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-
-// CopyCompressedTextureTest.cpp: Tests of the GL_CHROMIUM_copy_compressed_texture extension
-
-#include "test_utils/ANGLETest.h"
-
-namespace angle
-{
-
-class CopyCompressedTextureTest : public ANGLETest
-{
- protected:
- CopyCompressedTextureTest()
- {
- setWindowWidth(256);
- setWindowHeight(256);
- setConfigRedBits(8);
- setConfigGreenBits(8);
- setConfigBlueBits(8);
- setConfigAlphaBits(8);
- }
-
- void SetUp() override
- {
- ANGLETest::SetUp();
-
- glGenTextures(2, mTextures);
-
- mProgram = CompileProgram(
- "attribute vec2 a_position;\n"
- "varying vec2 v_texcoord;\n"
- "void main()\n"
- "{\n"
- " gl_Position = vec4(a_position, 0.0, 1.0);\n"
- " v_texcoord = (a_position + 1.0) * 0.5;\n"
- "}\n",
- "precision mediump float;\n"
- "uniform sampler2D u_texture;\n"
- "varying vec2 v_texcoord;\n"
- "void main()\n"
- "{\n"
- " gl_FragColor = texture2D(u_texture, v_texcoord);\n"
- "}\n");
- ASSERT_NE(0u, mProgram);
-
- if (extensionEnabled("GL_CHROMIUM_copy_compressed_texture"))
- {
- glCompressedCopyTextureCHROMIUM =
- reinterpret_cast<PFNGLCOMPRESSEDCOPYTEXTURECHROMIUMPROC>(
- eglGetProcAddress("glCompressedCopyTextureCHROMIUM"));
- }
- }
-
- void TearDown() override
- {
- glDeleteTextures(2, mTextures);
- glDeleteProgram(mProgram);
-
- ANGLETest::TearDown();
- }
-
- bool checkExtensions() const
- {
- if (!extensionEnabled("GL_CHROMIUM_copy_compressed_texture"))
- {
- std::cout
- << "Test skipped because GL_CHROMIUM_copy_compressed_texture is not available."
- << std::endl;
- return false;
- }
-
- EXPECT_NE(nullptr, glCompressedCopyTextureCHROMIUM);
- if (glCompressedCopyTextureCHROMIUM == nullptr)
- {
- return false;
- }
-
- return true;
- }
-
- GLuint mProgram = 0;
- GLuint mTextures[2] = {0, 0};
-
- PFNGLCOMPRESSEDCOPYTEXTURECHROMIUMPROC glCompressedCopyTextureCHROMIUM = nullptr;
-};
-
-namespace
-{
-
-const GLColor &CompressedImageColor = GLColor::red;
-
-// Single compressed ATC block of source pixels all set to:
-// CompressedImageColor.
-const uint8_t CompressedImageATC[8] = {0x0, 0x7c, 0x0, 0xf8, 0x55, 0x55, 0x55, 0x55};
-
-// Single compressed ATCIA block of source pixels all set to:
-// CompressedImageColor.
-const uint8_t CompressedImageATCIA[16] = {0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x7c, 0x0, 0xf8, 0x55, 0x55, 0x55, 0x55};
-
-// Single compressed DXT1 block of source pixels all set to:
-// CompressedImageColor.
-const uint8_t CompressedImageDXT1[8] = {0x00, 0xf8, 0x00, 0xf8, 0xaa, 0xaa, 0xaa, 0xaa};
-
-// Single compressed DXT5 block of source pixels all set to:
-// CompressedImageColor.
-const uint8_t CompressedImageDXT5[16] = {0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xf8, 0x0, 0xf8, 0xaa, 0xaa, 0xaa, 0xaa};
-
-// Single compressed DXT1 block of source pixels all set to:
-// CompressedImageColor.
-const uint8_t CompressedImageETC1[8] = {0x0, 0x0, 0xf8, 0x2, 0xff, 0xff, 0x0, 0x0};
-
-} // anonymous namespace
-
-// Test to ensure that the basic functionality of the extension works.
-TEST_P(CopyCompressedTextureTest, Basic)
-{
- if (!checkExtensions())
- {
- return;
- }
-
- if (!extensionEnabled("GL_EXT_texture_compression_dxt1"))
- {
- std::cout << "Test skipped because GL_EXT_texture_compression_dxt1 is not available."
- << std::endl;
- return;
- }
-
- glBindTexture(GL_TEXTURE_2D, mTextures[0]);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGB_S3TC_DXT1_EXT, 4, 4, 0,
- sizeof(CompressedImageDXT1), CompressedImageDXT1);
- ASSERT_GL_NO_ERROR();
-
- glBindTexture(GL_TEXTURE_2D, mTextures[1]);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glCompressedCopyTextureCHROMIUM(mTextures[0], mTextures[1]);
- ASSERT_GL_NO_ERROR();
-
- // Load texture.
- glActiveTexture(GL_TEXTURE0);
- glBindTexture(GL_TEXTURE_2D, mTextures[1]);
- GLint textureLoc = glGetUniformLocation(mProgram, "u_texture");
- glUseProgram(mProgram);
- glUniform1i(textureLoc, 0);
-
- // Draw.
- drawQuad(mProgram, "a_position", 0.5f);
-
- EXPECT_PIXEL_COLOR_EQ(getWindowWidth() / 2, getWindowHeight() / 2, CompressedImageColor);
- ASSERT_GL_NO_ERROR();
-}
-
-// Test validation of compressed formats
-TEST_P(CopyCompressedTextureTest, InternalFormat)
-{
- if (!checkExtensions())
- {
- return;
- }
-
- struct Data
- {
- GLint format;
- const uint8_t *data;
- GLsizei dataSize;
-
- Data() : Data(GL_NONE, nullptr, 0) {}
- Data(GLint format, const uint8_t *data, GLsizei dataSize)
- : format(format), data(data), dataSize(dataSize)
- {
- }
- };
- std::vector<Data> supportedFormats;
-
- if (extensionEnabled("GL_AMD_compressed_ATC_texture"))
- {
- supportedFormats.push_back(
- Data(GL_ATC_RGB_AMD, CompressedImageATC, sizeof(CompressedImageATC)));
- supportedFormats.push_back(Data(GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD, CompressedImageATCIA,
- sizeof(CompressedImageATCIA)));
- }
- if (extensionEnabled("GL_EXT_texture_compression_dxt1"))
- {
- supportedFormats.push_back(Data(GL_COMPRESSED_RGB_S3TC_DXT1_EXT, CompressedImageDXT1,
- sizeof(CompressedImageDXT1)));
- }
- if (extensionEnabled("GL_ANGLE_texture_compression_dxt5"))
- {
- supportedFormats.push_back(Data(GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, CompressedImageDXT5,
- sizeof(CompressedImageDXT5)));
- }
- if (extensionEnabled("GL_OES_compressed_ETC1_RGB8_texture"))
- {
- supportedFormats.push_back(
- Data(GL_ETC1_RGB8_OES, CompressedImageETC1, sizeof(CompressedImageETC1)));
- }
-
- for (const auto &supportedFormat : supportedFormats)
- {
- glBindTexture(GL_TEXTURE_2D, mTextures[0]);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glCompressedTexImage2D(GL_TEXTURE_2D, 0, supportedFormat.format, 4, 4, 0,
- supportedFormat.dataSize, supportedFormat.data);
- ASSERT_GL_NO_ERROR();
-
- glBindTexture(GL_TEXTURE_2D, mTextures[1]);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glCompressedCopyTextureCHROMIUM(mTextures[0], mTextures[1]);
- ASSERT_GL_NO_ERROR();
- }
-}
-
-// Test that uncompressed textures generate errors when copying
-TEST_P(CopyCompressedTextureTest, InternalFormatNotSupported)
-{
- if (!checkExtensions())
- {
- return;
- }
-
- glBindTexture(GL_TEXTURE_2D, mTextures[0]);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, &GLColor::red);
- ASSERT_GL_NO_ERROR();
-
- glBindTexture(GL_TEXTURE_2D, mTextures[1]);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- ASSERT_GL_NO_ERROR();
-
- // Check that the GL_RGBA format reports an error.
- glCompressedCopyTextureCHROMIUM(mTextures[0], mTextures[1]);
- EXPECT_GL_ERROR(GL_INVALID_OPERATION);
-}
-
-// Test validation of texture IDs
-TEST_P(CopyCompressedTextureTest, InvalidTextureIds)
-{
- if (!checkExtensions())
- {
- return;
- }
-
- glBindTexture(GL_TEXTURE_2D, mTextures[0]);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGB_S3TC_DXT1_EXT, 4, 4, 0,
- sizeof(CompressedImageDXT1), CompressedImageDXT1);
- ASSERT_GL_NO_ERROR();
-
- glBindTexture(GL_TEXTURE_2D, mTextures[1]);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- ASSERT_GL_NO_ERROR();
-
- glCompressedCopyTextureCHROMIUM(mTextures[0], 99993);
- EXPECT_GL_ERROR(GL_INVALID_VALUE);
-
- glCompressedCopyTextureCHROMIUM(99994, mTextures[1]);
- EXPECT_GL_ERROR(GL_INVALID_VALUE);
-
- glCompressedCopyTextureCHROMIUM(99995, 99996);
- EXPECT_GL_ERROR(GL_INVALID_VALUE);
-
- glCompressedCopyTextureCHROMIUM(mTextures[0], mTextures[1]);
- EXPECT_GL_NO_ERROR();
-}
-
-// Test that only 2D textures are valid
-TEST_P(CopyCompressedTextureTest, BindingPoints)
-{
- if (!checkExtensions())
- {
- return;
- }
-
- glBindTexture(GL_TEXTURE_CUBE_MAP, mTextures[0]);
- glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- for (GLenum face = GL_TEXTURE_CUBE_MAP_POSITIVE_X; face <= GL_TEXTURE_CUBE_MAP_NEGATIVE_Z;
- face++)
- {
- glCompressedTexImage2D(face, 0, GL_COMPRESSED_RGB_S3TC_DXT1_EXT, 4, 4, 0,
- sizeof(CompressedImageDXT1), CompressedImageDXT1);
- }
- ASSERT_GL_NO_ERROR();
-
- glBindTexture(GL_TEXTURE_CUBE_MAP, mTextures[1]);
- glTexParameterf(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameterf(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- ASSERT_GL_NO_ERROR();
-
- glCompressedCopyTextureCHROMIUM(mTextures[0], mTextures[1]);
- EXPECT_GL_ERROR(GL_INVALID_VALUE);
-}
-
-// Test the destination texture cannot be immutable
-TEST_P(CopyCompressedTextureTest, Immutable)
-{
- if (!checkExtensions() || getClientMajorVersion() < 3)
- {
- return;
- }
-
- glBindTexture(GL_TEXTURE_2D, mTextures[0]);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGB_S3TC_DXT1_EXT, 4, 4, 0,
- sizeof(CompressedImageDXT1), CompressedImageDXT1);
- ASSERT_GL_NO_ERROR();
-
- glBindTexture(GL_TEXTURE_2D, mTextures[1]);
- glTexStorage2D(GL_TEXTURE_2D, 1, GL_COMPRESSED_RGB_S3TC_DXT1_EXT, 4, 4);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- ASSERT_GL_NO_ERROR();
-
- glCompressedCopyTextureCHROMIUM(mTextures[0], mTextures[1]);
- EXPECT_GL_ERROR(GL_INVALID_OPERATION);
-}
-
-// Use this to select which configurations (e.g. which renderer, which GLES major version) these
-// tests should be run against.
-ANGLE_INSTANTIATE_TEST(CopyCompressedTextureTest,
- ES2_D3D9(),
- ES2_D3D11(),
- ES3_D3D11(),
- ES2_OPENGL(),
- ES3_OPENGL(),
- ES2_OPENGLES(),
- ES3_OPENGLES());
-
-} // namespace angle
diff --git a/gfx/angle/src/tests/gl_tests/D3D11EmulatedIndexedBufferTest.cpp b/gfx/angle/src/tests/gl_tests/D3D11EmulatedIndexedBufferTest.cpp
index c26cf0e08..5cdcb96cc 100755
--- a/gfx/angle/src/tests/gl_tests/D3D11EmulatedIndexedBufferTest.cpp
+++ b/gfx/angle/src/tests/gl_tests/D3D11EmulatedIndexedBufferTest.cpp
@@ -35,10 +35,9 @@ class D3D11EmulatedIndexedBufferTest : public ANGLETest
rx::Context11 *context11 = rx::GetImplAs<rx::Context11>(context);
mRenderer = context11->getRenderer();
- mSourceBuffer = new rx::Buffer11(mBufferState, mRenderer);
+ mSourceBuffer = new rx::Buffer11(mRenderer);
GLfloat testData[] = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
- gl::Error error =
- mSourceBuffer->setData(GL_ARRAY_BUFFER, testData, sizeof(testData), GL_STATIC_DRAW);
+ gl::Error error = mSourceBuffer->setData(testData, sizeof(testData), GL_STATIC_DRAW);
ASSERT_FALSE(error.isError());
mTranslatedAttribute.baseOffset = 0;
@@ -127,7 +126,6 @@ class D3D11EmulatedIndexedBufferTest : public ANGLETest
std::vector<GLubyte> mubyteIndices;
std::vector<GLuint> muintIndices;
std::vector<GLushort> mushortIndices;
- gl::BufferState mBufferState;
};
// This tests that a GL_UNSIGNED_BYTE indices list can be successfully expanded
@@ -164,8 +162,7 @@ TEST_P(D3D11EmulatedIndexedBufferTest, TestNativeToExpandedUsingGLuintIndices)
TEST_P(D3D11EmulatedIndexedBufferTest, TestSourceBufferRemainsUntouchedAfterExpandOperation)
{
// Copy the original source buffer before any expand calls have been made
- gl::BufferState cleanSourceState;
- rx::Buffer11 *cleanSourceBuffer = new rx::Buffer11(cleanSourceState, mRenderer);
+ rx::Buffer11 *cleanSourceBuffer = new rx::Buffer11(mRenderer);
cleanSourceBuffer->copySubData(mSourceBuffer, 0, 0, mSourceBuffer->getSize());
// Do a basic exanded and compare test.
diff --git a/gfx/angle/src/tests/gl_tests/D3D11FormatTablesTest.cpp b/gfx/angle/src/tests/gl_tests/D3D11FormatTablesTest.cpp
index e407d1190..1876e3b34 100755
--- a/gfx/angle/src/tests/gl_tests/D3D11FormatTablesTest.cpp
+++ b/gfx/angle/src/tests/gl_tests/D3D11FormatTablesTest.cpp
@@ -11,7 +11,6 @@
#include "libANGLE/Context.h"
#include "libANGLE/formatutils.h"
#include "libANGLE/renderer/d3d/d3d11/Context11.h"
-#include "libANGLE/renderer/d3d/d3d11/dxgi_support_table.h"
#include "libANGLE/renderer/d3d/d3d11/formatutils11.h"
#include "libANGLE/renderer/d3d/d3d11/Renderer11.h"
#include "libANGLE/renderer/d3d/d3d11/texture_format_table.h"
@@ -66,22 +65,13 @@ TEST_P(D3D11FormatTablesTest, TestFormatSupport)
}
}
- UINT texSupport = 0;
+ UINT texSupport;
bool texSuccess = SUCCEEDED(device->CheckFormatSupport(formatInfo.texFormat, &texSupport));
bool textureable = texSuccess && ((texSupport & texSupportMask) == texSupportMask);
EXPECT_EQ(textureable, textureInfo.texturable);
- // Bits for mipmap auto-gen.
- bool expectedMipGen = texSuccess && ((texSupport & D3D11_FORMAT_SUPPORT_MIP_AUTOGEN) != 0);
- auto featureLevel = renderer->getRenderer11DeviceCaps().featureLevel;
- const auto &dxgiSupport = rx::d3d11::GetDXGISupport(formatInfo.texFormat, featureLevel);
- bool actualMipGen =
- ((dxgiSupport.alwaysSupportedFlags & D3D11_FORMAT_SUPPORT_MIP_AUTOGEN) != 0);
- EXPECT_EQ(0u, dxgiSupport.optionallySupportedFlags & D3D11_FORMAT_SUPPORT_MIP_AUTOGEN);
- EXPECT_EQ(expectedMipGen, actualMipGen);
-
// Bits for filtering
- UINT filterSupport = 0;
+ UINT filterSupport;
bool filterSuccess =
SUCCEEDED(device->CheckFormatSupport(formatInfo.srvFormat, &filterSupport));
bool filterable = filterSuccess && ((filterSupport & D3D11_FORMAT_SUPPORT_SHADER_SAMPLE) != 0);
diff --git a/gfx/angle/src/tests/gl_tests/D3DTextureTest.cpp b/gfx/angle/src/tests/gl_tests/D3DTextureTest.cpp
deleted file mode 100644
index 028b24a81..000000000
--- a/gfx/angle/src/tests/gl_tests/D3DTextureTest.cpp
+++ /dev/null
@@ -1,326 +0,0 @@
-//
-// Copyright 2015 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// D3DTextureTest:
-// Tests of the EGL_ANGLE_d3d_texture_client_buffer extension
-
-#include "test_utils/ANGLETest.h"
-
-#include <d3d11.h>
-#include <windows.h>
-
-#include "com_utils.h"
-
-namespace angle
-{
-
-class D3DTextureTest : public ANGLETest
-{
- protected:
- D3DTextureTest()
- {
- setWindowWidth(128);
- setWindowHeight(128);
- setConfigRedBits(8);
- setConfigGreenBits(8);
- setConfigBlueBits(8);
- setConfigAlphaBits(8);
- }
-
- void SetUp() override
- {
- ANGLETest::SetUp();
-
- // clang-format off
- const std::string vsSource = SHADER_SOURCE
- (
- precision highp float;
- attribute vec4 position;
- varying vec2 texcoord;
-
- void main()
- {
- gl_Position = position;
- texcoord = (position.xy * 0.5) + 0.5;
- texcoord.y = 1.0 - texcoord.y;
- }
- );
-
- const std::string textureFSSource = SHADER_SOURCE
- (
- precision highp float;
- uniform sampler2D tex;
- varying vec2 texcoord;
-
- void main()
- {
- gl_FragColor = texture2D(tex, texcoord);
- }
- );
- // clang-format on
-
- mTextureProgram = CompileProgram(vsSource, textureFSSource);
- ASSERT_NE(0u, mTextureProgram) << "shader compilation failed.";
-
- mTextureUniformLocation = glGetUniformLocation(mTextureProgram, "tex");
- ASSERT_NE(-1, mTextureUniformLocation);
-
- mD3D11Module = LoadLibrary(TEXT("d3d11.dll"));
- ASSERT_NE(nullptr, mD3D11Module);
-
- PFN_D3D11_CREATE_DEVICE createDeviceFunc = reinterpret_cast<PFN_D3D11_CREATE_DEVICE>(
- GetProcAddress(mD3D11Module, "D3D11CreateDevice"));
-
- EGLWindow *window = getEGLWindow();
- EGLDisplay display = window->getDisplay();
- if (eglDisplayExtensionEnabled(display, "EGL_EXT_device_query"))
- {
- PFNEGLQUERYDISPLAYATTRIBEXTPROC eglQueryDisplayAttribEXT =
- reinterpret_cast<PFNEGLQUERYDISPLAYATTRIBEXTPROC>(
- eglGetProcAddress("eglQueryDisplayAttribEXT"));
- PFNEGLQUERYDEVICEATTRIBEXTPROC eglQueryDeviceAttribEXT =
- reinterpret_cast<PFNEGLQUERYDEVICEATTRIBEXTPROC>(
- eglGetProcAddress("eglQueryDeviceAttribEXT"));
-
- EGLDeviceEXT device = 0;
- {
- EGLAttrib result = 0;
- EXPECT_EGL_TRUE(eglQueryDisplayAttribEXT(display, EGL_DEVICE_EXT, &result));
- device = reinterpret_cast<EGLDeviceEXT>(result);
- }
-
- if (eglDeviceExtensionEnabled(device, "EGL_ANGLE_device_d3d"))
- {
- EGLAttrib result = 0;
- if (eglQueryDeviceAttribEXT(device, EGL_D3D11_DEVICE_ANGLE, &result))
- {
- mD3D11Device = reinterpret_cast<ID3D11Device *>(result);
- mD3D11Device->AddRef();
- }
- else if (eglQueryDeviceAttribEXT(device, EGL_D3D9_DEVICE_ANGLE, &result))
- {
- mD3D9Device = reinterpret_cast<IDirect3DDevice9 *>(result);
- mD3D9Device->AddRef();
- }
- }
- }
- else
- {
- ASSERT_TRUE(
- SUCCEEDED(createDeviceFunc(nullptr, D3D_DRIVER_TYPE_HARDWARE, nullptr, 0, nullptr,
- 0, D3D11_SDK_VERSION, &mD3D11Device, nullptr, nullptr)));
- }
- }
-
- void TearDown() override
- {
- glDeleteProgram(mTextureProgram);
-
- if (mD3D11Device)
- {
- mD3D11Device->Release();
- mD3D11Device = nullptr;
- }
-
- FreeLibrary(mD3D11Module);
- mD3D11Module = nullptr;
-
- if (mD3D9Device)
- {
- mD3D9Device->Release();
- mD3D9Device = nullptr;
- }
-
- ANGLETest::TearDown();
- }
-
- EGLSurface createPBuffer(size_t width,
- size_t height,
- EGLint eglTextureFormat,
- EGLint eglTextureTarget)
- {
- EGLWindow *window = getEGLWindow();
- EGLDisplay display = window->getDisplay();
- EGLConfig config = window->getConfig();
-
- EGLint attribs[] = {
- EGL_TEXTURE_FORMAT, eglTextureFormat, EGL_TEXTURE_TARGET,
- eglTextureTarget, EGL_NONE, EGL_NONE,
- };
-
- if (mD3D11Device)
- {
- ID3D11Texture2D *texture = nullptr;
- CD3D11_TEXTURE2D_DESC desc(DXGI_FORMAT_R8G8B8A8_UNORM, static_cast<UINT>(width),
- static_cast<UINT>(height), 1, 1,
- D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET);
- EXPECT_TRUE(SUCCEEDED(mD3D11Device->CreateTexture2D(&desc, nullptr, &texture)));
-
- EGLSurface pbuffer = eglCreatePbufferFromClientBuffer(display, EGL_D3D_TEXTURE_ANGLE,
- texture, config, attribs);
-
- texture->Release();
-
- return pbuffer;
- }
- else if (mD3D9Device)
- {
- IDirect3DTexture9 *texture = nullptr;
- EXPECT_TRUE(SUCCEEDED(mD3D9Device->CreateTexture(
- static_cast<UINT>(width), static_cast<UINT>(height), 1, D3DUSAGE_RENDERTARGET,
- D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &texture, nullptr)));
-
- EGLSurface pbuffer = eglCreatePbufferFromClientBuffer(display, EGL_D3D_TEXTURE_ANGLE,
- texture, config, attribs);
-
- texture->Release();
-
- return pbuffer;
- }
- else
- {
- return EGL_NO_SURFACE;
- }
- }
-
- bool valid() const
- {
- EGLWindow *window = getEGLWindow();
- EGLDisplay display = window->getDisplay();
- if (!eglDisplayExtensionEnabled(display, "EGL_ANGLE_d3d_texture_client_buffer"))
- {
- std::cout << "Test skipped due to missing EGL_ANGLE_d3d_texture_client_buffer"
- << std::endl;
- return false;
- }
-
- if (!mD3D11Device && !mD3D9Device)
- {
- std::cout << "Test skipped due to no D3D devices being available." << std::endl;
- return false;
- }
-
- if (IsWindows() && IsAMD() && IsOpenGL())
- {
- std::cout << "Test skipped on Windows AMD OpenGL." << std::endl;
- return false;
- }
-
- if (IsWindows() && IsIntel() && IsOpenGL())
- {
- std::cout << "Test skipped on Windows Intel OpenGL." << std::endl;
- return false;
- }
- return true;
- }
-
- GLuint mTextureProgram;
- GLint mTextureUniformLocation;
-
- HMODULE mD3D11Module = nullptr;
- ID3D11Device *mD3D11Device = nullptr;
-
- IDirect3DDevice9 *mD3D9Device = nullptr;
-};
-
-// Test creating a pbuffer from a d3d surface and clearing it
-TEST_P(D3DTextureTest, Clear)
-{
- if (!valid())
- {
- return;
- }
-
- EGLWindow *window = getEGLWindow();
- EGLDisplay display = window->getDisplay();
-
- const size_t bufferSize = 32;
-
- EGLSurface pbuffer = createPBuffer(bufferSize, bufferSize, EGL_NO_TEXTURE, EGL_NO_TEXTURE);
- ASSERT_EGL_SUCCESS();
- ASSERT_NE(pbuffer, EGL_NO_SURFACE);
-
- // Apply the Pbuffer and clear it to purple and verify
- eglMakeCurrent(display, pbuffer, pbuffer, window->getContext());
- ASSERT_EGL_SUCCESS();
-
- glViewport(0, 0, static_cast<GLsizei>(bufferSize), static_cast<GLsizei>(bufferSize));
- glClearColor(1.0f, 0.0f, 1.0f, 1.0f);
- glClear(GL_COLOR_BUFFER_BIT);
- ASSERT_GL_NO_ERROR();
- EXPECT_PIXEL_EQ(static_cast<GLint>(bufferSize) / 2, static_cast<GLint>(bufferSize) / 2, 255, 0,
- 255, 255);
-
- eglDestroySurface(display, pbuffer);
-}
-
-// Test creating a pbuffer from a d3d surface and binding it to a texture
-TEST_P(D3DTextureTest, BindTexImage)
-{
- if (!valid())
- {
- return;
- }
-
- EGLWindow *window = getEGLWindow();
-
- const size_t bufferSize = 32;
-
- EGLSurface pbuffer = createPBuffer(bufferSize, bufferSize, EGL_TEXTURE_RGBA, EGL_TEXTURE_2D);
- ASSERT_EGL_SUCCESS();
- ASSERT_NE(pbuffer, EGL_NO_SURFACE);
-
- // Apply the Pbuffer and clear it to purple
- eglMakeCurrent(window->getDisplay(), pbuffer, pbuffer, window->getContext());
- ASSERT_EGL_SUCCESS();
-
- glViewport(0, 0, static_cast<GLsizei>(bufferSize), static_cast<GLsizei>(bufferSize));
- glClearColor(1.0f, 0.0f, 1.0f, 1.0f);
- glClear(GL_COLOR_BUFFER_BIT);
- ASSERT_GL_NO_ERROR();
-
- EXPECT_PIXEL_EQ(static_cast<GLint>(bufferSize) / 2, static_cast<GLint>(bufferSize) / 2, 255, 0,
- 255, 255);
-
- // Apply the window surface
- eglMakeCurrent(window->getDisplay(), window->getSurface(), window->getSurface(),
- window->getContext());
-
- // Create a texture and bind the Pbuffer to it
- GLuint texture = 0;
- glGenTextures(1, &texture);
- glBindTexture(GL_TEXTURE_2D, texture);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
- EXPECT_GL_NO_ERROR();
-
- eglBindTexImage(window->getDisplay(), pbuffer, EGL_BACK_BUFFER);
- glViewport(0, 0, getWindowWidth(), getWindowHeight());
- ASSERT_EGL_SUCCESS();
-
- // Draw a quad and verify that it is purple
- glUseProgram(mTextureProgram);
- glUniform1i(mTextureUniformLocation, 0);
-
- drawQuad(mTextureProgram, "position", 0.5f);
- EXPECT_GL_NO_ERROR();
-
- // Unbind the texture
- eglReleaseTexImage(window->getDisplay(), pbuffer, EGL_BACK_BUFFER);
- ASSERT_EGL_SUCCESS();
-
- // Verify that purple was drawn
- EXPECT_PIXEL_EQ(getWindowWidth() / 2, getWindowHeight() / 2, 255, 0, 255, 255);
-
- glDeleteTextures(1, &texture);
-}
-
-// Use this to select which configurations (e.g. which renderer, which GLES major version) these
-// tests should be run against.
-ANGLE_INSTANTIATE_TEST(D3DTextureTest, ES2_D3D9(), ES2_D3D11(), ES2_OPENGL());
-
-} // namespace
diff --git a/gfx/angle/src/tests/gl_tests/DrawBuffersTest.cpp b/gfx/angle/src/tests/gl_tests/DrawBuffersTest.cpp
index daf09e93c..48a6b65c9 100755
--- a/gfx/angle/src/tests/gl_tests/DrawBuffersTest.cpp
+++ b/gfx/angle/src/tests/gl_tests/DrawBuffersTest.cpp
@@ -256,13 +256,6 @@ TEST_P(DrawBuffersTest, Gaps)
return;
}
- if (IsWindows() && IsAMD() && IsDesktopOpenGL())
- {
- // TODO(ynovikov): Investigate the failure (http://anglebug.com/1535)
- std::cout << "Test disabled on Windows AMD OpenGL." << std::endl;
- return;
- }
-
glBindTexture(GL_TEXTURE_2D, mTextures[0]);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, GL_TEXTURE_2D, mTextures[0], 0);
@@ -294,13 +287,6 @@ TEST_P(DrawBuffersTest, FirstAndLast)
return;
}
- if (IsWindows() && IsAMD() && IsDesktopOpenGL())
- {
- // TODO(ynovikov): Investigate the failure (https://anglebug.com/1533)
- std::cout << "Test disabled on Windows AMD OpenGL." << std::endl;
- return;
- }
-
glBindTexture(GL_TEXTURE_2D, mTextures[0]);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, mTextures[0], 0);
@@ -341,13 +327,6 @@ TEST_P(DrawBuffersTest, FirstHalfNULL)
return;
}
- if (IsWindows() && IsAMD() && IsDesktopOpenGL())
- {
- // TODO(ynovikov): Investigate the failure (https://anglebug.com/1533)
- std::cout << "Test disabled on Windows AMD OpenGL." << std::endl;
- return;
- }
-
bool flags[8] = { false };
GLenum bufs[8] = { GL_NONE };
diff --git a/gfx/angle/src/tests/gl_tests/ETCTextureTest.cpp b/gfx/angle/src/tests/gl_tests/ETCTextureTest.cpp
index 24fdd2263..f34ac24b3 100755
--- a/gfx/angle/src/tests/gl_tests/ETCTextureTest.cpp
+++ b/gfx/angle/src/tests/gl_tests/ETCTextureTest.cpp
@@ -52,7 +52,7 @@ TEST_P(ETCTextureTest, ETC1Validation)
glBindTexture(GL_TEXTURE_2D, mTexture);
- GLubyte pixel[8] = { 0x0, 0x0, 0xf8, 0x2, 0x43, 0xff, 0x4, 0x12 };
+ GLubyte pixel[8] = {0};
glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_ETC1_RGB8_LOSSY_DECODE_ANGLE, 4, 4, 0,
sizeof(pixel), pixel);
if (supported)
@@ -62,12 +62,6 @@ TEST_P(ETCTextureTest, ETC1Validation)
glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 4, 4, GL_ETC1_RGB8_LOSSY_DECODE_ANGLE,
sizeof(pixel), pixel);
EXPECT_GL_NO_ERROR();
-
-
- glCompressedTexImage2D(GL_TEXTURE_2D, 1, GL_ETC1_RGB8_LOSSY_DECODE_ANGLE, 2, 2, 0,
- sizeof(pixel), pixel);
- glCompressedTexImage2D(GL_TEXTURE_2D, 2, GL_ETC1_RGB8_LOSSY_DECODE_ANGLE, 1, 1, 0,
- sizeof(pixel), pixel);
}
else
{
diff --git a/gfx/angle/src/tests/gl_tests/GLSLTest.cpp b/gfx/angle/src/tests/gl_tests/GLSLTest.cpp
index 00000612d..bdcbc5d20 100755
--- a/gfx/angle/src/tests/gl_tests/GLSLTest.cpp
+++ b/gfx/angle/src/tests/gl_tests/GLSLTest.cpp
@@ -1063,37 +1063,6 @@ TEST_P(GLSLTest_ES3, MissingReturnArrayOfStructs)
EXPECT_NE(0u, program);
}
-// Verify that functions without return statements still compile
-TEST_P(GLSLTest_ES3, MissingReturnStructOfArrays)
-{
- // TODO(cwallez) remove the suppression once NVIDIA removes the restriction for
- // GLSL >= 300. It was defined only in GLSL 2.0, section 6.1.
- if (IsNVIDIA() && IsOpenGLES())
- {
- std::cout << "Test skipped on NVIDIA OpenGL ES because it disallows returning "
- "structure of arrays"
- << std::endl;
- return;
- }
-
- const std::string vertexShaderSource =
- "#version 300 es\n"
- "in float v_varying;\n"
- "struct s { float a[2]; int b[2]; vec2 c[2]; };\n"
- "s f() { if (v_varying > 0.0) { return s(float[2](1.0, 1.0), int[2](1, 1),"
- "vec2[2](vec2(1.0, 1.0), vec2(1.0, 1.0))); } }\n"
- "void main() { gl_Position = vec4(f().a[0], 0, 0, 1); }\n";
-
- const std::string fragmentShaderSource =
- "#version 300 es\n"
- "precision mediump float;\n"
- "out vec4 my_FragColor;\n"
- "void main() { my_FragColor = vec4(0, 0, 0, 1); }\n";
-
- GLuint program = CompileProgram(vertexShaderSource, fragmentShaderSource);
- EXPECT_NE(0u, program);
-}
-
// Verify that using invariant(all) in both shaders fails in ESSL 3.00.
TEST_P(GLSLTest_ES3, InvariantAllBoth)
{
@@ -2241,104 +2210,6 @@ TEST_P(GLSLTest, NestedPowStatements)
EXPECT_PIXEL_COLOR_EQ(0, 0, GLColor::green);
}
-// Convers a bug with the unary minus operator on signed integer workaround.
-TEST_P(GLSLTest_ES3, UnaryMinusOperatorSignedInt)
-{
- const std::string &vert =
- "#version 300 es\n"
- "in highp vec4 position;\n"
- "out mediump vec4 v_color;\n"
- "uniform int ui_one;\n"
- "uniform int ui_two;\n"
- "uniform int ui_three;\n"
- "void main() {\n"
- " int s[3];\n"
- " s[0] = ui_one;\n"
- " s[1] = -(-(-ui_two + 1) + 1);\n" // s[1] = -ui_two
- " s[2] = ui_three;\n"
- " int result = 0;\n"
- " for (int i = 0; i < ui_three; i++) {\n"
- " result += s[i];\n"
- " }\n"
- " v_color = (result == 2) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1);\n"
- " gl_Position = position;\n"
- "}\n";
- const std::string &frag =
- "#version 300 es\n"
- "in mediump vec4 v_color;\n"
- "layout(location=0) out mediump vec4 o_color;\n"
- "void main() {\n"
- " o_color = v_color;\n"
- "}\n";
-
- ANGLE_GL_PROGRAM(prog, vert, frag);
-
- gl::Context *context = reinterpret_cast<gl::Context *>(getEGLWindow()->getContext());
- gl::Program *glProgram = context->getProgram(prog.get());
- GLint oneIndex = glProgram->getUniformLocation("ui_one");
- ASSERT_NE(-1, oneIndex);
- GLint twoIndex = glProgram->getUniformLocation("ui_two");
- ASSERT_NE(-1, twoIndex);
- GLint threeIndex = glProgram->getUniformLocation("ui_three");
- ASSERT_NE(-1, threeIndex);
- glUseProgram(prog.get());
- glUniform1i(oneIndex, 1);
- glUniform1i(twoIndex, 2);
- glUniform1i(threeIndex, 3);
-
- drawQuad(prog.get(), "position", 0.5f);
- EXPECT_PIXEL_COLOR_EQ(0, 0, GLColor::green);
-}
-
-// Convers a bug with the unary minus operator on unsigned integer workaround.
-TEST_P(GLSLTest_ES3, UnaryMinusOperatorUnsignedInt)
-{
- const std::string &vert =
- "#version 300 es\n"
- "in highp vec4 position;\n"
- "out mediump vec4 v_color;\n"
- "uniform uint ui_one;\n"
- "uniform uint ui_two;\n"
- "uniform uint ui_three;\n"
- "void main() {\n"
- " uint s[3];\n"
- " s[0] = ui_one;\n"
- " s[1] = -(-(-ui_two + 1u) + 1u);\n" // s[1] = -ui_two
- " s[2] = ui_three;\n"
- " uint result = 0u;\n"
- " for (uint i = 0u; i < ui_three; i++) {\n"
- " result += s[i];\n"
- " }\n"
- " v_color = (result == 2u) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1);\n"
- " gl_Position = position;\n"
- "}\n";
- const std::string &frag =
- "#version 300 es\n"
- "in mediump vec4 v_color;\n"
- "layout(location=0) out mediump vec4 o_color;\n"
- "void main() {\n"
- " o_color = v_color;\n"
- "}\n";
-
- ANGLE_GL_PROGRAM(prog, vert, frag);
-
- gl::Context *context = reinterpret_cast<gl::Context *>(getEGLWindow()->getContext());
- gl::Program *glProgram = context->getProgram(prog.get());
- GLint oneIndex = glProgram->getUniformLocation("ui_one");
- ASSERT_NE(-1, oneIndex);
- GLint twoIndex = glProgram->getUniformLocation("ui_two");
- ASSERT_NE(-1, twoIndex);
- GLint threeIndex = glProgram->getUniformLocation("ui_three");
- ASSERT_NE(-1, threeIndex);
- glUseProgram(prog.get());
- glUniform1ui(oneIndex, 1u);
- glUniform1ui(twoIndex, 2u);
- glUniform1ui(threeIndex, 3u);
-
- drawQuad(prog.get(), "position", 0.5f);
- EXPECT_PIXEL_COLOR_EQ(0, 0, GLColor::green);
-}
-
// Test a nested sequence operator with a ternary operator inside. The ternary operator is
// intended to be such that it gets converted to an if statement on the HLSL backend.
TEST_P(GLSLTest, NestedSequenceOperatorWithTernaryInside)
@@ -2368,65 +2239,6 @@ TEST_P(GLSLTest, NestedSequenceOperatorWithTernaryInside)
EXPECT_PIXEL_COLOR_EQ(0, 0, GLColor::green);
}
-// Test that using a sampler2D and samplerExternalOES in the same shader works (anglebug.com/1534)
-TEST_P(GLSLTest, ExternalAnd2DSampler)
-{
- if (!extensionEnabled("GL_OES_EGL_image_external"))
- {
- std::cout << "Test skipped because GL_OES_EGL_image_external is not available."
- << std::endl;
- return;
- }
-
- const std::string fragmentShader =
- "precision mediump float;\n"
- "uniform samplerExternalOES tex0;\n"
- "uniform sampler2D tex1;\n"
- "void main(void)\n"
- "{\n"
- " vec2 uv = vec2(0.0, 0.0);"
- " gl_FragColor = texture2D(tex0, uv) + texture2D(tex1, uv);\n"
- "}\n";
-
- ANGLE_GL_PROGRAM(program, mSimpleVSSource, fragmentShader);
-}
-
-// Test that using an invalid constant right-shift produces an error.
-TEST_P(GLSLTest_ES3, FoldedInvalidRightShift)
-{
- const std::string &fragmentShader =
- "#version 300 es\n"
- "precision mediump float;\n"
- "out vec4 color;\n"
- "void main(void)\n"
- "{\n"
- " int diff = -100 >> -100;\n"
- " color = vec4(float(diff));\n"
- "}\n";
-
- GLuint program = CompileProgram(mSimpleVSSource, fragmentShader);
- EXPECT_EQ(0u, program);
- glDeleteProgram(program);
-}
-
-// Test that using an invalid constant left-shift produces an error.
-TEST_P(GLSLTest_ES3, FoldedInvalidLeftShift)
-{
- const std::string &fragmentShader =
- "#version 300 es\n"
- "precision mediump float;\n"
- "out vec4 color;\n"
- "void main(void)\n"
- "{\n"
- " int diff = -100 << -100;\n"
- " color = vec4(float(diff));\n"
- "}\n";
-
- GLuint program = CompileProgram(mSimpleVSSource, fragmentShader);
- EXPECT_EQ(0u, program);
- glDeleteProgram(program);
-}
-
} // anonymous namespace
// Use this to select which configurations (e.g. which renderer, which GLES major version) these tests should be run against.
diff --git a/gfx/angle/src/tests/gl_tests/MipmapTest.cpp b/gfx/angle/src/tests/gl_tests/MipmapTest.cpp
index 2ab9411a8..9691b1820 100755
--- a/gfx/angle/src/tests/gl_tests/MipmapTest.cpp
+++ b/gfx/angle/src/tests/gl_tests/MipmapTest.cpp
@@ -919,8 +919,6 @@ TEST_P(MipmapTestES3, GenerateMipmapBaseLevel)
glBindTexture(GL_TEXTURE_2D, mTexture);
- ASSERT(getWindowWidth() == getWindowHeight());
-
// Fill level 0 with blue
std::vector<GLColor> pixelsBlue(getWindowWidth() * getWindowHeight(), GLColor::blue);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, getWindowWidth(), getWindowHeight(), 0, GL_RGBA,
@@ -951,6 +949,14 @@ TEST_P(MipmapTestES3, GenerateMipmapBaseLevel)
clearAndDrawQuad(m2DProgram, getWindowWidth() / 4, getWindowHeight() / 4);
EXPECT_PIXEL_COLOR_EQ(getWindowWidth() / 8, getWindowHeight() / 8, GLColor::red);
+ if (IsNVIDIA() && IsOpenGL())
+ {
+ // Observed incorrect rendering on NVIDIA, level zero seems to be incorrectly affected by
+ // GenerateMipmap.
+ std::cout << "Test partially skipped on NVIDIA OpenGL." << std::endl;
+ return;
+ }
+
// Draw using level 0. It should still be blue.
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 0);
clearAndDrawQuad(m2DProgram, getWindowWidth(), getWindowHeight());
diff --git a/gfx/angle/src/tests/gl_tests/MultisampleCompatibilityTest.cpp b/gfx/angle/src/tests/gl_tests/MultisampleCompatibilityTest.cpp
index 0edc221d7..30708eeec 100755
--- a/gfx/angle/src/tests/gl_tests/MultisampleCompatibilityTest.cpp
+++ b/gfx/angle/src/tests/gl_tests/MultisampleCompatibilityTest.cpp
@@ -9,7 +9,6 @@
//
#include "test_utils/ANGLETest.h"
-#include "test_utils/gl_raii.h"
#include "shader_utils.h"
using namespace angle;
@@ -297,142 +296,5 @@ TEST_P(EXTMultisampleCompatibilityTest, DrawAlphaOneAndResolve)
EXPECT_EQ(0, memcmp(results[0].get(), results[2].get(), kResultSize));
}
-ANGLE_INSTANTIATE_TEST(EXTMultisampleCompatibilityTest, ES2_OPENGL(), ES2_OPENGLES(), ES3_OPENGL());
-class MultisampleCompatibilityTest : public ANGLETest
-{
-
- protected:
- MultisampleCompatibilityTest()
- {
- setWindowWidth(64);
- setWindowHeight(64);
- setConfigRedBits(8);
- setConfigBlueBits(8);
- setConfigAlphaBits(8);
- }
-
- void prepareForDraw(GLsizei numSamples)
- {
- // Create a sample buffer.
- glGenRenderbuffers(1, &mSampleRB);
- glBindRenderbuffer(GL_RENDERBUFFER, mSampleRB);
- glRenderbufferStorageMultisampleANGLE(GL_RENDERBUFFER, numSamples, GL_RGBA8, kWidth,
- kHeight);
- GLint param = 0;
- glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_SAMPLES, &param);
- EXPECT_GE(param, numSamples);
- glGenFramebuffers(1, &mSampleFBO);
- glBindFramebuffer(GL_FRAMEBUFFER, mSampleFBO);
- glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, mSampleRB);
- EXPECT_GLENUM_EQ(GL_FRAMEBUFFER_COMPLETE, glCheckFramebufferStatus(GL_FRAMEBUFFER));
- glBindFramebuffer(GL_FRAMEBUFFER, 0);
- // Create another FBO to resolve the multisample buffer into.
- glGenTextures(1, &mResolveTex);
- glBindTexture(GL_TEXTURE_2D, mResolveTex);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, kWidth, kHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE,
- NULL);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
- glGenFramebuffers(1, &mResolveFBO);
- glBindFramebuffer(GL_FRAMEBUFFER, mResolveFBO);
- glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, mResolveTex, 0);
- EXPECT_GLENUM_EQ(GL_FRAMEBUFFER_COMPLETE, glCheckFramebufferStatus(GL_FRAMEBUFFER));
- glViewport(0, 0, kWidth, kHeight);
- glBindFramebuffer(GL_FRAMEBUFFER, mSampleFBO);
- glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
- glClear(GL_COLOR_BUFFER_BIT);
- ASSERT_GL_NO_ERROR();
- }
-
- void prepareForVerify()
- {
- // Resolve.
- glBindFramebuffer(GL_READ_FRAMEBUFFER, mSampleFBO);
- glBindFramebuffer(GL_DRAW_FRAMEBUFFER, mResolveFBO);
- glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
- glClear(GL_COLOR_BUFFER_BIT);
- glBlitFramebufferANGLE(0, 0, kWidth, kHeight, 0, 0, kWidth, kHeight, GL_COLOR_BUFFER_BIT,
- GL_NEAREST);
- glBindFramebuffer(GL_READ_FRAMEBUFFER, mResolveFBO);
-
- ASSERT_GL_NO_ERROR();
- }
-
- void cleanup()
- {
- glBindFramebuffer(GL_FRAMEBUFFER, 0);
- glDeleteFramebuffers(1, &mResolveFBO);
- glDeleteFramebuffers(1, &mSampleFBO);
- glDeleteTextures(1, &mResolveTex);
- glDeleteRenderbuffers(1, &mSampleRB);
-
- ASSERT_GL_NO_ERROR();
- }
-
- bool isApplicable() const
- {
- return extensionEnabled("GL_ANGLE_framebuffer_multisample") &&
- extensionEnabled("GL_OES_rgb8_rgba8");
- }
-
- GLuint mSampleFBO;
- GLuint mResolveFBO;
- GLuint mSampleRB;
- GLuint mResolveTex;
-};
-
-// Test that enabling GL_SAMPLE_COVERAGE affects rendering.
-TEST_P(MultisampleCompatibilityTest, DrawCoverageAndResolve)
-{
- if (!isApplicable())
- return;
-
- // TODO: Figure out why this fails on Android.
- if (IsAndroid())
- {
- std::cout << "Test skipped on Android." << std::endl;
- return;
- }
-
- const std::string &vertex =
- "attribute vec4 position;\n"
- "void main()\n"
- "{ gl_Position = position; }";
- const std::string &fragment =
- "void main()\n"
- "{ gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); }";
-
- ANGLE_GL_PROGRAM(drawRed, vertex, fragment);
-
- GLsizei maxSamples = 0;
- glGetIntegerv(GL_MAX_SAMPLES, &maxSamples);
- int iterationCount = maxSamples + 1;
- for (int samples = 1; samples < iterationCount; samples++)
- {
- prepareForDraw(samples);
- glEnable(GL_SAMPLE_COVERAGE);
- glSampleCoverage(1.0, false);
- drawQuad(drawRed.get(), "position", 0.5f);
-
- prepareForVerify();
- GLsizei pixelCount = kWidth * kHeight;
- std::vector<GLColor> actual(pixelCount, GLColor::black);
- glReadPixels(0, 0, kWidth, kHeight, GL_RGBA, GL_UNSIGNED_BYTE, actual.data());
- glDisable(GL_SAMPLE_COVERAGE);
- cleanup();
-
- std::vector<GLColor> expected(pixelCount, GLColor::red);
- EXPECT_EQ(expected, actual);
- }
-}
-
-ANGLE_INSTANTIATE_TEST(MultisampleCompatibilityTest,
- ES2_D3D9(),
- ES2_OPENGL(),
- ES2_OPENGLES(),
- ES3_D3D11(),
- ES3_OPENGL(),
- ES3_OPENGLES()); \ No newline at end of file
+ANGLE_INSTANTIATE_TEST(EXTMultisampleCompatibilityTest, ES2_OPENGL(), ES2_OPENGLES(), ES3_OPENGL()); \ No newline at end of file
diff --git a/gfx/angle/src/tests/gl_tests/ReadPixelsTest.cpp b/gfx/angle/src/tests/gl_tests/ReadPixelsTest.cpp
index 47d2e3dba..2a9fe8e5a 100755
--- a/gfx/angle/src/tests/gl_tests/ReadPixelsTest.cpp
+++ b/gfx/angle/src/tests/gl_tests/ReadPixelsTest.cpp
@@ -32,7 +32,7 @@ class ReadPixelsTest : public ANGLETest
}
};
-// Test out of bounds framebuffer reads.
+// Test out of bounds reads.
TEST_P(ReadPixelsTest, OutOfBounds)
{
// TODO: re-enable once root cause of http://anglebug.com/1413 is fixed
@@ -49,17 +49,26 @@ TEST_P(ReadPixelsTest, OutOfBounds)
GLsizei pixelsWidth = 32;
GLsizei pixelsHeight = 32;
GLint offset = 16;
- std::vector<GLColor> pixels((pixelsWidth + offset) * (pixelsHeight + offset));
+ std::vector<GLubyte> pixels((pixelsWidth + offset) * (pixelsHeight + offset) * 4);
glReadPixels(-offset, -offset, pixelsWidth + offset, pixelsHeight + offset, GL_RGBA, GL_UNSIGNED_BYTE, &pixels[0]);
EXPECT_GL_NO_ERROR();
- // Expect that all pixels which fell within the framebuffer are red
for (int y = pixelsHeight / 2; y < pixelsHeight; y++)
{
for (int x = pixelsWidth / 2; x < pixelsWidth; x++)
{
- EXPECT_EQ(GLColor::red, pixels[y * (pixelsWidth + offset) + x]);
+ const GLubyte* pixel = &pixels[0] + ((y * (pixelsWidth + offset) + x) * 4);
+ unsigned int r = static_cast<unsigned int>(pixel[0]);
+ unsigned int g = static_cast<unsigned int>(pixel[1]);
+ unsigned int b = static_cast<unsigned int>(pixel[2]);
+ unsigned int a = static_cast<unsigned int>(pixel[3]);
+
+ // Expect that all pixels which fell within the framebuffer are red
+ EXPECT_EQ(255u, r);
+ EXPECT_EQ(0u, g);
+ EXPECT_EQ(0u, b);
+ EXPECT_EQ(255u, a);
}
}
}
@@ -74,22 +83,16 @@ class ReadPixelsPBOTest : public ReadPixelsTest
ANGLETest::SetUp();
glGenBuffers(1, &mPBO);
- glGenFramebuffers(1, &mFBO);
-
- Reset(4 * getWindowWidth() * getWindowHeight(), 4, 1);
- }
-
- void Reset(GLuint bufferSize, GLuint fboWidth, GLuint fboHeight)
- {
glBindBuffer(GL_PIXEL_PACK_BUFFER, mPBO);
- glBufferData(GL_PIXEL_PACK_BUFFER, bufferSize, nullptr, GL_STATIC_DRAW);
+ glBufferData(GL_PIXEL_PACK_BUFFER, 4 * getWindowWidth() * getWindowHeight(), nullptr,
+ GL_STATIC_DRAW);
glBindBuffer(GL_PIXEL_PACK_BUFFER, 0);
- glDeleteTextures(1, &mTexture);
glGenTextures(1, &mTexture);
glBindTexture(GL_TEXTURE_2D, mTexture);
- glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, fboWidth, fboHeight);
+ glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 4, 1);
+ glGenFramebuffers(1, &mFBO);
glBindFramebuffer(GL_FRAMEBUFFER, mFBO);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, mTexture, 0);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
@@ -106,60 +109,11 @@ class ReadPixelsPBOTest : public ReadPixelsTest
ANGLETest::TearDown();
}
- GLuint mPBO = 0;
- GLuint mTexture = 0;
- GLuint mFBO = 0;
+ GLuint mPBO;
+ GLuint mTexture;
+ GLuint mFBO;
};
-// Test basic usage of PBOs.
-TEST_P(ReadPixelsPBOTest, Basic)
-{
- glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
- glClear(GL_COLOR_BUFFER_BIT);
- EXPECT_GL_NO_ERROR();
-
- glBindBuffer(GL_PIXEL_PACK_BUFFER, mPBO);
- glReadPixels(0, 0, 16, 16, GL_RGBA, GL_UNSIGNED_BYTE, 0);
-
- GLvoid *mappedPtr = glMapBufferRange(GL_PIXEL_PACK_BUFFER, 0, 32, GL_MAP_READ_BIT);
- GLColor *dataColor = static_cast<GLColor *>(mappedPtr);
- EXPECT_GL_NO_ERROR();
-
- EXPECT_EQ(GLColor::red, dataColor[0]);
-
- glUnmapBuffer(GL_PIXEL_PACK_BUFFER);
- EXPECT_GL_NO_ERROR();
-}
-
-// Test an error is generated when the PBO is too small.
-TEST_P(ReadPixelsPBOTest, PBOTooSmall)
-{
- Reset(4 * 16 * 16 - 1, 16, 16);
-
- glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
- glClear(GL_COLOR_BUFFER_BIT);
- EXPECT_GL_NO_ERROR();
-
- glBindBuffer(GL_PIXEL_PACK_BUFFER, mPBO);
- glReadPixels(0, 0, 16, 16, GL_RGBA, GL_UNSIGNED_BYTE, 0);
-
- EXPECT_GL_ERROR(GL_INVALID_OPERATION);
-}
-
-// Test an error is generated when the PBO is mapped.
-TEST_P(ReadPixelsPBOTest, PBOMapped)
-{
- glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
- glClear(GL_COLOR_BUFFER_BIT);
- EXPECT_GL_NO_ERROR();
-
- glBindBuffer(GL_PIXEL_PACK_BUFFER, mPBO);
- glMapBufferRange(GL_PIXEL_PACK_BUFFER, 0, 32, GL_MAP_READ_BIT);
- glReadPixels(0, 0, 16, 16, GL_RGBA, GL_UNSIGNED_BYTE, 0);
-
- EXPECT_GL_ERROR(GL_INVALID_OPERATION);
-}
-
// Test that binding a PBO to ARRAY_BUFFER works as expected.
TEST_P(ReadPixelsPBOTest, ArrayBufferTarget)
{
@@ -174,10 +128,13 @@ TEST_P(ReadPixelsPBOTest, ArrayBufferTarget)
glBindBuffer(GL_ARRAY_BUFFER, mPBO);
GLvoid *mappedPtr = glMapBufferRange(GL_ARRAY_BUFFER, 0, 32, GL_MAP_READ_BIT);
- GLColor *dataColor = static_cast<GLColor *>(mappedPtr);
+ unsigned char *dataPtr = static_cast<unsigned char *>(mappedPtr);
EXPECT_GL_NO_ERROR();
- EXPECT_EQ(GLColor::red, dataColor[0]);
+ EXPECT_EQ(255, dataPtr[0]);
+ EXPECT_EQ(0, dataPtr[1]);
+ EXPECT_EQ(0, dataPtr[2]);
+ EXPECT_EQ(255, dataPtr[3]);
glUnmapBuffer(GL_ARRAY_BUFFER);
EXPECT_GL_NO_ERROR();
@@ -209,15 +166,21 @@ TEST_P(ReadPixelsPBOTest, ExistingDataPreserved)
// Read 16x16 region from green backbuffer to PBO at offset 16
glReadPixels(0, 0, 16, 16, GL_RGBA, GL_UNSIGNED_BYTE, reinterpret_cast<GLvoid*>(16));
- GLvoid *mappedPtr = glMapBufferRange(GL_PIXEL_PACK_BUFFER, 0, 32, GL_MAP_READ_BIT);
- GLColor *dataColor = static_cast<GLColor *>(mappedPtr);
+ GLvoid * mappedPtr = glMapBufferRange(GL_PIXEL_PACK_BUFFER, 0, 32, GL_MAP_READ_BIT);
+ unsigned char *dataPtr = static_cast<unsigned char *>(mappedPtr);
EXPECT_GL_NO_ERROR();
// Test pixel 0 is red (existing data)
- EXPECT_EQ(GLColor::red, dataColor[0]);
+ EXPECT_EQ(255, dataPtr[0]);
+ EXPECT_EQ(0, dataPtr[1]);
+ EXPECT_EQ(0, dataPtr[2]);
+ EXPECT_EQ(255, dataPtr[3]);
// Test pixel 16 is green (new data)
- EXPECT_EQ(GLColor::green, dataColor[16]);
+ EXPECT_EQ(0, dataPtr[16 * 4 + 0]);
+ EXPECT_EQ(255, dataPtr[16 * 4 + 1]);
+ EXPECT_EQ(0, dataPtr[16 * 4 + 2]);
+ EXPECT_EQ(255, dataPtr[16 * 4 + 3]);
glUnmapBuffer(GL_PIXEL_PACK_BUFFER);
EXPECT_GL_NO_ERROR();
@@ -239,11 +202,14 @@ TEST_P(ReadPixelsPBOTest, SubDataPreservesContents)
glBindBuffer(GL_ARRAY_BUFFER, mPBO);
glBufferSubData(GL_ARRAY_BUFFER, 0, 4, data);
- GLvoid *mappedPtr = glMapBufferRange(GL_ARRAY_BUFFER, 0, 32, GL_MAP_READ_BIT);
- GLColor *dataColor = static_cast<GLColor *>(mappedPtr);
+ GLvoid *mappedPtr = glMapBufferRange(GL_ARRAY_BUFFER, 0, 32, GL_MAP_READ_BIT);
+ unsigned char *dataPtr = static_cast<unsigned char *>(mappedPtr);
EXPECT_GL_NO_ERROR();
- EXPECT_EQ(GLColor(1, 2, 3, 4), dataColor[0]);
+ EXPECT_EQ(1, dataPtr[0]);
+ EXPECT_EQ(2, dataPtr[1]);
+ EXPECT_EQ(3, dataPtr[2]);
+ EXPECT_EQ(4, dataPtr[3]);
glUnmapBuffer(GL_ARRAY_BUFFER);
EXPECT_GL_NO_ERROR();
@@ -272,12 +238,19 @@ TEST_P(ReadPixelsPBOTest, SubDataOffsetPreservesContents)
glBindBuffer(GL_ARRAY_BUFFER, mPBO);
glBufferSubData(GL_ARRAY_BUFFER, 16, 4, data);
- GLvoid *mappedPtr = glMapBufferRange(GL_ARRAY_BUFFER, 0, 32, GL_MAP_READ_BIT);
- GLColor *dataColor = static_cast<GLColor *>(mappedPtr);
+ GLvoid *mappedPtr = glMapBufferRange(GL_ARRAY_BUFFER, 0, 32, GL_MAP_READ_BIT);
+ unsigned char *dataPtr = static_cast<unsigned char *>(mappedPtr);
EXPECT_GL_NO_ERROR();
- EXPECT_EQ(GLColor::red, dataColor[0]);
- EXPECT_EQ(GLColor(1, 2, 3, 4), dataColor[4]);
+ EXPECT_EQ(255, dataPtr[0]);
+ EXPECT_EQ(0, dataPtr[1]);
+ EXPECT_EQ(0, dataPtr[2]);
+ EXPECT_EQ(255, dataPtr[3]);
+
+ EXPECT_EQ(1, dataPtr[16]);
+ EXPECT_EQ(2, dataPtr[17]);
+ EXPECT_EQ(3, dataPtr[18]);
+ EXPECT_EQ(4, dataPtr[19]);
glUnmapBuffer(GL_ARRAY_BUFFER);
EXPECT_GL_NO_ERROR();
@@ -331,9 +304,10 @@ class ReadPixelsPBODrawTest : public ReadPixelsPBOTest
// Test that we can draw with PBO data.
TEST_P(ReadPixelsPBODrawTest, DrawWithPBO)
{
- GLColor color(1, 2, 3, 4);
+ unsigned char data[4] = { 1, 2, 3, 4 };
+
glBindTexture(GL_TEXTURE_2D, mTexture);
- glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, &color);
+ glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, data);
EXPECT_GL_NO_ERROR();
glBindFramebuffer(GL_READ_FRAMEBUFFER, mFBO);
@@ -370,11 +344,14 @@ TEST_P(ReadPixelsPBODrawTest, DrawWithPBO)
glDrawArrays(GL_POINTS, 0, 1);
EXPECT_GL_NO_ERROR();
- color = GLColor(0, 0, 0, 0);
- glReadPixels(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, &color);
+ memset(data, 0, 4);
+ glReadPixels(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, data);
EXPECT_GL_NO_ERROR();
- EXPECT_EQ(GLColor(1, 2, 3, 4), color);
+ EXPECT_EQ(1, data[0]);
+ EXPECT_EQ(2, data[1]);
+ EXPECT_EQ(3, data[2]);
+ EXPECT_EQ(4, data[3]);
}
class ReadPixelsMultisampleTest : public ReadPixelsTest
diff --git a/gfx/angle/src/tests/gl_tests/RobustClientMemoryTest.cpp b/gfx/angle/src/tests/gl_tests/RobustClientMemoryTest.cpp
deleted file mode 100644
index b5f89e904..000000000
--- a/gfx/angle/src/tests/gl_tests/RobustClientMemoryTest.cpp
+++ /dev/null
@@ -1,385 +0,0 @@
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-
-// RobustClientMemoryTest.cpp : Tests of the GL_ANGLE_robust_client_memory extension.
-
-#include "test_utils/ANGLETest.h"
-
-#include "test_utils/gl_raii.h"
-
-namespace angle
-{
-class RobustClientMemoryTest : public ANGLETest
-{
- protected:
- RobustClientMemoryTest()
- {
- setWindowWidth(128);
- setWindowHeight(128);
- setConfigRedBits(8);
- setConfigGreenBits(8);
- setConfigBlueBits(8);
- setConfigAlphaBits(8);
- }
-
- void SetUp() override
- {
- ANGLETest::SetUp();
-
- glGetBooleanvRobustANGLE = reinterpret_cast<PFNGLGETBOOLEANVROBUSTANGLE>(
- eglGetProcAddress("glGetBooleanvRobustANGLE"));
- glGetBufferParameterivRobustANGLE = reinterpret_cast<PFNGLGETBUFFERPARAMETERIVROBUSTANGLE>(
- eglGetProcAddress("glGetBufferParameterivRobustANGLE"));
- glGetFloatvRobustANGLE = reinterpret_cast<PFNGLGETFLOATVROBUSTANGLE>(
- eglGetProcAddress("glGetFloatvRobustANGLE"));
- glGetFramebufferAttachmentParameterivRobustANGLE =
- reinterpret_cast<PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVROBUSTANGLE>(
- eglGetProcAddress("glGetFramebufferAttachmentParameterivRobustANGLE"));
- glGetIntegervRobustANGLE = reinterpret_cast<PFNGLGETINTEGERVROBUSTANGLE>(
- eglGetProcAddress("glGetIntegervRobustANGLE"));
- glGetProgramivRobustANGLE = reinterpret_cast<PFNGLGETPROGRAMIVROBUSTANGLE>(
- eglGetProcAddress("glGetProgramivRobustANGLE"));
- glGetRenderbufferParameterivRobustANGLE =
- reinterpret_cast<PFNGLGETRENDERBUFFERPARAMETERIVROBUSTANGLE>(
- eglGetProcAddress("glGetRenderbufferParameterivRobustANGLE"));
- glGetShaderivRobustANGLE = reinterpret_cast<PFNGLGETSHADERIVROBUSTANGLE>(
- eglGetProcAddress("glGetShaderivRobustANGLE"));
- glGetTexParameterfvRobustANGLE = reinterpret_cast<PFNGLGETTEXPARAMETERFVROBUSTANGLE>(
- eglGetProcAddress("glGetTexParameterfvRobustANGLE"));
- glGetTexParameterivRobustANGLE = reinterpret_cast<PFNGLGETTEXPARAMETERIVROBUSTANGLE>(
- eglGetProcAddress("glGetTexParameterivRobustANGLE"));
- glGetUniformfvRobustANGLE = reinterpret_cast<PFNGLGETUNIFORMFVROBUSTANGLE>(
- eglGetProcAddress("glGetUniformfvRobustANGLE"));
- glGetUniformivRobustANGLE = reinterpret_cast<PFNGLGETUNIFORMIVROBUSTANGLE>(
- eglGetProcAddress("glGetUniformivRobustANGLE"));
- glGetVertexAttribfvRobustANGLE = reinterpret_cast<PFNGLGETVERTEXATTRIBFVROBUSTANGLE>(
- eglGetProcAddress("glGetVertexAttribfvRobustANGLE"));
- glGetVertexAttribivRobustANGLE = reinterpret_cast<PFNGLGETVERTEXATTRIBIVROBUSTANGLE>(
- eglGetProcAddress("glGetVertexAttribivRobustANGLE"));
- glGetVertexAttribPointervRobustANGLE =
- reinterpret_cast<PFNGLGETVERTEXATTRIBPOINTERVROBUSTANGLE>(
- eglGetProcAddress("glGetVertexAttribPointervRobustANGLE"));
- glReadPixelsRobustANGLE = reinterpret_cast<PFNGLREADPIXELSROBUSTANGLE>(
- eglGetProcAddress("glReadPixelsRobustANGLE"));
- glTexImage2DRobustANGLE = reinterpret_cast<PFNGLTEXIMAGE2DROBUSTANGLE>(
- eglGetProcAddress("glTexImage2DRobustANGLE"));
- glTexParameterfvRobustANGLE = reinterpret_cast<PFNGLTEXPARAMETERFVROBUSTANGLE>(
- eglGetProcAddress("glTexParameterfvRobustANGLE"));
- glTexParameterivRobustANGLE = reinterpret_cast<PFNGLTEXPARAMETERIVROBUSTANGLE>(
- eglGetProcAddress("glTexParameterivRobustANGLE"));
- glTexSubImage2DRobustANGLE = reinterpret_cast<PFNGLTEXSUBIMAGE2DROBUSTANGLE>(
- eglGetProcAddress("glTexSubImage2DRobustANGLE"));
- glTexImage3DRobustANGLE = reinterpret_cast<PFNGLTEXIMAGE3DROBUSTANGLE>(
- eglGetProcAddress("glTexImage3DRobustANGLE"));
- glTexSubImage3DRobustANGLE = reinterpret_cast<PFNGLTEXSUBIMAGE3DROBUSTANGLE>(
- eglGetProcAddress("glTexSubImage3DRobustANGLE"));
- glGetQueryivRobustANGLE = reinterpret_cast<PFNGLGETQUERYIVROBUSTANGLE>(
- eglGetProcAddress("glGetQueryivRobustANGLE"));
- glGetQueryObjectuivRobustANGLE = reinterpret_cast<PFNGLGETQUERYOBJECTUIVROBUSTANGLE>(
- eglGetProcAddress("glGetQueryObjectuivRobustANGLE"));
- glGetBufferPointervRobustANGLE = reinterpret_cast<PFNGLGETBUFFERPOINTERVROBUSTANGLE>(
- eglGetProcAddress("glGetBufferPointervRobustANGLE"));
- glGetIntegeri_vRobustANGLE = reinterpret_cast<PFNGLGETINTEGERI_VROBUSTANGLE>(
- eglGetProcAddress("glGetIntegeri_vRobustANGLE"));
- glGetInternalformativRobustANGLE = reinterpret_cast<PFNGETINTERNALFORMATIVROBUSTANGLE>(
- eglGetProcAddress("glGetInternalformativRobustANGLE"));
- glGetVertexAttribIivRobustANGLE = reinterpret_cast<PFNGLGETVERTEXATTRIBIIVROBUSTANGLE>(
- eglGetProcAddress("glGetVertexAttribIivRobustANGLE"));
- glGetVertexAttribIuivRobustANGLE = reinterpret_cast<PFNGLGETVERTEXATTRIBIUIVROBUSTANGLE>(
- eglGetProcAddress("glGetVertexAttribIuivRobustANGLE"));
- glGetUniformuivRobustANGLE = reinterpret_cast<PFNGLGETUNIFORMUIVROBUSTANGLE>(
- eglGetProcAddress("glGetUniformuivRobustANGLE"));
- glGetActiveUniformBlockivRobustANGLE =
- reinterpret_cast<PFNGLGETACTIVEUNIFORMBLOCKIVROBUSTANGLE>(
- eglGetProcAddress("glGetActiveUniformBlockivRobustANGLE"));
- glGetInteger64vRobustANGLE = reinterpret_cast<PFNGLGETINTEGER64VROBUSTANGLE>(
- eglGetProcAddress("glGetInteger64vRobustANGLE"));
- glGetInteger64i_vRobustANGLE = reinterpret_cast<PFNGLGETINTEGER64I_VROBUSTANGLE>(
- eglGetProcAddress("glGetInteger64i_vRobustANGLE"));
- glGetBufferParameteri64vRobustANGLE =
- reinterpret_cast<PFNGLGETBUFFERPARAMETERI64VROBUSTANGLE>(
- eglGetProcAddress("glGetBufferParameteri64vRobustANGLE"));
- glSamplerParameterivRobustANGLE = reinterpret_cast<PFNGLSAMPLERPARAMETERIVROBUSTANGLE>(
- eglGetProcAddress("glSamplerParameterivRobustANGLE"));
- glSamplerParameterfvRobustANGLE = reinterpret_cast<PFNGLSAMPLERPARAMETERFVROBUSTANGLE>(
- eglGetProcAddress("glSamplerParameterfvRobustANGLE"));
- glGetSamplerParameterivRobustANGLE =
- reinterpret_cast<PFNGLGETSAMPLERPARAMETERIVROBUSTANGLE>(
- eglGetProcAddress("glGetSamplerParameterivRobustANGLE"));
- glGetSamplerParameterfvRobustANGLE =
- reinterpret_cast<PFNGLGETSAMPLERPARAMETERFVROBUSTANGLE>(
- eglGetProcAddress("glGetSamplerParameterfvRobustANGLE"));
- glGetFramebufferParameterivRobustANGLE =
- reinterpret_cast<PFNGLGETFRAMEBUFFERPARAMETERIVROBUSTANGLE>(
- eglGetProcAddress("glGetFramebufferParameterivRobustANGLE"));
- glGetProgramInterfaceivRobustANGLE =
- reinterpret_cast<PFNGLGETPROGRAMINTERFACEIVROBUSTANGLE>(
- eglGetProcAddress("glGetProgramInterfaceivRobustANGLE"));
- glGetBooleani_vRobustANGLE = reinterpret_cast<PFNGLGETBOOLEANI_VROBUSTANGLE>(
- eglGetProcAddress("glGetBooleani_vRobustANGLE"));
- glGetMultisamplefvRobustANGLE = reinterpret_cast<PFNGLGETMULTISAMPLEFVROBUSTANGLE>(
- eglGetProcAddress("glGetMultisamplefvRobustANGLE"));
- glGetTexLevelParameterivRobustANGLE =
- reinterpret_cast<PFNGLGETTEXLEVELPARAMETERIVROBUSTANGLE>(
- eglGetProcAddress("glGetTexLevelParameterivRobustANGLE"));
- glGetTexLevelParameterfvRobustANGLE =
- reinterpret_cast<PFNGLGETTEXLEVELPARAMETERFVROBUSTANGLE>(
- eglGetProcAddress("glGetTexLevelParameterfvRobustANGLE"));
- glGetPointervRobustANGLERobustANGLE =
- reinterpret_cast<PFNGLGETPOINTERVROBUSTANGLEROBUSTANGLE>(
- eglGetProcAddress("glGetPointervRobustANGLERobustANGLE"));
- glReadnPixelsRobustANGLE = reinterpret_cast<PFNGLREADNPIXELSROBUSTANGLE>(
- eglGetProcAddress("glReadnPixelsRobustANGLE"));
- glGetnUniformfvRobustANGLE = reinterpret_cast<PFNGLGETNUNIFORMFVROBUSTANGLE>(
- eglGetProcAddress("glGetnUniformfvRobustANGLE"));
- glGetnUniformivRobustANGLE = reinterpret_cast<PFNGLGETNUNIFORMIVROBUSTANGLE>(
- eglGetProcAddress("glGetnUniformivRobustANGLE"));
- glGetnUniformuivRobustANGLE = reinterpret_cast<PFNGLGETNUNIFORMUIVROBUSTANGLE>(
- eglGetProcAddress("glGetnUniformuivRobustANGLE"));
- glTexParameterIivRobustANGLE = reinterpret_cast<PFNGLTEXPARAMETERIIVROBUSTANGLE>(
- eglGetProcAddress("glTexParameterIivRobustANGLE"));
- glTexParameterIuivRobustANGLE = reinterpret_cast<PFNGLTEXPARAMETERIUIVROBUSTANGLE>(
- eglGetProcAddress("glTexParameterIuivRobustANGLE"));
- glGetTexParameterIivRobustANGLE = reinterpret_cast<PFNGLGETTEXPARAMETERIIVROBUSTANGLE>(
- eglGetProcAddress("glGetTexParameterIivRobustANGLE"));
- glGetTexParameterIuivRobustANGLE = reinterpret_cast<PFNGLGETTEXPARAMETERIUIVROBUSTANGLE>(
- eglGetProcAddress("glGetTexParameterIuivRobustANGLE"));
- glSamplerParameterIivRobustANGLE = reinterpret_cast<PFNGLSAMPLERPARAMETERIIVROBUSTANGLE>(
- eglGetProcAddress("glSamplerParameterIivRobustANGLE"));
- glSamplerParameterIuivRobustANGLE = reinterpret_cast<PFNGLSAMPLERPARAMETERIUIVROBUSTANGLE>(
- eglGetProcAddress("glSamplerParameterIuivRobustANGLE"));
- glGetSamplerParameterIivRobustANGLE =
- reinterpret_cast<PFNGLGETSAMPLERPARAMETERIIVROBUSTANGLE>(
- eglGetProcAddress("glGetSamplerParameterIivRobustANGLE"));
- glGetSamplerParameterIuivRobustANGLE =
- reinterpret_cast<PFNGLGETSAMPLERPARAMETERIUIVROBUSTANGLE>(
- eglGetProcAddress("glGetSamplerParameterIuivRobustANGLE"));
- glGetQueryObjectivRobustANGLE = reinterpret_cast<PFNGLGETQUERYOBJECTIVROBUSTANGLE>(
- eglGetProcAddress("glGetQueryObjectivRobustANGLE"));
- glGetQueryObjecti64vRobustANGLE = reinterpret_cast<PFNGLGETQUERYOBJECTI64VROBUSTANGLE>(
- eglGetProcAddress("glGetQueryObjecti64vRobustANGLE"));
- glGetQueryObjectui64vRobustANGLE = reinterpret_cast<PFNGLGETQUERYOBJECTUI64VROBUSTANGLE>(
- eglGetProcAddress("glGetQueryObjectui64vRobustANGLE"));
- }
-
- void TearDown() override { ANGLETest::TearDown(); }
-
- bool extensionsPresent() const
- {
- if (!extensionEnabled("GL_ANGLE_robust_client_memory"))
- {
- std::cout << "Test skipped because GL_ANGLE_robust_client_memory is not available.";
- return false;
- }
-
- return true;
- }
-
- PFNGLGETBOOLEANVROBUSTANGLE glGetBooleanvRobustANGLE = nullptr;
- PFNGLGETBUFFERPARAMETERIVROBUSTANGLE glGetBufferParameterivRobustANGLE = nullptr;
- PFNGLGETFLOATVROBUSTANGLE glGetFloatvRobustANGLE = nullptr;
- PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVROBUSTANGLE
- glGetFramebufferAttachmentParameterivRobustANGLE = nullptr;
- PFNGLGETINTEGERVROBUSTANGLE glGetIntegervRobustANGLE = nullptr;
- PFNGLGETPROGRAMIVROBUSTANGLE glGetProgramivRobustANGLE = nullptr;
- PFNGLGETRENDERBUFFERPARAMETERIVROBUSTANGLE glGetRenderbufferParameterivRobustANGLE = nullptr;
- PFNGLGETSHADERIVROBUSTANGLE glGetShaderivRobustANGLE = nullptr;
- PFNGLGETTEXPARAMETERFVROBUSTANGLE glGetTexParameterfvRobustANGLE = nullptr;
- PFNGLGETTEXPARAMETERIVROBUSTANGLE glGetTexParameterivRobustANGLE = nullptr;
- PFNGLGETUNIFORMFVROBUSTANGLE glGetUniformfvRobustANGLE = nullptr;
- PFNGLGETUNIFORMIVROBUSTANGLE glGetUniformivRobustANGLE = nullptr;
- PFNGLGETVERTEXATTRIBFVROBUSTANGLE glGetVertexAttribfvRobustANGLE = nullptr;
- PFNGLGETVERTEXATTRIBIVROBUSTANGLE glGetVertexAttribivRobustANGLE = nullptr;
- PFNGLGETVERTEXATTRIBPOINTERVROBUSTANGLE glGetVertexAttribPointervRobustANGLE = nullptr;
- PFNGLREADPIXELSROBUSTANGLE glReadPixelsRobustANGLE = nullptr;
- PFNGLTEXIMAGE2DROBUSTANGLE glTexImage2DRobustANGLE = nullptr;
- PFNGLTEXPARAMETERFVROBUSTANGLE glTexParameterfvRobustANGLE = nullptr;
- PFNGLTEXPARAMETERIVROBUSTANGLE glTexParameterivRobustANGLE = nullptr;
- PFNGLTEXSUBIMAGE2DROBUSTANGLE glTexSubImage2DRobustANGLE = nullptr;
- PFNGLTEXIMAGE3DROBUSTANGLE glTexImage3DRobustANGLE = nullptr;
- PFNGLTEXSUBIMAGE3DROBUSTANGLE glTexSubImage3DRobustANGLE = nullptr;
- PFNGLGETQUERYIVROBUSTANGLE glGetQueryivRobustANGLE = nullptr;
- PFNGLGETQUERYOBJECTUIVROBUSTANGLE glGetQueryObjectuivRobustANGLE = nullptr;
- PFNGLGETBUFFERPOINTERVROBUSTANGLE glGetBufferPointervRobustANGLE = nullptr;
- PFNGLGETINTEGERI_VROBUSTANGLE glGetIntegeri_vRobustANGLE = nullptr;
- PFNGETINTERNALFORMATIVROBUSTANGLE glGetInternalformativRobustANGLE = nullptr;
- PFNGLGETVERTEXATTRIBIIVROBUSTANGLE glGetVertexAttribIivRobustANGLE = nullptr;
- PFNGLGETVERTEXATTRIBIUIVROBUSTANGLE glGetVertexAttribIuivRobustANGLE = nullptr;
- PFNGLGETUNIFORMUIVROBUSTANGLE glGetUniformuivRobustANGLE = nullptr;
- PFNGLGETACTIVEUNIFORMBLOCKIVROBUSTANGLE glGetActiveUniformBlockivRobustANGLE = nullptr;
- PFNGLGETINTEGER64VROBUSTANGLE glGetInteger64vRobustANGLE = nullptr;
- PFNGLGETINTEGER64I_VROBUSTANGLE glGetInteger64i_vRobustANGLE = nullptr;
- PFNGLGETBUFFERPARAMETERI64VROBUSTANGLE glGetBufferParameteri64vRobustANGLE = nullptr;
- PFNGLSAMPLERPARAMETERIVROBUSTANGLE glSamplerParameterivRobustANGLE = nullptr;
- PFNGLSAMPLERPARAMETERFVROBUSTANGLE glSamplerParameterfvRobustANGLE = nullptr;
- PFNGLGETSAMPLERPARAMETERIVROBUSTANGLE glGetSamplerParameterivRobustANGLE = nullptr;
- PFNGLGETSAMPLERPARAMETERFVROBUSTANGLE glGetSamplerParameterfvRobustANGLE = nullptr;
- PFNGLGETFRAMEBUFFERPARAMETERIVROBUSTANGLE glGetFramebufferParameterivRobustANGLE = nullptr;
- PFNGLGETPROGRAMINTERFACEIVROBUSTANGLE glGetProgramInterfaceivRobustANGLE = nullptr;
- PFNGLGETBOOLEANI_VROBUSTANGLE glGetBooleani_vRobustANGLE = nullptr;
- PFNGLGETMULTISAMPLEFVROBUSTANGLE glGetMultisamplefvRobustANGLE = nullptr;
- PFNGLGETTEXLEVELPARAMETERIVROBUSTANGLE glGetTexLevelParameterivRobustANGLE = nullptr;
- PFNGLGETTEXLEVELPARAMETERFVROBUSTANGLE glGetTexLevelParameterfvRobustANGLE = nullptr;
- PFNGLGETPOINTERVROBUSTANGLEROBUSTANGLE glGetPointervRobustANGLERobustANGLE = nullptr;
- PFNGLREADNPIXELSROBUSTANGLE glReadnPixelsRobustANGLE = nullptr;
- PFNGLGETNUNIFORMFVROBUSTANGLE glGetnUniformfvRobustANGLE = nullptr;
- PFNGLGETNUNIFORMIVROBUSTANGLE glGetnUniformivRobustANGLE = nullptr;
- PFNGLGETNUNIFORMUIVROBUSTANGLE glGetnUniformuivRobustANGLE = nullptr;
- PFNGLTEXPARAMETERIIVROBUSTANGLE glTexParameterIivRobustANGLE = nullptr;
- PFNGLTEXPARAMETERIUIVROBUSTANGLE glTexParameterIuivRobustANGLE = nullptr;
- PFNGLGETTEXPARAMETERIIVROBUSTANGLE glGetTexParameterIivRobustANGLE = nullptr;
- PFNGLGETTEXPARAMETERIUIVROBUSTANGLE glGetTexParameterIuivRobustANGLE = nullptr;
- PFNGLSAMPLERPARAMETERIIVROBUSTANGLE glSamplerParameterIivRobustANGLE = nullptr;
- PFNGLSAMPLERPARAMETERIUIVROBUSTANGLE glSamplerParameterIuivRobustANGLE = nullptr;
- PFNGLGETSAMPLERPARAMETERIIVROBUSTANGLE glGetSamplerParameterIivRobustANGLE = nullptr;
- PFNGLGETSAMPLERPARAMETERIUIVROBUSTANGLE glGetSamplerParameterIuivRobustANGLE = nullptr;
- PFNGLGETQUERYOBJECTIVROBUSTANGLE glGetQueryObjectivRobustANGLE = nullptr;
- PFNGLGETQUERYOBJECTI64VROBUSTANGLE glGetQueryObjecti64vRobustANGLE = nullptr;
- PFNGLGETQUERYOBJECTUI64VROBUSTANGLE glGetQueryObjectui64vRobustANGLE = nullptr;
-};
-
-// Test basic usage and validation of glGetIntegervRobustANGLE
-TEST_P(RobustClientMemoryTest, GetInteger)
-{
- if (!extensionsPresent())
- {
- return;
- }
-
- // Verify that the robust and regular entry points return the same values
- GLint resultRobust;
- GLsizei length;
- glGetIntegervRobustANGLE(GL_MAX_VERTEX_ATTRIBS, 1, &length, &resultRobust);
- EXPECT_GL_NO_ERROR();
- EXPECT_EQ(1, length);
-
- GLint resultRegular;
- glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &resultRegular);
- EXPECT_GL_NO_ERROR();
- EXPECT_EQ(resultRegular, resultRobust);
-
- // Query a dynamic value
- GLint numCompressedFormats;
- glGetIntegervRobustANGLE(GL_NUM_COMPRESSED_TEXTURE_FORMATS, 1, &length, &numCompressedFormats);
- ASSERT_GL_NO_ERROR();
- EXPECT_EQ(1, length);
-
- if (numCompressedFormats > 0)
- {
- std::vector<GLint> resultBuf(numCompressedFormats * 2, 0);
-
- // Test when the bufSize is too low
- glGetIntegervRobustANGLE(GL_COMPRESSED_TEXTURE_FORMATS, numCompressedFormats - 1, &length,
- resultBuf.data());
- EXPECT_GL_ERROR(GL_INVALID_OPERATION);
- EXPECT_TRUE(std::all_of(resultBuf.begin(), resultBuf.end(),
- [](GLint value) { return value == 0; }));
-
- // Make sure the GL doesn't touch the end of the buffer
- glGetIntegervRobustANGLE(GL_COMPRESSED_TEXTURE_FORMATS,
- static_cast<GLsizei>(resultBuf.size()), &length, resultBuf.data());
- EXPECT_GL_NO_ERROR();
- EXPECT_EQ(numCompressedFormats, length);
- EXPECT_TRUE(std::none_of(resultBuf.begin(), resultBuf.begin() + length,
- [](GLint value) { return value == 0; }));
- EXPECT_TRUE(std::all_of(resultBuf.begin() + length, resultBuf.end(),
- [](GLint value) { return value == 0; }));
- }
-
- // Test with null length
- glGetIntegervRobustANGLE(GL_MAX_VARYING_VECTORS, 1, nullptr, &resultRobust);
- EXPECT_GL_NO_ERROR();
-
- glGetIntegervRobustANGLE(GL_MAX_VIEWPORT_DIMS, 1, nullptr, &resultRobust);
- EXPECT_GL_ERROR(GL_INVALID_OPERATION);
-
- GLint maxViewportDims[2];
- glGetIntegervRobustANGLE(GL_MAX_VIEWPORT_DIMS, 2, nullptr, maxViewportDims);
- EXPECT_GL_NO_ERROR();
-}
-
-// Test basic usage and validation of glTexImage2DRobustANGLE
-TEST_P(RobustClientMemoryTest, TexImage2D)
-{
- if (!extensionsPresent())
- {
- return;
- }
- GLTexture tex;
- glBindTexture(GL_TEXTURE_2D, tex.get());
-
- GLsizei dataDimension = 1024;
- std::vector<GLubyte> rgbaData(dataDimension * dataDimension * 4);
-
- // Test the regular case
- glTexImage2DRobustANGLE(GL_TEXTURE_2D, 0, GL_RGBA, dataDimension, dataDimension, 0, GL_RGBA,
- GL_UNSIGNED_BYTE, static_cast<GLsizei>(rgbaData.size()),
- rgbaData.data());
- EXPECT_GL_NO_ERROR();
-
- // Test with a data size that is too small
- glTexImage2DRobustANGLE(GL_TEXTURE_2D, 0, GL_RGBA, dataDimension, dataDimension, 0, GL_RGBA,
- GL_UNSIGNED_BYTE, static_cast<GLsizei>(rgbaData.size()) / 2,
- rgbaData.data());
- EXPECT_GL_ERROR(GL_INVALID_OPERATION);
-
- if (getClientMajorVersion() >= 3)
- {
- // Set an unpack parameter that would cause the driver to read past the end of the buffer
- glPixelStorei(GL_UNPACK_ROW_LENGTH, dataDimension + 1);
- glTexImage2DRobustANGLE(GL_TEXTURE_2D, 0, GL_RGBA, dataDimension, dataDimension, 0, GL_RGBA,
- GL_UNSIGNED_BYTE, static_cast<GLsizei>(rgbaData.size()),
- rgbaData.data());
- EXPECT_GL_ERROR(GL_INVALID_OPERATION);
- }
-}
-
-// Test basic usage and validation of glReadPixelsRobustANGLE
-TEST_P(RobustClientMemoryTest, ReadPixels)
-{
- if (!extensionsPresent())
- {
- return;
- }
-
- GLsizei dataDimension = 16;
- std::vector<GLubyte> rgbaData(dataDimension * dataDimension * 4);
-
- // Test the regular case
- GLsizei length = 0;
- glReadPixelsRobustANGLE(0, 0, dataDimension, dataDimension, GL_RGBA, GL_UNSIGNED_BYTE,
- static_cast<GLsizei>(rgbaData.size()), &length, rgbaData.data());
- EXPECT_GL_NO_ERROR();
- EXPECT_EQ(static_cast<GLsizei>(rgbaData.size()), length);
-
- // Test with a data size that is too small
- glReadPixelsRobustANGLE(0, 0, dataDimension, dataDimension, GL_RGBA, GL_UNSIGNED_BYTE,
- static_cast<GLsizei>(rgbaData.size()) - 1, &length, rgbaData.data());
- EXPECT_GL_ERROR(GL_INVALID_OPERATION);
-
- if (getClientMajorVersion() >= 3)
- {
- // Set a pack parameter that would cause the driver to write past the end of the buffer
- glPixelStorei(GL_PACK_ROW_LENGTH, dataDimension + 1);
- glReadPixelsRobustANGLE(0, 0, dataDimension, dataDimension, GL_RGBA, GL_UNSIGNED_BYTE,
- static_cast<GLsizei>(rgbaData.size()), &length, rgbaData.data());
- EXPECT_GL_ERROR(GL_INVALID_OPERATION);
- }
-}
-
-// Use this to select which configurations (e.g. which renderer, which GLES major version) these
-// tests should be run against.
-ANGLE_INSTANTIATE_TEST(RobustClientMemoryTest,
- ES2_D3D9(),
- ES2_D3D11(),
- ES3_D3D11(),
- ES2_D3D11_FL9_3(),
- ES2_OPENGL(),
- ES3_OPENGL(),
- ES2_OPENGLES(),
- ES3_OPENGLES());
-
-} // namespace
diff --git a/gfx/angle/src/tests/gl_tests/SRGBFramebufferTest.cpp b/gfx/angle/src/tests/gl_tests/SRGBFramebufferTest.cpp
deleted file mode 100644
index 47ff2f3e0..000000000
--- a/gfx/angle/src/tests/gl_tests/SRGBFramebufferTest.cpp
+++ /dev/null
@@ -1,141 +0,0 @@
-//
-// Copyright 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-
-// SRGBFramebufferTest.cpp: Tests of sRGB framebuffer functionality.
-
-#include "test_utils/ANGLETest.h"
-#include "test_utils/gl_raii.h"
-
-namespace angle
-{
-
-class SRGBFramebufferTest : public ANGLETest
-{
- protected:
- SRGBFramebufferTest()
- {
- setWindowWidth(128);
- setWindowHeight(128);
- setConfigRedBits(8);
- setConfigGreenBits(8);
- setConfigBlueBits(8);
- setConfigAlphaBits(8);
- }
-
- void SetUp() override
- {
- ANGLETest::SetUp();
-
- const std::string vs =
- "precision highp float;\n"
- "attribute vec4 position;\n"
- "void main()\n"
- "{\n"
- " gl_Position = vec4(position.xy, 0.0, 1.0);\n"
- "}\n";
-
- const std::string fs =
- "precision highp float;\n"
- "uniform vec4 color;\n"
- "void main()\n"
- "{\n"
- " gl_FragColor = color;\n"
- "}\n";
-
- mProgram = CompileProgram(vs, fs);
- ASSERT_NE(0u, mProgram);
-
- mColorLocation = glGetUniformLocation(mProgram, "color");
- ASSERT_NE(-1, mColorLocation);
- }
-
- void TearDown() override
- {
- glDeleteProgram(mProgram);
-
- ANGLETest::TearDown();
- }
-
- GLuint mProgram = 0;
- GLint mColorLocation = -1;
-};
-
-// Test basic validation of GL_EXT_sRGB_write_control
-TEST_P(SRGBFramebufferTest, Validation)
-{
- GLenum expectedError =
- extensionEnabled("GL_EXT_sRGB_write_control") ? GL_NO_ERROR : GL_INVALID_ENUM;
-
- GLboolean value = GL_FALSE;
- glEnable(GL_FRAMEBUFFER_SRGB_EXT);
- EXPECT_GL_ERROR(expectedError);
-
- glGetBooleanv(GL_FRAMEBUFFER_SRGB_EXT, &value);
- EXPECT_GL_ERROR(expectedError);
- if (expectedError == GL_NO_ERROR)
- {
- EXPECT_EQ(GL_TRUE, value);
- }
-
- glDisable(GL_FRAMEBUFFER_SRGB_EXT);
- EXPECT_GL_ERROR(expectedError);
-
- glGetBooleanv(GL_FRAMEBUFFER_SRGB_EXT, &value);
- EXPECT_GL_ERROR(expectedError);
- if (expectedError == GL_NO_ERROR)
- {
- EXPECT_EQ(GL_FALSE, value);
- }
-}
-
-// Test basic functionality of GL_EXT_sRGB_write_control
-TEST_P(SRGBFramebufferTest, BasicUsage)
-{
- if (!extensionEnabled("GL_EXT_sRGB_write_control") ||
- (!extensionEnabled("GL_EXT_sRGB") && getClientMajorVersion() < 3))
- {
- std::cout
- << "Test skipped because GL_EXT_sRGB_write_control and GL_EXT_sRGB are not available."
- << std::endl;
- return;
- }
-
- GLColor linearColor(64, 127, 191, 255);
- GLColor srgbColor(13, 54, 133, 255);
-
- GLTexture texture;
- glBindTexture(GL_TEXTURE_2D, texture.get());
- glTexImage2D(GL_TEXTURE_2D, 0, GL_SRGB_ALPHA_EXT, 1, 1, 0, GL_SRGB_ALPHA_EXT, GL_UNSIGNED_BYTE,
- nullptr);
-
- GLFramebuffer framebuffer;
- glBindFramebuffer(GL_FRAMEBUFFER, framebuffer.get());
- glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture.get(), 0);
-
- glUseProgram(mProgram);
- glUniform4fv(mColorLocation, 1, srgbColor.toNormalizedVector().data());
-
- glEnable(GL_FRAMEBUFFER_SRGB_EXT);
- drawQuad(mProgram, "position", 0.5f);
- EXPECT_PIXEL_COLOR_NEAR(0, 0, linearColor, 1.0);
-
- glDisable(GL_FRAMEBUFFER_SRGB_EXT);
- drawQuad(mProgram, "position", 0.5f);
- EXPECT_PIXEL_COLOR_NEAR(0, 0, srgbColor, 1.0);
-}
-
-// Use this to select which configurations (e.g. which renderer, which GLES major version) these
-// tests should be run against.
-ANGLE_INSTANTIATE_TEST(SRGBFramebufferTest,
- ES2_D3D9(),
- ES2_D3D11(),
- ES3_D3D11(),
- ES2_OPENGL(),
- ES3_OPENGL(),
- ES2_OPENGLES(),
- ES3_OPENGLES());
-
-} // namespace angle
diff --git a/gfx/angle/src/tests/gl_tests/SRGBTextureTest.cpp b/gfx/angle/src/tests/gl_tests/SRGBTextureTest.cpp
index f379f429f..5346f6de1 100755
--- a/gfx/angle/src/tests/gl_tests/SRGBTextureTest.cpp
+++ b/gfx/angle/src/tests/gl_tests/SRGBTextureTest.cpp
@@ -5,9 +5,10 @@
//
#include "test_utils/ANGLETest.h"
-#include "test_utils/gl_raii.h"
-namespace angle
+using namespace angle;
+
+namespace
{
class SRGBTextureTest : public ANGLETest
@@ -26,44 +27,12 @@ class SRGBTextureTest : public ANGLETest
void SetUp() override
{
ANGLETest::SetUp();
-
- const std::string vs =
- "precision highp float;\n"
- "attribute vec4 position;\n"
- "varying vec2 texcoord;\n"
- "\n"
- "void main()\n"
- "{\n"
- " gl_Position = vec4(position.xy, 0.0, 1.0);\n"
- " texcoord = (position.xy * 0.5) + 0.5;\n"
- "}\n";
-
- const std::string fs =
- "precision highp float;\n"
- "uniform sampler2D tex;\n"
- "varying vec2 texcoord;\n"
- "\n"
- "void main()\n"
- "{\n"
- " gl_FragColor = texture2D(tex, texcoord);\n"
- "}\n";
-
- mProgram = CompileProgram(vs, fs);
- ASSERT_NE(0u, mProgram);
-
- mTextureLocation = glGetUniformLocation(mProgram, "tex");
- ASSERT_NE(-1, mTextureLocation);
}
void TearDown() override
{
- glDeleteProgram(mProgram);
-
ANGLETest::TearDown();
}
-
- GLuint mProgram = 0;
- GLint mTextureLocation = -1;
};
TEST_P(SRGBTextureTest, SRGBValidation)
@@ -174,95 +143,12 @@ TEST_P(SRGBTextureTest, SRGBARenderbuffer)
glDeleteRenderbuffers(1, &rbo);
}
-// Verify that if the srgb decode extension is available, srgb textures are too
-TEST_P(SRGBTextureTest, SRGBDecodeExtensionAvailability)
-{
- bool hasSRGBDecode = extensionEnabled("GL_EXT_texture_sRGB_decode");
- if (hasSRGBDecode)
- {
- bool hasSRGBTextures = extensionEnabled("GL_EXT_sRGB") || getClientMajorVersion() >= 3;
- EXPECT_TRUE(hasSRGBTextures);
- }
-}
-
-// Test basic functionality of SRGB decode using the texture parameter
-TEST_P(SRGBTextureTest, SRGBDecodeTextureParameter)
-{
- if (!extensionEnabled("GL_EXT_texture_sRGB_decode"))
- {
- std::cout << "Test skipped because GL_EXT_texture_sRGB_decode is not available."
- << std::endl;
- return;
- }
-
- GLColor linearColor(64, 127, 191, 255);
- GLColor srgbColor(13, 54, 133, 255);
-
- GLTexture tex;
- glBindTexture(GL_TEXTURE_2D, tex.get());
- glTexImage2D(GL_TEXTURE_2D, 0, GL_SRGB_ALPHA_EXT, 1, 1, 0, GL_SRGB_ALPHA_EXT, GL_UNSIGNED_BYTE,
- &linearColor);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SRGB_DECODE_EXT, GL_DECODE_EXT);
- ASSERT_GL_NO_ERROR();
-
- glUseProgram(mProgram);
- glUniform1i(mTextureLocation, 0);
-
- glDisable(GL_DEPTH_TEST);
- drawQuad(mProgram, "position", 0.5f);
-
- EXPECT_PIXEL_COLOR_NEAR(0, 0, srgbColor, 1.0);
-
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SRGB_DECODE_EXT, GL_SKIP_DECODE_EXT);
- drawQuad(mProgram, "position", 0.5f);
-
- EXPECT_PIXEL_COLOR_NEAR(0, 0, linearColor, 1.0);
-}
-
-// Test basic functionality of SRGB decode using the sampler parameter
-TEST_P(SRGBTextureTest, SRGBDecodeSamplerParameter)
-{
- if (!extensionEnabled("GL_EXT_texture_sRGB_decode") || getClientMajorVersion() < 3)
- {
- std::cout << "Test skipped because GL_EXT_texture_sRGB_decode or ES3 is not available."
- << std::endl;
- return;
- }
-
- GLColor linearColor(64, 127, 191, 255);
- GLColor srgbColor(13, 54, 133, 255);
-
- GLTexture tex;
- glBindTexture(GL_TEXTURE_2D, tex.get());
- glTexImage2D(GL_TEXTURE_2D, 0, GL_SRGB_ALPHA_EXT, 1, 1, 0, GL_SRGB_ALPHA_EXT, GL_UNSIGNED_BYTE,
- &linearColor);
- ASSERT_GL_NO_ERROR();
-
- GLSampler sampler;
- glBindSampler(0, sampler.get());
- glSamplerParameteri(sampler.get(), GL_TEXTURE_SRGB_DECODE_EXT, GL_DECODE_EXT);
-
- glUseProgram(mProgram);
- glUniform1i(mTextureLocation, 0);
-
- glDisable(GL_DEPTH_TEST);
- drawQuad(mProgram, "position", 0.5f);
-
- EXPECT_PIXEL_COLOR_NEAR(0, 0, srgbColor, 1.0);
-
- glSamplerParameteri(sampler.get(), GL_TEXTURE_SRGB_DECODE_EXT, GL_SKIP_DECODE_EXT);
- drawQuad(mProgram, "position", 0.5f);
-
- EXPECT_PIXEL_COLOR_NEAR(0, 0, linearColor, 1.0);
-}
// Use this to select which configurations (e.g. which renderer, which GLES major version) these tests should be run against.
ANGLE_INSTANTIATE_TEST(SRGBTextureTest,
ES2_D3D9(),
ES2_D3D11(),
ES3_D3D11(),
ES2_OPENGL(),
- ES3_OPENGL(),
- ES2_OPENGLES(),
- ES3_OPENGLES());
+ ES2_OPENGLES());
} // namespace
diff --git a/gfx/angle/src/tests/gl_tests/SwizzleTest.cpp b/gfx/angle/src/tests/gl_tests/SwizzleTest.cpp
index b1ad13102..946dae0be 100755
--- a/gfx/angle/src/tests/gl_tests/SwizzleTest.cpp
+++ b/gfx/angle/src/tests/gl_tests/SwizzleTest.cpp
@@ -399,37 +399,6 @@ TEST_P(SwizzleIntegerTest, RGB8UI_2D)
runTest2D();
}
-// Test that updating the texture data still generates the correct swizzles
-TEST_P(SwizzleTest, SubUpdate)
-{
- GLColor data(1, 64, 128, 200);
- init2DTexture(GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE, &data);
-
- glUseProgram(mProgram);
- glBindTexture(GL_TEXTURE_2D, mTexture);
- glUniform1i(mTextureUniformLocation, 0);
-
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, GL_RED);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_G, GL_RED);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, GL_RED);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_A, GL_RED);
-
- glClear(GL_COLOR_BUFFER_BIT);
- drawQuad(mProgram, "position", 0.5f);
-
- GLColor expectedData(data.R, data.R, data.R, data.R);
- EXPECT_PIXEL_COLOR_EQ(0, 0, expectedData);
-
- GLColor updateData(32, 234, 28, 232);
- glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, &updateData);
-
- glClear(GL_COLOR_BUFFER_BIT);
- drawQuad(mProgram, "position", 0.5f);
-
- GLColor expectedUpdateData(updateData.R, updateData.R, updateData.R, updateData.R);
- EXPECT_PIXEL_COLOR_EQ(0, 0, expectedUpdateData);
-}
-
// Use this to select which configurations (e.g. which renderer, which GLES major version) these tests should be run against.
ANGLE_INSTANTIATE_TEST(SwizzleTest, ES3_D3D11(), ES3_OPENGL(), ES3_OPENGL(3, 3), ES3_OPENGLES());
ANGLE_INSTANTIATE_TEST(SwizzleIntegerTest,
diff --git a/gfx/angle/src/tests/gl_tests/TextureTest.cpp b/gfx/angle/src/tests/gl_tests/TextureTest.cpp
index ee2fc7ca9..1242e0300 100755
--- a/gfx/angle/src/tests/gl_tests/TextureTest.cpp
+++ b/gfx/angle/src/tests/gl_tests/TextureTest.cpp
@@ -4,7 +4,6 @@
// found in the LICENSE file.
//
-#include "common/mathutil.h"
#include "test_utils/ANGLETest.h"
#include "test_utils/gl_raii.h"
@@ -14,24 +13,24 @@ namespace
{
// Take a pixel, and reset the components not covered by the format to default
-// values. In particular, the default value for the alpha component is 255
+// values. In particular, the default value for the alpha component is 65535
// (1.0 as unsigned normalized fixed point value).
-GLColor SliceFormatColor(GLenum format, GLColor full)
+GLColor16 SliceFormatColor16(GLenum format, GLColor16 full)
{
switch (format)
{
case GL_RED:
- return GLColor(full.R, 0, 0, 255u);
+ return GLColor16(full.R, 0, 0, 65535u);
case GL_RG:
- return GLColor(full.R, full.G, 0, 255u);
+ return GLColor16(full.R, full.G, 0, 65535u);
case GL_RGB:
- return GLColor(full.R, full.G, full.B, 255u);
+ return GLColor16(full.R, full.G, full.B, 65535u);
case GL_RGBA:
return full;
default:
UNREACHABLE();
- return GLColor::white;
}
+ return GLColor16::white;
}
class TexCoordDrawTest : public ANGLETest
@@ -1194,40 +1193,6 @@ TEST_P(Texture2DTest, NegativeAPISubImage)
const GLubyte *pixels[20] = { 0 };
glTexSubImage2D(GL_TEXTURE_2D, 0, 1, 1, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
EXPECT_GL_ERROR(GL_INVALID_VALUE);
-
- if (extensionEnabled("GL_EXT_texture_storage"))
- {
- // Create a 1-level immutable texture.
- glTexStorage2DEXT(GL_TEXTURE_2D, 1, GL_RGBA8, 2, 2);
-
- // Try calling sub image on the second level.
- glTexSubImage2D(GL_TEXTURE_2D, 1, 1, 1, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
- EXPECT_GL_ERROR(GL_INVALID_OPERATION);
- }
-}
-
-// Test that querying GL_TEXTURE_BINDING* doesn't cause an unexpected error.
-TEST_P(Texture2DTest, QueryBinding)
-{
- glBindTexture(GL_TEXTURE_2D, 0);
- EXPECT_GL_ERROR(GL_NO_ERROR);
-
- GLint textureBinding;
- glGetIntegerv(GL_TEXTURE_BINDING_2D, &textureBinding);
- EXPECT_GL_NO_ERROR();
- EXPECT_EQ(0, textureBinding);
-
- glGetIntegerv(GL_TEXTURE_BINDING_EXTERNAL_OES, &textureBinding);
- if (extensionEnabled("GL_OES_EGL_image_external") ||
- extensionEnabled("GL_NV_EGL_stream_consumer_external"))
- {
- EXPECT_GL_NO_ERROR();
- EXPECT_EQ(0, textureBinding);
- }
- else
- {
- EXPECT_GL_ERROR(GL_INVALID_ENUM);
- }
}
TEST_P(Texture2DTest, ZeroSizedUploads)
@@ -2797,13 +2762,6 @@ TEST_P(SamplerInStructAsFunctionParameterTest, SamplerInStructAsFunctionParamete
std::cout << "Test skipped on Adreno OpenGLES on Android." << std::endl;
return;
}
-
- if (IsWindows() && IsIntel() && IsOpenGL())
- {
- std::cout << "Test skipped on Windows OpenGL on Intel." << std::endl;
- return;
- }
-
runSamplerInStructTest();
}
@@ -3282,8 +3240,8 @@ class Texture2DNorm16TestES3 : public Texture2DTestES3
void testNorm16Texture(GLint internalformat, GLenum format, GLenum type)
{
- GLushort pixelValue = (type == GL_SHORT) ? 0x7FFF : 0x6A35;
- GLushort imageData[] = {pixelValue, pixelValue, pixelValue, pixelValue};
+ GLushort pixelValue = type == GL_SHORT ? 0x7FFF : 0x6A35;
+ GLColor16 imageData(pixelValue, pixelValue, pixelValue, pixelValue);
setUpProgram();
@@ -3295,17 +3253,20 @@ class Texture2DNorm16TestES3 : public Texture2DTestES3
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16_EXT, 1, 1, 0, GL_RGBA, GL_UNSIGNED_SHORT, nullptr);
glBindTexture(GL_TEXTURE_2D, mTextures[1]);
- glTexImage2D(GL_TEXTURE_2D, 0, internalformat, 1, 1, 0, format, type, imageData);
+ glTexImage2D(GL_TEXTURE_2D, 0, internalformat, 1, 1, 0, format, type, &imageData.R);
EXPECT_GL_NO_ERROR();
drawQuad(mProgram, "position", 0.5f);
- GLubyte expectedValue = (type == GL_SHORT) ? 0xFF : static_cast<GLubyte>(pixelValue >> 8);
+ GLColor16 expectedValue = imageData;
+ if (type == GL_SHORT)
+ {
+ // sampled as signed value; then stored as unsigned value
+ expectedValue = GLColor16::white;
+ }
- EXPECT_PIXEL_COLOR_EQ(
- 0, 0, SliceFormatColor(
- format, GLColor(expectedValue, expectedValue, expectedValue, expectedValue)));
+ EXPECT_PIXEL_COLOR16_EQ(0, 0, SliceFormatColor16(format, expectedValue));
glBindFramebuffer(GL_FRAMEBUFFER, 0);
@@ -3315,7 +3276,7 @@ class Texture2DNorm16TestES3 : public Texture2DTestES3
void testNorm16Render(GLint internalformat, GLenum format, GLenum type)
{
GLushort pixelValue = 0x6A35;
- GLushort imageData[] = {pixelValue, pixelValue, pixelValue, pixelValue};
+ GLColor16 imageData(pixelValue, pixelValue, pixelValue, pixelValue);
setUpProgram();
@@ -3327,16 +3288,13 @@ class Texture2DNorm16TestES3 : public Texture2DTestES3
0);
glBindTexture(GL_TEXTURE_2D, mTextures[2]);
- glTexImage2D(GL_TEXTURE_2D, 0, internalformat, 1, 1, 0, format, type, imageData);
+ glTexImage2D(GL_TEXTURE_2D, 0, internalformat, 1, 1, 0, format, type, &imageData.R);
EXPECT_GL_NO_ERROR();
drawQuad(mProgram, "position", 0.5f);
- GLubyte expectedValue = static_cast<GLubyte>(pixelValue >> 8);
- EXPECT_PIXEL_COLOR_EQ(
- 0, 0, SliceFormatColor(
- format, GLColor(expectedValue, expectedValue, expectedValue, expectedValue)));
+ EXPECT_PIXEL_COLOR16_EQ(0, 0, SliceFormatColor16(format, imageData));
glBindRenderbuffer(GL_RENDERBUFFER, mRenderbuffer);
glRenderbufferStorage(GL_RENDERBUFFER, internalformat, 1, 1);
@@ -3350,7 +3308,8 @@ class Texture2DNorm16TestES3 : public Texture2DTestES3
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 1, 1);
- EXPECT_PIXEL_COLOR_EQ(0, 0, SliceFormatColor(format, GLColor::white));
+ GLColor16 expectedValue = GLColor16::white;
+ EXPECT_PIXEL_COLOR16_EQ(0, 0, SliceFormatColor16(format, expectedValue));
glBindFramebuffer(GL_FRAMEBUFFER, 0);
@@ -3521,169 +3480,6 @@ TEST_P(Texture2DTestES3, UnpackOverlappingRowsFromUnpackBuffer)
EXPECT_EQ(expected, actual);
}
-template <typename T>
-T UNorm(double value)
-{
- return static_cast<T>(value * static_cast<double>(std::numeric_limits<T>::max()));
-}
-
-// Test rendering a depth texture with mipmaps.
-TEST_P(Texture2DTestES3, DepthTexturesWithMipmaps)
-{
- //TODO(cwallez) this is failing on Intel Win7 OpenGL
- if (IsIntel() && IsWindows() && IsOpenGL())
- {
- std::cout << "Test skipped on Intel OpenGL." << std::endl;
- return;
- }
-
- const int size = getWindowWidth();
-
- auto dim = [size](int level) { return size >> level; };
- int levels = gl::log2(size);
-
- glActiveTexture(GL_TEXTURE0);
- glBindTexture(GL_TEXTURE_2D, mTexture2D);
- glTexStorage2D(GL_TEXTURE_2D, levels, GL_DEPTH_COMPONENT24, size, size);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
- glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
- ASSERT_GL_NO_ERROR();
-
- glUseProgram(mProgram);
- glUniform1i(mTexture2DUniformLocation, 0);
-
- std::vector<unsigned char> expected;
-
- for (int level = 0; level < levels; ++level)
- {
- double value = (static_cast<double>(level) / static_cast<double>(levels - 1));
- expected.push_back(UNorm<unsigned char>(value));
-
- int levelDim = dim(level);
-
- ASSERT_GT(levelDim, 0);
-
- std::vector<unsigned int> initData(levelDim * levelDim, UNorm<unsigned int>(value));
- glTexSubImage2D(GL_TEXTURE_2D, level, 0, 0, levelDim, levelDim, GL_DEPTH_COMPONENT,
- GL_UNSIGNED_INT, initData.data());
- }
- ASSERT_GL_NO_ERROR();
-
- for (int level = 0; level < levels; ++level)
- {
- glViewport(0, 0, dim(level), dim(level));
- drawQuad(mProgram, "position", 0.5f);
- GLColor actual = ReadColor(0, 0);
- EXPECT_NEAR(expected[level], actual.R, 10u);
- }
-
- ASSERT_GL_NO_ERROR();
-}
-
-// Tests unpacking into the unsized GL_ALPHA format.
-TEST_P(Texture2DTestES3, UnsizedAlphaUnpackBuffer)
-{
- // TODO(jmadill): Figure out why this fails on OSX.
- ANGLE_SKIP_TEST_IF(IsOSX());
-
- // Initialize the texure.
- glBindTexture(GL_TEXTURE_2D, mTexture2D);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, getWindowWidth(), getWindowHeight(), 0, GL_ALPHA,
- GL_UNSIGNED_BYTE, nullptr);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
-
- std::vector<GLubyte> bufferData(getWindowWidth() * getWindowHeight(), 127);
-
- // Pull in the color data from the unpack buffer.
- GLBuffer unpackBuffer;
- glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
- glBindBuffer(GL_PIXEL_UNPACK_BUFFER, unpackBuffer.get());
- glBufferData(GL_PIXEL_UNPACK_BUFFER, getWindowWidth() * getWindowHeight(), bufferData.data(),
- GL_STATIC_DRAW);
-
- glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, getWindowWidth(), getWindowHeight(), GL_ALPHA,
- GL_UNSIGNED_BYTE, nullptr);
-
- // Clear to a weird color to make sure we're drawing something.
- glClearColor(0.5f, 0.8f, 1.0f, 0.2f);
- glClear(GL_COLOR_BUFFER_BIT);
-
- // Draw with the alpha texture and verify.
- drawQuad(mProgram, "position", 0.5f);
-
- ASSERT_GL_NO_ERROR();
- EXPECT_PIXEL_NEAR(0, 0, 0, 0, 0, 127, 1);
-}
-
-// Ensure stale unpack data doesn't propagate in D3D11.
-TEST_P(Texture2DTestES3, StaleUnpackData)
-{
- // Init unpack buffer.
- GLsizei pixelCount = getWindowWidth() * getWindowHeight() / 2;
- std::vector<GLColor> pixels(pixelCount, GLColor::red);
-
- GLBuffer unpackBuffer;
- glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
- glBindBuffer(GL_PIXEL_UNPACK_BUFFER, unpackBuffer.get());
- GLsizei bufferSize = pixelCount * sizeof(GLColor);
- glBufferData(GL_PIXEL_UNPACK_BUFFER, bufferSize, pixels.data(), GL_STATIC_DRAW);
-
- // Create from unpack buffer.
- glBindTexture(GL_TEXTURE_2D, mTexture2D);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, getWindowWidth() / 2, getWindowHeight() / 2, 0,
- GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
-
- drawQuad(mProgram, "position", 0.5f);
-
- ASSERT_GL_NO_ERROR();
- EXPECT_PIXEL_COLOR_EQ(0, 0, GLColor::red);
-
- // Fill unpack with green, recreating buffer.
- pixels.assign(getWindowWidth() * getWindowHeight(), GLColor::green);
- GLsizei size2 = getWindowWidth() * getWindowHeight() * sizeof(GLColor);
- glBufferData(GL_PIXEL_UNPACK_BUFFER, size2, pixels.data(), GL_STATIC_DRAW);
-
- // Reinit texture with green.
- glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, getWindowWidth() / 2, getWindowHeight() / 2, GL_RGBA,
- GL_UNSIGNED_BYTE, nullptr);
-
- drawQuad(mProgram, "position", 0.5f);
-
- ASSERT_GL_NO_ERROR();
- EXPECT_PIXEL_COLOR_EQ(0, 0, GLColor::green);
-}
-
-// This test covers a D3D format redefinition bug for 3D textures. The base level format was not
-// being properly checked, and the texture storage of the previous texture format was persisting.
-// This would result in an ASSERT in debug and incorrect rendering in release.
-// See http://anglebug.com/1609 and WebGL 2 test conformance2/misc/views-with-offsets.html.
-TEST_P(Texture3DTestES3, FormatRedefinitionBug)
-{
- GLTexture tex;
- glBindTexture(GL_TEXTURE_3D, tex.get());
- glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA8, 1, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
-
- GLFramebuffer framebuffer;
- glBindFramebuffer(GL_FRAMEBUFFER, framebuffer.get());
- glFramebufferTextureLayer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, tex.get(), 0, 0);
-
- glCheckFramebufferStatus(GL_FRAMEBUFFER);
-
- std::vector<uint8_t> pixelData(100, 0);
-
- glTexImage3D(GL_TEXTURE_3D, 0, GL_RGB565, 1, 1, 1, 0, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, nullptr);
- glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 0, 1, 1, 1, GL_RGB, GL_UNSIGNED_SHORT_5_6_5,
- pixelData.data());
-
- ASSERT_GL_NO_ERROR();
-}
-
// Use this to select which configurations (e.g. which renderer, which GLES major version) these tests should be run against.
// TODO(oetuaho): Enable all below tests on OpenGL. Requires a fix for ANGLE bug 1278.
ANGLE_INSTANTIATE_TEST(Texture2DTest,
@@ -3769,4 +3565,4 @@ ANGLE_INSTANTIATE_TEST(SamplerInStructAndOtherVariableTest,
ANGLE_INSTANTIATE_TEST(TextureLimitsTest, ES2_D3D11(), ES2_OPENGL(), ES2_OPENGLES());
ANGLE_INSTANTIATE_TEST(Texture2DNorm16TestES3, ES3_D3D11(), ES3_OPENGL(), ES3_OPENGLES());
-} // anonymous namespace
+} // namespace
diff --git a/gfx/angle/src/tests/gl_tests/TimerQueriesTest.cpp b/gfx/angle/src/tests/gl_tests/TimerQueriesTest.cpp
index 8f3725ec0..8c4d282ff 100755
--- a/gfx/angle/src/tests/gl_tests/TimerQueriesTest.cpp
+++ b/gfx/angle/src/tests/gl_tests/TimerQueriesTest.cpp
@@ -311,13 +311,6 @@ TEST_P(TimerQueriesTest, TimeElapsedValidationTest)
// Tests timer queries operating under multiple EGL contexts with mid-query switching
TEST_P(TimerQueriesTest, TimeElapsedMulticontextTest)
{
- if (IsAMD() && IsOpenGL() && IsWindows() && IsDebug())
- {
- // TODO(jmadill): Figure out why this test is flaky on Win/AMD/OpenGL/Debug.
- std::cout << "Test skipped on Windows AMD OpenGL Debug." << std::endl;
- return;
- }
-
if (!extensionEnabled("GL_EXT_disjoint_timer_query"))
{
std::cout << "Test skipped because GL_EXT_disjoint_timer_query is not available."
diff --git a/gfx/angle/src/tests/gl_tests/TransformFeedbackTest.cpp b/gfx/angle/src/tests/gl_tests/TransformFeedbackTest.cpp
index 73c8a20d5..3370a0888 100755
--- a/gfx/angle/src/tests/gl_tests/TransformFeedbackTest.cpp
+++ b/gfx/angle/src/tests/gl_tests/TransformFeedbackTest.cpp
@@ -742,20 +742,14 @@ TEST_P(TransformFeedbackTest, PackingBug)
GLint attrib1Loc = glGetAttribLocation(mProgram, "inAttrib1");
GLint attrib2Loc = glGetAttribLocation(mProgram, "inAttrib2");
- std::vector<Vector2> attrib1Data;
- std::vector<Vector2> attrib2Data;
- int counter = 0;
- for (size_t i = 0; i < 6; i++) {
- attrib1Data.push_back(Vector2(counter + 0.0f, counter + 1.0f));
- attrib2Data.push_back(Vector2(counter + 2.0f, counter + 3.0f));
- counter += 4;
- }
+ Vector2 attrib1Data[] = {Vector2(1.0, 2.0), Vector2(3.0, 4.0), Vector2(5.0, 6.0)};
+ Vector2 attrib2Data[] = {Vector2(11.0, 12.0), Vector2(13.0, 14.0), Vector2(15.0, 16.0)};
glEnableVertexAttribArray(attrib1Loc);
glEnableVertexAttribArray(attrib2Loc);
- glVertexAttribPointer(attrib1Loc, 2, GL_FLOAT, GL_FALSE, 0, attrib1Data.data());
- glVertexAttribPointer(attrib2Loc, 2, GL_FLOAT, GL_FALSE, 0, attrib2Data.data());
+ glVertexAttribPointer(attrib1Loc, 2, GL_FLOAT, GL_FALSE, 0, attrib1Data);
+ glVertexAttribPointer(attrib2Loc, 2, GL_FLOAT, GL_FALSE, 0, attrib2Data);
glUseProgram(mProgram);
glBeginTransformFeedback(GL_TRIANGLES);
@@ -829,69 +823,6 @@ TEST_P(TransformFeedbackTest, OptimizedVaryings)
ASSERT_NE(0u, mProgram);
}
-// Test an edge case where two varyings are unreferenced in the frag shader.
-TEST_P(TransformFeedbackTest, TwoUnreferencedInFragShader)
-{
- // TODO(jmadill): With points and rasterizer discard?
- const std::string &vertexShaderSource =
- "#version 300 es\n"
- "in vec3 position;\n"
- "out vec3 outAttrib1;\n"
- "out vec3 outAttrib2;\n"
- "void main() {"
- " outAttrib1 = position;\n"
- " outAttrib2 = position;\n"
- " gl_Position = vec4(position, 1);\n"
- "}";
-
- const std::string &fragmentShaderSource =
- "#version 300 es\n"
- "precision mediump float;\n"
- "out vec4 color;\n"
- "in vec3 outAttrib1;\n"
- "in vec3 outAttrib2;\n"
- "void main() {\n"
- " color = vec4(0);\n"
- "}";
-
- std::vector<std::string> tfVaryings;
- tfVaryings.push_back("outAttrib1");
- tfVaryings.push_back("outAttrib2");
-
- mProgram = CompileProgramWithTransformFeedback(vertexShaderSource, fragmentShaderSource,
- tfVaryings, GL_INTERLEAVED_ATTRIBS);
- ASSERT_NE(0u, mProgram);
-
- glBindBuffer(GL_TRANSFORM_FEEDBACK_BUFFER, mTransformFeedbackBuffer);
- glBufferData(GL_TRANSFORM_FEEDBACK_BUFFER, sizeof(Vector3) * 2 * 6, nullptr, GL_STREAM_DRAW);
-
- glBindTransformFeedback(GL_TRANSFORM_FEEDBACK, mTransformFeedback);
- glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 0, mTransformFeedbackBuffer);
-
- glUseProgram(mProgram);
- glBeginTransformFeedback(GL_TRIANGLES);
- drawQuad(mProgram, "position", 0.5f);
- glEndTransformFeedback();
- glUseProgram(0);
- ASSERT_GL_NO_ERROR();
-
- const GLvoid *mapPointer =
- glMapBufferRange(GL_TRANSFORM_FEEDBACK_BUFFER, 0, sizeof(Vector2) * 2 * 6, GL_MAP_READ_BIT);
- ASSERT_NE(nullptr, mapPointer);
-
- const auto &quadVertices = GetQuadVertices();
-
- const Vector3 *vecPointer = static_cast<const Vector3 *>(mapPointer);
- for (unsigned int vectorIndex = 0; vectorIndex < 3; ++vectorIndex)
- {
- unsigned int stream1Index = vectorIndex * 2;
- unsigned int stream2Index = vectorIndex * 2 + 1;
- EXPECT_EQ(quadVertices[vectorIndex], vecPointer[stream1Index]);
- EXPECT_EQ(quadVertices[vectorIndex], vecPointer[stream2Index]);
- }
-
- ASSERT_GL_NO_ERROR();
-}
class TransformFeedbackLifetimeTest : public TransformFeedbackTest
{
protected:
diff --git a/gfx/angle/src/tests/gl_tests/UniformBufferTest.cpp b/gfx/angle/src/tests/gl_tests/UniformBufferTest.cpp
index b3577bf30..0d35df177 100755
--- a/gfx/angle/src/tests/gl_tests/UniformBufferTest.cpp
+++ b/gfx/angle/src/tests/gl_tests/UniformBufferTest.cpp
@@ -5,7 +5,6 @@
//
#include "test_utils/ANGLETest.h"
-#include "test_utils/gl_raii.h"
using namespace angle;
@@ -25,7 +24,7 @@ class UniformBufferTest : public ANGLETest
setConfigAlphaBits(8);
}
- void SetUp() override
+ virtual void SetUp()
{
ANGLETest::SetUp();
@@ -63,7 +62,7 @@ class UniformBufferTest : public ANGLETest
ASSERT_GL_NO_ERROR();
}
- void TearDown() override
+ virtual void TearDown()
{
glDeleteBuffers(1, &mUniformBuffer);
glDeleteProgram(mProgram);
@@ -78,6 +77,13 @@ class UniformBufferTest : public ANGLETest
// Basic UBO functionality.
TEST_P(UniformBufferTest, Simple)
{
+ // TODO(jmadill): Figure out why this fails on Intel.
+ if (IsIntel() && GetParam().getRenderer() == EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE)
+ {
+ std::cout << "Test skipped on Intel." << std::endl;
+ return;
+ }
+
glClear(GL_COLOR_BUFFER_BIT);
float floatData[4] = {0.5f, 0.75f, 0.25f, 1.0f};
@@ -98,6 +104,13 @@ TEST_P(UniformBufferTest, Simple)
// The second step renders a color from a UBO with a non-zero offset.
TEST_P(UniformBufferTest, UniformBufferRange)
{
+ // TODO(jmadill): Figure out why this fails on Intel.
+ if (IsIntel() && GetParam().getRenderer() == EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE)
+ {
+ std::cout << "Test skipped on Intel." << std::endl;
+ return;
+ }
+
int px = getWindowWidth() / 2;
int py = getWindowHeight() / 2;
@@ -169,6 +182,13 @@ TEST_P(UniformBufferTest, UniformBufferRange)
// Test uniform block bindings.
TEST_P(UniformBufferTest, UniformBufferBindings)
{
+ // TODO(jmadill): Figure out why this fails on Intel.
+ if (IsIntel() && GetParam().getRenderer() == EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE)
+ {
+ std::cout << "Test skipped on Intel." << std::endl;
+ return;
+ }
+
int px = getWindowWidth() / 2;
int py = getWindowHeight() / 2;
@@ -225,10 +245,11 @@ TEST_P(UniformBufferTest, UnboundUniformBuffer)
// https://code.google.com/p/angleproject/issues/detail?id=965
TEST_P(UniformBufferTest, UniformBufferManyUpdates)
{
- // TODO(jmadill): Figure out why this fails on Intel OpenGL.
- if (IsIntel() && IsOpenGL())
+ // TODO(jmadill): Figure out why this fails on Intel.
+ if (IsIntel() && (getPlatformRenderer() == EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE ||
+ getPlatformRenderer() == EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE))
{
- std::cout << "Test skipped on Intel OpenGL." << std::endl;
+ std::cout << "Test skipped on Intel." << std::endl;
return;
}
@@ -265,6 +286,13 @@ TEST_P(UniformBufferTest, UniformBufferManyUpdates)
// Use a large number of buffer ranges (compared to the actual size of the UBO)
TEST_P(UniformBufferTest, ManyUniformBufferRange)
{
+ // TODO(jmadill): Figure out why this fails on Intel.
+ if (IsIntel() && GetParam().getRenderer() == EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE)
+ {
+ std::cout << "Test skipped on Intel." << std::endl;
+ return;
+ }
+
int px = getWindowWidth() / 2;
int py = getWindowHeight() / 2;
@@ -345,116 +373,12 @@ TEST_P(UniformBufferTest, ActiveUniformNames)
const std::string &vertexShaderSource =
"#version 300 es\n"
"in vec2 position;\n"
- "out vec2 v;\n"
- "uniform blockName1 {\n"
- " float f1;\n"
- "} instanceName1;\n"
- "uniform blockName2 {\n"
- " float f2;\n"
- "} instanceName2[1];\n"
- "void main() {\n"
- " v = vec2(instanceName1.f1, instanceName2[0].f2);\n"
- " gl_Position = vec4(position, 0, 1);\n"
- "}";
-
- const std::string &fragmentShaderSource =
- "#version 300 es\n"
- "precision highp float;\n"
- "in vec2 v;\n"
- "out vec4 color;\n"
- "void main() {\n"
- " color = vec4(v, 0, 1);\n"
- "}";
-
- GLuint program = CompileProgram(vertexShaderSource, fragmentShaderSource);
- ASSERT_NE(0u, program);
-
- GLint activeUniformBlocks;
- glGetProgramiv(program, GL_ACTIVE_UNIFORM_BLOCKS, &activeUniformBlocks);
- ASSERT_EQ(2, activeUniformBlocks);
-
- GLint maxLength;
- GLsizei length;
- glGetProgramiv(program, GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH, &maxLength);
- std::vector<GLchar> strBlockNameBuffer(maxLength + 1, 0);
- glGetActiveUniformBlockName(program, 0, maxLength, &length, &strBlockNameBuffer[0]);
- ASSERT_GL_NO_ERROR();
- EXPECT_EQ("blockName1", std::string(&strBlockNameBuffer[0]));
-
- glGetActiveUniformBlockName(program, 1, maxLength, &length, &strBlockNameBuffer[0]);
- ASSERT_GL_NO_ERROR();
- EXPECT_EQ("blockName2[0]", std::string(&strBlockNameBuffer[0]));
-
- GLint activeUniforms;
- glGetProgramiv(program, GL_ACTIVE_UNIFORMS, &activeUniforms);
-
- ASSERT_EQ(2, activeUniforms);
-
- GLint size;
- GLenum type;
- glGetProgramiv(program, GL_ACTIVE_UNIFORM_MAX_LENGTH, &maxLength);
- std::vector<GLchar> strUniformNameBuffer(maxLength + 1, 0);
- glGetActiveUniform(program, 0, maxLength, &length, &size, &type, &strUniformNameBuffer[0]);
-
- ASSERT_GL_NO_ERROR();
- EXPECT_EQ(1, size);
- EXPECT_GLENUM_EQ(GL_FLOAT, type);
- EXPECT_EQ("blockName1.f1", std::string(&strUniformNameBuffer[0]));
-
- glGetActiveUniform(program, 1, maxLength, &length, &size, &type, &strUniformNameBuffer[0]);
-
- ASSERT_GL_NO_ERROR();
- EXPECT_EQ(1, size);
- EXPECT_GLENUM_EQ(GL_FLOAT, type);
- EXPECT_EQ("blockName2.f2", std::string(&strUniformNameBuffer[0]));
-}
-
-// Tests active uniforms and blocks when the layout is std140, shared and packed.
-TEST_P(UniformBufferTest, ActiveUniformNumberAndName)
-{
- // TODO(Jiajia): Figure out why this fails on Intel on Mac.
- // This case can pass on Intel Mac-10.11/10.12. But it fails on Intel Mac-10.10.
- if (IsIntel() && IsOSX())
- {
- std::cout << "Test skipped on Intel on Mac." << std::endl;
- return;
- }
-
- // This case fails on all AMD platforms (Mac, Linux, Win).
- // TODO(zmo): This actually passes on certain AMD cards, but we don't have
- // a way to do device specific handling yet.
- if (IsAMD())
- {
- std::cout << "Test skipped on AMD." << std::endl;
- return;
- }
-
- const std::string &vertexShaderSource =
- "#version 300 es\n"
- "in vec2 position;\n"
"out float v;\n"
- "struct S {\n"
- " highp ivec3 a;\n"
- " mediump ivec2 b[4];\n"
- "};\n"
- "layout(std140) uniform blockName0 {\n"
- " S s0;\n"
- " lowp vec2 v0;\n"
- " S s1[2];\n"
- " highp uint u0;\n"
- "};\n"
- "layout(std140) uniform blockName1 {\n"
- " float f1;\n"
- " bool b1;\n"
- "} instanceName1;\n"
- "layout(shared) uniform blockName2 {\n"
- " float f2;\n"
- "};\n"
- "layout(packed) uniform blockName3 {\n"
- " float f3;\n"
- "};\n"
+ "uniform blockName {\n"
+ " float f;\n"
+ "} instanceName;\n"
"void main() {\n"
- " v = instanceName1.f1;\n"
+ " v = instanceName.f;\n"
" gl_Position = vec4(position, 0, 1);\n"
"}";
@@ -467,99 +391,25 @@ TEST_P(UniformBufferTest, ActiveUniformNumberAndName)
" color = vec4(v, 0, 0, 1);\n"
"}";
- ANGLE_GL_PROGRAM(program, vertexShaderSource, fragmentShaderSource);
+ GLuint program = CompileProgram(vertexShaderSource, fragmentShaderSource);
+ ASSERT_NE(0u, program);
- // Note that the packed |blockName3| might (or might not) be optimized out.
GLint activeUniforms;
- glGetProgramiv(program.get(), GL_ACTIVE_UNIFORMS, &activeUniforms);
- EXPECT_GE(activeUniforms, 11);
+ glGetProgramiv(program, GL_ACTIVE_UNIFORMS, &activeUniforms);
- GLint activeUniformBlocks;
- glGetProgramiv(program.get(), GL_ACTIVE_UNIFORM_BLOCKS, &activeUniformBlocks);
- EXPECT_GE(activeUniformBlocks, 3);
+ ASSERT_EQ(1, activeUniforms);
GLint maxLength, size;
GLenum type;
GLsizei length;
- glGetProgramiv(program.get(), GL_ACTIVE_UNIFORM_MAX_LENGTH, &maxLength);
+ glGetProgramiv(program, GL_ACTIVE_UNIFORM_MAX_LENGTH, &maxLength);
std::vector<GLchar> strBuffer(maxLength + 1, 0);
+ glGetActiveUniform(program, 0, maxLength, &length, &size, &type, &strBuffer[0]);
- glGetActiveUniform(program.get(), 0, maxLength, &length, &size, &type, &strBuffer[0]);
- ASSERT_GL_NO_ERROR();
- EXPECT_EQ(1, size);
- EXPECT_EQ("s0.a", std::string(&strBuffer[0]));
-
- glGetActiveUniform(program.get(), 1, maxLength, &length, &size, &type, &strBuffer[0]);
- ASSERT_GL_NO_ERROR();
- EXPECT_EQ(4, size);
- EXPECT_EQ("s0.b[0]", std::string(&strBuffer[0]));
-
- glGetActiveUniform(program.get(), 2, maxLength, &length, &size, &type, &strBuffer[0]);
- ASSERT_GL_NO_ERROR();
- EXPECT_EQ(1, size);
- EXPECT_EQ("v0", std::string(&strBuffer[0]));
-
- glGetActiveUniform(program.get(), 3, maxLength, &length, &size, &type, &strBuffer[0]);
- ASSERT_GL_NO_ERROR();
- EXPECT_EQ(1, size);
- EXPECT_EQ("s1[0].a", std::string(&strBuffer[0]));
-
- glGetActiveUniform(program.get(), 4, maxLength, &length, &size, &type, &strBuffer[0]);
- ASSERT_GL_NO_ERROR();
- EXPECT_EQ(4, size);
- EXPECT_EQ("s1[0].b[0]", std::string(&strBuffer[0]));
-
- glGetActiveUniform(program.get(), 5, maxLength, &length, &size, &type, &strBuffer[0]);
- ASSERT_GL_NO_ERROR();
- EXPECT_EQ(1, size);
- EXPECT_EQ("s1[1].a", std::string(&strBuffer[0]));
-
- glGetActiveUniform(program.get(), 6, maxLength, &length, &size, &type, &strBuffer[0]);
- ASSERT_GL_NO_ERROR();
- EXPECT_EQ(4, size);
- EXPECT_EQ("s1[1].b[0]", std::string(&strBuffer[0]));
-
- glGetActiveUniform(program.get(), 7, maxLength, &length, &size, &type, &strBuffer[0]);
- ASSERT_GL_NO_ERROR();
- EXPECT_EQ(1, size);
- EXPECT_EQ("u0", std::string(&strBuffer[0]));
-
- glGetActiveUniform(program.get(), 8, maxLength, &length, &size, &type, &strBuffer[0]);
- ASSERT_GL_NO_ERROR();
- EXPECT_EQ(1, size);
- EXPECT_EQ("blockName1.f1", std::string(&strBuffer[0]));
-
- glGetActiveUniform(program.get(), 9, maxLength, &length, &size, &type, &strBuffer[0]);
- ASSERT_GL_NO_ERROR();
- EXPECT_EQ(1, size);
- EXPECT_EQ("blockName1.b1", std::string(&strBuffer[0]));
-
- glGetActiveUniform(program.get(), 10, maxLength, &length, &size, &type, &strBuffer[0]);
ASSERT_GL_NO_ERROR();
EXPECT_EQ(1, size);
- EXPECT_EQ("f2", std::string(&strBuffer[0]));
-}
-
-// Test that using a very large buffer to back a small uniform block works OK.
-TEST_P(UniformBufferTest, VeryLarge)
-{
- glClear(GL_COLOR_BUFFER_BIT);
- float floatData[4] = {0.5f, 0.75f, 0.25f, 1.0f};
-
- GLsizei bigSize = 4096 * 64;
- std::vector<GLubyte> zero(bigSize, 0);
-
- glBindBuffer(GL_UNIFORM_BUFFER, mUniformBuffer);
- glBufferData(GL_UNIFORM_BUFFER, bigSize, zero.data(), GL_STATIC_DRAW);
- glBufferSubData(GL_UNIFORM_BUFFER, 0, sizeof(float) * 4, floatData);
-
- glBindBufferBase(GL_UNIFORM_BUFFER, 0, mUniformBuffer);
-
- glUniformBlockBinding(mProgram, mUniformBufferIndex, 0);
- drawQuad(mProgram, "position", 0.5f);
-
- ASSERT_GL_NO_ERROR();
- EXPECT_PIXEL_NEAR(0, 0, 128, 191, 64, 255, 1);
+ EXPECT_GLENUM_EQ(GL_FLOAT, type);
+ EXPECT_EQ("blockName.f", std::string(&strBuffer[0]));
}
// Use this to select which configurations (e.g. which renderer, which GLES major version) these tests should be run against.
diff --git a/gfx/angle/src/tests/gl_tests/UniformTest.cpp b/gfx/angle/src/tests/gl_tests/UniformTest.cpp
index 4dd2738ef..c3ec72c5c 100755
--- a/gfx/angle/src/tests/gl_tests/UniformTest.cpp
+++ b/gfx/angle/src/tests/gl_tests/UniformTest.cpp
@@ -459,54 +459,6 @@ TEST_P(UniformTestES3, TranposedMatrixArrayUniformStateQuery)
}
}
-// Check that trying setting too many elements of an array doesn't overflow
-TEST_P(UniformTestES3, OverflowArray)
-{
- const std::string &vertexShader =
- "#version 300 es\n"
- "void main() { gl_Position = vec4(1); }";
- const std::string &fragShader =
- "#version 300 es\n"
- "precision mediump float;\n"
- "uniform float uniF[5];\n"
- "uniform mat3x2 uniMat3x2[5];\n"
- "out vec4 color;\n"
- "void main() {\n"
- " color = vec4(uniMat3x2[0][0][0] + uniF[0]);\n"
- "}";
-
- mProgram = CompileProgram(vertexShader, fragShader);
- ASSERT_NE(mProgram, 0u);
-
- glUseProgram(mProgram);
-
- const size_t kOverflowSize = 10000;
- std::vector<GLfloat> values(10000 * 6);
-
- // Setting as a clump
- GLint floatLocation = glGetUniformLocation(mProgram, "uniF");
- ASSERT_NE(-1, floatLocation);
- GLint matLocation = glGetUniformLocation(mProgram, "uniMat3x2");
- ASSERT_NE(-1, matLocation);
-
- // Set too many float uniforms
- glUniform1fv(floatLocation, kOverflowSize, &values[0]);
-
- // Set too many matrix uniforms, transposed or not
- glUniformMatrix3x2fv(matLocation, kOverflowSize, GL_FALSE, &values[0]);
- glUniformMatrix3x2fv(matLocation, kOverflowSize, GL_TRUE, &values[0]);
-
- // Same checks but with offsets
- GLint floatLocationOffset = glGetUniformLocation(mProgram, "uniF[3]");
- ASSERT_NE(-1, floatLocationOffset);
- GLint matLocationOffset = glGetUniformLocation(mProgram, "uniMat3x2[3]");
- ASSERT_NE(-1, matLocationOffset);
-
- glUniform1fv(floatLocationOffset, kOverflowSize, &values[0]);
- glUniformMatrix3x2fv(matLocationOffset, kOverflowSize, GL_FALSE, &values[0]);
- glUniformMatrix3x2fv(matLocationOffset, kOverflowSize, GL_TRUE, &values[0]);
-}
-
// Check that sampler uniforms only show up one time in the list
TEST_P(UniformTest, SamplerUniformsAppearOnce)
{
@@ -612,7 +564,7 @@ TEST_P(UniformTestES3, ReturnsOnlyOneArrayElement)
for (const auto &array : uniformArrays)
{
uniformStream << "uniform " << array.type << " " << array.name << "["
- << ToString(kArraySize) << "];\n";
+ << std::to_string(kArraySize) << "];\n";
// We need to make use of the uniforms or they get compiled out.
for (int i = 0; i < 4; i++)
@@ -658,7 +610,7 @@ TEST_P(UniformTestES3, ReturnsOnlyOneArrayElement)
{
for (size_t index = 0; index < kArraySize; index++)
{
- std::string strIndex = "[" + ToString(index) + "]";
+ std::string strIndex = "[" + std::to_string(index) + "]";
// Check all the different glGetUniformv functions
CheckOneElement<float>(glGetUniformfv, mProgram, uniformArray.name + strIndex,
uniformArray.components, 42.4242f);
diff --git a/gfx/angle/src/tests/gl_tests/VertexAttributeTest.cpp b/gfx/angle/src/tests/gl_tests/VertexAttributeTest.cpp
index b1b9dcd1f..01b79ec61 100755
--- a/gfx/angle/src/tests/gl_tests/VertexAttributeTest.cpp
+++ b/gfx/angle/src/tests/gl_tests/VertexAttributeTest.cpp
@@ -102,7 +102,7 @@ class VertexAttributeTest : public ANGLETest
if (test.source == Source::BUFFER)
{
- GLsizei dataSize = mVertexCount * TypeStride(test.type);
+ GLsizei dataSize = mVertexCount * TypeStride(test.type) * typeSize;
glBindBuffer(GL_ARRAY_BUFFER, mBuffer);
glBufferData(GL_ARRAY_BUFFER, dataSize, test.inputData, GL_STATIC_DRAW);
glVertexAttribPointer(mTestAttrib, typeSize, test.type, test.normalized, 0,
diff --git a/gfx/angle/src/tests/gl_tests/WebGLCompatibilityTest.cpp b/gfx/angle/src/tests/gl_tests/WebGLCompatibilityTest.cpp
deleted file mode 100644
index 48a9d2bae..000000000
--- a/gfx/angle/src/tests/gl_tests/WebGLCompatibilityTest.cpp
+++ /dev/null
@@ -1,154 +0,0 @@
-//
-// Copyright 2015 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-
-// WebGLCompatibilityTest.cpp : Tests of the GL_ANGLE_webgl_compatibility extension.
-
-#include "test_utils/ANGLETest.h"
-
-#include "test_utils/gl_raii.h"
-
-namespace angle
-{
-
-class WebGLCompatibilityTest : public ANGLETest
-{
- protected:
- WebGLCompatibilityTest()
- {
- setWindowWidth(128);
- setWindowHeight(128);
- setConfigRedBits(8);
- setConfigGreenBits(8);
- setConfigBlueBits(8);
- setConfigAlphaBits(8);
- setWebGLCompatibilityEnabled(true);
- }
-
- void SetUp() override
- {
- ANGLETest::SetUp();
- glEnableExtensionANGLE = reinterpret_cast<PFNGLENABLEEXTENSIONANGLEPROC>(
- eglGetProcAddress("glEnableExtensionANGLE"));
- }
-
- void TearDown() override { ANGLETest::TearDown(); }
-
- PFNGLENABLEEXTENSIONANGLEPROC glEnableExtensionANGLE = nullptr;
-};
-
-// Context creation would fail if EGL_ANGLE_create_context_webgl_compatibility was not available so
-// the GL extension should always be present
-TEST_P(WebGLCompatibilityTest, ExtensionStringExposed)
-{
- EXPECT_TRUE(extensionEnabled("GL_ANGLE_webgl_compatibility"));
-}
-
-// Verify that all extension entry points are available
-TEST_P(WebGLCompatibilityTest, EntryPoints)
-{
- if (extensionEnabled("GL_ANGLE_webgl_compatibility"))
- {
- EXPECT_NE(nullptr, eglGetProcAddress("glEnableExtensionANGLE"));
- }
-}
-
-// WebGL 1 allows GL_DEPTH_STENCIL_ATTACHMENT as a valid binding point. Make sure it is usable,
-// even in ES2 contexts.
-TEST_P(WebGLCompatibilityTest, DepthStencilBindingPoint)
-{
- GLRenderbuffer renderbuffer;
- glBindRenderbuffer(GL_RENDERBUFFER, renderbuffer.get());
- glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, 32, 32);
-
- GLFramebuffer framebuffer;
- glBindFramebuffer(GL_FRAMEBUFFER, framebuffer.get());
- glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER,
- renderbuffer.get());
-
- EXPECT_GL_NO_ERROR();
-}
-
-// Test that attempting to enable an extension that doesn't exist generates GL_INVALID_OPERATION
-TEST_P(WebGLCompatibilityTest, EnableExtensionValidation)
-{
- EXPECT_EQ(GL_FALSE, glEnableExtensionANGLE("invalid_extension_string"));
- EXPECT_GL_ERROR(GL_INVALID_OPERATION);
-}
-
-// Test enabling the GL_OES_element_index_uint extension
-TEST_P(WebGLCompatibilityTest, EnableExtensionUintIndices)
-{
- if (getClientMajorVersion() != 2)
- {
- // This test only works on ES2 where uint indices are not available by default
- return;
- }
-
- EXPECT_FALSE(extensionEnabled("GL_OES_element_index_uint"));
-
- GLBuffer indexBuffer;
- glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBuffer.get());
-
- GLuint data[] = {0, 1, 2, 1, 3, 2};
- glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(data), data, GL_STATIC_DRAW);
-
- ANGLE_GL_PROGRAM(program, "void main() { gl_Position = vec4(0, 0, 0, 1); }",
- "void main() { gl_FragColor = vec4(0, 1, 0, 1); }")
- glUseProgram(program.get());
-
- glDrawElements(GL_TRIANGLES, 2, GL_UNSIGNED_INT, nullptr);
- EXPECT_GL_ERROR(GL_INVALID_ENUM);
-
- if (glEnableExtensionANGLE("GL_OES_element_index_uint"))
- {
- EXPECT_GL_NO_ERROR();
- EXPECT_TRUE(extensionEnabled("GL_OES_element_index_uint"));
-
- glDrawElements(GL_TRIANGLES, 2, GL_UNSIGNED_INT, nullptr);
- EXPECT_GL_NO_ERROR();
- }
-}
-
-// Verify that shaders are of a compatible spec when the extension is enabled.
-TEST_P(WebGLCompatibilityTest, ExtensionCompilerSpec)
-{
- EXPECT_TRUE(extensionEnabled("GL_ANGLE_webgl_compatibility"));
-
- // Use of reserved _webgl prefix should fail when the shader specification is for WebGL.
- const std::string &vert =
- "struct Foo {\n"
- " int _webgl_bar;\n"
- "};\n"
- "void main()\n"
- "{\n"
- " Foo foo = Foo(1);\n"
- "}";
-
- // Default fragement shader.
- const std::string &frag =
- "void main()\n"
- "{\n"
- " gl_FragColor = vec4(1.0,0.0,0.0,1.0);\n"
- "}";
-
- GLuint program = CompileProgram(vert, frag);
- EXPECT_EQ(0u, program);
- glDeleteProgram(program);
-}
-
-// Use this to select which configurations (e.g. which renderer, which GLES major version) these
-// tests should be run against.
-ANGLE_INSTANTIATE_TEST(WebGLCompatibilityTest,
- ES2_D3D9(),
- ES2_D3D11(),
- ES3_D3D11(),
- ES2_D3D11_FL9_3(),
- ES2_OPENGL(),
- ES3_OPENGL(),
- ES2_OPENGLES(),
- ES3_OPENGLES());
-
-} // namespace
diff --git a/gfx/angle/src/tests/perf_tests/IndexDataManagerTest.cpp b/gfx/angle/src/tests/perf_tests/IndexDataManagerTest.cpp
index 696b81bb5..c89f1df94 100755
--- a/gfx/angle/src/tests/perf_tests/IndexDataManagerTest.cpp
+++ b/gfx/angle/src/tests/perf_tests/IndexDataManagerTest.cpp
@@ -11,7 +11,6 @@
#include <gmock/gmock.h>
-#include "angle_unittests_utils.h"
#include "libANGLE/renderer/d3d/BufferD3D.h"
#include "libANGLE/renderer/d3d/IndexBuffer.h"
#include "libANGLE/renderer/d3d/IndexDataManager.h"
@@ -76,10 +75,14 @@ class MockBufferFactoryD3D : public rx::BufferFactoryD3D
class MockBufferD3D : public rx::BufferD3D
{
public:
- MockBufferD3D(rx::BufferFactoryD3D *factory) : BufferD3D(mockState, factory), mData() {}
+ MockBufferD3D(rx::BufferFactoryD3D *factory)
+ : BufferD3D(factory),
+ mData()
+ {
+ }
// BufferImpl
- gl::Error setData(GLenum target, const void *data, size_t size, GLenum) override
+ gl::Error setData(const void *data, size_t size, GLenum) override
{
mData.resize(size);
if (data && size > 0)
@@ -89,7 +92,7 @@ class MockBufferD3D : public rx::BufferD3D
return gl::Error(GL_NO_ERROR);
}
- MOCK_METHOD4(setSubData, gl::Error(GLenum, const void *, size_t, size_t));
+ MOCK_METHOD3(setSubData, gl::Error(const void*, size_t, size_t));
MOCK_METHOD4(copySubData, gl::Error(BufferImpl*, GLintptr, GLintptr, GLsizeiptr));
MOCK_METHOD2(map, gl::Error(GLenum, GLvoid **));
MOCK_METHOD4(mapRange, gl::Error(size_t, size_t, GLbitfield, GLvoid **));
@@ -109,30 +112,9 @@ class MockBufferD3D : public rx::BufferD3D
}
private:
- gl::BufferState mockState;
std::vector<uint8_t> mData;
};
-class MockGLFactoryD3D : public rx::MockGLFactory
-{
- public:
- MockGLFactoryD3D(MockBufferFactoryD3D *bufferFactory) : mBufferFactory(bufferFactory) {}
-
- rx::BufferImpl *createBuffer(const gl::BufferState &state) override
- {
- MockBufferD3D *mockBufferD3D = new MockBufferD3D(mBufferFactory);
-
- EXPECT_CALL(*mBufferFactory, createVertexBuffer())
- .WillOnce(Return(nullptr))
- .RetiresOnSaturation();
- mockBufferD3D->initializeStaticData();
-
- return mockBufferD3D;
- }
-
- MockBufferFactoryD3D *mBufferFactory;
-};
-
class IndexDataManagerPerfTest : public ANGLEPerfTest
{
public:
@@ -143,27 +125,34 @@ class IndexDataManagerPerfTest : public ANGLEPerfTest
rx::IndexDataManager mIndexDataManager;
GLsizei mIndexCount;
unsigned int mBufferSize;
- MockBufferFactoryD3D mMockBufferFactory;
- MockGLFactoryD3D mMockGLFactory;
+ MockBufferFactoryD3D mMockFactory;
gl::Buffer mIndexBuffer;
};
+MockBufferD3D *InitMockBufferD3D(MockBufferFactoryD3D *mockFactory)
+{
+ MockBufferD3D *mockBufferD3D = new MockBufferD3D(mockFactory);
+
+ EXPECT_CALL(*mockFactory, createVertexBuffer()).WillOnce(Return(nullptr)).RetiresOnSaturation();
+ mockBufferD3D->initializeStaticData();
+
+ return mockBufferD3D;
+}
+
IndexDataManagerPerfTest::IndexDataManagerPerfTest()
: ANGLEPerfTest("IndexDataManger", "_run"),
- mIndexDataManager(&mMockBufferFactory, rx::RENDERER_D3D11),
+ mIndexDataManager(&mMockFactory, rx::RENDERER_D3D11),
mIndexCount(4000),
mBufferSize(mIndexCount * sizeof(GLushort)),
- mMockBufferFactory(mBufferSize, GL_UNSIGNED_SHORT),
- mMockGLFactory(&mMockBufferFactory),
- mIndexBuffer(&mMockGLFactory, 1)
+ mMockFactory(mBufferSize, GL_UNSIGNED_SHORT),
+ mIndexBuffer(InitMockBufferD3D(&mMockFactory), 1)
{
std::vector<GLushort> indexData(mIndexCount);
for (GLsizei index = 0; index < mIndexCount; ++index)
{
indexData[index] = static_cast<GLushort>(index);
}
- mIndexBuffer.bufferData(GL_ARRAY_BUFFER, &indexData[0], indexData.size() * sizeof(GLushort),
- GL_STATIC_DRAW);
+ mIndexBuffer.bufferData(&indexData[0], indexData.size() * sizeof(GLushort), GL_STATIC_DRAW);
}
void IndexDataManagerPerfTest::step()
@@ -183,4 +172,4 @@ TEST_F(IndexDataManagerPerfTest, Run)
run();
}
-} // anonymous namespace
+}
diff --git a/gfx/angle/src/tests/perf_tests/TexturesPerf.cpp b/gfx/angle/src/tests/perf_tests/TexturesPerf.cpp
deleted file mode 100644
index 58e1a9ba6..000000000
--- a/gfx/angle/src/tests/perf_tests/TexturesPerf.cpp
+++ /dev/null
@@ -1,293 +0,0 @@
-//
-// Copyright (c) 2016 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// TexturesPerf:
-// Performance test for setting texture state.
-//
-
-#include "ANGLEPerfTest.h"
-
-#include <iostream>
-#include <random>
-#include <sstream>
-
-#include "shader_utils.h"
-
-namespace angle
-{
-
-struct TexturesParams final : public RenderTestParams
-{
- TexturesParams()
- {
- // Common default params
- majorVersion = 2;
- minorVersion = 0;
- windowWidth = 720;
- windowHeight = 720;
- iterations = 256;
-
- numTextures = 8;
- textureRebindFrequency = 5;
- textureStateUpdateFrequency = 3;
- textureMipCount = 8;
- }
-
- std::string suffix() const override;
- size_t numTextures;
- size_t textureRebindFrequency;
- size_t textureStateUpdateFrequency;
- size_t textureMipCount;
-
- // static parameters
- size_t iterations;
-};
-
-std::ostream &operator<<(std::ostream &os, const TexturesParams &params)
-{
- os << params.suffix().substr(1);
- return os;
-}
-
-std::string TexturesParams::suffix() const
-{
- std::stringstream strstr;
-
- strstr << RenderTestParams::suffix();
- strstr << "_" << numTextures << "_textures";
- strstr << "_" << textureRebindFrequency << "_rebind";
- strstr << "_" << textureStateUpdateFrequency << "_state";
- strstr << "_" << textureMipCount << "_mips";
-
- return strstr.str();
-}
-
-class TexturesBenchmark : public ANGLERenderTest,
- public ::testing::WithParamInterface<TexturesParams>
-{
- public:
- TexturesBenchmark();
-
- void initializeBenchmark() override;
- void destroyBenchmark() override;
- void drawBenchmark() override;
-
- private:
- void initShaders();
- void initTextures();
-
- std::vector<GLuint> mTextures;
-
- GLuint mProgram;
- std::vector<GLuint> mUniformLocations;
-};
-
-TexturesBenchmark::TexturesBenchmark() : ANGLERenderTest("Textures", GetParam()), mProgram(0u)
-{
-}
-
-void TexturesBenchmark::initializeBenchmark()
-{
- const auto &params = GetParam();
-
- ASSERT_GT(params.iterations, 0u);
-
- // Verify the uniform counts are within the limits
- GLint maxTextureUnits;
- glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &maxTextureUnits);
- if (params.numTextures > static_cast<size_t>(maxTextureUnits))
- {
- FAIL() << "Texture count (" << params.numTextures << ")"
- << " exceeds maximum texture unit count: " << maxTextureUnits << std::endl;
- }
-
- initShaders();
- initTextures();
- glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
- glViewport(0, 0, getWindow()->getWidth(), getWindow()->getHeight());
-
- ASSERT_GL_NO_ERROR();
-}
-
-std::string GetUniformLocationName(size_t idx, bool vertexShader)
-{
- std::stringstream strstr;
- strstr << (vertexShader ? "vs" : "fs") << "_u_" << idx;
- return strstr.str();
-}
-
-void TexturesBenchmark::initShaders()
-{
- const auto &params = GetParam();
-
- std::string vs =
- "void main()\n"
- "{\n"
- " gl_Position = vec4(0, 0, 0, 0);\n"
- "}\n";
-
- std::stringstream fstrstr;
- for (size_t i = 0; i < params.numTextures; i++)
- {
- fstrstr << "uniform sampler2D tex" << i << ";";
- }
- fstrstr << "void main()\n"
- "{\n"
- " gl_FragColor = vec4(0, 0, 0, 0)";
- for (size_t i = 0; i < params.numTextures; i++)
- {
- fstrstr << "+ texture2D(tex" << i << ", vec2(0, 0))";
- }
- fstrstr << ";\n"
- "}\n";
-
- mProgram = CompileProgram(vs, fstrstr.str());
- ASSERT_NE(0u, mProgram);
-
- for (size_t i = 0; i < params.numTextures; ++i)
- {
- std::stringstream uniformName;
- uniformName << "tex" << i;
-
- GLint location = glGetUniformLocation(mProgram, uniformName.str().c_str());
- ASSERT_NE(-1, location);
- mUniformLocations.push_back(location);
- }
-
- // Use the program object
- glUseProgram(mProgram);
-}
-
-void TexturesBenchmark::initTextures()
-{
- const auto &params = GetParam();
-
- size_t textureSize = static_cast<size_t>(1) << params.textureMipCount;
- std::vector<GLubyte> textureData(textureSize * textureSize * 4);
- for (auto &byte : textureData)
- {
- byte = rand() % 255u;
- }
-
- for (size_t texIndex = 0; texIndex < params.numTextures; texIndex++)
- {
- GLuint tex = 0;
- glGenTextures(1, &tex);
-
- glActiveTexture(static_cast<GLenum>(GL_TEXTURE0 + texIndex));
- glBindTexture(GL_TEXTURE_2D, tex);
- for (size_t mip = 0; mip < params.textureMipCount; mip++)
- {
- GLsizei levelSize = static_cast<GLsizei>(textureSize >> mip);
- glTexImage2D(GL_TEXTURE_2D, static_cast<GLint>(mip), GL_RGBA, levelSize, levelSize, 0,
- GL_RGBA, GL_UNSIGNED_BYTE, textureData.data());
- }
- mTextures.push_back(tex);
-
- glUniform1i(mUniformLocations[texIndex], static_cast<GLint>(texIndex));
- }
-}
-
-void TexturesBenchmark::destroyBenchmark()
-{
- glDeleteProgram(mProgram);
-}
-
-void TexturesBenchmark::drawBenchmark()
-{
- const auto &params = GetParam();
-
- for (size_t it = 0; it < params.iterations; ++it)
- {
- if (it % params.textureRebindFrequency == 0)
- {
- // Swap two textures
- size_t swapTexture = (it / params.textureRebindFrequency) % (params.numTextures - 1);
-
- glActiveTexture(static_cast<GLenum>(GL_TEXTURE0 + swapTexture));
- glBindTexture(GL_TEXTURE_2D, mTextures[swapTexture]);
- glActiveTexture(static_cast<GLenum>(GL_TEXTURE0 + swapTexture + 1));
- glBindTexture(GL_TEXTURE_2D, mTextures[swapTexture + 1]);
- std::swap(mTextures[swapTexture], mTextures[swapTexture + 1]);
- }
-
- if (it % params.textureStateUpdateFrequency == 0)
- {
- // Update a texture's state
- size_t stateUpdateCount = it / params.textureStateUpdateFrequency;
-
- const size_t numUpdateTextures = 4;
- ASSERT_LE(numUpdateTextures, params.numTextures);
-
- size_t firstTexture = stateUpdateCount % (params.numTextures - numUpdateTextures);
-
- for (size_t updateTextureIdx = 0; updateTextureIdx < numUpdateTextures;
- updateTextureIdx++)
- {
- size_t updateTexture = firstTexture + updateTextureIdx;
- glActiveTexture(static_cast<GLenum>(GL_TEXTURE0 + updateTexture));
-
- const GLenum minFilters[] = {
- GL_NEAREST,
- GL_LINEAR,
- GL_NEAREST_MIPMAP_NEAREST,
- GL_LINEAR_MIPMAP_NEAREST,
- GL_NEAREST_MIPMAP_LINEAR,
- GL_LINEAR_MIPMAP_LINEAR,
- };
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
- minFilters[stateUpdateCount % ArraySize(minFilters)]);
-
- const GLenum magFilters[] = {
- GL_NEAREST, GL_LINEAR,
- };
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
- magFilters[stateUpdateCount % ArraySize(magFilters)]);
-
- const GLenum wrapParameters[] = {
- GL_CLAMP_TO_EDGE, GL_REPEAT, GL_MIRRORED_REPEAT,
- };
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,
- wrapParameters[stateUpdateCount % ArraySize(wrapParameters)]);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,
- wrapParameters[stateUpdateCount % ArraySize(wrapParameters)]);
- }
- }
-
- glDrawArrays(GL_TRIANGLES, 0, 3);
- }
-
- ASSERT_GL_NO_ERROR();
-}
-
-TexturesParams D3D11Params()
-{
- TexturesParams params;
- params.eglParameters = egl_platform::D3D11_NULL();
- return params;
-}
-
-TexturesParams D3D9Params()
-{
- TexturesParams params;
- params.eglParameters = egl_platform::D3D9_NULL();
- return params;
-}
-
-TexturesParams OpenGLParams()
-{
- TexturesParams params;
- params.eglParameters = egl_platform::OPENGL_NULL();
- return params;
-}
-
-TEST_P(TexturesBenchmark, Run)
-{
- run();
-}
-
-ANGLE_INSTANTIATE_TEST(TexturesBenchmark, D3D11Params(), D3D9Params(), OpenGLParams());
-
-} // namespace angle
diff --git a/gfx/angle/src/tests/preprocessor_tests/define_test.cpp b/gfx/angle/src/tests/preprocessor_tests/define_test.cpp
index e074d1982..b95a6b4e8 100755
--- a/gfx/angle/src/tests/preprocessor_tests/define_test.cpp
+++ b/gfx/angle/src/tests/preprocessor_tests/define_test.cpp
@@ -938,51 +938,4 @@ TEST_F(DefineTest, NegativeShiftInLineDirective)
EXPECT_CALL(mDiagnostics, print(pp::Diagnostics::PP_UNDEFINED_SHIFT, _, _)).Times(4);
EXPECT_CALL(mDiagnostics, print(pp::Diagnostics::PP_INVALID_LINE_NUMBER, _, _)).Times(2);
preprocess(input, expected);
-}
-
-// Undefining a macro in its invocation parameters produces and error
-TEST_F(DefineTest, UndefineInInvocation)
-{
- const char *input =
- "#define G(a, b) a b\n"
- "G(\n"
- "#undef G\n"
- "1, 2)\n";
- const char *expected = "\n\n\n1 2\n";
-
- EXPECT_CALL(mDiagnostics, print(pp::Diagnostics::PP_MACRO_UNDEFINED_WHILE_INVOKED,
- pp::SourceLocation(0, 3), _));
-
- preprocess(input, expected);
-}
-
-// Undefining a macro before its invocation parameters produces and error
-TEST_F(DefineTest, UndefineInInvocationPreLParen)
-{
- const char *input =
- "#define G(a, b) a b\n"
- "G\n"
- "#undef G\n"
- "(1, 2)\n";
- const char *expected = "\n\n\n1 2\n";
-
- EXPECT_CALL(mDiagnostics, print(pp::Diagnostics::PP_MACRO_UNDEFINED_WHILE_INVOKED,
- pp::SourceLocation(0, 3), _));
-
- preprocess(input, expected);
-}
-
-// The name of the macro "a" is inside an incomplete macro invocation of macro "m()" in its own
-// expansion. This should not result in infinite recursion.
-TEST_F(DefineTest, RecursiveMacroNameInsideIncompleteMacroInvocationInMacroExpansion)
-{
- const char *input =
- "#define m(a)\n"
- "#define a m((a)\n"
- "a)\n";
- const char *expected =
- "\n"
- "\n"
- "\n";
- preprocess(input, expected);
-}
+} \ No newline at end of file
diff --git a/gfx/angle/src/tests/preprocessor_tests/if_test.cpp b/gfx/angle/src/tests/preprocessor_tests/if_test.cpp
index 7940b564a..27bfbbbb4 100755
--- a/gfx/angle/src/tests/preprocessor_tests/if_test.cpp
+++ b/gfx/angle/src/tests/preprocessor_tests/if_test.cpp
@@ -952,97 +952,3 @@ TEST_F(IfTest, UnterminatedDefinedInMacro2)
pp::Token token;
mPreprocessor.lex(&token);
}
-
-// Undefined shift: negative shift offset.
-TEST_F(IfTest, BitShiftLeftOperatorNegativeOffset)
-{
- const char *str =
- "#if 2 << -1 == 1\n"
- "foo\n"
- "#endif\n";
- ASSERT_TRUE(mPreprocessor.init(1, &str, 0));
-
- EXPECT_CALL(mDiagnostics,
- print(pp::Diagnostics::PP_UNDEFINED_SHIFT, pp::SourceLocation(0, 1), "2 << -1"));
-
- pp::Token token;
- mPreprocessor.lex(&token);
-}
-
-// Undefined shift: shift offset is out of range.
-TEST_F(IfTest, BitShiftLeftOperatorOffset32)
-{
- const char *str =
- "#if 2 << 32 == 1\n"
- "foo\n"
- "#endif\n";
- ASSERT_TRUE(mPreprocessor.init(1, &str, 0));
-
- EXPECT_CALL(mDiagnostics,
- print(pp::Diagnostics::PP_UNDEFINED_SHIFT, pp::SourceLocation(0, 1), "2 << 32"));
-
- pp::Token token;
- mPreprocessor.lex(&token);
-}
-
-// Left hand side of shift is negative.
-TEST_F(IfTest, BitShiftLeftOperatorNegativeLHS)
-{
- const char *str =
- "#if (-2) << 1 == -4\n"
- "pass\n"
- "#endif\n";
- const char *expected =
- "\n"
- "pass\n"
- "\n";
-
- preprocess(str, expected);
-}
-
-// Undefined shift: shift offset is out of range.
-TEST_F(IfTest, BitShiftRightOperatorNegativeOffset)
-{
- const char *str =
- "#if 2 >> -1 == 4\n"
- "foo\n"
- "#endif\n";
- ASSERT_TRUE(mPreprocessor.init(1, &str, 0));
-
- EXPECT_CALL(mDiagnostics,
- print(pp::Diagnostics::PP_UNDEFINED_SHIFT, pp::SourceLocation(0, 1), "2 >> -1"));
-
- pp::Token token;
- mPreprocessor.lex(&token);
-}
-
-// Undefined shift: shift offset is out of range.
-TEST_F(IfTest, BitShiftRightOperatorOffset32)
-{
- const char *str =
- "#if 2 >> 32 == 0\n"
- "foo\n"
- "#endif\n";
- ASSERT_TRUE(mPreprocessor.init(1, &str, 0));
-
- EXPECT_CALL(mDiagnostics,
- print(pp::Diagnostics::PP_UNDEFINED_SHIFT, pp::SourceLocation(0, 1), "2 >> 32"));
-
- pp::Token token;
- mPreprocessor.lex(&token);
-}
-
-// Left hand side of shift is negative.
-TEST_F(IfTest, BitShiftRightOperatorNegativeLHS)
-{
- const char *str =
- "#if (-2) >> 1 == 0x7fffffff\n"
- "pass\n"
- "#endif\n";
- const char *expected =
- "\n"
- "pass\n"
- "\n";
-
- preprocess(str, expected);
-}
diff --git a/gfx/angle/src/tests/test_utils/ANGLETest.cpp b/gfx/angle/src/tests/test_utils/ANGLETest.cpp
index 77f1d8dec..1a9d8b50f 100755
--- a/gfx/angle/src/tests/test_utils/ANGLETest.cpp
+++ b/gfx/angle/src/tests/test_utils/ANGLETest.cpp
@@ -30,6 +30,8 @@ const GLColor GLColor::transparentBlack = GLColor(0u, 0u, 0u, 0u);
const GLColor GLColor::white = GLColor(255u, 255u, 255u, 255u);
const GLColor GLColor::yellow = GLColor(255u, 255u, 0, 255u);
+const GLColor16 GLColor16::white = GLColor16(65535u, 65535u, 65535u, 65535u);
+
namespace
{
float ColorNorm(GLubyte channelValue)
@@ -136,6 +138,14 @@ GLColor::GLColor(const Vector4 &floatColor)
{
}
+GLColor::GLColor(const GLColor16 &color16)
+ : R(static_cast<GLubyte>(color16.R)),
+ G(static_cast<GLubyte>(color16.G)),
+ B(static_cast<GLubyte>(color16.B)),
+ A(static_cast<GLubyte>(color16.A))
+{
+}
+
GLColor::GLColor(GLuint colorValue) : R(0), G(0), B(0), A(0)
{
memcpy(&R, &colorValue, sizeof(GLuint));
@@ -167,6 +177,35 @@ std::ostream &operator<<(std::ostream &ostream, const GLColor &color)
return ostream;
}
+GLColor16::GLColor16() : R(0), G(0), B(0), A(0)
+{
+}
+
+GLColor16::GLColor16(GLushort r, GLushort g, GLushort b, GLushort a) : R(r), G(g), B(b), A(a)
+{
+}
+
+GLColor16 ReadColor16(GLint x, GLint y)
+{
+ GLColor16 actual;
+ glReadPixels((x), (y), 1, 1, GL_RGBA, GL_UNSIGNED_SHORT, &actual.R);
+ EXPECT_GL_NO_ERROR();
+ return actual;
+}
+
+bool operator==(const GLColor16 &a, const GLColor16 &b)
+{
+ return a.R == b.R && a.G == b.G && a.B == b.B && a.A == b.A;
+}
+
+std::ostream &operator<<(std::ostream &ostream, const GLColor16 &color)
+{
+ ostream << "(" << static_cast<unsigned int>(color.R) << ", "
+ << static_cast<unsigned int>(color.G) << ", " << static_cast<unsigned int>(color.B)
+ << ", " << static_cast<unsigned int>(color.A) << ")";
+ return ostream;
+}
+
} // namespace angle
// static
@@ -549,14 +588,6 @@ bool ANGLETest::eglClientExtensionEnabled(const std::string &extName)
return checkExtensionExists(eglQueryString(EGL_NO_DISPLAY, EGL_EXTENSIONS), extName);
}
-bool ANGLETest::eglDeviceExtensionEnabled(EGLDeviceEXT device, const std::string &extName)
-{
- PFNEGLQUERYDEVICESTRINGEXTPROC eglQueryDeviceStringEXT =
- reinterpret_cast<PFNEGLQUERYDEVICESTRINGEXTPROC>(
- eglGetProcAddress("eglQueryDeviceStringEXT"));
- return checkExtensionExists(eglQueryDeviceStringEXT(device, EGL_EXTENSIONS), extName);
-}
-
void ANGLETest::setWindowWidth(int width)
{
mWidth = width;
@@ -612,16 +643,6 @@ void ANGLETest::setNoErrorEnabled(bool enabled)
mEGLWindow->setNoErrorEnabled(enabled);
}
-void ANGLETest::setWebGLCompatibilityEnabled(bool webglCompatibility)
-{
- mEGLWindow->setWebGLCompatibilityEnabled(webglCompatibility);
-}
-
-void ANGLETest::setBindGeneratesResource(bool bindGeneratesResource)
-{
- mEGLWindow->setBindGeneratesResource(bindGeneratesResource);
-}
-
int ANGLETest::getClientMajorVersion() const
{
return mEGLWindow->getClientMajorVersion();
@@ -794,20 +815,6 @@ bool IsWindows()
#endif
}
-bool IsDebug()
-{
-#if !defined(NDEBUG)
- return true;
-#else
- return false;
-#endif
-}
-
-bool IsRelease()
-{
- return !IsDebug();
-}
-
EGLint ANGLETest::getPlatformRenderer() const
{
assert(mEGLWindow);
diff --git a/gfx/angle/src/tests/test_utils/ANGLETest.h b/gfx/angle/src/tests/test_utils/ANGLETest.h
index a1bef48e6..b735887d6 100755
--- a/gfx/angle/src/tests/test_utils/ANGLETest.h
+++ b/gfx/angle/src/tests/test_utils/ANGLETest.h
@@ -59,11 +59,14 @@ struct GLColorRGB
static const GLColorRGB yellow;
};
+struct GLColor16;
+
struct GLColor
{
GLColor();
GLColor(GLubyte r, GLubyte g, GLubyte b, GLubyte a);
GLColor(const Vector4 &floatColor);
+ GLColor(const GLColor16 &color16);
GLColor(GLuint colorValue);
Vector4 toNormalizedVector() const;
@@ -92,6 +95,28 @@ bool operator==(const GLColor &a, const GLColor &b);
std::ostream &operator<<(std::ostream &ostream, const GLColor &color);
GLColor ReadColor(GLint x, GLint y);
+struct GLColor16
+{
+ GLColor16();
+ GLColor16(GLushort r, GLushort g, GLushort b, GLushort a);
+
+ GLushort R, G, B, A;
+
+ static const GLColor16 white;
+};
+
+// Useful to cast any type to GLushort.
+template <typename TR, typename TG, typename TB, typename TA>
+GLColor16 MakeGLColor16(TR r, TG g, TB b, TA a)
+{
+ return GLColor16(static_cast<GLushort>(r), static_cast<GLushort>(g), static_cast<GLushort>(b),
+ static_cast<GLushort>(a));
+}
+
+bool operator==(const GLColor16 &a, const GLColor16 &b);
+std::ostream &operator<<(std::ostream &ostream, const GLColor16 &color);
+GLColor16 ReadColor16(GLint x, GLint y);
+
} // namespace angle
#define EXPECT_PIXEL_EQ(x, y, r, g, b, a) \
@@ -116,6 +141,8 @@ GLColor ReadColor(GLint x, GLint y);
#define EXPECT_PIXEL_COLOR_NEAR(x, y, angleColor, abs_error) \
EXPECT_PIXEL_NEAR(x, y, angleColor.R, angleColor.G, angleColor.B, angleColor.A, abs_error)
+#define EXPECT_PIXEL_COLOR16_EQ(x, y, angleColor) EXPECT_EQ(angleColor, angle::ReadColor16(x, y))
+
#define EXPECT_COLOR_NEAR(expected, actual, abs_error) \
\
{ \
@@ -172,7 +199,6 @@ class ANGLETest : public ::testing::TestWithParam<angle::PlatformParameters>
static GLuint compileShader(GLenum type, const std::string &source);
static bool extensionEnabled(const std::string &extName);
static bool eglClientExtensionEnabled(const std::string &extName);
- static bool eglDeviceExtensionEnabled(EGLDeviceEXT device, const std::string &extName);
void setWindowWidth(int width);
void setWindowHeight(int height);
@@ -185,8 +211,6 @@ class ANGLETest : public ::testing::TestWithParam<angle::PlatformParameters>
void setMultisampleEnabled(bool enabled);
void setDebugEnabled(bool enabled);
void setNoErrorEnabled(bool enabled);
- void setWebGLCompatibilityEnabled(bool webglCompatibility);
- void setBindGeneratesResource(bool bindGeneratesResource);
int getClientMajorVersion() const;
int getClientMinorVersion() const;
@@ -253,22 +277,7 @@ bool IsLinux();
bool IsOSX();
bool IsWindows();
-// Debug/Release
-bool IsDebug();
-bool IsRelease();
-
// Negative tests may trigger expected errors/warnings in the ANGLE Platform.
void IgnoreANGLEPlatformMessages();
-// Note: git cl format messes up this formatting.
-#define ANGLE_SKIP_TEST_IF(COND) \
- \
-if(COND) \
- \
-{ \
- std::cout << "Test skipped: " #COND "." << std::endl; \
- return; \
- \
-}
-
#endif // ANGLE_TESTS_ANGLE_TEST_H_
diff --git a/gfx/angle/src/tests/test_utils/compiler_test.cpp b/gfx/angle/src/tests/test_utils/compiler_test.cpp
index 873541ecd..ea758b893 100755
--- a/gfx/angle/src/tests/test_utils/compiler_test.cpp
+++ b/gfx/angle/src/tests/test_utils/compiler_test.cpp
@@ -11,79 +11,16 @@
#include "angle_gl.h"
#include "compiler/translator/Compiler.h"
-namespace sh
-{
-
-namespace
-{
-
-class ShaderVariableFinder : public TIntermTraverser
-{
- public:
- ShaderVariableFinder(const TString &variableName, TBasicType basicType)
- : TIntermTraverser(true, false, false),
- mVariableName(variableName),
- mNodeFound(nullptr),
- mBasicType(basicType)
- {
- }
-
- void visitSymbol(TIntermSymbol *node)
- {
- if (node->getBasicType() == mBasicType && node->getSymbol() == mVariableName)
- {
- mNodeFound = node;
- }
- }
-
- bool isFound() const { return mNodeFound != nullptr; }
- const TIntermSymbol *getNode() const { return mNodeFound; }
-
- private:
- TString mVariableName;
- TIntermSymbol *mNodeFound;
- TBasicType mBasicType;
-};
-
-class FunctionCallFinder : public TIntermTraverser
-{
- public:
- FunctionCallFinder(const TString &functionName)
- : TIntermTraverser(true, false, false), mFunctionName(functionName), mNodeFound(nullptr)
- {
- }
-
- bool visitAggregate(Visit visit, TIntermAggregate *node) override
- {
- if (node->getOp() == EOpFunctionCall &&
- node->getFunctionSymbolInfo()->getName() == mFunctionName)
- {
- mNodeFound = node;
- return false;
- }
- return true;
- }
-
- bool isFound() const { return mNodeFound != nullptr; }
- const TIntermAggregate *getNode() const { return mNodeFound; }
-
- private:
- TString mFunctionName;
- TIntermAggregate *mNodeFound;
-};
-
-} // anonymous namespace
-
bool compileTestShader(GLenum type,
ShShaderSpec spec,
ShShaderOutput output,
const std::string &shaderString,
ShBuiltInResources *resources,
- ShCompileOptions compileOptions,
+ int compileOptions,
std::string *translatedCode,
std::string *infoLog)
{
- sh::TCompiler *translator = sh::ConstructCompiler(type, spec, output);
+ TCompiler *translator = ConstructCompiler(type, spec, output);
if (!translator->Init(*resources))
{
SafeDelete(translator);
@@ -106,21 +43,21 @@ bool compileTestShader(GLenum type,
ShShaderSpec spec,
ShShaderOutput output,
const std::string &shaderString,
- ShCompileOptions compileOptions,
+ int compileOptions,
std::string *translatedCode,
std::string *infoLog)
{
ShBuiltInResources resources;
- sh::InitBuiltInResources(&resources);
+ ShInitBuiltInResources(&resources);
return compileTestShader(type, spec, output, shaderString, &resources, compileOptions, translatedCode, infoLog);
}
MatchOutputCodeTest::MatchOutputCodeTest(GLenum shaderType,
- ShCompileOptions defaultCompileOptions,
+ int defaultCompileOptions,
ShShaderOutput outputType)
: mShaderType(shaderType), mDefaultCompileOptions(defaultCompileOptions)
{
- sh::InitBuiltInResources(&mResources);
+ ShInitBuiltInResources(&mResources);
mOutputCode[outputType] = std::string();
}
@@ -139,8 +76,7 @@ void MatchOutputCodeTest::compile(const std::string &shaderString)
compile(shaderString, mDefaultCompileOptions);
}
-void MatchOutputCodeTest::compile(const std::string &shaderString,
- const ShCompileOptions compileOptions)
+void MatchOutputCodeTest::compile(const std::string &shaderString, const int compileOptions)
{
std::string infoLog;
for (auto &code : mOutputCode)
@@ -156,7 +92,7 @@ void MatchOutputCodeTest::compile(const std::string &shaderString,
bool MatchOutputCodeTest::compileWithSettings(ShShaderOutput output,
const std::string &shaderString,
- const ShCompileOptions compileOptions,
+ const int compileOptions,
std::string *translatedCode,
std::string *infoLog)
{
@@ -236,21 +172,3 @@ bool MatchOutputCodeTest::notFoundInCode(const char *stringToFind) const
}
return true;
}
-
-const TIntermSymbol *FindSymbolNode(TIntermNode *root,
- const TString &symbolName,
- TBasicType basicType)
-{
- ShaderVariableFinder finder(symbolName, basicType);
- root->traverse(&finder);
- return finder.getNode();
-}
-
-const TIntermAggregate *FindFunctionCallNode(TIntermNode *root, const TString &functionName)
-{
- FunctionCallFinder finder(functionName);
- root->traverse(&finder);
- return finder.getNode();
-}
-
-} // namespace sh
diff --git a/gfx/angle/src/tests/test_utils/compiler_test.h b/gfx/angle/src/tests/test_utils/compiler_test.h
index a0dd2d82a..3dd86b43c 100755
--- a/gfx/angle/src/tests/test_utils/compiler_test.h
+++ b/gfx/angle/src/tests/test_utils/compiler_test.h
@@ -11,21 +11,16 @@
#include <map>
-#include "gtest/gtest.h"
-
#include "angle_gl.h"
-#include "compiler/translator/TranslatorESSL.h"
+#include "gtest/gtest.h"
#include "GLSLANG/ShaderLang.h"
-namespace sh
-{
-
bool compileTestShader(GLenum type,
ShShaderSpec spec,
ShShaderOutput output,
const std::string &shaderString,
ShBuiltInResources *resources,
- ShCompileOptions compileOptions,
+ int compileOptions,
std::string *translatedCode,
std::string *infoLog);
@@ -33,16 +28,14 @@ bool compileTestShader(GLenum type,
ShShaderSpec spec,
ShShaderOutput output,
const std::string &shaderString,
- ShCompileOptions compileOptions,
+ int compileOptions,
std::string *translatedCode,
std::string *infoLog);
class MatchOutputCodeTest : public testing::Test
{
protected:
- MatchOutputCodeTest(GLenum shaderType,
- ShCompileOptions defaultCompileOptions,
- ShShaderOutput outputType);
+ MatchOutputCodeTest(GLenum shaderType, int defaultCompileOptions, ShShaderOutput outputType);
void addOutputType(const ShShaderOutput outputType);
@@ -50,7 +43,7 @@ class MatchOutputCodeTest : public testing::Test
// Compile functions clear any results from earlier calls to them.
void compile(const std::string &shaderString);
- void compile(const std::string &shaderString, const ShCompileOptions compileOptions);
+ void compile(const std::string &shaderString, const int compileOptions);
bool foundInESSLCode(const char *stringToFind) const
{
@@ -81,23 +74,15 @@ class MatchOutputCodeTest : public testing::Test
private:
bool compileWithSettings(ShShaderOutput output,
const std::string &shaderString,
- ShCompileOptions compileOptions,
+ int compileOptions,
std::string *translatedCode,
std::string *infoLog);
GLenum mShaderType;
- ShCompileOptions mDefaultCompileOptions;
+ int mDefaultCompileOptions;
ShBuiltInResources mResources;
std::map<ShShaderOutput, std::string> mOutputCode;
};
-const TIntermSymbol *FindSymbolNode(TIntermNode *root,
- const TString &symbolName,
- TBasicType basicType);
-
-// Returns a pointer to a function call node with a mangled name functionName.
-const TIntermAggregate *FindFunctionCallNode(TIntermNode *root, const TString &functionName);
-}
-
#endif // TESTS_TEST_UTILS_COMPILER_TEST_H_
diff --git a/gfx/angle/src/tests/test_utils/gl_raii.h b/gfx/angle/src/tests/test_utils/gl_raii.h
index b42a56396..9adc0cf02 100755
--- a/gfx/angle/src/tests/test_utils/gl_raii.h
+++ b/gfx/angle/src/tests/test_utils/gl_raii.h
@@ -46,7 +46,6 @@ using GLBuffer = GLWrapper<glGenBuffers, glDeleteBuffers>;
using GLTexture = GLWrapper<glGenTextures, glDeleteTextures>;
using GLFramebuffer = GLWrapper<glGenFramebuffers, glDeleteFramebuffers>;
using GLRenderbuffer = GLWrapper<glGenRenderbuffers, glDeleteRenderbuffers>;
-using GLSampler = GLWrapper<glGenSamplers, glDeleteSamplers>;
class GLProgram
{
diff --git a/gfx/angle/src/tests/tests.gyp b/gfx/angle/src/tests/tests.gyp
index 3401e994b..c2d18e789 100755
--- a/gfx/angle/src/tests/tests.gyp
+++ b/gfx/angle/src/tests/tests.gyp
@@ -6,7 +6,7 @@
'includes':
[
'deqp.gypi',
- '../../gyp/common_defines.gypi',
+ '../../build/common_defines.gypi',
],
'variables':
{
@@ -68,15 +68,15 @@
{
'target_name': 'angle_internal_gtest',
'type': 'static_library',
- 'includes': [ '../../gyp/common_defines.gypi', ],
+ 'includes': [ '../../build/common_defines.gypi', ],
'include_dirs':
[
- '<(angle_path)/testing/gtest',
- '<(angle_path)/testing/gtest/include',
+ 'third_party/googletest',
+ 'third_party/googletest/include',
],
'sources':
[
- '<(angle_path)/testing/gtest/src/gtest-all.cc',
+ 'third_party/googletest/src/gtest-all.cc',
],
'defines':
[
@@ -90,8 +90,8 @@
],
'include_dirs':
[
- '<(angle_path)/testing/gtest',
- '<(angle_path)/testing/gtest/include',
+ 'third_party/googletest',
+ 'third_party/googletest/include',
],
},
},
@@ -99,16 +99,16 @@
{
'target_name': 'angle_internal_gmock',
'type': 'static_library',
- 'includes': [ '../../gyp/common_defines.gypi', ],
+ 'includes': [ '../../build/common_defines.gypi', ],
'include_dirs':
[
- '<(angle_path)/testing/gmock',
- '<(angle_path)/testing/gmock/include',
- '<(angle_path)/testing/gtest/include',
+ 'third_party/googlemock',
+ 'third_party/googlemock/include',
+ 'third_party/googletest/include',
],
'sources':
[
- '<(angle_path)/testing/gmock/src/gmock-all.cc',
+ 'third_party/googlemock/src/gmock-all.cc',
],
'defines':
[
@@ -122,9 +122,9 @@
],
'include_dirs':
[
- '<(angle_path)/testing/gmock',
- '<(angle_path)/testing/gmock/include',
- '<(angle_path)/testing/gtest/include',
+ 'third_party/googlemock',
+ 'third_party/googlemock/include',
+ 'third_party/googletest/include',
],
},
},
@@ -137,7 +137,7 @@
'type': 'executable',
'includes':
[
- '../../gyp/common_defines.gypi',
+ '../../build/common_defines.gypi',
'angle_unittests.gypi',
],
'sources':
@@ -170,7 +170,7 @@
'type': 'executable',
'includes':
[
- '../../gyp/common_defines.gypi',
+ '../../build/common_defines.gypi',
'angle_end2end_tests.gypi',
],
'sources':
@@ -183,7 +183,7 @@
'type': 'executable',
'includes':
[
- '../../gyp/common_defines.gypi',
+ '../../build/common_defines.gypi',
'angle_perftests.gypi',
],
'sources':
@@ -210,7 +210,7 @@
{
'target_name': 'angle_gles2_conformance_tests',
'type': 'executable',
- 'includes': [ '../../gyp/common_defines.gypi', ],
+ 'includes': [ '../../build/common_defines.gypi', ],
'dependencies':
[
'<(angle_path)/src/angle.gyp:libGLESv2',
@@ -277,7 +277,7 @@
{
'target_name': 'angle_gles3_conformance_tests',
'type': 'executable',
- 'includes': [ '../../gyp/common_defines.gypi', ],
+ 'includes': [ '../../build/common_defines.gypi', ],
'dependencies':
[
'<(angle_path)/src/angle.gyp:libGLESv2',
diff --git a/gfx/angle/src/tests/third_party/gpu_test_expectations/HowToMakeChanges.md b/gfx/angle/src/tests/third_party/gpu_test_expectations/HowToMakeChanges.md
index 190a3e9c3..7817d0a50 100755
--- a/gfx/angle/src/tests/third_party/gpu_test_expectations/HowToMakeChanges.md
+++ b/gfx/angle/src/tests/third_party/gpu_test_expectations/HowToMakeChanges.md
@@ -1,4 +1,4 @@
-Because the ```gpu_test_expectations``` directory is based on parts of Chromium's ```gpu/config```
+Because the ```gpu_test_expectations``` directory is based on parts of Chromium's ```gpu/config``
directory, we want to keep a patch of the changes added to make it compile with ANGLE. This
will allow us to merge Chromium changes easily in our ```gpu_test_expectations```.
diff --git a/gfx/angle/src/tests/third_party/gpu_test_expectations/angle-mods.patch b/gfx/angle/src/tests/third_party/gpu_test_expectations/angle-mods.patch
index 8df858c7c..c00efc081 100755
--- a/gfx/angle/src/tests/third_party/gpu_test_expectations/angle-mods.patch
+++ b/gfx/angle/src/tests/third_party/gpu_test_expectations/angle-mods.patch
@@ -1,6 +1,6 @@
diff -rupN gpu_test_expectations_reverted/angle_config.h gpu_test_expectations/angle_config.h
--- gpu_test_expectations_reverted/angle_config.h 1969-12-31 19:00:00.000000000 -0500
-+++ gpu_test_expectations/angle_config.h 2016-08-23 13:50:18.282742505 -0400
++++ gpu_test_expectations/angle_config.h 2016-08-22 16:13:08.739352282 -0400
@@ -0,0 +1,66 @@
+//
+// Copyright 2015 The ANGLE Project Authors. All rights reserved.
@@ -275,7 +275,7 @@ diff -rupN gpu_test_expectations_reverted/gpu_info.h gpu_test_expectations/gpu_i
virtual void BeginGPUDevice() = 0;
diff -rupN gpu_test_expectations_reverted/gpu_test_config.cc gpu_test_expectations/gpu_test_config.cc
--- gpu_test_expectations_reverted/gpu_test_config.cc 2016-08-12 21:23:54.884132405 -0400
-+++ gpu_test_expectations/gpu_test_config.cc 2016-09-09 16:40:05.597864465 -0400
++++ gpu_test_expectations/gpu_test_config.cc 2016-08-22 16:09:09.972124940 -0400
@@ -2,20 +2,205 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -302,8 +302,8 @@ diff -rupN gpu_test_expectations_reverted/gpu_test_config.cc gpu_test_expectatio
-#elif defined(OS_WIN)
-#include "base/win/windows_version.h"
+#include "gpu_test_config_mac.h"
-+#endif
-+
+ #endif
+
+using namespace gpu;
+
+#if defined(OS_WIN)
@@ -476,8 +476,8 @@ diff -rupN gpu_test_expectations_reverted/gpu_test_config.cc gpu_test_expectatio
+ return kCollectInfoNonFatalFailure;
+}
+
- #endif
-
++#endif
++
+#if defined(OS_ANDROID)
+CollectInfoResult CollectGpuID(uint32 *vendor_id, uint32 *device_id)
+{
@@ -491,72 +491,7 @@ diff -rupN gpu_test_expectations_reverted/gpu_test_config.cc gpu_test_expectatio
namespace gpu {
namespace {
-@@ -245,33 +430,41 @@ bool GPUTestBotConfig::Matches(const std
- return Matches(config);
- }
-
--bool GPUTestBotConfig::LoadCurrentConfig(const GPUInfo* gpu_info) {
-- bool rt;
-- if (gpu_info == NULL) {
-- GPUInfo my_gpu_info;
-- CollectInfoResult result = CollectGpuID(
-- &my_gpu_info.gpu.vendor_id, &my_gpu_info.gpu.device_id);
-- if (result != kCollectInfoSuccess) {
-- LOG(ERROR) << "Fail to identify GPU";
-- DisableGPUInfoValidation();
-- rt = true;
-- } else {
-- rt = SetGPUInfo(my_gpu_info);
-+bool GPUTestBotConfig::LoadCurrentConfig(const GPUInfo *gpu_info)
-+{
-+ bool rt;
-+ if (gpu_info == NULL)
-+ {
-+ GPUInfo my_gpu_info;
-+ CollectInfoResult result =
-+ CollectGpuID(&my_gpu_info.gpu.vendor_id, &my_gpu_info.gpu.device_id);
-+ if (result != kCollectInfoSuccess)
-+ {
-+ LOG(ERROR) << "Fail to identify GPU\n";
-+ DisableGPUInfoValidation();
-+ rt = true;
-+ }
-+ else
-+ {
-+ rt = SetGPUInfo(my_gpu_info);
-+ }
-+ }
-+ else
-+ {
-+ rt = SetGPUInfo(*gpu_info);
-+ }
-+ set_os(GetCurrentOS());
-+ if (os() == kOsUnknown)
-+ {
-+ LOG(ERROR) << "Unknown OS\n";
-+ rt = false;
- }
-- } else {
-- rt = SetGPUInfo(*gpu_info);
-- }
-- set_os(GetCurrentOS());
-- if (os() == kOsUnknown) {
-- LOG(ERROR) << "Unknown OS";
-- rt = false;
-- }
- #if defined(NDEBUG)
-- set_build_type(kBuildTypeRelease);
-+ set_build_type(kBuildTypeRelease);
- #else
-- set_build_type(kBuildTypeDebug);
-+ set_build_type(kBuildTypeDebug);
- #endif
-- return rt;
-+ return rt;
- }
-
- // static
-@@ -295,21 +488,5 @@ bool GPUTestBotConfig::CurrentConfigMatc
+@@ -295,21 +480,5 @@ bool GPUTestBotConfig::CurrentConfigMatc
return false;
}
@@ -842,9 +777,9 @@ diff -rupN gpu_test_expectations_reverted/gpu_test_expectations_parser.h gpu_tes
const std::vector<std::string>& GetErrorMessages() const;
diff -rupN gpu_test_expectations_reverted/HowToMakeChanges.md gpu_test_expectations/HowToMakeChanges.md
--- gpu_test_expectations_reverted/HowToMakeChanges.md 1969-12-31 19:00:00.000000000 -0500
-+++ gpu_test_expectations/HowToMakeChanges.md 2016-09-09 16:27:56.575809921 -0400
++++ gpu_test_expectations/HowToMakeChanges.md 2016-08-22 15:52:38.098728514 -0400
@@ -0,0 +1,22 @@
-+Because the ```gpu_test_expectations``` directory is based on parts of Chromium's ```gpu/config```
++Because the ```gpu_test_expectations``` directory is based on parts of Chromium's ```gpu/config``
+directory, we want to keep a patch of the changes added to make it compile with ANGLE. This
+will allow us to merge Chromium changes easily in our ```gpu_test_expectations```.
+
diff --git a/gfx/angle/src/tests/third_party/gpu_test_expectations/gpu_test_config.cc b/gfx/angle/src/tests/third_party/gpu_test_expectations/gpu_test_config.cc
index f0bf6f063..84558e3e9 100755
--- a/gfx/angle/src/tests/third_party/gpu_test_expectations/gpu_test_config.cc
+++ b/gfx/angle/src/tests/third_party/gpu_test_expectations/gpu_test_config.cc
@@ -430,41 +430,33 @@ bool GPUTestBotConfig::Matches(const std::string& config_data) const {
return Matches(config);
}
-bool GPUTestBotConfig::LoadCurrentConfig(const GPUInfo *gpu_info)
-{
- bool rt;
- if (gpu_info == NULL)
- {
- GPUInfo my_gpu_info;
- CollectInfoResult result =
- CollectGpuID(&my_gpu_info.gpu.vendor_id, &my_gpu_info.gpu.device_id);
- if (result != kCollectInfoSuccess)
- {
- LOG(ERROR) << "Fail to identify GPU\n";
- DisableGPUInfoValidation();
- rt = true;
- }
- else
- {
- rt = SetGPUInfo(my_gpu_info);
- }
- }
- else
- {
- rt = SetGPUInfo(*gpu_info);
- }
- set_os(GetCurrentOS());
- if (os() == kOsUnknown)
- {
- LOG(ERROR) << "Unknown OS\n";
- rt = false;
+bool GPUTestBotConfig::LoadCurrentConfig(const GPUInfo* gpu_info) {
+ bool rt;
+ if (gpu_info == NULL) {
+ GPUInfo my_gpu_info;
+ CollectInfoResult result = CollectGpuID(
+ &my_gpu_info.gpu.vendor_id, &my_gpu_info.gpu.device_id);
+ if (result != kCollectInfoSuccess) {
+ LOG(ERROR) << "Fail to identify GPU";
+ DisableGPUInfoValidation();
+ rt = true;
+ } else {
+ rt = SetGPUInfo(my_gpu_info);
}
+ } else {
+ rt = SetGPUInfo(*gpu_info);
+ }
+ set_os(GetCurrentOS());
+ if (os() == kOsUnknown) {
+ LOG(ERROR) << "Unknown OS";
+ rt = false;
+ }
#if defined(NDEBUG)
- set_build_type(kBuildTypeRelease);
+ set_build_type(kBuildTypeRelease);
#else
- set_build_type(kBuildTypeDebug);
+ set_build_type(kBuildTypeDebug);
#endif
- return rt;
+ return rt;
}
// static
diff --git a/gfx/angle/src/third_party/compiler/ArrayBoundsClamper.cpp b/gfx/angle/src/third_party/compiler/ArrayBoundsClamper.cpp
index aadb87553..fa6c8b8d7 100755
--- a/gfx/angle/src/third_party/compiler/ArrayBoundsClamper.cpp
+++ b/gfx/angle/src/third_party/compiler/ArrayBoundsClamper.cpp
@@ -38,11 +38,7 @@ const char* kIntClampBegin = "// BEGIN: Generated code for array bounds clamping
const char* kIntClampEnd = "// END: Generated code for array bounds clamping\n\n";
const char* kIntClampDefinition = "int webgl_int_clamp(int value, int minValue, int maxValue) { return ((value < minValue) ? minValue : ((value > maxValue) ? maxValue : value)); }\n\n";
-namespace sh
-{
-
-namespace
-{
+namespace {
class ArrayBoundsClamperMarker : public TIntermTraverser {
public:
@@ -109,5 +105,3 @@ void ArrayBoundsClamper::OutputClampingFunctionDefinition(TInfoSinkBase& out) co
}
out << kIntClampBegin << kIntClampDefinition << kIntClampEnd;
}
-
-} // namespace sh
diff --git a/gfx/angle/src/third_party/compiler/ArrayBoundsClamper.h b/gfx/angle/src/third_party/compiler/ArrayBoundsClamper.h
index a4c407f76..27917e6ee 100755
--- a/gfx/angle/src/third_party/compiler/ArrayBoundsClamper.h
+++ b/gfx/angle/src/third_party/compiler/ArrayBoundsClamper.h
@@ -29,12 +29,8 @@
#include "compiler/translator/InfoSink.h"
#include "compiler/translator/IntermNode.h"
-namespace sh
-{
-
-class ArrayBoundsClamper
-{
- public:
+class ArrayBoundsClamper {
+public:
ArrayBoundsClamper();
// Must be set before compiling any shaders to ensure consistency
@@ -61,6 +57,4 @@ private:
bool mArrayBoundsClampDefinitionNeeded;
};
-} // namespace sh
-
#endif // THIRD_PARTY_COMPILER_ARRAYBOUNDSCLAMPER_H_
diff --git a/gfx/gl/GLContext.h b/gfx/gl/GLContext.h
index f20563070..c82efceda 100644
--- a/gfx/gl/GLContext.h
+++ b/gfx/gl/GLContext.h
@@ -221,6 +221,8 @@ public:
return false;
}
+ virtual void GetWSIInfo(nsCString* const out) const = 0;
+
/**
* Return true if we are running on a OpenGL core profile context
*/
diff --git a/gfx/gl/GLContextCGL.h b/gfx/gl/GLContextCGL.h
index 12da90aee..1a29f3d15 100644
--- a/gfx/gl/GLContextCGL.h
+++ b/gfx/gl/GLContextCGL.h
@@ -58,6 +58,8 @@ public:
virtual bool SupportsRobustness() const override { return false; }
virtual bool SwapBuffers() override;
+
+ virtual void GetWSIInfo(nsCString* const out) const override;
};
} // namespace gl
diff --git a/gfx/gl/GLContextEAGL.h b/gfx/gl/GLContextEAGL.h
index 86e9a5b98..df25d0f1e 100644
--- a/gfx/gl/GLContextEAGL.h
+++ b/gfx/gl/GLContextEAGL.h
@@ -55,6 +55,8 @@ public:
virtual bool SwapBuffers() override;
+ virtual void GetWSIInfo(nsCString* const out) const override;
+
virtual GLuint GetDefaultFramebuffer() override {
return mBackbufferFB;
}
diff --git a/gfx/gl/GLContextEGL.h b/gfx/gl/GLContextEGL.h
index 9755ecfe7..64b9b13fb 100644
--- a/gfx/gl/GLContextEGL.h
+++ b/gfx/gl/GLContextEGL.h
@@ -89,6 +89,8 @@ public:
virtual bool SwapBuffers() override;
+ virtual void GetWSIInfo(nsCString* const out) const override;
+
// hold a reference to the given surface
// for the lifetime of this context.
void HoldSurface(gfxASurface* aSurf);
diff --git a/gfx/gl/GLContextGLX.h b/gfx/gl/GLContextGLX.h
index ca476baec..1f2cee08d 100644
--- a/gfx/gl/GLContextGLX.h
+++ b/gfx/gl/GLContextGLX.h
@@ -59,6 +59,8 @@ public:
virtual bool SwapBuffers() override;
+ virtual void GetWSIInfo(nsCString* const out) const override;
+
// Overrides the current GLXDrawable backing the context and makes the
// context current.
bool OverrideDrawable(GLXDrawable drawable);
diff --git a/gfx/gl/GLContextProviderCGL.mm b/gfx/gl/GLContextProviderCGL.mm
index 0b8add435..ceab3046c 100644
--- a/gfx/gl/GLContextProviderCGL.mm
+++ b/gfx/gl/GLContextProviderCGL.mm
@@ -166,6 +166,11 @@ GLContextCGL::SwapBuffers()
return true;
}
+void
+GLContextCGL::GetWSIInfo(nsCString* const out) const
+{
+ out->AppendLiteral("CGL");
+}
already_AddRefed<GLContext>
GLContextProviderCGL::CreateWrappingExisting(void*, void*)
diff --git a/gfx/gl/GLContextProviderEAGL.mm b/gfx/gl/GLContextProviderEAGL.mm
index 784a3e29e..507616e2f 100644
--- a/gfx/gl/GLContextProviderEAGL.mm
+++ b/gfx/gl/GLContextProviderEAGL.mm
@@ -155,6 +155,11 @@ GLContextEAGL::SwapBuffers()
return true;
}
+void
+GLContextEAGL::GetWSIInfo(nsCString* const out) const
+{
+ out->AppendLiteral("EAGL");
+}
already_AddRefed<GLContext>
GLContextProviderEAGL::CreateWrappingExisting(void*, void*)
diff --git a/gfx/gl/GLContextProviderEGL.cpp b/gfx/gl/GLContextProviderEGL.cpp
index 098662200..7979f3bf0 100644
--- a/gfx/gl/GLContextProviderEGL.cpp
+++ b/gfx/gl/GLContextProviderEGL.cpp
@@ -418,6 +418,24 @@ GLContextEGL::SwapBuffers()
}
}
+void
+GLContextEGL::GetWSIInfo(nsCString* const out) const
+{
+ out->AppendLiteral("EGL_VENDOR: ");
+ out->Append((const char*)sEGLLibrary.fQueryString(EGL_DISPLAY(), LOCAL_EGL_VENDOR));
+
+ out->AppendLiteral("\nEGL_VERSION: ");
+ out->Append((const char*)sEGLLibrary.fQueryString(EGL_DISPLAY(), LOCAL_EGL_VERSION));
+
+ out->AppendLiteral("\nEGL_EXTENSIONS: ");
+ out->Append((const char*)sEGLLibrary.fQueryString(EGL_DISPLAY(), LOCAL_EGL_EXTENSIONS));
+
+#ifndef ANDROID // This query will crash some old android.
+ out->AppendLiteral("\nEGL_EXTENSIONS(nullptr): ");
+ out->Append((const char*)sEGLLibrary.fQueryString(nullptr, LOCAL_EGL_EXTENSIONS));
+#endif
+}
+
// hold a reference to the given surface
// for the lifetime of this context.
void
diff --git a/gfx/gl/GLContextProviderGLX.cpp b/gfx/gl/GLContextProviderGLX.cpp
index d804f95af..5560357e1 100644
--- a/gfx/gl/GLContextProviderGLX.cpp
+++ b/gfx/gl/GLContextProviderGLX.cpp
@@ -994,6 +994,27 @@ GLContextGLX::SwapBuffers()
return true;
}
+void
+GLContextGLX::GetWSIInfo(nsCString* const out) const
+{
+ Display* display = DefaultXDisplay();
+ int screen = DefaultScreen(display);
+
+ int majorVersion, minorVersion;
+ sGLXLibrary.xQueryVersion(display, &majorVersion, &minorVersion);
+
+ out->Append(nsPrintfCString("GLX %u.%u", majorVersion, minorVersion));
+
+ out->AppendLiteral("\nGLX_VENDOR(client): ");
+ out->Append(sGLXLibrary.xGetClientString(display, LOCAL_GLX_VENDOR));
+
+ out->AppendLiteral("\nGLX_VENDOR(server): ");
+ out->Append(sGLXLibrary.xQueryServerString(display, screen, LOCAL_GLX_VENDOR));
+
+ out->AppendLiteral("\nExtensions: ");
+ out->Append(sGLXLibrary.xQueryExtensionsString(display, screen));
+}
+
bool
GLContextGLX::OverrideDrawable(GLXDrawable drawable)
{
diff --git a/gfx/gl/GLContextProviderWGL.cpp b/gfx/gl/GLContextProviderWGL.cpp
index c9c3f0a54..35957259d 100644
--- a/gfx/gl/GLContextProviderWGL.cpp
+++ b/gfx/gl/GLContextProviderWGL.cpp
@@ -373,6 +373,13 @@ GLContextWGL::SwapBuffers() {
return ::SwapBuffers(mDC);
}
+void
+GLContextWGL::GetWSIInfo(nsCString* const out) const
+{
+ out->AppendLiteral("wglGetExtensionsString: ");
+ out->Append(sWGLLib.fGetExtensionsString(mDC));
+}
+
bool
GLContextWGL::SetupLookupFunction()
{
diff --git a/gfx/gl/GLContextWGL.h b/gfx/gl/GLContextWGL.h
index 9d270bf52..839b10aa7 100644
--- a/gfx/gl/GLContextWGL.h
+++ b/gfx/gl/GLContextWGL.h
@@ -57,6 +57,8 @@ public:
virtual bool SwapBuffers() override;
+ virtual void GetWSIInfo(nsCString* const out) const override;
+
virtual bool SetupLookupFunction() override;
HGLRC Context() { return mContext; }
diff --git a/gfx/thebes/gfxPrefs.h b/gfx/thebes/gfxPrefs.h
index 71485ff22..359a258c7 100644
--- a/gfx/thebes/gfxPrefs.h
+++ b/gfx/thebes/gfxPrefs.h
@@ -436,6 +436,7 @@ private:
DECL_GFX_PREF(Live, "image.decode-immediately.enabled", ImageDecodeImmediatelyEnabled, bool, false);
DECL_GFX_PREF(Live, "image.downscale-during-decode.enabled", ImageDownscaleDuringDecodeEnabled, bool, true);
DECL_GFX_PREF(Live, "image.infer-src-animation.threshold-ms", ImageInferSrcAnimationThresholdMS, uint32_t, 2000);
+ DECL_GFX_PREF(Once, "image.layerize.always", ImageLayerizeAlways, bool, false);
DECL_GFX_PREF(Once, "image.mem.decode_bytes_at_a_time", ImageMemDecodeBytesAtATime, uint32_t, 200000);
DECL_GFX_PREF(Live, "image.mem.discardable", ImageMemDiscardable, bool, false);
DECL_GFX_PREF(Once, "image.mem.surfacecache.discard_factor", ImageMemSurfaceCacheDiscardFactor, uint32_t, 1);
diff --git a/js/src/jit/BaselineBailouts.cpp b/js/src/jit/BaselineBailouts.cpp
index 3ab722b3d..ad2757ae1 100644
--- a/js/src/jit/BaselineBailouts.cpp
+++ b/js/src/jit/BaselineBailouts.cpp
@@ -419,41 +419,6 @@ struct BaselineStackBuilder
}
};
-// Ensure that all value locations are readable from the SnapshotIterator.
-// Remove RInstructionResults from the JitActivation if the frame got recovered
-// ahead of the bailout.
-class SnapshotIteratorForBailout : public SnapshotIterator
-{
- JitActivation* activation_;
- JitFrameIterator& iter_;
-
- public:
- SnapshotIteratorForBailout(JitActivation* activation, JitFrameIterator& iter)
- : SnapshotIterator(iter, activation->bailoutData()->machineState()),
- activation_(activation),
- iter_(iter)
- {
- MOZ_ASSERT(iter.isBailoutJS());
- }
-
- ~SnapshotIteratorForBailout() {
- // The bailout is complete, we no longer need the recover instruction
- // results.
- activation_->removeIonFrameRecovery(fp_);
- }
-
- // Take previously computed result out of the activation, or compute the
- // results of all recover instructions contained in the snapshot.
- MOZ_MUST_USE bool init(JSContext* cx) {
-
- // Under a bailout, there is no need to invalidate the frame after
- // evaluating the recover instruction, as the invalidation is only
- // needed to cause of the frame which has been introspected.
- MaybeReadFallback recoverBailout(cx, activation_, &iter_, MaybeReadFallback::Fallback_DoNothing);
- return initInstructionResults(recoverBailout);
- }
-};
-
#ifdef DEBUG
static inline bool
IsInlinableFallback(ICFallbackStub* icEntry)
@@ -1476,6 +1441,7 @@ jit::BailoutIonToBaseline(JSContext* cx, JitActivation* activation, JitFrameIter
{
MOZ_ASSERT(bailoutInfo != nullptr);
MOZ_ASSERT(*bailoutInfo == nullptr);
+ MOZ_ASSERT(iter.isBailoutJS());
TraceLoggerThread* logger = TraceLoggerForMainThread(cx->runtime());
TraceLogStopEvent(logger, TraceLogger_IonMonkey);
@@ -1488,6 +1454,12 @@ jit::BailoutIonToBaseline(JSContext* cx, JitActivation* activation, JitFrameIter
activation->removeRematerializedFramesFromDebugger(cx, iter.fp());
});
+ // Always remove the RInstructionResults from the JitActivation, even in
+ // case of failures as the stack frame is going away after the bailout.
+ auto removeIonFrameRecovery = mozilla::MakeScopeExit([&] {
+ activation->removeIonFrameRecovery(iter.jsFrame());
+ });
+
// The caller of the top frame must be one of the following:
// IonJS - Ion calling into Ion.
// BaselineStub - Baseline calling into Ion.
@@ -1561,9 +1533,19 @@ jit::BailoutIonToBaseline(JSContext* cx, JitActivation* activation, JitFrameIter
}
JitSpew(JitSpew_BaselineBailouts, " Incoming frame ptr = %p", builder.startFrame());
- SnapshotIteratorForBailout snapIter(activation, iter);
- if (!snapIter.init(cx))
+ // Under a bailout, there is no need to invalidate the frame after
+ // evaluating the recover instruction, as the invalidation is only needed in
+ // cases where the frame is introspected ahead of the bailout.
+ MaybeReadFallback recoverBailout(cx, activation, &iter, MaybeReadFallback::Fallback_DoNothing);
+
+ // Ensure that all value locations are readable from the SnapshotIterator.
+ // Get the RInstructionResults from the JitActivation if the frame got
+ // recovered ahead of the bailout.
+ SnapshotIterator snapIter(iter, activation->bailoutData()->machineState());
+ if (!snapIter.initInstructionResults(recoverBailout)) {
+ ReportOutOfMemory(cx);
return BAILOUT_RETURN_FATAL_ERROR;
+ }
#ifdef TRACK_SNAPSHOTS
snapIter.spewBailingFrom();
diff --git a/js/src/jit/JitFrameIterator.h b/js/src/jit/JitFrameIterator.h
index 3620badbd..76d04d092 100644
--- a/js/src/jit/JitFrameIterator.h
+++ b/js/src/jit/JitFrameIterator.h
@@ -509,13 +509,13 @@ class SnapshotIterator
return recover_.moreInstructions();
}
- protected:
// Register a vector used for storing the results of the evaluation of
// recover instructions. This vector should be registered before the
// beginning of the iteration. This function is in charge of allocating
// enough space for all instructions results, and return false iff it fails.
MOZ_MUST_USE bool initInstructionResults(MaybeReadFallback& fallback);
+ protected:
// This function is used internally for computing the result of the recover
// instructions.
MOZ_MUST_USE bool computeInstructionResults(JSContext* cx, RInstructionResults* results) const;
diff --git a/js/src/vm/EnvironmentObject.h b/js/src/vm/EnvironmentObject.h
index d457ca839..032286116 100644
--- a/js/src/vm/EnvironmentObject.h
+++ b/js/src/vm/EnvironmentObject.h
@@ -930,6 +930,9 @@ class DebugEnvironments
void mark(JSTracer* trc);
void sweep(JSRuntime* rt);
void finish();
+#ifdef JSGC_HASH_TABLE_CHECKS
+ void checkHashTablesAfterMovingGC(JSRuntime* runtime);
+#endif
// If a live frame has a synthesized entry in missingEnvs, make sure it's not
// collected.
diff --git a/layout/base/nsDisplayList.cpp b/layout/base/nsDisplayList.cpp
index 8035269e3..cb55bb2da 100644
--- a/layout/base/nsDisplayList.cpp
+++ b/layout/base/nsDisplayList.cpp
@@ -3513,6 +3513,11 @@ nsDisplayImageContainer::CanOptimizeToImageLayer(LayerManager* aManager,
return false;
}
+ if (gfxPrefs::ImageLayerizeAlways()) {
+ // If the user decides to trade off quality for performance, so be it!
+ return true;
+ }
+
const int32_t factor = mFrame->PresContext()->AppUnitsPerDevPixel();
const LayoutDeviceRect destRect =
LayoutDeviceRect::FromAppUnits(GetDestRect(), factor);
diff --git a/layout/base/nsLayoutUtils.cpp b/layout/base/nsLayoutUtils.cpp
index 9d8dd81bf..062fbfe15 100644
--- a/layout/base/nsLayoutUtils.cpp
+++ b/layout/base/nsLayoutUtils.cpp
@@ -5057,7 +5057,7 @@ nsLayoutUtils::IntrinsicForAxis(PhysicalAxis aAxis,
NS_PRECONDITION(aFrame->GetParent(),
"IntrinsicForAxis called on frame not in tree");
NS_PRECONDITION(aType == MIN_ISIZE || aType == PREF_ISIZE, "bad type");
- MOZ_ASSERT(aFrame->GetParent()->Type() != LayoutFrameType::GridContainer ||
+ MOZ_ASSERT(aFrame->GetParent()->GetType() != nsGkAtoms::gridContainerFrame ||
aPercentageBasis.isSome(),
"grid layout should always pass a percentage basis");
diff --git a/layout/generic/ReflowInput.cpp b/layout/generic/ReflowInput.cpp
index a8756cea2..bbff77ad4 100644
--- a/layout/generic/ReflowInput.cpp
+++ b/layout/generic/ReflowInput.cpp
@@ -154,11 +154,6 @@ FontSizeInflationListMarginAdjustment(const nsIFrame* aFrame)
return 0;
}
-// NOTE: If we ever want to use SizeComputationInput for a flex item or a
-// grid item, we need to make it take the containing-block block-size as
-// well as the inline-size, since flex items and grid items resolve
-// block-direction percent margins and padding against the
-// containing-block block-size, rather than its inline-size.
SizeComputationInput::SizeComputationInput(nsIFrame *aFrame,
nsRenderingContext *aRenderingContext,
WritingMode aContainingBlockWritingMode,
@@ -167,16 +162,9 @@ SizeComputationInput::SizeComputationInput(nsIFrame *aFrame,
, mRenderingContext(aRenderingContext)
, mWritingMode(aFrame->GetWritingMode())
{
- MOZ_ASSERT(!aFrame->IsFlexOrGridItem(),
- "We're about to resolve percent margin & padding "
- "values against CB inline size, which is incorrect for "
- "flex/grid items. "
- "Additionally for grid items, this path doesn't handle baseline "
- "padding contribution - see SizeComputationInput::InitOffsets");
- LogicalSize cbSize(aContainingBlockWritingMode, aContainingBlockISize,
- aContainingBlockISize);
ReflowInputFlags flags;
- InitOffsets(aContainingBlockWritingMode, cbSize, mFrame->GetType(), flags);
+ InitOffsets(aContainingBlockWritingMode, aContainingBlockISize,
+ mFrame->GetType(), flags);
}
// Initialize a reflow state for a child frame's reflow. Some state
@@ -2132,27 +2120,6 @@ IsSideCaption(nsIFrame* aFrame, const nsStyleDisplay* aStyleDisplay,
captionSide == NS_STYLE_CAPTION_SIDE_RIGHT;
}
-// Flex/grid items resolve block-axis percentage margin & padding against the
-// containing block block-size (also for abs/fixed-pos child frames).
-// For everything else: the CSS21 spec requires that margin and padding
-// percentage values are calculated with respect to the inline-size of the
-// containing block, even for margin & padding in the block axis.
-static LogicalSize
-OffsetPercentBasis(const nsIFrame* aFrame,
- WritingMode aWM,
- const LogicalSize& aContainingBlockSize)
-{
- LogicalSize offsetPercentBasis = aContainingBlockSize;
- if (MOZ_LIKELY(!aFrame->GetParent() ||
- !aFrame->GetParent()->IsFlexOrGridContainer())) {
- offsetPercentBasis.BSize(aWM) = offsetPercentBasis.ISize(aWM);
- } else if (offsetPercentBasis.BSize(aWM) == NS_AUTOHEIGHT) {
- offsetPercentBasis.BSize(aWM) = 0;
- }
-
- return offsetPercentBasis;
-}
-
// XXX refactor this code to have methods for each set of properties
// we are computing: width,height,line-height; margin; offsets
@@ -2173,7 +2140,7 @@ ReflowInput::InitConstraints(nsPresContext* aPresContext,
// height equal to the available space
if (nullptr == mParentReflowInput || mFlags.mDummyParentReflowInput) {
// XXXldb This doesn't mean what it used to!
- InitOffsets(wm, OffsetPercentBasis(mFrame, wm, aContainingBlockSize),
+ InitOffsets(wm, aContainingBlockSize.ISize(wm),
aFrameType, mFlags, aBorder, aPadding);
// Override mComputedMargin since reflow roots start from the
// frame's boundary, which is inside the margin.
@@ -2230,8 +2197,7 @@ ReflowInput::InitConstraints(nsPresContext* aPresContext,
// For calculating positioning offsets, margins, borders and
// padding, we use the writing mode of the containing block
WritingMode cbwm = cbrs->GetWritingMode();
- InitOffsets(cbwm, OffsetPercentBasis(mFrame, cbwm,
- cbSize.ConvertTo(cbwm, wm)),
+ InitOffsets(cbwm, cbSize.ConvertTo(cbwm, wm).ISize(cbwm),
aFrameType, mFlags, aBorder, aPadding);
// For calculating the size of this box, we use its own writing mode
@@ -2505,7 +2471,7 @@ UpdateProp(FrameProperties& aProps,
void
SizeComputationInput::InitOffsets(WritingMode aWM,
- const LogicalSize& aPercentBasis,
+ nscoord aPercentBasis,
nsIAtom* aFrameType,
ReflowInputFlags aFlags,
const nsMargin* aBorder,
@@ -2876,7 +2842,7 @@ ReflowInput::CalcLineHeight(nsIContent* aContent,
bool
SizeComputationInput::ComputeMargin(WritingMode aWM,
- const LogicalSize& aPercentBasis)
+ nscoord aPercentBasis)
{
// SVG text frames have no margin.
if (mFrame->IsSVGText()) {
@@ -2893,17 +2859,17 @@ SizeComputationInput::ComputeMargin(WritingMode aWM,
// (http://dev.w3.org/csswg/css-writing-modes-3/#orthogonal-flows)
LogicalMargin m(aWM);
m.IStart(aWM) = nsLayoutUtils::
- ComputeCBDependentValue(aPercentBasis.ISize(aWM),
+ ComputeCBDependentValue(aPercentBasis,
styleMargin->mMargin.GetIStart(aWM));
m.IEnd(aWM) = nsLayoutUtils::
- ComputeCBDependentValue(aPercentBasis.ISize(aWM),
+ ComputeCBDependentValue(aPercentBasis,
styleMargin->mMargin.GetIEnd(aWM));
m.BStart(aWM) = nsLayoutUtils::
- ComputeCBDependentValue(aPercentBasis.BSize(aWM),
+ ComputeCBDependentValue(aPercentBasis,
styleMargin->mMargin.GetBStart(aWM));
m.BEnd(aWM) = nsLayoutUtils::
- ComputeCBDependentValue(aPercentBasis.BSize(aWM),
+ ComputeCBDependentValue(aPercentBasis,
styleMargin->mMargin.GetBEnd(aWM));
SetComputedLogicalMargin(aWM, m);
@@ -2924,7 +2890,7 @@ SizeComputationInput::ComputeMargin(WritingMode aWM,
bool
SizeComputationInput::ComputePadding(WritingMode aWM,
- const LogicalSize& aPercentBasis,
+ nscoord aPercentBasis,
nsIAtom* aFrameType)
{
// If style can provide us the padding directly, then use it.
@@ -2945,17 +2911,17 @@ SizeComputationInput::ComputePadding(WritingMode aWM,
// clamp negative calc() results to 0
LogicalMargin p(aWM);
p.IStart(aWM) = std::max(0, nsLayoutUtils::
- ComputeCBDependentValue(aPercentBasis.ISize(aWM),
+ ComputeCBDependentValue(aPercentBasis,
stylePadding->mPadding.GetIStart(aWM)));
p.IEnd(aWM) = std::max(0, nsLayoutUtils::
- ComputeCBDependentValue(aPercentBasis.ISize(aWM),
+ ComputeCBDependentValue(aPercentBasis,
stylePadding->mPadding.GetIEnd(aWM)));
p.BStart(aWM) = std::max(0, nsLayoutUtils::
- ComputeCBDependentValue(aPercentBasis.BSize(aWM),
+ ComputeCBDependentValue(aPercentBasis,
stylePadding->mPadding.GetBStart(aWM)));
p.BEnd(aWM) = std::max(0, nsLayoutUtils::
- ComputeCBDependentValue(aPercentBasis.BSize(aWM),
+ ComputeCBDependentValue(aPercentBasis,
stylePadding->mPadding.GetBEnd(aWM)));
SetComputedLogicalPadding(aWM, p);
diff --git a/layout/generic/ReflowInput.h b/layout/generic/ReflowInput.h
index 09c980b72..1d2df6af6 100644
--- a/layout/generic/ReflowInput.h
+++ b/layout/generic/ReflowInput.h
@@ -245,7 +245,7 @@ public:
static void* DisplayInitOffsetsEnter(
nsIFrame* aFrame,
SizeComputationInput* aState,
- const mozilla::LogicalSize& aPercentBasis,
+ nscoord aPercentBasis,
const nsMargin* aBorder,
const nsMargin* aPadding);
static void DisplayInitOffsetsExit(nsIFrame* aFrame,
@@ -260,19 +260,12 @@ private:
*
* @param aWM Writing mode of the containing block
* @param aPercentBasis
- * Logical size in the writing mode of the containing block to use
- * for resolving percentage margin values in the inline and block
- * axes.
- * The inline size is usually the containing block inline-size
- * (width if writing mode is horizontal, and height if vertical).
- * The block size is usually the containing block inline-size, per
- * CSS21 sec 8.3 (read in conjunction with CSS Writing Modes sec
- * 7.2), but may be the containing block block-size, e.g. in CSS3
- * Flexbox and Grid.
+ * Inline size of the containing block (in its own writing mode), to use
+ * for resolving percentage margin values in the inline and block axes.
* @return true if the margin is dependent on the containing block size.
*/
bool ComputeMargin(mozilla::WritingMode aWM,
- const mozilla::LogicalSize& aPercentBasis);
+ nscoord aPercentBasis);
/**
* Computes padding values from the specified padding style information, and
@@ -280,25 +273,18 @@ private:
*
* @param aWM Writing mode of the containing block
* @param aPercentBasis
- * Logical size in the writing mode of the containing block to use
- * for resolving percentage padding values in the inline and block
- * axes.
- * The inline size is usually the containing block inline-size
- * (width if writing mode is horizontal, and height if vertical).
- * The block size is usually the containing block inline-size, per
- * CSS21 sec 8.3 (read in conjunction with CSS Writing Modes sec
- * 7.2), but may be the containing block block-size, e.g. in CSS3
- * Flexbox and Grid.
+ * Inline size of the containing block (in its own writing mode), to use
+ * for resolving percentage padding values in the inline and block axes.
* @return true if the padding is dependent on the containing block size.
*/
bool ComputePadding(mozilla::WritingMode aWM,
- const mozilla::LogicalSize& aPercentBasis,
+ nscoord aPercentBasis,
nsIAtom* aFrameType);
protected:
void InitOffsets(mozilla::WritingMode aWM,
- const mozilla::LogicalSize& aPercentBasis,
+ nscoord aPercentBasis,
nsIAtom* aFrameType,
ReflowInputFlags aFlags,
const nsMargin* aBorder = nullptr,
diff --git a/layout/generic/nsFrame.cpp b/layout/generic/nsFrame.cpp
index 418fa16b7..fa5b24d40 100644
--- a/layout/generic/nsFrame.cpp
+++ b/layout/generic/nsFrame.cpp
@@ -10289,8 +10289,8 @@ DR_init_constraints_cookie::~DR_init_constraints_cookie()
DR_init_offsets_cookie::DR_init_offsets_cookie(
nsIFrame* aFrame,
- SizeComputationInput* aState,
- const LogicalSize& aPercentBasis,
+ SizeComputationInput* aState,
+ nscoord aPercentBasis,
const nsMargin* aMargin,
const nsMargin* aPadding)
: mFrame(aFrame)
@@ -11243,7 +11243,7 @@ ReflowInput::DisplayInitConstraintsExit(nsIFrame* aFrame,
/* static */ void*
SizeComputationInput::DisplayInitOffsetsEnter(nsIFrame* aFrame,
SizeComputationInput* aState,
- const LogicalSize& aPercentBasis,
+ nscoord aPercentBasis,
const nsMargin* aBorder,
const nsMargin* aPadding)
{
@@ -11258,12 +11258,10 @@ SizeComputationInput::DisplayInitOffsetsEnter(nsIFrame* aFrame,
if (treeNode && treeNode->mDisplay) {
DR_state->DisplayFrameTypeInfo(aFrame, treeNode->mIndent);
- char horizPctBasisStr[16];
- char vertPctBasisStr[16];
+ char pctBasisStr[16];
WritingMode wm = aState->GetWritingMode();
- DR_state->PrettyUC(aPercentBasis.ISize(wm), horizPctBasisStr, 16);
- DR_state->PrettyUC(aPercentBasis.BSize(wm), vertPctBasisStr, 16);
- printf("InitOffsets pct_basis=%s,%s", horizPctBasisStr, vertPctBasisStr);
+ DR_state->PrettyUC(aPercentBasis, pctBasisStr, 16);
+ printf("InitOffsets pct_basis=%s", pctBasisStr);
DR_state->PrintMargin("b", aBorder);
DR_state->PrintMargin("p", aPadding);
diff --git a/layout/generic/nsFrame.h b/layout/generic/nsFrame.h
index f996f57d7..af1c95ef2 100644
--- a/layout/generic/nsFrame.h
+++ b/layout/generic/nsFrame.h
@@ -845,7 +845,7 @@ public:
struct DR_init_offsets_cookie {
DR_init_offsets_cookie(nsIFrame* aFrame, mozilla::SizeComputationInput* aState,
- const mozilla::LogicalSize& aPercentBasis,
+ nscoord aPercentBasis,
const nsMargin* aBorder,
const nsMargin* aPadding);
~DR_init_offsets_cookie();
diff --git a/layout/reftests/css-grid/grid-auto-min-sizing-definite-001-ref.html b/layout/reftests/css-grid/grid-auto-min-sizing-definite-001-ref.html
index a0d9180a2..8858b4ea8 100644
--- a/layout/reftests/css-grid/grid-auto-min-sizing-definite-001-ref.html
+++ b/layout/reftests/css-grid/grid-auto-min-sizing-definite-001-ref.html
@@ -62,40 +62,31 @@ b40 {
z-index: 1; position:relative;
}
-w {
- position:absolute;
- background: lime;
- border-width: 1px 0 0 3px;
- border-style: solid;
- height:48px;
- width:75px;
-}
-.v > w {
- border-width: 3px 0 0 1px;
- left:-1px; top:-3px;
- height:53px;
- width:61px;
-}
-.h.r { margin-left:19px; padding: 1px 15px 37px 30px; }
-.v .h > w {
- height:48px;
- width:45px;
-}
-.v.r > w {
- height:53px;
- width:61px;
+.h.r {
+ height: 42px;
+ width: 42px;
+ /* This margin-left is 20% of 98px-wide grid area */
+ margin-left: 19.6px;
+ /* This padding-bottom is 10% of 98px wide grid area */
+ /* This padding-left is 30% of 98px wide grid area */
+ padding: 1px 3px 9.8px 29.4px;
}
-.v .v > w {
- height:41px;
- width:45px;
+.v.r {
+ height: 42px;
+ width: 42px;
+ /* This margin-left is 20% of 54px-wide grid area */
+ margin-left: 10.8px;
+ /* This padding-bottom is 10% of 54px wide grid area */
+ /* This padding-left is 30% of 54px wide grid area */
+ padding: 1px 3px 5.4px 16.2px;
}
.r { position:relative; }
.t6 { width:46px; }
-.t8 { width:118px; }
+.t8 { width:118px; height: 102.5px; }
-xx {
+xx {
display: block;
background: lime;
padding:32px 32px 16px 32px;
@@ -114,7 +105,7 @@ xx {
<div class="grid"><span class="v"><x></x></span></div>
<div class="grid t6"><span class="v bb"><x></x></span></div>
<div class="grid"><span class="v"><x></x></span><span class="v"><x></x></span></div>
-<div class="grid t8"><span class="v r"><w></w><b40></b40></span></div>
+<div class="grid t8"><span class="v r"><b40></b40></span></div>
<div class="grid"><xx class="v"></xx></div>
<div class="grid v"><xx class="h"></xx></div>
diff --git a/layout/reftests/css-grid/grid-item-sizing-percent-001-ref.html b/layout/reftests/css-grid/grid-item-sizing-percent-001-ref.html
index 3a7f2d6bb..4996f8b9c 100644
--- a/layout/reftests/css-grid/grid-item-sizing-percent-001-ref.html
+++ b/layout/reftests/css-grid/grid-item-sizing-percent-001-ref.html
@@ -30,8 +30,8 @@ body,html { color:black; background:white; font-size:16px; padding:0; margin:0;
}
.p { padding:2px 3px; }
.m { margin:2px 3px; }
-.c1.p,.c2.p { padding:5px 9px; }
-.c1.m,.c2.m { margin:5px 9px; }
+.c1.p,.c2.p { padding:6px 9px; }
+.c1.m,.c2.m { margin:6px 9px; }
.b { border:solid black; }
#t1 { width:50px; height: 20px; }
diff --git a/layout/reftests/css-grid/grid-item-sizing-percent-001.html b/layout/reftests/css-grid/grid-item-sizing-percent-001.html
index cc5948968..960247592 100644
--- a/layout/reftests/css-grid/grid-item-sizing-percent-001.html
+++ b/layout/reftests/css-grid/grid-item-sizing-percent-001.html
@@ -48,8 +48,8 @@ body,html { color:black; background:white; font-size:16px; padding:0; margin:0;
box-sizing: border-box;
}
-.p { padding:10% 6%; }
-.m { margin:10% 6%; }
+.p { padding:4% 6%; }
+.m { margin:4% 6%; }
.b { border:solid black; }
</style>
diff --git a/layout/reftests/css-grid/grid-item-sizing-px-001.html b/layout/reftests/css-grid/grid-item-sizing-px-001.html
index a004365fc..7e58d831d 100644
--- a/layout/reftests/css-grid/grid-item-sizing-px-001.html
+++ b/layout/reftests/css-grid/grid-item-sizing-px-001.html
@@ -46,8 +46,8 @@ body,html { color:black; background:white; font-size:16px; padding:0; margin:0;
.p { padding:2px 3px; }
.m { margin:2px 3px; }
-.c1.p,.c2.p { padding:5px 9px; }
-.c1.m,.c2.m { margin:5px 9px; }
+.c1.p,.c2.p { padding:6px 9px; }
+.c1.m,.c2.m { margin:6px 9px; }
.b { border:solid black; }
</style>
diff --git a/layout/reftests/css-grid/reftest.list b/layout/reftests/css-grid/reftest.list
index 093e2faee..c2ee57c1a 100644
--- a/layout/reftests/css-grid/reftest.list
+++ b/layout/reftests/css-grid/reftest.list
@@ -45,7 +45,7 @@ skip-if(Android) fuzzy-if(winWidget,1,32) == grid-placement-auto-implicit-001.ht
== vrl-grid-placement-auto-row-sparse-001.html vrl-grid-placement-auto-row-sparse-001-ref.html
== grid-relpos-items-001.html grid-relpos-items-001-ref.html
== grid-item-sizing-percent-001.html grid-item-sizing-percent-001-ref.html
-== grid-item-sizing-percent-002.html grid-item-sizing-percent-002-ref.html
+fails == grid-item-sizing-percent-002.html grid-item-sizing-percent-002-ref.html # bug 1434397
== grid-item-sizing-percent-003.html grid-item-sizing-percent-003-ref.html
== grid-item-sizing-percent-004.html grid-item-sizing-percent-004-ref.html
== grid-item-sizing-px-001.html grid-item-sizing-percent-001-ref.html
diff --git a/layout/reftests/w3c-css/submitted/flexbox/flexbox-mbp-horiz-004-ref.xhtml b/layout/reftests/w3c-css/submitted/flexbox/flexbox-mbp-horiz-004-ref.xhtml
index 00db4823e..beefa0abf 100644
--- a/layout/reftests/w3c-css/submitted/flexbox/flexbox-mbp-horiz-004-ref.xhtml
+++ b/layout/reftests/w3c-css/submitted/flexbox/flexbox-mbp-horiz-004-ref.xhtml
@@ -4,8 +4,7 @@
http://creativecommons.org/publicdomain/zero/1.0/
-->
<!-- Reference case - identical to the testcase, but with with the flex items'
- vertical margin and padding values set to 0 by default, and then set to
- specific pixel values for the items that have a 50px percent-basis.
+ margin and padding values set to explicit pixel values.
-->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
@@ -21,27 +20,10 @@
}
div.height50 { height: 50px; }
- .marginA { margin: 0 8% 0 4%; }
- .marginB { margin: 0 10% 0 14%; }
- .paddingA { padding: 0 6% 0 2%; }
- .paddingB { padding: 0 8% 0 12%; }
-
- div.height50 > .marginA {
- margin-top: 5px;
- margin-bottom: 3px;
- }
- div.height50 > .marginB {
- margin-top: 4px;
- margin-bottom: 6px;
- }
- div.height50 > .paddingA {
- padding-top: 4px;
- padding-bottom: 2px;
- }
- div.height50 > .paddingB {
- padding-top: 3px;
- padding-bottom: 5px;
- }
+ .marginA { margin: 20px 16px 12px 8px; }
+ .marginB { margin: 16px 20px 24px 28px; }
+ .paddingA { padding: 16px 12px 8px 4px; }
+ .paddingB { padding: 12px 16px 20px 24px; }
div.child1 {
flex: none;
diff --git a/layout/reftests/w3c-css/submitted/flexbox/flexbox-mbp-horiz-004.xhtml b/layout/reftests/w3c-css/submitted/flexbox/flexbox-mbp-horiz-004.xhtml
index 545e54f71..b513253fd 100644
--- a/layout/reftests/w3c-css/submitted/flexbox/flexbox-mbp-horiz-004.xhtml
+++ b/layout/reftests/w3c-css/submitted/flexbox/flexbox-mbp-horiz-004.xhtml
@@ -3,19 +3,17 @@
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
-<!-- Testcase with percent-valued padding and/or margin on flex items. The spec
- says that percentage values on padding/margin-top and -bottom should be
- resolved against the flex container's height (not its width, as would
- be the case in a block).
+<!-- Testcase with percent-valued padding and/or margin on flex items.
+ The spec allows these to be resolved against the flex container's
+ inline size (regardless of which axis the percent padding/margin is in).
-->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>CSS Test: Testing percent-valued padding and margin on flex items</title>
<link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"/>
- <link rel="help" href="http://www.w3.org/TR/css-flexbox-1/#layout-algorithm"/>
+ <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#item-margins"/>
<link rel="match" href="flexbox-mbp-horiz-004-ref.xhtml"/>
<style>
- div { border: 0; }
div.flexbox {
width: 200px;
display: flex;
@@ -52,8 +50,9 @@
</style>
</head>
<body>
- <!-- Flex container is auto-height - vertical margin and padding should
- resolve to 0, since they don't have anything to resolve % against. -->
+ <!-- Flex container is auto-height - this shouldn't impact percent
+ margin/padding resolution, since they resolve against container's
+ inline-size, i.e. its width in this case. -->
<div class="flexbox"
><div class="child1 paddingA"><div class="filler"/></div
><div class="child2 paddingB"><div class="filler"/></div
@@ -61,8 +60,9 @@
><div class="child2 marginB"></div
></div>
- <!-- Flex container has height: 50px - vertical margin and padding should
- resolve % values against that. -->
+ <!-- Flex container has height: 50px - again, this shouldn't impact percent
+ margin/padding resolution, since they resolve against container's
+ inline-size, i.e. its width in this case. -->
<div class="flexbox height50"
><div class="child1 paddingA"><div class="filler"/></div
><div class="child2 paddingB"><div class="filler"/></div
diff --git a/layout/svg/SVGFEImageFrame.cpp b/layout/svg/SVGFEImageFrame.cpp
index 185096a93..b1f98c421 100644
--- a/layout/svg/SVGFEImageFrame.cpp
+++ b/layout/svg/SVGFEImageFrame.cpp
@@ -107,6 +107,12 @@ SVGFEImageFrame::Init(nsIContent* aContent,
nsFrame::Init(aContent, aParent, aPrevInFlow);
// We assume that feImage's are always visible.
+ // This call must happen before the FrameCreated. This is because the
+ // primary frame pointer on our content node isn't set until after this
+ // function ends, so there is no way for the resulting OnVisibilityChange
+ // notification to get a frame. FrameCreated has a workaround for this in
+ // that it passes our frame around so it can be accessed. OnVisibilityChange
+ // doesn't have that workaround.
IncApproximateVisibleCount();
nsCOMPtr<nsIImageLoadingContent> imageLoader =
diff --git a/layout/svg/nsSVGImageFrame.cpp b/layout/svg/nsSVGImageFrame.cpp
index c0a7f9419..2d6f75d26 100644
--- a/layout/svg/nsSVGImageFrame.cpp
+++ b/layout/svg/nsSVGImageFrame.cpp
@@ -159,6 +159,12 @@ nsSVGImageFrame::Init(nsIContent* aContent,
if (GetStateBits() & NS_FRAME_IS_NONDISPLAY) {
// Non-display frames are likely to be patterns, masks or the like.
// Treat them as always visible.
+ // This call must happen before the FrameCreated. This is because the
+ // primary frame pointer on our content node isn't set until after this
+ // function ends, so there is no way for the resulting OnVisibilityChange
+ // notification to get a frame. FrameCreated has a workaround for this in
+ // that it passes our frame around so it can be accessed. OnVisibilityChange
+ // doesn't have that workaround.
IncApproximateVisibleCount();
}
diff --git a/media/libstagefright/binding/Index.cpp b/media/libstagefright/binding/Index.cpp
index 9d6ab5028..eb039b5d6 100644
--- a/media/libstagefright/binding/Index.cpp
+++ b/media/libstagefright/binding/Index.cpp
@@ -143,6 +143,11 @@ already_AddRefed<MediaRawData> SampleIterator::GetNext()
writer->mCrypto.mValid = true;
writer->mCrypto.mIVSize = ivSize;
+ CencSampleEncryptionInfoEntry* sampleInfo = GetSampleEncryptionEntry();
+ if (sampleInfo) {
+ writer->mCrypto.mKeyId.AppendElements(sampleInfo->mKeyId);
+ }
+
if (!reader.ReadArray(writer->mCrypto.mIV, ivSize)) {
return nullptr;
}
@@ -170,6 +175,65 @@ already_AddRefed<MediaRawData> SampleIterator::GetNext()
return sample.forget();
}
+CencSampleEncryptionInfoEntry* SampleIterator::GetSampleEncryptionEntry()
+{
+ nsTArray<Moof>& moofs = mIndex->mMoofParser->Moofs();
+ Moof* currentMoof = &moofs[mCurrentMoof];
+ SampleToGroupEntry* sampleToGroupEntry = nullptr;
+
+ // Default to using the sample to group entries for the fragment, otherwise
+ // fall back to the sample to group entries for the track.
+ nsTArray<SampleToGroupEntry>* sampleToGroupEntries =
+ currentMoof->mFragmentSampleToGroupEntries.Length() != 0
+ ? &currentMoof->mFragmentSampleToGroupEntries
+ : &mIndex->mMoofParser->mTrackSampleToGroupEntries;
+
+ uint32_t seen = 0;
+
+ for (SampleToGroupEntry& entry : *sampleToGroupEntries) {
+ if (seen + entry.mSampleCount > mCurrentSample) {
+ sampleToGroupEntry = &entry;
+ break;
+ }
+ seen += entry.mSampleCount;
+ }
+
+ // ISO-14496-12 Section 8.9.2.3 and 8.9.4 : group description index
+ // (1) ranges from 1 to the number of sample group entries in the track
+ // level SampleGroupDescription Box, or (2) takes the value 0 to
+ // indicate that this sample is a member of no group, in this case, the
+ // sample is associated with the default values specified in
+ // TrackEncryption Box, or (3) starts at 0x10001, i.e. the index value
+ // 1, with the value 1 in the top 16 bits, to reference fragment-local
+ // SampleGroupDescription Box.
+
+ // According to the spec, ISO-14496-12, the sum of the sample counts in this
+ // box should be equal to the total number of samples, and, if less, the
+ // reader should behave as if an extra SampleToGroupEntry existed, with
+ // groupDescriptionIndex 0.
+
+ if (!sampleToGroupEntry || sampleToGroupEntry->mGroupDescriptionIndex == 0) {
+ return nullptr;
+ }
+
+ nsTArray<CencSampleEncryptionInfoEntry>* entries =
+ &mIndex->mMoofParser->mTrackSampleEncryptionInfoEntries;
+
+ uint32_t groupIndex = sampleToGroupEntry->mGroupDescriptionIndex;
+
+ // If the first bit is set to a one, then we should use the sample group
+ // descriptions from the fragment.
+ if (groupIndex > SampleToGroupEntry::kFragmentGroupDescriptionIndexBase) {
+ groupIndex -= SampleToGroupEntry::kFragmentGroupDescriptionIndexBase;
+ entries = &currentMoof->mFragmentSampleEncryptionInfoEntries;
+ }
+
+ // The group_index is one based.
+ return groupIndex > entries->Length()
+ ? nullptr
+ : &entries->ElementAt(groupIndex - 1);
+}
+
Sample* SampleIterator::Get()
{
if (!mIndex->mMoofParser) {
diff --git a/media/libstagefright/binding/MoofParser.cpp b/media/libstagefright/binding/MoofParser.cpp
index ced054282..771be3428 100644
--- a/media/libstagefright/binding/MoofParser.cpp
+++ b/media/libstagefright/binding/MoofParser.cpp
@@ -27,6 +27,8 @@ namespace mp4_demuxer
using namespace stagefright;
using namespace mozilla;
+const uint32_t kKeyIdSize = 16;
+
bool
MoofParser::RebuildFragmentedIndex(const MediaByteRangeSet& aByteRanges)
{
@@ -330,6 +332,18 @@ MoofParser::ParseStbl(Box& aBox)
for (Box box = aBox.FirstChild(); box.IsAvailable(); box = box.Next()) {
if (box.IsType("stsd")) {
ParseStsd(box);
+ } else if (box.IsType("sgpd")) {
+ Sgpd sgpd(box);
+ if (sgpd.IsValid() && sgpd.mGroupingType == "seig") {
+ mTrackSampleEncryptionInfoEntries.Clear();
+ mTrackSampleEncryptionInfoEntries.AppendElements(sgpd.mEntries);
+ }
+ } else if (box.IsType("sbgp")) {
+ Sbgp sbgp(box);
+ if (sbgp.IsValid() && sbgp.mGroupingType == "seig") {
+ mTrackSampleToGroupEntries.Clear();
+ mTrackSampleToGroupEntries.AppendElements(sbgp.mEntries);
+ }
}
}
}
@@ -495,12 +509,25 @@ Moof::ParseTraf(Box& aBox, Trex& aTrex, Mvhd& aMvhd, Mdhd& aMdhd, Edts& aEdts, S
MOZ_ASSERT(aDecodeTime);
Tfhd tfhd(aTrex);
Tfdt tfdt;
+
for (Box box = aBox.FirstChild(); box.IsAvailable(); box = box.Next()) {
if (box.IsType("tfhd")) {
tfhd = Tfhd(box, aTrex);
} else if (!aTrex.mTrackId || tfhd.mTrackId == aTrex.mTrackId) {
if (box.IsType("tfdt")) {
tfdt = Tfdt(box);
+ } else if (box.IsType("sgpd")) {
+ Sgpd sgpd(box);
+ if (sgpd.IsValid() && sgpd.mGroupingType == "seig") {
+ mFragmentSampleEncryptionInfoEntries.Clear();
+ mFragmentSampleEncryptionInfoEntries.AppendElements(sgpd.mEntries);
+ }
+ } else if (box.IsType("sbgp")) {
+ Sbgp sbgp(box);
+ if (sbgp.IsValid() && sbgp.mGroupingType == "seig") {
+ mFragmentSampleToGroupEntries.Clear();
+ mFragmentSampleToGroupEntries.AppendElements(sbgp.mEntries);
+ }
} else if (box.IsType("saiz")) {
mSaizs.AppendElement(Saiz(box, aSinf.mDefaultEncryptionType));
} else if (box.IsType("saio")) {
@@ -550,14 +577,20 @@ Moof::ParseTrun(Box& aBox, Tfhd& aTfhd, Mvhd& aMvhd, Mdhd& aMdhd, Edts& aEdts, u
LOG(Moof, "Incomplete Box (missing flags)");
return false;
}
- uint32_t flags = reader->ReadU32();
+ uint32_t flags;
+ if (!reader->ReadU32(flags)) {
+ return false;
+ }
uint8_t version = flags >> 24;
if (!reader->CanReadType<uint32_t>()) {
LOG(Moof, "Incomplete Box (missing sampleCount)");
return false;
}
- uint32_t sampleCount = reader->ReadU32();
+ uint32_t sampleCount;
+ if (!reader->ReadU32(sampleCount)) {
+ return false;
+ }
if (sampleCount == 0) {
return true;
}
@@ -577,9 +610,21 @@ Moof::ParseTrun(Box& aBox, Tfhd& aTfhd, Mvhd& aMvhd, Mdhd& aMdhd, Edts& aEdts, u
return false;
}
- uint64_t offset = aTfhd.mBaseDataOffset + (flags & 1 ? reader->ReadU32() : 0);
- uint32_t firstSampleFlags =
- flags & 4 ? reader->ReadU32() : aTfhd.mDefaultSampleFlags;
+ uint64_t offset = aTfhd.mBaseDataOffset;
+ if (flags & 1) {
+ uint32_t baseOffset;
+ if (!reader->ReadU32(baseOffset)) {
+ return false;
+ }
+ offset += baseOffset;
+ }
+ uint32_t firstSampleFlags = aTfhd.mDefaultSampleFlags;
+ if (flags & 4) {
+ if (!reader->ReadU32(firstSampleFlags)) {
+ return false;
+ }
+ }
+
uint64_t decodeTime = *aDecodeTime;
nsTArray<Interval<Microseconds>> timeRanges;
@@ -589,16 +634,29 @@ Moof::ParseTrun(Box& aBox, Tfhd& aTfhd, Mvhd& aMvhd, Mdhd& aMdhd, Edts& aEdts, u
}
for (size_t i = 0; i < sampleCount; i++) {
- uint32_t sampleDuration =
- flags & 0x100 ? reader->ReadU32() : aTfhd.mDefaultSampleDuration;
- uint32_t sampleSize =
- flags & 0x200 ? reader->ReadU32() : aTfhd.mDefaultSampleSize;
- uint32_t sampleFlags =
- flags & 0x400 ? reader->ReadU32()
- : i ? aTfhd.mDefaultSampleFlags : firstSampleFlags;
+ uint32_t sampleDuration = aTfhd.mDefaultSampleDuration;
+ if (flags & 0x100) {
+ if (!reader->ReadU32(sampleDuration)) {
+ return false;
+ }
+ }
+ uint32_t sampleSize = aTfhd.mDefaultSampleSize;
+ if (flags & 0x200) {
+ if (!reader->ReadU32(sampleSize)) {
+ return false;
+ }
+ }
+ uint32_t sampleFlags = i ? aTfhd.mDefaultSampleFlags : firstSampleFlags;
+ if (flags & 0x400) {
+ if (!reader->ReadU32(sampleFlags)) {
+ return false;
+ }
+ }
int32_t ctsOffset = 0;
if (flags & 0x800) {
- ctsOffset = reader->Read32();
+ if (!reader->Read32(ctsOffset)) {
+ return false;
+ }
}
Sample sample;
@@ -635,7 +693,10 @@ Tkhd::Tkhd(Box& aBox)
LOG(Tkhd, "Incomplete Box (missing flags)");
return;
}
- uint32_t flags = reader->ReadU32();
+ uint32_t flags;
+ if (!reader->ReadU32(flags)) {
+ return;
+ }
uint8_t version = flags >> 24;
size_t need =
3*(version ? sizeof(int64_t) : sizeof(int32_t)) + 2*sizeof(int32_t);
@@ -645,19 +706,30 @@ Tkhd::Tkhd(Box& aBox)
return;
}
if (version == 0) {
- mCreationTime = reader->ReadU32();
- mModificationTime = reader->ReadU32();
- mTrackId = reader->ReadU32();
- uint32_t reserved = reader->ReadU32();
+ uint32_t createTime, modificationTime, trackId, reserved, duration;
+ if (!reader->ReadU32(createTime) ||
+ !reader->ReadU32(modificationTime) ||
+ !reader->ReadU32(trackId) ||
+ !reader->ReadU32(reserved) ||
+ !reader->ReadU32(duration)) {
+ return;
+ }
NS_ASSERTION(!reserved, "reserved should be 0");
- mDuration = reader->ReadU32();
+ mCreationTime = createTime;
+ mModificationTime = modificationTime;
+ mTrackId = trackId;
+ mDuration = duration;
} else if (version == 1) {
- mCreationTime = reader->ReadU64();
- mModificationTime = reader->ReadU64();
- mTrackId = reader->ReadU32();
- uint32_t reserved = reader->ReadU32();
+ uint32_t trackId, reserved;
+ if (!reader->ReadU64(mCreationTime) ||
+ !reader->ReadU64(mModificationTime) ||
+ !reader->ReadU32(trackId) ||
+ !reader->ReadU32(reserved) ||
+ !reader->ReadU64(mDuration)) {
+ return;
+ }
NS_ASSERTION(!reserved, "reserved should be 0");
- mDuration = reader->ReadU64();
+ mTrackId = trackId;
}
// We don't care about whatever else may be in the box.
mValid = true;
@@ -670,10 +742,13 @@ Mvhd::Mvhd(Box& aBox)
LOG(Mdhd, "Incomplete Box (missing flags)");
return;
}
- uint32_t flags = reader->ReadU32();
+ uint32_t flags;
+ if (!reader->ReadU32(flags)) {
+ return;
+ }
uint8_t version = flags >> 24;
size_t need =
- 3*(version ? sizeof(int64_t) : sizeof(int32_t)) + sizeof(uint32_t);
+ 3 * (version ? sizeof(int64_t) : sizeof(int32_t)) + sizeof(uint32_t);
if (reader->Remaining() < need) {
LOG(Mvhd, "Incomplete Box (have:%lld need:%lld)",
(uint64_t)reader->Remaining(), (uint64_t)need);
@@ -681,15 +756,23 @@ Mvhd::Mvhd(Box& aBox)
}
if (version == 0) {
- mCreationTime = reader->ReadU32();
- mModificationTime = reader->ReadU32();
- mTimescale = reader->ReadU32();
- mDuration = reader->ReadU32();
+ uint32_t createTime, modificationTime, duration;
+ if (!reader->ReadU32(createTime) ||
+ !reader->ReadU32(modificationTime) ||
+ !reader->ReadU32(mTimescale) ||
+ !reader->ReadU32(duration)) {
+ return;
+ }
+ mCreationTime = createTime;
+ mModificationTime = modificationTime;
+ mDuration = duration;
} else if (version == 1) {
- mCreationTime = reader->ReadU64();
- mModificationTime = reader->ReadU64();
- mTimescale = reader->ReadU32();
- mDuration = reader->ReadU64();
+ if (!reader->ReadU64(mCreationTime) ||
+ !reader->ReadU64(mModificationTime) ||
+ !reader->ReadU32(mTimescale) ||
+ !reader->ReadU64(mDuration)) {
+ return;
+ }
} else {
return;
}
@@ -707,18 +790,19 @@ Mdhd::Mdhd(Box& aBox)
Trex::Trex(Box& aBox)
{
BoxReader reader(aBox);
- if (reader->Remaining() < 6*sizeof(uint32_t)) {
+ if (reader->Remaining() < 6 * sizeof(uint32_t)) {
LOG(Trex, "Incomplete Box (have:%lld need:%lld)",
(uint64_t)reader->Remaining(), (uint64_t)6*sizeof(uint32_t));
return;
}
- mFlags = reader->ReadU32();
- mTrackId = reader->ReadU32();
- mDefaultSampleDescriptionIndex = reader->ReadU32();
- mDefaultSampleDuration = reader->ReadU32();
- mDefaultSampleSize = reader->ReadU32();
- mDefaultSampleFlags = reader->ReadU32();
- mValid = true;
+ if (!reader->ReadU32(mFlags) ||
+ !reader->ReadU32(mTrackId) ||
+ !reader->ReadU32(mDefaultSampleDescriptionIndex) ||
+ !reader->ReadU32(mDefaultSampleDuration) ||
+ !reader->ReadU32(mDefaultSampleSize) ||
+ !reader->ReadU32(mDefaultSampleFlags)) {
+ return;
+ }
}
Tfhd::Tfhd(Box& aBox, Trex& aTrex)
@@ -733,7 +817,9 @@ Tfhd::Tfhd(Box& aBox, Trex& aTrex)
LOG(Tfhd, "Incomplete Box (missing flags)");
return;
}
- mFlags = reader->ReadU32();
+ if (!reader->ReadU32(mFlags)) {
+ return;
+ }
size_t need = sizeof(uint32_t) /* trackid */;
uint8_t flag[] = { 1, 2, 8, 0x10, 0x20, 0 };
uint8_t flagSize[] = { sizeof(uint64_t), sizeof(uint32_t), sizeof(uint32_t), sizeof(uint32_t), sizeof(uint32_t) };
@@ -747,20 +833,34 @@ Tfhd::Tfhd(Box& aBox, Trex& aTrex)
(uint64_t)reader->Remaining(), (uint64_t)need);
return;
}
- mTrackId = reader->ReadU32();
- mBaseDataOffset =
- mFlags & 1 ? reader->ReadU64() : aBox.Parent()->Parent()->Offset();
+ if (!reader->ReadU32(mTrackId)) {
+ return;
+ }
+ mBaseDataOffset = aBox.Parent()->Parent()->Offset();
+ if (mFlags & 1) {
+ if (!reader->ReadU64(mBaseDataOffset)) {
+ return;
+ }
+ }
if (mFlags & 2) {
- mDefaultSampleDescriptionIndex = reader->ReadU32();
+ if (!reader->ReadU32(mDefaultSampleDescriptionIndex)) {
+ return;
+ }
}
if (mFlags & 8) {
- mDefaultSampleDuration = reader->ReadU32();
+ if (!reader->ReadU32(mDefaultSampleDuration)) {
+ return;
+ }
}
if (mFlags & 0x10) {
- mDefaultSampleSize = reader->ReadU32();
+ if (!reader->ReadU32(mDefaultSampleSize)) {
+ return;
+ }
}
if (mFlags & 0x20) {
- mDefaultSampleFlags = reader->ReadU32();
+ if (!reader->ReadU32(mDefaultSampleFlags)) {
+ return;
+ }
}
mValid = true;
}
@@ -772,7 +872,10 @@ Tfdt::Tfdt(Box& aBox)
LOG(Tfdt, "Incomplete Box (missing flags)");
return;
}
- uint32_t flags = reader->ReadU32();
+ uint32_t flags;
+ if (!reader->ReadU32(flags)) {
+ return;
+ }
uint8_t version = flags >> 24;
size_t need = version ? sizeof(uint64_t) : sizeof(uint32_t) ;
if (reader->Remaining() < need) {
@@ -781,9 +884,15 @@ Tfdt::Tfdt(Box& aBox)
return;
}
if (version == 0) {
- mBaseMediaDecodeTime = reader->ReadU32();
+ uint32_t baseDecodeTime;
+ if (!reader->ReadU32(baseDecodeTime)) {
+ return;
+ }
+ mBaseMediaDecodeTime = baseDecodeTime;
} else if (version == 1) {
- mBaseMediaDecodeTime = reader->ReadU64();
+ if (!reader->ReadU64(mBaseMediaDecodeTime)) {
+ return;
+ }
}
mValid = true;
}
@@ -802,7 +911,10 @@ Edts::Edts(Box& aBox)
LOG(Edts, "Incomplete Box (missing flags)");
return;
}
- uint32_t flags = reader->ReadU32();
+ uint32_t flags;
+ if (!reader->ReadU32(flags)) {
+ return;
+ }
uint8_t version = flags >> 24;
size_t need =
sizeof(uint32_t) + 2*(version ? sizeof(int64_t) : sizeof(uint32_t));
@@ -812,16 +924,27 @@ Edts::Edts(Box& aBox)
return;
}
bool emptyEntry = false;
- uint32_t entryCount = reader->ReadU32();
+ uint32_t entryCount;
+ if (!reader->ReadU32(entryCount)) {
+ return;
+ }
for (uint32_t i = 0; i < entryCount; i++) {
uint64_t segment_duration;
int64_t media_time;
if (version == 1) {
- segment_duration = reader->ReadU64();
- media_time = reader->Read64();
+ if (!reader->ReadU64(segment_duration) ||
+ !reader->Read64(media_time)) {
+ return;
+ }
} else {
- segment_duration = reader->ReadU32();
- media_time = reader->Read32();
+ uint32_t duration;
+ int32_t time;
+ if (!reader->ReadU32(duration) ||
+ !reader->Read32(time)) {
+ return;
+ }
+ segment_duration = duration;
+ media_time = time;
}
if (media_time == -1 && i) {
LOG(Edts, "Multiple empty edit, not handled");
@@ -834,8 +957,12 @@ Edts::Edts(Box& aBox)
} else {
mMediaStart = media_time;
}
- reader->ReadU32(); // media_rate_integer and media_rate_fraction
+ // media_rate_integer and media_rate_fraction
+ if (!reader->Skip(4)) {
+ return;
+ }
}
+ mValid = true;
}
Saiz::Saiz(Box& aBox, AtomType aDefaultType)
@@ -847,7 +974,10 @@ Saiz::Saiz(Box& aBox, AtomType aDefaultType)
LOG(Saiz, "Incomplete Box (missing flags)");
return;
}
- uint32_t flags = reader->ReadU32();
+ uint32_t flags;
+ if (!reader->ReadU32(flags)) {
+ return;
+ }
uint8_t version = flags >> 24;
size_t need =
((flags & 1) ? 2*sizeof(uint32_t) : 0) + sizeof(uint8_t) + sizeof(uint32_t);
@@ -857,11 +987,19 @@ Saiz::Saiz(Box& aBox, AtomType aDefaultType)
return;
}
if (flags & 1) {
- mAuxInfoType = reader->ReadU32();
- mAuxInfoTypeParameter = reader->ReadU32();
+ uint32_t auxType;
+ if (!reader->ReadU32(auxType) ||
+ !reader->ReadU32(mAuxInfoTypeParameter)) {
+ return;
+ }
+ mAuxInfoType = auxType;
+ }
+ uint8_t defaultSampleInfoSize;
+ uint32_t count;
+ if (!reader->ReadU8(defaultSampleInfoSize) ||
+ !reader->ReadU32(count)) {
+ return;
}
- uint8_t defaultSampleInfoSize = reader->ReadU8();
- uint32_t count = reader->ReadU32();
if (defaultSampleInfoSize) {
if (!mSampleInfoSize.SetLength(count, fallible)) {
LOG(Saiz, "OOM");
@@ -886,19 +1024,29 @@ Saio::Saio(Box& aBox, AtomType aDefaultType)
LOG(Saio, "Incomplete Box (missing flags)");
return;
}
- uint32_t flags = reader->ReadU32();
+ uint32_t flags;
+ if (!reader->ReadU32(flags)) {
+ return;
+ }
uint8_t version = flags >> 24;
- size_t need = ((flags & 1) ? (2*sizeof(uint32_t)) : 0) + sizeof(uint32_t);
+ size_t need = ((flags & 1) ? (2 * sizeof(uint32_t)) : 0) + sizeof(uint32_t);
if (reader->Remaining() < need) {
LOG(Saio, "Incomplete Box (have:%lld need:%lld)",
(uint64_t)reader->Remaining(), (uint64_t)need);
return;
}
if (flags & 1) {
- mAuxInfoType = reader->ReadU32();
- mAuxInfoTypeParameter = reader->ReadU32();
+ uint32_t auxType;
+ if (!reader->ReadU32(auxType) ||
+ !reader->ReadU32(mAuxInfoTypeParameter)) {
+ return;
+ }
+ mAuxInfoType = auxType;
+ }
+ uint32_t count;
+ if (!reader->ReadU32(count)) {
+ return;
}
- size_t count = reader->ReadU32();
need = (version ? sizeof(uint64_t) : sizeof(uint32_t)) * count;
if (reader->Remaining() < need) {
LOG(Saio, "Incomplete Box (have:%lld need:%lld)",
@@ -910,16 +1058,203 @@ Saio::Saio(Box& aBox, AtomType aDefaultType)
return;
}
if (version == 0) {
+ uint32_t offset;
for (size_t i = 0; i < count; i++) {
- MOZ_ALWAYS_TRUE(mOffsets.AppendElement(reader->ReadU32(), fallible));
+ if (!reader->ReadU32(offset)) {
+ return;
+ }
+ MOZ_ALWAYS_TRUE(mOffsets.AppendElement(offset, fallible));
}
} else {
+ uint64_t offset;
for (size_t i = 0; i < count; i++) {
- MOZ_ALWAYS_TRUE(mOffsets.AppendElement(reader->ReadU64(), fallible));
+ if (!reader->ReadU64(offset)) {
+ return;
+ }
+ MOZ_ALWAYS_TRUE(mOffsets.AppendElement(offset, fallible));
+ }
+ }
+ mValid = true;
+}
+
+Sbgp::Sbgp(Box& aBox)
+{
+ BoxReader reader(aBox);
+
+ if (!reader->CanReadType<uint32_t>()) {
+ LOG(Sbgp, "Incomplete Box (missing flags)");
+ return;
+ }
+
+ uint32_t flags;
+ if (!reader->ReadU32(flags)) {
+ return;
+ }
+ const uint8_t version = flags >> 24;
+ flags = flags & 0xffffff;
+
+ // Make sure we have enough bytes to read as far as the count.
+ uint32_t need = (version == 1 ? sizeof(uint32_t) : 0) + sizeof(uint32_t) * 2;
+ if (reader->Remaining() < need) {
+ LOG(Sbgp, "Incomplete Box (have:%lld, need:%lld)",
+ (uint64_t)reader->Remaining(), (uint64_t)need);
+ return;
+ }
+
+ uint32_t groupType;
+ if (!reader->ReadU32(groupType)) {
+ return;
+ }
+ mGroupingType = groupType;
+
+ if (version == 1) {
+ if (reader->ReadU32(mGroupingTypeParam)) {
+ false;
+ }
+ }
+
+ uint32_t count;
+ if (!reader->ReadU32(count)) {
+ return;
+ }
+
+ // Make sure we can read all the entries.
+ need = sizeof(uint32_t) * 2 * count;
+ if (reader->Remaining() < need) {
+ LOG(Sbgp, "Incomplete Box (have:%lld, need:%lld). Failed to read entries",
+ (uint64_t)reader->Remaining(), (uint64_t)need);
+ return;
+ }
+
+ for (uint32_t i = 0; i < count; i++) {
+ uint32_t sampleCount;
+ uint32_t groupDescriptionIndex;
+ if (!reader->ReadU32(sampleCount) ||
+ !reader->ReadU32(groupDescriptionIndex)) {
+ return;
}
+
+ SampleToGroupEntry entry(sampleCount, groupDescriptionIndex);
+ mEntries.AppendElement(entry);
}
+
mValid = true;
}
+Sgpd::Sgpd(Box& aBox)
+{
+ BoxReader reader(aBox);
+
+ if (!reader->CanReadType<uint32_t>()) {
+ LOG(Sgpd, "Incomplete Box (missing flags)");
+ return;
+ }
+
+ uint32_t flags;
+ if (!reader->ReadU32(flags)) {
+ return;
+ }
+ const uint8_t version = flags >> 24;
+ flags = flags & 0xffffff;
+
+ uint32_t need = ((flags & 1) ? sizeof(uint32_t) : 0) + sizeof(uint32_t) * 2;
+ if (reader->Remaining() < need) {
+ LOG(Sgpd, "Incomplete Box (have:%lld need:%lld)",
+ (uint64_t)reader->Remaining(), (uint64_t)need);
+ return;
+ }
+
+ uint32_t groupType;
+ if (!reader->ReadU32(groupType)) {
+ return;
+ }
+ mGroupingType = groupType;
+
+ const uint32_t entrySize = sizeof(uint32_t) + kKeyIdSize;
+ uint32_t defaultLength = 0;
+
+ if (version == 1) {
+ if (!reader->ReadU32(defaultLength)) {
+ return;
+ }
+ if (defaultLength < entrySize && defaultLength != 0) {
+ return;
+ }
+ }
+
+ uint32_t count;
+ if (!reader->ReadU32(count)) {
+ return;
+ }
+
+ // Make sure we have sufficient remaining bytes to read the entries.
+ need =
+ count * (sizeof(uint32_t) * (version == 1 && defaultLength == 0 ? 2 : 1) +
+ kKeyIdSize * sizeof(uint8_t));
+ if (reader->Remaining() < need) {
+ LOG(Sgpd, "Incomplete Box (have:%lld need:%lld). Failed to read entries",
+ (uint64_t)reader->Remaining(), (uint64_t)need);
+ return;
+ }
+ for (uint32_t i = 0; i < count; ++i) {
+ if (version == 1 && defaultLength == 0) {
+ uint32_t descriptionLength;
+ if (!reader->ReadU32(descriptionLength)) {
+ return;
+ }
+ if (descriptionLength < entrySize) {
+ return;
+ }
+ }
+
+ CencSampleEncryptionInfoEntry entry;
+ bool valid = entry.Init(reader);
+ if (!valid) {
+ return;
+ }
+ mEntries.AppendElement(entry);
+ }
+
+ mValid = true;
+}
+
+bool CencSampleEncryptionInfoEntry::Init(BoxReader& aReader)
+{
+ // Skip a reserved byte.
+ uint8_t skip;
+ if (!aReader->ReadU8(skip)) {
+ return false;
+ }
+
+ uint8_t possiblePatternInfo;
+ uint8_t flag;
+ if (!aReader->ReadU8(possiblePatternInfo) ||
+ !aReader->ReadU8(flag) ||
+ !aReader->ReadU8(mIVSize)) {
+ return false;
+ }
+
+ // Read the key id.
+ uint8_t key;
+ for (uint32_t i = 0; i < kKeyIdSize; ++i) {
+ if (!aReader->ReadU8(key)) {
+ return false;
+ }
+ mKeyId.AppendElement(key);
+ }
+
+ mIsEncrypted = flag != 0;
+
+ if (mIsEncrypted) {
+ if (mIVSize != 8 && mIVSize != 16) {
+ return false;
+ }
+ } else if (mIVSize != 0) {
+ return false;
+ }
+
+ return true;
+}
+
#undef LOG
}
diff --git a/media/libstagefright/binding/SinfParser.cpp b/media/libstagefright/binding/SinfParser.cpp
index 5cf3aa553..5f3a2889e 100644
--- a/media/libstagefright/binding/SinfParser.cpp
+++ b/media/libstagefright/binding/SinfParser.cpp
@@ -39,8 +39,13 @@ SinfParser::ParseSchm(Box& aBox)
return;
}
- mozilla::Unused << reader->ReadU32(); // flags -- ignore
- mSinf.mDefaultEncryptionType = reader->ReadU32();
+ uint32_t type;
+ if (!reader->Skip(4) ||
+ !reader->ReadU32(type)) {
+ NS_WARNING("Failed to parse schm data");
+ return;
+ }
+ mSinf.mDefaultEncryptionType = type;
}
void
@@ -62,11 +67,16 @@ SinfParser::ParseTenc(Box& aBox)
return;
}
- mozilla::Unused << reader->ReadU32(); // flags -- ignore
-
- uint32_t isEncrypted = reader->ReadU24();
- mSinf.mDefaultIVSize = reader->ReadU8();
- memcpy(mSinf.mDefaultKeyID, reader->Read(16), 16);
+ uint32_t isEncrypted;
+ const uint8_t* key;
+ if (!reader->Skip(4) || // flags -- ignore
+ !reader->ReadU24(isEncrypted) ||
+ !reader->ReadU8(mSinf.mDefaultIVSize) ||
+ !reader->Read(16, &key)) {
+ NS_WARNING("Failed to parse tenc data");
+ return;
+ }
+ memcpy(mSinf.mDefaultKeyID, key, 16);
}
}
diff --git a/media/libstagefright/binding/include/mp4_demuxer/Box.h b/media/libstagefright/binding/include/mp4_demuxer/Box.h
index f53404a1d..6612f6b49 100644
--- a/media/libstagefright/binding/include/mp4_demuxer/Box.h
+++ b/media/libstagefright/binding/include/mp4_demuxer/Box.h
@@ -12,7 +12,7 @@
#include "MediaResource.h"
#include "mozilla/EndianUtils.h"
#include "mp4_demuxer/AtomType.h"
-#include "mp4_demuxer/ByteReader.h"
+#include "mp4_demuxer/BufferReader.h"
using namespace mozilla;
@@ -73,11 +73,11 @@ public:
, mReader(mBuffer.Elements(), mBuffer.Length())
{
}
- ByteReader* operator->() { return &mReader; }
+ BufferReader* operator->() { return &mReader; }
private:
nsTArray<uint8_t> mBuffer;
- ByteReader mReader;
+ BufferReader mReader;
};
}
diff --git a/media/libstagefright/binding/include/mp4_demuxer/BufferReader.h b/media/libstagefright/binding/include/mp4_demuxer/BufferReader.h
new file mode 100644
index 000000000..160c97fa0
--- /dev/null
+++ b/media/libstagefright/binding/include/mp4_demuxer/BufferReader.h
@@ -0,0 +1,225 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#ifndef BUFFER_READER_H_
+#define BUFFER_READER_H_
+
+#include "mozilla/EndianUtils.h"
+#include "mozilla/Vector.h"
+#include "nsTArray.h"
+#include "MediaData.h"
+
+namespace mp4_demuxer {
+
+class MOZ_RAII BufferReader
+{
+public:
+ BufferReader() : mPtr(nullptr), mRemaining(0) {}
+ explicit BufferReader(const mozilla::Vector<uint8_t>& aData)
+ : mPtr(aData.begin()), mRemaining(aData.length()), mLength(aData.length())
+ {
+ }
+ BufferReader(const uint8_t* aData, size_t aSize)
+ : mPtr(aData), mRemaining(aSize), mLength(aSize)
+ {
+ }
+ template<size_t S>
+ explicit BufferReader(const AutoTArray<uint8_t, S>& aData)
+ : mPtr(aData.Elements()), mRemaining(aData.Length()), mLength(aData.Length())
+ {
+ }
+ explicit BufferReader(const nsTArray<uint8_t>& aData)
+ : mPtr(aData.Elements()), mRemaining(aData.Length()), mLength(aData.Length())
+ {
+ }
+ explicit BufferReader(const mozilla::MediaByteBuffer* aData)
+ : mPtr(aData->Elements()), mRemaining(aData->Length()), mLength(aData->Length())
+ {
+ }
+
+ void SetData(const nsTArray<uint8_t>& aData)
+ {
+ MOZ_ASSERT(!mPtr && !mRemaining);
+ mPtr = aData.Elements();
+ mRemaining = aData.Length();
+ mLength = mRemaining;
+ }
+
+ ~BufferReader()
+ {
+ }
+
+ size_t Offset() const
+ {
+ return mLength - mRemaining;
+ }
+
+ size_t Remaining() const { return mRemaining; }
+
+ bool CanRead8() const { return mRemaining >= 1; }
+
+ bool ReadU8(uint8_t& aU8)
+ {
+ const uint8_t* ptr;
+ if (!Read(1, &ptr)) {
+ NS_WARNING("Failed to read data");
+ return false;
+ }
+ aU8 = *ptr;
+ return true;
+ }
+
+ bool CanRead16() { return mRemaining >= 2; }
+
+ bool ReadU16(uint16_t& u16)
+ {
+ const uint8_t* ptr;
+ if (!Read(2, &ptr)) {
+ NS_WARNING("Failed to read data");
+ return false;
+ }
+ u16 = mozilla::BigEndian::readUint16(ptr);
+ return true;
+ }
+
+ bool CanRead32() { return mRemaining >= 4; }
+
+ bool ReadU32(uint32_t& u32)
+ {
+ const uint8_t* ptr;
+ if (!Read(4, &ptr)) {
+ NS_WARNING("Failed to read data");
+ return false;
+ }
+ u32 = mozilla::BigEndian::readUint32(ptr);
+ return true;
+ }
+
+ bool Read32(int32_t& i32)
+ {
+ const uint8_t* ptr;
+ if (!Read(4, &ptr)) {
+ NS_WARNING("Failed to read data");
+ return 0;
+ }
+ i32 = mozilla::BigEndian::readInt32(ptr);
+ return true;
+ }
+
+ bool ReadU64(uint64_t& u64)
+ {
+ const uint8_t* ptr;
+ if (!Read(8, &ptr)) {
+ NS_WARNING("Failed to read data");
+ return false;
+ }
+ u64 = mozilla::BigEndian::readUint64(ptr);
+ return true;
+ }
+
+ bool Read64(int64_t& i64)
+ {
+ const uint8_t* ptr;
+ if (!Read(8, &ptr)) {
+ NS_WARNING("Failed to read data");
+ return false;
+ }
+ i64 = mozilla::BigEndian::readInt64(ptr);
+ return true;
+ }
+
+ bool ReadU24(uint32_t& u32)
+ {
+ const uint8_t* ptr;
+ if (!Read(3, &ptr)) {
+ NS_WARNING("Failed to read data");
+ return false;
+ }
+ u32 = ptr[0] << 16 | ptr[1] << 8 | ptr[2];
+ return true;
+ }
+
+ bool Skip(size_t aCount)
+ {
+ const uint8_t* ptr;
+ if (!Read(aCount, &ptr)) {
+ NS_WARNING("Failed to skip data");
+ return false;
+ }
+ return true;
+ }
+
+ bool Read(size_t aCount, const uint8_t** aPtr)
+ {
+ if (aCount > mRemaining) {
+ mRemaining = 0;
+ return false;
+ }
+ mRemaining -= aCount;
+
+ *aPtr = mPtr;
+ mPtr += aCount;
+
+ return true;
+ }
+
+ uint32_t Align() const
+ {
+ return 4 - ((intptr_t)mPtr & 3);
+ }
+
+ template <typename T> bool CanReadType() const { return mRemaining >= sizeof(T); }
+
+ template <typename T> T ReadType()
+ {
+ const uint8_t* ptr;
+ if (!Read(sizeof(T), &ptr)) {
+ NS_WARNING("ReadType failed");
+ return 0;
+ }
+ return *reinterpret_cast<const T*>(ptr);
+ }
+
+ template <typename T>
+ MOZ_MUST_USE bool ReadArray(nsTArray<T>& aDest, size_t aLength)
+ {
+ const uint8_t* ptr;
+ if (!Read(aLength * sizeof(T), &ptr)) {
+ NS_WARNING("ReadArray failed");
+ return false;
+ }
+
+ aDest.Clear();
+ aDest.AppendElements(reinterpret_cast<const T*>(ptr), aLength);
+ return true;
+ }
+
+ template <typename T>
+ MOZ_MUST_USE bool ReadArray(FallibleTArray<T>& aDest, size_t aLength)
+ {
+ const uint8_t* ptr;
+ if (!Read(aLength * sizeof(T), &ptr)) {
+ NS_WARNING("ReadArray failed");
+ return false;
+ }
+
+ aDest.Clear();
+ if (!aDest.SetCapacity(aLength, mozilla::fallible)) {
+ return false;
+ }
+ MOZ_ALWAYS_TRUE(aDest.AppendElements(reinterpret_cast<const T*>(ptr),
+ aLength,
+ mozilla::fallible));
+ return true;
+ }
+
+private:
+ const uint8_t* mPtr;
+ size_t mRemaining;
+ size_t mLength;
+};
+
+} // namespace mp4_demuxer
+
+#endif
diff --git a/media/libstagefright/binding/include/mp4_demuxer/ByteReader.h b/media/libstagefright/binding/include/mp4_demuxer/ByteReader.h
index 9c7df04bd..f316daa41 100644
--- a/media/libstagefright/binding/include/mp4_demuxer/ByteReader.h
+++ b/media/libstagefright/binding/include/mp4_demuxer/ByteReader.h
@@ -63,7 +63,7 @@ public:
{
auto ptr = Read(1);
if (!ptr) {
- MOZ_ASSERT(false);
+ NS_WARNING("Failed to read data");
return 0;
}
return *ptr;
@@ -75,7 +75,7 @@ public:
{
auto ptr = Read(2);
if (!ptr) {
- MOZ_ASSERT(false);
+ NS_WARNING("Failed to read data");
return 0;
}
return mozilla::BigEndian::readUint16(ptr);
@@ -85,7 +85,7 @@ public:
{
auto ptr = Read(2);
if (!ptr) {
- MOZ_ASSERT(false);
+ NS_WARNING("Failed to read data");
return 0;
}
return mozilla::LittleEndian::readInt16(ptr);
@@ -95,7 +95,7 @@ public:
{
auto ptr = Read(3);
if (!ptr) {
- MOZ_ASSERT(false);
+ NS_WARNING("Failed to read data");
return 0;
}
return ptr[0] << 16 | ptr[1] << 8 | ptr[2];
@@ -110,7 +110,7 @@ public:
{
auto ptr = Read(3);
if (!ptr) {
- MOZ_ASSERT(false);
+ NS_WARNING("Failed to read data");
return 0;
}
int32_t result = int32_t(ptr[2] << 16 | ptr[1] << 8 | ptr[0]);
@@ -126,7 +126,7 @@ public:
{
auto ptr = Read(4);
if (!ptr) {
- MOZ_ASSERT(false);
+ NS_WARNING("Failed to read data");
return 0;
}
return mozilla::BigEndian::readUint32(ptr);
@@ -136,7 +136,7 @@ public:
{
auto ptr = Read(4);
if (!ptr) {
- MOZ_ASSERT(false);
+ NS_WARNING("Failed to read data");
return 0;
}
return mozilla::BigEndian::readInt32(ptr);
@@ -146,7 +146,7 @@ public:
{
auto ptr = Read(8);
if (!ptr) {
- MOZ_ASSERT(false);
+ NS_WARNING("Failed to read data");
return 0;
}
return mozilla::BigEndian::readUint64(ptr);
@@ -156,7 +156,7 @@ public:
{
auto ptr = Read(8);
if (!ptr) {
- MOZ_ASSERT(false);
+ NS_WARNING("Failed to read data");
return 0;
}
return mozilla::BigEndian::readInt64(ptr);
@@ -192,7 +192,7 @@ public:
{
auto ptr = Peek(1);
if (!ptr) {
- MOZ_ASSERT(false);
+ NS_WARNING("Failed to peek data");
return 0;
}
return *ptr;
@@ -202,7 +202,7 @@ public:
{
auto ptr = Peek(2);
if (!ptr) {
- MOZ_ASSERT(false);
+ NS_WARNING("Failed to peek data");
return 0;
}
return mozilla::BigEndian::readUint16(ptr);
@@ -212,7 +212,7 @@ public:
{
auto ptr = Peek(3);
if (!ptr) {
- MOZ_ASSERT(false);
+ NS_WARNING("Failed to peek data");
return 0;
}
return ptr[0] << 16 | ptr[1] << 8 | ptr[2];
@@ -227,7 +227,7 @@ public:
{
auto ptr = Peek(4);
if (!ptr) {
- MOZ_ASSERT(false);
+ NS_WARNING("Failed to peek data");
return 0;
}
return mozilla::BigEndian::readUint32(ptr);
@@ -237,7 +237,7 @@ public:
{
auto ptr = Peek(4);
if (!ptr) {
- MOZ_ASSERT(false);
+ NS_WARNING("Failed to peek data");
return 0;
}
return mozilla::BigEndian::readInt32(ptr);
@@ -247,7 +247,7 @@ public:
{
auto ptr = Peek(8);
if (!ptr) {
- MOZ_ASSERT(false);
+ NS_WARNING("Failed to peek data");
return 0;
}
return mozilla::BigEndian::readUint64(ptr);
@@ -257,7 +257,7 @@ public:
{
auto ptr = Peek(8);
if (!ptr) {
- MOZ_ASSERT(false);
+ NS_WARNING("Failed to peek data");
return 0;
}
return mozilla::BigEndian::readInt64(ptr);
@@ -274,7 +274,7 @@ public:
const uint8_t* Seek(size_t aOffset)
{
if (aOffset >= mLength) {
- MOZ_ASSERT(false);
+ NS_WARNING("Seek failed");
return nullptr;
}
@@ -301,7 +301,7 @@ public:
{
auto ptr = Read(sizeof(T));
if (!ptr) {
- MOZ_ASSERT(false);
+ NS_WARNING("ReadType failed");
return 0;
}
return *reinterpret_cast<const T*>(ptr);
@@ -312,6 +312,7 @@ public:
{
auto ptr = Read(aLength * sizeof(T));
if (!ptr) {
+ NS_WARNING("ReadArray failed");
return false;
}
@@ -325,6 +326,7 @@ public:
{
auto ptr = Read(aLength * sizeof(T));
if (!ptr) {
+ NS_WARNING("ReadArray failed");
return false;
}
diff --git a/media/libstagefright/binding/include/mp4_demuxer/Index.h b/media/libstagefright/binding/include/mp4_demuxer/Index.h
index d566c9459..ca254f73d 100644
--- a/media/libstagefright/binding/include/mp4_demuxer/Index.h
+++ b/media/libstagefright/binding/include/mp4_demuxer/Index.h
@@ -32,6 +32,9 @@ public:
Microseconds GetNextKeyframeTime();
private:
Sample* Get();
+
+ CencSampleEncryptionInfoEntry* GetSampleEncryptionEntry();
+
void Next();
RefPtr<Index> mIndex;
friend class Index;
diff --git a/media/libstagefright/binding/include/mp4_demuxer/MoofParser.h b/media/libstagefright/binding/include/mp4_demuxer/MoofParser.h
index 814f806fc..bb895555c 100644
--- a/media/libstagefright/binding/include/mp4_demuxer/MoofParser.h
+++ b/media/libstagefright/binding/include/mp4_demuxer/MoofParser.h
@@ -17,6 +17,7 @@ typedef int64_t Microseconds;
class Box;
class BoxContext;
+class BoxReader;
class Moof;
class Mvhd : public Atom
@@ -160,6 +161,53 @@ public:
FallibleTArray<uint64_t> mOffsets;
};
+struct SampleToGroupEntry
+{
+public:
+ static const uint32_t kTrackGroupDescriptionIndexBase = 0;
+ static const uint32_t kFragmentGroupDescriptionIndexBase = 0x10000;
+
+ SampleToGroupEntry(uint32_t aSampleCount, uint32_t aGroupDescriptionIndex)
+ : mSampleCount(aSampleCount)
+ , mGroupDescriptionIndex(aGroupDescriptionIndex)
+ {
+ }
+
+ uint32_t mSampleCount;
+ uint32_t mGroupDescriptionIndex;
+};
+
+class Sbgp final : public Atom // SampleToGroup box.
+{
+public:
+ explicit Sbgp(Box& aBox);
+
+ AtomType mGroupingType;
+ uint32_t mGroupingTypeParam;
+ nsTArray<SampleToGroupEntry> mEntries;
+};
+
+struct CencSampleEncryptionInfoEntry final
+{
+public:
+ CencSampleEncryptionInfoEntry() { }
+
+ bool Init(BoxReader& aReader);
+
+ bool mIsEncrypted = false;
+ uint8_t mIVSize = 0;
+ nsTArray<uint8_t> mKeyId;
+};
+
+class Sgpd final : public Atom // SampleGroupDescription box.
+{
+public:
+ explicit Sgpd(Box& aBox);
+
+ AtomType mGroupingType;
+ nsTArray<CencSampleEncryptionInfoEntry> mEntries;
+};
+
class AuxInfo {
public:
AuxInfo(int64_t aMoofOffset, Saiz& aSaiz, Saio& aSaio);
@@ -182,6 +230,9 @@ public:
Interval<Microseconds> mTimeRange;
FallibleTArray<Sample> mIndex;
+ nsTArray<CencSampleEncryptionInfoEntry> mFragmentSampleEncryptionInfoEntries;
+ nsTArray<SampleToGroupEntry> mFragmentSampleToGroupEntries;
+
nsTArray<Saiz> mSaizs;
nsTArray<Saio> mSaios;
@@ -246,6 +297,10 @@ public:
Tfdt mTfdt;
Edts mEdts;
Sinf mSinf;
+
+ nsTArray<CencSampleEncryptionInfoEntry> mTrackSampleEncryptionInfoEntries;
+ nsTArray<SampleToGroupEntry> mTrackSampleToGroupEntries;
+
nsTArray<Moof>& Moofs() { return mMoofs; }
private:
void ScanForMetadata(mozilla::MediaByteRange& aFtyp,
diff --git a/media/libstagefright/frameworks/av/media/libstagefright/MPEG4Extractor.cpp b/media/libstagefright/frameworks/av/media/libstagefright/MPEG4Extractor.cpp
index e881e0262..5667f04d8 100644
--- a/media/libstagefright/frameworks/av/media/libstagefright/MPEG4Extractor.cpp
+++ b/media/libstagefright/frameworks/av/media/libstagefright/MPEG4Extractor.cpp
@@ -753,7 +753,6 @@ status_t MPEG4Extractor::parseChunk(off64_t *offset, int depth) {
case FOURCC('m', 'o', 'o', 'f'):
case FOURCC('t', 'r', 'a', 'f'):
case FOURCC('m', 'f', 'r', 'a'):
- case FOURCC('u', 'd', 't', 'a'):
case FOURCC('i', 'l', 's', 't'):
case FOURCC('s', 'i', 'n', 'f'):
case FOURCC('s', 'c', 'h', 'i'):
diff --git a/media/libstagefright/moz.build b/media/libstagefright/moz.build
index c6072d840..5a8c9521a 100644
--- a/media/libstagefright/moz.build
+++ b/media/libstagefright/moz.build
@@ -53,6 +53,7 @@ EXPORTS.mp4_demuxer += [
'binding/include/mp4_demuxer/Atom.h',
'binding/include/mp4_demuxer/AtomType.h',
'binding/include/mp4_demuxer/BitReader.h',
+ 'binding/include/mp4_demuxer/BufferReader.h',
'binding/include/mp4_demuxer/BufferStream.h',
'binding/include/mp4_demuxer/ByteReader.h',
'binding/include/mp4_demuxer/ByteWriter.h',
diff --git a/modules/libpref/init/all.js b/modules/libpref/init/all.js
index bee38d6c4..82af963d7 100644
--- a/modules/libpref/init/all.js
+++ b/modules/libpref/init/all.js
@@ -1435,11 +1435,7 @@ pref("network.http.response.timeout", 300);
// Limit the absolute number of http connections.
// Note: the socket transport service will clamp the number below this if the OS
// cannot allocate that many FDs
-#ifdef ANDROID
pref("network.http.max-connections", 256);
-#else
-pref("network.http.max-connections", 900);
-#endif
// If NOT connecting via a proxy, then
// a new connection will only be attempted if the number of active persistent
@@ -1487,13 +1483,13 @@ pref("network.http.redirection-limit", 20);
pref("network.http.accept-encoding", "gzip, deflate");
pref("network.http.accept-encoding.secure", "gzip, deflate, br");
-pref("network.http.pipelining" , false);
+pref("network.http.pipelining" , true);
pref("network.http.pipelining.ssl" , false); // disable pipelining over SSL
pref("network.http.pipelining.abtest", false);
pref("network.http.proxy.pipelining", false);
// Max number of requests in the pipeline
-pref("network.http.pipelining.maxrequests" , 32);
+pref("network.http.pipelining.maxrequests" , 16);
// An optimistic request is one pipelined when policy might allow a new
// connection instead
@@ -2837,12 +2833,7 @@ pref("dom.ipc.plugins.unloadTimeoutSecs", 30);
// Asynchronous plugin initialization is on hold.
pref("dom.ipc.plugins.asyncInit.enabled", false);
-#ifdef RELEASE_OR_BETA
-pref("dom.ipc.plugins.asyncdrawing.enabled", false);
-#else
-// Allow the AsyncDrawing mode to be used for plugins in dev channels.
pref("dom.ipc.plugins.asyncdrawing.enabled", true);
-#endif
pref("dom.ipc.processCount", 1);
@@ -4346,6 +4337,11 @@ pref("image.http.accept", "image/webp,image/png,image/*;q=0.8,*/*;q=0.5");
// disable.
pref("image.infer-src-animation.threshold-ms", 2000);
+// Whether to always optimize to image layers. Setting this to true will increase
+// performance of downscaled large images at the expense of visual quality,
+// because we can't use HQ downscaling in image layers.
+pref("image.layerize.always", false);
+
//
// Image memory management prefs
//
@@ -4596,8 +4592,8 @@ pref("gfx.direct2d.force-enabled", false);
pref("layers.prefer-opengl", false);
pref("layers.prefer-d3d9", false);
-// Disable for now due to bug 1304360
-pref("layers.allow-d3d9-fallback", false);
+// Enable fallback if d3d11 can't be used. See bug #1262187
+pref("layers.allow-d3d9-fallback", true);
#endif
// Copy-on-write canvas
@@ -4718,7 +4714,8 @@ pref("dom.vibrator.max_vibrate_ms", 10000);
pref("dom.vibrator.max_vibrate_list_len", 128);
// Battery API
-pref("dom.battery.enabled", true);
+// Disabled by default to reduce private data exposure.
+pref("dom.battery.enabled", false);
// Push
diff --git a/modules/zlib/src/ChangeLog b/modules/zlib/src/ChangeLog
index f22aabaef..b27cc4f0e 100644
--- a/modules/zlib/src/ChangeLog
+++ b/modules/zlib/src/ChangeLog
@@ -1,10 +1,53 @@
ChangeLog file for zlib
+Changes in 1.2.11 (15 Jan 2017)
+- Fix deflate stored bug when pulling last block from window
+- Permit immediate deflateParams changes before any deflate input
+
+Changes in 1.2.10 (2 Jan 2017)
+- Avoid warnings on snprintf() return value
+- Fix bug in deflate_stored() for zero-length input
+- Fix bug in gzwrite.c that produced corrupt gzip files
+- Remove files to be installed before copying them in Makefile.in
+- Add warnings when compiling with assembler code
+
+Changes in 1.2.9 (31 Dec 2016)
+- Fix contrib/minizip to permit unzipping with desktop API [Zouzou]
+- Improve contrib/blast to return unused bytes
+- Assure that gzoffset() is correct when appending
+- Improve compress() and uncompress() to support large lengths
+- Fix bug in test/example.c where error code not saved
+- Remedy Coverity warning [Randers-Pehrson]
+- Improve speed of gzprintf() in transparent mode
+- Fix inflateInit2() bug when windowBits is 16 or 32
+- Change DEBUG macro to ZLIB_DEBUG
+- Avoid uninitialized access by gzclose_w()
+- Allow building zlib outside of the source directory
+- Fix bug that accepted invalid zlib header when windowBits is zero
+- Fix gzseek() problem on MinGW due to buggy _lseeki64 there
+- Loop on write() calls in gzwrite.c in case of non-blocking I/O
+- Add --warn (-w) option to ./configure for more compiler warnings
+- Reject a window size of 256 bytes if not using the zlib wrapper
+- Fix bug when level 0 used with Z_HUFFMAN or Z_RLE
+- Add --debug (-d) option to ./configure to define ZLIB_DEBUG
+- Fix bugs in creating a very large gzip header
+- Add uncompress2() function, which returns the input size used
+- Assure that deflateParams() will not switch functions mid-block
+- Dramatically speed up deflation for level 0 (storing)
+- Add gzfread(), duplicating the interface of fread()
+- Add gzfwrite(), duplicating the interface of fwrite()
+- Add deflateGetDictionary() function
+- Use snprintf() for later versions of Microsoft C
+- Fix *Init macros to use z_ prefix when requested
+- Replace as400 with os400 for OS/400 support [Monnerat]
+- Add crc32_z() and adler32_z() functions with size_t lengths
+- Update Visual Studio project files [AraHaan]
+
Changes in 1.2.8 (28 Apr 2013)
- Update contrib/minizip/iowin32.c for Windows RT [Vollant]
- Do not force Z_CONST for C++
-- Clean up contrib/vstudio [Ro§]
+- Clean up contrib/vstudio [Ro§]
- Correct spelling error in zlib.h
- Fix mixed line endings in contrib/vstudio
@@ -34,7 +77,7 @@ Changes in 1.2.7.1 (24 Mar 2013)
- Clean up the usage of z_const and respect const usage within zlib
- Clean up examples/gzlog.[ch] comparisons of different types
- Avoid shift equal to bits in type (caused endless loop)
-- Fix unintialized value bug in gzputc() introduced by const patches
+- Fix uninitialized value bug in gzputc() introduced by const patches
- Fix memory allocation error in examples/zran.c [Nor]
- Fix bug where gzopen(), gzclose() would write an empty file
- Fix bug in gzclose() when gzwrite() runs out of memory
@@ -194,7 +237,7 @@ Changes in 1.2.5.2 (17 Dec 2011)
- Add a transparent write mode to gzopen() when 'T' is in the mode
- Update python link in zlib man page
- Get inffixed.h and MAKEFIXED result to match
-- Add a ./config --solo option to make zlib subset with no libary use
+- Add a ./config --solo option to make zlib subset with no library use
- Add undocumented inflateResetKeep() function for CAB file decoding
- Add --cover option to ./configure for gcc coverage testing
- Add #define ZLIB_CONST option to use const in the z_stream interface
@@ -564,7 +607,7 @@ Changes in 1.2.3.1 (16 August 2006)
- Update make_vms.com [Zinser]
- Use -fPIC for shared build in configure [Teredesai, Nicholson]
- Use only major version number for libz.so on IRIX and OSF1 [Reinholdtsen]
-- Use fdopen() (not _fdopen()) for Interix in zutil.h [BŠck]
+- Use fdopen() (not _fdopen()) for Interix in zutil.h [BŠck]
- Add some FAQ entries about the contrib directory
- Update the MVS question in the FAQ
- Avoid extraneous reads after EOF in gzio.c [Brown]
@@ -1178,7 +1221,7 @@ Changes in 1.0.6 (19 Jan 1998)
386 asm code replacing longest_match().
contrib/iostream/ by Kevin Ruland <kevin@rodin.wustl.edu>
A C++ I/O streams interface to the zlib gz* functions
- contrib/iostream2/ by Tyge Løvset <Tyge.Lovset@cmr.no>
+ contrib/iostream2/ by Tyge Løvset <Tyge.Lovset@cmr.no>
Another C++ I/O streams interface
contrib/untgz/ by "Pedro A. Aranda Guti\irrez" <paag@tid.es>
A very simple tar.gz file extractor using zlib
@@ -1267,7 +1310,7 @@ Changes in 1.0.1 (20 May 96) [1.0 skipped to avoid confusion]
- fix array overlay in deflate.c which sometimes caused bad compressed data
- fix inflate bug with empty stored block
- fix MSDOS medium model which was broken in 0.99
-- fix deflateParams() which could generated bad compressed data.
+- fix deflateParams() which could generate bad compressed data.
- Bytef is define'd instead of typedef'ed (work around Borland bug)
- added an INDEX file
- new makefiles for DJGPP (Makefile.dj2), 32-bit Borland (Makefile.b32),
diff --git a/modules/zlib/src/ChangeLog.moz b/modules/zlib/src/ChangeLog.moz
index 12755d05a..98cd9f9c7 100644
--- a/modules/zlib/src/ChangeLog.moz
+++ b/modules/zlib/src/ChangeLog.moz
@@ -63,3 +63,7 @@ Mozilla.org changes:
(keeping '#include "mozzconf.h"' in zconf.h)
See bug #866964
+- 16 January 2017
+ Sync'ed with 1.2.11 release
+ (keeping '#include "mozzconf.h"' in zconf.h)
+ See bug #1328099
diff --git a/modules/zlib/src/README b/modules/zlib/src/README
index 5ca9d127e..51106de47 100644
--- a/modules/zlib/src/README
+++ b/modules/zlib/src/README
@@ -1,6 +1,6 @@
ZLIB DATA COMPRESSION LIBRARY
-zlib 1.2.8 is a general purpose data compression library. All the code is
+zlib 1.2.11 is a general purpose data compression library. All the code is
thread safe. The data format used by the zlib library is described by RFCs
(Request for Comments) 1950 to 1952 in the files
http://tools.ietf.org/html/rfc1950 (zlib format), rfc1951 (deflate format) and
@@ -31,7 +31,7 @@ Mark Nelson <markn@ieee.org> wrote an article about zlib for the Jan. 1997
issue of Dr. Dobb's Journal; a copy of the article is available at
http://marknelson.us/1997/01/01/zlib-engine/ .
-The changes made in version 1.2.8 are documented in the file ChangeLog.
+The changes made in version 1.2.11 are documented in the file ChangeLog.
Unsupported third party contributions are provided in directory contrib/ .
@@ -84,7 +84,7 @@ Acknowledgments:
Copyright notice:
- (C) 1995-2013 Jean-loup Gailly and Mark Adler
+ (C) 1995-2017 Jean-loup Gailly and Mark Adler
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
diff --git a/modules/zlib/src/adler32.c b/modules/zlib/src/adler32.c
index a868f073d..d0be4380a 100644
--- a/modules/zlib/src/adler32.c
+++ b/modules/zlib/src/adler32.c
@@ -1,5 +1,5 @@
/* adler32.c -- compute the Adler-32 checksum of a data stream
- * Copyright (C) 1995-2011 Mark Adler
+ * Copyright (C) 1995-2011, 2016 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -7,11 +7,9 @@
#include "zutil.h"
-#define local static
-
local uLong adler32_combine_ OF((uLong adler1, uLong adler2, z_off64_t len2));
-#define BASE 65521 /* largest prime smaller than 65536 */
+#define BASE 65521U /* largest prime smaller than 65536 */
#define NMAX 5552
/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
@@ -62,10 +60,10 @@ local uLong adler32_combine_ OF((uLong adler1, uLong adler2, z_off64_t len2));
#endif
/* ========================================================================= */
-uLong ZEXPORT adler32(adler, buf, len)
+uLong ZEXPORT adler32_z(adler, buf, len)
uLong adler;
const Bytef *buf;
- uInt len;
+ z_size_t len;
{
unsigned long sum2;
unsigned n;
@@ -133,6 +131,15 @@ uLong ZEXPORT adler32(adler, buf, len)
}
/* ========================================================================= */
+uLong ZEXPORT adler32(adler, buf, len)
+ uLong adler;
+ const Bytef *buf;
+ uInt len;
+{
+ return adler32_z(adler, buf, len);
+}
+
+/* ========================================================================= */
local uLong adler32_combine_(adler1, adler2, len2)
uLong adler1;
uLong adler2;
@@ -156,7 +163,7 @@ local uLong adler32_combine_(adler1, adler2, len2)
sum2 += ((adler1 >> 16) & 0xffff) + ((adler2 >> 16) & 0xffff) + BASE - rem;
if (sum1 >= BASE) sum1 -= BASE;
if (sum1 >= BASE) sum1 -= BASE;
- if (sum2 >= (BASE << 1)) sum2 -= (BASE << 1);
+ if (sum2 >= ((unsigned long)BASE << 1)) sum2 -= ((unsigned long)BASE << 1);
if (sum2 >= BASE) sum2 -= BASE;
return sum1 | (sum2 << 16);
}
diff --git a/modules/zlib/src/compress.c b/modules/zlib/src/compress.c
index 6e9762676..e2db404ab 100644
--- a/modules/zlib/src/compress.c
+++ b/modules/zlib/src/compress.c
@@ -1,5 +1,5 @@
/* compress.c -- compress a memory buffer
- * Copyright (C) 1995-2005 Jean-loup Gailly.
+ * Copyright (C) 1995-2005, 2014, 2016 Jean-loup Gailly, Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -28,16 +28,11 @@ int ZEXPORT compress2 (dest, destLen, source, sourceLen, level)
{
z_stream stream;
int err;
+ const uInt max = (uInt)-1;
+ uLong left;
- stream.next_in = (z_const Bytef *)source;
- stream.avail_in = (uInt)sourceLen;
-#ifdef MAXSEG_64K
- /* Check for source > 64K on 16-bit machine: */
- if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
-#endif
- stream.next_out = dest;
- stream.avail_out = (uInt)*destLen;
- if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
+ left = *destLen;
+ *destLen = 0;
stream.zalloc = (alloc_func)0;
stream.zfree = (free_func)0;
@@ -46,15 +41,26 @@ int ZEXPORT compress2 (dest, destLen, source, sourceLen, level)
err = deflateInit(&stream, level);
if (err != Z_OK) return err;
- err = deflate(&stream, Z_FINISH);
- if (err != Z_STREAM_END) {
- deflateEnd(&stream);
- return err == Z_OK ? Z_BUF_ERROR : err;
- }
- *destLen = stream.total_out;
+ stream.next_out = dest;
+ stream.avail_out = 0;
+ stream.next_in = (z_const Bytef *)source;
+ stream.avail_in = 0;
+
+ do {
+ if (stream.avail_out == 0) {
+ stream.avail_out = left > (uLong)max ? max : (uInt)left;
+ left -= stream.avail_out;
+ }
+ if (stream.avail_in == 0) {
+ stream.avail_in = sourceLen > (uLong)max ? max : (uInt)sourceLen;
+ sourceLen -= stream.avail_in;
+ }
+ err = deflate(&stream, sourceLen ? Z_NO_FLUSH : Z_FINISH);
+ } while (err == Z_OK);
- err = deflateEnd(&stream);
- return err;
+ *destLen = stream.total_out;
+ deflateEnd(&stream);
+ return err == Z_STREAM_END ? Z_OK : err;
}
/* ===========================================================================
diff --git a/modules/zlib/src/crc32.c b/modules/zlib/src/crc32.c
index 979a7190a..9580440c0 100644
--- a/modules/zlib/src/crc32.c
+++ b/modules/zlib/src/crc32.c
@@ -1,5 +1,5 @@
/* crc32.c -- compute the CRC-32 of a data stream
- * Copyright (C) 1995-2006, 2010, 2011, 2012 Mark Adler
+ * Copyright (C) 1995-2006, 2010, 2011, 2012, 2016 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*
* Thanks to Rodney Brown <rbrown64@csc.com.au> for his contribution of faster
@@ -30,17 +30,15 @@
#include "zutil.h" /* for STDC and FAR definitions */
-#define local static
-
/* Definitions for doing the crc four data bytes at a time. */
#if !defined(NOBYFOUR) && defined(Z_U4)
# define BYFOUR
#endif
#ifdef BYFOUR
local unsigned long crc32_little OF((unsigned long,
- const unsigned char FAR *, unsigned));
+ const unsigned char FAR *, z_size_t));
local unsigned long crc32_big OF((unsigned long,
- const unsigned char FAR *, unsigned));
+ const unsigned char FAR *, z_size_t));
# define TBLS 8
#else
# define TBLS 1
@@ -201,10 +199,10 @@ const z_crc_t FAR * ZEXPORT get_crc_table()
#define DO8 DO1; DO1; DO1; DO1; DO1; DO1; DO1; DO1
/* ========================================================================= */
-unsigned long ZEXPORT crc32(crc, buf, len)
+unsigned long ZEXPORT crc32_z(crc, buf, len)
unsigned long crc;
const unsigned char FAR *buf;
- uInt len;
+ z_size_t len;
{
if (buf == Z_NULL) return 0UL;
@@ -235,8 +233,29 @@ unsigned long ZEXPORT crc32(crc, buf, len)
return crc ^ 0xffffffffUL;
}
+/* ========================================================================= */
+unsigned long ZEXPORT crc32(crc, buf, len)
+ unsigned long crc;
+ const unsigned char FAR *buf;
+ uInt len;
+{
+ return crc32_z(crc, buf, len);
+}
+
#ifdef BYFOUR
+/*
+ This BYFOUR code accesses the passed unsigned char * buffer with a 32-bit
+ integer pointer type. This violates the strict aliasing rule, where a
+ compiler can assume, for optimization purposes, that two pointers to
+ fundamentally different types won't ever point to the same memory. This can
+ manifest as a problem only if one of the pointers is written to. This code
+ only reads from those pointers. So long as this code remains isolated in
+ this compilation unit, there won't be a problem. For this reason, this code
+ should not be copied and pasted into a compilation unit in which other code
+ writes to the buffer that is passed to these routines.
+ */
+
/* ========================================================================= */
#define DOLIT4 c ^= *buf4++; \
c = crc_table[3][c & 0xff] ^ crc_table[2][(c >> 8) & 0xff] ^ \
@@ -247,7 +266,7 @@ unsigned long ZEXPORT crc32(crc, buf, len)
local unsigned long crc32_little(crc, buf, len)
unsigned long crc;
const unsigned char FAR *buf;
- unsigned len;
+ z_size_t len;
{
register z_crc_t c;
register const z_crc_t FAR *buf4;
@@ -278,7 +297,7 @@ local unsigned long crc32_little(crc, buf, len)
}
/* ========================================================================= */
-#define DOBIG4 c ^= *++buf4; \
+#define DOBIG4 c ^= *buf4++; \
c = crc_table[4][c & 0xff] ^ crc_table[5][(c >> 8) & 0xff] ^ \
crc_table[6][(c >> 16) & 0xff] ^ crc_table[7][c >> 24]
#define DOBIG32 DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4
@@ -287,7 +306,7 @@ local unsigned long crc32_little(crc, buf, len)
local unsigned long crc32_big(crc, buf, len)
unsigned long crc;
const unsigned char FAR *buf;
- unsigned len;
+ z_size_t len;
{
register z_crc_t c;
register const z_crc_t FAR *buf4;
@@ -300,7 +319,6 @@ local unsigned long crc32_big(crc, buf, len)
}
buf4 = (const z_crc_t FAR *)(const void FAR *)buf;
- buf4--;
while (len >= 32) {
DOBIG32;
len -= 32;
@@ -309,7 +327,6 @@ local unsigned long crc32_big(crc, buf, len)
DOBIG4;
len -= 4;
}
- buf4++;
buf = (const unsigned char FAR *)buf4;
if (len) do {
diff --git a/modules/zlib/src/deflate.c b/modules/zlib/src/deflate.c
index 696957705..1ec761448 100644
--- a/modules/zlib/src/deflate.c
+++ b/modules/zlib/src/deflate.c
@@ -1,5 +1,5 @@
/* deflate.c -- compress data using the deflation algorithm
- * Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler
+ * Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -52,7 +52,7 @@
#include "deflate.h"
const char deflate_copyright[] =
- " deflate 1.2.8 Copyright 1995-2013 Jean-loup Gailly and Mark Adler ";
+ " deflate 1.2.11 Copyright 1995-2017 Jean-loup Gailly and Mark Adler ";
/*
If you use the zlib library in a product, an acknowledgment is welcome
in the documentation of your product. If for some reason you cannot
@@ -73,6 +73,8 @@ typedef enum {
typedef block_state (*compress_func) OF((deflate_state *s, int flush));
/* Compression function. Returns the block state after the call. */
+local int deflateStateCheck OF((z_streamp strm));
+local void slide_hash OF((deflate_state *s));
local void fill_window OF((deflate_state *s));
local block_state deflate_stored OF((deflate_state *s, int flush));
local block_state deflate_fast OF((deflate_state *s, int flush));
@@ -84,15 +86,16 @@ local block_state deflate_huff OF((deflate_state *s, int flush));
local void lm_init OF((deflate_state *s));
local void putShortMSB OF((deflate_state *s, uInt b));
local void flush_pending OF((z_streamp strm));
-local int read_buf OF((z_streamp strm, Bytef *buf, unsigned size));
+local unsigned read_buf OF((z_streamp strm, Bytef *buf, unsigned size));
#ifdef ASMV
+# pragma message("Assembler code may have bugs -- use at your own risk")
void match_init OF((void)); /* asm code initialization */
uInt longest_match OF((deflate_state *s, IPos cur_match));
#else
local uInt longest_match OF((deflate_state *s, IPos cur_match));
#endif
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
local void check_match OF((deflate_state *s, IPos start, IPos match,
int length));
#endif
@@ -148,21 +151,14 @@ local const config configuration_table[10] = {
* meaning.
*/
-#define EQUAL 0
-/* result of memcmp for equal strings */
-
-#ifndef NO_DUMMY_DECL
-struct static_tree_desc_s {int dummy;}; /* for buggy compilers */
-#endif
-
/* rank Z_BLOCK between Z_NO_FLUSH and Z_PARTIAL_FLUSH */
-#define RANK(f) (((f) << 1) - ((f) > 4 ? 9 : 0))
+#define RANK(f) (((f) * 2) - ((f) > 4 ? 9 : 0))
/* ===========================================================================
* Update a hash value with the given input byte
- * IN assertion: all calls to to UPDATE_HASH are made with consecutive
- * input characters, so that a running hash key can be computed from the
- * previous key instead of complete recalculation each time.
+ * IN assertion: all calls to UPDATE_HASH are made with consecutive input
+ * characters, so that a running hash key can be computed from the previous
+ * key instead of complete recalculation each time.
*/
#define UPDATE_HASH(s,h,c) (h = (((h)<<s->hash_shift) ^ (c)) & s->hash_mask)
@@ -173,9 +169,9 @@ struct static_tree_desc_s {int dummy;}; /* for buggy compilers */
* the previous length of the hash chain.
* If this file is compiled with -DFASTEST, the compression level is forced
* to 1, and no hash chains are maintained.
- * IN assertion: all calls to to INSERT_STRING are made with consecutive
- * input characters and the first MIN_MATCH bytes of str are valid
- * (except for the last MIN_MATCH-1 bytes of the input file).
+ * IN assertion: all calls to INSERT_STRING are made with consecutive input
+ * characters and the first MIN_MATCH bytes of str are valid (except for
+ * the last MIN_MATCH-1 bytes of the input file).
*/
#ifdef FASTEST
#define INSERT_STRING(s, str, match_head) \
@@ -197,6 +193,37 @@ struct static_tree_desc_s {int dummy;}; /* for buggy compilers */
s->head[s->hash_size-1] = NIL; \
zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head));
+/* ===========================================================================
+ * Slide the hash table when sliding the window down (could be avoided with 32
+ * bit values at the expense of memory usage). We slide even when level == 0 to
+ * keep the hash table consistent if we switch back to level > 0 later.
+ */
+local void slide_hash(s)
+ deflate_state *s;
+{
+ unsigned n, m;
+ Posf *p;
+ uInt wsize = s->w_size;
+
+ n = s->hash_size;
+ p = &s->head[n];
+ do {
+ m = *--p;
+ *p = (Pos)(m >= wsize ? m - wsize : NIL);
+ } while (--n);
+ n = wsize;
+#ifndef FASTEST
+ p = &s->prev[n];
+ do {
+ m = *--p;
+ *p = (Pos)(m >= wsize ? m - wsize : NIL);
+ /* If n is not on any hash chain, prev[n] is garbage but
+ * its value will never be used.
+ */
+ } while (--n);
+#endif
+}
+
/* ========================================================================= */
int ZEXPORT deflateInit_(strm, level, version, stream_size)
z_streamp strm;
@@ -270,7 +297,7 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
#endif
if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED ||
windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||
- strategy < 0 || strategy > Z_FIXED) {
+ strategy < 0 || strategy > Z_FIXED || (windowBits == 8 && wrap != 1)) {
return Z_STREAM_ERROR;
}
if (windowBits == 8) windowBits = 9; /* until 256-byte window bug fixed */
@@ -278,14 +305,15 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
if (s == Z_NULL) return Z_MEM_ERROR;
strm->state = (struct internal_state FAR *)s;
s->strm = strm;
+ s->status = INIT_STATE; /* to pass state test in deflateReset() */
s->wrap = wrap;
s->gzhead = Z_NULL;
- s->w_bits = windowBits;
+ s->w_bits = (uInt)windowBits;
s->w_size = 1 << s->w_bits;
s->w_mask = s->w_size - 1;
- s->hash_bits = memLevel + 7;
+ s->hash_bits = (uInt)memLevel + 7;
s->hash_size = 1 << s->hash_bits;
s->hash_mask = s->hash_size - 1;
s->hash_shift = ((s->hash_bits+MIN_MATCH-1)/MIN_MATCH);
@@ -319,6 +347,31 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
return deflateReset(strm);
}
+/* =========================================================================
+ * Check for a valid deflate stream state. Return 0 if ok, 1 if not.
+ */
+local int deflateStateCheck (strm)
+ z_streamp strm;
+{
+ deflate_state *s;
+ if (strm == Z_NULL ||
+ strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0)
+ return 1;
+ s = strm->state;
+ if (s == Z_NULL || s->strm != strm || (s->status != INIT_STATE &&
+#ifdef GZIP
+ s->status != GZIP_STATE &&
+#endif
+ s->status != EXTRA_STATE &&
+ s->status != NAME_STATE &&
+ s->status != COMMENT_STATE &&
+ s->status != HCRC_STATE &&
+ s->status != BUSY_STATE &&
+ s->status != FINISH_STATE))
+ return 1;
+ return 0;
+}
+
/* ========================================================================= */
int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength)
z_streamp strm;
@@ -331,7 +384,7 @@ int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength)
unsigned avail;
z_const unsigned char *next;
- if (strm == Z_NULL || strm->state == Z_NULL || dictionary == Z_NULL)
+ if (deflateStateCheck(strm) || dictionary == Z_NULL)
return Z_STREAM_ERROR;
s = strm->state;
wrap = s->wrap;
@@ -389,13 +442,34 @@ int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength)
}
/* ========================================================================= */
+int ZEXPORT deflateGetDictionary (strm, dictionary, dictLength)
+ z_streamp strm;
+ Bytef *dictionary;
+ uInt *dictLength;
+{
+ deflate_state *s;
+ uInt len;
+
+ if (deflateStateCheck(strm))
+ return Z_STREAM_ERROR;
+ s = strm->state;
+ len = s->strstart + s->lookahead;
+ if (len > s->w_size)
+ len = s->w_size;
+ if (dictionary != Z_NULL && len)
+ zmemcpy(dictionary, s->window + s->strstart + s->lookahead - len, len);
+ if (dictLength != Z_NULL)
+ *dictLength = len;
+ return Z_OK;
+}
+
+/* ========================================================================= */
int ZEXPORT deflateResetKeep (strm)
z_streamp strm;
{
deflate_state *s;
- if (strm == Z_NULL || strm->state == Z_NULL ||
- strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) {
+ if (deflateStateCheck(strm)) {
return Z_STREAM_ERROR;
}
@@ -410,7 +484,11 @@ int ZEXPORT deflateResetKeep (strm)
if (s->wrap < 0) {
s->wrap = -s->wrap; /* was made negative by deflate(..., Z_FINISH); */
}
- s->status = s->wrap ? INIT_STATE : BUSY_STATE;
+ s->status =
+#ifdef GZIP
+ s->wrap == 2 ? GZIP_STATE :
+#endif
+ s->wrap ? INIT_STATE : BUSY_STATE;
strm->adler =
#ifdef GZIP
s->wrap == 2 ? crc32(0L, Z_NULL, 0) :
@@ -440,8 +518,8 @@ int ZEXPORT deflateSetHeader (strm, head)
z_streamp strm;
gz_headerp head;
{
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
- if (strm->state->wrap != 2) return Z_STREAM_ERROR;
+ if (deflateStateCheck(strm) || strm->state->wrap != 2)
+ return Z_STREAM_ERROR;
strm->state->gzhead = head;
return Z_OK;
}
@@ -452,7 +530,7 @@ int ZEXPORT deflatePending (strm, pending, bits)
int *bits;
z_streamp strm;
{
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (deflateStateCheck(strm)) return Z_STREAM_ERROR;
if (pending != Z_NULL)
*pending = strm->state->pending;
if (bits != Z_NULL)
@@ -469,7 +547,7 @@ int ZEXPORT deflatePrime (strm, bits, value)
deflate_state *s;
int put;
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (deflateStateCheck(strm)) return Z_STREAM_ERROR;
s = strm->state;
if ((Bytef *)(s->d_buf) < s->pending_out + ((Buf_size + 7) >> 3))
return Z_BUF_ERROR;
@@ -494,9 +572,8 @@ int ZEXPORT deflateParams(strm, level, strategy)
{
deflate_state *s;
compress_func func;
- int err = Z_OK;
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (deflateStateCheck(strm)) return Z_STREAM_ERROR;
s = strm->state;
#ifdef FASTEST
@@ -510,13 +587,22 @@ int ZEXPORT deflateParams(strm, level, strategy)
func = configuration_table[s->level].func;
if ((strategy != s->strategy || func != configuration_table[level].func) &&
- strm->total_in != 0) {
+ s->high_water) {
/* Flush the last buffer: */
- err = deflate(strm, Z_BLOCK);
- if (err == Z_BUF_ERROR && s->pending == 0)
- err = Z_OK;
+ int err = deflate(strm, Z_BLOCK);
+ if (err == Z_STREAM_ERROR)
+ return err;
+ if (strm->avail_out == 0)
+ return Z_BUF_ERROR;
}
if (s->level != level) {
+ if (s->level == 0 && s->matches != 0) {
+ if (s->matches == 1)
+ slide_hash(s);
+ else
+ CLEAR_HASH(s);
+ s->matches = 0;
+ }
s->level = level;
s->max_lazy_match = configuration_table[level].max_lazy;
s->good_match = configuration_table[level].good_length;
@@ -524,7 +610,7 @@ int ZEXPORT deflateParams(strm, level, strategy)
s->max_chain_length = configuration_table[level].max_chain;
}
s->strategy = strategy;
- return err;
+ return Z_OK;
}
/* ========================================================================= */
@@ -537,12 +623,12 @@ int ZEXPORT deflateTune(strm, good_length, max_lazy, nice_length, max_chain)
{
deflate_state *s;
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (deflateStateCheck(strm)) return Z_STREAM_ERROR;
s = strm->state;
- s->good_match = good_length;
- s->max_lazy_match = max_lazy;
+ s->good_match = (uInt)good_length;
+ s->max_lazy_match = (uInt)max_lazy;
s->nice_match = nice_length;
- s->max_chain_length = max_chain;
+ s->max_chain_length = (uInt)max_chain;
return Z_OK;
}
@@ -569,14 +655,13 @@ uLong ZEXPORT deflateBound(strm, sourceLen)
{
deflate_state *s;
uLong complen, wraplen;
- Bytef *str;
/* conservative upper bound for compressed data */
complen = sourceLen +
((sourceLen + 7) >> 3) + ((sourceLen + 63) >> 6) + 5;
/* if can't get parameters, return conservative bound plus zlib wrapper */
- if (strm == Z_NULL || strm->state == Z_NULL)
+ if (deflateStateCheck(strm))
return complen + 6;
/* compute wrapper length */
@@ -588,9 +673,11 @@ uLong ZEXPORT deflateBound(strm, sourceLen)
case 1: /* zlib wrapper */
wraplen = 6 + (s->strstart ? 4 : 0);
break;
+#ifdef GZIP
case 2: /* gzip wrapper */
wraplen = 18;
if (s->gzhead != Z_NULL) { /* user-supplied gzip header */
+ Bytef *str;
if (s->gzhead->extra != Z_NULL)
wraplen += 2 + s->gzhead->extra_len;
str = s->gzhead->name;
@@ -607,6 +694,7 @@ uLong ZEXPORT deflateBound(strm, sourceLen)
wraplen += 2;
}
break;
+#endif
default: /* for compiler happiness */
wraplen = 6;
}
@@ -634,10 +722,10 @@ local void putShortMSB (s, b)
}
/* =========================================================================
- * Flush as much pending output as possible. All deflate() output goes
- * through this function so some applications may wish to modify it
- * to avoid allocating a large strm->next_out buffer and copying into it.
- * (See also read_buf()).
+ * Flush as much pending output as possible. All deflate() output, except for
+ * some deflate_stored() output, goes through this function so some
+ * applications may wish to modify it to avoid allocating a large
+ * strm->next_out buffer and copying into it. (See also read_buf()).
*/
local void flush_pending(strm)
z_streamp strm;
@@ -654,13 +742,23 @@ local void flush_pending(strm)
strm->next_out += len;
s->pending_out += len;
strm->total_out += len;
- strm->avail_out -= len;
- s->pending -= len;
+ strm->avail_out -= len;
+ s->pending -= len;
if (s->pending == 0) {
s->pending_out = s->pending_buf;
}
}
+/* ===========================================================================
+ * Update the header CRC with the bytes s->pending_buf[beg..s->pending - 1].
+ */
+#define HCRC_UPDATE(beg) \
+ do { \
+ if (s->gzhead->hcrc && s->pending > (beg)) \
+ strm->adler = crc32(strm->adler, s->pending_buf + (beg), \
+ s->pending - (beg)); \
+ } while (0)
+
/* ========================================================================= */
int ZEXPORT deflate (strm, flush)
z_streamp strm;
@@ -669,230 +767,229 @@ int ZEXPORT deflate (strm, flush)
int old_flush; /* value of flush param for previous deflate call */
deflate_state *s;
- if (strm == Z_NULL || strm->state == Z_NULL ||
- flush > Z_BLOCK || flush < 0) {
+ if (deflateStateCheck(strm) || flush > Z_BLOCK || flush < 0) {
return Z_STREAM_ERROR;
}
s = strm->state;
if (strm->next_out == Z_NULL ||
- (strm->next_in == Z_NULL && strm->avail_in != 0) ||
+ (strm->avail_in != 0 && strm->next_in == Z_NULL) ||
(s->status == FINISH_STATE && flush != Z_FINISH)) {
ERR_RETURN(strm, Z_STREAM_ERROR);
}
if (strm->avail_out == 0) ERR_RETURN(strm, Z_BUF_ERROR);
- s->strm = strm; /* just in case */
old_flush = s->last_flush;
s->last_flush = flush;
+ /* Flush as much pending output as possible */
+ if (s->pending != 0) {
+ flush_pending(strm);
+ if (strm->avail_out == 0) {
+ /* Since avail_out is 0, deflate will be called again with
+ * more output space, but possibly with both pending and
+ * avail_in equal to zero. There won't be anything to do,
+ * but this is not an error situation so make sure we
+ * return OK instead of BUF_ERROR at next call of deflate:
+ */
+ s->last_flush = -1;
+ return Z_OK;
+ }
+
+ /* Make sure there is something to do and avoid duplicate consecutive
+ * flushes. For repeated and useless calls with Z_FINISH, we keep
+ * returning Z_STREAM_END instead of Z_BUF_ERROR.
+ */
+ } else if (strm->avail_in == 0 && RANK(flush) <= RANK(old_flush) &&
+ flush != Z_FINISH) {
+ ERR_RETURN(strm, Z_BUF_ERROR);
+ }
+
+ /* User must not provide more input after the first FINISH: */
+ if (s->status == FINISH_STATE && strm->avail_in != 0) {
+ ERR_RETURN(strm, Z_BUF_ERROR);
+ }
+
/* Write the header */
if (s->status == INIT_STATE) {
-#ifdef GZIP
- if (s->wrap == 2) {
- strm->adler = crc32(0L, Z_NULL, 0);
- put_byte(s, 31);
- put_byte(s, 139);
- put_byte(s, 8);
- if (s->gzhead == Z_NULL) {
- put_byte(s, 0);
- put_byte(s, 0);
- put_byte(s, 0);
- put_byte(s, 0);
- put_byte(s, 0);
- put_byte(s, s->level == 9 ? 2 :
- (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ?
- 4 : 0));
- put_byte(s, OS_CODE);
- s->status = BUSY_STATE;
- }
- else {
- put_byte(s, (s->gzhead->text ? 1 : 0) +
- (s->gzhead->hcrc ? 2 : 0) +
- (s->gzhead->extra == Z_NULL ? 0 : 4) +
- (s->gzhead->name == Z_NULL ? 0 : 8) +
- (s->gzhead->comment == Z_NULL ? 0 : 16)
- );
- put_byte(s, (Byte)(s->gzhead->time & 0xff));
- put_byte(s, (Byte)((s->gzhead->time >> 8) & 0xff));
- put_byte(s, (Byte)((s->gzhead->time >> 16) & 0xff));
- put_byte(s, (Byte)((s->gzhead->time >> 24) & 0xff));
- put_byte(s, s->level == 9 ? 2 :
- (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ?
- 4 : 0));
- put_byte(s, s->gzhead->os & 0xff);
- if (s->gzhead->extra != Z_NULL) {
- put_byte(s, s->gzhead->extra_len & 0xff);
- put_byte(s, (s->gzhead->extra_len >> 8) & 0xff);
- }
- if (s->gzhead->hcrc)
- strm->adler = crc32(strm->adler, s->pending_buf,
- s->pending);
- s->gzindex = 0;
- s->status = EXTRA_STATE;
- }
- }
+ /* zlib header */
+ uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8;
+ uInt level_flags;
+
+ if (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2)
+ level_flags = 0;
+ else if (s->level < 6)
+ level_flags = 1;
+ else if (s->level == 6)
+ level_flags = 2;
else
-#endif
- {
- uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8;
- uInt level_flags;
-
- if (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2)
- level_flags = 0;
- else if (s->level < 6)
- level_flags = 1;
- else if (s->level == 6)
- level_flags = 2;
- else
- level_flags = 3;
- header |= (level_flags << 6);
- if (s->strstart != 0) header |= PRESET_DICT;
- header += 31 - (header % 31);
+ level_flags = 3;
+ header |= (level_flags << 6);
+ if (s->strstart != 0) header |= PRESET_DICT;
+ header += 31 - (header % 31);
+
+ putShortMSB(s, header);
+ /* Save the adler32 of the preset dictionary: */
+ if (s->strstart != 0) {
+ putShortMSB(s, (uInt)(strm->adler >> 16));
+ putShortMSB(s, (uInt)(strm->adler & 0xffff));
+ }
+ strm->adler = adler32(0L, Z_NULL, 0);
+ s->status = BUSY_STATE;
+
+ /* Compression must start with an empty pending buffer */
+ flush_pending(strm);
+ if (s->pending != 0) {
+ s->last_flush = -1;
+ return Z_OK;
+ }
+ }
+#ifdef GZIP
+ if (s->status == GZIP_STATE) {
+ /* gzip header */
+ strm->adler = crc32(0L, Z_NULL, 0);
+ put_byte(s, 31);
+ put_byte(s, 139);
+ put_byte(s, 8);
+ if (s->gzhead == Z_NULL) {
+ put_byte(s, 0);
+ put_byte(s, 0);
+ put_byte(s, 0);
+ put_byte(s, 0);
+ put_byte(s, 0);
+ put_byte(s, s->level == 9 ? 2 :
+ (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ?
+ 4 : 0));
+ put_byte(s, OS_CODE);
s->status = BUSY_STATE;
- putShortMSB(s, header);
- /* Save the adler32 of the preset dictionary: */
- if (s->strstart != 0) {
- putShortMSB(s, (uInt)(strm->adler >> 16));
- putShortMSB(s, (uInt)(strm->adler & 0xffff));
+ /* Compression must start with an empty pending buffer */
+ flush_pending(strm);
+ if (s->pending != 0) {
+ s->last_flush = -1;
+ return Z_OK;
+ }
+ }
+ else {
+ put_byte(s, (s->gzhead->text ? 1 : 0) +
+ (s->gzhead->hcrc ? 2 : 0) +
+ (s->gzhead->extra == Z_NULL ? 0 : 4) +
+ (s->gzhead->name == Z_NULL ? 0 : 8) +
+ (s->gzhead->comment == Z_NULL ? 0 : 16)
+ );
+ put_byte(s, (Byte)(s->gzhead->time & 0xff));
+ put_byte(s, (Byte)((s->gzhead->time >> 8) & 0xff));
+ put_byte(s, (Byte)((s->gzhead->time >> 16) & 0xff));
+ put_byte(s, (Byte)((s->gzhead->time >> 24) & 0xff));
+ put_byte(s, s->level == 9 ? 2 :
+ (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ?
+ 4 : 0));
+ put_byte(s, s->gzhead->os & 0xff);
+ if (s->gzhead->extra != Z_NULL) {
+ put_byte(s, s->gzhead->extra_len & 0xff);
+ put_byte(s, (s->gzhead->extra_len >> 8) & 0xff);
}
- strm->adler = adler32(0L, Z_NULL, 0);
+ if (s->gzhead->hcrc)
+ strm->adler = crc32(strm->adler, s->pending_buf,
+ s->pending);
+ s->gzindex = 0;
+ s->status = EXTRA_STATE;
}
}
-#ifdef GZIP
if (s->status == EXTRA_STATE) {
if (s->gzhead->extra != Z_NULL) {
- uInt beg = s->pending; /* start of bytes to update crc */
-
- while (s->gzindex < (s->gzhead->extra_len & 0xffff)) {
- if (s->pending == s->pending_buf_size) {
- if (s->gzhead->hcrc && s->pending > beg)
- strm->adler = crc32(strm->adler, s->pending_buf + beg,
- s->pending - beg);
- flush_pending(strm);
- beg = s->pending;
- if (s->pending == s->pending_buf_size)
- break;
+ ulg beg = s->pending; /* start of bytes to update crc */
+ uInt left = (s->gzhead->extra_len & 0xffff) - s->gzindex;
+ while (s->pending + left > s->pending_buf_size) {
+ uInt copy = s->pending_buf_size - s->pending;
+ zmemcpy(s->pending_buf + s->pending,
+ s->gzhead->extra + s->gzindex, copy);
+ s->pending = s->pending_buf_size;
+ HCRC_UPDATE(beg);
+ s->gzindex += copy;
+ flush_pending(strm);
+ if (s->pending != 0) {
+ s->last_flush = -1;
+ return Z_OK;
}
- put_byte(s, s->gzhead->extra[s->gzindex]);
- s->gzindex++;
- }
- if (s->gzhead->hcrc && s->pending > beg)
- strm->adler = crc32(strm->adler, s->pending_buf + beg,
- s->pending - beg);
- if (s->gzindex == s->gzhead->extra_len) {
- s->gzindex = 0;
- s->status = NAME_STATE;
+ beg = 0;
+ left -= copy;
}
+ zmemcpy(s->pending_buf + s->pending,
+ s->gzhead->extra + s->gzindex, left);
+ s->pending += left;
+ HCRC_UPDATE(beg);
+ s->gzindex = 0;
}
- else
- s->status = NAME_STATE;
+ s->status = NAME_STATE;
}
if (s->status == NAME_STATE) {
if (s->gzhead->name != Z_NULL) {
- uInt beg = s->pending; /* start of bytes to update crc */
+ ulg beg = s->pending; /* start of bytes to update crc */
int val;
-
do {
if (s->pending == s->pending_buf_size) {
- if (s->gzhead->hcrc && s->pending > beg)
- strm->adler = crc32(strm->adler, s->pending_buf + beg,
- s->pending - beg);
+ HCRC_UPDATE(beg);
flush_pending(strm);
- beg = s->pending;
- if (s->pending == s->pending_buf_size) {
- val = 1;
- break;
+ if (s->pending != 0) {
+ s->last_flush = -1;
+ return Z_OK;
}
+ beg = 0;
}
val = s->gzhead->name[s->gzindex++];
put_byte(s, val);
} while (val != 0);
- if (s->gzhead->hcrc && s->pending > beg)
- strm->adler = crc32(strm->adler, s->pending_buf + beg,
- s->pending - beg);
- if (val == 0) {
- s->gzindex = 0;
- s->status = COMMENT_STATE;
- }
+ HCRC_UPDATE(beg);
+ s->gzindex = 0;
}
- else
- s->status = COMMENT_STATE;
+ s->status = COMMENT_STATE;
}
if (s->status == COMMENT_STATE) {
if (s->gzhead->comment != Z_NULL) {
- uInt beg = s->pending; /* start of bytes to update crc */
+ ulg beg = s->pending; /* start of bytes to update crc */
int val;
-
do {
if (s->pending == s->pending_buf_size) {
- if (s->gzhead->hcrc && s->pending > beg)
- strm->adler = crc32(strm->adler, s->pending_buf + beg,
- s->pending - beg);
+ HCRC_UPDATE(beg);
flush_pending(strm);
- beg = s->pending;
- if (s->pending == s->pending_buf_size) {
- val = 1;
- break;
+ if (s->pending != 0) {
+ s->last_flush = -1;
+ return Z_OK;
}
+ beg = 0;
}
val = s->gzhead->comment[s->gzindex++];
put_byte(s, val);
} while (val != 0);
- if (s->gzhead->hcrc && s->pending > beg)
- strm->adler = crc32(strm->adler, s->pending_buf + beg,
- s->pending - beg);
- if (val == 0)
- s->status = HCRC_STATE;
+ HCRC_UPDATE(beg);
}
- else
- s->status = HCRC_STATE;
+ s->status = HCRC_STATE;
}
if (s->status == HCRC_STATE) {
if (s->gzhead->hcrc) {
- if (s->pending + 2 > s->pending_buf_size)
+ if (s->pending + 2 > s->pending_buf_size) {
flush_pending(strm);
- if (s->pending + 2 <= s->pending_buf_size) {
- put_byte(s, (Byte)(strm->adler & 0xff));
- put_byte(s, (Byte)((strm->adler >> 8) & 0xff));
- strm->adler = crc32(0L, Z_NULL, 0);
- s->status = BUSY_STATE;
+ if (s->pending != 0) {
+ s->last_flush = -1;
+ return Z_OK;
+ }
}
+ put_byte(s, (Byte)(strm->adler & 0xff));
+ put_byte(s, (Byte)((strm->adler >> 8) & 0xff));
+ strm->adler = crc32(0L, Z_NULL, 0);
}
- else
- s->status = BUSY_STATE;
- }
-#endif
+ s->status = BUSY_STATE;
- /* Flush as much pending output as possible */
- if (s->pending != 0) {
+ /* Compression must start with an empty pending buffer */
flush_pending(strm);
- if (strm->avail_out == 0) {
- /* Since avail_out is 0, deflate will be called again with
- * more output space, but possibly with both pending and
- * avail_in equal to zero. There won't be anything to do,
- * but this is not an error situation so make sure we
- * return OK instead of BUF_ERROR at next call of deflate:
- */
+ if (s->pending != 0) {
s->last_flush = -1;
return Z_OK;
}
-
- /* Make sure there is something to do and avoid duplicate consecutive
- * flushes. For repeated and useless calls with Z_FINISH, we keep
- * returning Z_STREAM_END instead of Z_BUF_ERROR.
- */
- } else if (strm->avail_in == 0 && RANK(flush) <= RANK(old_flush) &&
- flush != Z_FINISH) {
- ERR_RETURN(strm, Z_BUF_ERROR);
- }
-
- /* User must not provide more input after the first FINISH: */
- if (s->status == FINISH_STATE && strm->avail_in != 0) {
- ERR_RETURN(strm, Z_BUF_ERROR);
}
+#endif
/* Start a new block or continue the current one.
*/
@@ -900,9 +997,10 @@ int ZEXPORT deflate (strm, flush)
(flush != Z_NO_FLUSH && s->status != FINISH_STATE)) {
block_state bstate;
- bstate = s->strategy == Z_HUFFMAN_ONLY ? deflate_huff(s, flush) :
- (s->strategy == Z_RLE ? deflate_rle(s, flush) :
- (*(configuration_table[s->level].func))(s, flush));
+ bstate = s->level == 0 ? deflate_stored(s, flush) :
+ s->strategy == Z_HUFFMAN_ONLY ? deflate_huff(s, flush) :
+ s->strategy == Z_RLE ? deflate_rle(s, flush) :
+ (*(configuration_table[s->level].func))(s, flush);
if (bstate == finish_started || bstate == finish_done) {
s->status = FINISH_STATE;
@@ -944,7 +1042,6 @@ int ZEXPORT deflate (strm, flush)
}
}
}
- Assert(strm->avail_out > 0, "bug2");
if (flush != Z_FINISH) return Z_OK;
if (s->wrap <= 0) return Z_STREAM_END;
@@ -981,18 +1078,9 @@ int ZEXPORT deflateEnd (strm)
{
int status;
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (deflateStateCheck(strm)) return Z_STREAM_ERROR;
status = strm->state->status;
- if (status != INIT_STATE &&
- status != EXTRA_STATE &&
- status != NAME_STATE &&
- status != COMMENT_STATE &&
- status != HCRC_STATE &&
- status != BUSY_STATE &&
- status != FINISH_STATE) {
- return Z_STREAM_ERROR;
- }
/* Deallocate in reverse order of allocations: */
TRY_FREE(strm, strm->state->pending_buf);
@@ -1023,7 +1111,7 @@ int ZEXPORT deflateCopy (dest, source)
ushf *overlay;
- if (source == Z_NULL || dest == Z_NULL || source->state == Z_NULL) {
+ if (deflateStateCheck(source) || dest == Z_NULL) {
return Z_STREAM_ERROR;
}
@@ -1073,7 +1161,7 @@ int ZEXPORT deflateCopy (dest, source)
* allocating a large strm->next_in buffer and copying from it.
* (See also flush_pending()).
*/
-local int read_buf(strm, buf, size)
+local unsigned read_buf(strm, buf, size)
z_streamp strm;
Bytef *buf;
unsigned size;
@@ -1097,7 +1185,7 @@ local int read_buf(strm, buf, size)
strm->next_in += len;
strm->total_in += len;
- return (int)len;
+ return len;
}
/* ===========================================================================
@@ -1151,9 +1239,9 @@ local uInt longest_match(s, cur_match)
{
unsigned chain_length = s->max_chain_length;/* max hash chain length */
register Bytef *scan = s->window + s->strstart; /* current string */
- register Bytef *match; /* matched string */
+ register Bytef *match; /* matched string */
register int len; /* length of current match */
- int best_len = s->prev_length; /* best match length so far */
+ int best_len = (int)s->prev_length; /* best match length so far */
int nice_match = s->nice_match; /* stop if match long enough */
IPos limit = s->strstart > (IPos)MAX_DIST(s) ?
s->strstart - (IPos)MAX_DIST(s) : NIL;
@@ -1188,7 +1276,7 @@ local uInt longest_match(s, cur_match)
/* Do not look for matches beyond the end of the input. This is necessary
* to make deflate deterministic.
*/
- if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;
+ if ((uInt)nice_match > s->lookahead) nice_match = (int)s->lookahead;
Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
@@ -1349,7 +1437,11 @@ local uInt longest_match(s, cur_match)
#endif /* FASTEST */
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
+
+#define EQUAL 0
+/* result of memcmp for equal strings */
+
/* ===========================================================================
* Check that the match at match_start is indeed a match.
*/
@@ -1375,7 +1467,7 @@ local void check_match(s, start, match, length)
}
#else
# define check_match(s, start, match, length)
-#endif /* DEBUG */
+#endif /* ZLIB_DEBUG */
/* ===========================================================================
* Fill the window when the lookahead becomes insufficient.
@@ -1390,8 +1482,7 @@ local void check_match(s, start, match, length)
local void fill_window(s)
deflate_state *s;
{
- register unsigned n, m;
- register Posf *p;
+ unsigned n;
unsigned more; /* Amount of free space at the end of the window. */
uInt wsize = s->w_size;
@@ -1418,35 +1509,11 @@ local void fill_window(s)
*/
if (s->strstart >= wsize+MAX_DIST(s)) {
- zmemcpy(s->window, s->window+wsize, (unsigned)wsize);
+ zmemcpy(s->window, s->window+wsize, (unsigned)wsize - more);
s->match_start -= wsize;
s->strstart -= wsize; /* we now have strstart >= MAX_DIST */
s->block_start -= (long) wsize;
-
- /* Slide the hash table (could be avoided with 32 bit values
- at the expense of memory usage). We slide even when level == 0
- to keep the hash table consistent if we switch back to level > 0
- later. (Using level 0 permanently is not an optimal usage of
- zlib, so we don't care about this pathological case.)
- */
- n = s->hash_size;
- p = &s->head[n];
- do {
- m = *--p;
- *p = (Pos)(m >= wsize ? m-wsize : NIL);
- } while (--n);
-
- n = wsize;
-#ifndef FASTEST
- p = &s->prev[n];
- do {
- m = *--p;
- *p = (Pos)(m >= wsize ? m-wsize : NIL);
- /* If n is not on any hash chain, prev[n] is garbage but
- * its value will never be used.
- */
- } while (--n);
-#endif
+ slide_hash(s);
more += wsize;
}
if (s->strm->avail_in == 0) break;
@@ -1552,70 +1619,199 @@ local void fill_window(s)
if (s->strm->avail_out == 0) return (last) ? finish_started : need_more; \
}
+/* Maximum stored block length in deflate format (not including header). */
+#define MAX_STORED 65535
+
+/* Minimum of a and b. */
+#define MIN(a, b) ((a) > (b) ? (b) : (a))
+
/* ===========================================================================
* Copy without compression as much as possible from the input stream, return
* the current block state.
- * This function does not insert new strings in the dictionary since
- * uncompressible data is probably not useful. This function is used
- * only for the level=0 compression option.
- * NOTE: this function should be optimized to avoid extra copying from
- * window to pending_buf.
+ *
+ * In case deflateParams() is used to later switch to a non-zero compression
+ * level, s->matches (otherwise unused when storing) keeps track of the number
+ * of hash table slides to perform. If s->matches is 1, then one hash table
+ * slide will be done when switching. If s->matches is 2, the maximum value
+ * allowed here, then the hash table will be cleared, since two or more slides
+ * is the same as a clear.
+ *
+ * deflate_stored() is written to minimize the number of times an input byte is
+ * copied. It is most efficient with large input and output buffers, which
+ * maximizes the opportunites to have a single copy from next_in to next_out.
*/
local block_state deflate_stored(s, flush)
deflate_state *s;
int flush;
{
- /* Stored blocks are limited to 0xffff bytes, pending_buf is limited
- * to pending_buf_size, and each stored block has a 5 byte header:
+ /* Smallest worthy block size when not flushing or finishing. By default
+ * this is 32K. This can be as small as 507 bytes for memLevel == 1. For
+ * large input and output buffers, the stored block size will be larger.
*/
- ulg max_block_size = 0xffff;
- ulg max_start;
-
- if (max_block_size > s->pending_buf_size - 5) {
- max_block_size = s->pending_buf_size - 5;
- }
+ unsigned min_block = MIN(s->pending_buf_size - 5, s->w_size);
- /* Copy as much as possible from input to output: */
- for (;;) {
- /* Fill the window as much as possible: */
- if (s->lookahead <= 1) {
-
- Assert(s->strstart < s->w_size+MAX_DIST(s) ||
- s->block_start >= (long)s->w_size, "slide too late");
+ /* Copy as many min_block or larger stored blocks directly to next_out as
+ * possible. If flushing, copy the remaining available input to next_out as
+ * stored blocks, if there is enough space.
+ */
+ unsigned len, left, have, last = 0;
+ unsigned used = s->strm->avail_in;
+ do {
+ /* Set len to the maximum size block that we can copy directly with the
+ * available input data and output space. Set left to how much of that
+ * would be copied from what's left in the window.
+ */
+ len = MAX_STORED; /* maximum deflate stored block length */
+ have = (s->bi_valid + 42) >> 3; /* number of header bytes */
+ if (s->strm->avail_out < have) /* need room for header */
+ break;
+ /* maximum stored block length that will fit in avail_out: */
+ have = s->strm->avail_out - have;
+ left = s->strstart - s->block_start; /* bytes left in window */
+ if (len > (ulg)left + s->strm->avail_in)
+ len = left + s->strm->avail_in; /* limit len to the input */
+ if (len > have)
+ len = have; /* limit len to the output */
+
+ /* If the stored block would be less than min_block in length, or if
+ * unable to copy all of the available input when flushing, then try
+ * copying to the window and the pending buffer instead. Also don't
+ * write an empty block when flushing -- deflate() does that.
+ */
+ if (len < min_block && ((len == 0 && flush != Z_FINISH) ||
+ flush == Z_NO_FLUSH ||
+ len != left + s->strm->avail_in))
+ break;
- fill_window(s);
- if (s->lookahead == 0 && flush == Z_NO_FLUSH) return need_more;
+ /* Make a dummy stored block in pending to get the header bytes,
+ * including any pending bits. This also updates the debugging counts.
+ */
+ last = flush == Z_FINISH && len == left + s->strm->avail_in ? 1 : 0;
+ _tr_stored_block(s, (char *)0, 0L, last);
+
+ /* Replace the lengths in the dummy stored block with len. */
+ s->pending_buf[s->pending - 4] = len;
+ s->pending_buf[s->pending - 3] = len >> 8;
+ s->pending_buf[s->pending - 2] = ~len;
+ s->pending_buf[s->pending - 1] = ~len >> 8;
+
+ /* Write the stored block header bytes. */
+ flush_pending(s->strm);
+
+#ifdef ZLIB_DEBUG
+ /* Update debugging counts for the data about to be copied. */
+ s->compressed_len += len << 3;
+ s->bits_sent += len << 3;
+#endif
- if (s->lookahead == 0) break; /* flush the current block */
+ /* Copy uncompressed bytes from the window to next_out. */
+ if (left) {
+ if (left > len)
+ left = len;
+ zmemcpy(s->strm->next_out, s->window + s->block_start, left);
+ s->strm->next_out += left;
+ s->strm->avail_out -= left;
+ s->strm->total_out += left;
+ s->block_start += left;
+ len -= left;
}
- Assert(s->block_start >= 0L, "block gone");
-
- s->strstart += s->lookahead;
- s->lookahead = 0;
-
- /* Emit a stored block if pending_buf will be full: */
- max_start = s->block_start + max_block_size;
- if (s->strstart == 0 || (ulg)s->strstart >= max_start) {
- /* strstart == 0 is possible when wraparound on 16-bit machine */
- s->lookahead = (uInt)(s->strstart - max_start);
- s->strstart = (uInt)max_start;
- FLUSH_BLOCK(s, 0);
+
+ /* Copy uncompressed bytes directly from next_in to next_out, updating
+ * the check value.
+ */
+ if (len) {
+ read_buf(s->strm, s->strm->next_out, len);
+ s->strm->next_out += len;
+ s->strm->avail_out -= len;
+ s->strm->total_out += len;
}
- /* Flush if we may have to slide, otherwise block_start may become
- * negative and the data will be gone:
+ } while (last == 0);
+
+ /* Update the sliding window with the last s->w_size bytes of the copied
+ * data, or append all of the copied data to the existing window if less
+ * than s->w_size bytes were copied. Also update the number of bytes to
+ * insert in the hash tables, in the event that deflateParams() switches to
+ * a non-zero compression level.
+ */
+ used -= s->strm->avail_in; /* number of input bytes directly copied */
+ if (used) {
+ /* If any input was used, then no unused input remains in the window,
+ * therefore s->block_start == s->strstart.
*/
- if (s->strstart - (uInt)s->block_start >= MAX_DIST(s)) {
- FLUSH_BLOCK(s, 0);
+ if (used >= s->w_size) { /* supplant the previous history */
+ s->matches = 2; /* clear hash */
+ zmemcpy(s->window, s->strm->next_in - s->w_size, s->w_size);
+ s->strstart = s->w_size;
}
+ else {
+ if (s->window_size - s->strstart <= used) {
+ /* Slide the window down. */
+ s->strstart -= s->w_size;
+ zmemcpy(s->window, s->window + s->w_size, s->strstart);
+ if (s->matches < 2)
+ s->matches++; /* add a pending slide_hash() */
+ }
+ zmemcpy(s->window + s->strstart, s->strm->next_in - used, used);
+ s->strstart += used;
+ }
+ s->block_start = s->strstart;
+ s->insert += MIN(used, s->w_size - s->insert);
}
- s->insert = 0;
- if (flush == Z_FINISH) {
- FLUSH_BLOCK(s, 1);
+ if (s->high_water < s->strstart)
+ s->high_water = s->strstart;
+
+ /* If the last block was written to next_out, then done. */
+ if (last)
return finish_done;
+
+ /* If flushing and all input has been consumed, then done. */
+ if (flush != Z_NO_FLUSH && flush != Z_FINISH &&
+ s->strm->avail_in == 0 && (long)s->strstart == s->block_start)
+ return block_done;
+
+ /* Fill the window with any remaining input. */
+ have = s->window_size - s->strstart - 1;
+ if (s->strm->avail_in > have && s->block_start >= (long)s->w_size) {
+ /* Slide the window down. */
+ s->block_start -= s->w_size;
+ s->strstart -= s->w_size;
+ zmemcpy(s->window, s->window + s->w_size, s->strstart);
+ if (s->matches < 2)
+ s->matches++; /* add a pending slide_hash() */
+ have += s->w_size; /* more space now */
}
- if ((long)s->strstart > s->block_start)
- FLUSH_BLOCK(s, 0);
- return block_done;
+ if (have > s->strm->avail_in)
+ have = s->strm->avail_in;
+ if (have) {
+ read_buf(s->strm, s->window + s->strstart, have);
+ s->strstart += have;
+ }
+ if (s->high_water < s->strstart)
+ s->high_water = s->strstart;
+
+ /* There was not enough avail_out to write a complete worthy or flushed
+ * stored block to next_out. Write a stored block to pending instead, if we
+ * have enough input for a worthy block, or if flushing and there is enough
+ * room for the remaining input as a stored block in the pending buffer.
+ */
+ have = (s->bi_valid + 42) >> 3; /* number of header bytes */
+ /* maximum stored block length that will fit in pending: */
+ have = MIN(s->pending_buf_size - have, MAX_STORED);
+ min_block = MIN(have, s->w_size);
+ left = s->strstart - s->block_start;
+ if (left >= min_block ||
+ ((left || flush == Z_FINISH) && flush != Z_NO_FLUSH &&
+ s->strm->avail_in == 0 && left <= have)) {
+ len = MIN(left, have);
+ last = flush == Z_FINISH && s->strm->avail_in == 0 &&
+ len == left ? 1 : 0;
+ _tr_stored_block(s, (charf *)s->window + s->block_start, len, last);
+ s->block_start += len;
+ flush_pending(s->strm);
+ }
+
+ /* We've done all we can with the available input and output. */
+ return last ? finish_started : need_more;
}
/* ===========================================================================
@@ -1892,7 +2088,7 @@ local block_state deflate_rle(s, flush)
prev == *++scan && prev == *++scan &&
prev == *++scan && prev == *++scan &&
scan < strend);
- s->match_length = MAX_MATCH - (int)(strend - scan);
+ s->match_length = MAX_MATCH - (uInt)(strend - scan);
if (s->match_length > s->lookahead)
s->match_length = s->lookahead;
}
diff --git a/modules/zlib/src/deflate.h b/modules/zlib/src/deflate.h
index ce0299edd..23ecdd312 100644
--- a/modules/zlib/src/deflate.h
+++ b/modules/zlib/src/deflate.h
@@ -1,5 +1,5 @@
/* deflate.h -- internal compression state
- * Copyright (C) 1995-2012 Jean-loup Gailly
+ * Copyright (C) 1995-2016 Jean-loup Gailly
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -51,13 +51,16 @@
#define Buf_size 16
/* size of bit buffer in bi_buf */
-#define INIT_STATE 42
-#define EXTRA_STATE 69
-#define NAME_STATE 73
-#define COMMENT_STATE 91
-#define HCRC_STATE 103
-#define BUSY_STATE 113
-#define FINISH_STATE 666
+#define INIT_STATE 42 /* zlib header -> BUSY_STATE */
+#ifdef GZIP
+# define GZIP_STATE 57 /* gzip header -> BUSY_STATE | EXTRA_STATE */
+#endif
+#define EXTRA_STATE 69 /* gzip extra block -> NAME_STATE */
+#define NAME_STATE 73 /* gzip file name -> COMMENT_STATE */
+#define COMMENT_STATE 91 /* gzip comment -> HCRC_STATE */
+#define HCRC_STATE 103 /* gzip header CRC -> BUSY_STATE */
+#define BUSY_STATE 113 /* deflate -> FINISH_STATE */
+#define FINISH_STATE 666 /* stream complete */
/* Stream status */
@@ -83,7 +86,7 @@ typedef struct static_tree_desc_s static_tree_desc;
typedef struct tree_desc_s {
ct_data *dyn_tree; /* the dynamic tree */
int max_code; /* largest code with non zero frequency */
- static_tree_desc *stat_desc; /* the corresponding static tree */
+ const static_tree_desc *stat_desc; /* the corresponding static tree */
} FAR tree_desc;
typedef ush Pos;
@@ -100,10 +103,10 @@ typedef struct internal_state {
Bytef *pending_buf; /* output still pending */
ulg pending_buf_size; /* size of pending_buf */
Bytef *pending_out; /* next pending byte to output to the stream */
- uInt pending; /* nb of bytes in the pending buffer */
+ ulg pending; /* nb of bytes in the pending buffer */
int wrap; /* bit 0 true for zlib, bit 1 true for gzip */
gz_headerp gzhead; /* gzip header information to write */
- uInt gzindex; /* where in extra, name, or comment */
+ ulg gzindex; /* where in extra, name, or comment */
Byte method; /* can only be DEFLATED */
int last_flush; /* value of flush param for previous deflate call */
@@ -249,7 +252,7 @@ typedef struct internal_state {
uInt matches; /* number of string matches in current block */
uInt insert; /* bytes at end of window left to insert */
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
ulg compressed_len; /* total bit length of compressed file mod 2^32 */
ulg bits_sent; /* bit length of compressed data sent mod 2^32 */
#endif
@@ -275,7 +278,7 @@ typedef struct internal_state {
/* Output a byte on the stream.
* IN assertion: there is enough room in pending_buf.
*/
-#define put_byte(s, c) {s->pending_buf[s->pending++] = (c);}
+#define put_byte(s, c) {s->pending_buf[s->pending++] = (Bytef)(c);}
#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)
@@ -309,7 +312,7 @@ void ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf,
* used.
*/
-#ifndef DEBUG
+#ifndef ZLIB_DEBUG
/* Inline versions of _tr_tally for speed: */
#if defined(GEN_TREES_H) || !defined(STDC)
@@ -328,8 +331,8 @@ void ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf,
flush = (s->last_lit == s->lit_bufsize-1); \
}
# define _tr_tally_dist(s, distance, length, flush) \
- { uch len = (length); \
- ush dist = (distance); \
+ { uch len = (uch)(length); \
+ ush dist = (ush)(distance); \
s->d_buf[s->last_lit] = dist; \
s->l_buf[s->last_lit++] = len; \
dist--; \
diff --git a/modules/zlib/src/gzguts.h b/modules/zlib/src/gzguts.h
index d87659d03..990a4d251 100644
--- a/modules/zlib/src/gzguts.h
+++ b/modules/zlib/src/gzguts.h
@@ -1,5 +1,5 @@
/* gzguts.h -- zlib internal header definitions for gz* operations
- * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013 Mark Adler
+ * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013, 2016 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -25,6 +25,10 @@
# include <stdlib.h>
# include <limits.h>
#endif
+
+#ifndef _POSIX_SOURCE
+# define _POSIX_SOURCE
+#endif
#include <fcntl.h>
#ifdef _WIN32
@@ -35,6 +39,10 @@
# include <io.h>
#endif
+#if defined(_WIN32) || defined(__CYGWIN__)
+# define WIDECHAR
+#endif
+
#ifdef WINAPI_FAMILY
# define open _open
# define read _read
@@ -95,18 +103,19 @@
# endif
#endif
-/* unlike snprintf (which is required in C99, yet still not supported by
- Microsoft more than a decade later!), _snprintf does not guarantee null
- termination of the result -- however this is only used in gzlib.c where
+/* unlike snprintf (which is required in C99), _snprintf does not guarantee
+ null termination of the result -- however this is only used in gzlib.c where
the result is assured to fit in the space provided */
-#ifdef _MSC_VER
+#if defined(_MSC_VER) && _MSC_VER < 1900
# define snprintf _snprintf
#endif
#ifndef local
# define local static
#endif
-/* compile with -Dlocal if your debugger can't find static symbols */
+/* since "static" is used to mean two completely different things in C, we
+ define "local" for the non-static meaning of "static", for readability
+ (compile with -Dlocal if your debugger can't find static symbols) */
/* gz* functions always use library allocation functions */
#ifndef STDC
@@ -170,7 +179,7 @@ typedef struct {
char *path; /* path or fd for error messages */
unsigned size; /* buffer size, zero if not allocated yet */
unsigned want; /* requested buffer size, default is GZBUFSIZE */
- unsigned char *in; /* input buffer */
+ unsigned char *in; /* input buffer (double-sized when writing) */
unsigned char *out; /* output buffer (double-sized when reading) */
int direct; /* 0 if processing gzip, 1 if transparent */
/* just for reading */
diff --git a/modules/zlib/src/gzlib.c b/modules/zlib/src/gzlib.c
index fae202ef8..4105e6aff 100644
--- a/modules/zlib/src/gzlib.c
+++ b/modules/zlib/src/gzlib.c
@@ -1,11 +1,11 @@
/* gzlib.c -- zlib functions common to reading and writing gzip files
- * Copyright (C) 2004, 2010, 2011, 2012, 2013 Mark Adler
+ * Copyright (C) 2004-2017 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
#include "gzguts.h"
-#if defined(_WIN32) && !defined(__BORLANDC__)
+#if defined(_WIN32) && !defined(__BORLANDC__) && !defined(__MINGW32__)
# define LSEEK _lseeki64
#else
#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0
@@ -94,7 +94,7 @@ local gzFile gz_open(path, fd, mode)
const char *mode;
{
gz_statep state;
- size_t len;
+ z_size_t len;
int oflag;
#ifdef O_CLOEXEC
int cloexec = 0;
@@ -188,10 +188,10 @@ local gzFile gz_open(path, fd, mode)
}
/* save the path name for error messages */
-#ifdef _WIN32
+#ifdef WIDECHAR
if (fd == -2) {
len = wcstombs(NULL, path, 0);
- if (len == (size_t)-1)
+ if (len == (z_size_t)-1)
len = 0;
}
else
@@ -202,7 +202,7 @@ local gzFile gz_open(path, fd, mode)
free(state);
return NULL;
}
-#ifdef _WIN32
+#ifdef WIDECHAR
if (fd == -2)
if (len)
wcstombs(state->path, path, len + 1);
@@ -211,7 +211,7 @@ local gzFile gz_open(path, fd, mode)
else
#endif
#if !defined(NO_snprintf) && !defined(NO_vsnprintf)
- snprintf(state->path, len + 1, "%s", (const char *)path);
+ (void)snprintf(state->path, len + 1, "%s", (const char *)path);
#else
strcpy(state->path, path);
#endif
@@ -239,7 +239,7 @@ local gzFile gz_open(path, fd, mode)
/* open the file with the appropriate flags (or just use fd) */
state->fd = fd > -1 ? fd : (
-#ifdef _WIN32
+#ifdef WIDECHAR
fd == -2 ? _wopen(path, oflag, 0666) :
#endif
open((const char *)path, oflag, 0666));
@@ -248,8 +248,10 @@ local gzFile gz_open(path, fd, mode)
free(state);
return NULL;
}
- if (state->mode == GZ_APPEND)
+ if (state->mode == GZ_APPEND) {
+ LSEEK(state->fd, 0, SEEK_END); /* so gzoffset() is correct */
state->mode = GZ_WRITE; /* simplify later checks */
+ }
/* save the current position for rewinding (only if reading) */
if (state->mode == GZ_READ) {
@@ -291,7 +293,7 @@ gzFile ZEXPORT gzdopen(fd, mode)
if (fd == -1 || (path = (char *)malloc(7 + 3 * sizeof(int))) == NULL)
return NULL;
#if !defined(NO_snprintf) && !defined(NO_vsnprintf)
- snprintf(path, 7 + 3 * sizeof(int), "<fd:%d>", fd); /* for debugging */
+ (void)snprintf(path, 7 + 3 * sizeof(int), "<fd:%d>", fd);
#else
sprintf(path, "<fd:%d>", fd); /* for debugging */
#endif
@@ -301,7 +303,7 @@ gzFile ZEXPORT gzdopen(fd, mode)
}
/* -- see zlib.h -- */
-#ifdef _WIN32
+#ifdef WIDECHAR
gzFile ZEXPORT gzopen_w(path, mode)
const wchar_t *path;
const char *mode;
@@ -329,6 +331,8 @@ int ZEXPORT gzbuffer(file, size)
return -1;
/* check and set requested size */
+ if ((size << 1) < size)
+ return -1; /* need to be able to double it */
if (size < 2)
size = 2; /* need two bytes to check magic header */
state->want = size;
@@ -604,14 +608,13 @@ void ZLIB_INTERNAL gz_error(state, err, msg)
return;
}
#if !defined(NO_snprintf) && !defined(NO_vsnprintf)
- snprintf(state->msg, strlen(state->path) + strlen(msg) + 3,
- "%s%s%s", state->path, ": ", msg);
+ (void)snprintf(state->msg, strlen(state->path) + strlen(msg) + 3,
+ "%s%s%s", state->path, ": ", msg);
#else
strcpy(state->msg, state->path);
strcat(state->msg, ": ");
strcat(state->msg, msg);
#endif
- return;
}
#ifndef INT_MAX
diff --git a/modules/zlib/src/gzread.c b/modules/zlib/src/gzread.c
index bf4538eb2..956b91ea7 100644
--- a/modules/zlib/src/gzread.c
+++ b/modules/zlib/src/gzread.c
@@ -1,5 +1,5 @@
/* gzread.c -- zlib functions for reading gzip files
- * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013 Mark Adler
+ * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013, 2016 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -12,6 +12,7 @@ local int gz_look OF((gz_statep));
local int gz_decomp OF((gz_statep));
local int gz_fetch OF((gz_statep));
local int gz_skip OF((gz_statep, z_off64_t));
+local z_size_t gz_read OF((gz_statep, voidp, z_size_t));
/* Use read() to load a buffer -- return -1 on error, otherwise 0. Read from
state->fd, and update state->eof, state->err, and state->msg as appropriate.
@@ -24,13 +25,17 @@ local int gz_load(state, buf, len, have)
unsigned *have;
{
int ret;
+ unsigned get, max = ((unsigned)-1 >> 2) + 1;
*have = 0;
do {
- ret = read(state->fd, buf + *have, len - *have);
+ get = len - *have;
+ if (get > max)
+ get = max;
+ ret = read(state->fd, buf + *have, get);
if (ret <= 0)
break;
- *have += ret;
+ *have += (unsigned)ret;
} while (*have < len);
if (ret < 0) {
gz_error(state, Z_ERRNO, zstrerror());
@@ -94,10 +99,8 @@ local int gz_look(state)
state->in = (unsigned char *)malloc(state->want);
state->out = (unsigned char *)malloc(state->want << 1);
if (state->in == NULL || state->out == NULL) {
- if (state->out != NULL)
- free(state->out);
- if (state->in != NULL)
- free(state->in);
+ free(state->out);
+ free(state->in);
gz_error(state, Z_MEM_ERROR, "out of memory");
return -1;
}
@@ -284,33 +287,17 @@ local int gz_skip(state, len)
return 0;
}
-/* -- see zlib.h -- */
-int ZEXPORT gzread(file, buf, len)
- gzFile file;
+/* Read len bytes into buf from file, or less than len up to the end of the
+ input. Return the number of bytes read. If zero is returned, either the
+ end of file was reached, or there was an error. state->err must be
+ consulted in that case to determine which. */
+local z_size_t gz_read(state, buf, len)
+ gz_statep state;
voidp buf;
- unsigned len;
+ z_size_t len;
{
- unsigned got, n;
- gz_statep state;
- z_streamp strm;
-
- /* get internal structure */
- if (file == NULL)
- return -1;
- state = (gz_statep)file;
- strm = &(state->strm);
-
- /* check that we're reading and that there's no (serious) error */
- if (state->mode != GZ_READ ||
- (state->err != Z_OK && state->err != Z_BUF_ERROR))
- return -1;
-
- /* since an int is returned, make sure len fits in one, otherwise return
- with an error (this avoids the flaw in the interface) */
- if ((int)len < 0) {
- gz_error(state, Z_DATA_ERROR, "requested length does not fit in int");
- return -1;
- }
+ z_size_t got;
+ unsigned n;
/* if len is zero, avoid unnecessary operations */
if (len == 0)
@@ -320,32 +307,38 @@ int ZEXPORT gzread(file, buf, len)
if (state->seek) {
state->seek = 0;
if (gz_skip(state, state->skip) == -1)
- return -1;
+ return 0;
}
/* get len bytes to buf, or less than len if at the end */
got = 0;
do {
+ /* set n to the maximum amount of len that fits in an unsigned int */
+ n = -1;
+ if (n > len)
+ n = len;
+
/* first just try copying data from the output buffer */
if (state->x.have) {
- n = state->x.have > len ? len : state->x.have;
+ if (state->x.have < n)
+ n = state->x.have;
memcpy(buf, state->x.next, n);
state->x.next += n;
state->x.have -= n;
}
/* output buffer empty -- return if we're at the end of the input */
- else if (state->eof && strm->avail_in == 0) {
+ else if (state->eof && state->strm.avail_in == 0) {
state->past = 1; /* tried to read past end */
break;
}
/* need output data -- for small len or new stream load up our output
buffer */
- else if (state->how == LOOK || len < (state->size << 1)) {
+ else if (state->how == LOOK || n < (state->size << 1)) {
/* get more output, looking for header if required */
if (gz_fetch(state) == -1)
- return -1;
+ return 0;
continue; /* no progress yet -- go back to copy above */
/* the copy above assures that we will leave with space in the
output buffer, allowing at least one gzungetc() to succeed */
@@ -353,16 +346,16 @@ int ZEXPORT gzread(file, buf, len)
/* large len -- read directly into user buffer */
else if (state->how == COPY) { /* read directly */
- if (gz_load(state, (unsigned char *)buf, len, &n) == -1)
- return -1;
+ if (gz_load(state, (unsigned char *)buf, n, &n) == -1)
+ return 0;
}
/* large len -- decompress directly into user buffer */
else { /* state->how == GZIP */
- strm->avail_out = len;
- strm->next_out = (unsigned char *)buf;
+ state->strm.avail_out = n;
+ state->strm.next_out = (unsigned char *)buf;
if (gz_decomp(state) == -1)
- return -1;
+ return 0;
n = state->x.have;
state->x.have = 0;
}
@@ -374,8 +367,75 @@ int ZEXPORT gzread(file, buf, len)
state->x.pos += n;
} while (len);
- /* return number of bytes read into user buffer (will fit in int) */
- return (int)got;
+ /* return number of bytes read into user buffer */
+ return got;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzread(file, buf, len)
+ gzFile file;
+ voidp buf;
+ unsigned len;
+{
+ gz_statep state;
+
+ /* get internal structure */
+ if (file == NULL)
+ return -1;
+ state = (gz_statep)file;
+
+ /* check that we're reading and that there's no (serious) error */
+ if (state->mode != GZ_READ ||
+ (state->err != Z_OK && state->err != Z_BUF_ERROR))
+ return -1;
+
+ /* since an int is returned, make sure len fits in one, otherwise return
+ with an error (this avoids a flaw in the interface) */
+ if ((int)len < 0) {
+ gz_error(state, Z_STREAM_ERROR, "request does not fit in an int");
+ return -1;
+ }
+
+ /* read len or fewer bytes to buf */
+ len = gz_read(state, buf, len);
+
+ /* check for an error */
+ if (len == 0 && state->err != Z_OK && state->err != Z_BUF_ERROR)
+ return -1;
+
+ /* return the number of bytes read (this is assured to fit in an int) */
+ return (int)len;
+}
+
+/* -- see zlib.h -- */
+z_size_t ZEXPORT gzfread(buf, size, nitems, file)
+ voidp buf;
+ z_size_t size;
+ z_size_t nitems;
+ gzFile file;
+{
+ z_size_t len;
+ gz_statep state;
+
+ /* get internal structure */
+ if (file == NULL)
+ return 0;
+ state = (gz_statep)file;
+
+ /* check that we're reading and that there's no (serious) error */
+ if (state->mode != GZ_READ ||
+ (state->err != Z_OK && state->err != Z_BUF_ERROR))
+ return 0;
+
+ /* compute bytes to read -- error on overflow */
+ len = nitems * size;
+ if (size && len / size != nitems) {
+ gz_error(state, Z_STREAM_ERROR, "request does not fit in a size_t");
+ return 0;
+ }
+
+ /* read len or fewer bytes to buf, return the number of full items read */
+ return len ? gz_read(state, buf, len) / size : 0;
}
/* -- see zlib.h -- */
@@ -408,8 +468,8 @@ int ZEXPORT gzgetc(file)
return *(state->x.next)++;
}
- /* nothing there -- try gzread() */
- ret = gzread(file, buf, 1);
+ /* nothing there -- try gz_read() */
+ ret = gz_read(state, buf, 1);
return ret < 1 ? -1 : buf[0];
}
@@ -451,7 +511,7 @@ int ZEXPORT gzungetc(c, file)
if (state->x.have == 0) {
state->x.have = 1;
state->x.next = state->out + (state->size << 1) - 1;
- state->x.next[0] = c;
+ state->x.next[0] = (unsigned char)c;
state->x.pos--;
state->past = 0;
return c;
@@ -473,7 +533,7 @@ int ZEXPORT gzungetc(c, file)
}
state->x.have++;
state->x.next--;
- state->x.next[0] = c;
+ state->x.next[0] = (unsigned char)c;
state->x.pos--;
state->past = 0;
return c;
diff --git a/modules/zlib/src/gzwrite.c b/modules/zlib/src/gzwrite.c
index aa767fbf6..c7b5651d7 100644
--- a/modules/zlib/src/gzwrite.c
+++ b/modules/zlib/src/gzwrite.c
@@ -1,5 +1,5 @@
/* gzwrite.c -- zlib functions for writing gzip files
- * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013 Mark Adler
+ * Copyright (C) 2004-2017 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -9,17 +9,19 @@
local int gz_init OF((gz_statep));
local int gz_comp OF((gz_statep, int));
local int gz_zero OF((gz_statep, z_off64_t));
+local z_size_t gz_write OF((gz_statep, voidpc, z_size_t));
/* Initialize state for writing a gzip file. Mark initialization by setting
- state->size to non-zero. Return -1 on failure or 0 on success. */
+ state->size to non-zero. Return -1 on a memory allocation failure, or 0 on
+ success. */
local int gz_init(state)
gz_statep state;
{
int ret;
z_streamp strm = &(state->strm);
- /* allocate input buffer */
- state->in = (unsigned char *)malloc(state->want);
+ /* allocate input buffer (double size for gzprintf) */
+ state->in = (unsigned char *)malloc(state->want << 1);
if (state->in == NULL) {
gz_error(state, Z_MEM_ERROR, "out of memory");
return -1;
@@ -47,6 +49,7 @@ local int gz_init(state)
gz_error(state, Z_MEM_ERROR, "out of memory");
return -1;
}
+ strm->next_in = NULL;
}
/* mark state as initialized */
@@ -62,17 +65,17 @@ local int gz_init(state)
}
/* Compress whatever is at avail_in and next_in and write to the output file.
- Return -1 if there is an error writing to the output file, otherwise 0.
- flush is assumed to be a valid deflate() flush value. If flush is Z_FINISH,
- then the deflate() state is reset to start a new gzip stream. If gz->direct
- is true, then simply write to the output file without compressing, and
- ignore flush. */
+ Return -1 if there is an error writing to the output file or if gz_init()
+ fails to allocate memory, otherwise 0. flush is assumed to be a valid
+ deflate() flush value. If flush is Z_FINISH, then the deflate() state is
+ reset to start a new gzip stream. If gz->direct is true, then simply write
+ to the output file without compressing, and ignore flush. */
local int gz_comp(state, flush)
gz_statep state;
int flush;
{
- int ret, got;
- unsigned have;
+ int ret, writ;
+ unsigned have, put, max = ((unsigned)-1 >> 2) + 1;
z_streamp strm = &(state->strm);
/* allocate memory if this is the first time through */
@@ -81,12 +84,16 @@ local int gz_comp(state, flush)
/* write directly if requested */
if (state->direct) {
- got = write(state->fd, strm->next_in, strm->avail_in);
- if (got < 0 || (unsigned)got != strm->avail_in) {
- gz_error(state, Z_ERRNO, zstrerror());
- return -1;
+ while (strm->avail_in) {
+ put = strm->avail_in > max ? max : strm->avail_in;
+ writ = write(state->fd, strm->next_in, put);
+ if (writ < 0) {
+ gz_error(state, Z_ERRNO, zstrerror());
+ return -1;
+ }
+ strm->avail_in -= (unsigned)writ;
+ strm->next_in += writ;
}
- strm->avail_in = 0;
return 0;
}
@@ -97,17 +104,21 @@ local int gz_comp(state, flush)
doing Z_FINISH then don't write until we get to Z_STREAM_END */
if (strm->avail_out == 0 || (flush != Z_NO_FLUSH &&
(flush != Z_FINISH || ret == Z_STREAM_END))) {
- have = (unsigned)(strm->next_out - state->x.next);
- if (have && ((got = write(state->fd, state->x.next, have)) < 0 ||
- (unsigned)got != have)) {
- gz_error(state, Z_ERRNO, zstrerror());
- return -1;
+ while (strm->next_out > state->x.next) {
+ put = strm->next_out - state->x.next > (int)max ? max :
+ (unsigned)(strm->next_out - state->x.next);
+ writ = write(state->fd, state->x.next, put);
+ if (writ < 0) {
+ gz_error(state, Z_ERRNO, zstrerror());
+ return -1;
+ }
+ state->x.next += writ;
}
if (strm->avail_out == 0) {
strm->avail_out = state->size;
strm->next_out = state->out;
+ state->x.next = state->out;
}
- state->x.next = strm->next_out;
}
/* compress */
@@ -129,7 +140,8 @@ local int gz_comp(state, flush)
return 0;
}
-/* Compress len zeros to output. Return -1 on error, 0 on success. */
+/* Compress len zeros to output. Return -1 on a write error or memory
+ allocation failure by gz_comp(), or 0 on success. */
local int gz_zero(state, len)
gz_statep state;
z_off64_t len;
@@ -161,32 +173,14 @@ local int gz_zero(state, len)
return 0;
}
-/* -- see zlib.h -- */
-int ZEXPORT gzwrite(file, buf, len)
- gzFile file;
+/* Write len bytes from buf to file. Return the number of bytes written. If
+ the returned value is less than len, then there was an error. */
+local z_size_t gz_write(state, buf, len)
+ gz_statep state;
voidpc buf;
- unsigned len;
+ z_size_t len;
{
- unsigned put = len;
- gz_statep state;
- z_streamp strm;
-
- /* get internal structure */
- if (file == NULL)
- return 0;
- state = (gz_statep)file;
- strm = &(state->strm);
-
- /* check that we're writing and that there's no error */
- if (state->mode != GZ_WRITE || state->err != Z_OK)
- return 0;
-
- /* since an int is returned, make sure len fits in one, otherwise return
- with an error (this avoids the flaw in the interface) */
- if ((int)len < 0) {
- gz_error(state, Z_DATA_ERROR, "requested length does not fit in int");
- return 0;
- }
+ z_size_t put = len;
/* if len is zero, avoid unnecessary operations */
if (len == 0)
@@ -209,14 +203,15 @@ int ZEXPORT gzwrite(file, buf, len)
do {
unsigned have, copy;
- if (strm->avail_in == 0)
- strm->next_in = state->in;
- have = (unsigned)((strm->next_in + strm->avail_in) - state->in);
+ if (state->strm.avail_in == 0)
+ state->strm.next_in = state->in;
+ have = (unsigned)((state->strm.next_in + state->strm.avail_in) -
+ state->in);
copy = state->size - have;
if (copy > len)
copy = len;
memcpy(state->in + have, buf, copy);
- strm->avail_in += copy;
+ state->strm.avail_in += copy;
state->x.pos += copy;
buf = (const char *)buf + copy;
len -= copy;
@@ -226,19 +221,83 @@ int ZEXPORT gzwrite(file, buf, len)
}
else {
/* consume whatever's left in the input buffer */
- if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
+ if (state->strm.avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
return 0;
/* directly compress user buffer to file */
- strm->avail_in = len;
- strm->next_in = (z_const Bytef *)buf;
- state->x.pos += len;
- if (gz_comp(state, Z_NO_FLUSH) == -1)
- return 0;
+ state->strm.next_in = (z_const Bytef *)buf;
+ do {
+ unsigned n = (unsigned)-1;
+ if (n > len)
+ n = len;
+ state->strm.avail_in = n;
+ state->x.pos += n;
+ if (gz_comp(state, Z_NO_FLUSH) == -1)
+ return 0;
+ len -= n;
+ } while (len);
+ }
+
+ /* input was all buffered or compressed */
+ return put;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzwrite(file, buf, len)
+ gzFile file;
+ voidpc buf;
+ unsigned len;
+{
+ gz_statep state;
+
+ /* get internal structure */
+ if (file == NULL)
+ return 0;
+ state = (gz_statep)file;
+
+ /* check that we're writing and that there's no error */
+ if (state->mode != GZ_WRITE || state->err != Z_OK)
+ return 0;
+
+ /* since an int is returned, make sure len fits in one, otherwise return
+ with an error (this avoids a flaw in the interface) */
+ if ((int)len < 0) {
+ gz_error(state, Z_DATA_ERROR, "requested length does not fit in int");
+ return 0;
+ }
+
+ /* write len bytes from buf (the return value will fit in an int) */
+ return (int)gz_write(state, buf, len);
+}
+
+/* -- see zlib.h -- */
+z_size_t ZEXPORT gzfwrite(buf, size, nitems, file)
+ voidpc buf;
+ z_size_t size;
+ z_size_t nitems;
+ gzFile file;
+{
+ z_size_t len;
+ gz_statep state;
+
+ /* get internal structure */
+ if (file == NULL)
+ return 0;
+ state = (gz_statep)file;
+
+ /* check that we're writing and that there's no error */
+ if (state->mode != GZ_WRITE || state->err != Z_OK)
+ return 0;
+
+ /* compute bytes to read -- error on overflow */
+ len = nitems * size;
+ if (size && len / size != nitems) {
+ gz_error(state, Z_STREAM_ERROR, "request does not fit in a size_t");
+ return 0;
}
- /* input was all buffered or compressed (put will fit in int) */
- return (int)put;
+ /* write len bytes to buf, return the number of full items written */
+ return len ? gz_write(state, buf, len) / size : 0;
}
/* -- see zlib.h -- */
@@ -275,7 +334,7 @@ int ZEXPORT gzputc(file, c)
strm->next_in = state->in;
have = (unsigned)((strm->next_in + strm->avail_in) - state->in);
if (have < state->size) {
- state->in[have] = c;
+ state->in[have] = (unsigned char)c;
strm->avail_in++;
state->x.pos++;
return c & 0xff;
@@ -283,8 +342,8 @@ int ZEXPORT gzputc(file, c)
}
/* no room in buffer or not initialized, use gz_write() */
- buf[0] = c;
- if (gzwrite(file, buf, 1) != 1)
+ buf[0] = (unsigned char)c;
+ if (gz_write(state, buf, 1) != 1)
return -1;
return c & 0xff;
}
@@ -295,11 +354,21 @@ int ZEXPORT gzputs(file, str)
const char *str;
{
int ret;
- unsigned len;
+ z_size_t len;
+ gz_statep state;
+
+ /* get internal structure */
+ if (file == NULL)
+ return -1;
+ state = (gz_statep)file;
+
+ /* check that we're writing and that there's no error */
+ if (state->mode != GZ_WRITE || state->err != Z_OK)
+ return -1;
/* write string */
- len = (unsigned)strlen(str);
- ret = gzwrite(file, str, len);
+ len = strlen(str);
+ ret = gz_write(state, str, len);
return ret == 0 && len != 0 ? -1 : ret;
}
@@ -309,63 +378,73 @@ int ZEXPORT gzputs(file, str)
/* -- see zlib.h -- */
int ZEXPORTVA gzvprintf(gzFile file, const char *format, va_list va)
{
- int size, len;
+ int len;
+ unsigned left;
+ char *next;
gz_statep state;
z_streamp strm;
/* get internal structure */
if (file == NULL)
- return -1;
+ return Z_STREAM_ERROR;
state = (gz_statep)file;
strm = &(state->strm);
/* check that we're writing and that there's no error */
if (state->mode != GZ_WRITE || state->err != Z_OK)
- return 0;
+ return Z_STREAM_ERROR;
/* make sure we have some buffer space */
if (state->size == 0 && gz_init(state) == -1)
- return 0;
+ return state->err;
/* check for seek request */
if (state->seek) {
state->seek = 0;
if (gz_zero(state, state->skip) == -1)
- return 0;
+ return state->err;
}
- /* consume whatever's left in the input buffer */
- if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
- return 0;
-
- /* do the printf() into the input buffer, put length in len */
- size = (int)(state->size);
- state->in[size - 1] = 0;
+ /* do the printf() into the input buffer, put length in len -- the input
+ buffer is double-sized just for this function, so there is guaranteed to
+ be state->size bytes available after the current contents */
+ if (strm->avail_in == 0)
+ strm->next_in = state->in;
+ next = (char *)(state->in + (strm->next_in - state->in) + strm->avail_in);
+ next[state->size - 1] = 0;
#ifdef NO_vsnprintf
# ifdef HAS_vsprintf_void
- (void)vsprintf((char *)(state->in), format, va);
- for (len = 0; len < size; len++)
- if (state->in[len] == 0) break;
+ (void)vsprintf(next, format, va);
+ for (len = 0; len < state->size; len++)
+ if (next[len] == 0) break;
# else
- len = vsprintf((char *)(state->in), format, va);
+ len = vsprintf(next, format, va);
# endif
#else
# ifdef HAS_vsnprintf_void
- (void)vsnprintf((char *)(state->in), size, format, va);
- len = strlen((char *)(state->in));
+ (void)vsnprintf(next, state->size, format, va);
+ len = strlen(next);
# else
- len = vsnprintf((char *)(state->in), size, format, va);
+ len = vsnprintf(next, state->size, format, va);
# endif
#endif
/* check that printf() results fit in buffer */
- if (len <= 0 || len >= (int)size || state->in[size - 1] != 0)
+ if (len == 0 || (unsigned)len >= state->size || next[state->size - 1] != 0)
return 0;
- /* update buffer and position, defer compression until needed */
- strm->avail_in = (unsigned)len;
- strm->next_in = state->in;
+ /* update buffer and position, compress first half if past that */
+ strm->avail_in += (unsigned)len;
state->x.pos += len;
+ if (strm->avail_in >= state->size) {
+ left = strm->avail_in - state->size;
+ strm->avail_in = state->size;
+ if (gz_comp(state, Z_NO_FLUSH) == -1)
+ return state->err;
+ memcpy(state->in, state->in + state->size, left);
+ strm->next_in = state->in;
+ strm->avail_in = left;
+ }
return len;
}
@@ -390,73 +469,82 @@ int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
a11, a12, a13, a14, a15, a16, a17, a18, a19, a20;
{
- int size, len;
+ unsigned len, left;
+ char *next;
gz_statep state;
z_streamp strm;
/* get internal structure */
if (file == NULL)
- return -1;
+ return Z_STREAM_ERROR;
state = (gz_statep)file;
strm = &(state->strm);
/* check that can really pass pointer in ints */
if (sizeof(int) != sizeof(void *))
- return 0;
+ return Z_STREAM_ERROR;
/* check that we're writing and that there's no error */
if (state->mode != GZ_WRITE || state->err != Z_OK)
- return 0;
+ return Z_STREAM_ERROR;
/* make sure we have some buffer space */
if (state->size == 0 && gz_init(state) == -1)
- return 0;
+ return state->error;
/* check for seek request */
if (state->seek) {
state->seek = 0;
if (gz_zero(state, state->skip) == -1)
- return 0;
+ return state->error;
}
- /* consume whatever's left in the input buffer */
- if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
- return 0;
-
- /* do the printf() into the input buffer, put length in len */
- size = (int)(state->size);
- state->in[size - 1] = 0;
+ /* do the printf() into the input buffer, put length in len -- the input
+ buffer is double-sized just for this function, so there is guaranteed to
+ be state->size bytes available after the current contents */
+ if (strm->avail_in == 0)
+ strm->next_in = state->in;
+ next = (char *)(strm->next_in + strm->avail_in);
+ next[state->size - 1] = 0;
#ifdef NO_snprintf
# ifdef HAS_sprintf_void
- sprintf((char *)(state->in), format, a1, a2, a3, a4, a5, a6, a7, a8,
- a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
+ sprintf(next, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12,
+ a13, a14, a15, a16, a17, a18, a19, a20);
for (len = 0; len < size; len++)
- if (state->in[len] == 0) break;
+ if (next[len] == 0)
+ break;
# else
- len = sprintf((char *)(state->in), format, a1, a2, a3, a4, a5, a6, a7, a8,
- a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
+ len = sprintf(next, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11,
+ a12, a13, a14, a15, a16, a17, a18, a19, a20);
# endif
#else
# ifdef HAS_snprintf_void
- snprintf((char *)(state->in), size, format, a1, a2, a3, a4, a5, a6, a7, a8,
- a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
- len = strlen((char *)(state->in));
+ snprintf(next, state->size, format, a1, a2, a3, a4, a5, a6, a7, a8, a9,
+ a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
+ len = strlen(next);
# else
- len = snprintf((char *)(state->in), size, format, a1, a2, a3, a4, a5, a6,
- a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18,
- a19, a20);
+ len = snprintf(next, state->size, format, a1, a2, a3, a4, a5, a6, a7, a8,
+ a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
# endif
#endif
/* check that printf() results fit in buffer */
- if (len <= 0 || len >= (int)size || state->in[size - 1] != 0)
+ if (len == 0 || len >= state->size || next[state->size - 1] != 0)
return 0;
- /* update buffer and position, defer compression until needed */
- strm->avail_in = (unsigned)len;
- strm->next_in = state->in;
+ /* update buffer and position, compress first half if past that */
+ strm->avail_in += len;
state->x.pos += len;
- return len;
+ if (strm->avail_in >= state->size) {
+ left = strm->avail_in - state->size;
+ strm->avail_in = state->size;
+ if (gz_comp(state, Z_NO_FLUSH) == -1)
+ return state->err;
+ memcpy(state->in, state->in + state->size, left);
+ strm->next_in = state->in;
+ strm->avail_in = left;
+ }
+ return (int)len;
}
#endif
@@ -470,7 +558,7 @@ int ZEXPORT gzflush(file, flush)
/* get internal structure */
if (file == NULL)
- return -1;
+ return Z_STREAM_ERROR;
state = (gz_statep)file;
/* check that we're writing and that there's no error */
@@ -485,11 +573,11 @@ int ZEXPORT gzflush(file, flush)
if (state->seek) {
state->seek = 0;
if (gz_zero(state, state->skip) == -1)
- return -1;
+ return state->err;
}
/* compress remaining data with requested flush */
- gz_comp(state, flush);
+ (void)gz_comp(state, flush);
return state->err;
}
@@ -520,13 +608,13 @@ int ZEXPORT gzsetparams(file, level, strategy)
if (state->seek) {
state->seek = 0;
if (gz_zero(state, state->skip) == -1)
- return -1;
+ return state->err;
}
/* change compression parameters for subsequent input */
if (state->size) {
/* flush previous input with previous parameters before changing */
- if (strm->avail_in && gz_comp(state, Z_PARTIAL_FLUSH) == -1)
+ if (strm->avail_in && gz_comp(state, Z_BLOCK) == -1)
return state->err;
deflateParams(strm, level, strategy);
}
diff --git a/modules/zlib/src/infback.c b/modules/zlib/src/infback.c
index f3833c2e4..59679ecbf 100644
--- a/modules/zlib/src/infback.c
+++ b/modules/zlib/src/infback.c
@@ -1,5 +1,5 @@
/* infback.c -- inflate using a call-back interface
- * Copyright (C) 1995-2011 Mark Adler
+ * Copyright (C) 1995-2016 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -61,7 +61,7 @@ int stream_size;
Tracev((stderr, "inflate: allocated\n"));
strm->state = (struct internal_state FAR *)state;
state->dmax = 32768U;
- state->wbits = windowBits;
+ state->wbits = (uInt)windowBits;
state->wsize = 1U << windowBits;
state->window = window;
state->wnext = 0;
diff --git a/modules/zlib/src/inffast.c b/modules/zlib/src/inffast.c
index bda59ceb6..0dbd1dbc0 100644
--- a/modules/zlib/src/inffast.c
+++ b/modules/zlib/src/inffast.c
@@ -1,5 +1,5 @@
/* inffast.c -- fast decoding
- * Copyright (C) 1995-2008, 2010, 2013 Mark Adler
+ * Copyright (C) 1995-2017 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -8,26 +8,9 @@
#include "inflate.h"
#include "inffast.h"
-#ifndef ASMINF
-
-/* Allow machine dependent optimization for post-increment or pre-increment.
- Based on testing to date,
- Pre-increment preferred for:
- - PowerPC G3 (Adler)
- - MIPS R5000 (Randers-Pehrson)
- Post-increment preferred for:
- - none
- No measurable difference:
- - Pentium III (Anderson)
- - M68060 (Nikl)
- */
-#ifdef POSTINC
-# define OFF 0
-# define PUP(a) *(a)++
+#ifdef ASMINF
+# pragma message("Assembler code may have bugs -- use at your own risk")
#else
-# define OFF 1
-# define PUP(a) *++(a)
-#endif
/*
Decode literal, length, and distance codes and write out the resulting
@@ -96,9 +79,9 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
/* copy state to local variables */
state = (struct inflate_state FAR *)strm->state;
- in = strm->next_in - OFF;
+ in = strm->next_in;
last = in + (strm->avail_in - 5);
- out = strm->next_out - OFF;
+ out = strm->next_out;
beg = out - (start - strm->avail_out);
end = out + (strm->avail_out - 257);
#ifdef INFLATE_STRICT
@@ -119,9 +102,9 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
input data or output space */
do {
if (bits < 15) {
- hold += (unsigned long)(PUP(in)) << bits;
+ hold += (unsigned long)(*in++) << bits;
bits += 8;
- hold += (unsigned long)(PUP(in)) << bits;
+ hold += (unsigned long)(*in++) << bits;
bits += 8;
}
here = lcode[hold & lmask];
@@ -134,14 +117,14 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
"inflate: literal '%c'\n" :
"inflate: literal 0x%02x\n", here.val));
- PUP(out) = (unsigned char)(here.val);
+ *out++ = (unsigned char)(here.val);
}
else if (op & 16) { /* length base */
len = (unsigned)(here.val);
op &= 15; /* number of extra bits */
if (op) {
if (bits < op) {
- hold += (unsigned long)(PUP(in)) << bits;
+ hold += (unsigned long)(*in++) << bits;
bits += 8;
}
len += (unsigned)hold & ((1U << op) - 1);
@@ -150,9 +133,9 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
}
Tracevv((stderr, "inflate: length %u\n", len));
if (bits < 15) {
- hold += (unsigned long)(PUP(in)) << bits;
+ hold += (unsigned long)(*in++) << bits;
bits += 8;
- hold += (unsigned long)(PUP(in)) << bits;
+ hold += (unsigned long)(*in++) << bits;
bits += 8;
}
here = dcode[hold & dmask];
@@ -165,10 +148,10 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
dist = (unsigned)(here.val);
op &= 15; /* number of extra bits */
if (bits < op) {
- hold += (unsigned long)(PUP(in)) << bits;
+ hold += (unsigned long)(*in++) << bits;
bits += 8;
if (bits < op) {
- hold += (unsigned long)(PUP(in)) << bits;
+ hold += (unsigned long)(*in++) << bits;
bits += 8;
}
}
@@ -196,30 +179,30 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
if (len <= op - whave) {
do {
- PUP(out) = 0;
+ *out++ = 0;
} while (--len);
continue;
}
len -= op - whave;
do {
- PUP(out) = 0;
+ *out++ = 0;
} while (--op > whave);
if (op == 0) {
from = out - dist;
do {
- PUP(out) = PUP(from);
+ *out++ = *from++;
} while (--len);
continue;
}
#endif
}
- from = window - OFF;
+ from = window;
if (wnext == 0) { /* very common case */
from += wsize - op;
if (op < len) { /* some from window */
len -= op;
do {
- PUP(out) = PUP(from);
+ *out++ = *from++;
} while (--op);
from = out - dist; /* rest from output */
}
@@ -230,14 +213,14 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
if (op < len) { /* some from end of window */
len -= op;
do {
- PUP(out) = PUP(from);
+ *out++ = *from++;
} while (--op);
- from = window - OFF;
+ from = window;
if (wnext < len) { /* some from start of window */
op = wnext;
len -= op;
do {
- PUP(out) = PUP(from);
+ *out++ = *from++;
} while (--op);
from = out - dist; /* rest from output */
}
@@ -248,35 +231,35 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
if (op < len) { /* some from window */
len -= op;
do {
- PUP(out) = PUP(from);
+ *out++ = *from++;
} while (--op);
from = out - dist; /* rest from output */
}
}
while (len > 2) {
- PUP(out) = PUP(from);
- PUP(out) = PUP(from);
- PUP(out) = PUP(from);
+ *out++ = *from++;
+ *out++ = *from++;
+ *out++ = *from++;
len -= 3;
}
if (len) {
- PUP(out) = PUP(from);
+ *out++ = *from++;
if (len > 1)
- PUP(out) = PUP(from);
+ *out++ = *from++;
}
}
else {
from = out - dist; /* copy direct from output */
do { /* minimum length is three */
- PUP(out) = PUP(from);
- PUP(out) = PUP(from);
- PUP(out) = PUP(from);
+ *out++ = *from++;
+ *out++ = *from++;
+ *out++ = *from++;
len -= 3;
} while (len > 2);
if (len) {
- PUP(out) = PUP(from);
+ *out++ = *from++;
if (len > 1)
- PUP(out) = PUP(from);
+ *out++ = *from++;
}
}
}
@@ -313,8 +296,8 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
hold &= (1U << bits) - 1;
/* update state and return */
- strm->next_in = in + OFF;
- strm->next_out = out + OFF;
+ strm->next_in = in;
+ strm->next_out = out;
strm->avail_in = (unsigned)(in < last ? 5 + (last - in) : 5 - (in - last));
strm->avail_out = (unsigned)(out < end ?
257 + (end - out) : 257 - (out - end));
diff --git a/modules/zlib/src/inflate.c b/modules/zlib/src/inflate.c
index 4fd3f3c18..ac333e8c2 100644
--- a/modules/zlib/src/inflate.c
+++ b/modules/zlib/src/inflate.c
@@ -1,5 +1,5 @@
/* inflate.c -- zlib decompression
- * Copyright (C) 1995-2012 Mark Adler
+ * Copyright (C) 1995-2016 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -92,6 +92,7 @@
#endif
/* function prototypes */
+local int inflateStateCheck OF((z_streamp strm));
local void fixedtables OF((struct inflate_state FAR *state));
local int updatewindow OF((z_streamp strm, const unsigned char FAR *end,
unsigned copy));
@@ -101,12 +102,26 @@ local int updatewindow OF((z_streamp strm, const unsigned char FAR *end,
local unsigned syncsearch OF((unsigned FAR *have, const unsigned char FAR *buf,
unsigned len));
+local int inflateStateCheck(strm)
+z_streamp strm;
+{
+ struct inflate_state FAR *state;
+ if (strm == Z_NULL ||
+ strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0)
+ return 1;
+ state = (struct inflate_state FAR *)strm->state;
+ if (state == Z_NULL || state->strm != strm ||
+ state->mode < HEAD || state->mode > SYNC)
+ return 1;
+ return 0;
+}
+
int ZEXPORT inflateResetKeep(strm)
z_streamp strm;
{
struct inflate_state FAR *state;
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
state = (struct inflate_state FAR *)strm->state;
strm->total_in = strm->total_out = state->total = 0;
strm->msg = Z_NULL;
@@ -131,7 +146,7 @@ z_streamp strm;
{
struct inflate_state FAR *state;
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
state = (struct inflate_state FAR *)strm->state;
state->wsize = 0;
state->whave = 0;
@@ -147,7 +162,7 @@ int windowBits;
struct inflate_state FAR *state;
/* get the state */
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
state = (struct inflate_state FAR *)strm->state;
/* extract wrap request from windowBits parameter */
@@ -156,7 +171,7 @@ int windowBits;
windowBits = -windowBits;
}
else {
- wrap = (windowBits >> 4) + 1;
+ wrap = (windowBits >> 4) + 5;
#ifdef GUNZIP
if (windowBits < 48)
windowBits &= 15;
@@ -210,7 +225,9 @@ int stream_size;
if (state == Z_NULL) return Z_MEM_ERROR;
Tracev((stderr, "inflate: allocated\n"));
strm->state = (struct internal_state FAR *)state;
+ state->strm = strm;
state->window = Z_NULL;
+ state->mode = HEAD; /* to pass state test in inflateReset2() */
ret = inflateReset2(strm, windowBits);
if (ret != Z_OK) {
ZFREE(strm, state);
@@ -234,17 +251,17 @@ int value;
{
struct inflate_state FAR *state;
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
state = (struct inflate_state FAR *)strm->state;
if (bits < 0) {
state->hold = 0;
state->bits = 0;
return Z_OK;
}
- if (bits > 16 || state->bits + bits > 32) return Z_STREAM_ERROR;
+ if (bits > 16 || state->bits + (uInt)bits > 32) return Z_STREAM_ERROR;
value &= (1L << bits) - 1;
- state->hold += value << state->bits;
- state->bits += bits;
+ state->hold += (unsigned)value << state->bits;
+ state->bits += (uInt)bits;
return Z_OK;
}
@@ -625,7 +642,7 @@ int flush;
static const unsigned short order[19] = /* permutation of code lengths */
{16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
- if (strm == Z_NULL || strm->state == Z_NULL || strm->next_out == Z_NULL ||
+ if (inflateStateCheck(strm) || strm->next_out == Z_NULL ||
(strm->next_in == Z_NULL && strm->avail_in != 0))
return Z_STREAM_ERROR;
@@ -645,6 +662,8 @@ int flush;
NEEDBITS(16);
#ifdef GUNZIP
if ((state->wrap & 2) && hold == 0x8b1f) { /* gzip header */
+ if (state->wbits == 0)
+ state->wbits = 15;
state->check = crc32(0L, Z_NULL, 0);
CRC2(state->check, hold);
INITBITS();
@@ -672,7 +691,7 @@ int flush;
len = BITS(4) + 8;
if (state->wbits == 0)
state->wbits = len;
- else if (len > state->wbits) {
+ if (len > 15 || len > state->wbits) {
strm->msg = (char *)"invalid window size";
state->mode = BAD;
break;
@@ -699,14 +718,16 @@ int flush;
}
if (state->head != Z_NULL)
state->head->text = (int)((hold >> 8) & 1);
- if (state->flags & 0x0200) CRC2(state->check, hold);
+ if ((state->flags & 0x0200) && (state->wrap & 4))
+ CRC2(state->check, hold);
INITBITS();
state->mode = TIME;
case TIME:
NEEDBITS(32);
if (state->head != Z_NULL)
state->head->time = hold;
- if (state->flags & 0x0200) CRC4(state->check, hold);
+ if ((state->flags & 0x0200) && (state->wrap & 4))
+ CRC4(state->check, hold);
INITBITS();
state->mode = OS;
case OS:
@@ -715,7 +736,8 @@ int flush;
state->head->xflags = (int)(hold & 0xff);
state->head->os = (int)(hold >> 8);
}
- if (state->flags & 0x0200) CRC2(state->check, hold);
+ if ((state->flags & 0x0200) && (state->wrap & 4))
+ CRC2(state->check, hold);
INITBITS();
state->mode = EXLEN;
case EXLEN:
@@ -724,7 +746,8 @@ int flush;
state->length = (unsigned)(hold);
if (state->head != Z_NULL)
state->head->extra_len = (unsigned)hold;
- if (state->flags & 0x0200) CRC2(state->check, hold);
+ if ((state->flags & 0x0200) && (state->wrap & 4))
+ CRC2(state->check, hold);
INITBITS();
}
else if (state->head != Z_NULL)
@@ -742,7 +765,7 @@ int flush;
len + copy > state->head->extra_max ?
state->head->extra_max - len : copy);
}
- if (state->flags & 0x0200)
+ if ((state->flags & 0x0200) && (state->wrap & 4))
state->check = crc32(state->check, next, copy);
have -= copy;
next += copy;
@@ -761,9 +784,9 @@ int flush;
if (state->head != Z_NULL &&
state->head->name != Z_NULL &&
state->length < state->head->name_max)
- state->head->name[state->length++] = len;
+ state->head->name[state->length++] = (Bytef)len;
} while (len && copy < have);
- if (state->flags & 0x0200)
+ if ((state->flags & 0x0200) && (state->wrap & 4))
state->check = crc32(state->check, next, copy);
have -= copy;
next += copy;
@@ -782,9 +805,9 @@ int flush;
if (state->head != Z_NULL &&
state->head->comment != Z_NULL &&
state->length < state->head->comm_max)
- state->head->comment[state->length++] = len;
+ state->head->comment[state->length++] = (Bytef)len;
} while (len && copy < have);
- if (state->flags & 0x0200)
+ if ((state->flags & 0x0200) && (state->wrap & 4))
state->check = crc32(state->check, next, copy);
have -= copy;
next += copy;
@@ -796,7 +819,7 @@ int flush;
case HCRC:
if (state->flags & 0x0200) {
NEEDBITS(16);
- if (hold != (state->check & 0xffff)) {
+ if ((state->wrap & 4) && hold != (state->check & 0xffff)) {
strm->msg = (char *)"header crc mismatch";
state->mode = BAD;
break;
@@ -1177,11 +1200,11 @@ int flush;
out -= left;
strm->total_out += out;
state->total += out;
- if (out)
+ if ((state->wrap & 4) && out)
strm->adler = state->check =
UPDATE(state->check, put - out, out);
out = left;
- if ((
+ if ((state->wrap & 4) && (
#ifdef GUNZIP
state->flags ? hold :
#endif
@@ -1240,10 +1263,10 @@ int flush;
strm->total_in += in;
strm->total_out += out;
state->total += out;
- if (state->wrap && out)
+ if ((state->wrap & 4) && out)
strm->adler = state->check =
UPDATE(state->check, strm->next_out - out, out);
- strm->data_type = state->bits + (state->last ? 64 : 0) +
+ strm->data_type = (int)state->bits + (state->last ? 64 : 0) +
(state->mode == TYPE ? 128 : 0) +
(state->mode == LEN_ || state->mode == COPY_ ? 256 : 0);
if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK)
@@ -1255,7 +1278,7 @@ int ZEXPORT inflateEnd(strm)
z_streamp strm;
{
struct inflate_state FAR *state;
- if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0)
+ if (inflateStateCheck(strm))
return Z_STREAM_ERROR;
state = (struct inflate_state FAR *)strm->state;
if (state->window != Z_NULL) ZFREE(strm, state->window);
@@ -1273,7 +1296,7 @@ uInt *dictLength;
struct inflate_state FAR *state;
/* check state */
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
state = (struct inflate_state FAR *)strm->state;
/* copy dictionary */
@@ -1298,7 +1321,7 @@ uInt dictLength;
int ret;
/* check state */
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
state = (struct inflate_state FAR *)strm->state;
if (state->wrap != 0 && state->mode != DICT)
return Z_STREAM_ERROR;
@@ -1330,7 +1353,7 @@ gz_headerp head;
struct inflate_state FAR *state;
/* check state */
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
state = (struct inflate_state FAR *)strm->state;
if ((state->wrap & 2) == 0) return Z_STREAM_ERROR;
@@ -1383,7 +1406,7 @@ z_streamp strm;
struct inflate_state FAR *state;
/* check parameters */
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
state = (struct inflate_state FAR *)strm->state;
if (strm->avail_in == 0 && state->bits < 8) return Z_BUF_ERROR;
@@ -1430,7 +1453,7 @@ z_streamp strm;
{
struct inflate_state FAR *state;
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
state = (struct inflate_state FAR *)strm->state;
return state->mode == STORED && state->bits == 0;
}
@@ -1445,8 +1468,7 @@ z_streamp source;
unsigned wsize;
/* check input */
- if (dest == Z_NULL || source == Z_NULL || source->state == Z_NULL ||
- source->zalloc == (alloc_func)0 || source->zfree == (free_func)0)
+ if (inflateStateCheck(source) || dest == Z_NULL)
return Z_STREAM_ERROR;
state = (struct inflate_state FAR *)source->state;
@@ -1467,6 +1489,7 @@ z_streamp source;
/* copy state */
zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream));
zmemcpy((voidpf)copy, (voidpf)state, sizeof(struct inflate_state));
+ copy->strm = dest;
if (state->lencode >= state->codes &&
state->lencode <= state->codes + ENOUGH - 1) {
copy->lencode = copy->codes + (state->lencode - state->codes);
@@ -1488,26 +1511,51 @@ int subvert;
{
struct inflate_state FAR *state;
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
state = (struct inflate_state FAR *)strm->state;
- state->sane = !subvert;
#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
+ state->sane = !subvert;
return Z_OK;
#else
+ (void)subvert;
state->sane = 1;
return Z_DATA_ERROR;
#endif
}
+int ZEXPORT inflateValidate(strm, check)
+z_streamp strm;
+int check;
+{
+ struct inflate_state FAR *state;
+
+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
+ state = (struct inflate_state FAR *)strm->state;
+ if (check)
+ state->wrap |= 4;
+ else
+ state->wrap &= ~4;
+ return Z_OK;
+}
+
long ZEXPORT inflateMark(strm)
z_streamp strm;
{
struct inflate_state FAR *state;
- if (strm == Z_NULL || strm->state == Z_NULL)
- return (long)(((unsigned long)0 - 1) << 16);
+ if (inflateStateCheck(strm))
+ return -(1L << 16);
state = (struct inflate_state FAR *)strm->state;
return (long)(((unsigned long)((long)state->back)) << 16) +
(state->mode == COPY ? state->length :
(state->mode == MATCH ? state->was - state->length : 0));
}
+
+unsigned long ZEXPORT inflateCodesUsed(strm)
+z_streamp strm;
+{
+ struct inflate_state FAR *state;
+ if (inflateStateCheck(strm)) return (unsigned long)-1;
+ state = (struct inflate_state FAR *)strm->state;
+ return (unsigned long)(state->next - state->codes);
+}
diff --git a/modules/zlib/src/inflate.h b/modules/zlib/src/inflate.h
index 95f4986d4..a46cce6b6 100644
--- a/modules/zlib/src/inflate.h
+++ b/modules/zlib/src/inflate.h
@@ -1,5 +1,5 @@
/* inflate.h -- internal inflate state definition
- * Copyright (C) 1995-2009 Mark Adler
+ * Copyright (C) 1995-2016 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -18,7 +18,7 @@
/* Possible inflate modes between inflate() calls */
typedef enum {
- HEAD, /* i: waiting for magic header */
+ HEAD = 16180, /* i: waiting for magic header */
FLAGS, /* i: waiting for method and flags (gzip) */
TIME, /* i: waiting for modification time (gzip) */
OS, /* i: waiting for extra flags and operating system (gzip) */
@@ -77,11 +77,14 @@ typedef enum {
CHECK -> LENGTH -> DONE
*/
-/* state maintained between inflate() calls. Approximately 10K bytes. */
+/* State maintained between inflate() calls -- approximately 7K bytes, not
+ including the allocated sliding window, which is up to 32K bytes. */
struct inflate_state {
+ z_streamp strm; /* pointer back to this zlib stream */
inflate_mode mode; /* current inflate mode */
int last; /* true if processing last block */
- int wrap; /* bit 0 true for zlib, bit 1 true for gzip */
+ int wrap; /* bit 0 true for zlib, bit 1 true for gzip,
+ bit 2 true to validate check value */
int havedict; /* true if dictionary provided */
int flags; /* gzip header method and flags (0 if zlib) */
unsigned dmax; /* zlib header max distance (INFLATE_STRICT) */
diff --git a/modules/zlib/src/inftrees.c b/modules/zlib/src/inftrees.c
index 44d89cf24..2ea08fc13 100644
--- a/modules/zlib/src/inftrees.c
+++ b/modules/zlib/src/inftrees.c
@@ -1,5 +1,5 @@
/* inftrees.c -- generate Huffman trees for efficient decoding
- * Copyright (C) 1995-2013 Mark Adler
+ * Copyright (C) 1995-2017 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -9,7 +9,7 @@
#define MAXBITS 15
const char inflate_copyright[] =
- " inflate 1.2.8 Copyright 1995-2013 Mark Adler ";
+ " inflate 1.2.11 Copyright 1995-2017 Mark Adler ";
/*
If you use the zlib library in a product, an acknowledgment is welcome
in the documentation of your product. If for some reason you cannot
@@ -54,7 +54,7 @@ unsigned short FAR *work;
code FAR *next; /* next available space in table */
const unsigned short FAR *base; /* base value table to use */
const unsigned short FAR *extra; /* extra bits table to use */
- int end; /* use base and extra for symbol > end */
+ unsigned match; /* use base and extra for symbol >= match */
unsigned short count[MAXBITS+1]; /* number of codes of each length */
unsigned short offs[MAXBITS+1]; /* offsets in table for each length */
static const unsigned short lbase[31] = { /* Length codes 257..285 base */
@@ -62,7 +62,7 @@ unsigned short FAR *work;
35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
static const unsigned short lext[31] = { /* Length codes 257..285 extra */
16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
- 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78};
+ 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 77, 202};
static const unsigned short dbase[32] = { /* Distance codes 0..29 base */
1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
@@ -181,19 +181,17 @@ unsigned short FAR *work;
switch (type) {
case CODES:
base = extra = work; /* dummy value--not used */
- end = 19;
+ match = 20;
break;
case LENS:
base = lbase;
- base -= 257;
extra = lext;
- extra -= 257;
- end = 256;
+ match = 257;
break;
- default: /* DISTS */
+ default: /* DISTS */
base = dbase;
extra = dext;
- end = -1;
+ match = 0;
}
/* initialize state for loop */
@@ -216,13 +214,13 @@ unsigned short FAR *work;
for (;;) {
/* create table entry */
here.bits = (unsigned char)(len - drop);
- if ((int)(work[sym]) < end) {
+ if (work[sym] + 1U < match) {
here.op = (unsigned char)0;
here.val = work[sym];
}
- else if ((int)(work[sym]) > end) {
- here.op = (unsigned char)(extra[work[sym]]);
- here.val = base[work[sym]];
+ else if (work[sym] >= match) {
+ here.op = (unsigned char)(extra[work[sym] - match]);
+ here.val = base[work[sym] - match];
}
else {
here.op = (unsigned char)(32 + 64); /* end of block */
diff --git a/modules/zlib/src/mozzconf.h b/modules/zlib/src/mozzconf.h
index f1da5ae28..9521297ea 100644
--- a/modules/zlib/src/mozzconf.h
+++ b/modules/zlib/src/mozzconf.h
@@ -44,7 +44,6 @@
#define gzputs MOZ_Z_gzputs
#define gzgets MOZ_Z_gzgets
#define gzputc MOZ_Z_gzputc
-#define gzgetc MOZ_Z_gzgetc
#define gzungetc MOZ_Z_gzungetc
#define gzflush MOZ_Z_gzflush
#define gzseek MOZ_Z_gzseek
@@ -126,4 +125,45 @@
#define gzvprintf MOZ_Z_gzvprintf
#define inflateGetDictionary MOZ_Z_inflateGetDictionary
+/* New as of zlib-1.2.11 */
+#define adler32_combine_ MOZ_Z_adler32_combine_
+#define crc32_combine_ MOZ_Z_crc32_combine_
+#define deflate_fast MOZ_Z_deflate_fast
+#define deflate_slow MOZ_Z_deflate_slow
+#define deflateStateCheck MOZ_Z_deflateStateCheck
+#define deflate_stored MOZ_Z_deflate_stored
+#define fill_window MOZ_Z_fill_window
+#define flush_pending MOZ_Z_flush_pending
+#define longest_match MOZ_Z_longest_match
+#define read_buf MOZ_Z_read_buf
+#define slide_hash MOZ_Z_slide_hash
+#define gz_open MOZ_Z_gz_open
+#define gz_reset MOZ_Z_gz_reset
+#define gz_avail MOZ_Z_gz_avail
+#define gz_fetch MOZ_Z_gz_fetch
+#define gz_decomp MOZ_Z_gz_decomp
+#define gz_write MOZ_Z_gz_write
+#define gz_comp MOZ_Z_gz_comp
+#define gz_init MOZ_Z_gz_init
+#define gz_write MOZ_Z_gz_write
+#define gz_zero MOZ_Z_gz_zero
+#define gz_load MOZ_Z_gz_load
+#define gz_look MOZ_Z_gz_look
+#define gz_read MOZ_Z_gz_read
+#define gz_skip MOZ_Z_gz_skip
+#define syncsearch MOZ_Z_syncsearch
+#define updatewindow MOZ_Z_updatewindow
+#define inflateStateCheck MOZ_Z_inflateStateCheck
+#define bi_flush MOZ_Z_bi_flush
+#define bi_windup MOZ_Z_bi_windup
+#define bl_order MOZ_Z_bl_order
+#define build_tree MOZ_Z_build_tree
+#define compress_block MOZ_Z_compress_block
+#define init_block MOZ_Z_init_block
+#define pqdownheap MOZ_Z_pqdownheap
+#define scan_tree MOZ_Z_scan_tree
+#define send_tree MOZ_Z_send_tree
+#define slide_hash MOZ_Z_slide_hash
+#define uncompress2 MOZ_Z_uncompress2
+
#endif
diff --git a/modules/zlib/src/trees.c b/modules/zlib/src/trees.c
index 1fd7759ef..50cf4b457 100644
--- a/modules/zlib/src/trees.c
+++ b/modules/zlib/src/trees.c
@@ -1,5 +1,5 @@
/* trees.c -- output deflated data using Huffman coding
- * Copyright (C) 1995-2012 Jean-loup Gailly
+ * Copyright (C) 1995-2017 Jean-loup Gailly
* detect_data_type() function provided freely by Cosmin Truta, 2006
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -36,7 +36,7 @@
#include "deflate.h"
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
# include <ctype.h>
#endif
@@ -122,13 +122,13 @@ struct static_tree_desc_s {
int max_length; /* max bit length for the codes */
};
-local static_tree_desc static_l_desc =
+local const static_tree_desc static_l_desc =
{static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS};
-local static_tree_desc static_d_desc =
+local const static_tree_desc static_d_desc =
{static_dtree, extra_dbits, 0, D_CODES, MAX_BITS};
-local static_tree_desc static_bl_desc =
+local const static_tree_desc static_bl_desc =
{(const ct_data *)0, extra_blbits, 0, BL_CODES, MAX_BL_BITS};
/* ===========================================================================
@@ -152,18 +152,16 @@ local int detect_data_type OF((deflate_state *s));
local unsigned bi_reverse OF((unsigned value, int length));
local void bi_windup OF((deflate_state *s));
local void bi_flush OF((deflate_state *s));
-local void copy_block OF((deflate_state *s, charf *buf, unsigned len,
- int header));
#ifdef GEN_TREES_H
local void gen_trees_header OF((void));
#endif
-#ifndef DEBUG
+#ifndef ZLIB_DEBUG
# define send_code(s, c, tree) send_bits(s, tree[c].Code, tree[c].Len)
/* Send a code of the given tree. c and tree must not have side effects */
-#else /* DEBUG */
+#else /* !ZLIB_DEBUG */
# define send_code(s, c, tree) \
{ if (z_verbose>2) fprintf(stderr,"\ncd %3d ",(c)); \
send_bits(s, tree[c].Code, tree[c].Len); }
@@ -182,7 +180,7 @@ local void gen_trees_header OF((void));
* Send a value on a given number of bits.
* IN assertion: length <= 16 and value fits in length bits.
*/
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
local void send_bits OF((deflate_state *s, int value, int length));
local void send_bits(s, value, length)
@@ -208,12 +206,12 @@ local void send_bits(s, value, length)
s->bi_valid += length;
}
}
-#else /* !DEBUG */
+#else /* !ZLIB_DEBUG */
#define send_bits(s, value, length) \
{ int len = length;\
if (s->bi_valid > (int)Buf_size - len) {\
- int val = value;\
+ int val = (int)value;\
s->bi_buf |= (ush)val << s->bi_valid;\
put_short(s, s->bi_buf);\
s->bi_buf = (ush)val >> (Buf_size - s->bi_valid);\
@@ -223,7 +221,7 @@ local void send_bits(s, value, length)
s->bi_valid += len;\
}\
}
-#endif /* DEBUG */
+#endif /* ZLIB_DEBUG */
/* the arguments must not have side effects */
@@ -317,7 +315,7 @@ local void tr_static_init()
* Genererate the file trees.h describing the static trees.
*/
#ifdef GEN_TREES_H
-# ifndef DEBUG
+# ifndef ZLIB_DEBUG
# include <stdio.h>
# endif
@@ -394,7 +392,7 @@ void ZLIB_INTERNAL _tr_init(s)
s->bi_buf = 0;
s->bi_valid = 0;
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
s->compressed_len = 0L;
s->bits_sent = 0L;
#endif
@@ -522,12 +520,12 @@ local void gen_bitlen(s, desc)
xbits = 0;
if (n >= base) xbits = extra[n-base];
f = tree[n].Freq;
- s->opt_len += (ulg)f * (bits + xbits);
- if (stree) s->static_len += (ulg)f * (stree[n].Len + xbits);
+ s->opt_len += (ulg)f * (unsigned)(bits + xbits);
+ if (stree) s->static_len += (ulg)f * (unsigned)(stree[n].Len + xbits);
}
if (overflow == 0) return;
- Trace((stderr,"\nbit length overflow\n"));
+ Tracev((stderr,"\nbit length overflow\n"));
/* This happens for example on obj2 and pic of the Calgary corpus */
/* Find the first bit length which could increase: */
@@ -554,9 +552,8 @@ local void gen_bitlen(s, desc)
m = s->heap[--h];
if (m > max_code) continue;
if ((unsigned) tree[m].Len != (unsigned) bits) {
- Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits));
- s->opt_len += ((long)bits - (long)tree[m].Len)
- *(long)tree[m].Freq;
+ Tracev((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits));
+ s->opt_len += ((ulg)bits - tree[m].Len) * tree[m].Freq;
tree[m].Len = (ush)bits;
}
n--;
@@ -578,7 +575,7 @@ local void gen_codes (tree, max_code, bl_count)
ushf *bl_count; /* number of codes at each bit length */
{
ush next_code[MAX_BITS+1]; /* next code value for each bit length */
- ush code = 0; /* running code value */
+ unsigned code = 0; /* running code value */
int bits; /* bit index */
int n; /* code index */
@@ -586,7 +583,8 @@ local void gen_codes (tree, max_code, bl_count)
* without bit reversal.
*/
for (bits = 1; bits <= MAX_BITS; bits++) {
- next_code[bits] = code = (code + bl_count[bits-1]) << 1;
+ code = (code + bl_count[bits-1]) << 1;
+ next_code[bits] = (ush)code;
}
/* Check that the bit counts in bl_count are consistent. The last code
* must be all ones.
@@ -599,7 +597,7 @@ local void gen_codes (tree, max_code, bl_count)
int len = tree[n].Len;
if (len == 0) continue;
/* Now reverse the bits */
- tree[n].Code = bi_reverse(next_code[len]++, len);
+ tree[n].Code = (ush)bi_reverse(next_code[len]++, len);
Tracecv(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ",
n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));
@@ -821,7 +819,7 @@ local int build_bl_tree(s)
if (s->bl_tree[bl_order[max_blindex]].Len != 0) break;
}
/* Update opt_len to include the bit length tree and counts */
- s->opt_len += 3*(max_blindex+1) + 5+5+4;
+ s->opt_len += 3*((ulg)max_blindex+1) + 5+5+4;
Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld",
s->opt_len, s->static_len));
@@ -869,11 +867,17 @@ void ZLIB_INTERNAL _tr_stored_block(s, buf, stored_len, last)
int last; /* one if this is the last block for a file */
{
send_bits(s, (STORED_BLOCK<<1)+last, 3); /* send block type */
-#ifdef DEBUG
+ bi_windup(s); /* align on byte boundary */
+ put_short(s, (ush)stored_len);
+ put_short(s, (ush)~stored_len);
+ zmemcpy(s->pending_buf + s->pending, (Bytef *)buf, stored_len);
+ s->pending += stored_len;
+#ifdef ZLIB_DEBUG
s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L;
s->compressed_len += (stored_len + 4) << 3;
+ s->bits_sent += 2*16;
+ s->bits_sent += stored_len<<3;
#endif
- copy_block(s, buf, (unsigned)stored_len, 1); /* with header */
}
/* ===========================================================================
@@ -894,7 +898,7 @@ void ZLIB_INTERNAL _tr_align(s)
{
send_bits(s, STATIC_TREES<<1, 3);
send_code(s, END_BLOCK, static_ltree);
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
s->compressed_len += 10L; /* 3 for block type, 7 for EOB */
#endif
bi_flush(s);
@@ -902,7 +906,7 @@ void ZLIB_INTERNAL _tr_align(s)
/* ===========================================================================
* Determine the best encoding for the current block: dynamic trees, static
- * trees or store, and output the encoded block to the zip file.
+ * trees or store, and write out the encoded block.
*/
void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last)
deflate_state *s;
@@ -974,7 +978,7 @@ void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last)
send_bits(s, (STATIC_TREES<<1)+last, 3);
compress_block(s, (const ct_data *)static_ltree,
(const ct_data *)static_dtree);
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
s->compressed_len += 3 + s->static_len;
#endif
} else {
@@ -983,7 +987,7 @@ void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last)
max_blindex+1);
compress_block(s, (const ct_data *)s->dyn_ltree,
(const ct_data *)s->dyn_dtree);
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
s->compressed_len += 3 + s->opt_len;
#endif
}
@@ -995,7 +999,7 @@ void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last)
if (last) {
bi_windup(s);
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
s->compressed_len += 7; /* align on byte boundary */
#endif
}
@@ -1090,7 +1094,7 @@ local void compress_block(s, ltree, dtree)
send_code(s, code, dtree); /* send the distance code */
extra = extra_dbits[code];
if (extra != 0) {
- dist -= base_dist[code];
+ dist -= (unsigned)base_dist[code];
send_bits(s, dist, extra); /* send the extra distance bits */
}
} /* literal or match pair ? */
@@ -1193,34 +1197,7 @@ local void bi_windup(s)
}
s->bi_buf = 0;
s->bi_valid = 0;
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
s->bits_sent = (s->bits_sent+7) & ~7;
#endif
}
-
-/* ===========================================================================
- * Copy a stored block, storing first the length and its
- * one's complement if requested.
- */
-local void copy_block(s, buf, len, header)
- deflate_state *s;
- charf *buf; /* the input data */
- unsigned len; /* its length */
- int header; /* true if block header must be written */
-{
- bi_windup(s); /* align on byte boundary */
-
- if (header) {
- put_short(s, (ush)len);
- put_short(s, (ush)~len);
-#ifdef DEBUG
- s->bits_sent += 2*16;
-#endif
- }
-#ifdef DEBUG
- s->bits_sent += (ulg)len<<3;
-#endif
- while (len--) {
- put_byte(s, *buf++);
- }
-}
diff --git a/modules/zlib/src/uncompr.c b/modules/zlib/src/uncompr.c
index 242e9493d..f03a1a865 100644
--- a/modules/zlib/src/uncompr.c
+++ b/modules/zlib/src/uncompr.c
@@ -1,5 +1,5 @@
/* uncompr.c -- decompress a memory buffer
- * Copyright (C) 1995-2003, 2010 Jean-loup Gailly.
+ * Copyright (C) 1995-2003, 2010, 2014, 2016 Jean-loup Gailly, Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -9,51 +9,85 @@
#include "zlib.h"
/* ===========================================================================
- Decompresses the source buffer into the destination buffer. sourceLen is
- the byte length of the source buffer. Upon entry, destLen is the total
- size of the destination buffer, which must be large enough to hold the
- entire uncompressed data. (The size of the uncompressed data must have
- been saved previously by the compressor and transmitted to the decompressor
- by some mechanism outside the scope of this compression library.)
- Upon exit, destLen is the actual size of the compressed buffer.
-
- uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
- enough memory, Z_BUF_ERROR if there was not enough room in the output
- buffer, or Z_DATA_ERROR if the input data was corrupted.
+ Decompresses the source buffer into the destination buffer. *sourceLen is
+ the byte length of the source buffer. Upon entry, *destLen is the total size
+ of the destination buffer, which must be large enough to hold the entire
+ uncompressed data. (The size of the uncompressed data must have been saved
+ previously by the compressor and transmitted to the decompressor by some
+ mechanism outside the scope of this compression library.) Upon exit,
+ *destLen is the size of the decompressed data and *sourceLen is the number
+ of source bytes consumed. Upon return, source + *sourceLen points to the
+ first unused input byte.
+
+ uncompress returns Z_OK if success, Z_MEM_ERROR if there was not enough
+ memory, Z_BUF_ERROR if there was not enough room in the output buffer, or
+ Z_DATA_ERROR if the input data was corrupted, including if the input data is
+ an incomplete zlib stream.
*/
-int ZEXPORT uncompress (dest, destLen, source, sourceLen)
+int ZEXPORT uncompress2 (dest, destLen, source, sourceLen)
Bytef *dest;
uLongf *destLen;
const Bytef *source;
- uLong sourceLen;
+ uLong *sourceLen;
{
z_stream stream;
int err;
+ const uInt max = (uInt)-1;
+ uLong len, left;
+ Byte buf[1]; /* for detection of incomplete stream when *destLen == 0 */
- stream.next_in = (z_const Bytef *)source;
- stream.avail_in = (uInt)sourceLen;
- /* Check for source > 64K on 16-bit machine: */
- if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
-
- stream.next_out = dest;
- stream.avail_out = (uInt)*destLen;
- if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
+ len = *sourceLen;
+ if (*destLen) {
+ left = *destLen;
+ *destLen = 0;
+ }
+ else {
+ left = 1;
+ dest = buf;
+ }
+ stream.next_in = (z_const Bytef *)source;
+ stream.avail_in = 0;
stream.zalloc = (alloc_func)0;
stream.zfree = (free_func)0;
+ stream.opaque = (voidpf)0;
err = inflateInit(&stream);
if (err != Z_OK) return err;
- err = inflate(&stream, Z_FINISH);
- if (err != Z_STREAM_END) {
- inflateEnd(&stream);
- if (err == Z_NEED_DICT || (err == Z_BUF_ERROR && stream.avail_in == 0))
- return Z_DATA_ERROR;
- return err;
- }
- *destLen = stream.total_out;
+ stream.next_out = dest;
+ stream.avail_out = 0;
- err = inflateEnd(&stream);
- return err;
+ do {
+ if (stream.avail_out == 0) {
+ stream.avail_out = left > (uLong)max ? max : (uInt)left;
+ left -= stream.avail_out;
+ }
+ if (stream.avail_in == 0) {
+ stream.avail_in = len > (uLong)max ? max : (uInt)len;
+ len -= stream.avail_in;
+ }
+ err = inflate(&stream, Z_NO_FLUSH);
+ } while (err == Z_OK);
+
+ *sourceLen -= len + stream.avail_in;
+ if (dest != buf)
+ *destLen = stream.total_out;
+ else if (stream.total_out && err == Z_BUF_ERROR)
+ left = 1;
+
+ inflateEnd(&stream);
+ return err == Z_STREAM_END ? Z_OK :
+ err == Z_NEED_DICT ? Z_DATA_ERROR :
+ err == Z_BUF_ERROR && left + stream.avail_out ? Z_DATA_ERROR :
+ err;
+}
+
+int ZEXPORT uncompress (dest, destLen, source, sourceLen)
+ Bytef *dest;
+ uLongf *destLen;
+ const Bytef *source;
+ uLong sourceLen;
+{
+ return uncompress2(dest, destLen, source, &sourceLen);
}
diff --git a/modules/zlib/src/zconf.h b/modules/zlib/src/zconf.h
index fa0950b9d..8e2c0a3e4 100644
--- a/modules/zlib/src/zconf.h
+++ b/modules/zlib/src/zconf.h
@@ -1,5 +1,5 @@
/* zconf.h -- configuration of the zlib compression library
- * Copyright (C) 1995-2013 Jean-loup Gailly.
+ * Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -20,7 +20,7 @@
#ifdef Z_PREFIX /* may be set to #if 1 by ./configure */
# define Z_PREFIX_SET
-/* all linked symbols */
+/* all linked symbols and init macros */
# define _dist_code z__dist_code
# define _length_code z__length_code
# define _tr_align z__tr_align
@@ -32,6 +32,7 @@
# define adler32 z_adler32
# define adler32_combine z_adler32_combine
# define adler32_combine64 z_adler32_combine64
+# define adler32_z z_adler32_z
# ifndef Z_SOLO
# define compress z_compress
# define compress2 z_compress2
@@ -40,10 +41,14 @@
# define crc32 z_crc32
# define crc32_combine z_crc32_combine
# define crc32_combine64 z_crc32_combine64
+# define crc32_z z_crc32_z
# define deflate z_deflate
# define deflateBound z_deflateBound
# define deflateCopy z_deflateCopy
# define deflateEnd z_deflateEnd
+# define deflateGetDictionary z_deflateGetDictionary
+# define deflateInit z_deflateInit
+# define deflateInit2 z_deflateInit2
# define deflateInit2_ z_deflateInit2_
# define deflateInit_ z_deflateInit_
# define deflateParams z_deflateParams
@@ -70,6 +75,8 @@
# define gzeof z_gzeof
# define gzerror z_gzerror
# define gzflush z_gzflush
+# define gzfread z_gzfread
+# define gzfwrite z_gzfwrite
# define gzgetc z_gzgetc
# define gzgetc_ z_gzgetc_
# define gzgets z_gzgets
@@ -81,7 +88,6 @@
# define gzopen_w z_gzopen_w
# endif
# define gzprintf z_gzprintf
-# define gzvprintf z_gzvprintf
# define gzputc z_gzputc
# define gzputs z_gzputs
# define gzread z_gzread
@@ -92,32 +98,39 @@
# define gztell z_gztell
# define gztell64 z_gztell64
# define gzungetc z_gzungetc
+# define gzvprintf z_gzvprintf
# define gzwrite z_gzwrite
# endif
# define inflate z_inflate
# define inflateBack z_inflateBack
# define inflateBackEnd z_inflateBackEnd
+# define inflateBackInit z_inflateBackInit
# define inflateBackInit_ z_inflateBackInit_
+# define inflateCodesUsed z_inflateCodesUsed
# define inflateCopy z_inflateCopy
# define inflateEnd z_inflateEnd
+# define inflateGetDictionary z_inflateGetDictionary
# define inflateGetHeader z_inflateGetHeader
+# define inflateInit z_inflateInit
+# define inflateInit2 z_inflateInit2
# define inflateInit2_ z_inflateInit2_
# define inflateInit_ z_inflateInit_
# define inflateMark z_inflateMark
# define inflatePrime z_inflatePrime
# define inflateReset z_inflateReset
# define inflateReset2 z_inflateReset2
+# define inflateResetKeep z_inflateResetKeep
# define inflateSetDictionary z_inflateSetDictionary
-# define inflateGetDictionary z_inflateGetDictionary
# define inflateSync z_inflateSync
# define inflateSyncPoint z_inflateSyncPoint
# define inflateUndermine z_inflateUndermine
-# define inflateResetKeep z_inflateResetKeep
+# define inflateValidate z_inflateValidate
# define inflate_copyright z_inflate_copyright
# define inflate_fast z_inflate_fast
# define inflate_table z_inflate_table
# ifndef Z_SOLO
# define uncompress z_uncompress
+# define uncompress2 z_uncompress2
# endif
# define zError z_zError
# ifndef Z_SOLO
@@ -227,9 +240,19 @@
# define z_const
#endif
-/* Some Mac compilers merge all .h files incorrectly: */
-#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__)
-# define NO_DUMMY_DECL
+#ifdef Z_SOLO
+ typedef unsigned long z_size_t;
+#else
+# define z_longlong long long
+# if defined(NO_SIZE_T)
+ typedef unsigned NO_SIZE_T z_size_t;
+# elif defined(STDC)
+# include <stddef.h>
+ typedef size_t z_size_t;
+# else
+ typedef unsigned long z_size_t;
+# endif
+# undef z_longlong
#endif
/* Maximum value for memLevel in deflateInit2 */
@@ -259,7 +282,7 @@
Of course this will generally degrade compression (there's no free lunch).
The memory requirements for inflate are (in bytes) 1 << windowBits
- that is, 32K for windowBits=15 (default value) plus a few kilobytes
+ that is, 32K for windowBits=15 (default value) plus about 7 kilobytes
for small objects.
*/
@@ -341,7 +364,7 @@
# endif
#endif
-#if defined (__BEOS__) || (defined(__OS2__) && defined(__declspec))
+#if defined (__BEOS__)
# ifdef ZLIB_DLL
# ifdef ZLIB_INTERNAL
# define ZEXPORT __declspec(dllexport)
diff --git a/modules/zlib/src/zlib.h b/modules/zlib/src/zlib.h
index b6ce7f1b0..f09cdaf1e 100644
--- a/modules/zlib/src/zlib.h
+++ b/modules/zlib/src/zlib.h
@@ -1,7 +1,7 @@
/* zlib.h -- interface of the 'zlib' general purpose compression library
- version 1.2.8, April 28th, 2013
+ version 1.2.11, January 15th, 2017
- Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler
+ Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -37,11 +37,11 @@
extern "C" {
#endif
-#define ZLIB_VERSION "1.2.8"
-#define ZLIB_VERNUM 0x1280
+#define ZLIB_VERSION "1.2.11"
+#define ZLIB_VERNUM 0x12b0
#define ZLIB_VER_MAJOR 1
#define ZLIB_VER_MINOR 2
-#define ZLIB_VER_REVISION 8
+#define ZLIB_VER_REVISION 11
#define ZLIB_VER_SUBREVISION 0
/*
@@ -65,7 +65,8 @@ extern "C" {
with "gz". The gzip format is different from the zlib format. gzip is a
gzip wrapper, documented in RFC 1952, wrapped around a deflate stream.
- This library can optionally read and write gzip streams in memory as well.
+ This library can optionally read and write gzip and raw deflate streams in
+ memory as well.
The zlib format was designed to be compact and fast for use in memory
and on communications channels. The gzip format was designed for single-
@@ -74,7 +75,7 @@ extern "C" {
The library does not install any signal handler. The decoder checks
the consistency of the compressed data, so the library should never crash
- even in case of corrupted input.
+ even in the case of corrupted input.
*/
typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size));
@@ -87,7 +88,7 @@ typedef struct z_stream_s {
uInt avail_in; /* number of bytes available at next_in */
uLong total_in; /* total number of input bytes read so far */
- Bytef *next_out; /* next output byte should be put there */
+ Bytef *next_out; /* next output byte will go here */
uInt avail_out; /* remaining free space at next_out */
uLong total_out; /* total number of bytes output so far */
@@ -98,8 +99,9 @@ typedef struct z_stream_s {
free_func zfree; /* used to free the internal state */
voidpf opaque; /* private data object passed to zalloc and zfree */
- int data_type; /* best guess about the data type: binary or text */
- uLong adler; /* adler32 value of the uncompressed data */
+ int data_type; /* best guess about the data type: binary or text
+ for deflate, or the decoding state for inflate */
+ uLong adler; /* Adler-32 or CRC-32 value of the uncompressed data */
uLong reserved; /* reserved for future use */
} z_stream;
@@ -142,7 +144,9 @@ typedef gz_header FAR *gz_headerp;
zalloc must return Z_NULL if there is not enough memory for the object.
If zlib is used in a multi-threaded application, zalloc and zfree must be
- thread safe.
+ thread safe. In that case, zlib is thread-safe. When zalloc and zfree are
+ Z_NULL on entry to the initialization function, they are set to internal
+ routines that use the standard library functions malloc() and free().
On 16-bit systems, the functions zalloc and zfree must be able to allocate
exactly 65536 bytes, but will not be required to allocate more than this if
@@ -155,7 +159,7 @@ typedef gz_header FAR *gz_headerp;
The fields total_in and total_out can be used for statistics or progress
reports. After compression, total_in holds the total size of the
- uncompressed data and may be saved for use in the decompressor (particularly
+ uncompressed data and may be saved for use by the decompressor (particularly
if the decompressor wants to decompress everything in a single step).
*/
@@ -200,7 +204,7 @@ typedef gz_header FAR *gz_headerp;
#define Z_TEXT 1
#define Z_ASCII Z_TEXT /* for compatibility with 1.2.2 and earlier */
#define Z_UNKNOWN 2
-/* Possible values of the data_type field (though see inflate()) */
+/* Possible values of the data_type field for deflate() */
#define Z_DEFLATED 8
/* The deflate compression method (the only one supported in this version) */
@@ -258,11 +262,11 @@ ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush));
enough room in the output buffer), next_in and avail_in are updated and
processing will resume at this point for the next call of deflate().
- - Provide more output starting at next_out and update next_out and avail_out
+ - Generate more output starting at next_out and update next_out and avail_out
accordingly. This action is forced if the parameter flush is non zero.
Forcing flush frequently degrades the compression ratio, so this parameter
- should be set only when necessary (in interactive applications). Some
- output may be provided even if flush is not set.
+ should be set only when necessary. Some output may be provided even if
+ flush is zero.
Before the call of deflate(), the application should ensure that at least
one of the actions is possible, by providing more input and/or consuming more
@@ -271,7 +275,9 @@ ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush));
output when it wants, for example when the output buffer is full (avail_out
== 0), or after each call of deflate(). If deflate returns Z_OK and with
zero avail_out, it must be called again after making room in the output
- buffer because there might be more output pending.
+ buffer because there might be more output pending. See deflatePending(),
+ which can be used if desired to determine whether or not there is more ouput
+ in that case.
Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to
decide how much data to accumulate before producing output, in order to
@@ -292,8 +298,8 @@ ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush));
input data so far will be available to the decompressor, as for Z_SYNC_FLUSH.
This completes the current deflate block and follows it with an empty fixed
codes block that is 10 bits long. This assures that enough bytes are output
- in order for the decompressor to finish the block before the empty fixed code
- block.
+ in order for the decompressor to finish the block before the empty fixed
+ codes block.
If flush is set to Z_BLOCK, a deflate block is completed and emitted, as
for Z_SYNC_FLUSH, but the output is not aligned on a byte boundary, and up to
@@ -319,34 +325,38 @@ ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush));
If the parameter flush is set to Z_FINISH, pending input is processed,
pending output is flushed and deflate returns with Z_STREAM_END if there was
- enough output space; if deflate returns with Z_OK, this function must be
- called again with Z_FINISH and more output space (updated avail_out) but no
- more input data, until it returns with Z_STREAM_END or an error. After
- deflate has returned Z_STREAM_END, the only possible operations on the stream
- are deflateReset or deflateEnd.
-
- Z_FINISH can be used immediately after deflateInit if all the compression
- is to be done in a single step. In this case, avail_out must be at least the
- value returned by deflateBound (see below). Then deflate is guaranteed to
- return Z_STREAM_END. If not enough output space is provided, deflate will
- not return Z_STREAM_END, and it must be called again as described above.
-
- deflate() sets strm->adler to the adler32 checksum of all input read
- so far (that is, total_in bytes).
+ enough output space. If deflate returns with Z_OK or Z_BUF_ERROR, this
+ function must be called again with Z_FINISH and more output space (updated
+ avail_out) but no more input data, until it returns with Z_STREAM_END or an
+ error. After deflate has returned Z_STREAM_END, the only possible operations
+ on the stream are deflateReset or deflateEnd.
+
+ Z_FINISH can be used in the first deflate call after deflateInit if all the
+ compression is to be done in a single step. In order to complete in one
+ call, avail_out must be at least the value returned by deflateBound (see
+ below). Then deflate is guaranteed to return Z_STREAM_END. If not enough
+ output space is provided, deflate will not return Z_STREAM_END, and it must
+ be called again as described above.
+
+ deflate() sets strm->adler to the Adler-32 checksum of all input read
+ so far (that is, total_in bytes). If a gzip stream is being generated, then
+ strm->adler will be the CRC-32 checksum of the input read so far. (See
+ deflateInit2 below.)
deflate() may update strm->data_type if it can make a good guess about
- the input data type (Z_BINARY or Z_TEXT). In doubt, the data is considered
- binary. This field is only for information purposes and does not affect the
- compression algorithm in any manner.
+ the input data type (Z_BINARY or Z_TEXT). If in doubt, the data is
+ considered binary. This field is only for information purposes and does not
+ affect the compression algorithm in any manner.
deflate() returns Z_OK if some progress has been made (more input
processed or more output produced), Z_STREAM_END if all input has been
consumed and all output has been produced (only when flush is set to
Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example
- if next_in or next_out was Z_NULL), Z_BUF_ERROR if no progress is possible
- (for example avail_in or avail_out was zero). Note that Z_BUF_ERROR is not
- fatal, and deflate() can be called again with more input and more output
- space to continue compressing.
+ if next_in or next_out was Z_NULL or the state was inadvertently written over
+ by the application), or Z_BUF_ERROR if no progress is possible (for example
+ avail_in or avail_out was zero). Note that Z_BUF_ERROR is not fatal, and
+ deflate() can be called again with more input and more output space to
+ continue compressing.
*/
@@ -369,23 +379,21 @@ ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm));
Initializes the internal stream state for decompression. The fields
next_in, avail_in, zalloc, zfree and opaque must be initialized before by
- the caller. If next_in is not Z_NULL and avail_in is large enough (the
- exact value depends on the compression method), inflateInit determines the
- compression method from the zlib header and allocates all data structures
- accordingly; otherwise the allocation will be deferred to the first call of
- inflate. If zalloc and zfree are set to Z_NULL, inflateInit updates them to
- use default allocation functions.
+ the caller. In the current version of inflate, the provided input is not
+ read or consumed. The allocation of a sliding window will be deferred to
+ the first call of inflate (if the decompression does not complete on the
+ first call). If zalloc and zfree are set to Z_NULL, inflateInit updates
+ them to use default allocation functions.
inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough
memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
version assumed by the caller, or Z_STREAM_ERROR if the parameters are
invalid, such as a null pointer to the structure. msg is set to null if
- there is no error message. inflateInit does not perform any decompression
- apart from possibly reading the zlib header if present: actual decompression
- will be done by inflate(). (So next_in and avail_in may be modified, but
- next_out and avail_out are unused and unchanged.) The current implementation
- of inflateInit() does not process any header information -- that is deferred
- until inflate() is called.
+ there is no error message. inflateInit does not perform any decompression.
+ Actual decompression will be done by inflate(). So next_in, and avail_in,
+ next_out, and avail_out are unused and unchanged. The current
+ implementation of inflateInit() does not process any header information --
+ that is deferred until inflate() is called.
*/
@@ -401,17 +409,20 @@ ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush));
- Decompress more input starting at next_in and update next_in and avail_in
accordingly. If not all input can be processed (because there is not
- enough room in the output buffer), next_in is updated and processing will
- resume at this point for the next call of inflate().
+ enough room in the output buffer), then next_in and avail_in are updated
+ accordingly, and processing will resume at this point for the next call of
+ inflate().
- - Provide more output starting at next_out and update next_out and avail_out
+ - Generate more output starting at next_out and update next_out and avail_out
accordingly. inflate() provides as much output as possible, until there is
no more input data or no more space in the output buffer (see below about
the flush parameter).
Before the call of inflate(), the application should ensure that at least
one of the actions is possible, by providing more input and/or consuming more
- output, and updating the next_* and avail_* values accordingly. The
+ output, and updating the next_* and avail_* values accordingly. If the
+ caller of inflate() does not provide both available input and available
+ output space, it is possible that there will be no progress made. The
application can consume the uncompressed output when it wants, for example
when the output buffer is full (avail_out == 0), or after each call of
inflate(). If inflate returns Z_OK and with zero avail_out, it must be
@@ -428,7 +439,7 @@ ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush));
gets to the end of that block, or when it runs out of data.
The Z_BLOCK option assists in appending to or combining deflate streams.
- Also to assist in this, on return inflate() will set strm->data_type to the
+ To assist in this, on return inflate() always sets strm->data_type to the
number of unused bits in the last byte taken from strm->next_in, plus 64 if
inflate() is currently decoding the last block in the deflate stream, plus
128 if inflate() returned immediately after decoding an end-of-block code or
@@ -454,7 +465,7 @@ ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush));
this case all pending input is processed and all pending output is flushed;
avail_out must be large enough to hold all of the uncompressed data for the
operation to complete. (The size of the uncompressed data may have been
- saved by the compressor for this purpose.) The use of Z_FINISH is not
+ saved by the compressor for this purpose.) The use of Z_FINISH is not
required to perform an inflation in one step. However it may be used to
inform inflate that a faster approach can be used for the single inflate()
call. Z_FINISH also informs inflate to not maintain a sliding window if the
@@ -476,32 +487,33 @@ ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush));
chosen by the compressor and returns Z_NEED_DICT; otherwise it sets
strm->adler to the Adler-32 checksum of all output produced so far (that is,
total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described
- below. At the end of the stream, inflate() checks that its computed adler32
+ below. At the end of the stream, inflate() checks that its computed Adler-32
checksum is equal to that saved by the compressor and returns Z_STREAM_END
only if the checksum is correct.
inflate() can decompress and check either zlib-wrapped or gzip-wrapped
deflate data. The header type is detected automatically, if requested when
initializing with inflateInit2(). Any information contained in the gzip
- header is not retained, so applications that need that information should
- instead use raw inflate, see inflateInit2() below, or inflateBack() and
- perform their own processing of the gzip header and trailer. When processing
+ header is not retained unless inflateGetHeader() is used. When processing
gzip-wrapped deflate data, strm->adler32 is set to the CRC-32 of the output
- producted so far. The CRC-32 is checked against the gzip trailer.
+ produced so far. The CRC-32 is checked against the gzip trailer, as is the
+ uncompressed length, modulo 2^32.
inflate() returns Z_OK if some progress has been made (more input processed
or more output produced), Z_STREAM_END if the end of the compressed data has
been reached and all uncompressed output has been produced, Z_NEED_DICT if a
preset dictionary is needed at this point, Z_DATA_ERROR if the input data was
corrupted (input stream not conforming to the zlib format or incorrect check
- value), Z_STREAM_ERROR if the stream structure was inconsistent (for example
- next_in or next_out was Z_NULL), Z_MEM_ERROR if there was not enough memory,
- Z_BUF_ERROR if no progress is possible or if there was not enough room in the
- output buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and
+ value, in which case strm->msg points to a string with a more specific
+ error), Z_STREAM_ERROR if the stream structure was inconsistent (for example
+ next_in or next_out was Z_NULL, or the state was inadvertently written over
+ by the application), Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR
+ if no progress was possible or if there was not enough room in the output
+ buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and
inflate() can be called again with more input and more output space to
continue decompressing. If Z_DATA_ERROR is returned, the application may
then call inflateSync() to look for a good compression block if a partial
- recovery of the data is desired.
+ recovery of the data is to be attempted.
*/
@@ -511,9 +523,8 @@ ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm));
This function discards any unprocessed input and does not flush any pending
output.
- inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state
- was inconsistent. In the error case, msg may be set but then points to a
- static string (which must not be deallocated).
+ inflateEnd returns Z_OK if success, or Z_STREAM_ERROR if the stream state
+ was inconsistent.
*/
@@ -544,16 +555,29 @@ ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm,
compression at the expense of memory usage. The default value is 15 if
deflateInit is used instead.
+ For the current implementation of deflate(), a windowBits value of 8 (a
+ window size of 256 bytes) is not supported. As a result, a request for 8
+ will result in 9 (a 512-byte window). In that case, providing 8 to
+ inflateInit2() will result in an error when the zlib header with 9 is
+ checked against the initialization of inflate(). The remedy is to not use 8
+ with deflateInit2() with this initialization, or at least in that case use 9
+ with inflateInit2().
+
windowBits can also be -8..-15 for raw deflate. In this case, -windowBits
determines the window size. deflate() will then generate raw deflate data
- with no zlib header or trailer, and will not compute an adler32 check value.
+ with no zlib header or trailer, and will not compute a check value.
windowBits can also be greater than 15 for optional gzip encoding. Add
16 to windowBits to write a simple gzip header and trailer around the
compressed data instead of a zlib wrapper. The gzip header will have no
file name, no extra data, no comment, no modification time (set to zero), no
- header crc, and the operating system will be set to 255 (unknown). If a
- gzip stream is being written, strm->adler is a crc32 instead of an adler32.
+ header crc, and the operating system will be set to the appropriate value,
+ if the operating system was determined at compile time. If a gzip stream is
+ being written, strm->adler is a CRC-32 instead of an Adler-32.
+
+ For raw deflate or gzip encoding, a request for a 256-byte window is
+ rejected as invalid, since only the zlib header provides a means of
+ transmitting the window size to the decompressor.
The memLevel parameter specifies how much memory should be allocated
for the internal compression state. memLevel=1 uses minimum memory but is
@@ -614,12 +638,12 @@ ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm,
addition, the current implementation of deflate will use at most the window
size minus 262 bytes of the provided dictionary.
- Upon return of this function, strm->adler is set to the adler32 value
+ Upon return of this function, strm->adler is set to the Adler-32 value
of the dictionary; the decompressor may later use this value to determine
- which dictionary has been used by the compressor. (The adler32 value
+ which dictionary has been used by the compressor. (The Adler-32 value
applies to the whole dictionary even if only a subset of the dictionary is
actually used by the compressor.) If a raw deflate was requested, then the
- adler32 value is not computed and strm->adler is not set.
+ Adler-32 value is not computed and strm->adler is not set.
deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a
parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is
@@ -628,6 +652,28 @@ ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm,
not perform any compression: this will be done by deflate().
*/
+ZEXTERN int ZEXPORT deflateGetDictionary OF((z_streamp strm,
+ Bytef *dictionary,
+ uInt *dictLength));
+/*
+ Returns the sliding dictionary being maintained by deflate. dictLength is
+ set to the number of bytes in the dictionary, and that many bytes are copied
+ to dictionary. dictionary must have enough space, where 32768 bytes is
+ always enough. If deflateGetDictionary() is called with dictionary equal to
+ Z_NULL, then only the dictionary length is returned, and nothing is copied.
+ Similary, if dictLength is Z_NULL, then it is not set.
+
+ deflateGetDictionary() may return a length less than the window size, even
+ when more than the window size in input has been provided. It may return up
+ to 258 bytes less in that case, due to how zlib's implementation of deflate
+ manages the sliding window and lookahead for matches, where matches can be
+ up to 258 bytes long. If the application needs the last window-size bytes of
+ input, then that would need to be saved by the application outside of zlib.
+
+ deflateGetDictionary returns Z_OK on success, or Z_STREAM_ERROR if the
+ stream state is inconsistent.
+*/
+
ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest,
z_streamp source));
/*
@@ -648,10 +694,10 @@ ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest,
ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm));
/*
- This function is equivalent to deflateEnd followed by deflateInit,
- but does not free and reallocate all the internal compression state. The
- stream will keep the same compression level and any other attributes that
- may have been set by deflateInit2.
+ This function is equivalent to deflateEnd followed by deflateInit, but
+ does not free and reallocate the internal compression state. The stream
+ will leave the compression level and any other attributes that may have been
+ set unchanged.
deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
stream state was inconsistent (such as zalloc or state being Z_NULL).
@@ -662,20 +708,36 @@ ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm,
int strategy));
/*
Dynamically update the compression level and compression strategy. The
- interpretation of level and strategy is as in deflateInit2. This can be
+ interpretation of level and strategy is as in deflateInit2(). This can be
used to switch between compression and straight copy of the input data, or
to switch to a different kind of input data requiring a different strategy.
- If the compression level is changed, the input available so far is
- compressed with the old level (and may be flushed); the new level will take
- effect only at the next call of deflate().
-
- Before the call of deflateParams, the stream state must be set as for
- a call of deflate(), since the currently available input may have to be
- compressed and flushed. In particular, strm->avail_out must be non-zero.
-
- deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source
- stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR if
- strm->avail_out was zero.
+ If the compression approach (which is a function of the level) or the
+ strategy is changed, and if any input has been consumed in a previous
+ deflate() call, then the input available so far is compressed with the old
+ level and strategy using deflate(strm, Z_BLOCK). There are three approaches
+ for the compression levels 0, 1..3, and 4..9 respectively. The new level
+ and strategy will take effect at the next call of deflate().
+
+ If a deflate(strm, Z_BLOCK) is performed by deflateParams(), and it does
+ not have enough output space to complete, then the parameter change will not
+ take effect. In this case, deflateParams() can be called again with the
+ same parameters and more output space to try again.
+
+ In order to assure a change in the parameters on the first try, the
+ deflate stream should be flushed using deflate() with Z_BLOCK or other flush
+ request until strm.avail_out is not zero, before calling deflateParams().
+ Then no more input data should be provided before the deflateParams() call.
+ If this is done, the old level and strategy will be applied to the data
+ compressed before deflateParams(), and the new level and strategy will be
+ applied to the the data compressed after deflateParams().
+
+ deflateParams returns Z_OK on success, Z_STREAM_ERROR if the source stream
+ state was inconsistent or if a parameter was invalid, or Z_BUF_ERROR if
+ there was not enough output space to complete the compression of the
+ available input data before a change in the strategy or approach. Note that
+ in the case of a Z_BUF_ERROR, the parameters are not changed. A return
+ value of Z_BUF_ERROR is not fatal, in which case deflateParams() can be
+ retried with more output space.
*/
ZEXTERN int ZEXPORT deflateTune OF((z_streamp strm,
@@ -793,7 +855,7 @@ ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm,
is for use with other formats that use the deflate compressed data format
such as zip. Those formats provide their own check values. If a custom
format is developed using the raw deflate format for compressed data, it is
- recommended that a check value such as an adler32 or a crc32 be applied to
+ recommended that a check value such as an Adler-32 or a CRC-32 be applied to
the uncompressed data as is done in the zlib, gzip, and zip formats. For
most applications, the zlib format should be used as is. Note that comments
above on the use in deflateInit2() applies to the magnitude of windowBits.
@@ -802,7 +864,10 @@ ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm,
32 to windowBits to enable zlib and gzip decoding with automatic header
detection, or add 16 to decode only the gzip format (the zlib format will
return a Z_DATA_ERROR). If a gzip stream is being decoded, strm->adler is a
- crc32 instead of an adler32.
+ CRC-32 instead of an Adler-32. Unlike the gunzip utility and gzread() (see
+ below), inflate() will not automatically decode concatenated gzip streams.
+ inflate() will return Z_STREAM_END at the end of the gzip stream. The state
+ would need to be reset to continue decoding a subsequent gzip stream.
inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
@@ -823,7 +888,7 @@ ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm,
Initializes the decompression dictionary from the given uncompressed byte
sequence. This function must be called immediately after a call of inflate,
if that call returned Z_NEED_DICT. The dictionary chosen by the compressor
- can be determined from the adler32 value returned by that call of inflate.
+ can be determined from the Adler-32 value returned by that call of inflate.
The compressor and decompressor must use exactly the same dictionary (see
deflateSetDictionary). For raw inflate, this function can be called at any
time to set the dictionary. If the provided dictionary is smaller than the
@@ -834,7 +899,7 @@ ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm,
inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a
parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is
inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the
- expected one (incorrect adler32 value). inflateSetDictionary does not
+ expected one (incorrect Adler-32 value). inflateSetDictionary does not
perform any decompression: this will be done by subsequent calls of
inflate().
*/
@@ -892,7 +957,7 @@ ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest,
ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm));
/*
This function is equivalent to inflateEnd followed by inflateInit,
- but does not free and reallocate all the internal decompression state. The
+ but does not free and reallocate the internal decompression state. The
stream will keep attributes that may have been set by inflateInit2.
inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
@@ -904,7 +969,9 @@ ZEXTERN int ZEXPORT inflateReset2 OF((z_streamp strm,
/*
This function is the same as inflateReset, but it also permits changing
the wrap and window size requests. The windowBits parameter is interpreted
- the same as it is for inflateInit2.
+ the same as it is for inflateInit2. If the window size is changed, then the
+ memory allocated for the window is freed, and the window will be reallocated
+ by inflate() if needed.
inflateReset2 returns Z_OK if success, or Z_STREAM_ERROR if the source
stream state was inconsistent (such as zalloc or state being Z_NULL), or if
@@ -956,7 +1023,7 @@ ZEXTERN long ZEXPORT inflateMark OF((z_streamp strm));
location in the input stream can be determined from avail_in and data_type
as noted in the description for the Z_BLOCK flush parameter for inflate.
- inflateMark returns the value noted above or -1 << 16 if the provided
+ inflateMark returns the value noted above, or -65536 if the provided
source stream state was inconsistent.
*/
@@ -1048,9 +1115,9 @@ ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm,
This routine would normally be used in a utility that reads zip or gzip
files and writes out uncompressed files. The utility would decode the
header and process the trailer on its own, hence this routine expects only
- the raw deflate stream to decompress. This is different from the normal
- behavior of inflate(), which expects either a zlib or gzip header and
- trailer around the deflate stream.
+ the raw deflate stream to decompress. This is different from the default
+ behavior of inflate(), which expects a zlib header and trailer around the
+ deflate stream.
inflateBack() uses two subroutines supplied by the caller that are then
called by inflateBack() for input and output. inflateBack() calls those
@@ -1059,12 +1126,12 @@ ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm,
parameters and return types are defined above in the in_func and out_func
typedefs. inflateBack() will call in(in_desc, &buf) which should return the
number of bytes of provided input, and a pointer to that input in buf. If
- there is no input available, in() must return zero--buf is ignored in that
- case--and inflateBack() will return a buffer error. inflateBack() will call
- out(out_desc, buf, len) to write the uncompressed data buf[0..len-1]. out()
- should return zero on success, or non-zero on failure. If out() returns
- non-zero, inflateBack() will return with an error. Neither in() nor out()
- are permitted to change the contents of the window provided to
+ there is no input available, in() must return zero -- buf is ignored in that
+ case -- and inflateBack() will return a buffer error. inflateBack() will
+ call out(out_desc, buf, len) to write the uncompressed data buf[0..len-1].
+ out() should return zero on success, or non-zero on failure. If out()
+ returns non-zero, inflateBack() will return with an error. Neither in() nor
+ out() are permitted to change the contents of the window provided to
inflateBackInit(), which is also the buffer that out() uses to write from.
The length written by out() will be at most the window size. Any non-zero
amount of input may be provided by in().
@@ -1092,7 +1159,7 @@ ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm,
using strm->next_in which will be Z_NULL only if in() returned an error. If
strm->next_in is not Z_NULL, then the Z_BUF_ERROR was due to out() returning
non-zero. (in() will always be called before out(), so strm->next_in is
- assured to be defined if out() returns non-zero.) Note that inflateBack()
+ assured to be defined if out() returns non-zero.) Note that inflateBack()
cannot return Z_OK.
*/
@@ -1114,7 +1181,7 @@ ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void));
7.6: size of z_off_t
Compiler, assembler, and debug options:
- 8: DEBUG
+ 8: ZLIB_DEBUG
9: ASMV or ASMINF -- use ASM code
10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention
11: 0 (reserved)
@@ -1164,7 +1231,8 @@ ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen,
the byte length of the source buffer. Upon entry, destLen is the total size
of the destination buffer, which must be at least the value returned by
compressBound(sourceLen). Upon exit, destLen is the actual size of the
- compressed buffer.
+ compressed data. compress() is equivalent to compress2() with a level
+ parameter of Z_DEFAULT_COMPRESSION.
compress returns Z_OK if success, Z_MEM_ERROR if there was not
enough memory, Z_BUF_ERROR if there was not enough room in the output
@@ -1180,7 +1248,7 @@ ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen,
length of the source buffer. Upon entry, destLen is the total size of the
destination buffer, which must be at least the value returned by
compressBound(sourceLen). Upon exit, destLen is the actual size of the
- compressed buffer.
+ compressed data.
compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
memory, Z_BUF_ERROR if there was not enough room in the output buffer,
@@ -1203,7 +1271,7 @@ ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen,
uncompressed data. (The size of the uncompressed data must have been saved
previously by the compressor and transmitted to the decompressor by some
mechanism outside the scope of this compression library.) Upon exit, destLen
- is the actual size of the uncompressed buffer.
+ is the actual size of the uncompressed data.
uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
enough memory, Z_BUF_ERROR if there was not enough room in the output
@@ -1212,6 +1280,14 @@ ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen,
buffer with the uncompressed data up to that point.
*/
+ZEXTERN int ZEXPORT uncompress2 OF((Bytef *dest, uLongf *destLen,
+ const Bytef *source, uLong *sourceLen));
+/*
+ Same as uncompress, except that sourceLen is a pointer, where the
+ length of the source is *sourceLen. On return, *sourceLen is the number of
+ source bytes consumed.
+*/
+
/* gzip file access functions */
/*
@@ -1290,10 +1366,9 @@ ZEXTERN int ZEXPORT gzbuffer OF((gzFile file, unsigned size));
default buffer size is 8192 bytes. This function must be called after
gzopen() or gzdopen(), and before any other calls that read or write the
file. The buffer memory allocation is always deferred to the first read or
- write. Two buffers are allocated, either both of the specified size when
- writing, or one of the specified size and the other twice that size when
- reading. A larger buffer size of, for example, 64K or 128K bytes will
- noticeably increase the speed of decompression (reading).
+ write. Three times that size in buffer space is allocated. A larger buffer
+ size of, for example, 64K or 128K bytes will noticeably increase the speed
+ of decompression (reading).
The new buffer size also affects the maximum length for gzprintf().
@@ -1304,10 +1379,12 @@ ZEXTERN int ZEXPORT gzbuffer OF((gzFile file, unsigned size));
ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy));
/*
Dynamically update the compression level or strategy. See the description
- of deflateInit2 for the meaning of these parameters.
+ of deflateInit2 for the meaning of these parameters. Previously provided
+ data is flushed before the parameter change.
- gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not
- opened for writing.
+ gzsetparams returns Z_OK if success, Z_STREAM_ERROR if the file was not
+ opened for writing, Z_ERRNO if there is an error writing the flushed data,
+ or Z_MEM_ERROR if there is a memory allocation error.
*/
ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len));
@@ -1335,7 +1412,35 @@ ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len));
case.
gzread returns the number of uncompressed bytes actually read, less than
- len for end of file, or -1 for error.
+ len for end of file, or -1 for error. If len is too large to fit in an int,
+ then nothing is read, -1 is returned, and the error state is set to
+ Z_STREAM_ERROR.
+*/
+
+ZEXTERN z_size_t ZEXPORT gzfread OF((voidp buf, z_size_t size, z_size_t nitems,
+ gzFile file));
+/*
+ Read up to nitems items of size size from file to buf, otherwise operating
+ as gzread() does. This duplicates the interface of stdio's fread(), with
+ size_t request and return types. If the library defines size_t, then
+ z_size_t is identical to size_t. If not, then z_size_t is an unsigned
+ integer type that can contain a pointer.
+
+ gzfread() returns the number of full items read of size size, or zero if
+ the end of the file was reached and a full item could not be read, or if
+ there was an error. gzerror() must be consulted if zero is returned in
+ order to determine if there was an error. If the multiplication of size and
+ nitems overflows, i.e. the product does not fit in a z_size_t, then nothing
+ is read, zero is returned, and the error state is set to Z_STREAM_ERROR.
+
+ In the event that the end of file is reached and only a partial item is
+ available at the end, i.e. the remaining uncompressed data length is not a
+ multiple of size, then the final partial item is nevetheless read into buf
+ and the end-of-file flag is set. The length of the partial item read is not
+ provided, but could be inferred from the result of gztell(). This behavior
+ is the same as the behavior of fread() implementations in common libraries,
+ but it prevents the direct use of gzfread() to read a concurrently written
+ file, reseting and retrying on end-of-file, when size is not 1.
*/
ZEXTERN int ZEXPORT gzwrite OF((gzFile file,
@@ -1346,19 +1451,33 @@ ZEXTERN int ZEXPORT gzwrite OF((gzFile file,
error.
*/
+ZEXTERN z_size_t ZEXPORT gzfwrite OF((voidpc buf, z_size_t size,
+ z_size_t nitems, gzFile file));
+/*
+ gzfwrite() writes nitems items of size size from buf to file, duplicating
+ the interface of stdio's fwrite(), with size_t request and return types. If
+ the library defines size_t, then z_size_t is identical to size_t. If not,
+ then z_size_t is an unsigned integer type that can contain a pointer.
+
+ gzfwrite() returns the number of full items written of size size, or zero
+ if there was an error. If the multiplication of size and nitems overflows,
+ i.e. the product does not fit in a z_size_t, then nothing is written, zero
+ is returned, and the error state is set to Z_STREAM_ERROR.
+*/
+
ZEXTERN int ZEXPORTVA gzprintf Z_ARG((gzFile file, const char *format, ...));
/*
Converts, formats, and writes the arguments to the compressed file under
control of the format string, as in fprintf. gzprintf returns the number of
- uncompressed bytes actually written, or 0 in case of error. The number of
- uncompressed bytes written is limited to 8191, or one less than the buffer
- size given to gzbuffer(). The caller should assure that this limit is not
- exceeded. If it is exceeded, then gzprintf() will return an error (0) with
- nothing written. In this case, there may also be a buffer overflow with
- unpredictable consequences, which is possible only if zlib was compiled with
- the insecure functions sprintf() or vsprintf() because the secure snprintf()
- or vsnprintf() functions were not available. This can be determined using
- zlibCompileFlags().
+ uncompressed bytes actually written, or a negative zlib error code in case
+ of error. The number of uncompressed bytes written is limited to 8191, or
+ one less than the buffer size given to gzbuffer(). The caller should assure
+ that this limit is not exceeded. If it is exceeded, then gzprintf() will
+ return an error (0) with nothing written. In this case, there may also be a
+ buffer overflow with unpredictable consequences, which is possible only if
+ zlib was compiled with the insecure functions sprintf() or vsprintf()
+ because the secure snprintf() or vsnprintf() functions were not available.
+ This can be determined using zlibCompileFlags().
*/
ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s));
@@ -1418,7 +1537,7 @@ ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush));
If the flush parameter is Z_FINISH, the remaining data is written and the
gzip stream is completed in the output. If gzwrite() is called again, a new
gzip stream will be started in the output. gzread() is able to read such
- concatented gzip streams.
+ concatenated gzip streams.
gzflush should be called only when strictly necessary because it will
degrade compression if called too often.
@@ -1572,7 +1691,7 @@ ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len));
return the updated checksum. If buf is Z_NULL, this function returns the
required initial value for the checksum.
- An Adler-32 checksum is almost as reliable as a CRC32 but can be computed
+ An Adler-32 checksum is almost as reliable as a CRC-32 but can be computed
much faster.
Usage example:
@@ -1585,6 +1704,12 @@ ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len));
if (adler != original_adler) error();
*/
+ZEXTERN uLong ZEXPORT adler32_z OF((uLong adler, const Bytef *buf,
+ z_size_t len));
+/*
+ Same as adler32(), but with a size_t length.
+*/
+
/*
ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2,
z_off_t len2));
@@ -1614,6 +1739,12 @@ ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len));
if (crc != original_crc) error();
*/
+ZEXTERN uLong ZEXPORT crc32_z OF((uLong adler, const Bytef *buf,
+ z_size_t len));
+/*
+ Same as crc32(), but with a size_t length.
+*/
+
/*
ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2));
@@ -1644,19 +1775,35 @@ ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits,
unsigned char FAR *window,
const char *version,
int stream_size));
-#define deflateInit(strm, level) \
- deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream))
-#define inflateInit(strm) \
- inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream))
-#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \
- deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\
- (strategy), ZLIB_VERSION, (int)sizeof(z_stream))
-#define inflateInit2(strm, windowBits) \
- inflateInit2_((strm), (windowBits), ZLIB_VERSION, \
- (int)sizeof(z_stream))
-#define inflateBackInit(strm, windowBits, window) \
- inflateBackInit_((strm), (windowBits), (window), \
- ZLIB_VERSION, (int)sizeof(z_stream))
+#ifdef Z_PREFIX_SET
+# define z_deflateInit(strm, level) \
+ deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream))
+# define z_inflateInit(strm) \
+ inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream))
+# define z_deflateInit2(strm, level, method, windowBits, memLevel, strategy) \
+ deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\
+ (strategy), ZLIB_VERSION, (int)sizeof(z_stream))
+# define z_inflateInit2(strm, windowBits) \
+ inflateInit2_((strm), (windowBits), ZLIB_VERSION, \
+ (int)sizeof(z_stream))
+# define z_inflateBackInit(strm, windowBits, window) \
+ inflateBackInit_((strm), (windowBits), (window), \
+ ZLIB_VERSION, (int)sizeof(z_stream))
+#else
+# define deflateInit(strm, level) \
+ deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream))
+# define inflateInit(strm) \
+ inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream))
+# define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \
+ deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\
+ (strategy), ZLIB_VERSION, (int)sizeof(z_stream))
+# define inflateInit2(strm, windowBits) \
+ inflateInit2_((strm), (windowBits), ZLIB_VERSION, \
+ (int)sizeof(z_stream))
+# define inflateBackInit(strm, windowBits, window) \
+ inflateBackInit_((strm), (windowBits), (window), \
+ ZLIB_VERSION, (int)sizeof(z_stream))
+#endif
#ifndef Z_SOLO
@@ -1676,11 +1823,10 @@ ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file)); /* backward compatibility */
#ifdef Z_PREFIX_SET
# undef z_gzgetc
# define z_gzgetc(g) \
- ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : gzgetc(g))
+ ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : (gzgetc)(g))
#else
-# undef gzgetc
# define gzgetc(g) \
- ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : gzgetc(g))
+ ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : (gzgetc)(g))
#endif
/* provide 64-bit offset functions if _LARGEFILE64_SOURCE defined, and/or
@@ -1738,19 +1884,16 @@ ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file)); /* backward compatibility */
#endif /* !Z_SOLO */
-/* hack for buggy compilers */
-#if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL)
- struct internal_state {int dummy;};
-#endif
-
/* undocumented functions */
ZEXTERN const char * ZEXPORT zError OF((int));
ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp));
ZEXTERN const z_crc_t FAR * ZEXPORT get_crc_table OF((void));
ZEXTERN int ZEXPORT inflateUndermine OF((z_streamp, int));
+ZEXTERN int ZEXPORT inflateValidate OF((z_streamp, int));
+ZEXTERN unsigned long ZEXPORT inflateCodesUsed OF ((z_streamp));
ZEXTERN int ZEXPORT inflateResetKeep OF((z_streamp));
ZEXTERN int ZEXPORT deflateResetKeep OF((z_streamp));
-#if defined(_WIN32) && !defined(Z_SOLO)
+#if (defined(_WIN32) || defined(__CYGWIN__)) && !defined(Z_SOLO)
ZEXTERN gzFile ZEXPORT gzopen_w OF((const wchar_t *path,
const char *mode));
#endif
diff --git a/modules/zlib/src/zutil.c b/modules/zlib/src/zutil.c
index 23d2ebef0..a76c6b0c7 100644
--- a/modules/zlib/src/zutil.c
+++ b/modules/zlib/src/zutil.c
@@ -1,5 +1,5 @@
/* zutil.c -- target dependent utility functions for the compression library
- * Copyright (C) 1995-2005, 2010, 2011, 2012 Jean-loup Gailly.
+ * Copyright (C) 1995-2017 Jean-loup Gailly
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -10,21 +10,18 @@
# include "gzguts.h"
#endif
-#ifndef NO_DUMMY_DECL
-struct internal_state {int dummy;}; /* for buggy compilers */
-#endif
-
z_const char * const z_errmsg[10] = {
-"need dictionary", /* Z_NEED_DICT 2 */
-"stream end", /* Z_STREAM_END 1 */
-"", /* Z_OK 0 */
-"file error", /* Z_ERRNO (-1) */
-"stream error", /* Z_STREAM_ERROR (-2) */
-"data error", /* Z_DATA_ERROR (-3) */
-"insufficient memory", /* Z_MEM_ERROR (-4) */
-"buffer error", /* Z_BUF_ERROR (-5) */
-"incompatible version",/* Z_VERSION_ERROR (-6) */
-""};
+ (z_const char *)"need dictionary", /* Z_NEED_DICT 2 */
+ (z_const char *)"stream end", /* Z_STREAM_END 1 */
+ (z_const char *)"", /* Z_OK 0 */
+ (z_const char *)"file error", /* Z_ERRNO (-1) */
+ (z_const char *)"stream error", /* Z_STREAM_ERROR (-2) */
+ (z_const char *)"data error", /* Z_DATA_ERROR (-3) */
+ (z_const char *)"insufficient memory", /* Z_MEM_ERROR (-4) */
+ (z_const char *)"buffer error", /* Z_BUF_ERROR (-5) */
+ (z_const char *)"incompatible version",/* Z_VERSION_ERROR (-6) */
+ (z_const char *)""
+};
const char * ZEXPORT zlibVersion()
@@ -61,7 +58,7 @@ uLong ZEXPORT zlibCompileFlags()
case 8: flags += 2 << 6; break;
default: flags += 3 << 6;
}
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
flags += 1 << 8;
#endif
#if defined(ASMV) || defined(ASMINF)
@@ -115,8 +112,8 @@ uLong ZEXPORT zlibCompileFlags()
return flags;
}
-#ifdef DEBUG
-
+#ifdef ZLIB_DEBUG
+#include <stdlib.h>
# ifndef verbose
# define verbose 0
# endif
@@ -219,9 +216,11 @@ local ptr_table table[MAX_PTR];
voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, unsigned items, unsigned size)
{
- voidpf buf = opaque; /* just to make some compilers happy */
+ voidpf buf;
ulg bsize = (ulg)items*size;
+ (void)opaque;
+
/* If we allocate less than 65520 bytes, we assume that farmalloc
* will return a usable pointer which doesn't have to be normalized.
*/
@@ -244,6 +243,9 @@ voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, unsigned items, unsigned size)
void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)
{
int n;
+
+ (void)opaque;
+
if (*(ush*)&ptr != 0) { /* object < 64K */
farfree(ptr);
return;
@@ -259,7 +261,6 @@ void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)
next_ptr--;
return;
}
- ptr = opaque; /* just to make some compilers happy */
Assert(0, "zcfree: ptr not found");
}
@@ -278,13 +279,13 @@ void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)
voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, uInt items, uInt size)
{
- if (opaque) opaque = 0; /* to make compiler happy */
+ (void)opaque;
return _halloc((long)items, size);
}
void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)
{
- if (opaque) opaque = 0; /* to make compiler happy */
+ (void)opaque;
_hfree(ptr);
}
@@ -306,7 +307,7 @@ voidpf ZLIB_INTERNAL zcalloc (opaque, items, size)
unsigned items;
unsigned size;
{
- if (opaque) items += size - size; /* make compiler happy */
+ (void)opaque;
return sizeof(uInt) > 2 ? (voidpf)malloc(items * size) :
(voidpf)calloc(items, size);
}
@@ -315,8 +316,8 @@ void ZLIB_INTERNAL zcfree (opaque, ptr)
voidpf opaque;
voidpf ptr;
{
+ (void)opaque;
free(ptr);
- if (opaque) return; /* make compiler happy */
}
#endif /* MY_ZCALLOC */
diff --git a/modules/zlib/src/zutil.h b/modules/zlib/src/zutil.h
index 18fbef2aa..b079ea6a8 100644
--- a/modules/zlib/src/zutil.h
+++ b/modules/zlib/src/zutil.h
@@ -1,5 +1,5 @@
/* zutil.h -- internal interface and configuration of the compression library
- * Copyright (C) 1995-2013 Jean-loup Gailly.
+ * Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -36,7 +36,9 @@
#ifndef local
# define local static
#endif
-/* compile with -Dlocal if your debugger can't find static symbols */
+/* since "static" is used to mean two completely different things in C, we
+ define "local" for the non-static meaning of "static", for readability
+ (compile with -Dlocal if your debugger can't find static symbols) */
typedef unsigned char uch;
typedef uch FAR uchf;
@@ -98,28 +100,38 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
#endif
#ifdef AMIGA
-# define OS_CODE 0x01
+# define OS_CODE 1
#endif
#if defined(VAXC) || defined(VMS)
-# define OS_CODE 0x02
+# define OS_CODE 2
# define F_OPEN(name, mode) \
fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512")
#endif
+#ifdef __370__
+# if __TARGET_LIB__ < 0x20000000
+# define OS_CODE 4
+# elif __TARGET_LIB__ < 0x40000000
+# define OS_CODE 11
+# else
+# define OS_CODE 8
+# endif
+#endif
+
#if defined(ATARI) || defined(atarist)
-# define OS_CODE 0x05
+# define OS_CODE 5
#endif
#ifdef OS2
-# define OS_CODE 0x06
+# define OS_CODE 6
# if defined(M_I86) && !defined(Z_SOLO)
# include <malloc.h>
# endif
#endif
#if defined(MACOS) || defined(TARGET_OS_MAC)
-# define OS_CODE 0x07
+# define OS_CODE 7
# ifndef Z_SOLO
# if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os
# include <unix.h> /* for fdopen */
@@ -131,18 +143,24 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
# endif
#endif
-#ifdef TOPS20
-# define OS_CODE 0x0a
+#ifdef __acorn
+# define OS_CODE 13
#endif
-#ifdef WIN32
-# ifndef __CYGWIN__ /* Cygwin is Unix, not Win32 */
-# define OS_CODE 0x0b
-# endif
+#if defined(WIN32) && !defined(__CYGWIN__)
+# define OS_CODE 10
#endif
-#ifdef __50SERIES /* Prime/PRIMOS */
-# define OS_CODE 0x0f
+#ifdef _BEOS_
+# define OS_CODE 16
+#endif
+
+#ifdef __TOS_OS400__
+# define OS_CODE 18
+#endif
+
+#ifdef __APPLE__
+# define OS_CODE 19
#endif
#if defined(_BEOS_) || defined(RISCOS)
@@ -177,7 +195,7 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
/* common defaults */
#ifndef OS_CODE
-# define OS_CODE 0x03 /* assume Unix */
+# define OS_CODE 3 /* assume Unix */
#endif
#ifndef F_OPEN
@@ -215,13 +233,8 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
void ZLIB_INTERNAL zmemzero OF((Bytef* dest, uInt len));
#endif
-/* Ignore the Mozilla build env's DEBUG unless ZLIB_DEBUG is also set. */
-#ifndef ZLIB_DEBUG
-#undef DEBUG
-#endif
-
/* Diagnostic functions */
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
# include <stdio.h>
extern int ZLIB_INTERNAL z_verbose;
extern void ZLIB_INTERNAL z_error OF((char *m));
diff --git a/netwerk/base/nsFileStreams.cpp b/netwerk/base/nsFileStreams.cpp
index 2ddb7ae98..6508b33b9 100644
--- a/netwerk/base/nsFileStreams.cpp
+++ b/netwerk/base/nsFileStreams.cpp
@@ -1015,11 +1015,18 @@ nsAtomicFileOutputStream::DoOpen()
}
if (NS_SUCCEEDED(rv) && mTargetFileExists) {
+ // Abort if |file| is not writable; it won't work as an output stream.
+ bool isWritable;
+ if (NS_SUCCEEDED(file->IsWritable(&isWritable)) && !isWritable) {
+ return NS_ERROR_FILE_ACCESS_DENIED;
+ }
+
uint32_t origPerm;
if (NS_FAILED(file->GetPermissions(&origPerm))) {
NS_ERROR("Can't get permissions of target file");
origPerm = mOpenParams.perm;
}
+
// XXX What if |perm| is more restrictive then |origPerm|?
// This leaves the user supplied permissions as they were.
rv = tempResult->CreateUnique(nsIFile::NORMAL_FILE_TYPE, origPerm);
diff --git a/netwerk/protocol/http/nsCORSListenerProxy.cpp b/netwerk/protocol/http/nsCORSListenerProxy.cpp
index c2a624330..b9355c82b 100644
--- a/netwerk/protocol/http/nsCORSListenerProxy.cpp
+++ b/netwerk/protocol/http/nsCORSListenerProxy.cpp
@@ -577,7 +577,7 @@ nsCORSListenerProxy::CheckRequestApproved(nsIRequest* aRequest)
// check for duplicate headers
rv = http->VisitOriginalResponseHeaders(visitor);
if (NS_FAILED(rv)) {
- LogBlockedRequest(aRequest, "CORSAllowOriginNotMatchingOrigin", nullptr);
+ LogBlockedRequest(aRequest, "CORSMultipleAllowOriginNotAllowed", nullptr);
return rv;
}
diff --git a/old-configure.in b/old-configure.in
index a95b307f2..d40305309 100644
--- a/old-configure.in
+++ b/old-configure.in
@@ -4568,10 +4568,10 @@ AC_SUBST(MOZ_DEVTOOLS_SERVER)
dnl ========================================================
dnl = Disable Mozilla Developer Tools (client)
dnl ========================================================
-MOZ_ARG_DISABLE_BOOL(devtools,
-[ --disable-devtools Disable Mozilla Developer Tools (client)],
- MOZ_DEVTOOLS=,
- MOZ_DEVTOOLS=1)
+MOZ_ARG_ENABLE_BOOL(devtools,
+[ --enable-devtools Enable Mozilla Developer Tools (client)],
+ MOZ_DEVTOOLS=1,
+ MOZ_DEVTOOLS=)
if test -n "$MOZ_DEVTOOLS"; then
if test ! -n "$MOZ_DEVTOOLS_SERVER"; then
diff --git a/parser/html/nsHtml5AtomTable.cpp b/parser/html/nsHtml5AtomTable.cpp
index d523f58b0..ae35791f3 100644
--- a/parser/html/nsHtml5AtomTable.cpp
+++ b/parser/html/nsHtml5AtomTable.cpp
@@ -24,6 +24,7 @@ nsHtml5AtomEntry::~nsHtml5AtomEntry()
}
nsHtml5AtomTable::nsHtml5AtomTable()
+ : mRecentlyUsedParserAtoms{}
{
#ifdef DEBUG
NS_GetMainThread(getter_AddRefs(mPermittedLookupThread));
@@ -44,13 +45,23 @@ nsHtml5AtomTable::GetAtom(const nsAString& aKey)
NS_ASSERTION(mPermittedLookupThread == currentThread, "Wrong thread!");
}
#endif
+
+ uint32_t index = mozilla::HashString(aKey) % RECENTLY_USED_PARSER_ATOMS_SIZE;
+ nsIAtom* cachedAtom = mRecentlyUsedParserAtoms[index];
+ if (cachedAtom && cachedAtom->Equals(aKey)) {
+ return cachedAtom;
+ }
+
nsIAtom* atom = NS_GetStaticAtom(aKey);
if (atom) {
+ mRecentlyUsedParserAtoms[index] = atom;
return atom;
}
nsHtml5AtomEntry* entry = mTable.PutEntry(aKey);
if (!entry) {
return nullptr;
}
+
+ mRecentlyUsedParserAtoms[index] = entry->GetAtom();
return entry->GetAtom();
}
diff --git a/parser/html/nsHtml5AtomTable.h b/parser/html/nsHtml5AtomTable.h
index 43f9b5f2f..b0dc2f678 100644
--- a/parser/html/nsHtml5AtomTable.h
+++ b/parser/html/nsHtml5AtomTable.h
@@ -11,6 +11,8 @@
#include "nsIAtom.h"
#include "nsIThread.h"
+#define RECENTLY_USED_PARSER_ATOMS_SIZE 31
+
class nsHtml5Atom;
class nsHtml5AtomEntry : public nsStringHashKey
@@ -87,6 +89,9 @@ class nsHtml5AtomTable
*/
void Clear()
{
+ for (uint32_t i = 0; i < RECENTLY_USED_PARSER_ATOMS_SIZE; ++i) {
+ mRecentlyUsedParserAtoms[i] = nullptr;
+ }
mTable.Clear();
}
@@ -99,6 +104,7 @@ class nsHtml5AtomTable
private:
nsTHashtable<nsHtml5AtomEntry> mTable;
+ nsIAtom* mRecentlyUsedParserAtoms[RECENTLY_USED_PARSER_ATOMS_SIZE];
#ifdef DEBUG
nsCOMPtr<nsIThread> mPermittedLookupThread;
#endif
diff --git a/security/certverifier/ExtendedValidation.cpp b/security/certverifier/ExtendedValidation.cpp
index 8ac5828de..37c028c54 100644
--- a/security/certverifier/ExtendedValidation.cpp
+++ b/security/certverifier/ExtendedValidation.cpp
@@ -1285,15 +1285,7 @@ LoadExtendedValidationInfo()
UniqueCERTCertificate cert(CERT_FindCertByIssuerAndSN(nullptr, &ias));
- // If an entry is missing in the NSS root database, it may be because the
- // root database is out of sync with what we expect (e.g. a different
- // version of system NSS is installed).
- if (!cert) {
- // The entries for the debug EV roots are at indices 0 through
- // NUM_TEST_EV_ROOTS - 1. Since they're not built-in, they probably
- // haven't been loaded yet.
- MOZ_ASSERT(iEV < NUM_TEST_EV_ROOTS, "Could not find built-in EV root");
- } else {
+ if (cert) {
unsigned char certFingerprint[SHA256_LENGTH];
srv = PK11_HashBuf(SEC_OID_SHA256, certFingerprint, cert->derCert.data,
AssertedCast<int32_t>(cert->derCert.len));
diff --git a/security/manager/locales/en-US/chrome/pipnss/pipnss.properties b/security/manager/locales/en-US/chrome/pipnss/pipnss.properties
index 9c732ce9d..23d7a323c 100755
--- a/security/manager/locales/en-US/chrome/pipnss/pipnss.properties
+++ b/security/manager/locales/en-US/chrome/pipnss/pipnss.properties
@@ -279,8 +279,7 @@ certErrorExpiredNow=The certificate expired on %1$S. The current time is %2$S.
# LOCALIZATION NOTE (certErrorNotYetValidNow): Do not translate %1$S (date+time certificate will become valid) or %2$S (current date+time)
certErrorNotYetValidNow=The certificate will not be valid until %1$S. The current time is %2$S.
-# LOCALIZATION NOTE (certErrorCodePrefix2): Do not translate <a id="errorCode" title="%1$S">%1$S</a>
-certErrorCodePrefix2=Error code: <a id="errorCode" title="%1$S">%1$S</a>
+certErrorCodePrefix=(Error code: %S)
P12DefaultNickname=Imported Certificate
CertUnknown=Unknown
diff --git a/security/manager/ssl/TransportSecurityInfo.cpp b/security/manager/ssl/TransportSecurityInfo.cpp
index fe39f4017..0e2238ad0 100644
--- a/security/manager/ssl/TransportSecurityInfo.cpp
+++ b/security/manager/ssl/TransportSecurityInfo.cpp
@@ -854,7 +854,7 @@ AppendErrorTextCode(PRErrorCode errorCodeToReport,
nsString formattedString;
nsresult rv;
- rv = component->PIPBundleFormatStringFromName("certErrorCodePrefix2",
+ rv = component->PIPBundleFormatStringFromName("certErrorCodePrefix",
params, 1,
formattedString);
if (NS_SUCCEEDED(rv)) {
diff --git a/security/manager/ssl/nsNSSErrors.cpp b/security/manager/ssl/nsNSSErrors.cpp
index fc8bd3e31..1613eb4e7 100644
--- a/security/manager/ssl/nsNSSErrors.cpp
+++ b/security/manager/ssl/nsNSSErrors.cpp
@@ -84,7 +84,7 @@ nsNSSErrors::getErrorMessageFromCode(PRErrorCode err,
params[0] = idU.get();
nsString formattedString;
- rv = component->PIPBundleFormatStringFromName("certErrorCodePrefix2",
+ rv = component->PIPBundleFormatStringFromName("certErrorCodePrefix",
params, 1,
formattedString);
if (NS_SUCCEEDED(rv)) {
diff --git a/security/manager/ssl/nsSTSPreloadList.errors b/security/manager/ssl/nsSTSPreloadList.errors
index 69c844419..fa74755b2 100644
--- a/security/manager/ssl/nsSTSPreloadList.errors
+++ b/security/manager/ssl/nsSTSPreloadList.errors
@@ -1,18 +1,20 @@
0-1.party: could not connect to host
+0.me.uk: did not receive HSTS header
00001.am: max-age too low: 129600
00002.am: max-age too low: 129600
0005.com: could not connect to host
0005aa.com: could not connect to host
+0005pay.com: did not receive HSTS header
00220022.net: could not connect to host
007-preisvergleich.de: could not connect to host
007kf.com: could not connect to host
007sascha.de: did not receive HSTS header
-00881919.com: did not receive HSTS header
+00880088.net: could not connect to host
00wbf.com: could not connect to host
01100010011001010111001101110100.com: could not connect to host
016298.com: did not receive HSTS header
020wifi.nl: could not connect to host
-0222aa.com: did not receive HSTS header
+0222aa.com: could not connect to host
023838.com: did not receive HSTS header
029inno.com: could not connect to host
02dl.net: could not connect to host
@@ -21,24 +23,30 @@
040fitvitality.nl: did not receive HSTS header
048.ag: could not connect to host
050508.com: could not connect to host
+066318.com: could not connect to host
066718.com: did not receive HSTS header
+066928.com: could not connect to host
+066938.com: could not connect to host
070709.net: could not connect to host
-07733.win: could not connect to host
+0c.eu: did not receive HSTS header
+0cdn.ga: could not connect to host
0day.su: could not connect to host
0f.io: could not connect to host
0fl.com: did not receive HSTS header
0g.org.uk: could not connect to host
0i0.nl: could not connect to host
+0iz.net: could not connect to host
0o0.ooo: could not connect to host
0p.no: did not receive HSTS header
+0vi.org: could not connect to host
0w0.vc: could not connect to host
0x0a.net: could not connect to host
0x1337.eu: could not connect to host
0x44.net: did not receive HSTS header
0x4b0c131e.pub: could not connect to host
0x52.org: could not connect to host
-0x539.be: could not connect to host
-0x539.pw: could not connect to host
+0x539.be: did not receive HSTS header
+0x539.pw: did not receive HSTS header
0x65.net: did not receive HSTS header
0x90.fi: could not connect to host
0x90.in: could not connect to host
@@ -53,15 +61,19 @@
1017scribes.com: could not connect to host
1018hosting.nl: did not receive HSTS header
1022996493.rsc.cdn77.org: could not connect to host
+1066.io: could not connect to host
1091.jp: could not connect to host
10gbit.ovh: could not connect to host
10tacle.io: could not connect to host
10x.ooo: could not connect to host
+1116pay.com: did not receive HSTS header
11recruitment.com.au: did not receive HSTS header
12.net: did not receive HSTS header
120dayweightloss.com: could not connect to host
+123110.com: could not connect to host
123movies.fyi: did not receive HSTS header
123share.org: did not receive HSTS header
+123termpapers.com: could not connect to host
123test.de: did not receive HSTS header
123test.es: did not receive HSTS header
123test.fr: did not receive HSTS header
@@ -72,16 +84,20 @@
135vv.com: could not connect to host
13826145000.com: could not connect to host
1396.cc: did not receive HSTS header
+15-10.com: did not receive HSTS header
1536.cf: could not connect to host
+160887.com: did not receive HSTS header
16164f.com: could not connect to host
163pwd.com: could not connect to host
+166166.com: could not connect to host
168bet9.com: could not connect to host
+168esb.com: could not connect to host
16deza.com: did not receive HSTS header
16packets.com: could not connect to host
173vpn.cn: did not receive HSTS header
173vpns.com: could not connect to host
173vpnv.com: could not connect to host
-174.net.nz: could not connect to host
+174.net.nz: did not receive HSTS header
174343.com: did not receive HSTS header
188522.com: did not receive HSTS header
1888zr.com: could not connect to host
@@ -89,31 +105,35 @@
188trafalgar.ca: did not receive HSTS header
1912x.com: could not connect to host
1921958389.rsc.cdn77.org: could not connect to host
-195gm.com: could not connect to host
+195gm.com: did not receive HSTS header
1a-jva.de: could not connect to host
1atic.com: could not connect to host
-1b1.pl: could not connect to host
1co-jp.net: did not receive HSTS header
1cover.com: could not connect to host
1day1ac.red: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
1er-secours.ch: could not connect to host
1gsoft.com: could not connect to host
+1item.co.il: did not receive HSTS header
1k8b.com: could not connect to host
1nian.vip: could not connect to host
+1pw.ca: did not receive HSTS header
1q365a.com: could not connect to host
1s.tn: could not connect to host
+1st4abounce.co.uk: did not receive HSTS header
1stcapital.com.sg: did not receive HSTS header
1three1.net: did not receive HSTS header
1xcess.com: did not receive HSTS header
1years.cc: did not receive HSTS header
-2-cpu.de: did not receive HSTS header
+2-cpu.de: could not connect to host
20188088.com: did not receive HSTS header
2048game.co.uk: could not connect to host
206rc.net: max-age too low: 2592000
208.es: did not receive HSTS header
20hs.cn: did not receive HSTS header
+20zq.com: could not connect to host
21lg.co: could not connect to host
21stnc.com: could not connect to host
+2333.press: could not connect to host
233boy.com: could not connect to host
247quickbooks.com: did not receive HSTS header
2488.ch: did not receive HSTS header
@@ -121,11 +141,14 @@
24hourpaint.com: could not connect to host
24hrs.shopping: did not receive HSTS header
24kbet.com: could not connect to host
+24pcr.com: could not connect to host
24sihu.com: could not connect to host
256k.me: could not connect to host
+256pages.com: did not receive HSTS header
25daysof.io: could not connect to host
+260887.com: did not receive HSTS header
2859cc.com: could not connect to host
-29227.com: did not receive HSTS header
+29227.com: could not connect to host
2acbi-asso.fr: did not receive HSTS header
2au.ru: could not connect to host
2b3b.com: could not connect to host
@@ -143,19 +166,24 @@
300mbmovies4u.cc: could not connect to host
301.website: could not connect to host
302.nyc: could not connect to host
+30hzcollective.com: could not connect to host
+3133780x.com: did not receive HSTS header
314166.com: could not connect to host
314chan.org: could not connect to host
+31tv.ru: did not receive HSTS header
32ph.com: could not connect to host
330.net: could not connect to host
-33836.com: could not connect to host
+338da.com: could not connect to host
33drugstore.com: did not receive HSTS header
341.mg: did not receive HSTS header
+34oztonic.eu: did not receive HSTS header
3555500.com: could not connect to host
3555aa.com: could not connect to host
35792.de: could not connect to host
360gradus.com: did not receive HSTS header
365.or.jp: could not connect to host
365beautyworld.com: could not connect to host
+365maya.com: did not receive HSTS header
368mibn.com: could not connect to host
3778xl.com: did not receive HSTS header
3839.ca: could not connect to host
@@ -174,22 +202,41 @@
3sreporting.com: did not receive HSTS header
3vlnaeet.cz: could not connect to host
3wecommerce.com.br: could not connect to host
+3xx.link: could not connect to host
+4-it.de: could not connect to host
+4036aa.com: did not receive HSTS header
+4036bb.com: did not receive HSTS header
+4036cc.com: did not receive HSTS header
+4036dd.com: did not receive HSTS header
404.guide: could not connect to host
404.sh: could not connect to host
404404.info: could not connect to host
404forest.com: did not receive HSTS header
41844.de: could not connect to host
+41studio.com: could not connect to host
420dongstorm.com: could not connect to host
42ms.org: could not connect to host
42t.ru: could not connect to host
-439191.com: could not connect to host
+439191.com: did not receive HSTS header
+440887.com: did not receive HSTS header
440hz-radio.de: did not receive HSTS header
440hz.radio: did not receive HSTS header
+442887.com: did not receive HSTS header
+443887.com: did not receive HSTS header
+444887.com: did not receive HSTS header
4455software.com: could not connect to host
+445887.com: did not receive HSTS header
44957.com: could not connect to host
4679.space: did not receive HSTS header
+4706666.com: did not receive HSTS header
+4716666.com: did not receive HSTS header
+4726666.com: did not receive HSTS header
+4736666.com: did not receive HSTS header
+4756666.com: did not receive HSTS header
+4786666.com: did not receive HSTS header
47tech.com: could not connect to host
-4azino777.ru: could not connect to host
+4997777.com: could not connect to host
+4azino777.ru: did not receive HSTS header
4baby.com.br: could not connect to host
4bike.eu: did not receive HSTS header
4cclothing.com: could not connect to host
@@ -203,13 +250,17 @@
4sqsu.eu: could not connect to host
4w-performers.link: could not connect to host
4web-hosting.com: could not connect to host
+4winds.pt: could not connect to host
5000yz.com: could not connect to host
500103.com: could not connect to host
500108.com: could not connect to host
50millionablaze.org: could not connect to host
-513vpn.net: did not receive HSTS header
+513vpn.net: could not connect to host
517vpn.cn: could not connect to host
-518maicai.com: did not receive HSTS header
+518maicai.com: could not connect to host
+51aifuli.com: could not connect to host
+52b9.com: could not connect to host
+52b9.net: could not connect to host
52kb.net: could not connect to host
52kb1.com: could not connect to host
52neptune.com: could not connect to host
@@ -220,55 +271,67 @@
56877.com: could not connect to host
56ct.com: could not connect to host
57aromas.com: did not receive HSTS header
-5chat.it: could not connect to host
+57he.com: did not receive HSTS header
5piecesofadvice.com: could not connect to host
605508.cc: could not connect to host
605508.com: could not connect to host
60ych.net: did not receive HSTS header
6120.eu: did not receive HSTS header
-62755.com: could not connect to host
+62755.com: did not receive HSTS header
64616e.xyz: could not connect to host
660011.com: max-age too low: 0
+6677.us: did not receive HSTS header
68277.me: could not connect to host
+688da.com: could not connect to host
692b8c32.de: could not connect to host
69mentor.com: could not connect to host
69square.com: could not connect to host
+7045h.com: could not connect to host
7183.org: could not connect to host
-721av.com: could not connect to host
+721av.com: max-age too low: 2592000
724go.com: could not connect to host
7261696e626f77.net: could not connect to host
+72ty.com: could not connect to host
+72ty.net: could not connect to host
73223.com: did not receive HSTS header
776573.net: could not connect to host
7777av.co: could not connect to host
77890k.com: could not connect to host
+77book.cn: could not connect to host
7f-wgg.cf: could not connect to host
7links.com.br: did not receive HSTS header
7thheavenrestaurant.com: could not connect to host
+7trade8.com: could not connect to host
8.net.co: could not connect to host
-8003pay.com: did not receive HSTS header
+8003pay.com: could not connect to host
808.lv: could not connect to host
+808phone.net: could not connect to host
81uc.com: could not connect to host
+826468.com: could not connect to host
+826498.com: could not connect to host
+82ty.com: could not connect to host
83i.net: could not connect to host
8522.am: could not connect to host
8522cn.com: did not receive HSTS header
8560.be: could not connect to host
-86499.com: did not receive HSTS header
-8649955.com: did not receive HSTS header
-8649966.com: did not receive HSTS header
-8649977.com: did not receive HSTS header
+86metro.ru: could not connect to host
+8722.com: did not receive HSTS header
87577.com: could not connect to host
88.to: could not connect to host
+887.ag: did not receive HSTS header
8887999.com: could not connect to host
8888av.co: could not connect to host
888azino.com: did not receive HSTS header
888lu.co: could not connect to host
+88d.com: could not connect to host
88laohu.cc: could not connect to host
88laohu.com: could not connect to host
89955.com: could not connect to host
-899699.com: could not connect to host
+899699.com: did not receive HSTS header
89he.com: could not connect to host
-8azino777.ru: could not connect to host
+8azino777.ru: did not receive HSTS header
8ballbombom.uk: could not connect to host
+8da2018.com: could not connect to host
8mpay.com: did not receive HSTS header
8t88.biz: could not connect to host
90smthng.com: could not connect to host
@@ -276,7 +339,7 @@
9118b.com: could not connect to host
911911.pw: could not connect to host
915ers.com: did not receive HSTS header
-918116.com: could not connect to host
+918yy.com: did not receive HSTS header
91dh.cc: could not connect to host
91lt.info: could not connect to host
922.be: could not connect to host
@@ -291,6 +354,7 @@
99buffets.com: could not connect to host
9jadirect.com: could not connect to host
9point6.com: could not connect to host
+a-intel.com: did not receive HSTS header
a-ix.net: could not connect to host
a-plus.space: could not connect to host
a-rickroll-n.pw: could not connect to host
@@ -298,29 +362,31 @@ a-theme.com: could not connect to host
a1-autopartsglasgow.com: could not connect to host
a1798.com: could not connect to host
a200k.xyz: did not receive HSTS header
+a2c-co.net: could not connect to host
a2it.gr: did not receive HSTS header
a3workshop.swiss: could not connect to host
a9c.co: could not connect to host
aa7733.com: could not connect to host
+aacfree.com: did not receive HSTS header
aaeblog.com: did not receive HSTS header
aaeblog.net: did not receive HSTS header
aaeblog.org: did not receive HSTS header
aaoo.net: could not connect to host
aapp.space: could not connect to host
aariefhaafiz.com: could not connect to host
-aarkue.eu: did not receive HSTS header
aaron-gustafson.com: did not receive HSTS header
aaronmcguire.me: did not receive HSTS header
aarvinproperties.com: could not connect to host
aati.info: could not connect to host
+abandonedmines.gov: could not connect to host
abareplace.com: did not receive HSTS header
abasky.net: could not connect to host
+abcdef.be: could not connect to host
abcdentalcare.com: did not receive HSTS header
abcdobebe.com: did not receive HSTS header
abchelp.net: did not receive HSTS header
abearofsoap.com: could not connect to host
abecodes.net: could not connect to host
-abhisharma.me: did not receive HSTS header
abi-fvs.de: could not connect to host
abigailstark.com: could not connect to host
abilitylist.org: did not receive HSTS header
@@ -328,10 +394,9 @@ abioniere.de: could not connect to host
ablogagency.net: could not connect to host
abloop.com: could not connect to host
abmahnhelfer.de: did not receive HSTS header
-abmgood.com: max-age too low: 0
abnarnro.com: could not connect to host
abolition.co: could not connect to host
-abona24.pl: max-age too low: 0
+abosav.com: did not receive HSTS header
abou.to: could not connect to host
about.ge: did not receive HSTS header
aboutassistedliving.org: did not receive HSTS header
@@ -354,6 +419,7 @@ academy4.net: did not receive HSTS header
acadianapatios.com: did not receive HSTS header
acai51.net: could not connect to host
acaonegocios.com.br: could not connect to host
+acat.io: could not connect to host
acbc.ie: max-age too low: 0
accelerate.network: could not connect to host
accelerole.com: did not receive HSTS header
@@ -361,8 +427,7 @@ accelight.co.jp: did not receive HSTS header
accelight.jp: did not receive HSTS header
access-sofia.org: did not receive HSTS header
accolade.com.br: could not connect to host
-accommodation-berry.com.au: max-age too low: 300
-accoun.technology: did not receive HSTS header
+accoun.technology: could not connect to host
accountradar.com: max-age too low: 86400
accounts-p.com: could not connect to host
accountsuspended.club: could not connect to host
@@ -390,13 +455,12 @@ acrossgw.com: could not connect to host
acslimited.co.uk: did not receive HSTS header
actilove.ch: could not connect to host
actiontowingroundrock.com: could not connect to host
-activateplay.com: max-age too low: 86400
+activateplay.com: did not receive HSTS header
active-escape.com: did not receive HSTS header
-activeclearweb.com: could not connect to host
activeweb.top: could not connect to host
+activistasconstructivos.org: did not receive HSTS header
activiti.alfresco.com: did not receive HSTS header
-actom.cc: could not connect to host
-actom.org: could not connect to host
+actu-film.com: max-age too low: 0
actu-medias.com: could not connect to host
actualite-videos.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
acuve.jp: could not connect to host
@@ -407,9 +471,9 @@ adambryant.ca: could not connect to host
adamcoffee.net: could not connect to host
adamdixon.co.uk: could not connect to host
adamricheimer.com: could not connect to host
-adamwallington.co.uk: could not connect to host
adamwk.com: did not receive HSTS header
adastra.re: could not connect to host
+adblock.ovh: could not connect to host
adboos.com: could not connect to host
addaxpetroleum.com: could not connect to host
addcrazy.com: did not receive HSTS header
@@ -428,18 +492,18 @@ adhs-chaoten.net: did not receive HSTS header
adigitali.biz: did not receive HSTS header
adindexr.com: could not connect to host
adlerweb.info: did not receive HSTS header
-admin-forms.co.uk: could not connect to host
+admin-forms.co.uk: did not receive HSTS header
+admin-numerique.com: did not receive HSTS header
admin.google.com: did not receive HSTS header (error ignored - included regardless)
admins.tech: could not connect to host
adminwerk.net: did not receive HSTS header
+admirable.one: did not receive HSTS header
admiral.dp.ua: did not receive HSTS header
admitcard.co.in: could not connect to host
-admongo.gov: did not receive HSTS header
admsel.ec: could not connect to host
adoal.net: did not receive HSTS header
adoge.me: could not connect to host
adonairelogios.com.br: could not connect to host
-adoniscabaret.co.uk: could not connect to host
adopteunsiteflash.com: could not connect to host
adprospb.com: did not receive HSTS header
adquisitio.de: could not connect to host
@@ -457,18 +521,18 @@ adunanza.net: did not receive HSTS header
advaithnikhi.ml: could not connect to host
advaithnikhi.tk: could not connect to host
advanced-online.eu: could not connect to host
+advancedplasticsurgerycenter.com: did not receive HSTS header
advancedseotool.it: did not receive HSTS header
advancedstudio.ro: could not connect to host
advancedwriters.com: could not connect to host
advantagemechanicalinc.com: did not receive HSTS header
adventistdeploy.org: could not connect to host
adventures.is: did not receive HSTS header
-adver.top: did not receive HSTS header
+adver.top: could not connect to host
advertisemant.com: could not connect to host
adviespuntklokkenluiders.nl: could not connect to host
adzie.xyz: could not connect to host
adzuna.co.uk: did not receive HSTS header
-aelurus.com: could not connect to host
aemoria.com: could not connect to host
aeon.wiki: could not connect to host
aerialmediapro.net: could not connect to host
@@ -484,6 +548,7 @@ aeyoun.com: did not receive HSTS header
af-fotografie.net: did not receive HSTS header
afdkompakt.de: max-age too low: 86400
affily.io: could not connect to host
+affinity.vc: did not receive HSTS header
affordablebouncycastle.co.uk: did not receive HSTS header
affordablepapers.com: could not connect to host
aficotroceni.ro: did not receive HSTS header
@@ -498,18 +563,23 @@ agalaxyfarfaraway.co.uk: could not connect to host
agatheetraphael.fr: could not connect to host
agbremen.de: could not connect to host
agdalieso.com.ba: could not connect to host
-agelesscitizens.com: did not receive HSTS header
+agelesscitizen.com: could not connect to host
+agelesscitizens.com: could not connect to host
+agenbettingasia.com: did not receive HSTS header
agenciagriff.com: did not receive HSTS header
agencymanager.be: could not connect to host
agentseeker.ca: could not connect to host
agevio.com: could not connect to host
-agingstop.net: did not receive HSTS header
+agileecommerce.com.br: could not connect to host
+agingstop.net: could not connect to host
+agonswim.com: did not receive HSTS header
agoravm.tk: could not connect to host
agowa.eu: did not receive HSTS header
agowa338.de: did not receive HSTS header
agrafix.design: did not receive HSTS header
agrarking.com: could not connect to host
-agrias.com.br: did not receive HSTS header
+agrias.com.br: could not connect to host
+agricolo.ch: could not connect to host
agrikulturchic.com: could not connect to host
agrimap.com: did not receive HSTS header
agro-id.gov.ua: did not receive HSTS header
@@ -517,30 +587,40 @@ agroglass.com.br: did not receive HSTS header
agtv.com.br: did not receive HSTS header
ahabingo.com: did not receive HSTS header
ahelos.tk: could not connect to host
-ahfazahmed.net: max-age too low: 0
+ahkubiak.ovh: could not connect to host
ahlz.sk: could not connect to host
+ahmedcharles.com: could not connect to host
aholic.co: did not receive HSTS header
ahoynetwork.com: could not connect to host
ahri.ovh: could not connect to host
ahsin.online: could not connect to host
+ahwah.net: could not connect to host
ahwatukeefoothillsmontessori.com: did not receive HSTS header
-aibsoftware.mx: did not receive HSTS header
+ai1989.com: could not connect to host
+aibsoftware.mx: could not connect to host
+aicial.co.uk: could not connect to host
aicial.com: did not receive HSTS header
aicial.com.au: could not connect to host
aid-web.ch: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
aidanwoods.com: did not receive HSTS header
+aide-admin.com: could not connect to host
aidikofflaw.com: did not receive HSTS header
+aiesecarad.ro: could not connect to host
aifreeze.ru: could not connect to host
aify.eu: could not connect to host
aignermunich.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
aignermunich.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-aignermunich.jp: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
aikenorganics.com: could not connect to host
aim-consultants.com: could not connect to host
aimrom.org: could not connect to host
ainrb.com: could not connect to host
+aioboot.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
aip-marine.com: could not connect to host
+aiphyron.com: could not connect to host
aiponne.com: could not connect to host
+airconsalberton.co.za: did not receive HSTS header
+airedaleterrier.com.br: could not connect to host
+airfax.io: could not connect to host
airlea.com: could not connect to host
airlinecheckins.com: did not receive HSTS header
airmazinginflatables.com: could not connect to host
@@ -558,11 +638,13 @@ ajw-group.com: did not receive HSTS header
aka.my: did not receive HSTS header
akboy.pw: could not connect to host
akclinics.org: did not receive HSTS header
+akcounselingservices.com: did not receive HSTS header
akerek.hu: could not connect to host
akgundemirbas.com: could not connect to host
akhilindurti.com: could not connect to host
akhras.at: did not receive HSTS header
akiba-server.info: could not connect to host
+akihiro.xyz: could not connect to host
akita-stream.com: could not connect to host
akkadia.cc: could not connect to host
akombakom.net: could not connect to host
@@ -582,25 +664,26 @@ alarmegps.ch: could not connect to host
alarmsystemreviews.com: did not receive HSTS header
alasta.info: could not connect to host
alauda-home.de: could not connect to host
+alaundeil.xyz: could not connect to host
albanien.guide: could not connect to host
alberguecimballa.es: could not connect to host
-albertbogdanowicz.pl: did not receive HSTS header
albertify.xyz: could not connect to host
+albertonplumber24-7.co.za: did not receive HSTS header
albertopimienta.com: did not receive HSTS header
alcantarafleuriste.com: did not receive HSTS header
alcatraz.online: could not connect to host
alcazaar.com: could not connect to host
alchemia.co.il: did not receive HSTS header
-alcnutrition.com: could not connect to host
+alcorao.org: could not connect to host
aleax.me: could not connect to host
alecvannoten.be: did not receive HSTS header
+aleksejjocic.tk: could not connect to host
alenan.org: could not connect to host
aleph.land: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
alertaenlinea.gov: did not receive HSTS header
alessandro.pw: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
alessandroz.pro: could not connect to host
alethearose.com: did not receive HSTS header
-alexandernorth.ch: could not connect to host
alexandre.sh: did not receive HSTS header
alexbaker.org: did not receive HSTS header
alexdodge.ca: did not receive HSTS header
@@ -609,17 +692,22 @@ alexfisherhealth.com.au: did not receive HSTS header
alexhaydock.co.uk: did not receive HSTS header
alexismeza.dk: could not connect to host
alexkidd.de: did not receive HSTS header
+alexmak.net: did not receive HSTS header
alexmol.tk: could not connect to host
alexperry.io: could not connect to host
alfa24.pro: could not connect to host
+alfaperfumes.com.br: could not connect to host
alfaponny.se: could not connect to host
alfirous.com: could not connect to host
alfredxing.com: did not receive HSTS header
algarmatic-automatismos.pt: could not connect to host
algebraaec.com: did not receive HSTS header
+alghaib.com: did not receive HSTS header
alibababee.com: did not receive HSTS header
+alien.bz: could not connect to host
+alikulov.me: did not receive HSTS header
alilialili.ga: could not connect to host
-alinemaciel.adm.br: did not receive HSTS header
+alinemaciel.adm.br: could not connect to host
alistairpialek.com: max-age too low: 86400
alittlebitcheeky.com: did not receive HSTS header
aliwebstore.com: could not connect to host
@@ -630,9 +718,11 @@ alkamitech.com: max-age too low: 0
all-subtitles.com: could not connect to host
all.tf: could not connect to host
all4os.com: did not receive HSTS header
+allangirvan.net: could not connect to host
alldaymonitoring.com: could not connect to host
alldm.ru: could not connect to host
allegro-inc.com: did not receive HSTS header
+allenosgood.com: could not connect to host
allfreelancers.su: did not receive HSTS header
allgrass.es: did not receive HSTS header
allgrass.net: did not receive HSTS header
@@ -640,7 +730,6 @@ alliance-compacts.com: did not receive HSTS header
allinnote.com: could not connect to host
allinonecyprus.com: did not receive HSTS header
allkindzabeats.com: did not receive HSTS header
-allladyboys.com: could not connect to host
allmbw.com: could not connect to host
allmystery.de: did not receive HSTS header
allods-zone.ru: did not receive HSTS header
@@ -651,12 +740,15 @@ allpropertyservices.com: did not receive HSTS header
allprorisk.com: did not receive HSTS header
allrealty.co.za: could not connect to host
allscammers.exposed: could not connect to host
+allseasons-cleaning.co.uk: could not connect to host
allsortscastles.co.uk: could not connect to host
allstarswithus.com: could not connect to host
allstorebrasil.com.br: could not connect to host
alltheducks.com: max-age too low: 43200
allthingsfpl.com: could not connect to host
-almatinki.com: could not connect to host
+allvips.ru: could not connect to host
+almagalla.com: could not connect to host
+almatinki.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
aloalabs.com: did not receive HSTS header
alocato.com: could not connect to host
alparque.com: did not receive HSTS header
@@ -668,6 +760,7 @@ alphahunks.com: could not connect to host
alphalabs.xyz: could not connect to host
als-hardware.co.za: did not receive HSTS header
alspolska.pl: max-age too low: 2592000
+alt-tab-design.com: did not receive HSTS header
alt33c3.org: could not connect to host
altahrim.net: could not connect to host
altaide.com: did not receive HSTS header
@@ -675,23 +768,26 @@ altailife.ru: did not receive HSTS header
altamarea.se: could not connect to host
altbinaries.com: could not connect to host
alteqnia.com: could not connect to host
+alterbaum.net: could not connect to host
altercpa.ru: did not receive HSTS header
altfire.ca: could not connect to host
altiacaselight.com: could not connect to host
+altitudemoversdenver.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
altmv.com: max-age too low: 7776000
altporn.xyz: could not connect to host
aluminium-scaffolding.co.uk: could not connect to host
alunjam.es: did not receive HSTS header
alunonaescola.com.br: could not connect to host
-aluoblog.top: did not receive HSTS header
alusta.co: could not connect to host
am8888.top: could not connect to host
-amaderelectronics.com: could not connect to host
-amadoraslindas.com: could not connect to host
+amaderelectronics.com: did not receive HSTS header
+amadilo.de: did not receive HSTS header
amaforums.org: did not receive HSTS header
amagical.net: did not receive HSTS header
amandaonishi.com: could not connect to host
-amateri.com: could not connect to host
+amaranthus.com.ph: could not connect to host
+amartinz.at: could not connect to host
+amatzen.dk: did not receive HSTS header
amavis.org: did not receive HSTS header
amazing-gaming.fr: could not connect to host
amazingbouncycastles.co.uk: did not receive HSTS header
@@ -700,6 +796,7 @@ ambiancestudio.ro: could not connect to host
ambrosius.io: could not connect to host
amcvega.com: did not receive HSTS header
amdouglas.uk: could not connect to host
+amechancez.site: could not connect to host
amerhd.com: could not connect to host
american-truck-simulator.de: could not connect to host
american-truck-simulator.net: could not connect to host
@@ -720,40 +817,53 @@ amimoto-ami.com: max-age too low: 3153600
amishsecurity.com: could not connect to host
amitse.com: did not receive HSTS header
amitube.com: did not receive HSTS header
-amleeds.co.uk: did not receive HSTS header
+amleeds.co.uk: could not connect to host
amlvfs.net: could not connect to host
ammoulianiapartments.com: did not receive HSTS header
amo-entreprise-et-commerce.fr: could not connect to host
amobileway.co.uk: did not receive HSTS header
amoory.com: could not connect to host
+amoozesh98.com: could not connect to host
+amoozesh98.ir: could not connect to host
amorimendes.com.br: could not connect to host
ampledesigners.com: could not connect to host
ampleinfographics.com: could not connect to host
amri.nl: did not receive HSTS header
+amsportuk.com: did not receive HSTS header
amtentertainments.co.uk: could not connect to host
amua.fr: could not connect to host
amunoz.org: could not connect to host
+amv-crm.ru: could not connect to host
anabol.nl: could not connect to host
anacruz.es: did not receive HSTS header
anadoluefessporkulubu.org: could not connect to host
+anaethelion.fr: could not connect to host
anagra.ms: could not connect to host
-analangelsteen.com: could not connect to host
+anakros.me: could not connect to host
analpantyhose.org: could not connect to host
-analteengirls.net: could not connect to host
analytic-s.ml: could not connect to host
analytics-shop.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
analyticsinmotion.net: could not connect to host
+analyticum.at: could not connect to host
+analyticum.com: could not connect to host
+analyticum.de: could not connect to host
+analyticum.eu: could not connect to host
+analyticum.net: could not connect to host
analyzemyfriends.com: could not connect to host
-ananyoo.com: did not receive HSTS header
+anastasiafond.com: could not connect to host
+ancarda.net: could not connect to host
anchorgrounds.com: did not receive HSTS header
anchorinmarinainc.com: did not receive HSTS header
+ancient-gates.de: could not connect to host
+ancientcraft.eu: could not connect to host
ancientkarma.com: could not connect to host
+andbraiz.com: did not receive HSTS header
andere-gedanken.net: max-age too low: 10
anderslind.dk: could not connect to host
-andre-ballensiefen.de: could not connect to host
andreagobetti.com: did not receive HSTS header
andreas-kluge.eu: could not connect to host
andreasanti.net: did not receive HSTS header
+andreasbasurto.com: could not connect to host
andreasbreitenlohner.de: max-age too low: 600000
andreasfritz-fotografie.de: could not connect to host
andreaskluge.eu: could not connect to host
@@ -764,10 +874,12 @@ andrerose.ca: did not receive HSTS header
andrew.fi: did not receive HSTS header
andrew.london: did not receive HSTS header
andrewbroekman.com: did not receive HSTS header
+andrewdavidwong.com: did not receive HSTS header
andrewdaws.co: could not connect to host
andrewdaws.info: could not connect to host
andrewdaws.me: could not connect to host
andrewdaws.tv: could not connect to host
+andrewhowden.com: could not connect to host
andrewmichaud.beer: could not connect to host
andrewrdaws.com: could not connect to host
andrewregan.me: could not connect to host
@@ -778,12 +890,14 @@ andrewyg.net: could not connect to host
andreypopp.com: could not connect to host
android: could not connect to host
androidprosmart.com: could not connect to host
+androidsphone.com: did not receive HSTS header
androled.fr: max-age too low: 5184000
andronika.net: could not connect to host
androoz.se: could not connect to host
andyclark.io: could not connect to host
andycraftz.eu: did not receive HSTS header
andymartin.cc: could not connect to host
+andymelichar.com: max-age too low: 0
andyuk.org: could not connect to host
anecuni-club.com: could not connect to host
anecuni-rec.com: could not connect to host
@@ -791,6 +905,7 @@ anendlesssupply.co.uk: did not receive HSTS header
anfenglish.com: did not receive HSTS header
anfsanchezo.co: could not connect to host
anfsanchezo.me: could not connect to host
+angelic47.com: could not connect to host
angeloroberto.ch: did not receive HSTS header
angeloventuri.com: did not receive HSTS header
angervillelorcher.fr: did not receive HSTS header
@@ -798,15 +913,14 @@ anghami.com: did not receive HSTS header
anglictinatabor.cz: could not connect to host
angry-monk.com: could not connect to host
angrydragonproductions.com: could not connect to host
-angrylab.com: could not connect to host
+angrylab.com: did not receive HSTS header
angryroute.com: could not connect to host
-animal-nature-human.com: could not connect to host
animalnet.de: max-age too low: 7776000
animalstropic.com: could not connect to host
+anime1.top: could not connect to host
anime1video.tk: could not connect to host
animeday.ml: could not connect to host
animesfusion.com.br: could not connect to host
-animesharp.com: could not connect to host
animurecs.com: could not connect to host
aniplus.cf: could not connect to host
aniplus.gq: could not connect to host
@@ -826,33 +940,37 @@ annarbor.group: did not receive HSTS header
annetaan.fi: could not connect to host
annevankesteren.com: could not connect to host
annevankesteren.org: could not connect to host
+annrusnak.com: did not receive HSTS header
annsbouncycastles.com: could not connect to host
anomaly.ws: did not receive HSTS header
anonboards.com: could not connect to host
+anonrea.ch: could not connect to host
anonymo.co.uk: could not connect to host
anonymo.uk: could not connect to host
anonymousstatecollegelulzsec.com: could not connect to host
-anook.com: max-age too low: 0
anothermilan.net: could not connect to host
ansdell.info: could not connect to host
-ansermfg.com: did not receive HSTS header
+anseo.ninja: could not connect to host
+ansermfg.com: max-age too low: 0
ansgar.tk: could not connect to host
+anshuman-chatterjee.com: did not receive HSTS header
anshumanbiswas.com: could not connect to host
-ansibeast.net: could not connect to host
answers-online.ru: could not connect to host
ant.land: could not connect to host
+antecim.fr: could not connect to host
antenasmundosat.com.br: did not receive HSTS header
-antennista.milano.it: did not receive HSTS header
anthenor.co.uk: could not connect to host
anthonyavon.com: could not connect to host
+anthonyloop.com: did not receive HSTS header
anthro.id: did not receive HSTS header
+antifraud.net.ru: could not connect to host
antimatiere.space: could not connect to host
antimine.kr: could not connect to host
antipa.ch: could not connect to host
-antoine-roux.fr: could not connect to host
+antoine-roux.fr: did not receive HSTS header
antoinebetas.be: max-age too low: 0
antoined.fr: did not receive HSTS header
-antoinemary.io: could not connect to host
+antoinemary.io: did not receive HSTS header
antoineschaller.ch: did not receive HSTS header
antoniomarques.eu: did not receive HSTS header
antoniorequena.com.ve: could not connect to host
@@ -864,7 +982,9 @@ anunayk.com: could not connect to host
anycoin.me: could not connect to host
anyfood.fi: could not connect to host
anytonetech.com: did not receive HSTS header
+aobogo.com: could not connect to host
aocast.info: could not connect to host
+aojao.cn: could not connect to host
aojf.fr: could not connect to host
aolabs.nz: did not receive HSTS header
aomberg.com: did not receive HSTS header
@@ -895,6 +1015,7 @@ apolloyl.com: could not connect to host
aponkral.site: could not connect to host
aponkralsunucu.com: could not connect to host
aponow.de: did not receive HSTS header
+apotheek-nl.org: max-age too low: 3600
app: could not connect to host
app-arena.com: did not receive HSTS header
app.manilla.com: could not connect to host
@@ -922,14 +1043,14 @@ apptoutou.com: could not connect to host
appuro.com: did not receive HSTS header
appxcrypto.com: did not receive HSTS header
aprpullmanportermuseum.org: did not receive HSTS header
-aqilacademy.com.au: could not connect to host
+aptitude9.com: could not connect to host
aqqrate.com: could not connect to host
-aquariumaccessories.shop: did not receive HSTS header
+aquariumaccessories.shop: could not connect to host
aquilaguild.com: could not connect to host
aquilalab.com: could not connect to host
-aquireceitas.com: could not connect to host
+aquireceitas.com: did not receive HSTS header
+ar.al: did not receive HSTS header
arabdigitalexpression.org: did not receive HSTS header
-arabsexi.info: could not connect to host
aradulconteaza.ro: could not connect to host
aran.me.uk: could not connect to host
arboineuropa.nl: did not receive HSTS header
@@ -938,6 +1059,8 @@ arcadiaeng.com: did not receive HSTS header
arcbit.io: could not connect to host
archii.ca: did not receive HSTS header
architecte-interieur.be: did not receive HSTS header
+archmediamarketing.com: could not connect to host
+archsec.info: could not connect to host
arckr.com: could not connect to host
ardao.me: could not connect to host
ardorlabs.se: could not connect to host
@@ -947,7 +1070,9 @@ arent.kz: could not connect to host
arenzanaphotography.com: could not connect to host
arewedubstepyet.com: did not receive HSTS header
areyouever.me: could not connect to host
+argama-nature.com: did not receive HSTS header
argennon.xyz: could not connect to host
+argh.io: could not connect to host
arguggi.co.uk: could not connect to host
ariacreations.net: did not receive HSTS header
arifburhan.online: could not connect to host
@@ -969,9 +1094,8 @@ armored.ninja: did not receive HSTS header
armory.consulting: could not connect to host
armory.supplies: could not connect to host
armsday.com: could not connect to host
-armyofbane.com: did not receive HSTS header
+armyofbane.com: could not connect to host
armytricka.cz: did not receive HSTS header
-arnaudminable.net: could not connect to host
arne-petersen.net: did not receive HSTS header
arnesolutions.com: could not connect to host
aromaclub.nl: did not receive HSTS header
@@ -994,11 +1118,13 @@ artartefatos.com.br: could not connect to host
artbytik.ru: did not receive HSTS header
artegusto.ru: did not receive HSTS header
artemicroway.com.br: could not connect to host
+arteseideias.com.pt: did not receive HSTS header
artesupra.com: did not receive HSTS header
arthan.me: could not connect to host
articaexports.com: could not connect to host
artifex21.com: did not receive HSTS header
artifex21.fr: did not receive HSTS header
+artificial.army: could not connect to host
artiming.com: could not connect to host
artisanhd.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
artisavotins.com: could not connect to host
@@ -1006,11 +1132,15 @@ artisense.de: could not connect to host
artisphere.ch: did not receive HSTS header
artisticedgegranite.net: could not connect to host
artistnetwork.nl: did not receive HSTS header
+artnims.com: could not connect to host
+arto.bg: did not receive HSTS header
artofeyes.nl: could not connect to host
artsinthevalley.net.au: did not receive HSTS header
+artstopinc.com: did not receive HSTS header
+arturkohut.com: could not connect to host
artyland.ru: could not connect to host
arvamus.eu: could not connect to host
-arxell.com: did not receive HSTS header
+arvindhariharan.me: did not receive HSTS header
arzaroth.com: did not receive HSTS header
as.se: could not connect to host
as9178.net: could not connect to host
@@ -1019,7 +1149,6 @@ asahikoji.net: could not connect to host
asana.studio: did not receive HSTS header
asasuou.pw: could not connect to host
asc16.com: could not connect to host
-ascamso.com: could not connect to host
aschaefer.net: could not connect to host
asciitable.tips: could not connect to host
asdpress.cn: could not connect to host
@@ -1029,12 +1158,15 @@ ashleakunowski.com: could not connect to host
ashleyadum.com: could not connect to host
ashleyfoley.photography: could not connect to host
ashleymedway.com: could not connect to host
-ashutoshmishra.org: did not receive HSTS header
+asianbet77.co: did not receive HSTS header
asianbet77.net: did not receive HSTS header
asisee.co.il: could not connect to host
ask.fedoraproject.org: did not receive HSTS header
+ask.pe: could not connect to host
ask.stg.fedoraproject.org: could not connect to host
askfit.cz: did not receive HSTS header
+askmagicconch.com: could not connect to host
+asm-x.com: could not connect to host
asmm.cc: did not receive HSTS header
asmui.ga: could not connect to host
asmui.ml: could not connect to host
@@ -1042,6 +1174,7 @@ asoftwareco.com: did not receive HSTS header
asphaltfruehling.de: could not connect to host
asphyxia.su: could not connect to host
asral7.com: could not connect to host
+asryflorist.com: could not connect to host
ass.org.au: could not connect to host
assadrivesloirecher.com: could not connect to host
assdecoeur.org: could not connect to host
@@ -1051,7 +1184,7 @@ asset-alive.net: did not receive HSTS header
assetsupervision.com: could not connect to host
assindia.nl: could not connect to host
assurancesmons.be: did not receive HSTS header
-astaninki.com: could not connect to host
+astaninki.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
asthon.cn: could not connect to host
astraalivankila.net: could not connect to host
astral.gq: did not receive HSTS header
@@ -1060,11 +1193,13 @@ astrea-voetbal-groningen.nl: could not connect to host
astrolpost.com: could not connect to host
astromelody.com: did not receive HSTS header
astronomie-fulda.de: did not receive HSTS header
+astrosnail.pt.eu.org: could not connect to host
astutr.co: could not connect to host
asuhe.cc: could not connect to host
asuhe.win: did not receive HSTS header
asuhe.xyz: could not connect to host
-async.be: could not connect to host
+async.be: max-age too low: 0
+at-one.ca: could not connect to host
at1.co: could not connect to host
atacadooptico.com.br: could not connect to host
atavio.at: could not connect to host
@@ -1076,15 +1211,12 @@ atelier-rk.com: did not receive HSTS header
atelier-viennois-cannes.fr: did not receive HSTS header
ateliernihongo.ch: did not receive HSTS header
ateliersantgervasi.com: did not receive HSTS header
-atencionbimbo.com: max-age too low: 86400
athaliasoft.com: could not connect to host
athenelive.com: could not connect to host
athensbusinessresources.us: did not receive HSTS header
athi.pl: did not receive HSTS header
athul.xyz: could not connect to host
-atigerseye.com: could not connect to host
atkdesign.pt: did not receive HSTS header
-atlantishq.de: could not connect to host
atlas-5.site: could not connect to host
atlas-staging.ml: could not connect to host
atlassian.net: did not receive HSTS header
@@ -1092,11 +1224,10 @@ atlayo.com: did not receive HSTS header
atlex.nl: did not receive HSTS header
atlseccon.com: did not receive HSTS header
atomic.menu: could not connect to host
-atomik.pro: could not connect to host
+atomik.pro: did not receive HSTS header
atop.io: could not connect to host
atracaosexshop.com.br: could not connect to host
attic118.com: could not connect to host
-attilagyorffy.com: could not connect to host
attimidesigns.com: did not receive HSTS header
attogproductions.com: did not receive HSTS header
au-pair24.de: did not receive HSTS header
@@ -1107,23 +1238,23 @@ audiense.com: did not receive HSTS header
audiovisualdevices.com.au: did not receive HSTS header
audividi.shop: did not receive HSTS header
aufmerksamkeitsstudie.com: could not connect to host
+aufprise.de: did not receive HSTS header
augenblicke-blog.de: could not connect to host
augias.org: could not connect to host
augix.net: could not connect to host
augrandinquisiteur.com: did not receive HSTS header
aujapan.ru: could not connect to host
-aulo.in: could not connect to host
auntieme.com: did not receive HSTS header
aurainfosec.com: did not receive HSTS header
aurainfosec.com.au: did not receive HSTS header
auraredeye.com: could not connect to host
auraredshield.com: could not connect to host
-aureliaskincare.com: max-age too low: 0
aurora-terraria.org: did not receive HSTS header
aurorarecordings.com: could not connect to host
auroratownshipfd.org: could not connect to host
aurugs.com: did not receive HSTS header
ausec.ch: could not connect to host
+auskunftsbegehren.at: did not receive HSTS header
auslandsjahr-usa.de: did not receive HSTS header
ausnah.me: could not connect to host
ausschreibungen-suedtirol.it: did not receive HSTS header
@@ -1131,9 +1262,10 @@ aussiecable.org: did not receive HSTS header
aussiehq.com.au: did not receive HSTS header
aussiewebmarketing.com.au: did not receive HSTS header
austinmobilemechanics.net: did not receive HSTS header
-austinstore.com.br: did not receive HSTS header
+austinstore.com.br: could not connect to host
austinsutphin.com: could not connect to host
australiancattle.dog: could not connect to host
+australianfreebets.com.au: did not receive HSTS header
auth.mail.ru: did not receive HSTS header
authenitech.com: did not receive HSTS header
authentication.io: could not connect to host
@@ -1142,7 +1274,7 @@ authland.com: could not connect to host
author24.ru: did not receive HSTS header
authoritynutrition.com: did not receive HSTS header
authsrv.nl.eu.org: could not connect to host
-autimatisering.nl: could not connect to host
+autism-osaka.org: could not connect to host
auto-serwis.zgorzelec.pl: could not connect to host
auto3d.cn: could not connect to host
auto4trade.nl: could not connect to host
@@ -1151,9 +1283,9 @@ autobedrijfschalkoort.nl: did not receive HSTS header
autocarparts.ro: could not connect to host
autodeploy.it: could not connect to host
autoecolebudget.ch: did not receive HSTS header
+autoecoledumontblanc.com: did not receive HSTS header
autoeet.cz: did not receive HSTS header
autojuhos.sk: could not connect to host
-autoledky.sk: could not connect to host
automobiles5.com: could not connect to host
autos-retro-plaisir.com: did not receive HSTS header
autosearch.me: could not connect to host
@@ -1162,16 +1294,15 @@ autostock.me: could not connect to host
autostop-occasions.be: could not connect to host
autotsum.com: could not connect to host
autoxy.it: did not receive HSTS header
-autozane.com: could not connect to host
autumnwindsagility.com: could not connect to host
auverbox.ovh: could not connect to host
auvious.com: did not receive HSTS header
auxetek.se: could not connect to host
auxiliumincrementum.co.uk: could not connect to host
av.de: did not receive HSTS header
-av01.tv: could not connect to host
av163.cc: could not connect to host
avadatravel.com: did not receive HSTS header
+avalon-island.ru: could not connect to host
avantmfg.com: did not receive HSTS header
avaq.fr: did not receive HSTS header
avastantivirus.ro: did not receive HSTS header
@@ -1179,16 +1310,13 @@ avdelivers.com: could not connect to host
avdh.top: could not connect to host
avec-ou-sans-ordonnance.fr: could not connect to host
aveling-adventure.co.uk: did not receive HSTS header
-avepol.cz: did not receive HSTS header
-avepol.eu: did not receive HSTS header
avg.club: did not receive HSTS header
avi9526.pp.ua: could not connect to host
aviacao.pt: did not receive HSTS header
avidcruiser.com: did not receive HSTS header
aviodeals.com: could not connect to host
-avmemo.com: could not connect to host
+avitres.com: could not connect to host
avmo.pw: could not connect to host
-avmoo.com: could not connect to host
avonlearningcampus.com: could not connect to host
avso.pw: could not connect to host
avspot.net: could not connect to host
@@ -1196,19 +1324,20 @@ avus-automobile.com: did not receive HSTS header
avxo.pw: could not connect to host
awan.tech: could not connect to host
awanderlustadventure.com: did not receive HSTS header
-awccanadianpharmacy.com: could not connect to host
awei.pub: could not connect to host
awf0.xyz: could not connect to host
awg-mode.de: did not receive HSTS header
aww.moe: did not receive HSTS header
awxg.eu.org: could not connect to host
awxg.org: could not connect to host
+axa-middleeast.com: could not connect to host
axado.com.br: could not connect to host
-axel-fischer.net: did not receive HSTS header
+axel-fischer.net: could not connect to host
axel-fischer.science: could not connect to host
axelchv.fr: could not connect to host
+axem.co.jp: did not receive HSTS header
axeny.com: did not receive HSTS header
-axfr.it: could not connect to host
+axfr.it: did not receive HSTS header
axg.io: did not receive HSTS header
axialsports.com: did not receive HSTS header
axiumacademy.com: did not receive HSTS header
@@ -1216,16 +1345,19 @@ axolsoft.com: max-age too low: 10540800
axxial.tk: could not connect to host
ayahuascaadvisor.com: could not connect to host
ayatk.com: did not receive HSTS header
-aymerick.fr: did not receive HSTS header
ayor.jp: could not connect to host
ayor.tech: could not connect to host
ayuru.info: could not connect to host
+az-moga.bg: could not connect to host
+az-vinyl-boden.de: could not connect to host
azabani.com: did not receive HSTS header
azamra.com: did not receive HSTS header
+azia.info: could not connect to host
azino777.ru: could not connect to host
azirevpn.com: did not receive HSTS header
azlo.com: did not receive HSTS header
azprep.us: could not connect to host
+b-entropy.com: could not connect to host
b-pi.duckdns.org: could not connect to host
b-rickroll-e.pw: could not connect to host
b-space.de: did not receive HSTS header
@@ -1233,17 +1365,21 @@ b1236.com: could not connect to host
b2b-nestle.com.br: could not connect to host
b2bpromoteit.com: did not receive HSTS header
b3orion.com: could not connect to host
+b72.com: could not connect to host
+b72.net: could not connect to host
b8a.me: could not connect to host
b9520.com: could not connect to host
b9568.com: could not connect to host
b96899.com: could not connect to host
+b9886.com: could not connect to host
b98886.com: could not connect to host
b9930.com: could not connect to host
+b99520.com: could not connect to host
b9970.com: could not connect to host
b9980.com: could not connect to host
b9winner.com: could not connect to host
babelfisch.eu: could not connect to host
-babursahvizeofisi.com: did not receive HSTS header
+babursahvizeofisi.com: could not connect to host
baby-click.de: could not connect to host
babybee.ie: could not connect to host
babybic.hu: could not connect to host
@@ -1251,7 +1387,6 @@ babycs.house: could not connect to host
babyhouse.xyz: could not connect to host
babyliss-pro.com: could not connect to host
babyliss-pro.net: did not receive HSTS header
-babymasaze.cz: did not receive HSTS header
babysaying.me: could not connect to host
babystep.tv: could not connect to host
bacchanallia.com: could not connect to host
@@ -1261,7 +1396,6 @@ backenmachtgluecklich.de: max-age too low: 2592000
backgroundchecks.online: did not receive HSTS header
backgroundz.net: could not connect to host
backintomotionphysiotherapy.com: did not receive HSTS header
-backlogapp.io: could not connect to host
backscattering.de: did not receive HSTS header
backyardbbqbash.com: did not receive HSTS header
baconate.com: did not receive HSTS header
@@ -1275,28 +1409,30 @@ badlink.org: could not connect to host
baff.lu: could not connect to host
bagiobella.com: max-age too low: 0
baiduaccount.com: could not connect to host
-bailbondsaffordable.com: max-age too low: 0
baildonhottubs.co.uk: could not connect to host
bair.io: could not connect to host
bairdzhang.com: could not connect to host
baito-j.jp: did not receive HSTS header
+baixoutudo.com: did not receive HSTS header
bajic.ch: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
bakabt.info: could not connect to host
bakaweb.fr: could not connect to host
bakhansen.com: did not receive HSTS header
bakkerdesignandbuild.com: did not receive HSTS header
+bakxnet.com: could not connect to host
balatoni-nyar.hu: did not receive HSTS header
balcan-underground.net: could not connect to host
baldwinkoo.com: could not connect to host
baleares.party: could not connect to host
-balidesignshop.com.br: could not connect to host
+balenciaspa.com: did not receive HSTS header
balihai.com: did not receive HSTS header
+balilingo.ooo: did not receive HSTS header
ballbusting-cbt.com: could not connect to host
balloonphp.com: could not connect to host
-ballparkbuns.com: max-age too low: 86400
-balnearionaturaspa.com: did not receive HSTS header
balonmano.co: could not connect to host
bals.org: did not receive HSTS header
+balticer.de: did not receive HSTS header
+bambambaby.com.br: could not connect to host
bamtoki.com: could not connect to host
bamtoki.se: could not connect to host
bananabandy.com: could not connect to host
@@ -1305,10 +1441,13 @@ bananium.fr: [Exception... "Component returned failure code: 0x80004005 (NS_ERRO
banbanchs.com: could not connect to host
banchethai.com: could not connect to host
bandally.net: could not connect to host
+bandar303.cc: did not receive HSTS header
+bandar303.id: did not receive HSTS header
bandarifamily.com: could not connect to host
bandb.xyz: could not connect to host
bandrcrafts.com: did not receive HSTS header
banduhn.com: did not receive HSTS header
+bangdream.ga: could not connect to host
bangzafran.com: did not receive HSTS header
bank: could not connect to host
bankcircle.co.in: could not connect to host
@@ -1317,19 +1456,22 @@ bankofrealty.review: could not connect to host
banksaround.com: did not receive HSTS header
bannisbierblog.de: could not connect to host
banqingdiao.com: could not connect to host
+banri.me: could not connect to host
+banxehoi.com: did not receive HSTS header
baosuckhoedoisong.net: could not connect to host
baptiste-destombes.fr: did not receive HSTS header
baraxolka.ru: could not connect to host
-barbarafeldman.com: did not receive HSTS header
-barcel.com.mx: max-age too low: 86400
+barbershop-harmony.org: could not connect to host
+bardiel.de: max-age too low: 0
bardiharborow.com: did not receive HSTS header
barely.sexy: could not connect to host
bargainmovingcompany.com: could not connect to host
-bariller.fr: could not connect to host
+bariller.fr: did not receive HSTS header
+barisi.me: could not connect to host
baropkamp.be: did not receive HSTS header
+barprive.com: could not connect to host
barqo.co: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
barracuda.blog: could not connect to host
-barreaudenice.com: max-age too low: 0
barrelhead.org: could not connect to host
barrett.ag: did not receive HSTS header
barrut.me: did not receive HSTS header
@@ -1342,31 +1484,31 @@ bashc.at: could not connect to host
bashcode.ninja: could not connect to host
basicsolutionsus.com: could not connect to host
basilisk.io: could not connect to host
-basketsbymaurice.com: did not receive HSTS header
+basilm.co: could not connect to host
baskettemple.com: did not receive HSTS header
basnieuwenhuizen.nl: did not receive HSTS header
bassh.net: did not receive HSTS header
batfoundry.com: could not connect to host
-batook.org: could not connect to host
baud.ninja: could not connect to host
baudairenergyservices.com: could not connect to host
-baum.ga: could not connect to host
+baum.ga: did not receive HSTS header
baumstark.ca: could not connect to host
+bayer-stefan.com: could not connect to host
+bayerstefan.com: could not connect to host
bayinstruments.com: could not connect to host
bayrisch-fuer-anfaenger.de: did not receive HSTS header
baysse.eu: did not receive HSTS header
bazarstupava.sk: could not connect to host
-bazdell.com: could not connect to host
bazisszoftver.hu: could not connect to host
bb-shiokaze.jp: did not receive HSTS header
-bbb1991.me: did not receive HSTS header
+bbb1991.me: could not connect to host
bbdos.ru: could not connect to host
bbkanews.com: did not receive HSTS header
bblovess.cn: could not connect to host
bbrinck.eu: could not connect to host
-bbuio.com: max-age too low: 86400
bbw-wrestling.com: could not connect to host
bbwdom.xyz: could not connect to host
+bbwf.de: did not receive HSTS header
bbwfacesitting.us: could not connect to host
bbwfacesitting.xyz: could not connect to host
bbwfight.xyz: could not connect to host
@@ -1375,15 +1517,16 @@ bcbsmagentprofile.com: could not connect to host
bcchack.com: could not connect to host
bccx.com: could not connect to host
bcheng.cf: did not receive HSTS header
-bck-lelystad.nl: could not connect to host
bckp.de: could not connect to host
bcm.com.au: did not receive HSTS header
-bcnx.de: max-age too low: 0
+bcnet.hk: did not receive HSTS header
+bcodeur.com: did not receive HSTS header
bcradio.org: could not connect to host
bcsytv.com: could not connect to host
bcweightlifting.ca: could not connect to host
bddemir.com: could not connect to host
bde-epitech.fr: could not connect to host
+bdenzer.com: did not receive HSTS header
bdenzer.xyz: could not connect to host
bdsmxxxpics.com: could not connect to host
be-real.life: did not receive HSTS header
@@ -1403,20 +1546,23 @@ beavers.io: could not connect to host
bebeefy.uk: could not connect to host
bebesurdoue.com: could not connect to host
beccajoshwedding.com: could not connect to host
-becklove.cn: did not receive HSTS header
+becklove.cn: could not connect to host
becubed.co: could not connect to host
bedabox.com: did not receive HSTS header
bedeta.de: could not connect to host
+bedouille.com: could not connect to host
bedreid.dk: did not receive HSTS header
bedrijvenadministratie.nl: could not connect to host
-beeksnetwork.nl: could not connect to host
beerboutique.com.br: could not connect to host
beermedlar.com: could not connect to host
beersandco.ch: could not connect to host
beetgroup.id: could not connect to host
beetleroadstories.com: could not connect to host
+beforesunrise.de: did not receive HSTS header
befundup.com: could not connect to host
+begcykel.com: did not receive HSTS header
behere.be: could not connect to host
+beholdthehurricane.com: could not connect to host
beier.io: could not connect to host
beikeil.de: did not receive HSTS header
beingmad.org: did not receive HSTS header
@@ -1426,16 +1572,19 @@ belgien.guide: could not connect to host
belize-firmengruendung.com: could not connect to host
bellavistaoutdoor.com: could not connect to host
belliash.eu.org: did not receive HSTS header
-belltower.io: could not connect to host
+belltower.io: did not receive HSTS header
belmontprom.com: could not connect to host
belpbleibtbelp.ch: could not connect to host
belwederczykow.eu: could not connect to host
bemcorp.de: did not receive HSTS header
+bemvindoaolar.com.br: did not receive HSTS header
bemyvictim.com: max-age too low: 2678400
+ben-energy.com: could not connect to host
bendechrai.com: did not receive HSTS header
benediktdichgans.de: did not receive HSTS header
beneffy.com: did not receive HSTS header
benevisim.com: could not connect to host
+benevita.organic: could not connect to host
benfairclough.com: could not connect to host
benjakesjohnson.com: could not connect to host
benjamin-horvath.com: could not connect to host
@@ -1450,21 +1599,22 @@ benzkosmetik.de: did not receive HSTS header
benzou-space.com: could not connect to host
beourvictim.com: max-age too low: 2678400
bep.gov: did not receive HSTS header
-bep362.vn: did not receive HSTS header
+bep362.vn: could not connect to host
beraru.tk: could not connect to host
berdu.id: did not receive HSTS header
berduri.com: could not connect to host
berger.work: could not connect to host
bergland-seefeld.at: did not receive HSTS header
+berhampore-gateway.tk: could not connect to host
berlatih.com: did not receive HSTS header
berlin-kohlefrei.de: could not connect to host
berlinleaks.com: could not connect to host
bermytraq.bm: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
bernexskiclub.ch: did not receive HSTS header
-berruezoabogados.com: did not receive HSTS header
berrymark.be: did not receive HSTS header
-berseb.se: did not receive HSTS header
+berseb.se: could not connect to host
berthelier.me: could not connect to host
+berz.one: could not connect to host
besb66.club: could not connect to host
besb66.me: could not connect to host
besb66.ninja: could not connect to host
@@ -1476,6 +1626,7 @@ besnik.de: could not connect to host
besola.de: could not connect to host
best-wedding-quotes.com: did not receive HSTS header
bestattorney.com: did not receive HSTS header
+bestbatteriesonline.com: could not connect to host
bestbeards.ca: could not connect to host
bestbestbitcoin.com: could not connect to host
bestellipticalmachinereview.info: could not connect to host
@@ -1486,12 +1637,15 @@ bestleftwild.com: could not connect to host
bestmodels.su: did not receive HSTS header
bestof1001.de: could not connect to host
bestorangeseo.com: could not connect to host
+bestpaintings.nl: did not receive HSTS header
+bestschools.top: did not receive HSTS header
bestwarezone.com: could not connect to host
+bet990.com: could not connect to host
betaclean.fr: did not receive HSTS header
betafive.net: could not connect to host
betakah.net: could not connect to host
betamint.org: did not receive HSTS header
-betcafearena.ro: did not receive HSTS header
+betcafearena.ro: could not connect to host
betformular.com: could not connect to host
bethditto.com: did not receive HSTS header
betkoo.com: could not connect to host
@@ -1501,13 +1655,16 @@ betplanning.it: did not receive HSTS header
bets.de: did not receive HSTS header
bets.gg: did not receive HSTS header
betshoot.com: could not connect to host
+betsonlinefree.com.au: could not connect to host
betterlifemakers.com: max-age too low: 200
bettween.com: did not receive HSTS header
-betz.ro: did not receive HSTS header
+betz.ro: could not connect to host
beulahtabernacle.com: could not connect to host
bevapehappy.com: did not receive HSTS header
bewerbungsfibel.de: did not receive HSTS header
-bewertet.de: could not connect to host
+bexit-hosting.nl: could not connect to host
+bexit-security.eu: could not connect to host
+bexit-security.nl: could not connect to host
bey.io: could not connect to host
beylikduzum.com: did not receive HSTS header
beyond-edge.com: could not connect to host
@@ -1526,7 +1683,7 @@ bfelob.gov: could not connect to host
bffm.biz: could not connect to host
bfrailwayclub.cf: could not connect to host
bgcparkstad.nl: did not receive HSTS header
-bgfashion.net: could not connect to host
+bgdaddy.com: did not receive HSTS header
bgneuesheim.de: did not receive HSTS header
bhatia.at: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
bianinapiccanovias.com: could not connect to host
@@ -1534,7 +1691,9 @@ biaoqingfuhao.net: did not receive HSTS header
biaoqingfuhao.org: did not receive HSTS header
biapinheiro.com.br: max-age too low: 5184000
biblerhymes.com: did not receive HSTS header
+bibliafeminina.com.br: could not connect to host
bichines.es: did not receive HSTS header
+bichonfrise.com.br: could not connect to host
bichonmaltes.com.br: could not connect to host
bidon.ca: did not receive HSTS header
bieberium.de: could not connect to host
@@ -1544,7 +1703,6 @@ bienenblog.cc: could not connect to host
bier.jp: did not receive HSTS header
bierbringer.at: could not connect to host
bierochs.org: could not connect to host
-biftin.net: could not connect to host
big-black.de: did not receive HSTS header
bigbbqbrush.bid: could not connect to host
bigbounceentertainment.co.uk: could not connect to host
@@ -1559,31 +1717,35 @@ bijouxdegriffe.com.br: could not connect to host
bijugeral.com.br: could not connect to host
bikelifetvkidsquads.co.uk: could not connect to host
bikermusic.net: could not connect to host
+bilanligne.com: did not receive HSTS header
bildermachr.de: could not connect to host
-bildiri.ci: did not receive HSTS header
biletru.net: could not connect to host
biletua.de: could not connect to host
+biletyplus.com: could not connect to host
biletyplus.ru: did not receive HSTS header
bill-nye-the.science: did not receive HSTS header
billdestler.com: did not receive HSTS header
+billgoldstein.name: did not receive HSTS header
billigssl.dk: did not receive HSTS header
billin.net: did not receive HSTS header
billkiss.com: could not connect to host
billninja.com: did not receive HSTS header
-billpro.com.au: could not connect to host
+billrobinson.io: could not connect to host
billrusling.com: could not connect to host
-bimbo.com: max-age too low: 86400
-bimbo.com.ar: max-age too low: 86400
-bimbobakeriesusa.com: max-age too low: 86400
binam.center: could not connect to host
+binarization.org: did not receive HSTS header
binaryabstraction.com: could not connect to host
+binarycreations.scot: could not connect to host
binaryfigments.com: max-age too low: 86400
binderapp.net: could not connect to host
bingcheung.com: could not connect to host
bingcheung.org: could not connect to host
+bingo-wear.com: could not connect to host
bingo9.net: could not connect to host
bingofriends.com: could not connect to host
+bingostars.com: did not receive HSTS header
binimo.com: could not connect to host
+binsp.net: could not connect to host
biocrafting.net: could not connect to host
bioespuna.eu: did not receive HSTS header
biofam.ru: did not receive HSTS header
@@ -1591,27 +1753,31 @@ bioknowme.com: did not receive HSTS header
biologis.ch: could not connect to host
bionicspirit.com: did not receive HSTS header
biophysik-ssl.de: did not receive HSTS header
+biopreferred.gov: could not connect to host
+biou.me: could not connect to host
biovalue.eu: could not connect to host
bip.gov.sa: could not connect to host
-birkhoff.me: could not connect to host
+birdandbranchnyc.com: max-age too low: 43200
birkman.com: did not receive HSTS header
biscuits-rec.com: could not connect to host
biscuits-shop.com: could not connect to host
bismarck.moe: did not receive HSTS header
bisterfeldt.com: did not receive HSTS header
biswas.me: could not connect to host
+bit.biz.tr: could not connect to host
+bitace.com: did not receive HSTS header
bitbit.org: did not receive HSTS header
bitbr.net: did not receive HSTS header
bitcantor.com: did not receive HSTS header
bitchan.it: could not connect to host
+bitcoin-casino-no-deposit-bonus.com: max-age too low: 0
bitcoin-class.com: could not connect to host
bitcoin-daijin.com: could not connect to host
bitcoinec.info: could not connect to host
bitcoinhk.org: did not receive HSTS header
bitcoinjpn.com: could not connect to host
bitcoinprivacy.net: did not receive HSTS header
-bitcoinworld.me: did not receive HSTS header
-bitcoinx.ro: did not receive HSTS header
+bitcoinworld.me: could not connect to host
bitconcepts.co.uk: could not connect to host
bitenose.net: could not connect to host
bitenose.org: could not connect to host
@@ -1622,25 +1788,26 @@ bitfarm-archiv.com: did not receive HSTS header
bitfarm-archiv.de: did not receive HSTS header
bitheus.com: could not connect to host
bithosting.io: did not receive HSTS header
-bitk.co: could not connect to host
-bitk.co.uk: could not connect to host
-bitk.eu: could not connect to host
bitmain.com.ua: could not connect to host
bitmaincare.com.ua: could not connect to host
bitmaincare.ru: could not connect to host
+bitmex.com: did not receive HSTS header
bitmexin.com: could not connect to host
+bitmoe.com: did not receive HSTS header
bitmon.net: did not receive HSTS header
bitnet.io: did not receive HSTS header
bitplay.space: could not connect to host
bitpod.de: could not connect to host
bitrage.de: could not connect to host
bitraum.io: could not connect to host
-bitroll.com: could not connect to host
+bitroll.com: did not receive HSTS header
bitsafe.systems: did not receive HSTS header
bitsensor.io: did not receive HSTS header
bitskins.co: did not receive HSTS header
bitstep.ca: could not connect to host
bittervault.xyz: could not connect to host
+bituptick.com: did not receive HSTS header
+bitvegas.com: did not receive HSTS header
bitvigor.com: could not connect to host
bitwrought.net: could not connect to host
bityes.org: could not connect to host
@@ -1648,29 +1815,33 @@ bivsi.com: could not connect to host
bizcms.com: did not receive HSTS header
bizon.sk: did not receive HSTS header
bizpare.com: did not receive HSTS header
-bizzartech.com: did not receive HSTS header
+bizzartech.com: could not connect to host
bizzybeebouncers.co.uk: could not connect to host
bjgongyi.com: could not connect to host
bjtxl.cn: could not connect to host
bkb-skandal.ch: could not connect to host
+bklaindia.com: could not connect to host
black-armada.com: could not connect to host
black-armada.com.pl: could not connect to host
black-armada.pl: could not connect to host
-black-gay-porn.biz: could not connect to host
+black-khat.com: could not connect to host
black-octopus.ru: could not connect to host
blackberrycentral.com: could not connect to host
blackburn.link: could not connect to host
blackdiam.net: did not receive HSTS header
-blackkeg.ca: could not connect to host
+blackl.net: could not connect to host
blacklane.com: did not receive HSTS header
+blacklightparty.be: could not connect to host
blackly.uk: max-age too low: 0
+blackmagic.sk: did not receive HSTS header
blackmirror.com.au: did not receive HSTS header
-blackmonday.gr: did not receive HSTS header
+blacknova.io: could not connect to host
+blackpayment.ru: did not receive HSTS header
+blackphantom.de: could not connect to host
blackscreen.me: could not connect to host
blackunicorn.wtf: could not connect to host
bladesmith.io: did not receive HSTS header
blakerandall.xyz: could not connect to host
-blameomar.com: could not connect to host
blantik.net: could not connect to host
blarg.co: could not connect to host
blauwwit.be: did not receive HSTS header
@@ -1680,16 +1851,14 @@ blendlecdn.com: could not connect to host
blenheimchalcot.com: did not receive HSTS header
blessnet.jp: did not receive HSTS header
blha303.com.au: could not connect to host
-bliesekow.net: could not connect to host
-blikund.swedbank.se: did not receive HSTS header
blindaryproduction.tk: could not connect to host
blindsexdate.nl: did not receive HSTS header
-blingqueen.shop: max-age too low: 300
blinkenlight.co.uk: could not connect to host
blinkenlight.com.au: could not connect to host
-blitzprog.org: did not receive HSTS header
blmiller.com: did not receive HSTS header
+blockchainced.com: could not connect to host
blocksatz-medien.de: could not connect to host
+blockshopauto.com: could not connect to host
blog-ritaline.com: could not connect to host
blog.coffee: could not connect to host
blog.cyveillance.com: did not receive HSTS header
@@ -1718,25 +1887,29 @@ blucas.org: did not receive HSTS header
blue17.co.uk: did not receive HSTS header
bluebill.net: did not receive HSTS header
bluecon.eu: did not receive HSTS header
+bluefinger.nl: could not connect to host
blueglobalmedia.com: could not connect to host
bluehawk.cloud: did not receive HSTS header
blueliv.com: did not receive HSTS header
-bluemoonroleplaying.com: could not connect to host
bluemosh.com: could not connect to host
blueoakart.com: could not connect to host
+bluepoint.foundation: could not connect to host
+bluepoint.institute: could not connect to host
bluescloud.xyz: could not connect to host
-bluesecure.com.br: could not connect to host
bluetenmeer.com: did not receive HSTS header
bluezonehealth.co.uk: did not receive HSTS header
bluketing.com: did not receive HSTS header
blumen-binder.ch: did not receive HSTS header
blumen-garage.de: could not connect to host
-blumenwiese.xyz: could not connect to host
+blumenwiese.xyz: did not receive HSTS header
blunderify.se: did not receive HSTS header
+bluop.com: did not receive HSTS header
bluserv.net: could not connect to host
bluteklab.com: did not receive HSTS header
blutroyal.de: could not connect to host
blvdmb.com: did not receive HSTS header
+bm-i.ch: could not connect to host
+bm-immo.ch: could not connect to host
bm-trading.nl: did not receive HSTS header
bmet.de: did not receive HSTS header
bmoattachments.org: did not receive HSTS header
@@ -1745,13 +1918,14 @@ bnhlibrary.com: did not receive HSTS header
board-buy.ru: could not connect to host
bobaobei.net: could not connect to host
bobaobei.org: could not connect to host
-bobep.ru: could not connect to host
bobiji.com: did not receive HSTS header
bodo-wolff.de: could not connect to host
+bodrumfarm.com: could not connect to host
bodyblog.nl: did not receive HSTS header
bodybuilding-legends.com: could not connect to host
bodybuilding.events: could not connect to host
bodyweightsolution.com: could not connect to host
+boel073.nl: did not receive HSTS header
boensou.com: did not receive HSTS header
bogosity.se: could not connect to host
bohaishibei.com: did not receive HSTS header
@@ -1760,15 +1934,15 @@ bohyn.cz: could not connect to host
boiadeirodeberna.com: could not connect to host
boilesen.com: did not receive HSTS header
bokeyy.com: could not connect to host
+bolainfoasia.com: did not receive HSTS header
boltdata.io: could not connect to host
-bolwerk.com.br: did not receive HSTS header
+boltn.uk: did not receive HSTS header
+bolwerk.com.br: could not connect to host
bomberus.de: could not connect to host
bombsquad.studio: could not connect to host
bonamihome.ro: could not connect to host
bonapp.restaurant: could not connect to host
-bondagefetishstore.com: could not connect to host
-boneko.de: could not connect to host
-bonesserver.com: could not connect to host
+bondtofte.dk: did not receive HSTS header
bonigo.de: did not receive HSTS header
bonitabrazilian.co.nz: did not receive HSTS header
bonnin.fr: did not receive HSTS header
@@ -1776,16 +1950,19 @@ bonobo.cz: could not connect to host
bonop.com: did not receive HSTS header
bonta.one: could not connect to host
bonus-flexi.com: did not receive HSTS header
+boobox.xyz: could not connect to host
book-of-ra.de: did not receive HSTS header
bookcelerator.com: did not receive HSTS header
booked.holiday: could not connect to host
bookingentertainment.com: did not receive HSTS header
+bookmakersfreebets.com.au: could not connect to host
bookofraonlinecasinos.com: could not connect to host
bookreport.ga: could not connect to host
boomerang.com: did not receive HSTS header
boomsaki.com: did not receive HSTS header
boomsakis.com: did not receive HSTS header
boosterlearnpro.com: did not receive HSTS header
+boostgame.win: could not connect to host
boote.wien: did not receive HSTS header
booter.es: could not connect to host
booth.in.th: could not connect to host
@@ -1800,7 +1977,11 @@ borisbesemer.com: could not connect to host
born-to-learn.com: did not receive HSTS header
borrelioz.com: did not receive HSTS header
borscheid-wenig.com: did not receive HSTS header
+boschee.net: could not connect to host
botox.bz: did not receive HSTS header
+boueki.jp: did not receive HSTS header
+boueki.org: did not receive HSTS header
+boukoubengo.com: did not receive HSTS header
bounce-r-us.co.uk: did not receive HSTS header
bounceboxspc.com: did not receive HSTS header
bouncecoffee.com: did not receive HSTS header
@@ -1811,9 +1992,7 @@ bouncing4joy.co.uk: could not connect to host
bouncingbuzzybees.co.uk: could not connect to host
bouncycastleandparty.co.uk: could not connect to host
bouncycastlehiremedway.com: did not receive HSTS header
-bourasse.fr: could not connect to host
bouwbedrijfpurmerend.nl: did not receive HSTS header
-bowlroll.net: max-age too low: 0
bowlsheet.com: did not receive HSTS header
bownty.pt: could not connect to host
boxcryptor.com: did not receive HSTS header
@@ -1825,7 +2004,6 @@ boxlitepackaging.com: did not receive HSTS header
boxview.com: could not connect to host
boyan.in: could not connect to host
boyfriendhusband.men: did not receive HSTS header
-boypoint.de: could not connect to host
bozemancarpetcleaningservices.com: could not connect to host
bp-wahl.at: did not receive HSTS header
bpadvisors.eu: could not connect to host
@@ -1844,10 +2022,14 @@ braintreebouncycastles.com: could not connect to host
braintreegateway.com: did not receive HSTS header
braintreepayments.com: did not receive HSTS header
brainvation.de: did not receive HSTS header
+brakstad.org: could not connect to host
bran.cc: could not connect to host
bran.soy: could not connect to host
branchtrack.com: did not receive HSTS header
branchzero.com: did not receive HSTS header
+brand-foo.com: did not receive HSTS header
+brand-foo.jp: did not receive HSTS header
+brand-foo.net: did not receive HSTS header
brandnewdays.nl: could not connect to host
brandon.so: could not connect to host
brandons.site: could not connect to host
@@ -1855,7 +2037,8 @@ brandontaylor-black.com: could not connect to host
brandred.net: could not connect to host
brandspray.com: could not connect to host
brasilien.guide: could not connect to host
-bratteng.xyz: could not connect to host
+brasilmorar.com: did not receive HSTS header
+bratteng.xyz: did not receive HSTS header
bravz.de: could not connect to host
brb.city: did not receive HSTS header
breatheav.com: did not receive HSTS header
@@ -1866,12 +2049,10 @@ bress.cloud: could not connect to host
brettcornwall.com: did not receive HSTS header
brettpemberton.xyz: did not receive HSTS header
brfvh24.se: could not connect to host
-briangarcia.ga: could not connect to host
brianpcurran.com: did not receive HSTS header
brickoo.com: could not connect to host
brickwerks.io: could not connect to host
brickyardbuffalo.com: did not receive HSTS header
-brideandgroomdirect.ie: could not connect to host
bridgeout.com: could not connect to host
bridholm.se: could not connect to host
brightfuturemadebyme.com: could not connect to host
@@ -1881,6 +2062,7 @@ brightstarkids.net: did not receive HSTS header
brightstarkids.sg: did not receive HSTS header
brilliantbuilders.co.uk: did not receive HSTS header
brimspark.com: could not connect to host
+brinkhu.is: could not connect to host
brinkmann.one: could not connect to host
brio-ukraine.store: could not connect to host
britishmeat.com: could not connect to host
@@ -1889,6 +2071,7 @@ brivadois.ovh: did not receive HSTS header
brix.ninja: did not receive HSTS header
brks.xyz: could not connect to host
brmascots.com: could not connect to host
+brmsalescommunity.com: could not connect to host
broerweb.nl: could not connect to host
broken-oak.com: could not connect to host
brookechase.com: did not receive HSTS header
@@ -1899,10 +2082,8 @@ brplusdigital.com: could not connect to host
brrd.io: could not connect to host
brrr.fr: could not connect to host
brunix.net: did not receive HSTS header
-brunohenc.from.hr: did not receive HSTS header
brunoonline.co.uk: could not connect to host
bryancastillo.site: could not connect to host
-bryankaplan.com: could not connect to host
bryanshearer.accountant: did not receive HSTS header
bryn.xyz: could not connect to host
brynnan.nl: could not connect to host
@@ -1914,19 +2095,21 @@ bsdtips.com: could not connect to host
bsdug.org: could not connect to host
bsklabels.com: did not receive HSTS header
bsktweetup.info: could not connect to host
+bsociabl.com: could not connect to host
bsohoekvanholland.nl: could not connect to host
+bsquared.org: could not connect to host
bsuess.de: could not connect to host
btc-e.com: did not receive HSTS header
btcdlc.com: could not connect to host
+btcgo.nl: did not receive HSTS header
btcp.space: could not connect to host
btcpot.ltd: did not receive HSTS header
btku.org: could not connect to host
-btserv.de: could not connect to host
btxiaobai.com: did not receive HSTS header
+bubba.cc: could not connect to host
buben.tech: did not receive HSTS header
bubulazi.com: did not receive HSTS header
bubulazy.com: did not receive HSTS header
-buch-cuber.de: max-age too low: 0
buchheld.at: could not connect to host
buchverlag-scholz.de: did not receive HSTS header
bucket.tk: could not connect to host
@@ -1936,11 +2119,10 @@ budgetenergievriendenvoordeel.nl: could not connect to host
budgetthostels.nl: did not receive HSTS header
budskap.eu: did not receive HSTS header
buenosairesestetica.com.ar: could not connect to host
-buenotour.ru: could not connect to host
+buenotour.ru: did not receive HSTS header
buettgens.net: max-age too low: 2592000
buffalodrinkinggame.beer: did not receive HSTS header
-buffetbouc.com: could not connect to host
-bugginslab.co.uk: could not connect to host
+bugtrack.co.uk: did not receive HSTS header
bugtrack.io: could not connect to host
bugwie.com: did not receive HSTS header
buhler.pro: did not receive HSTS header
@@ -1959,6 +2141,7 @@ built.by: did not receive HSTS header
buka.jp: could not connect to host
bukatv.cz: could not connect to host
bulbgenie.com: could not connect to host
+buldogueingles.com.br: could not connect to host
bulgarien.guide: could not connect to host
bulkbuy.tech: could not connect to host
bullbits.com: max-age too low: 0
@@ -1966,6 +2149,7 @@ bulletbabu.com: could not connect to host
bulletpoint.cz: could not connect to host
bullterrier.me: could not connect to host
bulmafox.com: could not connect to host
+bulmastife.com.br: could not connect to host
bumshow.ru: did not receive HSTS header
bunadarbankinn.is: could not connect to host
bunaken.asia: could not connect to host
@@ -1980,6 +2164,7 @@ burian-server.cz: could not connect to host
burlesquemakeup.com: did not receive HSTS header
burningcrash.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
burpsuite.site: could not connect to host
+burroughsid.com: could not connect to host
burrow.ovh: could not connect to host
burrowingsec.com: could not connect to host
burtrum.top: could not connect to host
@@ -1988,41 +2173,43 @@ buryit.net: did not receive HSTS header
bush41.org: did not receive HSTS header
business.lookout.com: could not connect to host
business.medbank.com.mt: did not receive HSTS header
+businessadviceperth.com.au: did not receive HSTS header
businessamongus.com: could not connect to host
businessetmarketing.com: could not connect to host
businessfurs.info: could not connect to host
businesshosting.nl: did not receive HSTS header
businessloanconnection.org: did not receive HSTS header
businessmodeler.se: could not connect to host
-busold.ws: could not connect to host
bustabit.com: could not connect to host
bustimes.org.uk: did not receive HSTS header
busybee360.com: did not receive HSTS header
butchersworkshop.com: did not receive HSTS header
butian518.com: did not receive HSTS header
+butt.repair: could not connect to host
buttercoin.com: could not connect to host
butterfieldstraining.com: could not connect to host
-buvinghausen.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+buturyu.org: did not receive HSTS header
+buvinghausen.com: max-age too low: 86400
buybaby.eu: could not connect to host
-buycarpet.shop: could not connect to host
+buybike.shop: could not connect to host
+buydesired.com: did not receive HSTS header
buyessay.org: could not connect to host
buyessays.net: could not connect to host
buyfox.de: did not receive HSTS header
buyharpoon.com: could not connect to host
-buyhealth.shop: could not connect to host
buyingsellingflorida.com: could not connect to host
buynowdepot.com: did not receive HSTS header
buyshoe.org: could not connect to host
buywood.shop: could not connect to host
buzzconcert.com: did not receive HSTS header
buzzdeck.com: did not receive HSTS header
-buzztelco.com.au: did not receive HSTS header
+buzztelco.com.au: could not connect to host
bvexplained.co.uk: could not connect to host
+bvionline.eu: did not receive HSTS header
bw81.xyz: could not connect to host
bwear4all.de: could not connect to host
bx-web.com: did not receive HSTS header
bxdev.me: could not connect to host
-by.cx: did not receive HSTS header
by1896.com: could not connect to host
by1898.com: could not connect to host
by1899.com: could not connect to host
@@ -2031,7 +2218,6 @@ by77.com: could not connect to host
by777.com: did not receive HSTS header
byji.com: could not connect to host
bynet.cz: could not connect to host
-bynumlaw.net: did not receive HSTS header
bypass.kr: could not connect to host
bypassed.bid: could not connect to host
bypassed.cc: could not connect to host
@@ -2040,11 +2226,11 @@ bypassed.date: could not connect to host
bypassed.download: could not connect to host
bypassed.faith: could not connect to host
bypassed.host: could not connect to host
-bypassed.me: max-age too low: 0
-bypassed.online: max-age too low: 0
+bypassed.me: could not connect to host
+bypassed.online: could not connect to host
bypassed.party: could not connect to host
bypassed.press: could not connect to host
-bypassed.pw: max-age too low: 0
+bypassed.pw: could not connect to host
bypassed.rocks: could not connect to host
bypassed.site: could not connect to host
bypassed.st: did not receive HSTS header
@@ -2053,7 +2239,6 @@ bypassed.works: could not connect to host
bypassed.world: could not connect to host
bypro.xyz: could not connect to host
byronwade.com: could not connect to host
-bysymphony.com: max-age too low: 0
byte.chat: did not receive HSTS header
byte.wtf: did not receive HSTS header
bytelog.org: could not connect to host
@@ -2062,7 +2247,6 @@ bytesatwork.eu: could not connect to host
byteshift.ca: could not connect to host
bytesofcode.de: could not connect to host
bytesund.biz: could not connect to host
-bytesunlimited.com: did not receive HSTS header
byteturtle.eu: did not receive HSTS header
byurudraw.pics: could not connect to host
c-rickroll-v.pw: could not connect to host
@@ -2074,8 +2258,7 @@ c2o2.xyz: could not connect to host
c3-compose.com: could not connect to host
c3.pm: could not connect to host
c3b.info: could not connect to host
-c3bbs.com: could not connect to host
-c3hv.cn: could not connect to host
+c3bbs.com: did not receive HSTS header
c3ie.com: did not receive HSTS header
c4.hk: could not connect to host
cabaladada.org: could not connect to host
@@ -2083,9 +2266,9 @@ cabsites.com: could not connect to host
cabusar.fr: could not connect to host
caconnect.org: could not connect to host
cadao.me: did not receive HSTS header
+cadburymovies.in.net: could not connect to host
cadenadg.gr: did not receive HSTS header
cadre.com: could not connect to host
-cadusilva.com: did not receive HSTS header
caerostris.com: could not connect to host
caesreon.com: could not connect to host
cafe-murr.de: could not connect to host
@@ -2101,59 +2284,64 @@ cake.care: could not connect to host
cal.goip.de: could not connect to host
calcularpagerank.com.br: could not connect to host
calculatoaresecondhand.xyz: could not connect to host
+calebmorris.com: could not connect to host
calgaryconstructionjobs.com: did not receive HSTS header
-calix.com: max-age too low: 0
callabs.net: could not connect to host
calleveryday.com: could not connect to host
callision.com: did not receive HSTS header
+callmereda.com: did not receive HSTS header
callsigns.ca: could not connect to host
calltrackingreports.com: could not connect to host
+calomel.org: max-age too low: 2764800
calories.org: could not connect to host
caltonnutrition.com: did not receive HSTS header
calvin.me: did not receive HSTS header
calypsogames.net: could not connect to host
+calyxinstitute.org: could not connect to host
camashop.de: did not receive HSTS header
camaya.net: did not receive HSTS header
cambridgeanalytica.net: could not connect to host
cambridgeanalytica.org: did not receive HSTS header
+camda.online: could not connect to host
camisadotorcedor.com.br: could not connect to host
camjackson.net: did not receive HSTS header
cammarkets.com: could not connect to host
-camolist.com: could not connect to host
campaignelves.com: did not receive HSTS header
campbellsoftware.co.uk: could not connect to host
campfire.co.il: did not receive HSTS header
+campfourpaws.com: did not receive HSTS header
campingcarlovers.com: could not connect to host
campingdreams.com: did not receive HSTS header
campus-cybersecurity.team: did not receive HSTS header
+campusportalng.com: did not receive HSTS header
camsanalytics.com: could not connect to host
-camshowhub.com: could not connect to host
-canadabread.com: max-age too low: 86400
canadiangamblingchoice.com: did not receive HSTS header
canarianlegalalliance.com: did not receive HSTS header
+cancelmyprofile.com: could not connect to host
cancreate.nl: did not receive HSTS header
candicontrols.com: did not receive HSTS header
candratech.com: could not connect to host
candygirl.shop: could not connect to host
candykidsentertainment.co.uk: did not receive HSTS header
canifis.net: did not receive HSTS header
-cannahealth.com: did not receive HSTS header
cannarobotics.com: could not connect to host
canterbury.ws: did not receive HSTS header
canyonshoa.com: did not receive HSTS header
+caodecristachines.com.br: could not connect to host
caoyu.info: did not receive HSTS header
capecycles.co.za: did not receive HSTS header
-capellidipremoli.com: could not connect to host
capeyorkfire.com.au: did not receive HSTS header
-caphane.com: could not connect to host
capitalonecardservice.com: did not receive HSTS header
-capogna.com: did not receive HSTS header
+caps.is: could not connect to host
captchatheprize.com: could not connect to host
captianseb.de: could not connect to host
captivatedbytabrett.com: could not connect to host
captivationscience.com: could not connect to host
captivationtheory.com: could not connect to host
+capturethepen.co.uk: could not connect to host
car-navi.ph: did not receive HSTS header
+car-rental24.com: could not connect to host
+car-shop.top: did not receive HSTS header
carano-service.de: did not receive HSTS header
caraudio69.cz: could not connect to host
card-cashing.com: max-age too low: 0
@@ -2162,6 +2350,7 @@ cardloan-manual.net: could not connect to host
cardoni.net: did not receive HSTS header
cardstream.com: did not receive HSTS header
cardurl.com: did not receive HSTS header
+careeraid.in: could not connect to host
careerstuds.com: could not connect to host
careplasticsurgery.com: did not receive HSTS header
carey.bio: could not connect to host
@@ -2176,23 +2365,24 @@ carloshmm.stream: could not connect to host
carlovanwyk.com: could not connect to host
carlsbouncycastlesandhottubs.co.uk: did not receive HSTS header
carlscatering.com: did not receive HSTS header
-carpliyz.com: did not receive HSTS header
+carpliyz.com: could not connect to host
carrando.de: could not connect to host
carredejardin.com: could not connect to host
carroarmato0.be: did not receive HSTS header
carsforbackpackers.com: could not connect to host
+carsten.pw: could not connect to host
carstenfeuls.de: did not receive HSTS header
carterorland.com: could not connect to host
cartesunicef.be: did not receive HSTS header
+carun.us: did not receive HSTS header
carwashvapeur.be: could not connect to host
casajardininsecticidas.com: did not receive HSTS header
casamorelli.com.br: did not receive HSTS header
casashopp.com.br: could not connect to host
casasuleletrodomesticos.com.br: could not connect to host
-casc.cz: did not receive HSTS header
casedi.org: max-age too low: 0
casefall.com: could not connect to host
-cash-pos.com: could not connect to host
+cash-pos.com: did not receive HSTS header
cashfortulsahouses.com: could not connect to host
cashless.fr: did not receive HSTS header
cashmyphone.ch: could not connect to host
@@ -2209,18 +2399,19 @@ casjaygames.com: could not connect to host
casovi.cf: could not connect to host
caspicards.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
castagnonavocats.com: did not receive HSTS header
+castlejackpot.com: could not connect to host
+casusgrillcaribbean.com: could not connect to host
cata.ga: could not connect to host
catalin.pw: could not connect to host
-catalogoreina.com: could not connect to host
catarsisvr.com: could not connect to host
catchers.cc: did not receive HSTS header
catcontent.cloud: could not connect to host
caterkids.com: did not receive HSTS header
-catfooddispensersreviews.com: did not receive HSTS header
+catgirl.me: could not connect to host
catgirl.pics: could not connect to host
catharisme.org: could not connect to host
catherinesarasin.com: did not receive HSTS header
-catinmay.com: did not receive HSTS header
+catinmay.com: could not connect to host
catnapstudios.com: could not connect to host
catnmeow.com: could not connect to host
catsmagic.pp.ua: could not connect to host
@@ -2228,27 +2419,30 @@ caughtredhanded.co.nz: could not connect to host
causae-fincas.es: did not receive HSTS header
causae.es: did not receive HSTS header
cavaleria.ro: did not receive HSTS header
+cavalierkingcharlesspaniel.com.br: could not connect to host
caveclan.org: did not receive HSTS header
cavedevs.de: could not connect to host
cavedroid.xyz: could not connect to host
cavern.tv: did not receive HSTS header
-cayafashion.de: did not receive HSTS header
cayounglab.co.jp: did not receive HSTS header
-cbdev.de: could not connect to host
+cbamo.org: did not receive HSTS header
cbengineeringinc.com: max-age too low: 86400
cbhq.net: could not connect to host
cbi-epa.gov: could not connect to host
ccayearbook.com: could not connect to host
ccblog.de: did not receive HSTS header
-ccl-sti.ch: did not receive HSTS header
+ccl-sti.ch: could not connect to host
ccretreatandfarm.com: did not receive HSTS header
cctech.ph: could not connect to host
cctld.com: could not connect to host
+ccv.eu: did not receive HSTS header
cd0.us: could not connect to host
cdcpartners.gov: could not connect to host
+cdeck.net: could not connect to host
cdkeyworld.de: did not receive HSTS header
cdmhp.org.nz: could not connect to host
cdmon.tech: could not connect to host
+cdn.sx.cn: could not connect to host
cdnb.co: could not connect to host
cdndepo.com: could not connect to host
cdnk39.com: could not connect to host
@@ -2257,30 +2451,35 @@ cdt.org: did not receive HSTS header
ce-agentur.de: did not receive HSTS header
cecilwalker.com.au: did not receive HSTS header
cee.io: could not connect to host
+cefak.org.br: could not connect to host
cegfw.com: could not connect to host
ceilingpac.org: could not connect to host
celebphotos.blog: could not connect to host
+celebrityhealthcritic.com: did not receive HSTS header
celec.gob.ec: could not connect to host
celeirorural.com.br: did not receive HSTS header
celigo.com: did not receive HSTS header
celina-reads.de: could not connect to host
cellartracker.com: could not connect to host
cellsites.nz: could not connect to host
+cem.pw: could not connect to host
+cemeteriat.com: did not receive HSTS header
cencalvia.org: could not connect to host
centennialrewards.com: did not receive HSTS header
-centerforpolicy.org: did not receive HSTS header
+centerforpolicy.org: could not connect to host
centos.pub: could not connect to host
-central4.me: did not receive HSTS header
+central4.me: could not connect to host
centralcountiesservices.org: did not receive HSTS header
centralfor.me: did not receive HSTS header
centrallead.net: could not connect to host
-centralpoint.be: did not receive HSTS header
-centralpoint.nl: did not receive HSTS header
centralvacsunlimited.net: did not receive HSTS header
+centralvoice.org: could not connect to host
centralync.com: could not connect to host
centrepoint-community.com: could not connect to host
centrolavoro.org: did not receive HSTS header
centsforchange.net: could not connect to host
+ceoimon.com: did not receive HSTS header
+cercevelet.com: did not receive HSTS header
ceresia.ch: could not connect to host
ceritamalam.net: could not connect to host
cerize.love: could not connect to host
@@ -2289,25 +2488,29 @@ cerpa.com.br: did not receive HSTS header
cert.se: max-age too low: 2628001
certcenter.fr: could not connect to host
certifi.io: could not connect to host
+certifix.eu: did not receive HSTS header
certly.io: could not connect to host
certmgr.org: could not connect to host
-certnazionale.it: could not connect to host
ceruleanmainbeach.com.au: did not receive HSTS header
cesal.net: could not connect to host
cesidianroot.eu: could not connect to host
cevrimici.com: could not connect to host
+cf11.de: did not receive HSTS header
cfcnexus.org: could not connect to host
cfcproperties.com: did not receive HSTS header
cfetengineering.com: could not connect to host
+cfneia.org: could not connect to host
cfoitplaybook.com: could not connect to host
cganx.org: could not connect to host
cgerstner.eu: did not receive HSTS header
cgsshelper.tk: could not connect to host
cgtx.us: could not connect to host
-chadklass.com: did not receive HSTS header
+chadklass.com: could not connect to host
chahub.com: could not connect to host
chainmonitor.com: could not connect to host
+chalker.io: could not connect to host
challengeskins.com: could not connect to host
+chameleon-ents.co.uk: could not connect to host
chameth.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
chamilo.org: did not receive HSTS header
champ.dog: did not receive HSTS header
@@ -2327,9 +2530,8 @@ chaoswebs.net: did not receive HSTS header
chaouby.com: could not connect to host
charge.co: could not connect to host
chargejuice.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-charityclear.com: did not receive HSTS header
+charityclear.com: could not connect to host
charitystreet.co.uk: could not connect to host
-charlenevondell.com: could not connect to host
charlestonsecuritysystems.net: did not receive HSTS header
charliemcneive.com: could not connect to host
charlimarie.com: did not receive HSTS header
@@ -2337,13 +2539,15 @@ charlipopkids.com.au: could not connect to host
charnleyhouse.co.uk: did not receive HSTS header
charonsecurity.com: could not connect to host
charp.eu: could not connect to host
-charr.xyz: did not receive HSTS header
chartstoffarm.de: did not receive HSTS header
+chasafilli.ch: could not connect to host
chaseganey.com: did not receive HSTS header
+chasing-coins.com: did not receive HSTS header
chaska.co.za: did not receive HSTS header
-chasse-et-plaisir.com: could not connect to host
+chasse-et-plaisir.com: did not receive HSTS header
chat-porc.eu: did not receive HSTS header
chatbot.me: did not receive HSTS header
+chatbots.email: could not connect to host
chateauconstellation.ch: did not receive HSTS header
chateaudevaugrigneuse.com: did not receive HSTS header
chatint.com: did not receive HSTS header
@@ -2351,27 +2555,32 @@ chatnbook.com: could not connect to host
chatup.cf: could not connect to host
chatxp.com: could not connect to host
chaulootz.com: did not receive HSTS header
+chaverde.org: could not connect to host
chcemvediet.sk: max-age too low: 1555200
+cheah.xyz: could not connect to host
cheapdns.org: could not connect to host
+cheapssl.com.tr: could not connect to host
cheapwritingservice.com: could not connect to host
cheazey.net: did not receive HSTS header
chebedara.com: could not connect to host
chebwebb.com: could not connect to host
+checkhost.org: could not connect to host
checkmatewebsolutions.com: did not receive HSTS header
checkout.google.com: could not connect to host (error ignored - included regardless)
+checkyourmeds.com: did not receive HSTS header
cheekylittlerascals.co.uk: did not receive HSTS header
cheerflow.com: could not connect to host
-cheesefusion.com: could not connect to host
cheesetart.my: could not connect to host
cheesypicsbooths.co.uk: could not connect to host
cheetah85.de: could not connect to host
chefgalles.com.br: could not connect to host
chejianer.cn: could not connect to host
-cheladmin.ru: did not receive HSTS header
chellame.com: could not connect to host
chellame.fr: could not connect to host
chelseafs.co.uk: did not receive HSTS header
+chemicalguys-ruhrpott.de: could not connect to host
chenfengyi.com: could not connect to host
+chengtongled.com: did not receive HSTS header
chensir.net: could not connect to host
chepaofen.com: did not receive HSTS header
cherekerry.com: could not connect to host
@@ -2379,28 +2588,30 @@ cherrydropscandycarts.co.uk: did not receive HSTS header
cherylsoleway.com: did not receive HSTS header
chessreporter.nl: did not receive HSTS header
chesterbrass.uk: did not receive HSTS header
-chez-janine.de: could not connect to host
chiamata-aiuto.ch: could not connect to host
chib.chat: could not connect to host
chicorycom.net: could not connect to host
chihiro.xyz: could not connect to host
chijiokeindustries.co.uk: could not connect to host
-chikory.com: could not connect to host
childcaresolutionscny.org: did not receive HSTS header
childrendeservebetter.org: did not receive HSTS header
+chilli943.info: did not receive HSTS header
chimparoo.ca: did not receive HSTS header
+china-dhl.org: could not connect to host
china-line.org: could not connect to host
chinternet.xyz: could not connect to host
chiphell.com: did not receive HSTS header
chirgui.eu: could not connect to host
+chiropracticwpb.com: could not connect to host
chloca.jp: did not receive HSTS header
chloe.re: did not receive HSTS header
+chloeallison.co.uk: could not connect to host
chlouis.net: could not connect to host
+chm.vn: did not receive HSTS header
chocolat-suisse.ch: could not connect to host
chodobien.com: could not connect to host
+chodocu.com: did not receive HSTS header
choiralberta.ca: did not receive HSTS header
-chokladfantasi.net: could not connect to host
-chonghe.org: did not receive HSTS header
chontalpa.pw: could not connect to host
chopperforums.com: could not connect to host
chordso.com: could not connect to host
@@ -2408,7 +2619,7 @@ chorkley.me: could not connect to host
choruscrowd.com: could not connect to host
chotu.net: could not connect to host
chris-web.info: could not connect to host
-chrisandsarahinasia.com: did not receive HSTS header
+chrisandsarahinasia.com: could not connect to host
chrisbrakebill.com: did not receive HSTS header
chrisbrown.id.au: could not connect to host
chrisebert.net: could not connect to host
@@ -2422,8 +2633,11 @@ christiaandruif.nl: could not connect to host
christianbro.gq: could not connect to host
christianhoffmann.info: could not connect to host
christianhospitaltank.org: did not receive HSTS header
+christianillies.de: could not connect to host
christiansayswords.com: could not connect to host
+christianscholz.eu: could not connect to host
christina-quast.de: could not connect to host
+christophebarbezat.ch: could not connect to host
christophercolumbusfoundation.gov: could not connect to host
christophersole.com: could not connect to host
christophheich.me: did not receive HSTS header
@@ -2431,20 +2645,25 @@ chrisupjohn.com: could not connect to host
chrisupjohn.xyz: could not connect to host
chrisvicmall.com: did not receive HSTS header
chromaryu.net: could not connect to host
+chromaxa.com: could not connect to host
chrome: could not connect to host
chrome-devtools-frontend.appspot.com: did not receive HSTS header (error ignored - included regardless)
chrome.google.com: did not receive HSTS header (error ignored - included regardless)
chronogram.me: did not receive HSTS header
chronoproject.com: did not receive HSTS header
chrst.ph: could not connect to host
+chs.us: max-age too low: 0
chua.cf: could not connect to host
-chuckame.fr: could not connect to host
+chuckame.fr: did not receive HSTS header
chulado.com: did not receive HSTS header
chundelac.com: could not connect to host
churchux.co: did not receive HSTS header
+churchwebcanada.ca: did not receive HSTS header
+churchwebsupport.com: did not receive HSTS header
churrasqueirafacil.com.br: could not connect to host
ci-labo.com.tw: max-age too low: 7889238
cianmawhinney.xyz: could not connect to host
+cidadedopoker.com.br: did not receive HSTS header
ciderclub.com: could not connect to host
cidr.ml: could not connect to host
cielly.com: could not connect to host
@@ -2457,6 +2676,7 @@ cim2b.de: could not connect to host
cimalando.eu: could not connect to host
cinartelorgu.com: did not receive HSTS header
cinefilia.tk: could not connect to host
+cinema5.ru: did not receive HSTS header
cinemaclub.co: could not connect to host
cinerama.com.br: did not receive HSTS header
cintdirect.com: could not connect to host
@@ -2465,6 +2685,7 @@ cipher.co.th: did not receive HSTS header
cipher.land: could not connect to host
cipherli.st: did not receive HSTS header
ciplanutrition.com: could not connect to host
+cipriano.nl: did not receive HSTS header
cira.email: could not connect to host
circ-logic.com: did not receive HSTS header
circlebox.rocks: could not connect to host
@@ -2472,7 +2693,6 @@ cirrohost.com: did not receive HSTS header
ciscohomeanalytics.com: could not connect to host
ciscommerce.net: could not connect to host
citiagent.cz: could not connect to host
-citizen-cam.de: did not receive HSTS header
citra-emu.org: did not receive HSTS header
citybusexpress.com: did not receive HSTS header
cityoflaurel.org: did not receive HSTS header
@@ -2480,20 +2700,23 @@ citywalkr.com: could not connect to host
ciuciucadou.ro: could not connect to host
cium.ru: could not connect to host
ciurcasdan.eu: did not receive HSTS header
+civicunicorn.com: could not connect to host
+civicunicorn.us: could not connect to host
cjcaron.org: could not connect to host
-cjessett.com: did not receive HSTS header
+cjdpenterprises.com: could not connect to host
+cjdpenterprises.com.au: could not connect to host
+cjessett.com: max-age too low: 0
cjtkfan.club: could not connect to host
ckcameron.net: could not connect to host
ckp.io: could not connect to host
claimit.ml: could not connect to host
-claireidrac.fr: max-age too low: 0
clan-ww.com: did not receive HSTS header
clapping-rhymes.com: did not receive HSTS header
clara-baumert.de: could not connect to host
claralabs.com: did not receive HSTS header
claretandbanter.uk: could not connect to host
clarity-c2ced.appspot.com: did not receive HSTS header
-claritysrv.com: could not connect to host
+claritysrv.com: did not receive HSTS header
clarksgaragedoorrepair.com: did not receive HSTS header
clashersrepublic.com: could not connect to host
classicday.nl: could not connect to host
@@ -2502,6 +2725,7 @@ classicshop.ua: did not receive HSTS header
classicspublishing.com: could not connect to host
classifiedssa.co.za: could not connect to host
claster.it: did not receive HSTS header
+claude.tech: could not connect to host
claudearpel.fr: did not receive HSTS header
claudio4.com: did not receive HSTS header
claytoncondon.com: could not connect to host
@@ -2510,8 +2734,10 @@ cleanexperts.co.uk: could not connect to host
cleaningsquad.ca: did not receive HSTS header
cleanmta.com: could not connect to host
cleanstar.org: could not connect to host
+clear.ml: could not connect to host
clearc.tk: could not connect to host
clearchatsandbox.com: could not connect to host
+clearkonjac.com: could not connect to host
clearsky.me: did not receive HSTS header
clearviewwealthprojector.com.au: could not connect to host
clemovementlaw.com: could not connect to host
@@ -2520,11 +2746,15 @@ clevelandokla.com: could not connect to host
cleververmarkten.com: did not receive HSTS header
cleververmarkten.de: did not receive HSTS header
clic-music.com: could not connect to host
+click-2-order.co.uk: did not receive HSTS header
+click2order.co.uk: did not receive HSTS header
clickandgo.com: did not receive HSTS header
clickandshoot.nl: could not connect to host
clickclickphish.com: did not receive HSTS header
clickgram.biz: could not connect to host
+clickomobile.com: could not connect to host
clicks.co.za: max-age too low: 1800
+clicktenisdemesa.com.br: did not receive HSTS header
clicn.bio: could not connect to host
clicnbio.com: could not connect to host
cliftons.com: did not receive HSTS header
@@ -2535,29 +2765,33 @@ cliniko.com: did not receive HSTS header
clintonbloodworth.com: could not connect to host
clintonbloodworth.io: could not connect to host
clintwilson.technology: max-age too low: 2592000
-clip.ovh: did not receive HSTS header
clipped4u.com: could not connect to host
+clod-hacking.com: could not connect to host
cloghercastles.co.uk: did not receive HSTS header
-closeli.cn: could not connect to host
+closient.com: did not receive HSTS header
closingholding.com: could not connect to host
cloud-crowd.com.au: did not receive HSTS header
cloud-project.com: could not connect to host
cloud.wtf: could not connect to host
cloud2go.de: did not receive HSTS header
cloudapi.vc: could not connect to host
+cloudbased.info: did not receive HSTS header
cloudbasedsite.com: did not receive HSTS header
cloudberlin.goip.de: could not connect to host
cloudbleed.info: could not connect to host
cloudcert.org: did not receive HSTS header
cloudcy.net: could not connect to host
clouddesktop.co.nz: could not connect to host
+cloudfiles.at: could not connect to host
cloudfren.com: did not receive HSTS header
cloudimag.es: could not connect to host
-cloudimproved.com: could not connect to host
cloudimprovedtest.com: could not connect to host
cloudlink.club: could not connect to host
+cloudmigrator365.com: did not receive HSTS header
cloudns.com.au: could not connect to host
cloudopt.net: did not receive HSTS header
+cloudpagesforwork.com: did not receive HSTS header
+cloudpebble.net: did not receive HSTS header
clouds.webcam: could not connect to host
cloudspotterapp.com: did not receive HSTS header
cloudstoragemaus.com: could not connect to host
@@ -2576,7 +2810,8 @@ clubcall.com: did not receive HSTS header
clubdeslecteurs.net: could not connect to host
clubmix.co.kr: could not connect to host
cluj.apartments: could not connect to host
-cluster.id: did not receive HSTS header
+cluster.biz.tr: could not connect to host
+cluster.id: could not connect to host
clvrwebdesign.com: did not receive HSTS header
clvs7.com: did not receive HSTS header
clycat.ru: could not connect to host
@@ -2608,6 +2843,8 @@ co-driversphoto.se: could not connect to host
co-yutaka.com: could not connect to host
coach-sportif.paris: did not receive HSTS header
coachingconsultancy.com: did not receive HSTS header
+coathangerstrangla.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+coathangerstrangler.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
cobaltlp.com: could not connect to host
cobrax.net: could not connect to host
coccinellaskitchen.com: could not connect to host
@@ -2637,7 +2874,7 @@ codejunkie.de: did not receive HSTS header
codelayer.ca: could not connect to host
codelitmus.com: did not receive HSTS header
codeloop.pw: could not connect to host
-codelove.de: did not receive HSTS header
+codelove.de: could not connect to host
codemonkeyrawks.net: did not receive HSTS header
codemperium.com: could not connect to host
codenlife.xyz: could not connect to host
@@ -2646,29 +2883,28 @@ codeplay.org: could not connect to host
codepoet.de: did not receive HSTS header
codeproxy.ddns.net: could not connect to host
codepx.com: did not receive HSTS header
-codeventure.de: could not connect to host
+coderhangout.com: could not connect to host
codewiththepros.org: could not connect to host
codewiz.xyz: could not connect to host
codigosddd.com.br: did not receive HSTS header
+coecrafters.com: could not connect to host
coffeedino.com: did not receive HSTS header
coffeeetc.co.uk: could not connect to host
coffeestrategies.com: max-age too low: 5184000
cogniflex.com: did not receive HSTS header
-cogsquad.house: could not connect to host
cogumelosmagicos.org: could not connect to host
-cohesive.io: did not receive HSTS header
+cohesive.io: could not connect to host
coin-exchange.cz: could not connect to host
coindam.com: could not connect to host
coins2001.ru: could not connect to host
-coisasdaterra.com: max-age too low: 0
colarelli.ch: could not connect to host
coldlostsick.net: could not connect to host
coldwatericecream.com: did not receive HSTS header
colearnr.com: could not connect to host
-colincampbell.me: could not connect to host
-collablynk.com: did not receive HSTS header
+collablynk.com: could not connect to host
collabra.email: did not receive HSTS header
collard.tk: could not connect to host
+collectiblebeans.com: could not connect to host
collectosaurus.com: did not receive HSTS header
colleencornez.com: could not connect to host
collegepulse.org: could not connect to host
@@ -2685,13 +2921,12 @@ colorcentertoner.com.br: did not receive HSTS header
colorlib.com: did not receive HSTS header
colorunhas.com.br: did not receive HSTS header
coltonrb.com: could not connect to host
-com-in.de: could not connect to host
com.cc: could not connect to host
combatshield.cz: did not receive HSTS header
-combron.co.uk: could not connect to host
-comdotgame.com: could not connect to host
+comchezmeme.com: could not connect to host
comefollowme2016.com: did not receive HSTS header
comeoncolleen.com: did not receive HSTS header
+comercialtrading.eu: could not connect to host
comfortdom.ua: did not receive HSTS header
comfortticket.de: did not receive HSTS header
comfy.cafe: could not connect to host
@@ -2705,17 +2940,17 @@ comitesaustria.at: could not connect to host
comiteshopping.com: could not connect to host
commania.co.kr: could not connect to host
commencepayments.com: did not receive HSTS header
-commerciallocker.com: did not receive HSTS header
+commerciallocker.com: could not connect to host
commercialplanet.eu: could not connect to host
commune-preuilly.fr: did not receive HSTS header
community-cupboard.org: did not receive HSTS header
communityflow.info: could not connect to host
+comocurarlagastritis24.online: did not receive HSTS header
comocurarlashemorroides.org: could not connect to host
comocurarlashemorroidesya.com: did not receive HSTS header
comotalk.com: could not connect to host
compalytics.com: could not connect to host
comparamejor.com: did not receive HSTS header
-compareandrecycle.co.uk: did not receive HSTS header
comparejewelleryprices.co.uk: could not connect to host
comparetravelinsurance.com.au: did not receive HSTS header
compassionate-biology.com: could not connect to host
@@ -2727,9 +2962,12 @@ complex-organization.com: could not connect to host
compliance-systeme.de: could not connect to host
complt.xyz: could not connect to host
complymd.com: did not receive HSTS header
+compredietlight.com.br: did not receive HSTS header
comprefitasadere.com.br: did not receive HSTS header
comprehensiveihc.com: could not connect to host
compromised.com: could not connect to host
+compsmag.com: did not receive HSTS header
+comptrollerofthecurrency.gov: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
compucorner.com.mx: could not connect to host
computeremergency.com.au: did not receive HSTS header
computertal.de: could not connect to host
@@ -2738,6 +2976,7 @@ concentrade.de: did not receive HSTS header
conceptatelier.de: could not connect to host
conception.sk: could not connect to host
concerts-metal.ch: did not receive HSTS header
+conclave.global: could not connect to host
concord-group.co.jp: did not receive HSTS header
concretehermit.com: did not receive HSTS header
conectalmeria.com: could not connect to host
@@ -2748,23 +2987,23 @@ congz.me: could not connect to host
conkret.co.uk: could not connect to host
conkret.eu: could not connect to host
conkret.in: did not receive HSTS header
+connaitre-les-astres.com: did not receive HSTS header
connect-me.com: did not receive HSTS header
connect.ua: could not connect to host
connected-verhuurservice.nl: did not receive HSTS header
connectfss.com: could not connect to host
connectingconcepts.com: did not receive HSTS header
-conniesacademy.com: could not connect to host
+conpins.nl: could not connect to host
conrad.am: could not connect to host
consciousandglamorous.com: could not connect to host
consciousbrand.org.au: could not connect to host
consciousbranding.org.au: could not connect to host
consciousbrands.net.au: could not connect to host
consejosdehogar.com: did not receive HSTS header
-conservados.com.br: could not connect to host
console.python.org: did not receive HSTS header
console.support: did not receive HSTS header
-constructexpres.ro: could not connect to host
constructive.men: could not connect to host
+consultation.biz.tr: could not connect to host
consultcelerity.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
consultingroupitaly.com: did not receive HSTS header
consultorcr.net: did not receive HSTS header
@@ -2777,31 +3016,33 @@ containerstatistics.com: could not connect to host
contarkos.xyz: could not connect to host
continuation.io: could not connect to host
continuumgaming.com: could not connect to host
+contraout.com: could not connect to host
controlcenter.gigahost.dk: did not receive HSTS header
controleer-maar-een-ander.nl: did not receive HSTS header
convergemagazine.com: did not receive HSTS header
-converticacommerce.com: could not connect to host
convertimg.com: could not connect to host
-convoitises.com: could not connect to host
+convoitises.com: did not receive HSTS header
cooink.net: could not connect to host
cookiestudies.cf: could not connect to host
+cool110.tk: could not connect to host
+cool110.xyz: could not connect to host
coolaj86.com: did not receive HSTS header
coolbutbroken.com: did not receive HSTS header
coolchevy.org.ua: did not receive HSTS header
coole-meister.de: could not connect to host
cooljs.me: could not connect to host
coolkidsbouncycastles.co.uk: did not receive HSTS header
-coolpickz.com: max-age too low: 0
coolvox.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
coonelnel.net: did not receive HSTS header
-coor.fun: could not connect to host
cooxa.com: could not connect to host
copshop.com.br: could not connect to host
+coptic-treasures.com: max-age too low: 2592000
copycaught.com: could not connect to host
cor-ser.es: could not connect to host
coralproject.net: did not receive HSTS header
coralrosado.com.br: did not receive HSTS header
coramcdaniel.com: did not receive HSTS header
+corbinhesse.com: could not connect to host
corderoscleaning.com: did not receive HSTS header
cordial-restaurant.com: did not receive HSTS header
core4system.de: could not connect to host
@@ -2812,17 +3053,19 @@ corenetworking.de: could not connect to host
corex.io: could not connect to host
corgicloud.com: could not connect to host
corinnanese.de: could not connect to host
+coriver.me: could not connect to host
corkyoga.site: could not connect to host
cormactagging.ie: could not connect to host
cormilu.com.br: did not receive HSTS header
cornishcamels.com: did not receive HSTS header
cornmachine.com: did not receive HSTS header
+cornodo.com: could not connect to host
coroasdefloresonline.com.br: could not connect to host
corozanu.ro: did not receive HSTS header
corpoatletico.com.br: could not connect to host
corporateencryption.com: could not connect to host
corporatesubscriptions.com.au: did not receive HSTS header
-correct.horse: could not connect to host
+correct.horse: did not receive HSTS header
correctpaardbatterijnietje.nl: did not receive HSTS header
correiodovale.com.br: did not receive HSTS header
corruption-mc.net: could not connect to host
@@ -2834,9 +3077,11 @@ cosmiatria.pe: could not connect to host
cosmoluziluminacion.com: did not receive HSTS header
cosmoss-departure.com: did not receive HSTS header
cosplayer.com: could not connect to host
-costow.club: could not connect to host
-cougarsland.com: could not connect to host
+costow.club: did not receive HSTS header
+cotonea.de: did not receive HSTS header
+cougarsland.com: did not receive HSTS header
coughlan.de: did not receive HSTS header
+counselling.network: could not connect to host
count.sh: could not connect to host
coup-dun-soir.ch: could not connect to host
couponcodeq.com: could not connect to host
@@ -2847,15 +3092,21 @@ course.rs: could not connect to host
coursella.com: did not receive HSTS header
courses.nl: could not connect to host
courseworkbank.info: could not connect to host
+cousincouples.com: max-age too low: 0
cove.sh: could not connect to host
covenantbank.net: could not connect to host
-coverdat.com: did not receive HSTS header
+coverdat.com: could not connect to host
coverduck.ru: could not connect to host
+coworkingmanifesto.com: did not receive HSTS header
+cozmaadrian.ro: could not connect to host
+cozy.io: did not receive HSTS header
+cozycloud.cc: did not receive HSTS header
cpaneltips.com: could not connect to host
cpbanq.com: could not connect to host
+cpu.biz.tr: could not connect to host
cpuvinf.eu.org: could not connect to host
cracking.org: did not receive HSTS header
-crackingking.com: could not connect to host
+crackingking.com: did not receive HSTS header
crackpfer.de: could not connect to host
crackslut.eu: could not connect to host
craftbeerbarn.co.uk: could not connect to host
@@ -2863,6 +3114,7 @@ craftedge.xyz: could not connect to host
craftination.net: could not connect to host
craftmain.eu: could not connect to host
craftmine.cz: could not connect to host
+craftngo.hu: could not connect to host
craftydev.design: could not connect to host
craigsimpson.scot: did not receive HSTS header
cranems.com.ua: could not connect to host
@@ -2874,30 +3126,29 @@ cravelyrics.com: could not connect to host
crazifyngers.com: could not connect to host
crazy-crawler.de: did not receive HSTS header
crazycen.com: did not receive HSTS header
-crazycraftland.de: could not connect to host
+crazycraftland.de: did not receive HSTS header
crazycraftland.net: did not receive HSTS header
+crazyfamily11.de: did not receive HSTS header
crazyhotseeds.com: did not receive HSTS header
crazyker.com: did not receive HSTS header
crbug.com: did not receive HSTS header (error ignored - included regardless)
creaescola.com: did not receive HSTS header
-crealogix-online.com: could not connect to host
creamybuild.com: could not connect to host
create-test-publish.co.uk: could not connect to host
creativeapple.ltd: did not receive HSTS header
creativeartifice.com: did not receive HSTS header
creativecommonscatpictures.com: could not connect to host
-creativeink.de: could not connect to host
creativephysics.ml: could not connect to host
creativeplayuk.com: did not receive HSTS header
creato.top: could not connect to host
crecket.me: could not connect to host
credia.jp: did not receive HSTS header
creditclear.com.au: did not receive HSTS header
-crendontech.com: could not connect to host
+creditreporttips.net: could not connect to host
+crendontech.com: did not receive HSTS header
crestoncottage.com: could not connect to host
crewplanner.eu: did not receive HSTS header
crimewatch.net.za: could not connect to host
-crip-usk.ba: could not connect to host
crisissurvivalspecialists.com: could not connect to host
cristianhares.com: could not connect to host
criticalaim.com: could not connect to host
@@ -2913,6 +3164,7 @@ crop-alert.com: could not connect to host
crosbug.com: did not receive HSTS header (error ignored - included regardless)
crosspeakoms.com: did not receive HSTS header
crosssec.com: did not receive HSTS header
+crow.tw: could not connect to host
crowd.supply: did not receive HSTS header
crowdcurity.com: did not receive HSTS header
crowdjuris.com: could not connect to host
@@ -2920,6 +3172,7 @@ crownbouncycastlehire.co.uk: did not receive HSTS header
crownruler.com: did not receive HSTS header
crox.co: could not connect to host
crrev.com: did not receive HSTS header (error ignored - included regardless)
+crt.sh: could not connect to host
crtvmgmt.com: could not connect to host
crudysql.com: could not connect to host
crufad.org: did not receive HSTS header
@@ -2930,9 +3183,13 @@ cruzr.xyz: could not connect to host
crypalert.com: could not connect to host
crypt.guru: did not receive HSTS header
cryptify.eu: could not connect to host
+cryptobells.com: did not receive HSTS header
cryptobin.org: could not connect to host
cryptocaseproject.com: could not connect to host
cryptodash.net: could not connect to host
+cryptoegg.ca: could not connect to host
+cryptofrog.co: could not connect to host
+cryptoisnotacrime.org: could not connect to host
cryptojar.io: could not connect to host
cryptolab.pro: could not connect to host
cryptolab.tk: could not connect to host
@@ -2951,12 +3208,15 @@ csapak.com: did not receive HSTS header
csawctf.poly.edu: could not connect to host
cscau.com: did not receive HSTS header
csehnyelv.hu: could not connect to host
-cselzer.com: could not connect to host
+cselzer.com: did not receive HSTS header
+cser.me: did not receive HSTS header
csfs.org.uk: could not connect to host
csgf.ru: did not receive HSTS header
+csgo.help: could not connect to host
csgo77.com: could not connect to host
csgodicegame.com: could not connect to host
csgoelemental.com: could not connect to host
+csgogamers.com: could not connect to host
csgokings.eu: could not connect to host
csgoshifter.com: could not connect to host
csilies.de: could not connect to host
@@ -2970,43 +3230,44 @@ cssu.in: did not receive HSTS header
csvape.com: did not receive HSTS header
ct-status.org: could not connect to host
ct-watches.dk: did not receive HSTS header
+ctl.email: could not connect to host
ctrl.blog: did not receive HSTS header
-cuanhua3s.com: could not connect to host
+cuanhua3s.com: did not receive HSTS header
cubecart.net: could not connect to host
-cubekrowd.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
cubela.tech: could not connect to host
cubeserver.eu: could not connect to host
cubewano.com: could not connect to host
cubix.host: did not receive HSTS header
cucc.date: could not connect to host
cuecamania.com.br: could not connect to host
-cuibonobo.com: could not connect to host
cujanovic.com: did not receive HSTS header
cujba.com: could not connect to host
culinae.nl: could not connect to host
+culture-school.top: did not receive HSTS header
cumparama.com: did not receive HSTS header
cumshots-video.ru: could not connect to host
-cuni-cuni-club.com: could not connect to host
+cuni-cuni-club.com: did not receive HSTS header
cuni-rec.com: could not connect to host
-cuntflaps.me: could not connect to host
+cuntflaps.me: did not receive HSTS header
cuongquach.com: did not receive HSTS header
cuongthach.com: did not receive HSTS header
cuonic.com: could not connect to host
cupcake.io: did not receive HSTS header
cupcake.is: did not receive HSTS header
curacao-license.com: could not connect to host
-curarnosensalud.com: did not receive HSTS header
-curiouscat.me: did not receive HSTS header
+curarnosensalud.com: could not connect to host
+curatedgeek.com: did not receive HSTS header
+curiouscat.me: max-age too low: 2592000
curlyroots.com: did not receive HSTS header
+current.com: did not receive HSTS header
curroapp.com: could not connect to host
-cursosdnc.cl: could not connect to host
+cursosdnc.cl: did not receive HSTS header
curveweb.co.uk: did not receive HSTS header
cusfit.com: did not receive HSTS header
custe.rs: could not connect to host
customadesign.com: did not receive HSTS header
customd.com: did not receive HSTS header
customfilmworks.com: could not connect to host
-customizeyoursink.com: could not connect to host
custompapers.com: could not connect to host
customwritings.com: could not connect to host
cutelariafiveladeouro.com.br: did not receive HSTS header
@@ -3034,38 +3295,42 @@ cyberpeace.nl: could not connect to host
cyberprey.com: did not receive HSTS header
cyberpunk.ca: could not connect to host
cybersafesolutions.com: did not receive HSTS header
-cybersantri.com: could not connect to host
cyberscan.io: did not receive HSTS header
-cybersecurity.nz: could not connect to host
cybershambles.com: could not connect to host
+cyberspace.today: could not connect to host
+cybit.io: did not receive HSTS header
cyclehackluxembourgcity.lu: could not connect to host
cyclingjunkies.com: could not connect to host
cydia-search.io: could not connect to host
+cyelint.com: could not connect to host
+cygu.ch: did not receive HSTS header
cymtech.net: could not connect to host
cynoshair.com: could not connect to host
cyoda.com: did not receive HSTS header
-cypherpunk.com: could not connect to host
cypherpunk.ws: could not connect to host
cyphertite.com: could not connect to host
-cysmo.de: max-age too low: 0
-cytadel.fr: could not connect to host
+cytadel.fr: did not receive HSTS header
+czakey.net: could not connect to host
czaw.org: did not receive HSTS header
-czirnich.org: could not connect to host
+czirnich.org: did not receive HSTS header
+czk.mk: could not connect to host
czlx.co: could not connect to host
d-academia.com: did not receive HSTS header
+d-macindustries.com: did not receive HSTS header
d-rickroll-e.pw: could not connect to host
d00r.de: did not receive HSTS header
d0xq.net: could not connect to host
d1ves.io: did not receive HSTS header
d3x.pw: could not connect to host
-d3xx3r.de: did not receive HSTS header
d4rkdeagle.tk: could not connect to host
+d4wson.com: could not connect to host
d8studio.net: could not connect to host
da8.cc: could not connect to host
dabblegoat.com: could not connect to host
dabbot.org: did not receive HSTS header
dad256.tk: could not connect to host
dadtheimpaler.com: could not connect to host
+daemon.xin: did not receive HSTS header
dah5.com: did not receive HSTS header
dahl-pind.dk: did not receive HSTS header
dai-rin.co.jp: could not connect to host
@@ -3074,6 +3339,7 @@ dailystormerpodcasts.com: could not connect to host
dailytopix.com: could not connect to host
daimadi.com: could not connect to host
daisuki.pw: could not connect to host
+daiyuu.jp: could not connect to host
dakerealestate.com: did not receive HSTS header
dakl-shop.de: did not receive HSTS header
dakotasilencer.com: did not receive HSTS header
@@ -3090,6 +3356,7 @@ danbarrett.com.au: could not connect to host
dancerdates.net: did not receive HSTS header
dandymrsb.com: could not connect to host
dane-bre.net: max-age too low: 172800
+dango.in: could not connect to host
daniel-mosquera.com: could not connect to host
daniel-seifert.com: max-age too low: 600000
daniel-stahl.net: could not connect to host
@@ -3097,9 +3364,9 @@ daniel-steuer.de: could not connect to host
danielcowie.me: could not connect to host
danieldk.eu: did not receive HSTS header
danielgraziano.ca: could not connect to host
-danielhinterlechner.eu: max-age too low: 172800
danieliancu.com: could not connect to host
danielkratz.com: max-age too low: 172800
+danielverlaan.nl: could not connect to host
danielworthy.com: did not receive HSTS header
danielzuzevich.com: could not connect to host
danijobs.com: could not connect to host
@@ -3107,17 +3374,21 @@ danishenanigans.com: could not connect to host
dankeblog.com: could not connect to host
danmark.guide: did not receive HSTS header
dannycrichton.com: did not receive HSTS header
+dannystevens.co.uk: could not connect to host
danrl.de: could not connect to host
danskringsporta.be: did not receive HSTS header
danwillenberg.com: did not receive HSTS header
daolerp.xyz: could not connect to host
+daphne.informatik.uni-freiburg.de: did not receive HSTS header
dargasia.is: could not connect to host
dario.im: did not receive HSTS header
+dariosirangelo.me: did not receive HSTS header
dark-x.cf: could not connect to host
darkanzali.pl: max-age too low: 0
darkdestiny.ch: could not connect to host
darkfriday.ddns.net: could not connect to host
darkhole.cn: did not receive HSTS header
+darkishgreen.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
darkkeepers.dk: max-age too low: 172800
darknebula.space: could not connect to host
darknode.in: did not receive HSTS header
@@ -3129,7 +3400,7 @@ darlastudio66.com: did not receive HSTS header
darlo.co.uk: could not connect to host
daropia.org: could not connect to host
darrenellis.xyz: could not connect to host
-daryl.moe: could not connect to host
+darrenm.net: could not connect to host
das-tyrol.at: did not receive HSTS header
dash-board.jp: did not receive HSTS header
dash.rocks: did not receive HSTS header
@@ -3141,40 +3412,45 @@ data-detox.com: could not connect to host
data.haus: could not connect to host
data.qld.gov.au: did not receive HSTS header
datacave.is: could not connect to host
+datacool.tk: could not connect to host
datacubed.com: did not receive HSTS header
+datahoarder.download: could not connect to host
dataisme.com: did not receive HSTS header
datajapan.co.jp: did not receive HSTS header
datamatic.ru: could not connect to host
-datarank.com: max-age too low: 0
dataretention.solutions: could not connect to host
-datascience.cafe: did not receive HSTS header
+datasharesystem.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
datasnitch.co.uk: could not connect to host
datatekniikka.com: could not connect to host
datedeposit.com: could not connect to host
datengrab.ws: could not connect to host
-dateno1.com: could not connect to host
-datenreiter.cf: did not receive HSTS header
-datenreiter.gq: did not receive HSTS header
-datenreiter.ml: did not receive HSTS header
-datenreiter.tk: did not receive HSTS header
-datenschutzhelden.org: did not receive HSTS header
+datenlast.de: could not connect to host
+datenreiter.cf: could not connect to host
+datenreiter.gq: could not connect to host
+datenreiter.ml: could not connect to host
+datenreiter.tk: could not connect to host
+datenschutzhelden.org: could not connect to host
datine.com.br: could not connect to host
datorb.com: could not connect to host
datortipsen.se: did not receive HSTS header
-datsumo-damegami.com: max-age too low: 0
+datsumou-q.com: did not receive HSTS header
+daverandom.com: could not connect to host
davidandkailey.com: could not connect to host
+davidbrito.tech: could not connect to host
davidglidden.eu: did not receive HSTS header
davidgrudl.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
davidhunter.scot: did not receive HSTS header
davidletellier.com: did not receive HSTS header
-davidlillo.com: could not connect to host
+davidmcevoy.org.uk: did not receive HSTS header
davidnoren.com: did not receive HSTS header
davidreinhardt.de: could not connect to host
davidscherzer.at: could not connect to host
davros.eu: could not connect to host
davros.ru: could not connect to host
+daw.nz: could not connect to host
dawnofeden.org: did not receive HSTS header
dawnson.is: could not connect to host
+dawnsonb.com: could not connect to host
day.vip: did not receive HSTS header
daylightcompany.com: did not receive HSTS header
days.one: could not connect to host
@@ -3186,27 +3462,37 @@ dbpmedia.se: did not receive HSTS header
dbx.ovh: could not connect to host
dbyz.co.uk: max-age too low: 43200
dcaracing.nl: could not connect to host
+dcc.moe: did not receive HSTS header
dccode.gov: could not connect to host
dccoffeeproducts.com: did not receive HSTS header
dccraft.net: could not connect to host
dctxf.com: did not receive HSTS header
dcuofriends.net: could not connect to host
-dcurt.is: max-age too low: 0
-dcw.io: did not receive HSTS header
+dcw.io: could not connect to host
+dd.art.pl: could not connect to host
ddatsh.com: did not receive HSTS header
dden.website: could not connect to host
dden.xyz: could not connect to host
ddmeportal.com: could not connect to host
+ddns-anbieter.de: could not connect to host
ddocu.me: did not receive HSTS header
ddos-mitigation.co.uk: could not connect to host
ddos-mitigation.info: could not connect to host
de-servers.de: could not connect to host
deadmann.com: could not connect to host
-deadsoul.net: max-age too low: 0
-debank.tv: could not connect to host
+deadsoul.net: could not connect to host
+debank.tv: did not receive HSTS header
+debarrasantony.com: could not connect to host
+debarrasasnieressurseine.com: could not connect to host
+debarrasboulognebillancourt.com: could not connect to host
+debarrasclichy.com: could not connect to host
+debarrascolombes.com: could not connect to host
+debarrasnanterre.com: could not connect to host
debatch.se: could not connect to host
debian-vhost.de: could not connect to host
debiton.dk: could not connect to host
+debitoutil.com: did not receive HSTS header
+debitpaie.com: did not receive HSTS header
deborahmarinelli.eu: could not connect to host
debtkit.co.uk: did not receive HSTS header
debtprotectionreporting.com: did not receive HSTS header
@@ -3218,11 +3504,12 @@ decloverly.com: did not receive HSTS header
deco.me: could not connect to host
decoboutique.com: did not receive HSTS header
decofire.pl: did not receive HSTS header
-decomplify.com: could not connect to host
+decomplify.com: did not receive HSTS header
deconsolutions.com: did not receive HSTS header
decoraid.com: did not receive HSTS header
+decoratore.roma.it: did not receive HSTS header
decorincasa.com.br: could not connect to host
-decorland.com.ua: did not receive HSTS header
+decorland.com.ua: could not connect to host
decormiernissanparts.com: could not connect to host
decoyrouting.com: could not connect to host
dedeo.tk: did not receive HSTS header
@@ -3235,6 +3522,7 @@ deeprecce.com: could not connect to host
deeprecce.link: could not connect to host
deeprecce.tech: could not connect to host
deeps.cat: could not connect to host
+deeps.me: did not receive HSTS header
deepvalley.tech: could not connect to host
deepvision.com.ua: did not receive HSTS header
deetz.nl: did not receive HSTS header
@@ -3254,24 +3542,24 @@ degroetenvanrosaline.nl: did not receive HSTS header
deight.co: could not connect to host
deight.in: could not connect to host
dekasan.ru: could not connect to host
+delandalucia.com: did not receive HSTS header
delayrefunds.co.uk: could not connect to host
+deliberatedigital.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
deliver.moe: did not receive HSTS header
deliverance.co.uk: could not connect to host
deloittequant.com: could not connect to host
-deltaacademy.org: could not connect to host
-deltaconcepts.de: did not receive HSTS header
+deltaconcepts.de: could not connect to host
delvj.org: could not connect to host
demandware.com: did not receive HSTS header
+demarche-expresse.com: could not connect to host
demdis.org: could not connect to host
demilitarized.ninja: could not connect to host
demo-server.us: could not connect to host
demo.sb: could not connect to host
-demo.swedbank.se: did not receive HSTS header
democracy.io: did not receive HSTS header
democraticdifference.com: did not receive HSTS header
demomanca.com: did not receive HSTS header
demotops.com: could not connect to host
-dempsters.ca: max-age too low: 86400
dengchangdong.com: could not connect to host
denh.am: did not receive HSTS header
denisjean.fr: could not connect to host
@@ -3314,17 +3602,19 @@ despotika.de: could not connect to host
desserteagleselvenar.tk: could not connect to host
destinationbijoux.fr: could not connect to host
destom.be: could not connect to host
-desuperheroes.co: did not receive HSTS header
+desuperheroes.co: could not connect to host
detalhecomercio.com.br: could not connect to host
detechnologiecooperatie.nl: did not receive HSTS header
detecte-fuite.ch: could not connect to host
detecte.ch: could not connect to host
detectefuite.ch: could not connect to host
detector.exposed: could not connect to host
-detest.org: could not connect to host
+detest.org: did not receive HSTS header
dethikiemtra.com: did not receive HSTS header
+detroitrocs.org: did not receive HSTS header
detteflies.com: max-age too low: 7889238
detutorial.com: max-age too low: 36000
+deuchnord.fr: could not connect to host
deusu.de: could not connect to host
deusu.org: could not connect to host
deuxvia.com: could not connect to host
@@ -3335,16 +3625,20 @@ dev-talk.eu: did not receive HSTS header
dev-talk.net: could not connect to host
devafterdark.com: could not connect to host
devdesco.com: could not connect to host
+devdom.io: max-age too low: 172800
+devdoodle.net: could not connect to host
develop.fitness: could not connect to host
+developermail.io: did not receive HSTS header
developersclub.website: could not connect to host
-developyourelement.com: could not connect to host
+developyourelement.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
devh.de: could not connect to host
-devh.net: could not connect to host
deviltraxxx.de: could not connect to host
+devin-balimuhac.de: did not receive HSTS header
devincrow.me: could not connect to host
devinpacker.com: did not receive HSTS header
devisonline.ch: could not connect to host
devistravaux.org: did not receive HSTS header
+devkit.cc: could not connect to host
devlux.ch: did not receive HSTS header
devmsg.com: did not receive HSTS header
devnsec.com: could not connect to host
@@ -3358,40 +3652,46 @@ devtub.com: could not connect to host
devuan.org: did not receive HSTS header
dewebwerf.nl: did not receive HSTS header
dewin.io: could not connect to host
+dezet-ev.de: could not connect to host
dfixit.com: could not connect to host
dfrance.com.br: did not receive HSTS header
dfviana.com.br: max-age too low: 2592000
+dggwp.de: did not receive HSTS header
dharamkot.com: could not connect to host
dharma.ai: did not receive HSTS header
-dhautefeuille.eu: could not connect to host
-dheart.net: could not connect to host
dhl-smart.ch: could not connect to host
+dhlcotizadorexpo-qa.azurewebsites.net: could not connect to host
dhpcs.com: did not receive HSTS header
dhpiggott.net: did not receive HSTS header
dhub.xyz: could not connect to host
dhxxls.com: could not connect to host
diablotine.rocks: could not connect to host
+diabolic.chat: could not connect to host
diagnosia.com: did not receive HSTS header
diagonale-deco.fr: did not receive HSTS header
diamondcare.com.br: could not connect to host
+diamondpkg.org: could not connect to host
diamondt.us: did not receive HSTS header
dianlujitao.com: did not receive HSTS header
diannaobos.com: did not receive HSTS header
diasp.cz: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+diavo.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
dicando.com: could not connect to host
diceduels.com: could not connect to host
+dicgaming.net: could not connect to host
dichgans-besserer.de: did not receive HSTS header
dichvudangkygiayphep.com: could not connect to host
+dicio.com.br: did not receive HSTS header
dicionariofinanceiro.com: did not receive HSTS header
dicionariopopular.com: did not receive HSTS header
dick.red: could not connect to host
+dickpics.ru: could not connect to host
didierlaumen.be: could not connect to host
die-besten-weisheiten.de: did not receive HSTS header
die-gruenen-teufel.de: could not connect to host
dieb.photo: could not connect to host
diejanssens.net: did not receive HSTS header
diemogebhardt.com: could not connect to host
-dienstplan.one: could not connect to host
dierenkruiden.nl: did not receive HSTS header
dieser.me: could not connect to host
dietagespresse.com: did not receive HSTS header
@@ -3403,6 +3703,7 @@ digihyp.ch: could not connect to host
digikol.net: could not connect to host
digired.xyz: could not connect to host
digitalbank.kz: could not connect to host
+digitalcloud.ovh: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
digitalcraftmarketing.co.uk: did not receive HSTS header
digitaldaddy.net: did not receive HSTS header
digitalero.rip: did not receive HSTS header
@@ -3414,7 +3715,7 @@ digitallocker.com: did not receive HSTS header
digitalnonplus.com: could not connect to host
digitalquery.com: did not receive HSTS header
digitalriver.tk: did not receive HSTS header
-digitalrxcloud.com: did not receive HSTS header
+digitalrxcloud.com: could not connect to host
digitalunite.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
digitalwasteland.net: could not connect to host
digiworks.se: did not receive HSTS header
@@ -3428,21 +3729,17 @@ dimes.com.tr: did not receive HSTS header
dimitrisotiropoulosbooks.com: max-age too low: 7889238
din-tools.com: did not receive HSTS header
dinamoelektrik.com: could not connect to host
-dinepont.fr: could not connect to host
-dingcc.com: could not connect to host
dingcc.me: could not connect to host
-dingcc.org: did not receive HSTS header
+dingcc.org: could not connect to host
dingcc.xyz: could not connect to host
-dingelbob-schuhcreme.gq: could not connect to host
dingss.com: could not connect to host
dinkum.online: could not connect to host
-dino.li: max-age too low: 0
dinotv.at: could not connect to host
dintillat.fr: could not connect to host
dinube.com: did not receive HSTS header
dionysus.se: could not connect to host
dipconsultants.com: could not connect to host
-direct2uk.com: did not receive HSTS header
+direct2uk.com: could not connect to host
directhskincream.com: could not connect to host
directorinegocis.cat: could not connect to host
directtwo.solutions: could not connect to host
@@ -3452,9 +3749,10 @@ direnv.net: did not receive HSTS header
direwolfsoftware.ca: could not connect to host
dirk-weise.de: could not connect to host
dirtycat.ru: could not connect to host
-disability.gov: did not receive HSTS header
+dirtygeek.ovh: could not connect to host
disadattamentolavorativo.it: could not connect to host
-disclosure.io: could not connect to host
+disarc.com: max-age too low: 0
+disclosure.io: did not receive HSTS header
disco-crazy-world.de: could not connect to host
discord-chan.net: could not connect to host
discountmania.eu: did not receive HSTS header
@@ -3465,12 +3763,12 @@ discoverrsv.com: did not receive HSTS header
discoverwellness.center: did not receive HSTS header
discovery.lookout.com: did not receive HSTS header
discoveryballoon.org: could not connect to host
-discoveryottawa.ca: did not receive HSTS header
disking.co.uk: did not receive HSTS header
dislocated.de: did not receive HSTS header
disorderboutique.com: did not receive HSTS header
disruptivelabs.net: could not connect to host
disruptivelabs.org: could not connect to host
+dissieux.com: did not receive HSTS header
dissimulo.me: could not connect to host
distinctivephotography.com.au: could not connect to host
distinguishedwindows.co.uk: did not receive HSTS header
@@ -3483,16 +3781,16 @@ diva-ey.com: could not connect to host
divegearexpress.com.cn: did not receive HSTS header
diversity-spielzeug.de: did not receive HSTS header
divingwithnic.com: could not connect to host
-divorciosmurcia.com: did not receive HSTS header
divvi.co.nz: did not receive HSTS header
-divvymonkey.com: did not receive HSTS header
divvyradio.com: did not receive HSTS header
diwei.vip: did not receive HSTS header
dixiediner.com: did not receive HSTS header
dixmag.com: could not connect to host
+diz.in.ua: did not receive HSTS header
dizihocasi.com: could not connect to host
dizorg.net: could not connect to host
dj4et.de: could not connect to host
+djieno.com: could not connect to host
djul.net: could not connect to host
djxmmx.net: did not receive HSTS header
djz4music.com: did not receive HSTS header
@@ -3502,14 +3800,18 @@ dl.google.com: did not receive HSTS header (error ignored - included regardless)
dlbouncers.co.uk: did not receive HSTS header
dlc.viasinc.com: could not connect to host
dlemper.de: did not receive HSTS header
+dlouwrink.nl: could not connect to host
dlyl888.com: could not connect to host
-dm4productions.com: could not connect to host
dmarketer.com: did not receive HSTS header
+dmcglobaltravel.com.mx: did not receive HSTS header
dmcibulldog.com: did not receive HSTS header
dmdre.com: did not receive HSTS header
dmenergy.ru: did not receive HSTS header
+dmfd.net: could not connect to host
dmix.ca: could not connect to host
+dmlogic.com: could not connect to host
dmtry.me: did not receive HSTS header
+dmwall.cn: could not connect to host
dmz.ninja: could not connect to host
dnmaze.com: could not connect to host
dns.google.com: did not receive HSTS header (error ignored - included regardless)
@@ -3517,12 +3819,16 @@ dnsbird.net: could not connect to host
dnsbird.org: could not connect to host
dnscrypt.org: max-age too low: 0
dnsknowledge.com: did not receive HSTS header
+dnsql.io: could not connect to host
do-do.tk: could not connect to host
-doak.io: could not connect to host
+do-it.cz: could not connect to host
+do67.de: could not connect to host
+do67.net: could not connect to host
+doak.io: did not receive HSTS header
dobet.in: could not connect to host
-dobrisan.ro: could not connect to host
doc-justice.com: could not connect to host
docid.io: could not connect to host
+dockerturkiye.com: max-age too low: 0
docket.news: could not connect to host
doclot.io: did not receive HSTS header
docplexus.in: did not receive HSTS header
@@ -3536,6 +3842,7 @@ doeswindowssuckforeveryoneorjustme.com: could not connect to host
dogbox.se: could not connect to host
dogcratereview.info: could not connect to host
dogespeed.ga: could not connect to host
+doggedbyirs.com: could not connect to host
doggieholic.net: could not connect to host
dognlife.com: could not connect to host
dogoodbehappyllc.com: did not receive HSTS header
@@ -3551,7 +3858,8 @@ dollywiki.co.uk: could not connect to host
dolphin-cloud.com: could not connect to host
dolphin-hosting.com: could not connect to host
dolphincorp.co.uk: could not connect to host
-dolphinswithlasers.com: did not receive HSTS header
+dolphinswithlasers.com: could not connect to host
+dolt.xyz: did not receive HSTS header
domaine-aigoual-cevennes.com: did not receive HSTS header
domainelaremejeanne.com: did not receive HSTS header
domaris.de: did not receive HSTS header
@@ -3561,7 +3869,7 @@ domenicocatelli.com: did not receive HSTS header
domfee.com: could not connect to host
dominikanskarepubliken.guide: could not connect to host
dominioanimal.com: could not connect to host
-dominique-mueller.de: did not receive HSTS header
+dominique-mueller.de: could not connect to host
don.yokohama: could not connect to host
donateway.com: did not receive HSTS header
dong8.top: could not connect to host
@@ -3569,8 +3877,10 @@ donhoward.org: did not receive HSTS header
donmez.uk: could not connect to host
donmez.ws: could not connect to host
donotcall.gov: did not receive HSTS header
+donotspampls.me: could not connect to host
donotspellitgav.in: did not receive HSTS header
donsbach-edv.de: did not receive HSTS header
+donthedragonwilson.com: could not connect to host
dontpayfull.com: did not receive HSTS header
donttrustrobots.nl: could not connect to host
donzelot.co.uk: did not receive HSTS header
@@ -3584,30 +3894,37 @@ dopost.it: could not connect to host
dorfbaeck.at: did not receive HSTS header
doridian.com: could not connect to host
doridian.de: could not connect to host
-doridian.net: did not receive HSTS header
doridian.org: could not connect to host
doriginal.es: did not receive HSTS header
dorkfarm.com: did not receive HSTS header
dormebebe.com.br: could not connect to host
+dosipe.com: could not connect to host
doska.kz: could not connect to host
dostavkakurierom.ru: could not connect to host
dot42.no: could not connect to host
dotadata.me: could not connect to host
+dotb.dn.ua: did not receive HSTS header
dotbrick.co.th: did not receive HSTS header
+dotconnor.com: could not connect to host
+dotkod.com: could not connect to host
+dotnetsandbox.ca: could not connect to host
dotspaperie.com: could not connect to host
doublethink.online: could not connect to host
doubleyummy.uk: did not receive HSTS header
+dougferris.id.au: could not connect to host
douglasstafford.com: did not receive HSTS header
+doujin-domain.cz: could not connect to host
doujin.nagoya: could not connect to host
doulasofgreaterkansascity.org: max-age too low: 300
dovecotadmin.org: could not connect to host
-doveholesband.co.uk: could not connect to host
+doveholesband.co.uk: did not receive HSTS header
dovetailnow.com: could not connect to host
dowc.org: did not receive HSTS header
download.jitsi.org: did not receive HSTS header
-downsouthweddings.com.au: could not connect to host
+downsouthweddings.com.au: did not receive HSTS header
doyoulyft.com: could not connect to host
dpangerl.de: did not receive HSTS header
+dpg.no: could not connect to host
dps.srl: did not receive HSTS header
dpsart.it: did not receive HSTS header
dr2dr.ca: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
@@ -3615,15 +3932,16 @@ drabim.org: did not receive HSTS header
draghive.club: did not receive HSTS header
draghive.net: could not connect to host
draghive.photos: did not receive HSTS header
+dragoncityhack.tips: could not connect to host
dragonisles.net: could not connect to host
dragons-of-highlands.cz: did not receive HSTS header
dragonsmoke.cloud: could not connect to host
dragonstower.net: could not connect to host
dragonteam.ninja: could not connect to host
-dragonwork.me: could not connect to host
drahcro.uk: could not connect to host
drainagebuizen.nl: did not receive HSTS header
drakefortreasurer.sexy: could not connect to host
+drakensberg-tourism.com: did not receive HSTS header
drakfot.se: could not connect to host
dralexjimenez.com: did not receive HSTS header
drastosasports.com.br: could not connect to host
@@ -3646,6 +3964,7 @@ drillnation.com.au: could not connect to host
drinknaturespower.com: could not connect to host
drinkvabeer.com: could not connect to host
drishti.guru: could not connect to host
+drive.xyz: could not connect to host
drivewithstatetransit.com.au: did not receive HSTS header
driving-lessons.co.uk: could not connect to host
drixn.cn: could not connect to host
@@ -3673,59 +3992,76 @@ droomhuisindestadverkopen.nl: could not connect to host
droomhuisophetplattelandverkopen.nl: could not connect to host
dropcam.com: did not receive HSTS header
drostschocolates.com: did not receive HSTS header
+drpure.pw: could not connect to host
drtroyhendrickson.com: could not connect to host
drtti.io: could not connect to host
+drturner.com.au: did not receive HSTS header
drugagodba.si: did not receive HSTS header
-drumbandesperanto.nl: did not receive HSTS header
+drumbandesperanto.nl: could not connect to host
drupal123.com: could not connect to host
+druznek.rocks: could not connect to host
+druznek.xyz: could not connect to host
dryan.com: did not receive HSTS header
drybasement.com: did not receive HSTS header
drybasementkansas.com: did not receive HSTS header
drycreekapiary.com: could not connect to host
ds-christiansen.de: could not connect to host
+ds67.de: could not connect to host
dshiv.io: could not connect to host
+dsyunmall.com: could not connect to host
+dtg-fonds.com: could not connect to host
+dtg-fonds.de: could not connect to host
+dtg-fonds.net: could not connect to host
dtub.co: could not connect to host
-dualias.xyz: did not receive HSTS header
+duan.li: could not connect to host
dubik.su: did not receive HSTS header
-duch.cloud: could not connect to host
duckyubuntu.tk: could not connect to host
-ducohosting.com: max-age too low: 2592000
+ducohosting.com: did not receive HSTS header
dudesunderwear.com.br: could not connect to host
duelsow.eu: could not connect to host
duelysthub.com: could not connect to host
-duerls.de: did not receive HSTS header
-duesee.org: could not connect to host
+duerls.de: could not connect to host
+dugnet.com: could not connect to host
+dugnet.io: could not connect to host
+dugnet.net: could not connect to host
+dugnet.org: could not connect to host
+dugnet.tech: could not connect to host
dujsq.com: could not connect to host
dujsq.top: could not connect to host
dukec.me: did not receive HSTS header
-dukefox.com: did not receive HSTS header
+dukefox.com: could not connect to host
duks.com.br: did not receive HSTS header
dullsir.com: did not receive HSTS header
dunashoes.com: could not connect to host
-dune.io: did not receive HSTS header
+dune.io: could not connect to host
dunea.nl: did not receive HSTS header
dung-massage.fr: did not receive HSTS header
duo.money: could not connect to host
duole30.com: could not connect to host
+duoluodeyu.com: could not connect to host
duongpho.com: did not receive HSTS header
durangoenergyllc.com: could not connect to host
dushu.cat: could not connect to host
duskopy.top: could not connect to host
+dutchessuganda.com: did not receive HSTS header
dutchrank.com: did not receive HSTS header
dutyfreeonboard.com: did not receive HSTS header
duuu.ch: could not connect to host
duyao.de: max-age too low: 86400
-dv189.com: did not receive HSTS header
dvotx.org: did not receive HSTS header
+dwellstudio.com: did not receive HSTS header
dwhd.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
dwnld.me: could not connect to host
dycem-ns.com: did not receive HSTS header
-dycoa.com: could not connect to host
+dycoa.com: did not receive HSTS header
dycontrol.de: could not connect to host
dylanscott.com.au: did not receive HSTS header
dynamic-innovations.net: could not connect to host
dynamic-networks.be: could not connect to host
dynamize.solutions: did not receive HSTS header
+dynts.pro: could not connect to host
+dzet.de: could not connect to host
+dziekonski.com: could not connect to host
dzimejl.sk: did not receive HSTS header
dzlibs.io: could not connect to host
dzsibi.com: could not connect to host
@@ -3739,6 +4075,7 @@ e-newshub.com: could not connect to host
e-pokupki.eu: did not receive HSTS header
e-rickroll-r.pw: could not connect to host
e-sa.com: did not receive HSTS header
+e-speak24.pl: did not receive HSTS header
e-vau.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
e-vo-linka.cz: did not receive HSTS header
e-wishlist.net: could not connect to host
@@ -3749,23 +4086,32 @@ e3amn2l.com: could not connect to host
e3kids.com: did not receive HSTS header
e3q.de: could not connect to host
e505.net: did not receive HSTS header
+e51888.com: did not receive HSTS header
eagle-aluminum.com: did not receive HSTS header
eagle-yard.de: could not connect to host
eagleridgecampground.com: could not connect to host
eam-gmbh.com: did not receive HSTS header
+eames-clayton.us: could not connect to host
earga.sm: could not connect to host
earlybirdsnacks.com: could not connect to host
earth-people.org: could not connect to host
earthrise16.com: could not connect to host
+earvinkayonga.com: did not receive HSTS header
+easelforart.com: could not connect to host
+easew.com: could not connect to host
+eastcoastinflatables.co.uk: did not receive HSTS header
easthokkaido-5airport.jp: did not receive HSTS header
eastmidlandsstargazers.org.uk: did not receive HSTS header
eastmontgroup.com: did not receive HSTS header
+easy-factures.fr: could not connect to host
easychiller.org: could not connect to host
easykonto.de: could not connect to host
easyplane.it: did not receive HSTS header
easysimplecrm.com: did not receive HSTS header
eat-the-world.ch: could not connect to host
eatfitoutlet.com.br: could not connect to host
+eatlowcarb.de: did not receive HSTS header
+eattherich.us: did not receive HSTS header
eatvisor.co.uk: could not connect to host
eauclairecommerce.com: could not connect to host
ebankcbt.com: could not connect to host
@@ -3786,10 +4132,10 @@ eccux.com: could not connect to host
ecfs.link: could not connect to host
ecg.fr: could not connect to host
echipstore.com: did not receive HSTS header
+echo.cc: could not connect to host
echomanchester.net: did not receive HSTS header
echoteen.com: did not receive HSTS header
eckro.com: did not receive HSTS header
-ecodigital.social: could not connect to host
ecole-en-danger.fr: could not connect to host
ecole-iaf.fr: could not connect to host
ecole-maternelle-saint-joseph.be: could not connect to host
@@ -3804,11 +4150,9 @@ ecotruck-pooling.com: did not receive HSTS header
ecrimex.net: did not receive HSTS header
ectora.com: could not connect to host
ed-matters.org: did not receive HSTS header
-edanni.io: did not receive HSTS header
edati.lv: could not connect to host
edcphenix.tk: could not connect to host
eddmixpanel.com: could not connect to host
-eddyn.net: did not receive HSTS header
edelblack.ch: could not connect to host
edelsteincosmetic.com: did not receive HSTS header
eden-mobility.co.uk: did not receive HSTS header
@@ -3816,6 +4160,7 @@ eden-noel.at: could not connect to host
edenaya.com: could not connect to host
edenmal.net: did not receive HSTS header
edenvaleplumber24-7.co.za: did not receive HSTS header
+edenvalerubbleremovals.co.za: did not receive HSTS header
edgecustomersportal.com: could not connect to host
edgereinvent.com: did not receive HSTS header
edhrealtor.com: did not receive HSTS header
@@ -3824,11 +4169,9 @@ edilservizivco.it: did not receive HSTS header
ediscomp.sk: did not receive HSTS header
edissecurity.sk: did not receive HSTS header
edition-pommern.com: did not receive HSTS header
+editoraacademiacrista.com.br: could not connect to host
edix.ru: could not connect to host
edk.com.tr: did not receive HSTS header
-edmodo.com: did not receive HSTS header
-edp-collaborative.com: could not connect to host
-edpubs.gov: could not connect to host
edsh.de: did not receive HSTS header
educaid.be: did not receive HSTS header
educatio.tech: could not connect to host
@@ -3838,6 +4181,7 @@ educnum.fr: did not receive HSTS header
educourse.ga: could not connect to host
eduif.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
eduvance.in: did not receive HSTS header
+ee-terminals.com: could not connect to host
eeb98.com: could not connect to host
eeetrust.org: could not connect to host
eenekorea.com: could not connect to host
@@ -3856,13 +4200,13 @@ eengezinswoningverkopen.nl: could not connect to host
eenhoorn.ga: could not connect to host
eesistumine2017.ee: could not connect to host
eez.ee: could not connect to host
-efa-football.com: could not connect to host
effectiveosgi.com: could not connect to host
effectivepapers.com: could not connect to host
efficienthealth.com: did not receive HSTS header
effortlesshr.com: did not receive HSTS header
eftcorp.biz: max-age too low: 0
egge.com: max-age too low: 0
+eggert.org: could not connect to host
egit.co: could not connect to host
ego-world.org: did not receive HSTS header
egupova.ru: did not receive HSTS header
@@ -3874,18 +4218,22 @@ ehrlichesbier.de: could not connect to host
ehuber.info: could not connect to host
eicfood.com: could not connect to host
eidolonhost.com: did not receive HSTS header
-eifelindex.de: did not receive HSTS header
+eidolons.org: could not connect to host
+eifelindex.de: could not connect to host
+eiga-movie.com: max-age too low: 0
+eigenbubi.de: could not connect to host
eigo.work: could not connect to host
eimanavicius.lt: did not receive HSTS header
einfachmaldiefressehalten.de: could not connect to host
einhorn.space: could not connect to host
einsatzstiefel.info: could not connect to host
-eisaev.ru: could not connect to host
+einsitapis.com: did not receive HSTS header
ejgconsultancy.co.uk: did not receive HSTS header
ejusu.com: did not receive HSTS header
ekbanden.nl: could not connect to host
ekobudisantoso.net: could not connect to host
ekong366.com: could not connect to host
+ekpyroticfrood.net: could not connect to host
eksik.com: could not connect to host
el-soul.com: did not receive HSTS header
elaintehtaat.fi: did not receive HSTS header
@@ -3895,9 +4243,8 @@ elanguest.ro: could not connect to host
elanguest.ru: could not connect to host
elaxy-online.de: could not connect to host
elblein.de: did not receive HSTS header
-eldinhadzic.com: could not connect to host
elearningpilot.com: did not receive HSTS header
-electicofficial.com: did not receive HSTS header
+electicofficial.com: could not connect to host
electricalcontrolpanels.co.uk: could not connect to host
electricant.com: did not receive HSTS header
electricant.nl: did not receive HSTS header
@@ -3905,8 +4252,10 @@ electriccitysf.com: could not connect to host
electrician-umhlanga.co.za: could not connect to host
electricianforum.co.uk: did not receive HSTS header
electricianumhlangarocks.co.za: did not receive HSTS header
+electricienasnieres.fr: could not connect to host
electricoperaduo.com: did not receive HSTS header
electromc.com: could not connect to host
+eled.io: could not connect to host
elektronring.com: could not connect to host
element-43.com: did not receive HSTS header
elementalict.com: did not receive HSTS header
@@ -3921,20 +4270,23 @@ elenorsmadness.org: could not connect to host
eleonorengland.com: did not receive HSTS header
eletesstilus.hu: could not connect to host
elevateandprosper.com: could not connect to host
+elexel.ru: could not connect to host
elgacien.de: could not connect to host
-elglobo.com.mx: max-age too low: 86400
elguillatun.cl: did not receive HSTS header
elhall.pro: did not receive HSTS header
elhall.ru: did not receive HSTS header
+elias-nicolas.com: could not connect to host
+eliasojala.me: did not receive HSTS header
elimdengelen.com: did not receive HSTS header
eliott.be: could not connect to host
-elite-porno.ru: could not connect to host
+elite-box.com: did not receive HSTS header
+elite-box.org: did not receive HSTS header
elitecovering.fr: did not receive HSTS header
elitefishtank.com: could not connect to host
elitesensual.com.br: did not receive HSTS header
+ellegaard.dk: could not connect to host
ellen-skye.de: max-age too low: 604800
elliotgluck.com: did not receive HSTS header
-elliquiy.com: could not connect to host
elmar-kraamzorg.nl: did not receive HSTS header
elna-service.com.ua: did not receive HSTS header
elnutricionista.es: could not connect to host
@@ -3948,12 +4300,12 @@ elsensohn.ch: did not receive HSTS header
elsitar.com: could not connect to host
elsword.moe: could not connect to host
eltransportquevolem.org: could not connect to host
+elyisus.info: could not connect to host
elytronsecurity.com: could not connect to host
email.lookout.com: could not connect to host
email2rss.net: could not connect to host
emanatepixels.com: could not connect to host
emanga.su: did not receive HSTS header
-emanuelemazzotta.com: did not receive HSTS header
emavok.eu: did not receive HSTS header
embellir-aroma.com: could not connect to host
embellir-kyujin.com: could not connect to host
@@ -3965,11 +4317,13 @@ emergentvisiontec.com: did not receive HSTS header
emesolutions.net: did not receive HSTS header
emiele.com.br: could not connect to host
emilyhorsman.com: could not connect to host
+emilyshepherd.me: did not receive HSTS header
eminhuseynov.com: could not connect to host
eminovic.me: could not connect to host
emjainteractive.com: did not receive HSTS header
emjimadhu.com: could not connect to host
emmable.com: could not connect to host
+emmanuelle-et-julien.ch: could not connect to host
emmdy.com: did not receive HSTS header
emmehair.com: could not connect to host
emnitech.com: could not connect to host
@@ -3985,10 +4339,12 @@ employeestore.org: did not receive HSTS header
emporiovinareal.com.br: could not connect to host
empty-r.com: could not connect to host
emptypath.com: did not receive HSTS header
+en4u.org: could not connect to host
enaia.fr: did not receive HSTS header
+encadrer-mon-enfant.com: did not receive HSTS header
encode.space: could not connect to host
encode.uk.com: did not receive HSTS header
-encoder.pw: max-age too low: 0
+encoder.pw: could not connect to host
encontrebarato.com.br: did not receive HSTS header
encrypted.google.com: did not receive HSTS header (error ignored - included regardless)
encryptedaudience.com: could not connect to host
@@ -4007,20 +4363,21 @@ endspamwith.us: could not connect to host
enecoshop.nl: did not receive HSTS header
enefan.jp: could not connect to host
enginsight.com: did not receive HSTS header
-enginx.cn: could not connect to host
englerts.de: did not receive HSTS header
+englishdirectory.de: could not connect to host
englishyamal.ru: did not receive HSTS header
enigmacpt.com: did not receive HSTS header
enigmail.net: did not receive HSTS header
+enixgaming.com: could not connect to host
enjen.net: did not receive HSTS header
enjoymayfield.com: max-age too low: 0
+enjoystudio.ro: did not receive HSTS header
enoou.com: could not connect to host
enpalmademallorca.info: did not receive HSTS header
ensemble-vos-idees.fr: could not connect to host
-enskat.de: could not connect to host
-enskatson-sippe.de: could not connect to host
entaurus.com: could not connect to host
enteente.club: could not connect to host
+enteente.com: could not connect to host
enteente.space: could not connect to host
enteente.xyz: could not connect to host
entercenter.ru: could not connect to host
@@ -4033,24 +4390,28 @@ entrepreneur.or.id: could not connect to host
enum.eu.org: could not connect to host
enumify.com: could not connect to host
envelope.co.nz: could not connect to host
+enviam.de: did not receive HSTS header
enviapresentes.com.br: could not connect to host
enviatufoto.com: max-age too low: 604800
+environment.ai: could not connect to host
envygeeks.com: could not connect to host
eol34.com: could not connect to host
eoldb.org: could not connect to host
eolme.ml: could not connect to host
epanurse.com: could not connect to host
+epaygateway.net: could not connect to host
+ephe.be: could not connect to host
ephry.com: could not connect to host
-epichouse.net: did not receive HSTS header
epicmc.games: could not connect to host
epitesz.co: did not receive HSTS header
eposcloud.net: could not connect to host
epoxate.com: could not connect to host
eprofitacademy.com: did not receive HSTS header
-epublibre.org: could not connect to host
+epsilon.dk: could not connect to host
eq8.net.au: could not connect to host
eqib.nl: did not receive HSTS header
eqim.me: could not connect to host
+eqorg.com: could not connect to host
equalparts.eu: could not connect to host
equate.net.au: did not receive HSTS header
equatetechnologies.com.au: did not receive HSTS header
@@ -4064,37 +4425,50 @@ erawanarifnugroho.com: did not receive HSTS header
erclab.kr: could not connect to host
erepublik-deutschland.de: did not receive HSTS header
eressea.xyz: could not connect to host
-ergorium.com: max-age too low: 0
-ergorium.eu: max-age too low: 0
ericbond.net: could not connect to host
erichalv.com: could not connect to host
+ericloud.tk: could not connect to host
ericorporation.com: did not receive HSTS header
ericyl.com: did not receive HSTS header
eriel.com.br: could not connect to host
+erinlin.com: did not receive HSTS header
eriser.fr: did not receive HSTS header
ernaehrungsberatung-rapperswil.ch: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
ernaehrungsberatung-zurich.ch: could not connect to host
ernesto.at: could not connect to host
+eroimatome.com: could not connect to host
eromixx.com: could not connect to host
erotalia.es: could not connect to host
erotic4me.ch: did not receive HSTS header
eroticforce.com: could not connect to host
erotische-aanbiedingen.nl: could not connect to host
-erotpo.cz: could not connect to host
errolz.com: did not receive HSTS header
errors.zenpayroll.com: could not connect to host
erspro.net: could not connect to host
eru.me: did not receive HSTS header
erwinvanlonden.net: did not receive HSTS header
+es8888.net: could not connect to host
es888999.com: could not connect to host
esaborit.ddns.net: could not connect to host
esafar.cz: did not receive HSTS header
+esb111.com: could not connect to host
+esb111.net: could not connect to host
+esb112.com: could not connect to host
+esb112.net: could not connect to host
esb16888.com: could not connect to host
+esb17888.com: could not connect to host
+esb222.net: could not connect to host
+esb555.com: could not connect to host
+esb666.com: could not connect to host
+esb666.net: could not connect to host
+esb66666.com: could not connect to host
+esb688.com: could not connect to host
esb68888.com: could not connect to host
esb777.cc: could not connect to host
esb777.com: could not connect to host
esb777.net: could not connect to host
esb777.us: could not connect to host
+esb9588.info: did not receive HSTS header
esb999.biz: could not connect to host
esb999.com: could not connect to host
esb999.info: could not connect to host
@@ -4103,19 +4477,23 @@ esba11.cc: could not connect to host
esba11.net: could not connect to host
esba11.us: could not connect to host
esball.in: could not connect to host
+esball888.com: could not connect to host
+esball888.net: could not connect to host
esbuilders.co.nz: did not receive HSTS header
escalate.eu: could not connect to host
escapees.com: did not receive HSTS header
escolaengenharia.com.br: did not receive HSTS header
escort-fashion.com: could not connect to host
+escortdisplay.com: could not connect to host
escortshotsexy.com: max-age too low: 2592000
-escotour.com: could not connect to host
+escotour.com: did not receive HSTS header
escueladewordpress.com: did not receive HSTS header
esec.rs: did not receive HSTS header
eseth.de: did not receive HSTS header
esh.ink: could not connect to host
-eshepperd.com: could not connect to host
+esibun.net: could not connect to host
esko.bar: could not connect to host
+eskriett.com: could not connect to host
esln.org: did not receive HSTS header
esn-ypci.com: did not receive HSTS header
esocweb.com: could not connect to host
@@ -4127,24 +4505,29 @@ espacemontmorency.com: did not receive HSTS header
especificosba.com.mx: could not connect to host
espo.com.ua: did not receive HSTS header
espra.com: could not connect to host
-espressivo.com.br: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+espressivo.com.br: did not receive HSTS header
+esprit-cloture.fr: did not receive HSTS header
esquonic.com: could not connect to host
esrs.gov: could not connect to host
essayforum.com: could not connect to host
essaylib.com: could not connect to host
essayscam.org: could not connect to host
+essayshark.com: could not connect to host
+essenceofvitalitydetox.com: could not connect to host
essential12.com: could not connect to host
essentialoilsimports.com: could not connect to host
+essentiel-physique.com: could not connect to host
essenzialeenxovais.com.br: could not connect to host
esseriumani.com: could not connect to host
essexghosthunters.co.uk: did not receive HSTS header
essplusmed.org: could not connect to host
+essteebee.ch: could not connect to host
estaciona.guru: could not connect to host
estebanborges.com: did not receive HSTS header
estespr.com: did not receive HSTS header
estilosapeca.com: could not connect to host
estland.guide: could not connect to host
-esw06.com: did not receive HSTS header
+estoqueinformatica.com.br: could not connect to host
et-buchholz.de: could not connect to host
et180.com: could not connect to host
etangs-magazine.com: could not connect to host
@@ -4155,8 +4538,8 @@ etenendrinken.nu: could not connect to host
eternalsymbols.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
eternitylove.us: could not connect to host
eth9.net: could not connect to host
-etha.nz: did not receive HSTS header
ethanfaust.com: did not receive HSTS header
+ethanlew.is: could not connect to host
ethantskinner.com: did not receive HSTS header
ether.school: could not connect to host
etheria-software.tk: did not receive HSTS header
@@ -4172,13 +4555,14 @@ etoto.pl: did not receive HSTS header
etproxy.tech: could not connect to host
ets2mp.de: did not receive HSTS header
etsysecure.com: could not connect to host
-ettebiz.com: did not receive HSTS header
+ettebiz.com: max-age too low: 0
etula.ga: could not connect to host
etula.me: could not connect to host
etys.no: did not receive HSTS header
euanbaines.com: did not receive HSTS header
-eucl3d.com: did not receive HSTS header
+eucl3d.com: could not connect to host
euclideanpostulates.xyz: could not connect to host
+eucollegetours.com: could not connect to host
euexia.fr: could not connect to host
eugeneyan.com: could not connect to host
eujuicers.com.tr: could not connect to host
@@ -4190,12 +4574,12 @@ euph.eu: could not connect to host
eupho.me: could not connect to host
eupresidency2018.com: did not receive HSTS header
euren.se: could not connect to host
+euroapo.org: max-age too low: 3600
eurocamping.se: could not connect to host
-europeancupinline.eu: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+euroescortguide.com: could not connect to host
euroshop24.net: could not connect to host
eurospecautowerks.com: did not receive HSTS header
eurostrategy.vn.ua: could not connect to host
-evafojtova.cz: did not receive HSTS header
evanhandgraaf.nl: did not receive HSTS header
evankurniawan.com: did not receive HSTS header
evasion-energie.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
@@ -4206,6 +4590,7 @@ evedanjailbreak.com: could not connect to host
evegalaxy.net: did not receive HSTS header
event64.ru: did not receive HSTS header
eventmake.es: could not connect to host
+eventplace.me: did not receive HSTS header
events12.com: did not receive HSTS header
eventsafrica.net: did not receive HSTS header
everyarti.st: could not connect to host
@@ -4214,16 +4599,17 @@ everydaytherich.com: max-age too low: 7776000
everygayporn.com: could not connect to host
everygayporn.xyz: could not connect to host
everylab.org: could not connect to host
+everymove.org: could not connect to host
everything.place: did not receive HSTS header
everytruckjob.com: did not receive HSTS header
eveseat.net: could not connect to host
eveshaiwu.com: could not connect to host
evi.be: did not receive HSTS header
-evileden.com: could not connect to host
evilnerd.de: did not receive HSTS header
+evilness.nl: could not connect to host
evilsay.com: could not connect to host
evin.ml: could not connect to host
-evio.com: could not connect to host
+evio.com: did not receive HSTS header
evites.me: could not connect to host
evoludis.net: did not receive HSTS header
evolutionexpeditions.com: did not receive HSTS header
@@ -4234,39 +4620,39 @@ ewallet-optimizer.com: did not receive HSTS header
ewex.org: could not connect to host
eworksmedia.com: could not connect to host
exampleessays.com: could not connect to host
-examsmate.in: did not receive HSTS header
excelgum.ca: did not receive HSTS header
-exceltobarcode.com: could not connect to host
exceptionalbits.com: did not receive HSTS header
exceptionalservers.com: did not receive HSTS header
exceptionalservices.us: could not connect to host
+exchangecoordinator.com: could not connect to host
+execution.biz.tr: could not connect to host
exembit.com: did not receive HSTS header
exfiles.cz: did not receive HSTS header
-exgaywatch.com: could not connect to host
exgravitus.com: could not connect to host
exno.co: could not connect to host
-exo.do: max-age too low: 0
-exoscale.ch: did not receive HSTS header
-exoticads.com: could not connect to host
+exo.do: could not connect to host
exousiakaidunamis.xyz: could not connect to host
expanddigital.media: did not receive HSTS header
expatads.com: could not connect to host
+expatriate.pl: did not receive HSTS header
experticon.com: did not receive HSTS header
-expertmile.com: could not connect to host
+expertmile.com: did not receive HSTS header
explodie.org: could not connect to host
+explodingcamera.com: did not receive HSTS header
exploit-db.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
exploit.cz: did not receive HSTS header
-expo-designers.com: did not receive HSTS header
+expo-designers.com: could not connect to host
expoort.com.br: could not connect to host
expoundite.net: could not connect to host
expowerhps.com: did not receive HSTS header
expressfinance.co.za: did not receive HSTS header
+extensibility.biz.tr: could not connect to host
exteriorservices.io: could not connect to host
extramoney.cash: did not receive HSTS header
extrathemeshowcase.net: could not connect to host
-extratorrent.cool: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+extratorrent.cool: did not receive HSTS header
extratorrent.fyi: could not connect to host
-extratorrent.red: max-age too low: 0
+extratorrent.red: could not connect to host
extratorrent.world: could not connect to host
extratorrentlive.xyz: could not connect to host
extratorrents.tech: could not connect to host
@@ -4282,6 +4668,7 @@ eytosh.net: could not connect to host
ez.fi: could not connect to host
ezimoeko.net: could not connect to host
ezmod.org: could not connect to host
+ezorgportaal.nl: could not connect to host
ezrefurb.co.uk: did not receive HSTS header
eztv.ch: did not receive HSTS header
f-rickroll-g.pw: could not connect to host
@@ -4293,17 +4680,16 @@ f42.net: could not connect to host
f8842.com: could not connect to host
f9digital.com: did not receive HSTS header
faber.io: could not connect to host
+faberusa.com: did not receive HSTS header
fabhub.io: could not connect to host
fabian-kluge.de: could not connect to host
fabianfischer.de: did not receive HSTS header
fabianmunoz.com: did not receive HSTS header
fabienbaker.com: could not connect to host
-fabled.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+fabled.com: did not receive HSTS header
fabriko.fr: did not receive HSTS header
-fabse.net: could not connect to host
fabulouslyyouthfulskin.com: could not connect to host
fabulouslyyouthfulskineyeserum.com: could not connect to host
-facebattle.com: could not connect to host
facebook.ax: could not connect to host
facebooktsukaikata.net: did not receive HSTS header
facesnf.com: could not connect to host
@@ -4312,7 +4698,7 @@ facilitrak.com: could not connect to host
factorable.net: did not receive HSTS header
factorygw.com: did not receive HSTS header
factorypartsdirect.com: could not connect to host
-factureenlinea.com: could not connect to host
+factureenlinea.com: did not receive HSTS header
fadednet.com: could not connect to host
fadilus.com: did not receive HSTS header
fads-center.online: could not connect to host
@@ -4327,8 +4713,6 @@ faircom.co.za: did not receive HSTS header
fairkey.dk: did not receive HSTS header
fairlyoddtreasures.com: did not receive HSTS header
faisalshuvo.com: did not receive HSTS header
-faithindemocracy.eu: did not receive HSTS header
-faithwatch.org: could not connect to host
faizan.net: did not receive HSTS header
faizan.xyz: did not receive HSTS header
fakeletters.org: did not receive HSTS header
@@ -4340,10 +4724,8 @@ falkp.no: did not receive HSTS header
falkus.net: could not connect to host
fallenangeldrinks.eu: could not connect to host
fallenangelspirits.uk: could not connect to host
-fallenmystic.com: did not receive HSTS header
fallingapart.de: could not connect to host
faluninfo.ba: did not receive HSTS header
-fam-weyer.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
fame-agency.net: could not connect to host
famep.gov: could not connect to host
famer.me: could not connect to host
@@ -4353,13 +4735,15 @@ familie-sprink.de: could not connect to host
familie-zimmermann.at: could not connect to host
famio.cn: did not receive HSTS header
fan.gov: could not connect to host
-fanflow.com: could not connect to host
+fanflow.com: did not receive HSTS header
+fansmade.art: did not receive HSTS header
fant.dk: did not receive HSTS header
fantasticgardenersmelbourne.com.au: did not receive HSTS header
fantasticpestcontrolmelbourne.com.au: did not receive HSTS header
fantasyfootballpundit.com: did not receive HSTS header
fanyl.cn: could not connect to host
faq.lookout.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+faradji.nu: could not connect to host
faraonplay5.com: could not connect to host
faraonplay7.com: could not connect to host
faraonplay8.com: could not connect to host
@@ -4368,10 +4752,11 @@ farces.com: could not connect to host
faretravel.co.uk: could not connect to host
farkas.bz: did not receive HSTS header
farm24.co.uk: could not connect to host
+farmacia-discreto.com: did not receive HSTS header
farmacia.pt: did not receive HSTS header
farmaciaformula.com.br: could not connect to host
farmaciamedicom.com.br: could not connect to host
-farsil.eu: could not connect to host
+fascia.fit: max-age too low: 2592000
fashion.net: did not receive HSTS header
fashioncare.cz: did not receive HSTS header
fashionholic.my: did not receive HSTS header
@@ -4382,7 +4767,6 @@ fastbackmbg.be: could not connect to host
fastbackmbm.be: could not connect to host
fastcomcorp.com: did not receive HSTS header
fastcomcorp.net: did not receive HSTS header
-fastlike.co: could not connect to host
fastograph.com: could not connect to host
fastopen.ml: could not connect to host
fastworx.com: did not receive HSTS header
@@ -4397,22 +4781,26 @@ favorit.club: did not receive HSTS header
fawkex.me: could not connect to host
faxreader.net: could not connect to host
fayolle.info: did not receive HSTS header
+fbook.top: could not connect to host
fbox.li: could not connect to host
fcapartsdb.com: could not connect to host
+fcp.cn: could not connect to host
fdj.im: could not connect to host
fdt.name: did not receive HSTS header
feard.space: could not connect to host
+fed51.com: did not receive HSTS header
fedbizopps.gov: could not connect to host
fedemo.top: did not receive HSTS header
federalregister.gov: did not receive HSTS header
fedn.it: could not connect to host
fedo.moe: could not connect to host
-fedpartnership.gov: could not connect to host
feedstringer.com: could not connect to host
feedthebot.com: did not receive HSTS header
+feelmom.com: could not connect to host
fefore.com: did not receive HSTS header
fegans.org.uk: did not receive HSTS header
feirlane.org: could not connect to host
+feist.io: could not connect to host
feitobrasilcosmeticos.com.br: did not receive HSTS header
felger-times.fr: could not connect to host
felicifia.org: could not connect to host
@@ -4421,6 +4809,8 @@ felixrr.pro: could not connect to host
femaledom.xyz: could not connect to host
feminists.co: could not connect to host
fengyadi.com: could not connect to host
+fengyi.tel: did not receive HSTS header
+fenixhost.com.br: could not connect to host
fenno.net: could not connect to host
fensdorf.de: did not receive HSTS header
fensterbau-mutscheller.de: could not connect to host
@@ -4430,31 +4820,32 @@ feras-alhajjaji.com: could not connect to host
feriahuamantla.com: could not connect to host
ferienwohnungen-lastminute.de: could not connect to host
fermanacuratampaparts.com: could not connect to host
-fernangp.com: did not receive HSTS header
+fernangp.com: could not connect to host
fernseher-kauf.de: could not connect to host
ferrolatino.com: could not connect to host
feschiyan.com: could not connect to host
festember.com: did not receive HSTS header
festival.house: did not receive HSTS header
festrip.com: could not connect to host
-fetch.co.uk: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+fetch.co.uk: did not receive HSTS header
fetclips.se: could not connect to host
fetlife.com: could not connect to host
fettbrot.tk: did not receive HSTS header
feudaltactics.com: could not connect to host
feuerwehr-dachaufsetzer.de: could not connect to host
fexmen.com: could not connect to host
-ffb.gov: did not receive HSTS header
ffh.me: could not connect to host
ffl123.com: did not receive HSTS header
fgequipamentos.com.br: did not receive HSTS header
fhsseniormens.club: could not connect to host
fi-sanki.co.jp: did not receive HSTS header
+fibrasynormasdecolombia.com: did not receive HSTS header
ficklenote.net: could not connect to host
fics-twosigma.com: could not connect to host
fid.to: could not connect to host
fidel.uk: did not receive HSTS header
fideleslaici.com: did not receive HSTS header
+fieldclockapp.com: did not receive HSTS header
fieldtalk.co.uk: could not connect to host
fiendishmasterplan.com: did not receive HSTS header
fierman.eu: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
@@ -4467,25 +4858,23 @@ fig.ms: could not connect to host
fightr.co: could not connect to host
figura.im: did not receive HSTS header
figuurzagers.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-fijnefeestdageneneengelukkignieuwjaar.nl: did not receive HSTS header
fiksel.info: could not connect to host
fikt.space: could not connect to host
-filebox.moe: could not connect to host
-filebox.space: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+filebox.space: did not receive HSTS header
filedir.com: did not receive HSTS header
fileio.io: could not connect to host
-filemeal.com: max-age too low: 0
+fileon.com: could not connect to host
filesense.com: could not connect to host
+filewall.de: could not connect to host
filey.co.uk: did not receive HSTS header
-filezilla.cn: could not connect to host
filhomes.ph: could not connect to host
+fillitupchallenge.eu: did not receive HSTS header
fillmysuitca.se: did not receive HSTS header
-filmatiporno.xxx: could not connect to host
filme-online.eu.com: did not receive HSTS header
filmesubtitrate2017.online: could not connect to host
filo.xyz: did not receive HSTS header
filoitoupediou.gr: did not receive HSTS header
-finalgear.com: did not receive HSTS header
+finalgear.com: could not connect to host
finalvpn.com: could not connect to host
financier.io: did not receive HSTS header
financieringsportaal.nl: did not receive HSTS header
@@ -4500,14 +4889,12 @@ finer04.pw: did not receive HSTS header
finewineonline.com: could not connect to host
fingent.com: did not receive HSTS header
fingerscrossed.style: could not connect to host
-finisron.in: did not receive HSTS header
finiteheap.com: did not receive HSTS header
finn.io: did not receive HSTS header
-finpt.com: did not receive HSTS header
finstererlebnis.de: could not connect to host
finsterlebnis.de: did not receive HSTS header
fiodental.com.br: did not receive HSTS header
-fiork.com: could not connect to host
+fiork.com: did not receive HSTS header
fire-wolf.com: could not connect to host
fireandelectrical.co.uk: did not receive HSTS header
firebaseio-demo.com: could not connect to host
@@ -4519,6 +4906,7 @@ fireinthedeep.com: could not connect to host
firemail.io: could not connect to host
firenza.org: did not receive HSTS header
fireorbit.de: did not receive HSTS header
+firepeak.ru: could not connect to host
fireworkcoaching.com: did not receive HSTS header
firexarxa.de: could not connect to host
firmenverzeichnis.nu: could not connect to host
@@ -4527,7 +4915,10 @@ firstchoicepool.com: did not receive HSTS header
firstdogonthemoon.com.au: did not receive HSTS header
firstforex.co.uk: did not receive HSTS header
firstlook.org: did not receive HSTS header
+fischers.it: could not connect to host
+fischers.srv.br: could not connect to host
fiscoeconti.it: did not receive HSTS header
+fishfinders.info: did not receive HSTS header
fiskestang.com: did not receive HSTS header
fit4medien.de: did not receive HSTS header
fitbylo.com: could not connect to host
@@ -4545,13 +4936,15 @@ fiws.net: did not receive HSTS header
fix-the-timeline.com: could not connect to host
fix-the-timeline.org: could not connect to host
fixate.ru: max-age too low: 3153600
+fixeaide.com: did not receive HSTS header
+fixeaider.com: did not receive HSTS header
fixico-staging.nl: could not connect to host
fixingdns.com: could not connect to host
fixmyglitch.com: could not connect to host
fixtectools.co.za: could not connect to host
fixthetimeline.com: could not connect to host
fixthetimeline.org: could not connect to host
-fjruiz.es: did not receive HSTS header
+fjruiz.es: could not connect to host
fkcovering.be: could not connect to host
fl0000.com: max-age too low: 129600
fl010.com: max-age too low: 129600
@@ -4571,9 +4964,9 @@ flajshans.cz: did not receive HSTS header
flam.io: could not connect to host
flamewall.net: could not connect to host
flamingcow.tv: could not connect to host
-flamingkeys.com: did not receive HSTS header
flamingkeys.com.au: could not connect to host
flareon.net: could not connect to host
+flaretechnologies.io: could not connect to host
flashbaggie.com: could not connect to host
flatbellyreview.com: max-age too low: 2592000
flawcheck.com: could not connect to host
@@ -4581,15 +4974,14 @@ flc111.com: did not receive HSTS header
flc999.com: max-age too low: 129600
flemingtonaudiparts.com: could not connect to host
fleursdesoleil.fr: did not receive HSTS header
-fleuryfleury.com: did not receive HSTS header
flexdrukker.nl: could not connect to host
flexinvesting.fi: could not connect to host
fliexer.com: could not connect to host
+flightschoolusa.com: did not receive HSTS header
flipagram.com: did not receive HSTS header
flipbell.com: did not receive HSTS header
flipkey.com: did not receive HSTS header
flirchi.com: could not connect to host
-flirtycourts.com: did not receive HSTS header
flixtor.net: could not connect to host
floless.co.uk: did not receive HSTS header
flomeyer.de: could not connect to host
@@ -4599,10 +4991,10 @@ florafiora.com.br: did not receive HSTS header
florian-lillpopp.de: max-age too low: 10
florian-schlachter.de: did not receive HSTS header
florianlillpopp.de: max-age too low: 10
-floriantanner.ch: could not connect to host
-florida-prep.org: max-age too low: 0
+floridaderi.ru: did not receive HSTS header
floridaescapes.co.uk: did not receive HSTS header
florinapp.com: could not connect to host
+florispoort.nl: did not receive HSTS header
floro.me: did not receive HSTS header
floth.at: could not connect to host
flouartistique.ch: could not connect to host
@@ -4628,21 +5020,20 @@ flyspace.ga: did not receive HSTS header
flyss.net: could not connect to host
fm83.nl: could not connect to host
fm992.com: could not connect to host
-fmovies.life: max-age too low: 0
+fmovies.life: could not connect to host
+fnfpt.co.uk: could not connect to host
fniephaus.com: did not receive HSTS header
-fnncat.com: did not receive HSTS header
+fnncat.com: could not connect to host
fnvsecurity.com: could not connect to host
fobc-usa.org: did not receive HSTS header
focalforest.com: could not connect to host
foerster-kunststoff.de: did not receive HSTS header
fognini-depablo.eu: could not connect to host
fohome.ca: could not connect to host
-fojtova.cz: did not receive HSTS header
-fojtovi.cz: did not receive HSTS header
fokan.ch: did not receive HSTS header
foliekonsulenten.dk: did not receive HSTS header
folioapp.io: did not receive HSTS header
-fondy.ru: did not receive HSTS header
+fondanastasia.ru: could not connect to host
foneo.com: could not connect to host
fonetiq.io: could not connect to host
fonseguin.ca: did not receive HSTS header
@@ -4650,12 +5041,13 @@ fontawesome.com: did not receive HSTS header
foo: could not connect to host
food4health.guide: could not connect to host
foodbuddy.ch: could not connect to host
+foodev.de: could not connect to host
foodiebox.no: did not receive HSTS header
foodies.my: did not receive HSTS header
foodievenues.com: could not connect to host
foodplantengineering.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
foodsafetyworkinggroup.gov: could not connect to host
-foodsouvenirs.it: did not receive HSTS header
+foodserve.in: did not receive HSTS header
footballmapped.com: could not connect to host
footlegende.fr: did not receive HSTS header
forafifty.co.za: could not connect to host
@@ -4664,17 +5056,18 @@ forbid.life: could not connect to host
forbiddenhistory.info: could not connect to host
forbook.net: did not receive HSTS header
forcamp.ga: could not connect to host
-force-des-maths.com: could not connect to host
+force-des-maths.com: did not receive HSTS header
fordbydesign.com: could not connect to host
fordshop.by: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
foreignexchangeresource.com: did not receive HSTS header
forestfinance.fr: did not receive HSTS header
foreveralone.io: could not connect to host
foreveryoung.pt: did not receive HSTS header
-forewordreviews.com: did not receive HSTS header
forex-dan.com: did not receive HSTS header
forgix.com: could not connect to host
forlagetmarx.dk: did not receive HSTS header
+formadmin.com: could not connect to host
+formaliteo.com: could not connect to host
formazioneopen.it: could not connect to host
formersessalaries.com: did not receive HSTS header
formula.cf: could not connect to host
@@ -4687,8 +5080,11 @@ fortuna-s.com: [Exception... "Component returned failure code: 0x80004005 (NS_ER
fortworth.ch: did not receive HSTS header
forty-two.nl: did not receive HSTS header
forty2.eu: did not receive HSTS header
+forum.linode.com: did not receive HSTS header
+forumjuridico.org: did not receive HSTS header
forus.be: could not connect to host
foryoucosmeticos.com.br: could not connect to host
+foshanshequ.com: could not connect to host
fossewayflowers.co.uk: could not connect to host
fossewayflowers.com: could not connect to host
fossewaygardencentre.co.uk: did not receive HSTS header
@@ -4699,10 +5095,8 @@ fotocerita.net: could not connect to host
fotogiraffe.ru: did not receive HSTS header
fotografosexpertos.com: did not receive HSTS header
fotopasja.info: could not connect to host
-fotostravestisbr.com: could not connect to host
fourchin.net: could not connect to host
fourwheelpartloanssimple.com: did not receive HSTS header
-fowlsmurf.net: did not receive HSTS header
foxdev.io: did not receive HSTS header
foxelbox.com: did not receive HSTS header
foxes.no: could not connect to host
@@ -4717,6 +5111,7 @@ fr33d0m.link: could not connect to host
fragilesolar.cf: could not connect to host
fragnic.com: did not receive HSTS header
fralef.me: did not receive HSTS header
+francesca-and-lucas.com: did not receive HSTS header
francevpn.xyz: could not connect to host
francois-vidit.com: did not receive HSTS header
frangor.info: did not receive HSTS header
@@ -4728,17 +5123,83 @@ franzt.ovh: could not connect to host
frasesaniversarios.com.br: did not receive HSTS header
frasesdeamizade.pt: could not connect to host
frasys.cloud: max-age too low: 2592000
-frasys.io: did not receive HSTS header
+frasys.io: could not connect to host
fraudempire.com: could not connect to host
+freakyamazing.com: could not connect to host
+freakyaweso.me: could not connect to host
+freakyawesome.band: could not connect to host
freakyawesome.blog: could not connect to host
-freakyawesome.io: max-age too low: 86400
+freakyawesome.ca: could not connect to host
+freakyawesome.club: could not connect to host
+freakyawesome.co: could not connect to host
+freakyawesome.co.uk: could not connect to host
+freakyawesome.com: could not connect to host
+freakyawesome.company: could not connect to host
+freakyawesome.email: could not connect to host
+freakyawesome.events: could not connect to host
+freakyawesome.fashion: could not connect to host
+freakyawesome.fitness: could not connect to host
+freakyawesome.fm: could not connect to host
+freakyawesome.fun: could not connect to host
+freakyawesome.fyi: could not connect to host
+freakyawesome.games: could not connect to host
+freakyawesome.guide: could not connect to host
+freakyawesome.guru: could not connect to host
+freakyawesome.in: could not connect to host
+freakyawesome.info: could not connect to host
+freakyawesome.io: could not connect to host
+freakyawesome.life: could not connect to host
+freakyawesome.live: could not connect to host
+freakyawesome.marketing: could not connect to host
+freakyawesome.me: could not connect to host
+freakyawesome.media: could not connect to host
freakyawesome.net: could not connect to host
+freakyawesome.network: could not connect to host
+freakyawesome.news: could not connect to host
+freakyawesome.online: could not connect to host
+freakyawesome.org: could not connect to host
+freakyawesome.photography: could not connect to host
+freakyawesome.photos: could not connect to host
+freakyawesome.press: could not connect to host
+freakyawesome.recipes: could not connect to host
+freakyawesome.rentals: could not connect to host
+freakyawesome.reviews: could not connect to host
+freakyawesome.services: could not connect to host
+freakyawesome.shop: could not connect to host
+freakyawesome.site: could not connect to host
+freakyawesome.social: could not connect to host
+freakyawesome.software: could not connect to host
+freakyawesome.solutions: could not connect to host
+freakyawesome.store: could not connect to host
+freakyawesome.team: could not connect to host
+freakyawesome.tips: could not connect to host
+freakyawesome.today: could not connect to host
+freakyawesome.tours: could not connect to host
+freakyawesome.tv: could not connect to host
+freakyawesome.video: could not connect to host
+freakyawesome.website: could not connect to host
+freakyawesome.work: could not connect to host
+freakyawesome.world: could not connect to host
+freakyawesome.xyz: could not connect to host
+freakyawesomeblog.com: could not connect to host
+freakyawesomeio.com: could not connect to host
+freakyawesomemedia.com: could not connect to host
+freakyawesomenews.com: could not connect to host
+freakyawesomeplugin.com: could not connect to host
+freakyawesomeplugins.com: could not connect to host
+freakyawesomesite.com: could not connect to host
+freakyawesometeam.com: could not connect to host
+freakyawesometheme.com: could not connect to host
+freakyawesomethemes.com: could not connect to host
+freakyawesomewp.com: could not connect to host
freddythechick.uk: did not receive HSTS header
fredliang.cn: could not connect to host
+fredtec.ru: could not connect to host
free8.xyz: could not connect to host
freeasinlliure.org: did not receive HSTS header
freeassangenow.org: could not connect to host
freeben666.fr: could not connect to host
+freebookmakerbets.com.au: did not receive HSTS header
freebus.org: could not connect to host
freedomrealtyoftexas.com: did not receive HSTS header
freedomvote.nl: could not connect to host
@@ -4749,14 +5210,13 @@ freekdevries.nl: did not receive HSTS header
freelanced.co.za: could not connect to host
freelandinnovation.com: did not receive HSTS header
freelansir.com: could not connect to host
-freelo.cz: did not receive HSTS header
freemanning.de: could not connect to host
freematthale.net: did not receive HSTS header
freeslots.guru: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
freesoftwaredriver.com: could not connect to host
freesounding.com: did not receive HSTS header
freesounding.ru: did not receive HSTS header
-freespace.info: could not connect to host
+freesourcestl.org: did not receive HSTS header
freethought.org.au: could not connect to host
freeutopia.org: did not receive HSTS header
freqlabs.com: did not receive HSTS header
@@ -4774,9 +5234,9 @@ friendlyfiregameshow.com: could not connect to host
frimons.com: max-age too low: 7889238
fringeintravel.com: did not receive HSTS header
frodriguez.xyz: could not connect to host
+froehlich.it: did not receive HSTS header
froggstack.de: could not connect to host
frolov.net: could not connect to host
-from-the-net.com: could not connect to host
fromix.de: could not connect to host
fromlemaytoz.com: could not connect to host
front-end.dog: could not connect to host
@@ -4787,16 +5247,12 @@ frontmin.com: did not receive HSTS header
frost-ci.xyz: could not connect to host
frostbytes.net: did not receive HSTS header
frosty-gaming.xyz: could not connect to host
-froxlor.support: max-age too low: 0
frp-roleplay.de: could not connect to host
-frprn.com: could not connect to host
-frprn.xxx: could not connect to host
frsis2017.com: could not connect to host
fruitusers.com: could not connect to host
frumious.fyi: could not connect to host
frusky.net: could not connect to host
fs-gamenet.de: could not connect to host
-fsapubs.gov: could not connect to host
fsf.moe: did not receive HSTS header
fsfi.is: could not connect to host
fsinf.at: did not receive HSTS header
@@ -4814,6 +5270,7 @@ fuchsy.com: could not connect to host
fuckbilibili.com: could not connect to host
fuckcf.cf: could not connect to host
fuckgfw233.org: could not connect to host
+fuckobr.ru: could not connect to host
fudanshi.org: could not connect to host
fuelministry.com: did not receive HSTS header
fugle.de: could not connect to host
@@ -4830,9 +5287,11 @@ fumiware.com: could not connect to host
fun9.cc: could not connect to host
fun99.cc: could not connect to host
funarena.com.ua: did not receive HSTS header
+fundacionfranciscofiasco.org: could not connect to host
fundacionhijosdelsol.org: could not connect to host
-fundayltd.com: could not connect to host
+funderburg.me: did not receive HSTS header
fungame.eu: did not receive HSTS header
+funi4u.com: could not connect to host
funideas.org: could not connect to host
funkes-ferien.de: did not receive HSTS header
funkner.ru: could not connect to host
@@ -4848,33 +5307,33 @@ furiffic.com: did not receive HSTS header
furnation.com: could not connect to host
furnishedproperty.com.au: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
furry.be: did not receive HSTS header
-furtivelook.com: could not connect to host
-fusa-miyamoto.jp: could not connect to host
+furtivelook.com: did not receive HSTS header
fusedrops.com: did not receive HSTS header
fusionmate.com: could not connect to host
-fuskator.com: could not connect to host
futbol11.com: did not receive HSTS header
futbolvivo.tv: did not receive HSTS header
futos.de: could not connect to host
+futurefire.de: could not connect to host
futuresonline.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
futurestarsusa.org: did not receive HSTS header
futuretechnologi.es: could not connect to host
futureyouhealth.com: did not receive HSTS header
futuristarchitecture.com: did not receive HSTS header
fuvpn.com: could not connect to host
+fuxwerk.de: could not connect to host
fuzoku-sodan.com: could not connect to host
-fuzoku.jp: could not connect to host
fwei.tk: did not receive HSTS header
fws.gov: did not receive HSTS header
fxgame.online: could not connect to host
fxpig-ib.com: could not connect to host
fxwebstudio.com.au: max-age too low: 0
-fyfywka.com: max-age too low: 86400
+fyfywka.com: could not connect to host
fyodorpi.com: did not receive HSTS header
fyol.pw: could not connect to host
+fyol.xyz: did not receive HSTS header
fysiohaenraets.nl: did not receive HSTS header
fzn.io: did not receive HSTS header
-fzslm.me: could not connect to host
+fzslm.me: did not receive HSTS header
g-i-s.vn: did not receive HSTS header
g-rickroll-o.pw: could not connect to host
g01.in.ua: could not connect to host
@@ -4887,8 +5346,9 @@ g5led.nl: could not connect to host
g77.ca: could not connect to host
gaasuper6.com: could not connect to host
gabber.scot: could not connect to host
+gabethebabetv.com: could not connect to host
gabi.com.es: could not connect to host
-gabi.soy: did not receive HSTS header
+gabi.soy: could not connect to host
gabi.uno: could not connect to host
gablaxian.com: max-age too low: 2592000
gabriele-kluge.de: could not connect to host
@@ -4896,8 +5356,8 @@ gaelleetarnaud.com: did not receive HSTS header
gafachi.com: could not connect to host
gaichanh.com: did not receive HSTS header
gainesvillegoneaustin.org: did not receive HSTS header
+gaiserik.com: could not connect to host
gaite.me: did not receive HSTS header
-gajas18.com: could not connect to host
gakkainavi4.com: could not connect to host
galardi.org: could not connect to host
galena.io: could not connect to host
@@ -4906,11 +5366,12 @@ galeriadobimba.com.br: could not connect to host
galgoafegao.com.br: could not connect to host
galgoingles.com.br: could not connect to host
gali.review: did not receive HSTS header
+galileomtz.com: did not receive HSTS header
gallery44.org: did not receive HSTS header
-galletasgabi.com.mx: max-age too low: 86400
galoisvpn.xyz: could not connect to host
gam3rs.de: could not connect to host
gambitcloud.net: could not connect to host
+game-files.net: did not receive HSTS header
game-gentle.com: could not connect to host
game.yt: could not connect to host
gamebits.net: did not receive HSTS header
@@ -4924,6 +5385,7 @@ gameink.net: did not receive HSTS header
gamek.es: could not connect to host
gamenected.com: could not connect to host
gamenected.de: could not connect to host
+gameofbay.org: could not connect to host
gamepad.vg: could not connect to host
gamepader.com: could not connect to host
gameparade.de: could not connect to host
@@ -4934,6 +5396,7 @@ gamerpoets.com: did not receive HSTS header
gamers-life.fr: could not connect to host
gamerslair.org: did not receive HSTS header
gamerz-point.de: could not connect to host
+gamerz-stream.com: could not connect to host
gamesdepartment.co.uk: could not connect to host
gameserver-sponsor.de: did not receive HSTS header
gamesurferapp.com: could not connect to host
@@ -4941,20 +5404,24 @@ gameswitchers.uk: could not connect to host
gametium.com: could not connect to host
gametium.es: could not connect to host
gamhealth.net: could not connect to host
-gamingmedia.eu: did not receive HSTS header
+gamingmedia.eu: could not connect to host
gamingreinvented.com: did not receive HSTS header
gamoice.com: did not receive HSTS header
gampenhof.de: could not connect to host
+gangnam-club.com: could not connect to host
gangnam-karaoke.com: could not connect to host
ganhonet.com.br: did not receive HSTS header
gaphag.ddns.net: could not connect to host
+gar-nich.net: could not connect to host
+garage-abri-chalet.fr: did not receive HSTS header
garage-door.pro: could not connect to host
garageon.net: did not receive HSTS header
garciamartin.me: could not connect to host
garcinia--cambogia.com: could not connect to host
garciniacambogiareviewed.co: did not receive HSTS header
garden.trade: could not connect to host
-gardencarezone.com: could not connect to host
+gardencarezone.com: did not receive HSTS header
+garethkirk.com: did not receive HSTS header
garfieldairlines.net: did not receive HSTS header
garten-bau.ch: did not receive HSTS header
garten-diy.de: could not connect to host
@@ -4964,37 +5431,38 @@ gasser-daniel.ch: did not receive HSTS header
gastauftritt.net: did not receive HSTS header
gatapro.net: could not connect to host
gatemoves.com: could not connect to host
-gateworld.fr: could not connect to host
+gateworld.fr: did not receive HSTS header
+gatomix.net: could not connect to host
gatorsa.es: could not connect to host
gaussorgues.me: could not connect to host
gautham.pro: could not connect to host
-gay-sissies.com: could not connect to host
+gavick.com: did not receive HSTS header
gaycc.cc: could not connect to host
-gayforgenji.com: could not connect to host
gaygeeks.de: could not connect to host
-gaysfisting.com: could not connect to host
-gaytorrent.ru: could not connect to host
-gayxsite.com: could not connect to host
gazflynn.com: did not receive HSTS header
+gc-mc.de: did not receive HSTS header
gc.net: could not connect to host
gchoic.com: max-age too low: 7889238
gchp.ie: did not receive HSTS header
gdegem.org: did not receive HSTS header
gdevpenze.ru: could not connect to host
-gdhzcgs.com: could not connect to host
+gdprhallofshame.com: could not connect to host
gdz-otvety.com: could not connect to host
+gdz.tv: could not connect to host
gear-acquisition-syndrome.community: could not connect to host
geblitzt.de: did not receive HSTS header
gedankenbude.info: could not connect to host
-geek.ch: could not connect to host
geekbaba.com: could not connect to host
geekcast.co.uk: did not receive HSTS header
+geekdt.com: could not connect to host
geekmind.org: max-age too low: 172800
-geeks.berlin: could not connect to host
+geeks.berlin: did not receive HSTS header
geeks.lgbt: could not connect to host
+geeks.one: did not receive HSTS header
geektimes.com: did not receive HSTS header
geemo.top: could not connect to host
-geertdegraaf.nl: could not connect to host
+geertdegraaf.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+gehaowu.com: did not receive HSTS header
gehrke.nrw: could not connect to host
geigr.de: could not connect to host
geiser.io: did not receive HSTS header
@@ -5006,11 +5474,13 @@ gemuplay.com: could not connect to host
genemesservwparts.com: could not connect to host
generalpants.com.au: did not receive HSTS header
generationnext.pl: could not connect to host
-genesischangelog.com: did not receive HSTS header
+genesischangelog.com: could not connect to host
geneve.guide: could not connect to host
genia-life.de: could not connect to host
+genie-seiner-generation.de: could not connect to host
genneve.com: did not receive HSTS header
genoog.com: could not connect to host
+genossen.ru: could not connect to host
genshiken.org: could not connect to host
genuu.com: could not connect to host
genuxation.com: could not connect to host
@@ -5022,19 +5492,23 @@ geoffdev.com: could not connect to host
geoffmyers.com: did not receive HSTS header
geoffreyrichard.com: could not connect to host
geopals.net: did not receive HSTS header
+georgeperez.me: could not connect to host
georgesonarthurs.com.au: did not receive HSTS header
gerardobsd.com: could not connect to host
gereja.ga: max-age too low: 1209600
gerencianet.com.br: did not receive HSTS header
gereon.ch: could not connect to host
geri.be: could not connect to host
+germanticz.de: could not connect to host
gers-authentique.com: could not connect to host
geschenkly.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
geschmackspiloten.de: did not receive HSTS header
gesiwista.net: did not receive HSTS header
gesunde-smoothies.de: did not receive HSTS header
+gesundes-im-napf.de: did not receive HSTS header
get-asterisk.ru: could not connect to host
get-cctv.com: could not connect to host
+get-it-live.de: could not connect to host
get.zenpayroll.com: did not receive HSTS header
getable.com: did not receive HSTS header
getblys.com.au: did not receive HSTS header
@@ -5047,6 +5521,7 @@ getenergized2018.kpn: could not connect to host
getfestify.com: did not receive HSTS header
getfilterlive.org: could not connect to host
getfirepress.com: could not connect to host
+getfuturama.com: max-age too low: 0
getgeek.dk: could not connect to host
getgeek.ee: could not connect to host
getgeek.eu: could not connect to host
@@ -5058,6 +5533,7 @@ getgeek.nu: could not connect to host
getgeek.pl: could not connect to host
getgeek.se: did not receive HSTS header
getinternet.de: did not receive HSTS header
+getitlive.de: could not connect to host
getkai.co.nz: did not receive HSTS header
getlantern.org: did not receive HSTS header
getlifti.com: could not connect to host
@@ -5068,7 +5544,7 @@ getmondo.co.uk: could not connect to host
geto.ml: could not connect to host
getpake.com: could not connect to host
getpop.org: did not receive HSTS header
-getpost.online: could not connect to host
+getpost.online: did not receive HSTS header
getremembrall.com: could not connect to host
getronics.care: could not connect to host
getsello.com: could not connect to host
@@ -5076,26 +5552,25 @@ getserum.xyz: could not connect to host
getshifter.io: did not receive HSTS header
getspeaker.com: did not receive HSTS header
getspire.com: could not connect to host
-getsubs.net: could not connect to host
+getswadeshi.com: could not connect to host
getwarden.net: could not connect to host
getwashdaddy.com: could not connect to host
+getyeflask.com: could not connect to host
getyourphix.tk: could not connect to host
gevaulug.fr: could not connect to host
gfbouncycastles.co.uk: did not receive HSTS header
-gfhgiro.nl: max-age too low: 0
+gfhgiro.nl: did not receive HSTS header
gfm.tech: could not connect to host
gfoss.gr: could not connect to host
-gfournier.ca: could not connect to host
gfw.moe: did not receive HSTS header
gfwsb.ml: could not connect to host
gglks.com: could not connect to host
-ggobbo.com: could not connect to host
ggrks-asano.com: could not connect to host
ggss.cf: could not connect to host
ggss.ml: could not connect to host
-ggx.us: could not connect to host
gh16.com.ar: could not connect to host
ghaglund.se: could not connect to host
+ghcif.de: could not connect to host
gheorghe-sarcov.ga: could not connect to host
gheorghesarcov.ga: could not connect to host
gheorghesarcov.tk: could not connect to host
@@ -5111,11 +5586,9 @@ gidea.nu: could not connect to host
giegler.software: did not receive HSTS header
giftgofers.com: max-age too low: 2592000
gifzilla.net: could not connect to host
-gigacloud.org: did not receive HSTS header
+gigacloud.org: could not connect to host
gigawattz.com: could not connect to host
-gigin.me: did not receive HSTS header
gigiscloud.servebeer.com: could not connect to host
-gigolodavid.be: could not connect to host
gilcloud.com: could not connect to host
gilgaz.com: did not receive HSTS header
gillet-cros.fr: could not connect to host
@@ -5124,6 +5597,7 @@ gilroywestwood.org: did not receive HSTS header
gincher.net: did not receive HSTS header
gingali.de: did not receive HSTS header
ginijony.com: did not receive HSTS header
+ginkel.com: did not receive HSTS header
gintenreiter-photography.com: did not receive HSTS header
giochistem.it: could not connect to host
giogadesign.com: did not receive HSTS header
@@ -5131,20 +5605,24 @@ gip-carif-idf.net: could not connect to host
gip-carif-idf.org: could not connect to host
gipsamsfashion.com: could not connect to host
gipsic.com: did not receive HSTS header
+girlsnet.work: could not connect to host
gis3m.org: did not receive HSTS header
gisac.org: did not receive HSTS header
gistfy.com: could not connect to host
git-stuff.tk: could not connect to host
git.co: could not connect to host
+gitar.io: could not connect to host
github.party: did not receive HSTS header
-gittr.ch: could not connect to host
givemyanswer.com: could not connect to host
giverang.biz: could not connect to host
giverang.com: could not connect to host
gix.net.pl: could not connect to host
+gixtools.co.uk: could not connect to host
+gixtools.uk: could not connect to host
gizzo.sk: could not connect to host
glabiatoren-kst.de: could not connect to host
gladystudio.com: did not receive HSTS header
+glahcks.com: could not connect to host
glass.google.com: did not receive HSTS header (error ignored - included regardless)
glasslikes.com: did not receive HSTS header
glbg.eu: did not receive HSTS header
@@ -5165,25 +5643,26 @@ globalittech.com: could not connect to host
globalmusic.ga: could not connect to host
globalnewsdaily.cf: could not connect to host
globalnomadvintage.com: could not connect to host
+globalperspectivescanada.com: could not connect to host
globalsites.nl: did not receive HSTS header
globaltennis.ca: could not connect to host
globalvisions-events.ch: could not connect to host
globalvisions-events.com: could not connect to host
globuli-info.de: did not receive HSTS header
gloomyspark.com: could not connect to host
-glossopnorthendafc.co.uk: could not connect to host
glotter.com: did not receive HSTS header
gloucesterphotographer.com: did not receive HSTS header
glubbforum.de: did not receive HSTS header
-glutenfreelife.co.nz: could not connect to host
glutenfreiheit.at: did not receive HSTS header
glws.org: did not receive HSTS header
+glyph.ws: could not connect to host
gm-assicurazioni.it: did not receive HSTS header
gmail.com: did not receive HSTS header (error ignored - included regardless)
+gmantra.org: did not receive HSTS header
gmanukyan.com: could not connect to host
gmat.ovh: could not connect to host
-gmind.ovh: could not connect to host
gmoes.at: could not connect to host
+gnaptracker.tk: could not connect to host
gnom.me: could not connect to host
gnosticjade.net: did not receive HSTS header
go.ax: did not receive HSTS header
@@ -5192,15 +5671,17 @@ go4it.solutions: did not receive HSTS header
goabonga.com: could not connect to host
goalsetup.com: did not receive HSTS header
goaltree.ch: did not receive HSTS header
+goapunks.net: could not connect to host
goarmy.eu: could not connect to host
goat.chat: did not receive HSTS header
-goat.xyz: did not receive HSTS header
+goat.xyz: could not connect to host
goben.ch: could not connect to host
goblins.net: did not receive HSTS header
goblinsatwork.com: could not connect to host
godrealms.com: could not connect to host
goedeke.ml: could not connect to host
goerner.me: did not receive HSTS header
+goerres2014.de: could not connect to host
goge.site: could not connect to host
gogenenglish.com: could not connect to host
gogetssl.com: did not receive HSTS header
@@ -5218,24 +5699,24 @@ goldwater.gov: could not connect to host
goldwaterfoundation.gov: could not connect to host
goldwaterscholarship.gov: could not connect to host
golearn.gov: could not connect to host
+golfburn.com: could not connect to host
golocal-media.de: could not connect to host
gomiblog.com: did not receive HSTS header
gong8.win: could not connect to host
gonzalosanchez.mx: did not receive HSTS header
goodeats.nyc: did not receive HSTS header
-goodfurday.ca: did not receive HSTS header
+goodfeels.net: could not connect to host
+goodfurday.ca: could not connect to host
goodmengroup.de: did not receive HSTS header
goods-memo.net: did not receive HSTS header
goodsex4all.com.br: could not connect to host
goodtech.com.br: could not connect to host
-goodvibesblog.com: could not connect to host
goodwin43.ru: could not connect to host
goodyearsotn.co.uk: could not connect to host
google: could not connect to host (error ignored - included regardless)
google.ax: could not connect to host
googlemail.com: did not receive HSTS header (error ignored - included regardless)
googleplex.com: did not receive HSTS header (error ignored - included regardless)
-googley.fr: max-age too low: 0
goolok.com: could not connect to host
gootax.pro: did not receive HSTS header
goozz.nl: did not receive HSTS header
@@ -5243,29 +5724,30 @@ gopay.cz: did not receive HSTS header
gopokego.cz: could not connect to host
goranrango.ch: could not connect to host
gordonobrecht.com: did not receive HSTS header
-gorgias.me: did not receive HSTS header
gorgiaxx.com: could not connect to host
gorilla-gym.site: could not connect to host
gorillow.com: could not connect to host
gorognyelv.hu: could not connect to host
gosharewood.com: did not receive HSTS header
goshop.cz: did not receive HSTS header
-goshow.tv: could not connect to host
-gostream.asia: did not receive HSTS header
+gostream.asia: could not connect to host
gotgenes.com: could not connect to host
goto.google.com: did not receive HSTS header (error ignored - included regardless)
gotobrno.cz: did not receive HSTS header
gotocloud.ru: could not connect to host
gotspot.com: could not connect to host
gottfridsberg.org: could not connect to host
-gottfriedfeyen.com: did not receive HSTS header
+gottfriedfeyen.com: could not connect to host
goubi.me: did not receive HSTS header
+goujianwen.com: did not receive HSTS header
+goukon.ru: could not connect to host
gourmettia.com: did not receive HSTS header
gouthro-goteborg.se: could not connect to host
gouv.ovh: did not receive HSTS header
gov.ax: could not connect to host
goverage.org: could not connect to host
govillemo.ca: did not receive HSTS header
+gowe.wang: could not connect to host
gozadentro.com: could not connect to host
gozel.com.tr: did not receive HSTS header
gpalabs.com: could not connect to host
@@ -5275,9 +5757,8 @@ gplintegratedit.com: could not connect to host
gpo.gov: did not receive HSTS header
gpstuner.com: did not receive HSTS header
graavaapi.elasticbeanstalk.com: could not connect to host
-gracebaking.com: max-age too low: 86400
gracechurchpc.net: could not connect to host
-graceful-project.eu: could not connect to host
+graceful-project.eu: did not receive HSTS header
gracesofgrief.com: could not connect to host
grachtenpandverkopen.nl: could not connect to host
grademymac.com: could not connect to host
@@ -5300,12 +5781,12 @@ gratis-app.com: did not receive HSTS header
gratisonlinesex.com: could not connect to host
gravitation.pro: did not receive HSTS header
gravito.nl: did not receive HSTS header
+gravity-dev.de: could not connect to host
gravity-net.de: could not connect to host
graycell.net: could not connect to host
grazetech.com: did not receive HSTS header
grcnode.co.uk: could not connect to host
great.nagoya: could not connect to host
-greatestwebsiteonearth.com: could not connect to host
greatfire.kr: could not connect to host
greatideahub.com: did not receive HSTS header
greatnet.de: did not receive HSTS header
@@ -5326,12 +5807,9 @@ greenvpn.ltd: could not connect to host
greenvpn.pro: did not receive HSTS header
greggsfoundation.org.uk: could not connect to host
gregmartyn.com: could not connect to host
-gregmilton.com: could not connect to host
-gregmilton.org: could not connect to host
gregorytlee.me: could not connect to host
grekland.guide: could not connect to host
gremots.com: could not connect to host
-grendel.no: could not connect to host
greplin.com: could not connect to host
gresb.com: did not receive HSTS header
gretchelizartistry.com: did not receive HSTS header
@@ -5340,23 +5818,25 @@ greuel.online: could not connect to host
greve.xyz: could not connect to host
grevesgarten.de: could not connect to host
greyline.se: could not connect to host
-greysky.me: did not receive HSTS header
+greysky.me: max-age too low: 300
grian-bam.at: did not receive HSTS header
gribani.com: could not connect to host
grid2osm.org: could not connect to host
gridle.io: did not receive HSTS header
+grifomarchetti.com: did not receive HSTS header
grigalanzsoftware.com: could not connect to host
grillinfools.com: did not receive HSTS header
gripopgriep.net: could not connect to host
gritte.net: could not connect to host
griyo.online: could not connect to host
groben-itsolutions.de: could not connect to host
-groenewoud.me: could not connect to host
groenewoud.run: could not connect to host
+groenteclub.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
groentefruitzeep.com: could not connect to host
groentefruitzeep.nl: could not connect to host
groetzner.net: did not receive HSTS header
groseb.net: did not receive HSTS header
+grossberger-ge.org: could not connect to host
grossmann.gr: could not connect to host
grossmisconduct.news: could not connect to host
groupe-cassous.com: did not receive HSTS header
@@ -5377,18 +5857,17 @@ gs-net.at: could not connect to host
gsm-map.com: could not connect to host
gsmkungen.com: could not connect to host
gsnort.com: did not receive HSTS header
+gsoc.se: could not connect to host
gtamodshop.org: could not connect to host
gtanda.tk: could not connect to host
gtech.work: did not receive HSTS header
gtldna.com: could not connect to host
-gtour.info: did not receive HSTS header
gtraxapp.com: could not connect to host
gts-schulsoftware.de: did not receive HSTS header
-guanzhong.ca: did not receive HSTS header
guarajubaimoveis.com.br: did not receive HSTS header
guava.studio: did not receive HSTS header
+gudangpangan.id: could not connect to host
guelphhydropool.com: could not connect to host
-guendra.dedyn.io: could not connect to host
guentherhouse.com: did not receive HSTS header
guenthernoack.de: could not connect to host
guffrits.com: could not connect to host
@@ -5396,6 +5875,8 @@ gugaltika-ipb.org: could not connect to host
guge.gq: could not connect to host
gugga.dk: could not connect to host
guguke.net: did not receive HSTS header
+guidechecking.com: could not connect to host
+guides-et-admin.com: did not receive HSTS header
guilde-vindicta.fr: could not connect to host
guildgearscore.cf: could not connect to host
guillaume-leduc.fr: did not receive HSTS header
@@ -5412,11 +5893,13 @@ gulshankumar.net: did not receive HSTS header
gumannp.de: did not receive HSTS header
gummibande.noip.me: could not connect to host
gunhunter.com: could not connect to host
+guniram.com: did not receive HSTS header
gunnarhafdal.com: did not receive HSTS header
gunnaro.com: could not connect to host
guntbert.net: could not connect to host
guoqiang.info: did not receive HSTS header
gurom.lv: could not connect to host
+gurubetng.com: did not receive HSTS header
gurusupe.com: could not connect to host
gus.moe: could not connect to host
guso.gq: could not connect to host
@@ -5425,7 +5908,11 @@ guso.site: could not connect to host
guso.tech: could not connect to host
gussi.is: did not receive HSTS header
guthabenkarten-billiger.de: did not receive HSTS header
+guts.me: did not receive HSTS header
+guts.moe: did not receive HSTS header
+guyot-tech.com: did not receive HSTS header
gvchannel.xyz: could not connect to host
+gvi.be: could not connect to host
gvpt.sk: did not receive HSTS header
gvt2.com: could not connect to host (error ignored - included regardless)
gvt3.com: could not connect to host (error ignored - included regardless)
@@ -5447,12 +5934,10 @@ h-og.com: could not connect to host
h-rickroll-n.pw: could not connect to host
h2cdn.cloud: could not connect to host
h2check.org: did not receive HSTS header
-h3artbl33d.nl: could not connect to host
h3x.jp: could not connect to host
-h3z.jp: could not connect to host
haarkliniek.com: did not receive HSTS header
habbixed.tk: could not connect to host
-habbo.life: could not connect to host
+habbo.life: did not receive HSTS header
habbotalk.nl: could not connect to host
habeo.si: could not connect to host
hablemosdetecnologia.com.ve: could not connect to host
@@ -5460,9 +5945,10 @@ hac30.com: could not connect to host
hack.cz: could not connect to host
hack.li: could not connect to host
hackbubble.me: could not connect to host
+hackdown.me: could not connect to host
hacker.deals: could not connect to host
hacker8.cn: could not connect to host
-hackercat.ninja: did not receive HSTS header
+hackercat.ninja: max-age too low: 2592000
hackerforever.com: could not connect to host
hackerone-ext-adroll.com: could not connect to host
hackerspace-ntnu.no: did not receive HSTS header
@@ -5473,6 +5959,7 @@ hackmeplz.com: could not connect to host
hackroyale.xyz: could not connect to host
hacksnack.io: could not connect to host
hackworx.com: could not connect to host
+hackyourfaceoff.com: could not connect to host
hadaf.pro: could not connect to host
hadzic.co: could not connect to host
haeckdesign.com: did not receive HSTS header
@@ -5482,12 +5969,14 @@ haemmerle.net: [Exception... "Component returned failure code: 0x80004005 (NS_ER
haf.gr: could not connect to host
hafoda.com: did not receive HSTS header
hahayidu.org: could not connect to host
+hail2u.net: did not receive HSTS header
hainoni.com: did not receive HSTS header
hairlossstop.net: did not receive HSTS header
haitschi.com: could not connect to host
haitschi.de: did not receive HSTS header
haitschi.net: could not connect to host
haitschi.org: could not connect to host
+hajnzic.at: could not connect to host
hakase.pw: could not connect to host
haktec.de: did not receive HSTS header
haku.moe: could not connect to host
@@ -5502,17 +5991,22 @@ halta.info: could not connect to host
halyul.cc: did not receive HSTS header
halyul.com: did not receive HSTS header
haman.nl: could not connect to host
+hamish.ca: did not receive HSTS header
hamking.tk: could not connect to host
hammamsayad.com: could not connect to host
hamon.cc: did not receive HSTS header
hamu.blue: could not connect to host
+hancatemc.com: did not receive HSTS header
hancc.net: could not connect to host
handenafvanhetmedischdossier.nl: could not connect to host
handicapindeles.nl: did not receive HSTS header
-handinhandfoundation.org.uk: could not connect to host
+handinhandfoundation.org.uk: did not receive HSTS header
handiworker.com: could not connect to host
+handmadegobelin.com: did not receive HSTS header
+handmadetutorials.ro: could not connect to host
handsandall.com: did not receive HSTS header
hanfu.la: could not connect to host
+hang333.moe: could not connect to host
hang333.pw: could not connect to host
hangar18-modelismo.com.br: could not connect to host
hanimalis.fr: could not connect to host
@@ -5520,7 +6014,6 @@ hanksservice.com: could not connect to host
hannes-speelgoedencadeautjes.nl: did not receive HSTS header
hans-natur.de: did not receive HSTS header
hanzcollection.online: could not connect to host
-hao2taiwan.com: max-age too low: 0
haobo111.com: could not connect to host
haobo1111.com: could not connect to host
haobo222.com: could not connect to host
@@ -5530,16 +6023,17 @@ haobo5555.com: could not connect to host
haobo6666.com: could not connect to host
haobo7777.com: could not connect to host
haomwei.com: could not connect to host
-haotown.cn: did not receive HSTS header
+haoqi.men: could not connect to host
haoyugao.com: could not connect to host
happist.com: did not receive HSTS header
happix.nl: did not receive HSTS header
happyfabric.me: did not receive HSTS header
happygastro.com: could not connect to host
+happyheartsabode.com: did not receive HSTS header
happytiger.eu: could not connect to host
hapsfordmill.co.uk: could not connect to host
hapvm.com: could not connect to host
-haqaza.com.br: could not connect to host
+haqaza.com.br: did not receive HSTS header
harambe.site: could not connect to host
harbourweb.net: did not receive HSTS header
hardergayporn.com: could not connect to host
@@ -5548,7 +6042,9 @@ hardyboyplant.com: did not receive HSTS header
haribosupermix.com: could not connect to host
hariome.com: did not receive HSTS header
harlentimberproducts.co.uk: did not receive HSTS header
+harmfarm.nl: could not connect to host
harmonycosmetic.com: max-age too low: 300
+harrisonsdirect.co.uk: did not receive HSTS header
harristony.com: could not connect to host
harryharrison.co: did not receive HSTS header
harrypottereditor.com: could not connect to host
@@ -5558,7 +6054,6 @@ hartlep.eu: could not connect to host
hartmancpa.com: did not receive HSTS header
harvestrenewal.org: did not receive HSTS header
harz.cloud: could not connect to host
-has-no-email-set.de: did not receive HSTS header
has.vision: could not connect to host
hasabig.wang: could not connect to host
hasalittle.wang: could not connect to host
@@ -5566,11 +6061,11 @@ haschrebellen.de: could not connect to host
hash-list.com: could not connect to host
hashiconf.com: did not receive HSTS header
hashidays.com: did not receive HSTS header
-hashimah.ca: could not connect to host
hashplex.com: could not connect to host
hasinase.de: could not connect to host
haste.ch: could not connect to host
hastherebeenamassshooting.today: could not connect to host
+hatarisecurity.co.ke: could not connect to host
hatethe.uk: could not connect to host
hatoko.net: could not connect to host
haufschild.de: could not connect to host
@@ -5582,10 +6077,11 @@ haven-staging.cloud: could not connect to host
haven.cloud: did not receive HSTS header
havenmoon.com: could not connect to host
havenswift-hosting.co.uk: did not receive HSTS header
+hawk-la.com: could not connect to host
hawthornharpist.com: could not connect to host
haxoff.com: could not connect to host
haxon.me: could not connect to host
-haxx.hu: could not connect to host
+haxx.hu: did not receive HSTS header
haydenhill.us: could not connect to host
hayleishop.fr: did not receive HSTS header
hazcod.com: could not connect to host
@@ -5616,22 +6112,23 @@ hcstr.com: did not receive HSTS header
hd1tj.org: did not receive HSTS header
hdm.io: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
hdrboundless.com: could not connect to host
+hdritalyphotos.com: did not receive HSTS header
hdserver.info: did not receive HSTS header
hdsmigrationtool.com: could not connect to host
hduin.xyz: could not connect to host
-hdwallpapers.net: could not connect to host
hdy.nz: could not connect to host
head-shop.lt: could not connect to host
head-shop.lv: could not connect to host
headmates.xyz: could not connect to host
+healthcare6.com: did not receive HSTS header
healthjoy.com: did not receive HSTS header
healthyandnaturalliving.com: could not connect to host
healthycod.in: could not connect to host
healtious.com: could not connect to host
-heap.zone: could not connect to host
hearingshofar.com: could not connect to host
-heart.ge: could not connect to host
+heart.ge: did not receive HSTS header
heartlandrentals.com: did not receive HSTS header
+hearty.cf: could not connect to host
hearty.ink: could not connect to host
hearty.space: could not connect to host
hearty.tech: could not connect to host
@@ -5642,6 +6139,7 @@ heavenlyseals.com: could not connect to host
heavenlysmokenc.com: could not connect to host
heavystresser.com: could not connect to host
hebaus.com: could not connect to host
+hebikhiv.nl: could not connect to host
hedweb.com: could not connect to host
heidilein.info: did not receive HSTS header
heimnetze.org: could not connect to host
@@ -5657,46 +6155,59 @@ hellenicaward.com: did not receive HSTS header
hello-nestor.com: did not receive HSTS header
helloanselm.com: did not receive HSTS header
hellofilters.com: could not connect to host
-hellomouse.cf: could not connect to host
+hellomouse.cf: did not receive HSTS header
+hellomouse.net: could not connect to host
hellomouse.tk: could not connect to host
+hellotandem.com: could not connect to host
hellothought.net: could not connect to host
helloworldhost.com: did not receive HSTS header
hellscanyonraft.com: did not receive HSTS header
helpadmin.net: could not connect to host
helpantiaging.com: could not connect to host
+helpdebit.com: did not receive HSTS header
helpekwendenihospital.com: could not connect to host
-helpgerer.com: could not connect to host
+helpfacile.com: did not receive HSTS header
+helpfixe.com: did not receive HSTS header
+helpflux.com: did not receive HSTS header
+helpfute.com: did not receive HSTS header
+helpgerer.com: did not receive HSTS header
helpium.de: could not connect to host
helpmebuild.com: did not receive HSTS header
-helpverif.com: could not connect to host
+helppresta.com: did not receive HSTS header
+helpverif.com: did not receive HSTS header
helpwithmybank.gov: did not receive HSTS header
helsingfors.guide: could not connect to host
hemlockhillscabinrentals.com: did not receive HSTS header
hencagon.com: could not connect to host
hendersonrealestatepros.com: did not receive HSTS header
hendric.us: did not receive HSTS header
-henhenlu.com: could not connect to host
henningkerstan.org: did not receive HSTS header
henriknoerr.com: could not connect to host
-hentai.design: could not connect to host
+hentai.design: did not receive HSTS header
hentaimaster.net: could not connect to host
-hentaiz.net: could not connect to host
hepteract.us: could not connect to host
+heptner24.de: could not connect to host
+her25.com: did not receive HSTS header
herbertmouwen.nl: could not connect to host
here.ml: could not connect to host
here4funpartysolutions.ie: did not receive HSTS header
-heribe-maruo.com: did not receive HSTS header
-heritagedentistry.ca: could not connect to host
+heribe-maruo.com: could not connect to host
+heritagedentistry.ca: did not receive HSTS header
hermes-servizi.it: could not connect to host
heroin.org.uk: could not connect to host
-herpaderp.net: could not connect to host
+herpaderp.net: did not receive HSTS header
herramientasbazarot.com: did not receive HSTS header
herrenfahrt.com: did not receive HSTS header
hetmeisjeachterpauw.nl: could not connect to host
+hetmer.com: did not receive HSTS header
+hetmer.net: did not receive HSTS header
heutger.net: did not receive HSTS header
hex2013.com: did not receive HSTS header
-hexadecimal.tech: could not connect to host
+hexacon.io: could not connect to host
+hexadecimal.tech: did not receive HSTS header
+hexe.net: did not receive HSTS header
hexhu.com: could not connect to host
+hexo.io: did not receive HSTS header
hexobind.com: could not connect to host
heyguevara.com: did not receive HSTS header
heywoodtown.co.uk: did not receive HSTS header
@@ -5704,43 +6215,9 @@ hfbg.nl: did not receive HSTS header
hfcbank.com.gh: could not connect to host
hfi.me: did not receive HSTS header
hfu.io: could not connect to host
-hg0088.vip: could not connect to host
-hg718.com: did not receive HSTS header
-hg71801.com: did not receive HSTS header
-hg71802.com: could not connect to host
-hg71803.com: could not connect to host
-hg71805.com: could not connect to host
-hg71806.com: could not connect to host
-hg71807.com: could not connect to host
-hg71809.com: could not connect to host
-hg71811.com: could not connect to host
-hg71812.com: could not connect to host
-hg71813.com: could not connect to host
-hg71815.com: could not connect to host
-hg71819.com: could not connect to host
-hg71822.com: could not connect to host
-hg71833.com: could not connect to host
-hg71835.com: could not connect to host
-hg71836.com: could not connect to host
-hg71837.com: could not connect to host
hg71839.com: could not connect to host
-hg71850.com: could not connect to host
-hg71851.com: could not connect to host
-hg71852.com: could not connect to host
-hg71856.com: could not connect to host
-hg71857.com: could not connect to host
-hg71858.com: could not connect to host
-hg71860.com: could not connect to host
-hg71861.com: could not connect to host
-hg71863.com: could not connect to host
hg881.com: could not connect to host
-hga8586.com: could not connect to host
-hga8587.com: could not connect to host
-hga8685.com: could not connect to host
-hga8687.com: could not connect to host
-hga8689.com: could not connect to host
-hga8757.com: could not connect to host
-hga8758.com: could not connect to host
+hh-wolke.dedyn.io: did not receive HSTS header
hi808.net: did not receive HSTS header
hialatv.com: could not connect to host
hibilog.com: could not connect to host
@@ -5749,6 +6226,7 @@ hiddendepth.ie: max-age too low: 0
hiddenmail.xyz: could not connect to host
hiddenprocess.com: did not receive HSTS header
hiddenrefuge.eu.org: could not connect to host
+hidedd.com: could not connect to host
hideftv.deals: could not connect to host
hideout.agency: could not connect to host
hidrofire.com: did not receive HSTS header
@@ -5757,9 +6235,11 @@ highgrove.org.uk: could not connect to host
highlandparkcog.org: did not receive HSTS header
highseer.com: did not receive HSTS header
highsurf-miyazaki.com: could not connect to host
+hightechgadgets.net: could not connect to host
hightimes.com: could not connect to host
hightower.eu: could not connect to host
highvelocitydesign.com: could not connect to host
+higp.de: did not receive HSTS header
hiisukun.com: could not connect to host
hiitcentre.com: did not receive HSTS header
hijoan.com: could not connect to host
@@ -5777,7 +6257,7 @@ hiltonhyland.com: did not receive HSTS header
hindmanfuneralhomes.com: did not receive HSTS header
hingle.me: could not connect to host
hinkel-sohn.de: did not receive HSTS header
-hinrich.de: could not connect to host
+hinrich.de: did not receive HSTS header
hintergedanken.com: could not connect to host
hintermeier-rae.at: could not connect to host
hipercultura.com: did not receive HSTS header
@@ -5787,10 +6267,10 @@ hipnos.net: did not receive HSTS header
hipnoseinstitute.org: did not receive HSTS header
hiqhub.co.uk: could not connect to host
hiraku.me: did not receive HSTS header
-hirefitness.co.uk: did not receive HSTS header
+hiresuccessstaffing.com: did not receive HSTS header
hirokilog.com: could not connect to host
-hirte-digital.de: could not connect to host
-hisnet.de: could not connect to host
+hisingenrunt.se: did not receive HSTS header
+histoire-theatre.com: did not receive HSTS header
history.pe: could not connect to host
hitchunion.org: could not connect to host
hitoy.org: did not receive HSTS header
@@ -5798,7 +6278,6 @@ hittipps.com: could not connect to host
hjes.com.ve: could not connect to host
hknet.at: did not receive HSTS header
hlacosedora.com: max-age too low: 7889238
-hlfh.space: could not connect to host
hloe0xff.ru: could not connect to host
hlpublicidad.com: could not connect to host
hlyue.com: did not receive HSTS header
@@ -5813,18 +6292,23 @@ hochzeitshelferlein.de: did not receive HSTS header
hodamakade.com: could not connect to host
hodne.io: could not connect to host
hoekwoningverkopen.nl: could not connect to host
+hoelty.network: could not connect to host
hoerbuecher-und-hoerspiele.de: could not connect to host
+hoeveiligismijn.nl: did not receive HSTS header
hoffens.se: could not connect to host
hofiprojekt.cz: did not receive HSTS header
hogar123.es: could not connect to host
hoiku-map.tokyo: could not connect to host
hoiku-navi.com: did not receive HSTS header
+hoikuen-now.top: did not receive HSTS header
+hokepon.com: did not receive HSTS header
hokioisecurity.com: did not receive HSTS header
holgerlehner.com: could not connect to host
holidayincotswolds.co.uk: could not connect to host
holifestival-freyung.de: could not connect to host
-holisticdrbright.com: could not connect to host
+holisticdrbright.com: max-age too low: 300
hollandguns.com: did not receive HSTS header
+hollerau.de: could not connect to host
holowaty.me: could not connect to host
holymoly.lu: could not connect to host
holytransaction.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
@@ -5840,19 +6324,22 @@ homedna.com: did not receive HSTS header
homeexx.com: did not receive HSTS header
homefacialpro.com: did not receive HSTS header
homegreenmark.com: did not receive HSTS header
-homeownersassociationmanagementla.com: could not connect to host
+homeownersassociationmanagementla.com: did not receive HSTS header
homeremodelingcontractorsca.com: did not receive HSTS header
homesandal.com: did not receive HSTS header
homeseller.co.uk: could not connect to host
homesfordinner.ca: could not connect to host
-hometownmall.com: max-age too low: 0
+homewatt.co.uk: could not connect to host
homeyantra.com: did not receive HSTS header
homezhi.com.tw: could not connect to host
homoglyph.net: could not connect to host
-hompus.nl: could not connect to host
honeytracks.com: could not connect to host
+hong.io: could not connect to host
hongyd.online: could not connect to host
hongzhaxiaofendui.com: could not connect to host
+hongzu.cc: could not connect to host
+hongzuwang.com: could not connect to host
+hongzuzhibo.com: could not connect to host
honkhonk.net: could not connect to host
honoo.com: could not connect to host
hoodiecrow.com: could not connect to host
@@ -5861,13 +6348,16 @@ hoodoo.tech: could not connect to host
hookandloom.com: did not receive HSTS header
hookbin.com: could not connect to host
hoopsacademyusa.com: could not connect to host
+hooray.beer: could not connect to host
hoovism.com: did not receive HSTS header
+hopesb.org: did not receive HSTS header
hopewellproperties.co.uk: did not receive HSTS header
hopglass.eu: could not connect to host
hopglass.net: could not connect to host
horace.li: did not receive HSTS header
horisonttimedia.fi: did not receive HSTS header
horizonmoto.fr: did not receive HSTS header
+horning.co: did not receive HSTS header
horosho.in: could not connect to host
horror-forum.de: could not connect to host
horrorserv.com: could not connect to host
@@ -5875,10 +6365,10 @@ horseboners.xxx: could not connect to host
hortifarm.ro: did not receive HSTS header
horvathtom.com: could not connect to host
horvatnyelvkonyv.hu: could not connect to host
-hory.me: did not receive HSTS header
host.black: could not connect to host
hostam.link: could not connect to host
hosted-oswa.org: could not connect to host
+hostedbgp.net: did not receive HSTS header
hostedtalkgadget.google.com: did not receive HSTS header (error ignored - included regardless)
hostelite.com: did not receive HSTS header
hostfuture.co.in: did not receive HSTS header
@@ -5910,26 +6400,22 @@ how2fsbo.com: could not connect to host
howardwatts.co.uk: did not receive HSTS header
howfargames.com: could not connect to host
howrandom.org: could not connect to host
-howsmytls.com: could not connect to host
howtocuremysciatica.com: could not connect to host
howtofreelance.com: did not receive HSTS header
hozinga.de: could not connect to host
hpctecnologias.com: did not receive HSTS header
-hpepub.asia: did not receive HSTS header
+hpepub.asia: could not connect to host
hpepub.org: could not connect to host
hppub.info: could not connect to host
hppub.org: could not connect to host
hppub.site: could not connect to host
hqhost.net: did not receive HSTS header
-hqq.tv: could not connect to host
hr-intranet.com: could not connect to host
-hr-tech.shop: did not receive HSTS header
hr-tech.store: could not connect to host
hr98.tk: could not connect to host
hrackydomino.cz: did not receive HSTS header
hrfhomelottery.com: did not receive HSTS header
hrk.io: could not connect to host
-hrtech.shop: did not receive HSTS header
hrtech.store: could not connect to host
hrtraining.com.au: did not receive HSTS header
hschen.top: could not connect to host
@@ -5949,11 +6435,9 @@ https-rulesets.org: could not connect to host
https.ps: could not connect to host
httpstatuscode418.xyz: could not connect to host
httptest.net: could not connect to host
-huang-haitao.com: could not connect to host
huang.nu: could not connect to host
huangguancq.com: could not connect to host
huangh.com: could not connect to host
-huangzenghao.cn: could not connect to host
huangzenghao.com: could not connect to host
huarongdao.com: did not receive HSTS header
hubert.systems: did not receive HSTS header
@@ -5964,10 +6448,9 @@ hugocollignon.fr: could not connect to host
huiser.nl: could not connect to host
hukaloh.com: could not connect to host
hukkatavara.com: could not connect to host
-humanexperiments.com: did not receive HSTS header
+humankode.com: did not receive HSTS header
humblefinances.com: could not connect to host
humeurs.net: could not connect to host
-humorce.com: could not connect to host
humortuga.pt: did not receive HSTS header
hump.dk: could not connect to host
humpi.at: could not connect to host
@@ -5977,10 +6460,8 @@ huntshomeinspections.com: [Exception... "Component returned failure code: 0x8000
huodongweb.com: could not connect to host
huongquynh.com: could not connect to host
hup.blue: did not receive HSTS header
-husky.xyz: max-age too low: 0
huskybutt.dog: could not connect to host
huskyduvercors.com: did not receive HSTS header
-hustunique.com: could not connect to host
huwjones.me: could not connect to host
huzu.com: did not receive HSTS header
huzurmetal.net: could not connect to host
@@ -5989,6 +6470,7 @@ hwpkasse.de: max-age too low: 2592000
hyakumachi.com: did not receive HSTS header
hyatt.com: did not receive HSTS header
hybula.nl: could not connect to host
+hydai.co: could not connect to host
hydra.ws: could not connect to host
hydra.zone: could not connect to host
hydrante.ch: could not connect to host
@@ -6002,7 +6484,7 @@ hydronyx.me: could not connect to host
hymerscollege.co.uk: max-age too low: 43200
hypa.net.au: did not receive HSTS header
hyper-matrix.org: could not connect to host
-hyper69.com: could not connect to host
+hyper69.com: did not receive HSTS header
hyperactive.am: could not connect to host
hyperporn.net: could not connect to host
hyperreal.info: could not connect to host
@@ -6012,22 +6494,25 @@ hypotheques24.ch: could not connect to host
hysg.me: could not connect to host
hyvive.com: could not connect to host
hzh.pub: did not receive HSTS header
+hztgzz.com: could not connect to host
i--b.com: did not receive HSTS header
i-aloks.ru: could not connect to host
i-jp.net: could not connect to host
-i-partners.sk: did not receive HSTS header
+i-partners.sk: could not connect to host
i-rickroll-n.pw: could not connect to host
i-stats.net: could not connect to host
i10z.com: could not connect to host
-i496.eu: did not receive HSTS header
+i496.eu: could not connect to host
i4m1k0su.com: could not connect to host
i95.me: could not connect to host
+i9multiequipamentos.com.br: did not receive HSTS header
iacono.com.br: did not receive HSTS header
iadttaveras.com: could not connect to host
+iain.tech: did not receive HSTS header
iamokay.nl: did not receive HSTS header
iamreubin.co.uk: did not receive HSTS header
iamsoareyou.se: could not connect to host
-iamveto.com: could not connect to host
+iamveto.com: did not receive HSTS header
iapws.com: did not receive HSTS header
iban.is: could not connect to host
ibarf.nl: did not receive HSTS header
@@ -6037,6 +6522,7 @@ ibestreview.com: did not receive HSTS header
ibizatopcharter.com: did not receive HSTS header
ibna.online: could not connect to host
ibnuwebhost.com: could not connect to host
+ibox.ovh: could not connect to host
ibps.blog: did not receive HSTS header
ibron.co: could not connect to host
ibsafrica.co.za: could not connect to host
@@ -6058,15 +6544,16 @@ ich-find-den-g.net: could not connect to host
ich-mach-druck.eu: did not receive HSTS header
ichnichtskaufmann.de: could not connect to host
ichoosebtec.com: did not receive HSTS header
+ichronos.net: did not receive HSTS header
icity.ly: did not receive HSTS header
icloud.net: could not connect to host
-icloudlogin.com: did not receive HSTS header
icnsoft.ga: did not receive HSTS header
+icnsoft.me: could not connect to host
icntorrent.download: could not connect to host
icpc.pp.ua: could not connect to host
icpc2016.in.th: could not connect to host
icreative.nl: did not receive HSTS header
-ictpro.info: could not connect to host
+ictpro.info: did not receive HSTS header
icusignature.com: could not connect to host
icys2017.com: did not receive HSTS header
id-co.in: could not connect to host
@@ -6074,10 +6561,13 @@ id-conf.com: did not receive HSTS header
id.fedoraproject.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
idblab.tk: did not receive HSTS header
idcrane.com: could not connect to host
+iddconnect.com: could not connect to host
+iddconnect.org: could not connect to host
ideadozz.hu: could not connect to host
ideal-envelopes.co.uk: did not receive HSTS header
idealmoto.com: did not receive HSTS header
idealmykonos.com: did not receive HSTS header
+idealvenir.com: did not receive HSTS header
ideapaisajistas.es: did not receive HSTS header
ideaplus.me: could not connect to host
ideasenfoto.com: max-age too low: 604800
@@ -6085,6 +6575,7 @@ ideasmeetingpoint.com: could not connect to host
ideation-inc.co.jp: could not connect to host
idedr.com: could not connect to host
idemo.in: could not connect to host
+idenamaislami.com: could not connect to host
identity-hash.online: could not connect to host
identitylabs.uk: could not connect to host
identitysandbox.gov: could not connect to host
@@ -6096,20 +6587,25 @@ idlekernel.com: could not connect to host
idol-bikes.ru: could not connect to host
idontexist.me: could not connect to host
idsafe.co.za: could not connect to host
+idsoccer.com: did not receive HSTS header
+idtheft.gov: could not connect to host
+iec.pe: could not connect to host
iemb.cf: could not connect to host
ierna.com: did not receive HSTS header
-ies-italia.it: could not connect to host
ies.id.lv: could not connect to host
ievgenialehner.com: did not receive HSTS header
+iexpert9.com: did not receive HSTS header
if0.ru: could not connect to host
ifad.org: did not receive HSTS header
ifan.ch: could not connect to host
ifastuniversity.com: did not receive HSTS header
ifcfg.me: could not connect to host
ifleurs.com: could not connect to host
+ifreetion.cn: did not receive HSTS header
ifx.ee: could not connect to host
ifxnet.com: could not connect to host
ifxor.com: could not connect to host
+iga-semi.jp: could not connect to host
igamingforums.com: could not connect to host
igd.chat: did not receive HSTS header
igforums.com: could not connect to host
@@ -6118,27 +6614,28 @@ igiftcards.nl: did not receive HSTS header
ignatisd.gr: did not receive HSTS header
ignatovich.by: could not connect to host
igule.net: could not connect to host
-ihatethissh.it: could not connect to host
ihoey.com: could not connect to host
+ihongzu.com: could not connect to host
ihotel.io: did not receive HSTS header
ihrlotto.de: could not connect to host
ihrnationalrat.ch: could not connect to host
ihsbsd.me: could not connect to host
ihsbsd.tk: could not connect to host
+ihzys.com: could not connect to host
iide.co: did not receive HSTS header
-iideaz.org: did not receive HSTS header
+iideaz.org: could not connect to host
iilin.com: could not connect to host
iiong.com: did not receive HSTS header
iispeed.com: did not receive HSTS header
ijn-dd.nl: could not connect to host
ijoda.com: could not connect to host
ik-life.com: did not receive HSTS header
+ike.io: did not receive HSTS header
ikenmeyer.com: could not connect to host
ikenmeyer.eu: could not connect to host
ikocik.sk: could not connect to host
ikon.name: could not connect to host
ikwilguidobellen.nl: could not connect to host
-ikwilthepiratebay.org: could not connect to host
ikzoekeengoedkopeauto.nl: could not connect to host
ikzoekjeugdhulp.nl: did not receive HSTS header
ilbuongiorno.it: did not receive HSTS header
@@ -6146,19 +6643,18 @@ ildomani.it: did not receive HSTS header
ileat.com: could not connect to host
ilgi.work: could not connect to host
ilhansubasi.com: did not receive HSTS header
-ilii.me: did not receive HSTS header
+ilii.me: could not connect to host
ilikerainbows.co: could not connect to host
ilikerainbows.co.uk: could not connect to host
ilikfreshweedstores.com: did not receive HSTS header
ilmconpm.de: could not connect to host
+iloilofit.org: did not receive HSTS header
ilona.graphics: did not receive HSTS header
iluvscotland.co.uk: did not receive HSTS header
im-design.com.ua: did not receive HSTS header
image.tf: could not connect to host
imaginarymakings.me: could not connect to host
imakepoems.net: could not connect to host
-imanageproducts.uk: did not receive HSTS header
-imanesdeviaje.com: did not receive HSTS header
imanhearts.com: did not receive HSTS header
imanolbarba.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
imanudin.net: did not receive HSTS header
@@ -6166,6 +6662,7 @@ imbrian.org: could not connect to host
ime.moe: could not connect to host
imed.com.pt: did not receive HSTS header
imed.pt: did not receive HSTS header
+imedi.it: could not connect to host
imfromthefuture.com: did not receive HSTS header
img.ovh: could not connect to host
imgencrypt.com: could not connect to host
@@ -6178,49 +6675,47 @@ imlinan.info: could not connect to host
imlinan.net: could not connect to host
immanuel60.hu: did not receive HSTS header
immersionwealth.com: could not connect to host
+immigrationdirect.com.au: could not connect to host
immobilien-wallat.de: could not connect to host
immoprotect.ca: did not receive HSTS header
immortals-co.com: did not receive HSTS header
immoverkauf24.at: did not receive HSTS header
immoverkauf24.de: did not receive HSTS header
-immunicity.cc: max-age too low: 0
+immunicity.cc: could not connect to host
immunicity.date: did not receive HSTS header
immunicity.eu: did not receive HSTS header
-immunicity.host: max-age too low: 0
-immunicity.info: max-age too low: 0
+immunicity.host: could not connect to host
+immunicity.info: could not connect to host
immunicity.online: could not connect to host
immunicity.press: could not connect to host
immunicity.rocks: could not connect to host
immunicity.st: did not receive HSTS header
-immunicity.today: max-age too low: 0
+immunicity.today: could not connect to host
immunicity.top: could not connect to host
-immunicity.win: max-age too low: 0
-immunicity.works: max-age too low: 0
+immunicity.win: could not connect to host
+immunicity.works: could not connect to host
immunicity.world: could not connect to host
imoe.ac.cn: did not receive HSTS header
imolug.org: did not receive HSTS header
imoner.ga: could not connect to host
imoni-blog.net: could not connect to host
imoto.me: could not connect to host
-impas.se: could not connect to host
imperdintechnologies.com: could not connect to host
imperialonlinestore.com: did not receive HSTS header
imperialwebsolutions.com: did not receive HSTS header
-imprenta-es.com: did not receive HSTS header
+implicitdenial.com: did not receive HSTS header
improvingwp.com: could not connect to host
impulse-clan.de: could not connect to host
imrejonk.nl: could not connect to host
imu.li: did not receive HSTS header
imusic.dk: did not receive HSTS header
-imy.life: did not receive HSTS header
-imydl.tech: could not connect to host
+imy.life: could not connect to host
inandeyes.com: did not receive HSTS header
inb4.us: could not connect to host
inbox.li: did not receive HSTS header
inboxen.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
incendiary-arts.com: could not connect to host
inceptionradionetwork.com: could not connect to host
-inche-ali.com: did not receive HSTS header
inchomatic.com: did not receive HSTS header
increasetestosteronelevels.org: could not connect to host
inderagamono.net: could not connect to host
@@ -6234,14 +6729,13 @@ indoorskiassen.nl: did not receive HSTS header
indredouglas.me: could not connect to host
industreiler.com: could not connect to host
industreiler.com.br: could not connect to host
+industriasrenova.com: could not connect to host
industrybazar.com: max-age too low: 2592000
-ineed.coffee: did not receive HSTS header
ineed.com.mt: could not connect to host
-inertianetworks.com: did not receive HSTS header
-inetpub.cn: could not connect to host
inexlog.fr: could not connect to host
inexpensivecomputers.net: could not connect to host
infcof.com: did not receive HSTS header
+inference.biz.tr: could not connect to host
infilock.com: could not connect to host
infinether.net: could not connect to host
infinitiofmarinparts.com: could not connect to host
@@ -6252,18 +6746,18 @@ infinitusgaming.eu: could not connect to host
infinity-freedom.com: could not connect to host
infinity-freedom.de: could not connect to host
infinity-lifestyle.de: could not connect to host
-infinity.to: did not receive HSTS header
inflate-a-bubbles.co.uk: did not receive HSTS header
inflation.ml: could not connect to host
-influo.com: did not receive HSTS header
influxus.com: could not connect to host
info-bay.com: could not connect to host
info-sys.tk: could not connect to host
infoduv.fr: did not receive HSTS header
infopagina.es: did not receive HSTS header
inforichjapan.com: did not receive HSTS header
+inforisposte.com: did not receive HSTS header
informaticapremium.com: did not receive HSTS header
informatik.zone: could not connect to host
+infos-generation.com: did not receive HSTS header
infosec.rip: could not connect to host
infosoph.org: could not connect to host
infotics.es: did not receive HSTS header
@@ -6273,10 +6767,13 @@ infranix.eu: max-age too low: 7360000
infruction.com: could not connect to host
infura.co.th: could not connect to host
ingalabs.hu: could not connect to host
+ingalls.run: could not connect to host
ingesol.fr: did not receive HSTS header
-ingresscode.cn: could not connect to host
+ingresscode.cn: did not receive HSTS header
inhelix.com: could not connect to host
inhive.group: did not receive HSTS header
+iniiter.com: could not connect to host
+initramfs.io: could not connect to host
injapan.nl: could not connect to host
injertoshorticolas.com: did not receive HSTS header
injigo.com: did not receive HSTS header
@@ -6287,7 +6784,6 @@ injust.gq: could not connect to host
injust.me: could not connect to host
injust.ml: could not connect to host
injust.tk: could not connect to host
-inkbunny.net: could not connect to host
inked-guy.de: could not connect to host
inkedguy.de: could not connect to host
inkstory.gr: did not receive HSTS header
@@ -6295,17 +6791,19 @@ inksupply.com: did not receive HSTS header
inku.ovh: did not receive HSTS header
inkvisual.tk: could not connect to host
inleaked.com: could not connect to host
-inmyarea.com: max-age too low: 0
+innerform.com: could not connect to host
innit.be: could not connect to host
innophate-security.nl: could not connect to host
innovamag.ca: did not receive HSTS header
innovativebuildingsolutions.co.za: could not connect to host
innovativeideaz.org: could not connect to host
+inobun.jp: could not connect to host
inondation.ch: could not connect to host
-inorder.website: could not connect to host
-inoxio.de: could not connect to host
+inox.io: did not receive HSTS header
+inoxio.com: did not receive HSTS header
+inoxio.de: did not receive HSTS header
inplacers.ru: did not receive HSTS header
-inquisitive.io: did not receive HSTS header
+inquisitive.io: could not connect to host
insane-bullets.com: could not connect to host
insane.zone: could not connect to host
inschrijfformulier.com: could not connect to host
@@ -6316,16 +6814,19 @@ insouciant.org: could not connect to host
inspirationconcepts.nl: did not receive HSTS header
inspire-av.com: did not receive HSTS header
inspiroinc.com: could not connect to host
-inst.mobi: could not connect to host
+inst.mobi: did not receive HSTS header
instacart.com: did not receive HSTS header
instant-hack.com: did not receive HSTS header
+instant-hack.io: could not connect to host
instantdev.io: could not connect to host
+instaquiz.ru: could not connect to host
instasex.ch: could not connect to host
institutoflordelavida.com: could not connect to host
institutulcultural.ro: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
instruktor.io: could not connect to host
insurance: could not connect to host
int-ext-design.fr: could not connect to host
+integrationinc.com: did not receive HSTS header
integrityingovernmentidaho.com: could not connect to host
intel.gov: did not receive HSTS header
intel.li: could not connect to host
@@ -6333,8 +6834,12 @@ intelbet.es: did not receive HSTS header
intelbet.ro: did not receive HSTS header
intelldynamics.com: could not connect to host
intelliance.eu: could not connect to host
-interboursegeneva.ch: did not receive HSTS header
+interboursegeneva.ch: could not connect to host
interference.io: could not connect to host
+intergenx.co.uk: could not connect to host
+intergenx.com: could not connect to host
+intergenx.org: could not connect to host
+intergenx.org.uk: could not connect to host
interhosts.co.za: could not connect to host
interim-cto.de: could not connect to host
interiorprofesional.com.ar: max-age too low: 604800
@@ -6344,6 +6849,7 @@ interlun.com: could not connect to host
intermezzo-emmerich.de: did not receive HSTS header
intermezzo-emmerich.nl: did not receive HSTS header
internaldh.com: could not connect to host
+internaut.co.za: did not receive HSTS header
internet-aukcion.info: could not connect to host
internet-pornografie.de: did not receive HSTS header
internetbugbounty.org: did not receive HSTS header
@@ -6364,28 +6870,28 @@ intim-uslugi-kazan.net: could not connect to host
intimateperrierjouet.com: could not connect to host
intimici.com.br: could not connect to host
intimtoy.com.ua: could not connect to host
-intocities.de: did not receive HSTS header
intranetsec.fr: could not connect to host
introvertedtravel.space: max-age too low: 0
intrp.net: did not receive HSTS header
-intxt.net: did not receive HSTS header
+intxt.net: could not connect to host
invenio.software: could not connect to host
inverselink.com: could not connect to host
-investcountry.com: did not receive HSTS header
+investcountry.com: could not connect to host
investingdiary.cn: could not connect to host
investingtrader.net: could not connect to host
investnext.com: max-age too low: 43200
-investorloanshub.com: could not connect to host
invictusmc.uk: could not connect to host
+invidio.us: did not receive HSTS header
invinsec.cloud: did not receive HSTS header
+invinsec.com: max-age too low: 86400
invite24.pro: could not connect to host
+invuelto.com: did not receive HSTS header
iodice.org: did not receive HSTS header
iodu.re: could not connect to host
ioiart.eu: could not connect to host
iolife.dk: could not connect to host
ionas-law.ro: did not receive HSTS header
ionc.ca: could not connect to host
-ionote.me: could not connect to host
iop.intuit.com: max-age too low: 86400
iora.fr: could not connect to host
iosmods.com: did not receive HSTS header
@@ -6425,14 +6931,13 @@ ir-saitama.com: could not connect to host
iran-poll.org: could not connect to host
iranianlawschool.com: could not connect to host
iraqidinar.org: did not receive HSTS header
-irazimina.ru: did not receive HSTS header
+irazimina.ru: could not connect to host
irccloud.com: did not receive HSTS header
-ircmett.de: could not connect to host
-ireef.tv: could not connect to host
irelandesign.com: could not connect to host
irinkeby.nu: could not connect to host
irische-segenswuensche.info: did not receive HSTS header
irisdina.de: could not connect to host
+irishmusic.nu: could not connect to host
irland.guide: could not connect to host
irmag.ru: did not receive HSTS header
irmtrudjurke.de: did not receive HSTS header
@@ -6443,6 +6948,7 @@ irugs.ch: did not receive HSTS header
irugs.co.uk: did not receive HSTS header
irugs.com.sg: did not receive HSTS header
irukandjilabs.com: could not connect to host
+irun-telecom.co.uk: could not connect to host
irvinepa.org: max-age too low: 10540800
is-a-furry.org: did not receive HSTS header
isaackabel.cf: could not connect to host
@@ -6453,13 +6959,13 @@ isaackabel.tk: could not connect to host
ischool.co.jp: did not receive HSTS header
isdf.me: could not connect to host
isdown.cz: could not connect to host
-isef-eg.com: did not receive HSTS header
+isef-eg.com: could not connect to host
iserv.fr: did not receive HSTS header
iseulde.com: did not receive HSTS header
-isfriday.com: could not connect to host
ishadowsocks.ltd: could not connect to host
ishillaryclintoninprisonyet.com: could not connect to host
ishome.org: could not connect to host
+isidom.fr: did not receive HSTS header
isipulsa.web.id: did not receive HSTS header
isisfighters.info: could not connect to host
isitamor.pm: could not connect to host
@@ -6469,6 +6975,7 @@ islandinthenet.com: did not receive HSTS header
islandoilsupply.com: max-age too low: 300
islandpumpandtank.com: did not receive HSTS header
islandzero.net: could not connect to host
+islief.com: could not connect to host
isocom.eu: could not connect to host
isoface33.fr: did not receive HSTS header
isogen5.com: could not connect to host
@@ -6478,7 +6985,6 @@ ispringcloud.ru: [Exception... "Component returned failure code: 0x80004005 (NS_
issala.org: did not receive HSTS header
isscouncil.com: could not connect to host
isslshop.com: could not connect to host
-issue.watch: could not connect to host
istanbul.systems: did not receive HSTS header
istanbultravelguide.info: could not connect to host
istaspirtslietas.lv: did not receive HSTS header
@@ -6496,14 +7002,14 @@ items.lv: did not receive HSTS header
itemton.com: could not connect to host
itfaq.nl: did not receive HSTS header
itfensi.net: max-age too low: 6307200
-ithakama.com: did not receive HSTS header
-ithakama.cz: did not receive HSTS header
+itforcc.com: did not receive HSTS header
itinsight.hu: did not receive HSTS header
+itisjustnot.cricket: could not connect to host
+itmanie.cz: could not connect to host
itos.asia: did not receive HSTS header
itos.pl: did not receive HSTS header
itpol.dk: did not receive HSTS header
itpro-mg.de: could not connect to host
-itproject.guru: did not receive HSTS header
itriskltd.com: did not receive HSTS header
its-schindler.de: could not connect to host
its-v.de: could not connect to host
@@ -6513,6 +7019,7 @@ itsamurai.ru: max-age too low: 2592000
itsatrap.nl: could not connect to host
itsecurityassurance.pw: could not connect to host
itsg-faq.de: could not connect to host
+itshka.rv.ua: max-age too low: 604800
itshost.ru: could not connect to host
itsmejohn.org: could not connect to host
itspawned.com: max-age too low: 200
@@ -6549,22 +7056,25 @@ j-lsolutions.com: could not connect to host
j-rickroll-a.pw: could not connect to host
j0ng.xyz: could not connect to host
j15t98j.co.uk: did not receive HSTS header
-ja-publications.agency: did not receive HSTS header
ja-publications.com: did not receive HSTS header
jaan.su: could not connect to host
jaaxypro.com: could not connect to host
jackalworks.com: could not connect to host
-jackdoan.com: could not connect to host
+jackdoan.com: did not receive HSTS header
jackfahnestock.com: could not connect to host
jackops.com: could not connect to host
jackyyf.com: could not connect to host
-jacobparry.ca: could not connect to host
+jacobparry.ca: did not receive HSTS header
jacobsenarquitetura.com: max-age too low: 5184000
+jadopado.com: could not connect to host
+jaepinformatica.com: did not receive HSTS header
jagido.de: did not receive HSTS header
+jaguarwong.xyz: could not connect to host
jahliveradio.com: could not connect to host
jaimechanaga.com: could not connect to host
jaion.ml: could not connect to host
-jaion.tech: could not connect to host
+jakebeardsley.com: could not connect to host
+jakewalker.xyz: could not connect to host
jakincode.army: could not connect to host
jaksel.id: could not connect to host
jaksi.io: did not receive HSTS header
@@ -6580,7 +7090,7 @@ jamesbywater.me: could not connect to host
jamesbywater.me.uk: could not connect to host
jamesbywater.uk: could not connect to host
jamesconroyfinn.com: did not receive HSTS header
-jamescostian.com: did not receive HSTS header
+jamescostian.com: max-age too low: 0
jamesdoell.com: could not connect to host
jamesdoylephoto.com: did not receive HSTS header
jamesevans.is: could not connect to host
@@ -6588,12 +7098,13 @@ jamesf.xyz: could not connect to host
jamesforman.co.nz: did not receive HSTS header
jameshale.me: did not receive HSTS header
jamesheald.com: could not connect to host
+jamesl.ml: could not connect to host
jamesmaurer.com: did not receive HSTS header
+jamesrains.com: could not connect to host
jameswarp.com: could not connect to host
-jami.am: did not receive HSTS header
+jami.am: max-age too low: 0
jamourtney.com: could not connect to host
jamyeprice.com: did not receive HSTS header
-jan-bucher.ch: could not connect to host
jan-cermak.cz: did not receive HSTS header
jan-daniels.de: did not receive HSTS header
jan27.org: did not receive HSTS header
@@ -6610,20 +7121,19 @@ janssen.fm: could not connect to host
janus-engineering.de: did not receive HSTS header
janvari.com: could not connect to host
janvaribalint.com: could not connect to host
+janverlaan.nl: did not receive HSTS header
jap-nope.de: did not receive HSTS header
japan4you.org: could not connect to host
japanbaths.com: could not connect to host
japaneseemoticons.org: did not receive HSTS header
japanesenames.biz: did not receive HSTS header
japangids.nl: could not connect to host
-japansm.com: could not connect to host
japanwide.net: could not connect to host
japaripark.com: could not connect to host
japlex.com: could not connect to host
jaqen.ch: could not connect to host
-jardins-utopie.net: did not receive HSTS header
+jardins-utopie.net: could not connect to host
jaredbates.net: did not receive HSTS header
-jaredfraser.com: could not connect to host
jarnail.ca: could not connect to host
jaroslavc.eu: did not receive HSTS header
jaroslavtrsek.cz: did not receive HSTS header
@@ -6631,6 +7141,7 @@ jarsater.com: could not connect to host
jartza.org: could not connect to host
jasmineconseil.com: did not receive HSTS header
jasoncosper.com: did not receive HSTS header
+jasonradin.com: did not receive HSTS header
jasonrobinson.me: max-age too low: 60
jasonroe.me: did not receive HSTS header
jasonwindholz.com: could not connect to host
@@ -6642,12 +7153,14 @@ javachip.win: could not connect to host
javan.ga: could not connect to host
javascriptlab.fr: could not connect to host
javelinsms.com: could not connect to host
-javfree.me: could not connect to host
javiermixdjs.com: did not receive HSTS header
javilacat.info: could not connect to host
jawn.ca: could not connect to host
jawnelodzkie.org.pl: could not connect to host
+jaxageto.de: did not receive HSTS header
jayblock.com: did not receive HSTS header
+jayf.de: could not connect to host
+jayharris.ca: could not connect to host
jaylen.com.ar: did not receive HSTS header
jayna.design: did not receive HSTS header
jayschulman.com: did not receive HSTS header
@@ -6668,17 +7181,17 @@ jcf-office.com: did not receive HSTS header
jcom-communication-system.biz: could not connect to host
jcor.me: could not connect to host
jcoscia.com: could not connect to host
-jcraft.us: could not connect to host
+jcraft.us: did not receive HSTS header
jctf.io: could not connect to host
-jcyz.cf: could not connect to host
jdav-leipzig.de: could not connect to host
+jdfk.net: could not connect to host
jdgonzalez95.com: did not receive HSTS header
jdh8.org: did not receive HSTS header
jdsf.tk: did not receive HSTS header
jean-remy.ch: could not connect to host
jebengotai.com: did not receive HSTS header
jecho.cn: could not connect to host
-jedayoshi.me: could not connect to host
+jeepeg.com: could not connect to host
jeff.is: did not receive HSTS header
jeff393.com: could not connect to host
jeffersonregan.org: could not connect to host
@@ -6686,6 +7199,7 @@ jeffhuxley.com: could not connect to host
jeffreymagee.com: did not receive HSTS header
jehovahsays.net: could not connect to host
jeil-makes.co.kr: could not connect to host
+jekkt.com: max-age too low: 604800
jellow.nl: did not receive HSTS header
jemoticons.com: did not receive HSTS header
jenjoit.de: could not connect to host
@@ -6695,25 +7209,29 @@ jens.hk: could not connect to host
jensenbanden.no: could not connect to host
jenssen.org: did not receive HSTS header
jeremye77.com: did not receive HSTS header
+jeremymade.com: did not receive HSTS header
jeremywagner.me: did not receive HSTS header
jermann.biz: did not receive HSTS header
+jeroldirvin.com: could not connect to host
jerrypau.ca: could not connect to host
jesorsenville.com: did not receive HSTS header
jessicah.org: could not connect to host
jesuisformidable.nl: could not connect to host
jesuslucas.com: did not receive HSTS header
jet-code.com: could not connect to host
-jetaprices.com: max-age too low: 0
jetlagphotography.com: could not connect to host
jeton.com: did not receive HSTS header
jetsetcharge.com: could not connect to host
jetsetpay.com: could not connect to host
-jettravel.com.mt: did not receive HSTS header
+jettlarue.com: could not connect to host
+jettravel.com.mt: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
jettshome.org: could not connect to host
jetzt-elektromobil.de: could not connect to host
+jeugdkans.nl: could not connect to host
jevisite.ca: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
jewellerydesignstore.com: could not connect to host
jewellerymarvels.com: did not receive HSTS header
+jez.nl: could not connect to host
jfmel.com: did not receive HSTS header
jfmhero.me: could not connect to host
jfnllc.com: did not receive HSTS header
@@ -6721,12 +7239,13 @@ jfx.space: did not receive HSTS header
jh-media.eu: could not connect to host
jhburton.co.uk: could not connect to host
jhburton.uk: could not connect to host
+jhcommunitysports.co.uk: could not connect to host
jhejderup.me: could not connect to host
jhermsmeier.de: could not connect to host
jia1hao.com: could not connect to host
jiaidu.com: could not connect to host
jiangzequn.com: could not connect to host
-jiangzm.com: could not connect to host
+jiangzm.com: did not receive HSTS header
jianjiantv.com: could not connect to host
jiaqiang.vip: could not connect to host
jichi.me: could not connect to host
@@ -6739,11 +7258,10 @@ jimas.eu: did not receive HSTS header
jimenacocina.com: did not receive HSTS header
jimgao.tk: did not receive HSTS header
jimmehcai.com: could not connect to host
-jinancy.fr: could not connect to host
jingyuesi.com: could not connect to host
+jinliming.ml: could not connect to host
jinmaguoji.com: could not connect to host
jinshavip.com: could not connect to host
-jintaiyang123.org: did not receive HSTS header
jiosongs.com: did not receive HSTS header
jira.com: did not receive HSTS header
jirav.io: could not connect to host
@@ -6753,28 +7271,35 @@ jiyue.com: did not receive HSTS header
jiyuu-ni.com: could not connect to host
jiyuu-ni.net: could not connect to host
jjf.org.au: did not receive HSTS header
-jka.io: max-age too low: 86400
+jka.io: did not receive HSTS header
jkb.pics: could not connect to host
jkbuster.com: could not connect to host
jkng.eu: could not connect to host
jko.works: could not connect to host
-jldp.org: did not receive HSTS header
jlhmedia.com: did not receive HSTS header
jm06.com: did not receive HSTS header
jm22.com: could not connect to host
-jmatt.org: could not connect to host
jmb.lc: could not connect to host
jmdekker.it: could not connect to host
-jmvbmx.ch: did not receive HSTS header
+jmoreau.ddns.net: could not connect to host
+jmvbmx.ch: could not connect to host
jn1.me: did not receive HSTS header
+jncde.de: could not connect to host
+joacimeldre.com: did not receive HSTS header
joakimalgroy.com: could not connect to host
joaquimgoliveira.pt: could not connect to host
-job-offer.de: could not connect to host
+job.biz.tr: could not connect to host
jobers.ch: did not receive HSTS header
jobers.pt: did not receive HSTS header
jobflyapp.com: could not connect to host
jobmedic.com: could not connect to host
jobshq.com: did not receive HSTS header
+jobtestprep.de: max-age too low: 0
+jobtestprep.dk: max-age too low: 0
+jobtestprep.fr: max-age too low: 0
+jobtestprep.it: did not receive HSTS header
+jobtestprep.nl: max-age too low: 0
+jobtestprep.se: max-age too low: 0
jodel.ninja: could not connect to host
joe-pagan.com: did not receive HSTS header
joearodriguez.com: could not connect to host
@@ -6794,10 +7319,12 @@ johngaltgroup.com: did not receive HSTS header
johnhgaunt.com: did not receive HSTS header
johnrom.com: could not connect to host
johnsanchez.io: could not connect to host
+johnsiu.com: could not connect to host
johntomasowa.com: could not connect to host
johnverkerk.com: could not connect to host
jointoweb.com: could not connect to host
jomp16.tk: could not connect to host
+jonarcher.info: could not connect to host
jonas-keidel.de: did not receive HSTS header
jonasgroth.se: did not receive HSTS header
jonathan.ir: could not connect to host
@@ -6805,16 +7332,15 @@ jonathandowning.uk: did not receive HSTS header
jonathanmassacand.ch: could not connect to host
jonathanreyes.com: did not receive HSTS header
jonathansanchez.pro: could not connect to host
-jondarby.com: did not receive HSTS header
jonfor.net: could not connect to host
jongha.me: could not connect to host
-jonirrings.com: did not receive HSTS header
jonn.me: could not connect to host
jonnichols.info: could not connect to host
jonsno.ws: could not connect to host
-joonatoona.me: did not receive HSTS header
joostbovee.nl: did not receive HSTS header
-jordanhamilton.me: could not connect to host
+jooto.com: did not receive HSTS header
+jopl.org: did not receive HSTS header
+jordanp.engineer: could not connect to host
jordanstrustcompany.cn: could not connect to host
jordanstrustcompany.ru: could not connect to host
jordikroon.nl: could not connect to host
@@ -6824,10 +7350,10 @@ jornadasciberdefensa2016.es: could not connect to host
jorovik.com: did not receive HSTS header
jorrit.info: max-age too low: 0
josahrens.me: could not connect to host
+josc.com.au: could not connect to host
joseaveleira.es: did not receive HSTS header
josecage.com: could not connect to host
josefottosson.se: max-age too low: 2592000
-josemikkola.fi: could not connect to host
josephre.es: did not receive HSTS header
joshi.su: could not connect to host
joshplant.co.uk: could not connect to host
@@ -6843,7 +7369,6 @@ jpaglier.com: could not connect to host
jpbike.cz: did not receive HSTS header
jpcrochetapparel.com: could not connect to host
jpeaches.xyz: could not connect to host
-jpgangbang.com: could not connect to host
jpod.cc: could not connect to host
jproxx.com: did not receive HSTS header
jptun.com: could not connect to host
@@ -6852,6 +7377,9 @@ jrmd.io: could not connect to host
jrvar.com: did not receive HSTS header
js88.sg: did not receive HSTS header
jsanders.us: did not receive HSTS header
+jsbentertainment.nl: could not connect to host
+jsbevents.nl: could not connect to host
+jsblights.nl: could not connect to host
jsc7776.com: did not receive HSTS header
jsg-technologies.de: did not receive HSTS header
jsjyhzy.cc: could not connect to host
@@ -6862,7 +7390,7 @@ ju1ro.de: did not receive HSTS header
jualautoclave.com: did not receive HSTS header
jualssh.com: could not connect to host
juandesouza.com: did not receive HSTS header
-juelda.com: could not connect to host
+juchheim-methode.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
juiced.gs: did not receive HSTS header
juka.pp.ua: could not connect to host
juku-info.top: did not receive HSTS header
@@ -6881,23 +7409,27 @@ jumbox.xyz: could not connect to host
jumbster.com: could not connect to host
jumparoundreading.co.uk: did not receive HSTS header
jumping-duck.com: could not connect to host
+jumpman-iphone-design.de: could not connect to host
junaos.com: did not receive HSTS header
junaos.xyz: did not receive HSTS header
jundimax.com.br: could not connect to host
junge-selbsthilfe.info: could not connect to host
+jungleculture.co.za: could not connect to host
junglegoat.xyz: did not receive HSTS header
juniwalk.cz: could not connect to host
junjung.me: could not connect to host
junqtion.com: could not connect to host
jupp0r.de: did not receive HSTS header
+juridiqueo.com: could not connect to host
juristas.com.br: did not receive HSTS header
+juristeo.com: could not connect to host
jurke.com: did not receive HSTS header
jurko.cz: could not connect to host
just-pools.co.za: could not connect to host
just2trade.com: did not receive HSTS header
-justgalak.com: could not connect to host
-justice.gov: did not receive HSTS header
justiceforfathers.com: did not receive HSTS header
+justiceo.org: could not connect to host
+justin-tech.com: could not connect to host
justinlemay.com: could not connect to host
justinrudio.com: did not receive HSTS header
justlikethat.hosting: did not receive HSTS header
@@ -6920,11 +7452,11 @@ jysperm.me: did not receive HSTS header
jznet.org: could not connect to host
k-dev.de: could not connect to host
k-rickroll-g.pw: could not connect to host
-k-wallet.com: could not connect to host
+k-wallet.com: did not receive HSTS header
k1cp.com: could not connect to host
-k38.cc: did not receive HSTS header
+k38.cc: max-age too low: 3600
ka-clan.com: could not connect to host
-kaanduman.com: did not receive HSTS header
+kaanduman.com: could not connect to host
kaasbijwijn.nl: did not receive HSTS header
kabinapp.com: could not connect to host
kabuabc.com: could not connect to host
@@ -6941,6 +7473,7 @@ kainz.be: could not connect to host
kaisers.de: did not receive HSTS header
kaiyuewu.com: could not connect to host
kajlovo.cz: could not connect to host
+kakaomilchkuh.de: did not receive HSTS header
kaketalk.com: did not receive HSTS header
kalami.nl: could not connect to host
kaleidomarketing.com: did not receive HSTS header
@@ -6948,6 +7481,9 @@ kaleidoskop-freiburg.de: did not receive HSTS header
kalender.goip.de: could not connect to host
kalilinux.tech: could not connect to host
kaloix.de: could not connect to host
+kam-serwis.pl: could not connect to host
+kamagra-comprare.it: did not receive HSTS header
+kamagra-italia.it: max-age too low: 3600
kamalame.co: could not connect to host
kambodja.guide: could not connect to host
kamcvicit.sk: could not connect to host
@@ -6965,10 +7501,13 @@ kaneo-gmbh.de: did not receive HSTS header
kanganer.com: could not connect to host
kangzaber.com: could not connect to host
kaniklani.co.za: did not receive HSTS header
+kanmitao.com: did not receive HSTS header
kanr.in: could not connect to host
kanscooking.org: could not connect to host
kantorad.io: could not connect to host
+kantv1.com: could not connect to host
kanuvu.de: did not receive HSTS header
+kanzakiranko.jp: could not connect to host
kanzlei-wirtschaftsrecht.berlin: max-age too low: 600000
kaohub.com: could not connect to host
kaomojis.net: did not receive HSTS header
@@ -6980,22 +7519,29 @@ kapucini.si: max-age too low: 0
kaputt.com: could not connect to host
kapverde.guide: could not connect to host
karamna.com: could not connect to host
+karanjthakkar.com: did not receive HSTS header
karaoketonight.com: could not connect to host
+karatekit.co.uk: did not receive HSTS header
karatorian.org: did not receive HSTS header
+karenledger.ca: could not connect to host
+karjala-ski.ru: could not connect to host
karloskontana.tk: could not connect to host
karlproctor.co.uk: could not connect to host
+karlstabo.se: max-age too low: 86400
karmaflux.com: did not receive HSTS header
+karpanhellas.com: could not connect to host
+kars.ooo: could not connect to host
karting34.com: did not receive HSTS header
karuneshjohri.com: could not connect to host
kashdash.ca: could not connect to host
+kashis.com.au: max-age too low: 0
kat.al: could not connect to host
katalogakci.cz: did not receive HSTS header
-kateduggan.net: did not receive HSTS header
kati0.com: could not connect to host
katiaetdavid.fr: could not connect to host
katja-nikolic-design.de: could not connect to host
katoju.co.jp: could not connect to host
-katproxy.al: max-age too low: 0
+katproxy.al: could not connect to host
katproxy.online: could not connect to host
katproxy.site: could not connect to host
katproxy.tech: could not connect to host
@@ -7016,13 +7562,16 @@ kaydan.io: could not connect to host
kayipmurekkep.com: could not connect to host
kayon.cf: could not connect to host
kayscs.com: could not connect to host
+kazanasolutions.de: could not connect to host
kazenojiyu.fr: did not receive HSTS header
-kb3.net: could not connect to host
+kb3.net: did not receive HSTS header
+kbfl.org: could not connect to host
kcluster.io: could not connect to host
kd-plus.pp.ua: could not connect to host
kdata.it: did not receive HSTS header
kdbx.online: could not connect to host
kdm-online.de: did not receive HSTS header
+keaneokelley.com: could not connect to host
kearney.io: could not connect to host
keechain.io: could not connect to host
keeley.gq: could not connect to host
@@ -7033,19 +7582,28 @@ keepassa.co: could not connect to host
keepclean.me: could not connect to host
keepcoalintheground.org: could not connect to host
keepflow.io: could not connect to host
+keepmanager.org: could not connect to host
+keeprubyweird.com: did not receive HSTS header
kefaloniatoday.com: did not receive HSTS header
keihin-chaplin.jp: did not receive HSTS header
+kein-fidget-spinner-werden.de: could not connect to host
keithws.net: could not connect to host
+kejibot.com: could not connect to host
+kekehouse.net: could not connect to host
kellyandantony.com: could not connect to host
-kellyssportsbarandgrill.com: did not receive HSTS header
kelm.me: could not connect to host
+kelp.agency: did not receive HSTS header
ken-electric.com.br: could not connect to host
kenc.dk: max-age too low: 2592000
kenchristensen.dk: max-age too low: 2592000
+kenderbeton-magyarorszag.hu: did not receive HSTS header
+kenderbetonmagyarorszag.hu: did not receive HSTS header
+kenderhaz-magyarorszag.hu: did not receive HSTS header
+kenderhazmagyarorszag.hu: did not receive HSTS header
kenkoelectric.com: did not receive HSTS header
kenman.dk: max-age too low: 2592000
-kennethlim.me: did not receive HSTS header
kennynet.co.uk: could not connect to host
+kensparkesphotography.com: did not receive HSTS header
kentacademiestrust.org.uk: did not receive HSTS header
kepler-seminar.de: did not receive HSTS header
kerangalam.com: did not receive HSTS header
@@ -7058,23 +7616,27 @@ kernl.us: did not receive HSTS header
keshausconsulting.com: could not connect to host
keskeces.com: did not receive HSTS header
kesteren.com: could not connect to host
-kevinbowers.me: could not connect to host
kevindekoninck.com: could not connect to host
+kevinmeijer.nl: could not connect to host
kevinmoreland.com: could not connect to host
+kevinmorssink.nl: could not connect to host
kevinroebert.de: did not receive HSTS header
kevlar.pw: did not receive HSTS header
+kewego.co.uk: could not connect to host
keymaster.lookout.com: did not receive HSTS header
keys.jp: could not connect to host
keyserver.sexy: could not connect to host
kfbrussels.be: could not connect to host
kg-rating.com: could not connect to host
kgb.us: could not connect to host
+kgregorczyk.pl: could not connect to host
kgxtech.com: max-age too low: 2592000
khaganat.net: did not receive HSTS header
khosla.uk: could not connect to host
-khs1994.com: could not connect to host
ki-on.net: did not receive HSTS header
+kiaka.co: did not receive HSTS header
kialo.com: did not receive HSTS header
+kiapps.ovh: could not connect to host
kickass-proxies.org: could not connect to host
kickass.al: could not connect to host
kickasstorrents.gq: could not connect to host
@@ -7082,22 +7644,21 @@ kickerplaza.nl: did not receive HSTS header
kid-dachau.de: did not receive HSTS header
kidbacker.com: could not connect to host
kidkat.cn: could not connect to host
-kiedys.net: could not connect to host
-kiehls.pt: could not connect to host
+kiel-kind.de: could not connect to host
kiel-media.de: did not receive HSTS header
kielderweather.org.uk: did not receive HSTS header
kienlen.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
kieranweightman.me: could not connect to host
kievradio.com: could not connect to host
-kigmbh.com: could not connect to host
kikuzuki.org: could not connect to host
kiladera.be: did not receive HSTS header
kill-paff.com: did not receive HSTS header
-kilobyte22.de: did not receive HSTS header
kimana.pe: could not connect to host
kimberg.co.uk: did not receive HSTS header
+kimberlybeautysoapcompany.com: did not receive HSTS header
kimpost.org: could not connect to host
kimscrazeecastles.co.uk: did not receive HSTS header
+kin.life: could not connect to host
kina.guide: could not connect to host
kinderbuecher-kostenlos.de: did not receive HSTS header
kinderjugendfreizeitverein.de: could not connect to host
@@ -7113,16 +7674,20 @@ kingmanhall.org: could not connect to host
kingpincages.com: could not connect to host
kingqueen.org.uk: did not receive HSTS header
kinkdr.com: could not connect to host
+kinmunity.com: could not connect to host
kinnon.enterprises: could not connect to host
+kinomoto.me: could not connect to host
kinow.com: did not receive HSTS header
kinsmenhomelottery.com: did not receive HSTS header
+kintawifi.com: could not connect to host
kintoandar.com: max-age too low: 0
kintrip.com: did not receive HSTS header
kintzingerfilm.de: did not receive HSTS header
kionetworks.com: did not receive HSTS header
-kipin.fr: did not receive HSTS header
+kipin.fr: could not connect to host
kipira.com: could not connect to host
kiraboshi.xyz: could not connect to host
+kirainmoe.com: did not receive HSTS header
kirara.eu: could not connect to host
kirill.ws: could not connect to host
kirkforsenate.com: could not connect to host
@@ -7131,13 +7696,12 @@ kisa.io: could not connect to host
kisalt.im: could not connect to host
kiss-register.org: could not connect to host
kissart.net: could not connect to host
-kisskiss.ch: could not connect to host
kisstyle.ru: did not receive HSTS header
kisun.co.jp: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
kita.id: did not receive HSTS header
kitabgaul.com: did not receive HSTS header
kitakemon.com: could not connect to host
-kitashop.com.br: did not receive HSTS header
+kitashop.com.br: could not connect to host
kitatec.com.br: could not connect to host
kitchenaccessories.pro: did not receive HSTS header
kitchenchaos.de: could not connect to host
@@ -7153,6 +7717,7 @@ kj1396.net: could not connect to host
kjaermaxi.me: did not receive HSTS header
kjg-bachrain.de: could not connect to host
kjoglum.me: could not connect to host
+kkull.tv: could not connect to host
kkzxak47.com: could not connect to host
klas.or.id: did not receive HSTS header
klatschreime.de: did not receive HSTS header
@@ -7163,6 +7728,7 @@ kleberstoff.xyz: could not connect to host
kleertjesvoordelig.nl: could not connect to host
kleidertauschpartys.de: did not receive HSTS header
kleinerarchitekturfuehrer.de: could not connect to host
+kleinholding.com: could not connect to host
klempnershop.eu: did not receive HSTS header
kleppe.co: could not connect to host
kletterkater.com: did not receive HSTS header
@@ -7176,15 +7742,14 @@ knapen.io: max-age too low: 604800
knccloud.com: could not connect to host
kngk-azs.ru: could not connect to host
knigadel.com: did not receive HSTS header
+knightsblog.de: could not connect to host
knightsweep.com: could not connect to host
knnet.ch: could not connect to host
knowdebt.org: did not receive HSTS header
knowledgesnap.com: could not connect to host
knowledgesnapsites.com: could not connect to host
knownsec.cf: could not connect to host
-knutur.is: could not connect to host
-kobieta.guru: did not receive HSTS header
-kodakit.com: max-age too low: 0
+kobieta.guru: could not connect to host
koddsson.com: did not receive HSTS header
kodexplorer.ml: could not connect to host
kodiaklabs.org: could not connect to host
@@ -7218,7 +7783,7 @@ koopjesnel.nl: could not connect to host
koordinate.net: could not connect to host
koppelvlak.net: could not connect to host
kopular.com: could not connect to host
-kori.ml: could not connect to host
+kori.ml: did not receive HSTS header
koriyoukai.net: did not receive HSTS header
kornersafe.com: did not receive HSTS header
korni22.org: could not connect to host
@@ -7233,6 +7798,7 @@ koukni.cz: did not receive HSTS header
kourpe.online: could not connect to host
kousaku.jp: could not connect to host
kouten-jp.com: could not connect to host
+kovals.sk: could not connect to host
kozmik.co: could not connect to host
kpdyer.com: did not receive HSTS header
kpebetka.net: did not receive HSTS header
@@ -7240,9 +7806,10 @@ kpn-dnssec.com: could not connect to host
kprog.net: did not receive HSTS header
kpvpn.com: could not connect to host
kraigwalker.com: could not connect to host
+krasavchik.by: could not connect to host
+krasota.ru: did not receive HSTS header
krausen.ca: did not receive HSTS header
kravelindo-adventure.com: could not connect to host
-kraynik.com: could not connect to host
krayx.com: could not connect to host
kream.io: did not receive HSTS header
kreavis.com: did not receive HSTS header
@@ -7266,52 +7833,52 @@ kroodle.nl: did not receive HSTS header
krouzkyliduska.cz: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
kruegerrand-wert.de: did not receive HSTS header
krunut.com: did not receive HSTS header
-krupa.net.pl: did not receive HSTS header
krypteia.org: could not connect to host
kryptomech.com: could not connect to host
-ksero.center: could not connect to host
ksfh-mail.de: could not connect to host
-kspg.tv: did not receive HSTS header
+ksham.net: could not connect to host
+ksk-agentur.de: did not receive HSTS header
kstan.me: could not connect to host
-ksukelife.com: did not receive HSTS header
kswcosmetics.com: could not connect to host
kswriter.com: could not connect to host
kteen.info: could not connect to host
ktube.yt: could not connect to host
ku.io: did not receive HSTS header
kuba.guide: could not connect to host
-kubiwa.net: could not connect to host
kubusadvocaten.nl: could not connect to host
+kuchenfeelisa.de: did not receive HSTS header
kuchenschock.de: did not receive HSTS header
kucheryavenkovn.ru: could not connect to host
kucom.it: did not receive HSTS header
kuechenplan.online: could not connect to host
+kuehnel.org: max-age too low: 604800
kueulangtahunanak.net: could not connect to host
kuko-crews.org: could not connect to host
kultmobil.se: did not receive HSTS header
-kum.com: could not connect to host
kummerlaender.eu: did not receive HSTS header
kundenerreichen.com: did not receive HSTS header
kundenerreichen.de: did not receive HSTS header
kuops.com: did not receive HSTS header
+kupdokuchyne.cz: could not connect to host
kupelne-ptacek.sk: did not receive HSTS header
kuppingercole.com: did not receive HSTS header
kura.io: could not connect to host
kurehun.org: could not connect to host
kuro346.moe: could not connect to host
+kuroisalva.xyz: did not receive HSTS header
+kurrietv.nl: did not receive HSTS header
kursprogramisty.pl: could not connect to host
kurtmclester.com: could not connect to host
kurz.pw: could not connect to host
kurzonline.com.br: could not connect to host
kuwago.io: could not connect to host
kvt.berlin: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-kweddingplanning.com: did not receive HSTS header
-kwedo.com: did not receive HSTS header
+kweddingplanning.com: could not connect to host
kwikmed.eu: could not connect to host
kwipi.com: did not receive HSTS header
kwok.tv: did not receive HSTS header
kwondratsch.com: could not connect to host
-kxind.cn: could not connect to host
+kxind.cn: did not receive HSTS header
kyanite.co: could not connect to host
kyberna.xyz: could not connect to host
kykoonn.net: did not receive HSTS header
@@ -7322,6 +7889,8 @@ kylerwood.com: could not connect to host
kylling.io: could not connect to host
kymo.org: did not receive HSTS header
kyochon.fr: could not connect to host
+kyonagashima.com: did not receive HSTS header
+kyouko.nl: could not connect to host
kyujin-office.net: could not connect to host
kzjnet.com: could not connect to host
l-rickroll-i.pw: could not connect to host
@@ -7329,12 +7898,12 @@ l.me.uk: could not connect to host
l18.io: could not connect to host
la-flora-negra.de: could not connect to host
la-grande-jaugue.fr: did not receive HSTS header
-la-maison.eu: did not receive HSTS header
la-retraite-info.com: did not receive HSTS header
la-serendipite.fr: did not receive HSTS header
labaia.info: could not connect to host
labella-umbrella.com: did not receive HSTS header
labelleza.com.br: could not connect to host
+labfox.de: did not receive HSTS header
labiblioafronebrulepas.com: could not connect to host
labina.com.tr: did not receive HSTS header
laboiteanem.fr: could not connect to host
@@ -7345,14 +7914,17 @@ laboutiquemarocaineduconvoyeur.com: could not connect to host
laboutiquemarocaineduconvoyeur.ma: could not connect to host
labrador-retrievers.com.au: did not receive HSTS header
labrasaq8.com: did not receive HSTS header
-labs.directory: did not receive HSTS header
-labs.moscow: did not receive HSTS header
+labs.directory: could not connect to host
+labs.moscow: could not connect to host
lacarpesaintaubinoise.fr: did not receive HSTS header
+lacasa.fr: could not connect to host
lacasseroy.com: could not connect to host
lacaverne.nl: could not connect to host
lacentral.com: did not receive HSTS header
+lachlankidson.net: could not connect to host
lacledeslan.ninja: could not connect to host
lacocinadelila.com: did not receive HSTS header
+lacuevadechauvet.com: did not receive HSTS header
ladadate.com: could not connect to host
ladylikeit.com: could not connect to host
ladylucks.co.uk: could not connect to host
@@ -7360,28 +7932,35 @@ laemen.com: did not receive HSTS header
laemen.nl: could not connect to host
laf.in.net: could not connect to host
lafamillemusique.fr: did not receive HSTS header
+lafema.de: could not connect to host
laforetenchantee.ch: could not connect to host
lafr4nc3.xyz: could not connect to host
lagalerievirtuelle.fr: did not receive HSTS header
lagier.xyz: could not connect to host
lagoza.name: could not connect to host
+laharilais.fr: did not receive HSTS header
lainchan.org: did not receive HSTS header
laisashop.com.br: could not connect to host
lajijonencadebarbera.com: could not connect to host
lakefrontlittleelm.com: did not receive HSTS header
lakehavasuhouserentals.com: did not receive HSTS header
+lakhesis.net: could not connect to host
lalajj.com: could not connect to host
laltroweb.it: did not receive HSTS header
lamaland.ru: did not receive HSTS header
lambda-complex.org: could not connect to host
lambdafive.co.uk: could not connect to host
lamomebijou.paris: did not receive HSTS header
-lampl.info: did not receive HSTS header
-lana.swedbank.se: did not receive HSTS header
+lampl.info: could not connect to host
+lamtv.com.mx: could not connect to host
+lan.biz.tr: could not connect to host
+lan2k.org: max-age too low: 86400
lanauzedesigns.com: did not receive HSTS header
lanboll.com: could not connect to host
+lanbyte.se: could not connect to host
lancehoteis.com: did not receive HSTS header
lancehoteis.com.br: did not receive HSTS header
+lancork.net: did not receive HSTS header
land-links.org: did not receive HSTS header
landbetweenthelakes.us: did not receive HSTS header
landell.ml: could not connect to host
@@ -7392,20 +7971,20 @@ landscape.canonical.com: max-age too low: 2592000
landscapingmedic.com: did not receive HSTS header
langenbach.rocks: could not connect to host
langendorf-ernaehrung-training.de: could not connect to host
-langendries.eu: could not connect to host
+langendries.eu: did not receive HSTS header
langhun.me: could not connect to host
-langkahteduh.com: did not receive HSTS header
laniakean.com: did not receive HSTS header
lanonfire.com: could not connect to host
lansinoh.co.uk: did not receive HSTS header
-lanzainc.xyz: did not receive HSTS header
+lanzainc.xyz: could not connect to host
laobox.fr: could not connect to host
laohei.org: could not connect to host
laospage.com: did not receive HSTS header
laplaceduvillage.net: could not connect to host
laquack.com: could not connect to host
-lared.ovh: could not connect to host
+lared.ovh: did not receive HSTS header
laredsemanario.com: could not connect to host
+larky.top: could not connect to host
lasepiataca.com: did not receive HSTS header
lasercloud.ml: could not connect to host
lashstuff.com: did not receive HSTS header
@@ -7420,6 +7999,7 @@ latg.com: max-age too low: 300
lathamlabs.com: could not connect to host
lathamlabs.net: could not connect to host
lathamlabs.org: could not connect to host
+lathen-wahn.de: did not receive HSTS header
latinred.com: could not connect to host
latitude42technology.com: did not receive HSTS header
latus.xyz: could not connect to host
@@ -7427,6 +8007,7 @@ laufcampus.com: did not receive HSTS header
laufseminare-laufreisen.com: did not receive HSTS header
lauftrainer-ausbildung.com: did not receive HSTS header
laurel4th.org: did not receive HSTS header
+laurelspaandlash.com: did not receive HSTS header
laureltv.org: did not receive HSTS header
laurent-e-levy.com: did not receive HSTS header
lausitzer-widerstand.de: could not connect to host
@@ -7436,9 +8017,9 @@ lavine.ch: did not receive HSTS header
lavito.cz: could not connect to host
lawly.org: could not connect to host
laxatus.com: could not connect to host
-laxiongames.es: could not connect to host
+laxiongames.es: did not receive HSTS header
layer8.tk: could not connect to host
-layoutsatzunddruck.de: could not connect to host
+laymans911.info: could not connect to host
lazerus.net: could not connect to host
lazulu.com: could not connect to host
lazytux.de: did not receive HSTS header
@@ -7447,20 +8028,22 @@ lbrlh.tk: could not connect to host
lbrli.tk: could not connect to host
lbrls.tk: could not connect to host
lbrt.xyz: could not connect to host
-lcbizsolutions.com: did not receive HSTS header
lclarkpdx.com: could not connect to host
lcti.biz: could not connect to host
ldarby.me.uk: could not connect to host
leadbook.ru: max-age too low: 604800
-leadership9.com: did not receive HSTS header
+leadership9.com: could not connect to host
leakedminecraft.net: could not connect to host
leakreporter.net: could not connect to host
leaks.directory: could not connect to host
leanclub.org: could not connect to host
+leaodarodesia.com.br: could not connect to host
leardev.de: did not receive HSTS header
learn-smart.uk: did not receive HSTS header
+learnedhacker.com: could not connect to host
learnedovo.com: did not receive HSTS header
learnfrenchfluently.com: could not connect to host
+learningman.top: did not receive HSTS header
learningorder.com: could not connect to host
lebal.se: could not connect to host
lebrun.org: could not connect to host
@@ -7469,6 +8052,7 @@ led-tl-wereld.nl: did not receive HSTS header
leddruckalarm.de: did not receive HSTS header
ledgerscope.net: could not connect to host
ledhouse.sk: did not receive HSTS header
+ledlampor365.se: could not connect to host
leebiblestudycentre.net: could not connect to host
leebiblestudycentre.org: could not connect to host
leefindlow.com: could not connect to host
@@ -7477,7 +8061,9 @@ leen.io: could not connect to host
leerkotte.eu: could not connect to host
leetsaber.com: did not receive HSTS header
legal.farm: could not connect to host
-legalinmotion.es: did not receive HSTS header
+legaleus.co.uk: could not connect to host
+legalisepeacebloom.com: could not connect to host
+legalrobot-uat.com: could not connect to host
legaltip.eu: could not connect to host
legarage.org: did not receive HSTS header
legavenue.com.br: did not receive HSTS header
@@ -7486,29 +8072,33 @@ legitaxi.com: did not receive HSTS header
legymnase.eu: did not receive HSTS header
lehtinen.xyz: could not connect to host
leighneithardt.com: could not connect to host
-leiming.co: could not connect to host
+leilautourdumon.de: did not receive HSTS header
leinir.dk: did not receive HSTS header
leitner.com.au: did not receive HSTS header
-leiyun.me: did not receive HSTS header
+lelehei.com: could not connect to host
lellyboi.ml: could not connect to host
lelongbank.com: did not receive HSTS header
+lelubre.info: did not receive HSTS header
lemon.co: could not connect to host
-lemonrockbiketours.com: could not connect to host
+lemonrockbiketours.com: did not receive HSTS header
+lemonthy.ca: could not connect to host
+lemonthy.com: could not connect to host
lemp.io: did not receive HSTS header
lenders.direct: could not connect to host
lengyelnyelvoktatas.hu: could not connect to host
lengyelul.hu: could not connect to host
+lenkunz.me: could not connect to host
lenn1.de: did not receive HSTS header
lennarth.com: could not connect to host
-lennartheinrich.de: could not connect to host
+lennartheinrich.de: did not receive HSTS header
lennier.info: could not connect to host
lennyfaces.net: did not receive HSTS header
lenovogaming.com: could not connect to host
lentri.com: did not receive HSTS header
+lenzw.de: did not receive HSTS header
leob.in: could not connect to host
leon-jaekel.com: could not connect to host
leonardcamacho.me: could not connect to host
-leonhooijer.nl: could not connect to host
leonmahler.consulting: did not receive HSTS header
leopold.email: could not connect to host
leopoldina.net: did not receive HSTS header
@@ -7516,23 +8106,24 @@ leopotamgroup.com: could not connect to host
leovanna.co.uk: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
lepiquillo.fr: did not receive HSTS header
lepont.pl: could not connect to host
-leponton-lorient.fr: did not receive HSTS header
lerasenglish.com: max-age too low: 0
lerlivros.online: could not connect to host
-lerner.moscow: did not receive HSTS header
+lerner.moscow: could not connect to host
les-corsaires.net: could not connect to host
les-voitures-electriques.com: max-age too low: 2592000
-lesbiansslaves.com: could not connect to host
-lesbofight.com: could not connect to host
lescomptoirsdepierrot.com: could not connect to host
lesdouceursdeliyana.com: could not connect to host
lesecuadors.com: did not receive HSTS header
lesformations.net: did not receive HSTS header
lesh.eu: could not connect to host
-lesliekearney.com: did not receive HSTS header
+lesliekearney.com: could not connect to host
lesperlesdunet.fr: could not connect to host
lesquatredauphins.fr: did not receive HSTS header
lesquerda.cat: did not receive HSTS header
+lessing.consulting: did not receive HSTS header
+letempsdunefleur.be: could not connect to host
+leter.io: did not receive HSTS header
+lethbridgecoffee.com: did not receive HSTS header
letitfly.me: could not connect to host
letraba.com: could not connect to host
letras.mus.br: did not receive HSTS header
@@ -7540,15 +8131,16 @@ letreview.ph: could not connect to host
letsgetintouch.com: could not connect to host
letsmultiplayerplay.com: did not receive HSTS header
letsnet.org: could not connect to host
+letsorganise.uk: did not receive HSTS header
letstox.com: could not connect to host
lettland-firma.com: could not connect to host
letustravel.tk: could not connect to host
-levatc.tk: did not receive HSTS header
+levatc.tk: could not connect to host
level-10.net: could not connect to host
levelum.com: did not receive HSTS header
levelupwear.com: max-age too low: 7889238
leveredge.net: could not connect to host
-levert.ch: max-age too low: 0
+levert.ch: could not connect to host
lewisjuggins.co.uk: did not receive HSTS header
lewisseals.com: could not connect to host
lexiphanic.co.uk: did not receive HSTS header
@@ -7562,7 +8154,10 @@ lgiswa.com.au: did not receive HSTS header
lgrs.com.au: did not receive HSTS header
lgsg.us: could not connect to host
lgts.se: could not connect to host
-lheinrich.com: did not receive HSTS header
+lhalbert.xyz: could not connect to host
+lhasaapso.com.br: could not connect to host
+lheinrich.com: could not connect to host
+lheinrich.de: did not receive HSTS header
lheinrich.org: could not connect to host
lhsj28.com: could not connect to host
lhsj68.com: could not connect to host
@@ -7571,16 +8166,17 @@ liaillustr.at: did not receive HSTS header
liam-is-a-nig.ga: could not connect to host
liam-w.com: could not connect to host
liamjack.fr: could not connect to host
+liangbp.com: could not connect to host
+lianwen.kim: could not connect to host
lianye.in: could not connect to host
lianyexiuchang.in: could not connect to host
liaoshuma.com: could not connect to host
liaozheqi.cn: could not connect to host
liaronce.win: could not connect to host
-liautard.fr: could not connect to host
libanco.com: could not connect to host
libdeer.so: could not connect to host
libertas-tech.com: could not connect to host
-libertins.date: could not connect to host
+libertins.date: did not receive HSTS header
libertyrp.org: did not receive HSTS header
libfte.org: did not receive HSTS header
librairie-asie.com: did not receive HSTS header
@@ -7589,11 +8185,12 @@ librechan.net: could not connect to host
libricks.fr: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
librisulibri.it: did not receive HSTS header
licence-registry.com: could not connect to host
+liceo.cn: did not receive HSTS header
liceserv.com: could not connect to host
lichess4545.com: did not receive HSTS header
lichess4545.tv: did not receive HSTS header
-lickmypussy.us: could not connect to host
lidl-selection.at: did not receive HSTS header
+liduan.com: could not connect to host
liebach.me: did not receive HSTS header
liebestarot.at: did not receive HSTS header
lied8.eu: could not connect to host
@@ -7604,45 +8201,50 @@ life-time.nl: did not receive HSTS header
lifecoachproviders.com: did not receive HSTS header
lifeguard.aecom.com: did not receive HSTS header
lifeinitsownway.com: could not connect to host
+lifeinsurances.pro: could not connect to host
+lifeinsurances24.com: could not connect to host
lifemarque.co.uk: did not receive HSTS header
lifeng.us: did not receive HSTS header
-lifescience-japan.com: max-age too low: 0
lifeskillsdirect.com: did not receive HSTS header
lifestyler.me: could not connect to host
lifetimemoneymachine.com: did not receive HSTS header
lifeventure.co.uk: did not receive HSTS header
lightarmory.com: could not connect to host
+lightcloud.com: did not receive HSTS header
lightning-ashe.com: did not receive HSTS header
lightnovelsekai.com: could not connect to host
lightpaste.com: could not connect to host
-lighttp.com: could not connect to host
-lightworkerandempathsupport.com: max-age too low: 300
+lighttherapydevice.com: did not receive HSTS header
lightworx.io: did not receive HSTS header
lignemalin.com: could not connect to host
-lignenet.com: could not connect to host
+lignemax.com: did not receive HSTS header
+lignenet.com: did not receive HSTS header
like.lgbt: could not connect to host
likenosis.com: could not connect to host
lila.pink: did not receive HSTS header
lilapmedia.com: could not connect to host
lilismartinis.com: could not connect to host
-lillpopp.eu: max-age too low: 10
+lillpopp.eu: did not receive HSTS header
lilpwny.com: could not connect to host
lilycms.com: could not connect to host
lilygreen.co.za: did not receive HSTS header
limalama.eu: max-age too low: 1
limeyeti.com: could not connect to host
limiteddata.co.uk: did not receive HSTS header
+limitget.com: could not connect to host
limodo-shop.de: did not receive HSTS header
limpens.net: did not receive HSTS header
limpido.it: could not connect to host
lindberg.io: did not receive HSTS header
+lindholmen.club: did not receive HSTS header
lineauniformes.com.br: could not connect to host
-linext.cn: did not receive HSTS header
+linext.cn: could not connect to host
lingerie.net.br: did not receive HSTS header
lingerielovers.com.br: did not receive HSTS header
-lingerieonline.com.br: could not connect to host
+lingerieonline.com.br: did not receive HSTS header
lingolia.com: did not receive HSTS header
lingros-test.tk: could not connect to host
+lingting.vip: could not connect to host
linguaquote.com: did not receive HSTS header
linguatrip.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
linhaoyi.com: could not connect to host
@@ -7651,6 +8253,7 @@ linkage.ph: did not receive HSTS header
linkages.org: could not connect to host
linksanitizer.com: could not connect to host
linksextremist.at: could not connect to host
+linkthisstatus.ml: could not connect to host
linley.de: could not connect to host
linmi.cc: did not receive HSTS header
linno.me: could not connect to host
@@ -7667,9 +8270,12 @@ linuxforyou.com: could not connect to host
linuxgeek.ro: could not connect to host
linuxmint.cz: could not connect to host
linuxmonitoring.net: could not connect to host
-linvx.org: could not connect to host
+linvx.org: did not receive HSTS header
+linxmind.eu: could not connect to host
+lionlyrics.com: could not connect to host
liquid.solutions: did not receive HSTS header
liquidcomm.net: could not connect to host
+liquimoly.market: did not receive HSTS header
liquorsanthe.in: could not connect to host
lisaco.de: could not connect to host
lisbongold.com: did not receive HSTS header
@@ -7687,13 +8293,16 @@ little.pw: could not connect to host
littledisney.ro: did not receive HSTS header
littlefreelibrary.org: did not receive HSTS header
littlelife.co.uk: did not receive HSTS header
+littleqiu.net: could not connect to host
+littleservice.cn: could not connect to host
liud.im: could not connect to host
liujunyang.com: did not receive HSTS header
liukang.tech: could not connect to host
+liushuyu.tk: could not connect to host
liv3ly.com: did not receive HSTS header
+livechatlady.info: did not receive HSTS header
livedemo.io: could not connect to host
livej.am: could not connect to host
-livejasmin.dk: could not connect to host
liverewrite.com: could not connect to host
liviababynet.com.br: could not connect to host
livinghealthywithchocolate.com: did not receive HSTS header
@@ -7701,15 +8310,18 @@ livrariahugodesaovitor.com.br: could not connect to host
lixiang.one: could not connect to host
lixingcong.com: could not connect to host
liyang.pro: did not receive HSTS header
+lizzythepooch.com: did not receive HSTS header
lkiserver.com: could not connect to host
llamasweet.tech: could not connect to host
+lll.st: could not connect to host
llslb.com: could not connect to host
llvm.us: could not connect to host
lmrcouncil.gov: could not connect to host
ln.io: could not connect to host
lnbeauty.ru: max-age too low: 0
lnoldan.com: could not connect to host
-loacg.com: did not receive HSTS header
+loacg.com: could not connect to host
+loadingdeck.com: did not receive HSTS header
loadso.me: could not connect to host
loafbox.com: could not connect to host
loanmatch.sg: could not connect to host
@@ -7722,6 +8334,8 @@ lobste.rs: did not receive HSTS header
locais.org: could not connect to host
localchum.com: could not connect to host
localdrive.me: could not connect to host
+localnetwork.nz: could not connect to host
+location-fichier-email.com: could not connect to host
locationvoitureautriche.com: could not connect to host
locationvoiturefinlande.com: could not connect to host
locationvoitureirlande.com: could not connect to host
@@ -7736,6 +8350,7 @@ locksport.org.nz: could not connect to host
locktheirphone.com: could not connect to host
lockyourcomputer.pw: did not receive HSTS header
locomotive.ca: did not receive HSTS header
+locomotive.net.br: could not connect to host
locvis.ru: did not receive HSTS header
lode.li: could not connect to host
lodgesdureynou.fr: did not receive HSTS header
@@ -7748,6 +8363,7 @@ logfile.at: did not receive HSTS header
logfile.ch: did not receive HSTS header
logic8.ml: could not connect to host
logicaladvertising.com: could not connect to host
+logicoma.com: could not connect to host
logicsale.com: did not receive HSTS header
logicsale.de: did not receive HSTS header
logicsale.fr: did not receive HSTS header
@@ -7755,25 +8371,23 @@ logicsale.it: did not receive HSTS header
logimagine.com: could not connect to host
login.corp.google.com: max-age too low: 7776000 (error ignored - included regardless)
login.persona.org: could not connect to host
+logingate.hu: could not connect to host
loginseite.com: could not connect to host
logistify.com.mx: did not receive HSTS header
lognot.net: could not connect to host
logymedia.com: could not connect to host
loisircreatif.net: did not receive HSTS header
lojadocristaozinho.com.br: did not receive HSTS header
-lojadoprazer.com.br: could not connect to host
lojashowdecozinha.com.br: could not connect to host
lojasviavento.com.br: could not connect to host
lojavalcapelli.com.br: could not connect to host
-loli.bz: could not connect to host
+loli.bz: did not receive HSTS header
loli.vip: could not connect to host
lolicon.info: could not connect to host
lolicore.ch: could not connect to host
lolidunno.com: could not connect to host
lollaconcept.com.br: could not connect to host
-lonasdigital.com: could not connect to host
lonbali.com: did not receive HSTS header
-london-transfers.com: did not receive HSTS header
londoncalling.co: did not receive HSTS header
londonlanguageexchange.com: could not connect to host
londonseedcentre.co.uk: could not connect to host
@@ -7797,6 +8411,7 @@ lostarq.com: could not connect to host
lostg.com: did not receive HSTS header
lostinsecurity.com: could not connect to host
lostinweb.eu: could not connect to host
+loteks.de: did not receive HSTS header
lothai.re: did not receive HSTS header
lothuytinhsi.com: could not connect to host
lotl.ru: could not connect to host
@@ -7814,22 +8429,25 @@ loveandloyalty.se: could not connect to host
lovelifelovelive.com: could not connect to host
lovelive-anime.tk: could not connect to host
lovelive-anime.tokyo: could not connect to host
+lovelive.us: could not connect to host
lovelyblogacademy.com: did not receive HSTS header
+lovelychalets-peisey.com: did not receive HSTS header
lovelycorral.com: did not receive HSTS header
lovelyfriends.org: did not receive HSTS header
+lovemen.cc: did not receive HSTS header
lovemysafetynet.com: did not receive HSTS header
loveto.at: could not connect to host
-lovingearth.net: max-age too low: 0
lovingpenguin.com: did not receive HSTS header
lowhangingfruitgrabber.com: could not connect to host
lowt.us: could not connect to host
lowtherpavilion.co.uk: did not receive HSTS header
loxis.be: did not receive HSTS header
+loyaleco.it: could not connect to host
loyaltech.ch: could not connect to host
lpak.nl: could not connect to host
lpgram.ga: could not connect to host
+lpm-uk.com: did not receive HSTS header
lrhsclubs.com: could not connect to host
-lrhstsa.com: could not connect to host
ls-a.org: did not receive HSTS header
ls-reallife.de: did not receive HSTS header
ls-rp.es: did not receive HSTS header
@@ -7844,31 +8462,39 @@ ltbytes.com: could not connect to host
ltechnologygroup.com: did not receive HSTS header
ltransferts.com: could not connect to host
ltu.social: could not connect to host
+luan.ma: did not receive HSTS header
lubot.net: could not connect to host
lucas-garte.com: did not receive HSTS header
+lucascantor.com: did not receive HSTS header
lucascodes.com: could not connect to host
lucasgaland.com: could not connect to host
lucaterzini.com: could not connect to host
lucidlogs.com: could not connect to host
+luckystarfishing.com: did not receive HSTS header
luclu7.pw: could not connect to host
ludwig.click: did not receive HSTS header
lufthansaexperts.com: max-age too low: 2592000
luis-checa.com: could not connect to host
+luisgf.es: could not connect to host
luisv.me: could not connect to host
luk.photo: could not connect to host
lukasunger.cz: could not connect to host
lukasunger.net: could not connect to host
lukaszdolan.com: did not receive HSTS header
-lukasztkacz.com: did not receive HSTS header
+lukasztkacz.com: could not connect to host
lukeng.me: could not connect to host
lukonet.com: did not receive HSTS header
luludapomerania.com: could not connect to host
+luma.family: could not connect to host
+luma.pink: could not connect to host
lumd.me: could not connect to host
lumer.tech: could not connect to host
lumi.do: did not receive HSTS header
luminancy.com: could not connect to host
+lunapatch.com: max-age too low: 7889238
lunarift.com: could not connect to host
lunarrift.net: could not connect to host
+lunarsoft.net: did not receive HSTS header
luneta.nearbuysystems.com: could not connect to host
lunight.ml: could not connect to host
luno.io: could not connect to host
@@ -7881,7 +8507,6 @@ luoxingyu.ml: could not connect to host
luripump.se: could not connect to host
lusis.fr: did not receive HSTS header
lusis.net: could not connect to host
-lustige-zitate.com: did not receive HSTS header
lustrumxi.nl: could not connect to host
luther.fi: could not connect to host
luxcraft.eng.br: could not connect to host
@@ -7895,18 +8520,19 @@ lydia-und-simon.de: could not connect to host
lydiagorstein.com: could not connect to host
lylares.com: did not receive HSTS header
lyonelkaufmann.ch: did not receive HSTS header
-lyonl.com: did not receive HSTS header
+lyonl.com: could not connect to host
+lyscnd.com: could not connect to host
lysergion.com: could not connect to host
lyuba.fr: could not connect to host
lyukaacom.ru: could not connect to host
lzahq.tech: did not receive HSTS header
-lzh.one: could not connect to host
lzkill.com: did not receive HSTS header
lzqii.cn: could not connect to host
lzzr.me: did not receive HSTS header
m-ali.xyz: did not receive HSTS header
m-generator.com: could not connect to host
m-rickroll-v.pw: could not connect to host
+m-warrior.tk: could not connect to host
m.gparent.org: could not connect to host
m.nu: did not receive HSTS header
m0wef.uk: could not connect to host
@@ -7920,6 +8546,8 @@ maarten.nyc: could not connect to host
maartenprovo.be: did not receive HSTS header
maartenterpstra.xyz: could not connect to host
mac-torrents.me: did not receive HSTS header
+mac-world.pl: did not receive HSTS header
+mac.biz.tr: could not connect to host
macandtonic.com: did not receive HSTS header
macbolo.com: could not connect to host
macchaberrycream.com: could not connect to host
@@ -7932,6 +8560,7 @@ mack.space: could not connect to host
macleodnc.com: did not receive HSTS header
macsandcheesedreams.com: could not connect to host
macustar.eu: did not receive HSTS header
+madandpissedoff.com: could not connect to host
madcatdesign.de: did not receive HSTS header
maddin.ga: could not connect to host
madebyfalcon.co.uk: did not receive HSTS header
@@ -7942,15 +8571,17 @@ mademoiselle-emma.be: could not connect to host
mademoiselle-emma.fr: could not connect to host
maderwin.com: did not receive HSTS header
madesoftware.com.br: could not connect to host
-madesurveying.co.uk: max-age too low: 0
madnetwork.org: could not connect to host
+madpeople.net: max-age too low: 2592000
madrants.net: could not connect to host
+madweb.design: did not receive HSTS header
mafamane.com: could not connect to host
mafiareturns.com: max-age too low: 2592000
magazinedabeleza.net: could not connect to host
magebankin.com: did not receive HSTS header
magenx.com: did not receive HSTS header
magia360.com: did not receive HSTS header
+magical.rocks: could not connect to host
magicball.co: could not connect to host
magnacumlaude.co: could not connect to host
magneticanvil.com: did not receive HSTS header
@@ -7973,18 +8604,17 @@ mailing-jbgg.com: could not connect to host
mailon.ga: could not connect to host
main-street-seo.com: did not receive HSTS header
main-unit.com: could not connect to host
-mainlywrenches.co: max-age too low: 0
maintainerheaven.ch: could not connect to host
maisalto.ind.br: could not connect to host
-maitrechaton.fr: could not connect to host
maitriser-son-stress.com: could not connect to host
+majkl.xyz: could not connect to host
+majkl578.cz: could not connect to host
majncloud.tk: could not connect to host
make-pizza.info: could not connect to host
makedonien.guide: could not connect to host
makeit-so.de: could not connect to host
makeitdynamic.com: could not connect to host
makemyvape.co.uk: max-age too low: 7889238
-makersatwork.com: could not connect to host
makerstuff.net: did not receive HSTS header
makeshiftco.de: did not receive HSTS header
makeuplove.nl: could not connect to host
@@ -7997,15 +8627,18 @@ malerversand.de: did not receive HSTS header
malesbdsm.com: could not connect to host
malfait.nl: could not connect to host
malgraph.net: could not connect to host
-malibubeachrecoverycenter.com: did not receive HSTS header
+malibubeachrecoverycenter.com: could not connect to host
maljaars-media.nl: could not connect to host
malmstroms-co.se: could not connect to host
malone.link: could not connect to host
maltes.website: could not connect to host
malvy.kiev.ua: could not connect to host
+malware.watch: did not receive HSTS header
malwaretips.com: did not receive HSTS header
malwre.io: could not connect to host
+maly.io: did not receive HSTS header
malya.fr: could not connect to host
+mamacobaby.com: could not connect to host
mamaison.io: could not connect to host
mamastore.eu: could not connect to host
mamaxi.org: did not receive HSTS header
@@ -8014,7 +8647,6 @@ mammothmail.net: could not connect to host
mammothmail.org: could not connect to host
mammut.space: could not connect to host
mamochka.org.ua: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-manaboutahor.se: did not receive HSTS header
manage.zenpayroll.com: did not receive HSTS header
manage4all.com: could not connect to host
manageall.de: could not connect to host
@@ -8022,14 +8654,14 @@ managed-varnish.de: did not receive HSTS header
manageforall.com: could not connect to host
manageforall.de: could not connect to host
managemynetsuite.com: did not receive HSTS header
+managewp.org: could not connect to host
manalu.cz: did not receive HSTS header
manantial.mx: could not connect to host
manav-it.de: could not connect to host
mandala-ausmalbilder.de: did not receive HSTS header
mandm.servebeer.com: could not connect to host
mandpress.com: did not receive HSTS header
-mangapoi.com: could not connect to host
-mangazuki.co: could not connect to host
+mangazuki.co: did not receive HSTS header
maniadeprazer.com.br: could not connect to host
manifestbin.com: did not receive HSTS header
manipulatedtme.com: could not connect to host
@@ -8045,19 +8677,21 @@ mansfieldplacevt.com: did not receive HSTS header
manshop24.com: could not connect to host
mansion-note.com: did not receive HSTS header
manududu.com.br: could not connect to host
+manuel-schefczyk.de: could not connect to host
manylots.ru: could not connect to host
maomaofuli.vip: could not connect to host
maosi.xin: could not connect to host
+mapasmundi.com.br: could not connect to host
maple5.com: did not receive HSTS header
maplenorth.co: did not receive HSTS header
mapresidentielle.fr: did not receive HSTS header
-marabumadrid.com: did not receive HSTS header
maranatha.pl: did not receive HSTS header
marbinvest.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-marcaudefroy.com: could not connect to host
+marcberman.co: could not connect to host
marcbuehlmann.com: did not receive HSTS header
marcelmarnitz.com: could not connect to host
marcelparra.com: could not connect to host
+marcelsiegert.com: could not connect to host
marchagen.nl: did not receive HSTS header
marche-nordic-jorat.ch: could not connect to host
marchhappy.tech: did not receive HSTS header
@@ -8073,17 +8707,15 @@ marcush.de: could not connect to host
mardelcupon.com: could not connect to host
mare92.cz: could not connect to host
margaretrosefashions.co.uk: could not connect to host
-marialempke.com: max-age too low: 0
+mariacristinadoces.com.br: did not receive HSTS header
mariannematthew.com: could not connect to host
marianwehlus.de: did not receive HSTS header
marie-curie.fr: could not connect to host
marie-elisabeth.dk: did not receive HSTS header
marie-en-provence.com: did not receive HSTS header
+marie.club: could not connect to host
marienschule-sundern.de: did not receive HSTS header
-marinela.com.mx: max-age too low: 86400
-marinelausa.com: max-age too low: 86400
mariusschulte.de: did not receive HSTS header
-marjoleindens.be: could not connect to host
mark-a-hydrant.com: did not receive HSTS header
mark-armstrong-gaming.com: could not connect to host
markayapilandirma.com: could not connect to host
@@ -8091,7 +8723,6 @@ markcp.me: could not connect to host
market.android.com: did not receive HSTS header (error ignored - included regardless)
marketgot.com: could not connect to host
marketing-advertising.eu: could not connect to host
-marketing91.com: did not receive HSTS header
marketingdesignu.cz: could not connect to host
marketingromania.ro: did not receive HSTS header
markllego.com: could not connect to host
@@ -8103,10 +8734,14 @@ markrobin.de: did not receive HSTS header
marksill.com: could not connect to host
marktboten.de: did not receive HSTS header
markusabraham.com: did not receive HSTS header
+markuskeppeler.no-ip.biz: could not connect to host
+markusueberallassetmanagement.de: could not connect to host
+markusueberallconsulting.de: could not connect to host
markusweimar.de: did not receive HSTS header
marlen.cz: did not receive HSTS header
marleyresort.com: did not receive HSTS header
-maroc-bivouac.com: did not receive HSTS header
+marqperso.ch: could not connect to host
+marquepersonnelle.ch: could not connect to host
marriottvetcareers.com: could not connect to host
marshut.net: could not connect to host
martialc.be: could not connect to host
@@ -8119,24 +8754,19 @@ martinestyle.com: could not connect to host
martineve.com: did not receive HSTS header
martinkup.cz: did not receive HSTS header
martinp.no: could not connect to host
-martinreed.net: did not receive HSTS header
martinrogalla.com: did not receive HSTS header
martins.im: could not connect to host
-martynhare.co.uk: could not connect to host
-martynhare.uk: could not connect to host
marumagic.com: did not receive HSTS header
marvinkeller.de: did not receive HSTS header
marxist.party: could not connect to host
marykshoup.com: could not connect to host
masa-yoga.com: did not receive HSTS header
masa.li: could not connect to host
-masaze-hanka.cz: could not connect to host
mashek.net: could not connect to host
mashnew.com: could not connect to host
masjidtawheed.net: did not receive HSTS header
maskinkultur.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
maskt.pw: could not connect to host
-massage-vitalite.fr: did not receive HSTS header
massivum.de: did not receive HSTS header
massot.eu: did not receive HSTS header
mastd.fr: could not connect to host
@@ -8150,28 +8780,33 @@ mastichor.info: could not connect to host
mastimtibetano.com: could not connect to host
masto.io: could not connect to host
mastod.life: could not connect to host
+mastodon.blue: could not connect to host
mastodon.co.nz: could not connect to host
mastodon.direct: could not connect to host
mastodon.engineering: could not connect to host
mastodon.expert: could not connect to host
-mastodon.fun: did not receive HSTS header
+mastodon.fun: could not connect to host
mastodon.my: could not connect to host
mastodon.org.uk: did not receive HSTS header
-mastodon.pl: could not connect to host
+mastodon.pl: did not receive HSTS header
mastodones.club: could not connect to host
masty.nl: could not connect to host
+masumreza.tk: could not connect to host
mat99.dk: could not connect to host
-matarrosabierzo.com: did not receive HSTS header
+matarrosabierzo.com: could not connect to host
matatall.com: did not receive HSTS header
maternalsafety.org: did not receive HSTS header
mateusmeyer.com.br: could not connect to host
mateuszpilszek.pl: could not connect to host
+matheo-schefczyk.de: could not connect to host
mathers.ovh: did not receive HSTS header
mathias.re: did not receive HSTS header
mathijskingma.nl: could not connect to host
+matildajaneclothing.com: did not receive HSTS header
matillat.ovh: did not receive HSTS header
matlabjo.ir: could not connect to host
matomeplus.co: could not connect to host
+matratzentester.com: did not receive HSTS header
matrict.com: could not connect to host
matrip.de: could not connect to host
matrix.ac: could not connect to host
@@ -8185,11 +8820,10 @@ matthew-carson.info: could not connect to host
matthewemes.com: did not receive HSTS header
matthewprenger.com: could not connect to host
matthewtester.com: did not receive HSTS header
-matthiassteen.be: max-age too low: 0
+matthiassteen.be: could not connect to host
matthiasweiler.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
mattisam.com: could not connect to host
mattressinsider.com: max-age too low: 3153600
-mattsvensson.com: max-age too low: 0
mattwb65.com: did not receive HSTS header
matty.digital: did not receive HSTS header
matze.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
@@ -8202,9 +8836,10 @@ mavisang.cf: could not connect to host
mawe.red: could not connect to host
maxhorvath.com: could not connect to host
maxibanki.ovh: could not connect to host
+maxicore.co.za: could not connect to host
maxima.at: did not receive HSTS header
-maximdens.be: could not connect to host
-maximov.space: could not connect to host
+maximelouet.me: did not receive HSTS header
+maximov.space: did not receive HSTS header
maxkeller.io: did not receive HSTS header
maxmachine.ind.br: could not connect to host
maxserver.com: did not receive HSTS header
@@ -8212,9 +8847,9 @@ maya.mg: could not connect to host
maybeul.com: could not connect to host
maynardnetworks.com: could not connect to host
mayoristassexshop.com: did not receive HSTS header
+mazurlabs.tk: could not connect to host
mazyun.com: did not receive HSTS header
mazz-tech.com: could not connect to host
-mazzotta.me: did not receive HSTS header
mbanq.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
mbconsultancy.nu: did not receive HSTS header
mbdrogenbos-usedcars.be: could not connect to host
@@ -8232,27 +8867,27 @@ mcdanieldevelopmentservices.com: could not connect to host
mcdonalds.ru: did not receive HSTS header
mcga.media: could not connect to host
mcgavocknissanwichitaparts.com: could not connect to host
+mchopkins.net: could not connect to host
mcideas.tk: could not connect to host
mcjackk77.com: could not connect to host
mckinley1.com: could not connect to host
mckinleytk.com: could not connect to host
-mcl.gg: did not receive HSTS header
mclab.su: max-age too low: 2592000
mclist.it: could not connect to host
mcmillansedationdentistry.com: did not receive HSTS header
+mcnoobs.pro: could not connect to host
mcooperlaw.com: did not receive HSTS header
mcsa-usa.org: could not connect to host
-mcsniper.co: could not connect to host
mcsnovatamabayan.com: could not connect to host
-mctherealm.net: could not connect to host
mcuexchange.com: did not receive HSTS header
mcuong.tk: could not connect to host
md-student.com: did not receive HSTS header
mdfnet.se: did not receive HSTS header
mdscomp.net: did not receive HSTS header
mdwftw.com: could not connect to host
-me-dc.com: could not connect to host
+me-dc.com: did not receive HSTS header
meadowfenfarm.com: could not connect to host
+meadowviewfarms.org: could not connect to host
mealz.com: did not receive HSTS header
measuretwice.com: did not receive HSTS header
meat-education.com: could not connect to host
@@ -8263,10 +8898,10 @@ mecenat-cassous.com: did not receive HSTS header
mechok.ru: could not connect to host
medallia.io: could not connect to host
media-access.online: did not receive HSTS header
-media-courses.com: could not connect to host
mediacru.sh: max-age too low: 0
mediadandy.com: could not connect to host
-mediafinancelab.org: did not receive HSTS header
+mediaexpert.fr: did not receive HSTS header
+mediafinancelab.org: could not connect to host
mediamag.am: max-age too low: 0
mediastorm.us: did not receive HSTS header
mediawikicn.org: could not connect to host
@@ -8275,10 +8910,13 @@ medienservice-fritz.de: did not receive HSTS header
medifab.online: did not receive HSTS header
medirich.co: could not connect to host
meditek-dv.ru: could not connect to host
-mediter-simplement.com: could not connect to host
+mediter-simplement.com: did not receive HSTS header
mediterenopmaandag.nl: did not receive HSTS header
+mediumraw.org: did not receive HSTS header
mediweed.tk: could not connect to host
medm-test.com: could not connect to host
+medmarkt24.com: max-age too low: 3600
+medpot.net: did not receive HSTS header
medstreaming.com: did not receive HSTS header
medy-me.com: could not connect to host
medzinenews.com: did not receive HSTS header
@@ -8290,16 +8928,17 @@ mega-aukcion.ru: could not connect to host
megadrol.com: could not connect to host
megakiste.de: could not connect to host
megam.host: could not connect to host
+megamarkey.de: did not receive HSTS header
megashur.se: did not receive HSTS header
megauction.tk: could not connect to host
meghudson.com: could not connect to host
-mehhh.xyz: could not connect to host
+mego.cloud: could not connect to host
meifrench.com: could not connect to host
-meiju.video: did not receive HSTS header
-mein-gesundheitsmanager.com: max-age too low: 0
+meiju.video: could not connect to host
meincloudspeicher.de: could not connect to host
meine-reise-gut-versichert.de: did not receive HSTS header
meinebo.it: could not connect to host
+meisterritter.de: did not receive HSTS header
meizufans.eu: could not connect to host
melakaltenegger.at: did not receive HSTS header
melangebrasil.com: could not connect to host
@@ -8309,6 +8948,8 @@ melenchatsmelenchiens.fr: could not connect to host
melf.nl: could not connect to host
melhoresdominios.net: could not connect to host
melhorproduto.com.br: could not connect to host
+melikoff.es: could not connect to host
+melina-schefczyk.de: could not connect to host
melodic.com.au: could not connect to host
melody-lyrics.com: could not connect to host
melonstudios.net: could not connect to host
@@ -8322,13 +8963,12 @@ memdoc.org: could not connect to host
memeblast.ninja: could not connect to host
memepasmal.org: could not connect to host
memetrash.co.uk: could not connect to host
-memoire-resistance-ariege.fr: could not connect to host
memory-plus-180.com: could not connect to host
memorygame.io: did not receive HSTS header
memorytrace.space: could not connect to host
menaraannonces.com: could not connect to host
menchez.me: could not connect to host
-menntagatt.is: could not connect to host
+menotag.com: did not receive HSTS header
mensachterdepatient.nl: max-age too low: 2592000
mensmaximus.de: did not receive HSTS header
mentax.net: did not receive HSTS header
@@ -8343,24 +8983,24 @@ merccorp.de: max-age too low: 0
mercedes-benz-usedcars.be: could not connect to host
mercury-studio.com: did not receive HSTS header
mereckas.com: could not connect to host
-meredithkm.info: could not connect to host
-mergozzo.com: could not connect to host
+meredithkm.info: did not receive HSTS header
+mergozzo.com: did not receive HSTS header
merimatka.fi: could not connect to host
meritz.rocks: could not connect to host
mersinunivercity.com: could not connect to host
merson.me: could not connect to host
meshlab.co: could not connect to host
meshok.info: could not connect to host
-meshotes.com: max-age too low: 7776000
+meshotes.com: max-age too low: 8640000
meskdeals.com: could not connect to host
mesmoque.com: could not connect to host
messagescelestes.ca: did not receive HSTS header
metadistribution.com: did not receive HSTS header
-metaether.net: could not connect to host
metagrader.com: could not connect to host
-metalsculpture.co.uk: did not receive HSTS header
+metalsculpture.co.uk: max-age too low: 0
metasyntactic.xyz: could not connect to host
metebalci.com: did not receive HSTS header
+meteosherbrooke.com: did not receive HSTS header
meteosky.net: could not connect to host
meter.md: could not connect to host
metin2blog.de: did not receive HSTS header
@@ -8370,21 +9010,26 @@ metricaid.com: did not receive HSTS header
metrix-money-ptc.com: could not connect to host
metrix.design: could not connect to host
metzgerei-birkenhof.de: could not connect to host
+meu-smartphone.com: did not receive HSTS header
meucosmetico.com.br: could not connect to host
meuemail.pro: could not connect to host
+meupedido.online: could not connect to host
+meusigno.com: could not connect to host
mexbt.com: could not connect to host
mexicanbusinessweb.mx: did not receive HSTS header
-mexicansbook.ru: did not receive HSTS header
+mexicansbook.ru: could not connect to host
mexior.nl: could not connect to host
meyeraviation.com: could not connect to host
mfcatalin.com: could not connect to host
mfedderke.com: could not connect to host
+mfgod.com: did not receive HSTS header
mfiles.pl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
mfrsgb45.org: did not receive HSTS header
mft.global: could not connect to host
mfxer.com: could not connect to host
mgdigital.fr: did not receive HSTS header
mgiay.com: did not receive HSTS header
+mgoessel.de: did not receive HSTS header
mh-bloemen.co.jp: could not connect to host
mhdsyarif.com: did not receive HSTS header
mhealthdemocamp.com: could not connect to host
@@ -8395,10 +9040,11 @@ mhx.pw: could not connect to host
mia.ac: could not connect to host
mia.to: could not connect to host
mianfei-vpn.com: could not connect to host
+michael-schefczyk.de: could not connect to host
michael-schilling.de: did not receive HSTS header
michaelcullen.name: could not connect to host
michaeldemuth.com: could not connect to host
-michaelfitzpatrickruth.com: could not connect to host
+michaelfitzpatrickruth.com: did not receive HSTS header
michaelklos.nl: could not connect to host
michaelmorpurgo.com: did not receive HSTS header
michaeln.net: did not receive HSTS header
@@ -8414,7 +9060,7 @@ michasfahrschule.com: could not connect to host
michel.pt: did not receive HSTS header
michelledonelan.co.uk: did not receive HSTS header
michiganmetalartwork.com: max-age too low: 7889238
-mickusit.com.au: max-age too low: 0
+mico.world: could not connect to host
miconware.de: could not connect to host
micro-dv.ru: could not connect to host
micro-rain-systems.com: could not connect to host
@@ -8428,6 +9074,7 @@ midonet.org: did not receive HSTS header
midriversmotorsllc.com: did not receive HSTS header
midterm.us: could not connect to host
midwestwomenworkers.org: could not connect to host
+miegl.cz: could not connect to host
miemie.jp: could not connect to host
mieterschutzkartei.de: could not connect to host
migeeks.de: did not receive HSTS header
@@ -8435,24 +9082,26 @@ mightydicks.io: could not connect to host
mightydicks.tech: could not connect to host
mightymillionslottery.com: did not receive HSTS header
mightymillionsraffle.com: did not receive HSTS header
-mightysounds.cz: max-age too low: 0
migrantskillsregister.org.uk: could not connect to host
migrator.co: could not connect to host
miguksaram.com: could not connect to host
mijn-email.org: could not connect to host
+mijndiad.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
mijnkredietpaspoort.nl: could not connect to host
+mika.cat: could not connect to host
mikadesign.se: did not receive HSTS header
mikaela.info: did not receive HSTS header
-mikaelemilsson.net: did not receive HSTS header
+mikaelemilsson.net: could not connect to host
mikeburns.com: could not connect to host
mikedugan.org: did not receive HSTS header
mikeg.de: did not receive HSTS header
+mikegarnett.co.uk: could not connect to host
mikek.work: did not receive HSTS header
mikeology.org: could not connect to host
mikepair.net: could not connect to host
mikes.tk: could not connect to host
-mikeybailey.org: could not connect to host
mikeybot.com: could not connect to host
+mikhirev.ru: could not connect to host
mikii.club: could not connect to host
mikk.cz: could not connect to host
mikro-inwestycje.co.uk: did not receive HSTS header
@@ -8467,7 +9116,7 @@ milesgeek.com: did not receive HSTS header
military-portal.cz: did not receive HSTS header
militarycarlot.com: did not receive HSTS header
militaryconsumer.gov: did not receive HSTS header
-millenniumweb.com: max-age too low: 86400
+millibitcoin.jp: could not connect to host
millionairessecrets.com: could not connect to host
millstep.de: did not receive HSTS header
milonga.tips: could not connect to host
@@ -8477,10 +9126,8 @@ mimoderoupa.pt: could not connect to host
min.kiwi: could not connect to host
minantavla.se: could not connect to host
mind.sh: did not receive HSTS header
-mindbodycontinuum.com: did not receive HSTS header
mindcraft.ga: could not connect to host
mine.world: could not connect to host
-mine260309.me: could not connect to host
minecraft-forum.cf: could not connect to host
minecraft-forum.ga: could not connect to host
minecraft-forum.gq: could not connect to host
@@ -8494,9 +9141,9 @@ minecraftforums.gq: could not connect to host
minecraftforums.ml: could not connect to host
minecraftserverz.com: could not connect to host
minecraftvoter.com: could not connect to host
+minecrell.net: max-age too low: 172800
mineover.es: could not connect to host
minetude.com: could not connect to host
-mingkyaa.com: could not connect to host
mingo.nl: max-age too low: 2592000
mingy.ddns.net: could not connect to host
mingyueli.com: could not connect to host
@@ -8508,11 +9155,12 @@ minimaliston.com: could not connect to host
minimoo.se: could not connect to host
minipainting.net: could not connect to host
minis-hip.de: max-age too low: 172800
+miniskipper.at: did not receive HSTS header
minkondom.nu: could not connect to host
minnesotadata.com: could not connect to host
minor.news: could not connect to host
minora.io: could not connect to host
-minoris.se: could not connect to host
+minoris.se: did not receive HSTS header
mipiaci.co.nz: did not receive HSTS header
mipiaci.com.au: did not receive HSTS header
miragrow.com: could not connect to host
@@ -8531,13 +9179,14 @@ misgluteosperfectos.com: did not receive HSTS header
misiondelosangeles-mailing.com: did not receive HSTS header
misiru.jp: could not connect to host
missrain.tw: could not connect to host
-misssex.de: could not connect to host
missycosmeticos.com.br: could not connect to host
mist.ink: could not connect to host
mister.hosting: did not receive HSTS header
misterl.net: did not receive HSTS header
+misuzu.moe: could not connect to host
mitarbeiter-pc.de: did not receive HSTS header
mitchellrenouf.ca: could not connect to host
+mitchelmore.ca: could not connect to host
mitior.net: could not connect to host
mitm-software.badssl.com: could not connect to host
mittenhacks.com: could not connect to host
@@ -8555,12 +9204,12 @@ mk-dizajn.com: could not connect to host
mkacg.com: could not connect to host
mkakh.xyz: could not connect to host
mkasu.org: could not connect to host
-mkes.com: did not receive HSTS header
mkfs.be: could not connect to host
mkfs.fr: could not connect to host
+mkg-palais-hanau.de: did not receive HSTS header
mkp-deutschland.de: did not receive HSTS header
mkplay.io: could not connect to host
-mktemp.org: could not connect to host
+mkw.st: could not connect to host
mlcdn.co: could not connect to host
mlpchan.net: could not connect to host
mlpepilepsy.org: could not connect to host
@@ -8570,6 +9219,7 @@ mmgazhomeloans.com: did not receive HSTS header
mmilog.hu: could not connect to host
mmmm.com: could not connect to host
mmstick.tk: could not connect to host
+mnd.sc: could not connect to host
mnec.io: could not connect to host
mneeb.de: could not connect to host
mnemotiv.com: could not connect to host
@@ -8577,7 +9227,6 @@ mnetworkingsolutions.co.uk: could not connect to host
mnmt.no: did not receive HSTS header
mnwt.nl: could not connect to host
moar.so: did not receive HSTS header
-moas.design: did not receive HSTS header
moas.photos: did not receive HSTS header
mobaircon.com: did not receive HSTS header
mobile-gesundheit.org: could not connect to host
@@ -8590,27 +9239,28 @@ mobileritelushi.com: could not connect to host
mobilethreat.net: could not connect to host
mobilethreatnetwork.net: could not connect to host
mobilpass.no: could not connect to host
+mobimalin.com: could not connect to host
mobiwalk.com: could not connect to host
mobix5.com: did not receive HSTS header
mobmp4.co: could not connect to host
mobmp4.com: could not connect to host
mobmp4.info: could not connect to host
mobot.sg: did not receive HSTS header
-mochanstore.com: did not receive HSTS header
mochoko.com: could not connect to host
mockmyapp.com: could not connect to host
mocloud.eu: could not connect to host
+mocloud.win: could not connect to host
mocsuite.club: could not connect to host
modaperuimport.com: could not connect to host
modded-minecraft-server-list.com: could not connect to host
moddedark.com: could not connect to host
mode-marine.com: could not connect to host
+modecaso.com: could not connect to host
model9.io: did not receive HSTS header
modelsclub.org.ua: could not connect to host
modemagazines.co.uk: could not connect to host
moderatortv.de: did not receive HSTS header
modernibytovytextil.cz: could not connect to host
-moderntld.net: could not connect to host
mododo.de: could not connect to host
modx.by: max-age too low: 31536
modx.io: could not connect to host
@@ -8636,14 +9286,15 @@ mojapraca.sk: did not receive HSTS header
mojefilmy.xyz: could not connect to host
mojizuri.jp: max-age too low: 86400
mokadev.com: did not receive HSTS header
-molokai.org: could not connect to host
mols.me: did not receive HSTS header
-momfulfilled.com: did not receive HSTS header
+momfulfilled.com: could not connect to host
mommel.com: could not connect to host
mommelonline.de: could not connect to host
momoka.moe: could not connect to host
mon-a-lisa.com: did not receive HSTS header
+mon-mobile.com: could not connect to host
mona.lu: could not connect to host
+monalisa.wtf: could not connect to host
monarca.systems: could not connect to host
monasterialis.eu: could not connect to host
monautoneuve.fr: did not receive HSTS header
@@ -8660,8 +9311,14 @@ monika-sokol.de: did not receive HSTS header
monitaure.io: could not connect to host
monitman.solutions: could not connect to host
monitori.ng: could not connect to host
+monkieteel.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
monochrometoys.com: could not connect to host
+monodukuri.cafe: did not receive HSTS header
+monodzukuri.cafe: did not receive HSTS header
+monoseis-monotica.gr: max-age too low: 300
monotsuku.com: could not connect to host
+monozukuri.cafe: did not receive HSTS header
+monsieurbureau.com: max-age too low: 0
montanacures.org: could not connect to host
montanana.com: did not receive HSTS header
monteurzimmerfrei.de: could not connect to host
@@ -8669,16 +9326,15 @@ montonicms.com: could not connect to host
moo.pet: did not receive HSTS header
moobo.xyz: did not receive HSTS header
moodifiers.com: could not connect to host
-moodzshop.com: did not receive HSTS header
moon.lc: could not connect to host
moonagic.io: did not receive HSTS header
moonchart.co.uk: did not receive HSTS header
-moonkin.eu: could not connect to host
moonless.net: could not connect to host
moonloupe.com: could not connect to host
moonysbouncycastles.co.uk: could not connect to host
moosemanstudios.com: could not connect to host
moov.is: could not connect to host
+moovablestorage.com: could not connect to host
moparcraft.com: could not connect to host
moparcraft.org: could not connect to host
moparisthebest.biz: could not connect to host
@@ -8701,7 +9357,7 @@ morotech.com.br: could not connect to host
morpheusx.at: could not connect to host
morpheusxaut.net: could not connect to host
morpork.xyz: could not connect to host
-morz.org: could not connect to host
+morz.org: max-age too low: 0
mosaique-lachenaie.fr: could not connect to host
moskva.guide: did not receive HSTS header
moso.io: did not receive HSTS header
@@ -8716,20 +9372,22 @@ motomorgen.com: could not connect to host
motorbiketourhanoi.com: could not connect to host
motorcheck.ie: did not receive HSTS header
motoroilinfo.com: did not receive HSTS header
-motorsportdiesel.com: did not receive HSTS header
+motovio.de: did not receive HSTS header
motransportinfo.com: did not receive HSTS header
mottvd.com: could not connect to host
+moube.fr: could not connect to host
moudicat.com: max-age too low: 6307200
moula.com.au: did not receive HSTS header
moumaobuchiyu.com: could not connect to host
-mountainadventureseminars.com: could not connect to host
+mountainadventureseminars.com: did not receive HSTS header
mountainmusicpromotions.com: did not receive HSTS header
movabletype.net: max-age too low: 3600
+move.mil: did not receive HSTS header
movepin.com: could not connect to host
movie4k.fyi: could not connect to host
movie4k.life: could not connect to host
-movie4kto.site: could not connect to host
-moviedollars.com: could not connect to host
+moviedollars.com: did not receive HSTS header
+movienang.com: max-age too low: 0
moviesabout.net: could not connect to host
moviespur.info: did not receive HSTS header
moving-pixtures.de: could not connect to host
@@ -8740,69 +9398,70 @@ moy-gorod.od.ua: did not receive HSTS header
moyu.host: did not receive HSTS header
mozart-game.cz: could not connect to host
mozartgame.cz: could not connect to host
-mozgb.ru: could not connect to host
+mozgb.ru: did not receive HSTS header
mozillians.org: did not receive HSTS header
mozoa.net: could not connect to host
mozzilla.cz: could not connect to host
mp3donusturucu.com: did not receive HSTS header
mp3donusturucu.net: did not receive HSTS header
-mp3gratuiti.com: could not connect to host
-mp3juices.is: max-age too low: 0
+mp3juices.is: could not connect to host
mpi-sa.fr: did not receive HSTS header
mpkossen.com: did not receive HSTS header
+mpn.poker: did not receive HSTS header
mpserver12.org: could not connect to host
+mr-coffee.net: could not connect to host
mr-hosting.com: could not connect to host
+mr-nachhilfe.de: did not receive HSTS header
mrafrohead.com: could not connect to host
mrawe.com: could not connect to host
mrburtbox.com: could not connect to host
mrdani.net: could not connect to host
mrdleisure.co.uk: did not receive HSTS header
mredsanders.net: did not receive HSTS header
-mremallin.ca: could not connect to host
mrettich.org: did not receive HSTS header
mrhc.ru: could not connect to host
mrhee.com: did not receive HSTS header
mrizzio.com: could not connect to host
mrjooz.com: did not receive HSTS header
+mrksk.com: could not connect to host
mrleonardo.com: did not receive HSTS header
mrliu.me: could not connect to host
mrnh.tk: could not connect to host
-mrning.com: could not connect to host
mrnonz.com: max-age too low: 0
mrparker.pw: did not receive HSTS header
mrpopat.in: did not receive HSTS header
+mrpropop.com: did not receive HSTS header
mrs-shop.com: did not receive HSTS header
-mrsbairds.com: max-age too low: 86400
mruganiepodspacja.pl: could not connect to host
msc-seereisen.net: could not connect to host
msgallery.tk: could not connect to host
+msp66.de: could not connect to host
mstd.tokyo: did not receive HSTS header
mstdn-tech.jp: could not connect to host
mstdn.io: did not receive HSTS header
mstdn.nl: did not receive HSTS header
+mstiles92.com: did not receive HSTS header
msz-fotografie.de: could not connect to host
mszaki.com: did not receive HSTS header
mt.me.uk: could not connect to host
mtamaki.com: could not connect to host
mtau.com: max-age too low: 2592000
-mtcgf.com: did not receive HSTS header
+mtcgf.com: could not connect to host
mtd.ovh: could not connect to host
mtdn.jp: could not connect to host
mtfgnettoyage.fr: could not connect to host
mtg-esport.de: did not receive HSTS header
+mtg-tutor.de: could not connect to host
mtirc.co: could not connect to host
mtn.cc: could not connect to host
-muchohentai.com: could not connect to host
-muehlemann.net: could not connect to host
-muevetumundo.com.mx: max-age too low: 86400
+muenchberger.com: could not connect to host
+muffet.pw: could not connect to host
muga.space: could not connect to host
muj-svet.cz: could not connect to host
mujadin.se: did not receive HSTS header
-mulenvo.com: could not connect to host
-mulheres18.com: could not connect to host
-mulherportuguesa.com: max-age too low: 0
+mulenvo.com: did not receive HSTS header
mullen.net.au: did not receive HSTS header
-multimarques.com: max-age too low: 86400
+multiterm.org: did not receive HSTS header
multivpn.cn.com: could not connect to host
multivpn.com.de: could not connect to host
multivpn.com.ua: could not connect to host
@@ -8810,15 +9469,16 @@ multivpn.fr: could not connect to host
mumei.space: did not receive HSTS header
mundoalpha.com.br: did not receive HSTS header
mundodapoesia.com: did not receive HSTS header
-munduch.cz: could not connect to host
munecoscabezones.com: did not receive HSTS header
munich-rage.de: did not receive HSTS header
munkiepus.com: did not receive HSTS header
-munpanel.com: did not receive HSTS header
+munpanel.com: could not connect to host
munrabi.com: could not connect to host
munuc.org: did not receive HSTS header
munzee.com: did not receive HSTS header
muonium.ch: could not connect to host
+murdercube.com: could not connect to host
+murfy.kiwi: could not connect to host
muriburi.land: could not connect to host
muriburiland.com: could not connect to host
murodese.org: could not connect to host
@@ -8827,22 +9487,18 @@ murraycolin.org: could not connect to host
murrayrun.com: did not receive HSTS header
mursu.directory: could not connect to host
murz.tv: could not connect to host
-muscleangels.com: could not connect to host
-museminder2.com: could not connect to host
+museminder2.com: did not receive HSTS header
museumstreak.com: did not receive HSTS header
musewearflipflops.com: could not connect to host
mushman.tk: could not connect to host
mushroomandfern.com: could not connect to host
musi.cx: could not connect to host
-musicalbim.com.br: max-age too low: 0
musikkfondene.no: did not receive HSTS header
musikzug-bookholzberg.de: did not receive HSTS header
muslimbanter.co.za: could not connect to host
-mustardking.me: did not receive HSTS header
mustika.cf: did not receive HSTS header
mutamatic.com: could not connect to host
mutuelle-obligatoire-pme.fr: did not receive HSTS header
-muusika.fun: could not connect to host
muzgra.in: did not receive HSTS header
muzykaprzeszladoplay.pl: could not connect to host
mvanmarketing.nl: did not receive HSTS header
@@ -8865,12 +9521,13 @@ myandroidtools.pro: could not connect to host
mybudget.xyz: could not connect to host
mybuilderinlondon.co.uk: did not receive HSTS header
mybusiness.cm: did not receive HSTS header
+mycamda.com: could not connect to host
mychocolateweightloss.com: could not connect to host
myclientsplus.com: did not receive HSTS header
mycollab.net: could not connect to host
mycontrolmonitor.com: could not connect to host
mycoted.com: did not receive HSTS header
-myday.eu.com: could not connect to host
+myday.eu.com: did not receive HSTS header
mydeos.com: could not connect to host
mydigipass.com: did not receive HSTS header
mydmdi.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
@@ -8878,6 +9535,7 @@ mydnaresults.com: could not connect to host
mydnatest.com: did not receive HSTS header
mydriversedge.com: did not receive HSTS header
myepass.bg: could not connect to host
+myepass.de: could not connect to host
myfappening.org: could not connect to host
myfdic.gov: could not connect to host
myfunworld.de: could not connect to host
@@ -8890,16 +9548,17 @@ mygpsite.com: did not receive HSTS header
mygreatjob.eu: could not connect to host
myhair.asia: did not receive HSTS header
myicare.org: could not connect to host
-myiocc.org: could not connect to host
+myiocc.org: did not receive HSTS header
myip.tech: max-age too low: 2592000
mykolab.com: did not receive HSTS header
mykreuzfahrt.de: could not connect to host
+mylene-chandelier.me: did not receive HSTS header
mylighthost.com: did not receive HSTS header
mylocalsearch.co.uk: did not receive HSTS header
mymixtapez.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-mymp3singer.co: did not receive HSTS header
+mymp3singer.co: could not connect to host
mymp3singer.net: could not connect to host
-mymp3singer.site: did not receive HSTS header
+mymp3singer.site: could not connect to host
mymsr.de: did not receive HSTS header
myndcommunication.com: could not connect to host
mynetblog.com: did not receive HSTS header
@@ -8920,33 +9579,34 @@ mypanier.com: max-age too low: 7889238
mypension.ca: could not connect to host
myphonebox.de: could not connect to host
myptsite.com: could not connect to host
-myqdu.cn: did not receive HSTS header
+myqdu.cn: could not connect to host
+myqdu.com: could not connect to host
myrig.io: could not connect to host
myrig.net: could not connect to host
myrsa.in: did not receive HSTS header
+myruststats.com: could not connect to host
mysa.is: could not connect to host
mysecretrewards.com: could not connect to host
myspa.asia: did not receive HSTS header
-mystatus24.com: did not receive HSTS header
mystery-science-theater-3000.de: did not receive HSTS header
mysteryblog.de: did not receive HSTS header
-mysterysear.ch: could not connect to host
+mystown.org: could not connect to host
+mystudy.me: could not connect to host
mytc.fr: could not connect to host
mythlogic.com: did not receive HSTS header
mythslegendscollection.com: did not receive HSTS header
mytravelblog.de: could not connect to host
-mywallets.io: could not connect to host
myweb360.de: did not receive HSTS header
+myxbox.gr: did not receive HSTS header
myzone.com: did not receive HSTS header
-mziulu.me: could not connect to host
mzlog.win: could not connect to host
-mzzj.de: could not connect to host
+mzorn.photography: could not connect to host
n-rickroll-e.pw: could not connect to host
-n0099.cf: could not connect to host
+n0099.cf: did not receive HSTS header
n0rm.ru: could not connect to host
n0s.de: did not receive HSTS header
+n2host.eu: could not connect to host
n2x.in: could not connect to host
-n3twork.net: could not connect to host
n4l.pw: could not connect to host
n64chan.me: did not receive HSTS header
n8ch.net: could not connect to host
@@ -8958,14 +9618,16 @@ nabytko.cz: could not connect to host
nacktetatsachen.at: did not receive HSTS header
nadaquenosepas.com: could not connect to host
nadia.pt: could not connect to host
+nagaragem.com.br: did not receive HSTS header
nagios.by: did not receive HSTS header
nagoya-kyuyo.com: could not connect to host
naiaspa.fr: did not receive HSTS header
naiharngym.com: did not receive HSTS header
-nais.me: did not receive HSTS header
+nais.me: could not connect to host
najedlo.sk: could not connect to host
nakamastreamingcommunity.com: could not connect to host
nakhonidc.com: could not connect to host
+nakitbonus2.com: could not connect to host
nakliyatsirketi.biz: could not connect to host
nakuro.de: could not connect to host
nalao-company.com: did not receive HSTS header
@@ -8979,13 +9641,13 @@ named.ga: could not connect to host
nameme.xyz: could not connect to host
nametaken-cloud.duckdns.org: could not connect to host
namethatbone.com: could not connect to host
-namethatporn.com: could not connect to host
namikawatetsuji.jp: could not connect to host
namorico.me: could not connect to host
-namskra.is: could not connect to host
nan.ci: did not receive HSTS header
nan.zone: could not connect to host
+nanami.moe: did not receive HSTS header
nanderson.me: could not connect to host
+nanfangstone.com: could not connect to host
nani.io: did not receive HSTS header
naniki.co.uk: could not connect to host
nanogeneinc.com: could not connect to host
@@ -9000,7 +9662,6 @@ narko.space: could not connect to host
narodniki.com: did not receive HSTS header
narviz.com: did not receive HSTS header
nasarawanewsonline.com: could not connect to host
-nashira.cz: did not receive HSTS header
nasmocopati.com: could not connect to host
nasralmabrooka.com: did not receive HSTS header
nastysclaw.com: could not connect to host
@@ -9010,7 +9671,7 @@ natalieandjoshua.com: could not connect to host
natalt.org: did not receive HSTS header
natalydanilova.com: max-age too low: 300
nataniel-perissier.fr: could not connect to host
-natecraun.net: did not receive HSTS header
+nate.sh: could not connect to host
natenom.com: max-age too low: 7200
natenom.de: max-age too low: 7200
natenom.name: max-age too low: 7200
@@ -9019,10 +9680,10 @@ nathanmfarrugia.com: did not receive HSTS header
nationalmall.gov: could not connect to host
nationwidevehiclecontracts.co.uk: did not receive HSTS header
natur-udvar.hu: could not connect to host
-natural-progesterone.net: could not connect to host
+natural-progesterone.net: did not receive HSTS header
+naturalcommission.com: could not connect to host
naturblogg.no: did not receive HSTS header
naturecoaster.com: did not receive HSTS header
-naturesharvestbread.com: max-age too low: 86400
natuterra.com.br: could not connect to host
natuurbehangnederland.nl: could not connect to host
nauck.org: did not receive HSTS header
@@ -9035,7 +9696,7 @@ naviteq.eu: could not connect to host
navjobs.com: could not connect to host
nawroth.info: could not connect to host
nax.io: did not receive HSTS header
-nay.moe: could not connect to host
+nay.moe: did not receive HSTS header
nba2kqq.com: could not connect to host
nbb.io: could not connect to host
nbg-ha.de: could not connect to host
@@ -9045,56 +9706,67 @@ nc2c.com: could not connect to host
nc99.co: could not connect to host
ncc60205.info: could not connect to host
ncdesigns-studio.com: could not connect to host
+ncea.net.au: did not receive HSTS header
nchristo.com: did not receive HSTS header
ncpc.gov: could not connect to host
ncpw.gov: did not receive HSTS header
ncrmnt.org: did not receive HSTS header
-nct.org.uk: did not receive HSTS header
+nct.org.uk: could not connect to host
nctx.co.uk: did not receive HSTS header
+ndmath.club: could not connect to host
ndtblog.com: could not connect to host
ndtmarket.place: could not connect to host
ne1home.dyndns.org: did not receive HSTS header
neap.io: could not connect to host
near.st: did not receive HSTS header
nearbiwa.com: did not receive HSTS header
+nearon.nl: could not connect to host
neavision.de: did not receive HSTS header
nebulousenhanced.com: could not connect to host
necesitodinero.org: could not connect to host
necio.ca: could not connect to host
nedcf.org.uk: could not connect to host
+nediyor.com: did not receive HSTS header
nedwave.com: did not receive HSTS header
nedzad.me: could not connect to host
+neecist.org: could not connect to host
neels.ch: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
neer.io: could not connect to host
neftaly.com: did not receive HSTS header
-negativecurvature.net: could not connect to host
+neftebitum-kngk.ru: did not receive HSTS header
negativzinsen.info: did not receive HSTS header
negraelinda.com: did not receive HSTS header
neilgreen.net: did not receive HSTS header
nejnamc.org: did not receive HSTS header
neko-life.com: did not receive HSTS header
-neko-system.com: max-age too low: 0
neko.li: could not connect to host
nekoku.io: could not connect to host
nekox.ml: could not connect to host
nellen.it: did not receive HSTS header
nemno.de: could not connect to host
nemovement.org: could not connect to host
+nemunai.re: could not connect to host
neoani.me: did not receive HSTS header
neocyd.com: could not connect to host
neofelhz.space: could not connect to host
+neojames.me: could not connect to host
neonisi.com: could not connect to host
-neonnuke.tech: could not connect to host
+neonnuke.tech: did not receive HSTS header
neosolution.ca: did not receive HSTS header
+nercp.org.uk: did not receive HSTS header
nerd42.de: could not connect to host
+nerdbox.cc: did not receive HSTS header
nerdjokes.de: could not connect to host
nerfroute.com: could not connect to host
neris.io: could not connect to host
+neriumhcp.com: did not receive HSTS header
nerpa-club.ru: did not receive HSTS header
+nerull7.info: could not connect to host
nesantuoka.lt: could not connect to host
+nestedquotes.ca: could not connect to host
nestone.ru: could not connect to host
net-navi.cc: did not receive HSTS header
-net-rencontre.com: could not connect to host
+net-rencontre.com: did not receive HSTS header
net2o.com: did not receive HSTS header
net2o.de: did not receive HSTS header
net2o.net: did not receive HSTS header
@@ -9108,51 +9780,52 @@ netfs.pl: did not receive HSTS header
netherwind.eu: did not receive HSTS header
netlilo.com: could not connect to host
netloanusa.com: could not connect to host
-netlocal.ru: could not connect to host
netmagik.com: did not receive HSTS header
-netprofile.com.au: could not connect to host
+netprofile.com.au: did not receive HSTS header
netresourcedesign.com: could not connect to host
+netronome.com: did not receive HSTS header
netsafeid.biz: did not receive HSTS header
netscaler.expert: could not connect to host
netsight.org: could not connect to host
netsparkercloud.com: did not receive HSTS header
netsystems.pro: could not connect to host
nettefoundation.com: could not connect to host
+networking4all.net: max-age too low: 0
+networx-online.de: could not connect to host
netzbit.de: could not connect to host
netzpolitik.org: max-age too low: 2592000
netztest.at: did not receive HSTS header
netzvieh.de: did not receive HSTS header
-netzzwerg4u.de: could not connect to host
+netzzwerg4u.de: did not receive HSTS header
neuch.info: did not receive HSTS header
neueonlinecasino2016.com: could not connect to host
neuralgic.net: could not connect to host
neuro-plus-100.com: could not connect to host
-neuronasdigitales.com: could not connect to host
neuronfactor.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
neurotransmitter.net: could not connect to host
neutralvehicle.com: did not receive HSTS header
-neva.li: could not connect to host
nevadafiber.net: could not connect to host
never-afk.de: did not receive HSTS header
neveta.com: could not connect to host
new: could not connect to host
newantiagingcreams.com: could not connect to host
-newbietech.cn: could not connect to host
+newbieboss.com: did not receive HSTS header
newbownerton.xyz: could not connect to host
+newchance.store: could not connect to host
newcityinfo.info: could not connect to host
newedivideo.it: could not connect to host
newfacialbeautycream.com: could not connect to host
newgenerationplus.org: could not connect to host
-newhdmovies.io: could not connect to host
+newhdmovies.io: max-age too low: 0
newline.online: did not receive HSTS header
newlooknow.com: did not receive HSTS header
newmelalife.com: did not receive HSTS header
newparadigmventures.net: did not receive HSTS header
+newpoke.net: did not receive HSTS header
newportpropertygroup.com: could not connect to host
news4c.com: did not receive HSTS header
newsquantified.com: max-age too low: 0
newstarnootropics.com: could not connect to host
-newsyslog.org: could not connect to host
newtnote.com: could not connect to host
newtonhaus.com: could not connect to host
newtonwarp.com: could not connect to host
@@ -9161,19 +9834,23 @@ next-taxi.ru: could not connect to host
next176.sk: did not receive HSTS header
next47.com: did not receive HSTS header
nextcloud.li: could not connect to host
+nextcloud.nerdpol.ovh: could not connect to host
nextcloud.org: could not connect to host
nextgenthemes.com: did not receive HSTS header
nexth.de: could not connect to host
nexth.net: did not receive HSTS header
nexth.us: could not connect to host
+nexthop.co.jp: could not connect to host
nexthop.co.th: did not receive HSTS header
nextpages.de: could not connect to host
nextproject.us: could not connect to host
+nextshutter.com: did not receive HSTS header
+nexus-vienna.at: could not connect to host
nexusbyte.de: could not connect to host
nexuscorporation.in: could not connect to host
-nfluence.org: could not connect to host
+nfhome.be: did not receive HSTS header
nfo.so: could not connect to host
-ng-firewall.com: could not connect to host
+ng-firewall.com: did not receive HSTS header
ng-security.com: could not connect to host
ngiemboon.net: could not connect to host
ngine.ch: did not receive HSTS header
@@ -9183,13 +9860,16 @@ nglr.org: could not connect to host
ngocuong.net: could not connect to host
ngt-service.ru: could not connect to host
ngtoys.com.br: did not receive HSTS header
+nhliberty.org: did not receive HSTS header
nhsuites.com: did not receive HSTS header
nhus.de: max-age too low: 172800
+niallator.com: could not connect to host
nibiisclaim.com: could not connect to host
nicestresser.fr: could not connect to host
nicky.io: did not receive HSTS header
nico.one: could not connect to host
nicoborghuis.nl: could not connect to host
+nicolaeiotcu.ro: could not connect to host
nicolaelmer.ch: did not receive HSTS header
nicolasbettag.me: did not receive HSTS header
nicolasdutour.com: did not receive HSTS header
@@ -9199,22 +9879,24 @@ nicorevin.ru: could not connect to host
nidux.com: did not receive HSTS header
niduxcomercial.com: could not connect to host
nien.chat: could not connect to host
+nien.com.tw: could not connect to host
nienfun.com: could not connect to host
+nieuwsoverijssel.nl: did not receive HSTS header
nifpnet.nl: could not connect to host
nifume.com: could not connect to host
nightsnack.cf: could not connect to host
niho.jp: did not receive HSTS header
nikcub.com: could not connect to host
-nikklassen.ca: could not connect to host
nikksno.io: could not connect to host
+niklas.host: could not connect to host
niklaslindblad.se: did not receive HSTS header
nikobradshaw.com: could not connect to host
nikolaichik.photo: did not receive HSTS header
nikolasbradshaw.com: could not connect to host
-nikonnps.co.uk: did not receive HSTS header
+nilianwo.com: could not connect to host
niloxy.com: did not receive HSTS header
ninchisho-online.com: did not receive HSTS header
-ninebytes.xyz: did not receive HSTS header
+ninebytes.xyz: could not connect to host
ning.so: did not receive HSTS header
ninhs.org: could not connect to host
ninjan.co: did not receive HSTS header
@@ -9232,6 +9914,8 @@ nishaswonderland.be: did not receive HSTS header
nishaswonderland.nl: did not receive HSTS header
nishikino-maki.com: could not connect to host
nishisbma.com: could not connect to host
+nitaonline.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+niveldron.com: could not connect to host
nixien.fr: could not connect to host
nixmag.net: could not connect to host
nkadvertising.online: could not connect to host
@@ -9243,13 +9927,14 @@ nmadda.com: did not receive HSTS header
nmctest.net: could not connect to host
nmsnj.com: did not receive HSTS header
nmueller.at: could not connect to host
-nnote.net: did not receive HSTS header
+nnote.net: could not connect to host
nnya.cat: could not connect to host
-no-ip.cz: did not receive HSTS header
no17sifangjie.cc: could not connect to host
nocallaghan.com: could not connect to host
+nocit.dk: could not connect to host
noclegi-online.pl: did not receive HSTS header
noctinus.tk: could not connect to host
+nodari.com.ar: could not connect to host
node-core-app.com: could not connect to host
nodebrewery.com: could not connect to host
nodechate.xyz: could not connect to host
@@ -9266,6 +9951,7 @@ noesberts-weidmoos.de: did not receive HSTS header
noexpect.org: could not connect to host
noima.com: did not receive HSTS header
noisebridge.social: could not connect to host
+nokia.la: could not connect to host
nolag.host: could not connect to host
nolatepayments.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
nolberg.net: did not receive HSTS header
@@ -9294,13 +9980,16 @@ northpennvwparts.com: [Exception... "Component returned failure code: 0x80004005
northwoodsfish.com: could not connect to host
nosbenevolesontdutalent.com: could not connect to host
nosecretshop.com: could not connect to host
-nossasenhora.net: could not connect to host
+nossasenhoradaconceicao.com.br: did not receive HSTS header
nostraspace.com: could not connect to host
+nosx.tk: could not connect to host
not-a.link: could not connect to host
+nota-web.com: could not connect to host
notablog.xyz: did not receive HSTS header
notadd.io: could not connect to host
notarankastojkovic.me: could not connect to host
notarobot.fr: did not receive HSTS header
+notboring.co.uk: could not connect to host
notdienstreform-nordrhein.de: could not connect to host
note7forever.com: could not connect to host
notenoughtime.de: could not connect to host
@@ -9309,10 +9998,12 @@ notevencode.com: could not connect to host
nothing.net.nz: max-age too low: 7776000
nothing.org.uk: could not connect to host
noticia.do: did not receive HSTS header
-notjustbitchy.com: could not connect to host
+notjustbitchy.com: did not receive HSTS header
+notonprem.com: could not connect to host
nottheonion.net: did not receive HSTS header
+notypiesni.sk: did not receive HSTS header
nou.si: did not receive HSTS header
-noustique.com: could not connect to host
+nouma.fr: could not connect to host
nouvelle-vague-saint-cast.fr: did not receive HSTS header
nova-elearning.com: could not connect to host
nova.com.hk: did not receive HSTS header
@@ -9320,33 +10011,34 @@ novaco.in: max-age too low: 3600
novacraft.me: could not connect to host
novaopcaofestas.com.br: could not connect to host
novaorbis.org: could not connect to host
-novascan.net: did not receive HSTS header
+novascan.net: could not connect to host
novatrucking.de: could not connect to host
novavoidhowl.com: did not receive HSTS header
novelabs.de: could not connect to host
novelabs.eu: could not connect to host
novelshouse.com: could not connect to host
novfishing.ru: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-novinhabucetuda.com: could not connect to host
+novinhabucetuda.com: did not receive HSTS header
novinivo.com: did not receive HSTS header
novtest.ru: did not receive HSTS header
noworrywp.com: could not connect to host
nowprotein.com: did not receive HSTS header
-nowremindme.com: could not connect to host
nozoe.jp: could not connect to host
npm.li: did not receive HSTS header
npol.de: could not connect to host
+npool.org: could not connect to host
nq7.pl: could not connect to host
-nrdstd.io: could not connect to host
nrechn.de: could not connect to host
nrizzio.me: could not connect to host
nrnjn.xyz: did not receive HSTS header
+nrvnastudios.com: could not connect to host
nsbfalconacademy.org: could not connect to host
nsdev.cn: could not connect to host
nsellier.fr: did not receive HSTS header
nshost.ro: did not receive HSTS header
nsmail.cn: could not connect to host
nspeaks.com: did not receive HSTS header
+nstremsdoerfer.ovh: did not receive HSTS header
nstyleintl.ca: did not receive HSTS header
nsure.us: could not connect to host
nsweb.solutions: could not connect to host
@@ -9358,17 +10050,13 @@ nu3.ch: did not receive HSTS header
nu3.co.uk: could not connect to host
nu3.com: did not receive HSTS header
nu3.de: did not receive HSTS header
-nu3.dk: did not receive HSTS header
-nu3.fi: did not receive HSTS header
nu3.fr: did not receive HSTS header
-nu3.no: did not receive HSTS header
-nu3.se: did not receive HSTS header
nube.ninja: did not receive HSTS header
+nubeslayer.com: did not receive HSTS header
nuclear-crimes.com: could not connect to host
nuclearcrimes.com: could not connect to host
nuclearcrimes1.com: could not connect to host
nudel.ninja: could not connect to host
-nudestpics.com: could not connect to host
nufla.de: could not connect to host
nugetdependencies.com: did not receive HSTS header
nuiguru.me: could not connect to host
@@ -9380,35 +10068,37 @@ null.cat: did not receive HSTS header
null.tips: could not connect to host
nullpoint.at: did not receive HSTS header
nullpro.com: could not connect to host
-nullroute.com: could not connect to host
numericacu.com: did not receive HSTS header
numero-di-telefono.it: could not connect to host
numista.com: did not receive HSTS header
-nuovamoda.al: did not receive HSTS header
+nuovamoda.al: could not connect to host
nup.pw: could not connect to host
nupef.org.br: did not receive HSTS header
nurserybook.co: did not receive HSTS header
nurture.be: did not receive HSTS header
nusatrip-api.com: did not receive HSTS header
nutricuerpo.com: did not receive HSTS header
+nutrieduca.com: could not connect to host
nutrienti.eu: did not receive HSTS header
nutritionculture.com: could not connect to host
nutsandboltsmedia.com: did not receive HSTS header
nuttyveg.com: did not receive HSTS header
+nuwaterglobal.com: did not receive HSTS header
nvlop.xyz: did not receive HSTS header
nwa.xyz: could not connect to host
nweb.co.nz: could not connect to host
nwk1.com: did not receive HSTS header
nwork.media: could not connect to host
+nxt.sh: did not receive HSTS header
nyanpasu.tv: could not connect to host
nyatane.com: could not connect to host
nyazeeland.guide: could not connect to host
nycroth.com: could not connect to host
nydnxs.com: could not connect to host
nyesider.org: could not connect to host
-nylonfeetporn.com: could not connect to host
nyored.com: did not receive HSTS header
nyphox.net: could not connect to host
+nys-hk.com: did not receive HSTS header
nysepho.pw: could not connect to host
nysifclaimcentral.com: did not receive HSTS header
nystart.no: did not receive HSTS header
@@ -9427,23 +10117,24 @@ oben.pl: did not receive HSTS header
oberam.de: could not connect to host
oberhof.co: could not connect to host
oberhofjuice.com: could not connect to host
-objectif-leger.com: could not connect to host
+oberoi.de: max-age too low: 600000
+objectif-leger.com: did not receive HSTS header
oblikdom.pro: did not receive HSTS header
oblikdom.ru: did not receive HSTS header
-oblondata.io: could not connect to host
+oblondata.io: did not receive HSTS header
obrienlab.com: did not receive HSTS header
obscuredfiles.com: could not connect to host
observatory.se: could not connect to host
obsydian.org: could not connect to host
oc-minecraft.com: could not connect to host
ocapic.com: could not connect to host
+occ.gov: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
occasion-impro.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
occupymedia.org: could not connect to host
ochaken.cf: could not connect to host
ocmeulebeke.be: did not receive HSTS header
ocrami.us: did not receive HSTS header
-ocsr.nl: did not receive HSTS header
-octarineparrot.com: could not connect to host
+octanio.com: could not connect to host
octo.im: could not connect to host
octocat.ninja: could not connect to host
octod.tk: could not connect to host
@@ -9457,7 +10148,8 @@ odysseyandco.com: could not connect to host
odysseyconservationtrust.com: did not receive HSTS header
oe8.bet: could not connect to host
ofcourselanguages.com: could not connect to host
-ofer.site: could not connect to host
+ofcss.com: did not receive HSTS header
+ofer.site: did not receive HSTS header
off-the-clock.us: could not connect to host
offenedialoge.de: max-age too low: 2592000
offersgame.com: could not connect to host
@@ -9474,19 +10166,24 @@ ofo2.com: could not connect to host
oganek.ie: could not connect to host
oganime.com: did not receive HSTS header
oggw.us: could not connect to host
+ogkw.de: could not connect to host
+oglen.ca: could not connect to host
ogogoshop.com: could not connect to host
ogrodywstudniach.pl: did not receive HSTS header
+ohayosoro.me: could not connect to host
ohm2013.org: did not receive HSTS header
ohma.ga: could not connect to host
ohnemusik.com: could not connect to host
ohohrazi.com: did not receive HSTS header
+ohreally.de: could not connect to host
ohsocool.org: did not receive HSTS header
oiepoie.nl: could not connect to host
oinky.ddns.net: could not connect to host
oishioffice.com: did not receive HSTS header
+ojbk.eu: could not connect to host
ojls.co: could not connect to host
okane.love: could not connect to host
-okashi.me: did not receive HSTS header
+okashi.me: could not connect to host
oklahomamoversassociation.org: could not connect to host
oklahomanotepro.com: could not connect to host
okok-rent.com: could not connect to host
@@ -9494,11 +10191,11 @@ okok.rent: could not connect to host
okutama.in.th: could not connect to host
olafnorge.de: did not receive HSTS header
olcso-vps-szerver.hu: could not connect to host
-oldandyounglesbians.us: could not connect to host
-oldchaphome.nl: could not connect to host
+oldandyounglesbians.us: did not receive HSTS header
oldschool-criminal.com: did not receive HSTS header
-oldtimer-trifft-flugplatz.de: could not connect to host
+oldtimer-trifft-flugplatz.de: did not receive HSTS header
oliverdunk.com: did not receive HSTS header
+oliverfaircliff.com: could not connect to host
ollehbizev.co.kr: could not connect to host
olswangtrainees.com: could not connect to host
olympe-transport.fr: did not receive HSTS header
@@ -9507,11 +10204,9 @@ omarh.net: could not connect to host
omgaanmetidealen.com: could not connect to host
ominto.com: did not receive HSTS header
ommahpost.com: did not receive HSTS header
-omnibot.tv: could not connect to host
omnigon.network: could not connect to host
omnilab.tech: could not connect to host
omniti.com: max-age too low: 1
-omorashi.org: could not connect to host
omquote.gq: could not connect to host
omskit.ru: did not receive HSTS header
omyogarishikesh.com: did not receive HSTS header
@@ -9521,30 +10216,31 @@ onearth.one: did not receive HSTS header
oneb4nk.com: could not connect to host
onecycling.my: could not connect to host
onecycling.world: could not connect to host
+onedot.nl: could not connect to host
onefour.co: could not connect to host
onehourloan.com: could not connect to host
onehourloan.sg: did not receive HSTS header
-oneiros.cc: could not connect to host
onelawsuit.com: did not receive HSTS header
oneminutefilm.tv: did not receive HSTS header
+onemusou.com: could not connect to host
onepathnetwork.com: max-age too low: 7776000
onepluscamps.com: did not receive HSTS header
onepopstore.com: could not connect to host
onespiritinc.com: did not receive HSTS header
onet.space: could not connect to host
+onetech.it: did not receive HSTS header
onetly.com: could not connect to host
onetwentyseven001.com: did not receive HSTS header
onewebdev.info: could not connect to host
oneworldbank.com: did not receive HSTS header
onewpst.com: did not receive HSTS header
onguardonline.gov: did not receive HSTS header
-oniichan.us: could not connect to host
+oniichan.us: did not receive HSTS header
onioncloud.org: could not connect to host
onionsburg.com: could not connect to host
online-casino.eu: did not receive HSTS header
online-scene.com: did not receive HSTS header
online-wetten.de: did not receive HSTS header
-online.swedbank.se: did not receive HSTS header
onlinebiller.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
onlinebillingform.com: did not receive HSTS header
onlinecasinobluebook.com: could not connect to host
@@ -9553,7 +10249,6 @@ onlinedemo.hu: could not connect to host
onlinedeposit.us: could not connect to host
onlinekasino.de: did not receive HSTS header
onlinepollsph.com: could not connect to host
-onlineporno.tv: could not connect to host
onlineschadestaat.nl: did not receive HSTS header
onlinespielothek.com: did not receive HSTS header
onlinewetten.de: could not connect to host
@@ -9570,6 +10265,7 @@ onsennuie.fr: could not connect to host
onsite4u.de: could not connect to host
onsitemassageco.com: did not receive HSTS header
onstud.com: could not connect to host
+onthe.network: could not connect to host
ontheboard.com: did not receive HSTS header
onthecheap.store: could not connect to host
ontheten.org: did not receive HSTS header
@@ -9587,11 +10283,12 @@ ooooush.co.uk: could not connect to host
oopsmycase.com: could not connect to host
oopsorup.com: could not connect to host
oost.io: could not connect to host
-opatut.de: could not connect to host
+opatut.de: did not receive HSTS header
opcaobolsas.com.br: could not connect to host
open-future.be: did not receive HSTS header
open-mx.de: could not connect to host
open-to-repair.fr: max-age too low: 86400
+opencad.io: did not receive HSTS header
openclub24.ru: could not connect to host
openconcept.no: did not receive HSTS header
openconnect.com.au: could not connect to host
@@ -9600,9 +10297,9 @@ openevic.info: could not connect to host
opengateway.fr: did not receive HSTS header
openmetals.com: could not connect to host
openmind-shop.de: did not receive HSTS header
-openmirrors.cf: could not connect to host
openpriv.pw: could not connect to host
openprovider.nl: did not receive HSTS header
+openrainbow.org: could not connect to host
openrtv.com: did not receive HSTS header
openshift.redhat.com: did not receive HSTS header
opensourcedmind.eu: could not connect to host
@@ -9613,6 +10310,7 @@ openssf.org: did not receive HSTS header
opentexon.com: could not connect to host
openxmpp.com: could not connect to host
opiates.net: did not receive HSTS header
+opic.gov: could not connect to host
opim.ca: did not receive HSTS header
opinion8td.com: did not receive HSTS header
opinionicentrifuga.it: could not connect to host
@@ -9620,12 +10318,12 @@ opinionipannolini.it: could not connect to host
opioids.com: could not connect to host
opperwall.net: could not connect to host
opportunitycorps.org: max-age too low: 43200
-opposer.me: could not connect to host
opsafewinter.net: could not connect to host
opsbears.com: did not receive HSTS header
opstacks.com: did not receive HSTS header
optenhoefel.de: could not connect to host
optimal-e.com: did not receive HSTS header
+optimist.bg: could not connect to host
optimista.soy: could not connect to host
optometriepunt.nl: did not receive HSTS header
optumrxhealthstore.com: could not connect to host
@@ -9644,10 +10342,14 @@ oref-idf.com: did not receive HSTS header
oref-idf.net: did not receive HSTS header
oref-idf.org: did not receive HSTS header
oregonmu.org: did not receive HSTS header
+oreka.online: could not connect to host
+orelavtomaster.ru: did not receive HSTS header
orfeo-engineering.ch: could not connect to host
organic-superfood.net: could not connect to host
oricejoc.com: could not connect to host
originalmockups.com: did not receive HSTS header
+originalsport.com.br: could not connect to host
+originpc.com: could not connect to host
orioncustompcs.com: could not connect to host
orionfcu.com: did not receive HSTS header
orionfinancialservices.com: did not receive HSTS header
@@ -9658,7 +10360,7 @@ orthodoxy.lt: did not receive HSTS header
orum.in: could not connect to host
osaiyuwu.com: could not connect to host
oscarmashauri.com: could not connect to host
-oscillation-services.fr: could not connect to host
+oscillation-services.fr: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
oscloud.com: could not connect to host
oscloud.com.ua: could not connect to host
oscreen.me: could not connect to host
@@ -9678,22 +10380,24 @@ osticketawesome.com: did not receive HSTS header
ostrov8.com: could not connect to host
oswaldmattgroup.com: did not receive HSTS header
otakuworld.de: could not connect to host
+other98.com: did not receive HSTS header
othercode.nl: could not connect to host
othermedia.cc: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
otherstuff.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-otichi.com: could not connect to host
+otichi.com: did not receive HSTS header
otinane.eu: could not connect to host
otokonna.com: could not connect to host
otrsdemo.hu: did not receive HSTS header
ottospora.nl: could not connect to host
+ouaibe.qc.ca: could not connect to host
ourbank.com: max-age too low: 2592000
ourchoice2016.com: could not connect to host
outdooradventures.pro: did not receive HSTS header
-outdoorproducts.com: did not receive HSTS header
+outdoorproducts.com: max-age too low: 7889238
outreachbuddy.com: could not connect to host
outsider.im: could not connect to host
outurnate.com: could not connect to host
-ouvirmusica.com.br: did not receive HSTS header
+ouvirmusica.com.br: could not connect to host
ovenapp.io: did not receive HSTS header
over25tips.com: did not receive HSTS header
overclockers.ge: could not connect to host
@@ -9703,20 +10407,24 @@ oversight.io: could not connect to host
overstockpromote.com: did not receive HSTS header
ovuscloud.de: could not connect to host
ovwane.com: could not connect to host
+owennelson.me: max-age too low: 2592000
owensmith.website: could not connect to host
owlscrap.ru: could not connect to host
owncloud.help: could not connect to host
owngeek.com: could not connect to host
ownmovies.fr: could not connect to host
-oxanababy.com: could not connect to host
+ownspec.com: could not connect to host
+owothisdiz.pw: could not connect to host
oxro.co: did not receive HSTS header
oxro.io: did not receive HSTS header
+oxygaming.com: could not connect to host
oxygenabsorbers.com: did not receive HSTS header
oxymc.com: did not receive HSTS header
oxynux.fr: could not connect to host
oxynux.xyz: could not connect to host
oyesunn.com: could not connect to host
oyste.in: could not connect to host
+ozoz.cc: could not connect to host
p-pc.de: could not connect to host
p-rickroll-o.pw: could not connect to host
p.linode.com: could not connect to host
@@ -9728,40 +10436,48 @@ p3ter.fr: did not receive HSTS header
p8r.de: did not receive HSTS header
paavolastudio.com: did not receive HSTS header
pablocamino.tk: could not connect to host
+pablofain.com: did not receive HSTS header
pablorey-art.com: did not receive HSTS header
+pachaiyappas.org: could not connect to host
+packair.com: did not receive HSTS header
packetapp.ru: could not connect to host
packetcrash.net: could not connect to host
packlane.com: did not receive HSTS header
packshot-creator.com: did not receive HSTS header
+pacnetwork.io: could not connect to host
pacoda.de: could not connect to host
pactf-flag-4boxdpa21ogonzkcrs9p.com: could not connect to host
pactocore.org: could not connect to host
pader-deko.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
paestbin.com: could not connect to host
page: could not connect to host
-pagefulloflies.io: could not connect to host
pagerate.io: could not connect to host
pages-tocaven.com: could not connect to host
pagetoimage.com: could not connect to host
+paginapolitica.ro: could not connect to host
+pagure.org: could not connect to host
+pahlawanpulsa.com: did not receive HSTS header
pahnid.com: could not connect to host
paigeglass.com: did not receive HSTS header
paino.cloud: could not connect to host
painosso.org: could not connect to host
paintingat.com: could not connect to host
paio2-rec.com: could not connect to host
-paio2.com: could not connect to host
-paisaone.com: did not receive HSTS header
+paio2.com: did not receive HSTS header
+paisaone.com: could not connect to host
pajonzeck.de: could not connect to host
paket.io: could not connect to host
paket.ml: could not connect to host
paku.me: could not connect to host
+palariviera.com: could not connect to host
palationtrade.com: could not connect to host
palazzotalamo.it: did not receive HSTS header
+paleolowcarb.de: did not receive HSTS header
+paleosquawk.com: could not connect to host
pallet.io: did not receive HSTS header
palmer.im: could not connect to host
pammbook.com: did not receive HSTS header
pamplona.tv: could not connect to host
-pamsoft.pl: max-age too low: 0
pan.tips: could not connect to host
panaceallc.net: could not connect to host
panama-gbs.com: did not receive HSTS header
@@ -9770,12 +10486,11 @@ panamateakforestry.com: did not receive HSTS header
panascais.io: could not connect to host
pandapsy.com: could not connect to host
panelomix.net: did not receive HSTS header
-pangci.xyz: did not receive HSTS header
+pangci.xyz: could not connect to host
panicparts.com: max-age too low: 10540800
-panj.ws: could not connect to host
panni.me: could not connect to host
panoranordic.net: could not connect to host
-panos.io: could not connect to host
+panos.io: did not receive HSTS header
pansu.space: could not connect to host
pants-off.xyz: could not connect to host
pantsu.cat: did not receive HSTS header
@@ -9785,6 +10500,7 @@ papeda.net: could not connect to host
papelariadante.com.br: could not connect to host
papercard.co.uk: did not receive HSTS header
papercrunch.io: could not connect to host
+paperhaven.com.au: max-age too low: 7889238
papermasters.com: could not connect to host
papersmart.net: could not connect to host
papierniak.net: could not connect to host
@@ -9793,18 +10509,22 @@ parabhairavayoga.com: max-age too low: 0
paradiesgirls.ch: could not connect to host
paradise-engineers.com: could not connect to host
paragon.edu: did not receive HSTS header
+parakranov.ru: did not receive HSTS header
paranormalweirdo.com: could not connect to host
pardnoy.com: could not connect to host
parent5446.us: could not connect to host
parentmail.co.uk: did not receive HSTS header
parfum-baza.ru: did not receive HSTS header
paris-cyber.fr: did not receive HSTS header
+parisbloom.com: did not receive HSTS header
+parisdimanche.com: did not receive HSTS header
parishome.jp: could not connect to host
parisvox.info: did not receive HSTS header
parithy.net: could not connect to host
parkhillsbaptist.church: did not receive HSTS header
parkingplus.co.il: could not connect to host
-parkrocker.com: did not receive HSTS header
+parkrocker.com: max-age too low: 604800
+parksland.net: did not receive HSTS header
parksubaruoemparts.com: could not connect to host
parkwithark.com: could not connect to host
parodybit.net: did not receive HSTS header
@@ -9825,13 +10545,14 @@ partyvan.nl: could not connect to host
partyvan.se: could not connect to host
parvaneh.fr: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
pascalchristen.ch: did not receive HSTS header
-pascaline-jouis.fr: did not receive HSTS header
+pasportaservo.org: did not receive HSTS header
passpilot.co.uk: did not receive HSTS header
passumpsicbank.com: did not receive HSTS header
passwd.io: did not receive HSTS header
-password.codes: did not receive HSTS header
+password.codes: could not connect to host
passwordbox.com: did not receive HSTS header
passwordrevelator.net: did not receive HSTS header
+passwordscon.com: could not connect to host
pastaf.com: could not connect to host
pastdream.xyz: could not connect to host
paste.linode.com: could not connect to host
@@ -9840,11 +10561,13 @@ pastenib.com: could not connect to host
paster.li: did not receive HSTS header
pasteros.io: could not connect to host
pastie.se: could not connect to host
+pastorcanadense.com.br: could not connect to host
pataua.kiwi: did not receive HSTS header
+patbatesremodeling.com: could not connect to host
paternitydnatest.com: could not connect to host
patfs.com: did not receive HSTS header
pathwaytofaith.com: could not connect to host
-patientinsight.net: did not receive HSTS header
+patientinsight.net: could not connect to host
patriaco.net: did not receive HSTS header
patrick.dark.name: could not connect to host
patrickbusch.net: could not connect to host
@@ -9852,6 +10575,7 @@ patrickneuro.de: could not connect to host
patt.us: did not receive HSTS header
patterson.mp: could not connect to host
paul-kerebel.pro: could not connect to host
+paul-schmidt.de: max-age too low: 0
paulbunyanmls.com: did not receive HSTS header
paulchen.at: did not receive HSTS header
paulerhof.com: did not receive HSTS header
@@ -9860,11 +10584,9 @@ paulrudge.codes: could not connect to host
paulshir.com: could not connect to host
paulshir.is: could not connect to host
paulyang.cn: did not receive HSTS header
-pavelfojt.cz: did not receive HSTS header
paveljanda.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
pavelkahouseforcisco.com: did not receive HSTS header
pavelstriz.cz: could not connect to host
-pawsru.org: could not connect to host
paxdei.com.br: could not connect to host
paxwinkel.nl: could not connect to host
pay.gigahost.dk: did not receive HSTS header
@@ -9885,9 +10607,12 @@ pbcknd.ml: could not connect to host
pbcomp.com.au: did not receive HSTS header
pbprint.ru: did not receive HSTS header
pbqs.site: could not connect to host
+pbreen.co.uk: could not connect to host
pbscreens.com: could not connect to host
pbytes.com: could not connect to host
pc-nf.de: did not receive HSTS header
+pc-servis-brno.com: did not receive HSTS header
+pc-tablet.com: max-age too low: 0
pc-tweak.de: did not receive HSTS header
pcat.io: could not connect to host
pcfun.net: did not receive HSTS header
@@ -9897,6 +10622,7 @@ pcvirusclear.com: could not connect to host
pdamsidoarjo.co.id: could not connect to host
pdevio.com: could not connect to host
pdf.yt: could not connect to host
+pdomo.me: did not receive HSTS header
pe-bank.co.jp: max-age too low: 604800
pe-kyousai.jp: did not receive HSTS header
peaceandwool.com: did not receive HSTS header
@@ -9906,24 +10632,26 @@ pecot.fr: did not receive HSTS header
peekops.com: could not connect to host
peerherrmann.de: could not connect to host
peerless.ae: could not connect to host
+peinard.net: could not connect to host
peirong.me: could not connect to host
peissen.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
pekkapikkarainen.fi: did not receive HSTS header
pekkarik.ru: could not connect to host
peliculasaudiolatinoonline.com: could not connect to host
-peliseries24.com: did not receive HSTS header
pemagrid.org: could not connect to host
pemberton.at: did not receive HSTS header
penablog.com: did not receive HSTS header
penfold.fr: could not connect to host
pengisatelier.net: could not connect to host
+pengui.uk: could not connect to host
penguinclientsystem.com: did not receive HSTS header
pengumuman.id: did not receive HSTS header
pennyapp.io: did not receive HSTS header
pennylane.me.uk: did not receive HSTS header
pensanisso.com: did not receive HSTS header
-penser-electronique.com: could not connect to host
+penser-electronique.com: did not receive HSTS header
pension-waldesruh.de: did not receive HSTS header
+pensiunealido.ro: could not connect to host
pentagram.me: max-age too low: 2592000
pentano.net: could not connect to host
people-mozilla.org: could not connect to host
@@ -9942,13 +10670,14 @@ perfectseourl.com: did not receive HSTS header
performaterm.ro: could not connect to host
performous.org: did not receive HSTS header
perfumista.vn: did not receive HSTS header
+periodismoactual.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
periscopeliveweb.com: could not connect to host
perlwork.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
pernatie.ru: could not connect to host
peromsik.com: did not receive HSTS header
perplex.nl: did not receive HSTS header
perrone.co: could not connect to host
-perroud.pro: could not connect to host
+perroud.pro: did not receive HSTS header
persjrp.ca: could not connect to host
persoform.ch: could not connect to host
personalcommunicationsecurity.com: could not connect to host
@@ -9960,6 +10689,7 @@ persson.im: could not connect to host
perthdevicelab.com: did not receive HSTS header
pestalozzishop.com.br: could not connect to host
pesto.video: could not connect to host
+pet-life.top: did not receive HSTS header
pet-nsk.ru: could not connect to host
petbooking.it: did not receive HSTS header
petchart.net: could not connect to host
@@ -9982,7 +10712,7 @@ pewboards.com: could not connect to host
pexieapp.com: did not receive HSTS header
peykezamin.ir: did not receive HSTS header
peyote.org: could not connect to host
-peytonfarrar.com: did not receive HSTS header
+peytonfarrar.com: could not connect to host
pferdeeinstreu-kaufen.com: did not receive HSTS header
pfgshop.com.br: could not connect to host
pflegedienst-gratia.de: max-age too low: 300
@@ -9993,7 +10723,7 @@ pgpm.io: could not connect to host
pgregg.com: did not receive HSTS header
pgtb.be: could not connect to host
phalconist.com: could not connect to host
-pharmaboard.org: could not connect to host
+pharmacie-fr.org: did not receive HSTS header
pharmgkb.org: could not connect to host
phcmembers.com: did not receive HSTS header
phcnetworks.net: did not receive HSTS header
@@ -10013,34 +10743,33 @@ phillmoore.com: did not receive HSTS header
phillprice.com: did not receive HSTS header
philonas.net: did not receive HSTS header
philpropertygroup.com: could not connect to host
-phocean.net: could not connect to host
phoebe.co.nz: did not receive HSTS header
phoenicis.com.ua: did not receive HSTS header
phoenix.dj: did not receive HSTS header
phonenumberinfo.co.uk: could not connect to host
phongmay24h.com: could not connect to host
-phood.be: did not receive HSTS header
-phosagro.biz: could not connect to host
-phosagro.com: could not connect to host
+phood.be: could not connect to host
photoblogverona.com: could not connect to host
photoboothpartyhire.co.uk: did not receive HSTS header
photographyforchange.com: could not connect to host
photographyforchange.org: could not connect to host
photops.fr: could not connect to host
photosoftware.nl: could not connect to host
-phototag.org: did not receive HSTS header
+phototag.org: could not connect to host
php-bach.org: could not connect to host
phperformances.fr: did not receive HSTS header
phpfashion.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
phrasing.me: could not connect to host
phuong.faith: could not connect to host
physicaltherapist.com: did not receive HSTS header
+pi-box.ml: could not connect to host
pi-eng.fr: did not receive HSTS header
pianetaottica.eu: could not connect to host
pianetaottica.info: could not connect to host
pianetaottica.net: could not connect to host
pianetaottica.org: could not connect to host
pias-button.net: did not receive HSTS header
+piasto.com.cy: could not connect to host
picallo.es: could not connect to host
picardiascr.com: could not connect to host
pickr.co: could not connect to host
@@ -10048,6 +10777,7 @@ picone.com.au: could not connect to host
picotronic.biz: could not connect to host
picsandtours.com: could not connect to host
picscare.co.uk: did not receive HSTS header
+picshare.nz: could not connect to host
pidatacenters.com: did not receive HSTS header
pidomex.com: did not receive HSTS header
piekacz.co.uk: could not connect to host
@@ -10082,7 +10812,7 @@ piratelist.online: could not connect to host
piratenlogin.de: could not connect to host
piratepay.io: could not connect to host
piratepay.ir: could not connect to host
-pirateproxy.pe: max-age too low: 0
+pirateproxy.pe: could not connect to host
pirateproxy.sx: did not receive HSTS header
pirateproxy.vip: could not connect to host
pirati.cz: max-age too low: 604800
@@ -10093,9 +10823,11 @@ pisexy.me: did not receive HSTS header
pisidia.de: could not connect to host
pitchup.com: did not receive HSTS header
pitonarms.com: could not connect to host
-pittaya.com: could not connect to host
+pitsstop.nu: could not connect to host
+pittaya.com: did not receive HSTS header
pittonpreschool.com: did not receive HSTS header
piwko.co: could not connect to host
+pix-geeks.com: max-age too low: 2592000
pixdigital.net: did not receive HSTS header
pixeame.com: did not receive HSTS header
pixel.google.com: did not receive HSTS header (error ignored - included regardless)
@@ -10109,10 +10841,12 @@ pizzadoc.ch: could not connect to host
pj83.duckdns.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
pj881988.com: could not connect to host
pjbet.mg: did not receive HSTS header
+pjili.com: did not receive HSTS header
pkautodesign.com: did not receive HSTS header
pkschat.com: could not connect to host
plaasprodukte.com: could not connect to host
placefade.com: could not connect to host
+placehold.co: did not receive HSTS header
placollection.org: could not connect to host
plaettliaktion.ch: did not receive HSTS header
plagiarismcheck.org: max-age too low: 604800
@@ -10127,28 +10861,25 @@ plant.ml: could not connect to host
plantroon.com: could not connect to host
plass.hamburg: could not connect to host
plasvilledescartaveis.com.br: could not connect to host
-plataformadeinformacion.es: max-age too low: 30000
platform.lookout.com: could not connect to host
platomania.eu: did not receive HSTS header
play: could not connect to host
play.google.com: did not receive HSTS header (error ignored - included regardless)
playdreamcraft.com.br: did not receive HSTS header
playerhunter.com: did not receive HSTS header
-playerscout.net: did not receive HSTS header
playflick.com: did not receive HSTS header
-playhappywheelsunblocked.com: did not receive HSTS header
-playmaker.io: could not connect to host
+playmaker.io: did not receive HSTS header
playmaza.live: did not receive HSTS header
playmfe.com: could not connect to host
-playnation.io: did not receive HSTS header
-playsharp.com: could not connect to host
+playnation.io: could not connect to host
playsource.co: could not connect to host
playwhyyza.com: could not connect to host
please-deny.me: did not receive HSTS header
+pleaseuseansnisupportedbrowser.ml: could not connect to host
pleasure-science.com: could not connect to host
pleasure.forsale: could not connect to host
plen.io: could not connect to host
-plerion.net: could not connect to host
+plexi.dyndns.tv: could not connect to host
plexpy13.ddns.net: could not connect to host
plexusmd.com: did not receive HSTS header
plfgr.eu.org: could not connect to host
@@ -10164,16 +10895,16 @@ ploup.net: could not connect to host
pluff.nl: did not receive HSTS header
plugboard.xyz: could not connect to host
pluggedhead.com: did not receive HSTS header
-plus-digital.net: did not receive HSTS header
+plus-digital.net: could not connect to host
plus-u.com.au: did not receive HSTS header
plus.sandbox.google.com: did not receive HSTS header (error ignored - included regardless)
plus1s.tk: could not connect to host
plussizereviews.com: could not connect to host
-plut.org: could not connect to host
+plut.org: did not receive HSTS header
plymouthsoftplay.co.uk: could not connect to host
pm13-media.cz: could not connect to host
pmac.pt: could not connect to host
-pmbremer.de: did not receive HSTS header
+pmbremer.de: could not connect to host
pmctire.com: did not receive HSTS header
pmemanager.fr: did not receive HSTS header
pmessage.ch: could not connect to host
@@ -10202,11 +10933,14 @@ pokeduel.me: did not receive HSTS header
pokomichi.com: did not receive HSTS header
pol-expo.ru: could not connect to host
pol.in.th: could not connect to host
+polandb2b.directory: could not connect to host
polarityschule.com: did not receive HSTS header
+pole.net.nz: did not receive HSTS header
poleartschool.com: could not connect to host
polen.guide: could not connect to host
policeiwitness.sg: could not connect to host
polimat.org: could not connect to host
+polish.directory: could not connect to host
polit-it.pro: could not connect to host
politeiaudesa.org: max-age too low: 2592000
politically-incorrect.xyz: could not connect to host
@@ -10216,11 +10950,13 @@ pollpodium.nl: could not connect to host
polsport.live: did not receive HSTS header
polycoise.com: could not connect to host
polycrypt.us: could not connect to host
+polymorph.rs: could not connect to host
polypho.nyc: could not connect to host
polysage.org: could not connect to host
+polytechecosystem.vc: could not connect to host
pomfe.co: could not connect to host
pompefunebrilariviera.it: could not connect to host
-pompompoes.com: could not connect to host
+pompompoes.com: did not receive HSTS header
pondof.fish: could not connect to host
poneytelecom.org: did not receive HSTS header
ponteencima.com: could not connect to host
@@ -10233,7 +10969,6 @@ ponythread.com: did not receive HSTS header
poolinstallers.co.za: could not connect to host
poolsandstuff.com: did not receive HSTS header
poon.tech: could not connect to host
-popcultureshack.com: could not connect to host
popi.se: did not receive HSTS header
popkins.cf: could not connect to host
popkins.ga: could not connect to host
@@ -10242,26 +10977,18 @@ popkins.ml: could not connect to host
popkins.tk: could not connect to host
popupsoftplay.com: could not connect to host
poris.web.id: could not connect to host
-porn77.info: could not connect to host
-pornbay.org: could not connect to host
pornblog.org: could not connect to host
-porncandi.com: could not connect to host
-porno-gif.ru: could not connect to host
-pornohub.su: could not connect to host
-pornolab-net.appspot.com: could not connect to host
-pornoserver.eu: could not connect to host
-pornstars.me: did not receive HSTS header
+pornstars.me: could not connect to host
porschen.fr: could not connect to host
port.social: could not connect to host
-portailevangelique.ca: did not receive HSTS header
portalisapres.cl: could not connect to host
portalm.tk: could not connect to host
portalmundo.xyz: could not connect to host
portalplatform.net: could not connect to host
portaluniversalista.org: could not connect to host
portefeuillesignalen.nl: did not receive HSTS header
-portofrotterdam.com: could not connect to host
poshpak.com: max-age too low: 86400
+positivesobrietyinstitute.com: did not receive HSTS header
post4me.at: could not connect to host
postback.io: did not receive HSTS header
postcardpayment.com: could not connect to host
@@ -10272,6 +10999,11 @@ posylka.de: did not receive HSTS header
potatoheads.net: could not connect to host
potbar.com: could not connect to host
potbox.com: could not connect to host
+potenzmittel-levitra.com: max-age too low: 300
+potenzmittel-webshop.com: max-age too low: 3600
+potenzmittelblog.info: could not connect to host
+potenzpillen-kaufen.biz: did not receive HSTS header
+potenzprobleme-info.net: did not receive HSTS header
potlytics.com: could not connect to host
potomania.cz: could not connect to host
potpourrifestival.de: did not receive HSTS header
@@ -10282,9 +11014,9 @@ poupatempo.org: could not connect to host
pourmesloisirs.com: could not connect to host
pourout.org: did not receive HSTS header
poussinooz.fr: could not connect to host
-povesham.tk: could not connect to host
povitria.net: could not connect to host
powaclub.com: max-age too low: 86400
+powdersnow.top: did not receive HSTS header
power-l.ch: did not receive HSTS header
power-of-interest.com: did not receive HSTS header
power99press.com: could not connect to host
@@ -10292,13 +11024,16 @@ powerb.ch: did not receive HSTS header
powerentertainment.tv: could not connect to host
poweroff.win: could not connect to host
powerplannerapp.com: could not connect to host
+powersergunited.com: could not connect to host
+powersergunited.org: could not connect to host
powershellmagic.com: could not connect to host
powershift.ne.jp: did not receive HSTS header
powerxequality.com: could not connect to host
poy-tech.com: could not connect to host
pozniak.at: did not receive HSTS header
pozyczka-bez-zaswiadczen.pl: did not receive HSTS header
-pozzo-balbi.com: could not connect to host
+pozytywnyplan.pl: could not connect to host
+pozzo-balbi.com: did not receive HSTS header
ppoozl.com: could not connect to host
pppo.gov: could not connect to host
ppr-truby.ru: could not connect to host
@@ -10321,22 +11056,19 @@ preisser.it: did not receive HSTS header
preissler.co.uk: could not connect to host
prekladysanca.cz: could not connect to host
prelist.org: did not receive HSTS header
-premaritalsex.info: could not connect to host
premioambiente.it: did not receive HSTS header
premiumzweirad.de: max-age too low: 7776000
-prepaidgirl.com: could not connect to host
prepandgo-euro.com: could not connect to host
-preparedcapital.com: max-age too low: 300
-preppertactics.com: could not connect to host
+preposted.com: did not receive HSTS header
+preppertactics.com: did not receive HSTS header
preprodfan.gov: could not connect to host
+prescriptionrex.com: did not receive HSTS header
presidentials2016.com: could not connect to host
press-anime-nenkan.com: did not receive HSTS header
press-presse.ca: did not receive HSTS header
pressenews.net: did not receive HSTS header
pressfreedomfoundation.org: did not receive HSTS header
prestigeeventshire.co.uk: could not connect to host
-prestonapp.com: did not receive HSTS header
-pretrialservices.gov: did not receive HSTS header
prettygrouse.com: did not receive HSTS header
prettyphotoart.de: did not receive HSTS header
prettytunesapp.com: could not connect to host
@@ -10348,12 +11080,14 @@ pridoc.se: did not receive HSTS header
prifo.se: could not connect to host
prijsvergelijken.ml: could not connect to host
prilock.com: did not receive HSTS header
+primaconsulting.net: could not connect to host
primecaplending.com: could not connect to host
primotiles.co.uk: did not receive HSTS header
-primotilesandbathrooms.co.uk: did not receive HSTS header
-prinbanat.ngo: did not receive HSTS header
+prinbanat.ngo: could not connect to host
+princeofwhales.com: did not receive HSTS header
princessbackpack.de: could not connect to host
princessmargaretlotto.com: did not receive HSTS header
+prinesdoma.at: did not receive HSTS header
printerest.io: could not connect to host
printersonline.be: did not receive HSTS header
printery.be: could not connect to host
@@ -10362,28 +11096,26 @@ priolkar.com: could not connect to host
prism-communication.com: could not connect to host
pristineevents.co.uk: did not receive HSTS header
pritchett.xyz: could not connect to host
-priva.si: max-age too low: 0
+privacyforjournalists.org.au: could not connect to host
privacylabs.io: did not receive HSTS header
privacymanatee.com: could not connect to host
privacynow.eu: did not receive HSTS header
privacyrup.net: could not connect to host
+privategiant.com: could not connect to host
privatstunden.express: could not connect to host
privcloud.org: could not connect to host
privilegevisa.fr: could not connect to host
-privy.com: max-age too low: 43200
privytime.com: could not connect to host
prmte.com: max-age too low: 2592000
prnt.li: did not receive HSTS header
+pro-image.de: did not receive HSTS header
pro-zone.com: could not connect to host
proactive.run: could not connect to host
-probas.de: max-age too low: 0
procode.gq: could not connect to host
prodpad.com: did not receive HSTS header
produccioneskm.cl: did not receive HSTS header
productgap.com: could not connect to host
producto8.com: did not receive HSTS header
-productpeo.pl: did not receive HSTS header
-profhome-shop.com: did not receive HSTS header
profi-durchgangsmelder.de: did not receive HSTS header
profinetz.de: could not connect to host
profivps.com: could not connect to host
@@ -10394,14 +11126,15 @@ profusion.io: could not connect to host
progblog.net: could not connect to host
progolfjourney.com: could not connect to host
program-and.work: could not connect to host
-programmaticmagic.com: could not connect to host
programmingstudent.com: could not connect to host
progress-technologies.com: could not connect to host
progressivecfo.co.nz: could not connect to host
prohostonline.fi: could not connect to host
proitconsulting.com.au: could not connect to host
proj.org.cn: could not connect to host
+project-rune.tech: could not connect to host
project-sparks.eu: did not receive HSTS header
+project-splash.com: could not connect to host
project-stats.com: could not connect to host
projectascension.io: could not connect to host
projectasterk.com: could not connect to host
@@ -10411,9 +11144,10 @@ projectl1b1t1na.tk: could not connect to host
projectmercury.space: could not connect to host
projectte.ch: could not connect to host
projectvault.ovh: did not receive HSTS header
-projectx.top: could not connect to host
+projectx.top: did not receive HSTS header
projekt-umbriel.de: could not connect to host
projektik.cz: did not receive HSTS header
+projektzentrisch.de: could not connect to host
projetoresecia.com: could not connect to host
prokop.ovh: could not connect to host
prolan.pw: did not receive HSTS header
@@ -10428,6 +11162,7 @@ prontocleaners.co.uk: could not connect to host
prontolight.com: did not receive HSTS header
prontomovers.co.uk: could not connect to host
propactrading.com: could not connect to host
+propershave.com: could not connect to host
proplan.co.il: did not receive HSTS header
propmag.co: could not connect to host
prosenseit.com: did not receive HSTS header
@@ -10435,17 +11170,19 @@ proslimdiets.com: could not connect to host
prosocialmachines.com: could not connect to host
prosoft.sk: did not receive HSTS header
prosperident.com: did not receive HSTS header
-prostoporno.net: could not connect to host
proteapower.co.za: could not connect to host
protecciondelconsumidor.gov: did not receive HSTS header
proteinnuts.cz: could not connect to host
proteinnuts.sk: could not connect to host
protonmail.ch: did not receive HSTS header
protoyou.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+proveits.me: could not connect to host
provisionaldriving.com: could not connect to host
provitacare.com: could not connect to host
+proweser.de: did not receive HSTS header
prowhisky.de: did not receive HSTS header
proxbox.net: could not connect to host
+proxi.cf: could not connect to host
proximato.com: could not connect to host
proxybay.al: could not connect to host
proxybay.club: could not connect to host
@@ -10458,6 +11195,7 @@ proxyportal.me: could not connect to host
proxyportal.org: did not receive HSTS header
proxyrox.com: could not connect to host
proxyweb.us: did not receive HSTS header
+prpr.cloud: could not connect to host
prpsss.com: could not connect to host
prstatic.com: could not connect to host
pruikshop.nl: could not connect to host
@@ -10465,8 +11203,8 @@ prxio.date: could not connect to host
prxio.site: could not connect to host
ps-qa.com: could not connect to host
ps-x.ru: could not connect to host
-psa.gov: did not receive HSTS header
pscleaningsolutions.co.uk: could not connect to host
+pseudo.coffee: could not connect to host
pshostpk.com: did not receive HSTS header
psicologia.co.ve: could not connect to host
psicologoforensebarcelona.com: did not receive HSTS header
@@ -10476,22 +11214,23 @@ psncardplus.com: could not connect to host
psncardplus.dk: could not connect to host
psncardplus.nl: could not connect to host
psncardplus.se: could not connect to host
-pstudio.me: did not receive HSTS header
+pstudio.me: max-age too low: 0
psw.academy: could not connect to host
psw.consulting: could not connect to host
psychiatrie-betreuung.ch: did not receive HSTS header
-psychicsource.com: max-age too low: 300
psychoco.net: could not connect to host
psynapse.net.au: could not connect to host
ptn.moscow: could not connect to host
ptonet.com: could not connect to host
ptrujillo.com: did not receive HSTS header
+pub-online.ro: could not connect to host
pubkey.is: could not connect to host
publications.qld.gov.au: did not receive HSTS header
publicidadnovagrass.com.mx: could not connect to host
+publicspeakingcamps.com: could not connect to host
publimepa.it: could not connect to host
+publishingshack.com: did not receive HSTS header
puchunguis.com: did not receive HSTS header
-pucssa.org: could not connect to host
puentes.info: did not receive HSTS header
puetter.eu: could not connect to host
pugilares.com.pl: could not connect to host
@@ -10499,6 +11238,7 @@ pugliese.fr: could not connect to host
puhe.se: could not connect to host
puikheid.nl: could not connect to host
puiterwijk.org: could not connect to host
+pulledporkheaven.com: could not connect to host
pulsar.guru: did not receive HSTS header
pulsedursley.co.uk: did not receive HSTS header
pult.co: could not connect to host
@@ -10509,7 +11249,7 @@ punchunique.com: did not receive HSTS header
punkdns.top: could not connect to host
puppydns.com: did not receive HSTS header
purahealthyliving.com: could not connect to host
-purbd.com: could not connect to host
+purbd.com: did not receive HSTS header
purewebmasters.com: could not connect to host
purplehippie.in: did not receive HSTS header
purplez.pw: did not receive HSTS header
@@ -10520,7 +11260,6 @@ purrfectswingers.com: did not receive HSTS header
push.world: did not receive HSTS header
pushapp.org: did not receive HSTS header
pushstar.com: max-age too low: 0
-putatara.net: did not receive HSTS header
puzz.gg: could not connect to host
pvagner.tk: did not receive HSTS header
pwd.ovh: could not connect to host
@@ -10545,6 +11284,8 @@ pzme.me: could not connect to host
q-rickroll-u.pw: could not connect to host
q2.si: did not receive HSTS header
q8mp3.me: did not receive HSTS header
+qadmium.tk: could not connect to host
+qazcloud.com: could not connect to host
qbik.de: did not receive HSTS header
qbin.io: did not receive HSTS header
qbnt.ca: could not connect to host
@@ -10557,12 +11298,13 @@ qikan.net: could not connect to host
qimiao.io: did not receive HSTS header
qingxuan.info: could not connect to host
qinxi1992.com: could not connect to host
-qionglu.pw: did not receive HSTS header
+qionglu.pw: could not connect to host
qipp.com: did not receive HSTS header
-qirinus.com: could not connect to host
+qirinus.com: did not receive HSTS header
qixxit.de: did not receive HSTS header
qkmortgage.com: could not connect to host
qldconservation.org: could not connect to host
+qledtech.com: did not receive HSTS header
qnatek.org: could not connect to host
qonqa.de: did not receive HSTS header
qoohoot.com: did not receive HSTS header
@@ -10571,22 +11313,24 @@ qoqo.us: did not receive HSTS header
qorm.co.uk: could not connect to host
qqj.net: could not connect to host
qqq.gg: could not connect to host
-qr-city.org: did not receive HSTS header
qrara.net: did not receive HSTS header
qredo.com: did not receive HSTS header
qrforex.com: did not receive HSTS header
qrlending.com: could not connect to host
qrlfinancial.com: could not connect to host
qswoo.org: did not receive HSTS header
-qtxh.net: did not receive HSTS header
+qto.com: could not connect to host
+qto.org: could not connect to host
quail.solutions: could not connect to host
quakerlens.com: did not receive HSTS header
quality1.com.br: did not receive HSTS header
qualityology.com: did not receive HSTS header
quanglepro.com: could not connect to host
quangngaimedia.com: did not receive HSTS header
+quanjinlong.cn: could not connect to host
quantacloud.ch: could not connect to host
quantenteranik.eu: could not connect to host
+quantor.dk: did not receive HSTS header
quantum-cloud.xyz: could not connect to host
quantum-ethics.com: did not receive HSTS header
quantum-lviv.pp.ua: could not connect to host
@@ -10599,6 +11343,8 @@ queenshaflo.com: could not connect to host
quelmandataire.fr: did not receive HSTS header
queroreceitasoberana.com.br: did not receive HSTS header
queryplayground.com: could not connect to host
+questions-admin.com: did not receive HSTS header
+questionyu.com: did not receive HSTS header
questsandrewards.com: could not connect to host
quic.fr: did not receive HSTS header
quickandroid.tools: could not connect to host
@@ -10612,48 +11358,54 @@ quizmemes.org: could not connect to host
quotehex.com: could not connect to host
quotemaster.co.za: could not connect to host
quranserver.net: could not connect to host
+qwallet.ca: did not receive HSTS header
qwilink.me: did not receive HSTS header
-qybot.cc: did not receive HSTS header
+qybot.cc: could not connect to host
r-ay.club: did not receive HSTS header
r-ay.cn: could not connect to host
+r-core.org: could not connect to host
r-core.ru: could not connect to host
r-cut.fr: could not connect to host
r-rickroll-u.pw: could not connect to host
-r0uzic.net: could not connect to host
r10n.com: did not receive HSTS header
r15.me: did not receive HSTS header
-r3bl.me: did not receive HSTS header
+r18.moe: did not receive HSTS header
+r3bl.me: could not connect to host
r40.us: could not connect to host
-ra-schaal.de: did not receive HSTS header
raajheshkannaa.com: could not connect to host
rabbitvcactus.eu: did not receive HSTS header
rabota-x.ru: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+rabotaescort.com: could not connect to host
racasdecachorro.org: could not connect to host
rackblue.com: could not connect to host
racktear.com: did not receive HSTS header
+racoo.net: did not receive HSTS header
rad-route.de: did not receive HSTS header
-radeticlaw.com: max-age too low: 0
+raddavarden.nu: could not connect to host
radicaleducation.net: could not connect to host
radioheteroglossia.com: did not receive HSTS header
-radiosendungen.com: did not receive HSTS header
-radishmoon.com: max-age too low: 0
+radiorsvp.com: could not connect to host
rafaelcz.de: could not connect to host
ragingserenity.com: did not receive HSTS header
ragnaroktop.com.br: could not connect to host
+rahadiana.com: could not connect to host
rahamasin.eu: could not connect to host
raiblockscommunity.net: could not connect to host
raidstone.com: could not connect to host
-raidstone.net: could not connect to host
raidstone.rocks: could not connect to host
+railgun.com.cn: could not connect to host
rainbin.com: could not connect to host
rainbowbarracuda.com: could not connect to host
rainel.at: did not receive HSTS header
+raisecorp.com: could not connect to host
raitza.de: could not connect to host
-ram-it.nl: could not connect to host
+rajkapoordas.com: could not connect to host
ramarka.de: could not connect to host
+ramezanloo.com: could not connect to host
ramitmittal.com: could not connect to host
ramon-c.nl: could not connect to host
ramonj.nl: could not connect to host
+ramsor-gaming.de: could not connect to host
randomcage.com: did not receive HSTS header
randomcloud.net: could not connect to host
randomhero.cloud: could not connect to host
@@ -10661,18 +11413,18 @@ randomwinpicker.de: could not connect to host
randy.pw: could not connect to host
ranegroup.hosting: could not connect to host
rankthespot.com: could not connect to host
-ranktopay.com: did not receive HSTS header
rannseier.org: did not receive HSTS header
ranos.org: could not connect to host
rany.duckdns.org: could not connect to host
rany.io: could not connect to host
rany.pw: could not connect to host
rapidemobile.com: could not connect to host
-rapidflow.io: did not receive HSTS header
+rapidflow.io: could not connect to host
rapido.nu: could not connect to host
rapidresearch.me: could not connect to host
rapidthunder.io: could not connect to host
rasing.me: did not receive HSTS header
+raspass.me: did not receive HSTS header
raspberry.us: could not connect to host
raspberryultradrops.com: did not receive HSTS header
rastreador.com.es: did not receive HSTS header
@@ -10684,11 +11436,13 @@ ratuseks.com: could not connect to host
ratuseks.net: could not connect to host
ratuseks.us: could not connect to host
rauchenwald.net: could not connect to host
+raucris.ro: could not connect to host
raulfraile.net: could not connect to host
ravage.fm: did not receive HSTS header
raven.lipetsk.ru: could not connect to host
ravengergaming.ga: could not connect to host
ravengergaming.net: could not connect to host
+ravenx.me: could not connect to host
ravkr.duckdns.org: max-age too low: 360000
ravse.dk: could not connect to host
raw-diets.com: did not receive HSTS header
@@ -10708,52 +11462,58 @@ rbose.org: could not connect to host
rbqcloud.com: could not connect to host
rbti.me: could not connect to host
rbxcatalog.com: could not connect to host
-rc-rp.com: did not receive HSTS header
rc4.io: could not connect to host
+rc7.ch: could not connect to host
rcafox.com: could not connect to host
+rcmlinx.com: could not connect to host
rcoliveira.com: could not connect to host
-rcorporation.be: did not receive HSTS header
rcpcbd.com: could not connect to host
rcvd.io: did not receive HSTS header
rcx.io: could not connect to host
rdfz.tech: could not connect to host
rdh.asia: did not receive HSTS header
rdns.im: did not receive HSTS header
-rdwh.tech: could not connect to host
rdyrda.fr: could not connect to host
-re-customer.net: did not receive HSTS header
+re-customer.net: could not connect to host
re-wilding.com: could not connect to host
reachr.com: could not connect to host
reactdatepicker.com: did not receive HSTS header
reactor92.com: could not connect to host
reader.ga: could not connect to host
+readism.io: could not connect to host
readityourself.net: did not receive HSTS header
readmeeatmedrinkme.com: did not receive HSTS header
readr.pw: could not connect to host
readydok.com: did not receive HSTS header
reagir43.fr: did not receive HSTS header
reaiaer.com: could not connect to host
+reakyaweso.me: could not connect to host
real-bits.com: could not connect to host
real-compare.com: did not receive HSTS header
realcli.com: could not connect to host
-realfamilyincest.com: could not connect to host
-really.io: did not receive HSTS header
+realhost.name: could not connect to host
+really.io: could not connect to host
reallyreally.io: did not receive HSTS header
realmic.net: could not connect to host
realmofespionage.com: could not connect to host
realnewhomes.com: could not connect to host
+realum.com: could not connect to host
+realum.de: could not connect to host
+realum.eu: could not connect to host
+realum.net: could not connect to host
realwoo.com: could not connect to host
reapdrive.net: did not receive HSTS header
-reaper.rip: did not receive HSTS header
+reaper.rip: could not connect to host
reardenporn.com: could not connect to host
rebekaesgabor.online: could not connect to host
rebootmc.com: could not connect to host
-receitas-de-bolos.pt: could not connect to host
+receitas-de-bolos.pt: did not receive HSTS header
receitasdebacalhau.pt: could not connect to host
-recetasdecocinaideal.com: did not receive HSTS header
recetasfacilesdehacer.com: did not receive HSTS header
rechat.com: did not receive HSTS header
rechenwerk.net: could not connect to host
+recommended.reviews: could not connect to host
+recompiled.org: max-age too low: 7776000
recruitsecuritytraining.co.uk: could not connect to host
recruitsecuritytraining.com: could not connect to host
rectoraudiparts.com: could not connect to host
@@ -10768,28 +11528,31 @@ redeemingbeautyminerals.com: max-age too low: 0
redhorsemountainranch.com: did not receive HSTS header
redicabo.de: could not connect to host
redirectman.com: could not connect to host
+redizoo.com: did not receive HSTS header
redlatam.org: could not connect to host
redmbk.com: did not receive HSTS header
redner.cc: did not receive HSTS header
rednertv.de: did not receive HSTS header
-rednoseday.com: could not connect to host
+rednoseday.com: did not receive HSTS header
redoakmedia.net: did not receive HSTS header
redperegrine.com: did not receive HSTS header
-redporno.cz: could not connect to host
redports.org: could not connect to host
redra.ws: did not receive HSTS header
redstarsurf.com: did not receive HSTS header
reducerin.ro: did not receive HSTS header
+redwoodpaddle.es: did not receive HSTS header
+redwoodpaddle.pt: could not connect to host
redy.host: did not receive HSTS header
reeson.at: could not connect to host
reeson.de: could not connect to host
reeson.info: could not connect to host
reeson.org: could not connect to host
+ref1oct.nl: could not connect to host
refactor.zone: did not receive HSTS header
referenten.org: did not receive HSTS header
refitplanner.com: did not receive HSTS header
reflecton.io: could not connect to host
-reflectores.net: could not connect to host
+reformatreality.com: could not connect to host
refreshingserum.com: could not connect to host
reg.ru: did not receive HSTS header
regaloaks.com: did not receive HSTS header
@@ -10802,13 +11565,16 @@ reginagroffy.com: could not connect to host
regio-salland.nl: could not connect to host
regionale.org: did not receive HSTS header
registertovoteflorida.gov: did not receive HSTS header
+regoul.com: did not receive HSTS header
regsec.com: could not connect to host
rehabthailand.nl: could not connect to host
+rei.ki: did not receive HSTS header
reic.me: could not connect to host
reidascuecas.com.br: could not connect to host
reignsphere.net: could not connect to host
reikiqueen.uk: could not connect to host
reinaertvandecruys.me: could not connect to host
+reineberthe.ch: could not connect to host
reismil.ch: could not connect to host
reisyukaku.org: did not receive HSTS header
reithguard-it.de: did not receive HSTS header
@@ -10816,33 +11582,33 @@ rejo.in: could not connect to host
rejuvemedspa.com: did not receive HSTS header
rekyou.com: could not connect to host
relatic.net: could not connect to host
+relaxhavefun.com: could not connect to host
relayawards.com: could not connect to host
reldoc.com.mx: did not receive HSTS header
reliable-mail.de: could not connect to host
-relisten.nl: could not connect to host
+relisten.nl: did not receive HSTS header
relsak.cz: could not connect to host
-relvan.com: did not receive HSTS header
rem.pe: did not receive HSTS header
rema.site: did not receive HSTS header
remaimodern.org: did not receive HSTS header
remain.london: could not connect to host
-remedica.fr: did not receive HSTS header
+remedica.fr: could not connect to host
remedioskaseros.com: did not receive HSTS header
remedium.de: could not connect to host
remedyrehab.com: did not receive HSTS header
rememberthis.co.za: could not connect to host
-remitatm.com: could not connect to host
remodela.com.ve: could not connect to host
remodelwithlegacy.com: did not receive HSTS header
remonttitekniikka.fi: could not connect to host
remoteham.com: could not connect to host
remotestance.com: did not receive HSTS header
rencaijia.com: did not receive HSTS header
-rencontres-erotiques.com: could not connect to host
+rencontres-erotiques.com: did not receive HSTS header
rengarenkblog.com: could not connect to host
renideo.fr: could not connect to host
renkhosting.com: could not connect to host
renlong.org: did not receive HSTS header
+rennfire.org: could not connect to host
renrenss.com: could not connect to host
rentacarcluj.xyz: did not receive HSTS header
rentbrowser.com: could not connect to host
@@ -10854,6 +11620,7 @@ renxinge.cn: did not receive HSTS header
repex.co.il: did not receive HSTS header
replaceits.me: could not connect to host
replacemychina.com: could not connect to host
+repo.ml: did not receive HSTS header
report-incident.de: could not connect to host
report-to.com: did not receive HSTS header
report-to.io: did not receive HSTS header
@@ -10871,10 +11638,10 @@ reputationweaver.com: could not connect to host
reqognize.com: could not connect to host
res-rheingau.de: did not receive HSTS header
res42.com: could not connect to host
-resc.la: could not connect to host
research.md: could not connect to host
-reseponline.info: could not connect to host
+reseponline.info: did not receive HSTS header
reserve-online.net: did not receive HSTS header
+reservoirtp.fr: did not receive HSTS header
residentsinsurance.co.uk: did not receive HSTS header
resl20.servehttp.com: could not connect to host
resoundpro.ca: could not connect to host
@@ -10882,21 +11649,23 @@ respice.xyz: could not connect to host
ressos.com: did not receive HSTS header
restaurace-klokocka.cz: did not receive HSTS header
restaurant-mangal.ch: could not connect to host
+restaurantemiperu.com: did not receive HSTS header
restaurantesimonetti.com.br: could not connect to host
restaurantmangal.ch: could not connect to host
restchart.com: did not receive HSTS header
restioson.me: could not connect to host
restopro.nyc: did not receive HSTS header
restoreresearchstudy.com: did not receive HSTS header
+resultsdate.news: could not connect to host
retcor.net: could not connect to host
-retetenoi.net: did not receive HSTS header
reth.ch: could not connect to host
retropage.co: did not receive HSTS header
retrowave.eu: could not connect to host
rets.org.br: did not receive HSTS header
-retube.ga: could not connect to host
+retube.ga: did not receive HSTS header
returnofwar.com: could not connect to host
revapost.ch: could not connect to host
+revapost.fr: could not connect to host
revealdata.com: did not receive HSTS header
revelaciones.tv: could not connect to host
revello.org: did not receive HSTS header
@@ -10904,12 +11673,12 @@ reverie.pw: could not connect to host
review.info: did not receive HSTS header
reviewbestseller.com: did not receive HSTS header
reviewjust.com: did not receive HSTS header
+reviewspedia.org: could not connect to host
revistapequenosolhares.com.br: could not connect to host
revolutionhive.com: could not connect to host
revtut.net: could not connect to host
-rewardstock.com: max-age too low: 0
rewopit.net: could not connect to host
-rex.st: did not receive HSTS header
+rex.st: could not connect to host
reykjavik.guide: could not connect to host
rezun.cloud: did not receive HSTS header
rf.tn: could not connect to host
@@ -10917,43 +11686,51 @@ rhapsodhy.hu: could not connect to host
rhdigital.pro: could not connect to host
rhering.de: could not connect to host
rhiskiapril.com: did not receive HSTS header
+rhodesianridgeback.com.br: could not connect to host
rhodosdreef.nl: could not connect to host
riaucybersolution.net: did not receive HSTS header
ribopierre.fr: could not connect to host
+ricardo.nu: could not connect to host
riceglue.com: could not connect to host
richamorindonesia.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
richardb.me: could not connect to host
+richardbloomfield.blog: did not receive HSTS header
richeza.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
richiemail.net: could not connect to host
richmondsunlight.com: did not receive HSTS header
richsiciliano.com: could not connect to host
richterphilipp.com: could not connect to host
rickmartensen.nl: did not receive HSTS header
+ricknox.com: did not receive HSTS header
rid-wan.com: could not connect to host
rideaudiscount.com: did not receive HSTS header
rideforwade.com: could not connect to host
rideforwade.net: could not connect to host
rideforwade.org: could not connect to host
-rideworks.com: could not connect to host
+rideworks.com: did not receive HSTS header
ridingoklahoma.com: could not connect to host
ridwan.co: could not connect to host
+rienasemettre.fr: did not receive HSTS header
riesenmagnete.de: did not receive HSTS header
rievo.net: did not receive HSTS header
right-to-love.name: did not receive HSTS header
right2.org: could not connect to host
righteousendeavour.com: could not connect to host
righttoknow.ie: did not receive HSTS header
-riiconnect24.net: max-age too low: 0
rijndael.xyz: could not connect to host
rijnmondeg.nl: did not receive HSTS header
rika.me: could not connect to host
ring0.xyz: did not receive HSTS header
ringh.am: could not connect to host
+rinj.se: could not connect to host
rionewyork.com.br: could not connect to host
ripa.io: did not receive HSTS header
rippleunion.com: could not connect to host
+riqy86.nl: could not connect to host
+ris.fi: could not connect to host
risingsun.red: could not connect to host
riskmgt.com.au: could not connect to host
+rissato.com.br: could not connect to host
ristorantefattoamano.eu: could not connect to host
rithm.ch: could not connect to host
rittis.ru: did not receive HSTS header
@@ -10963,11 +11740,10 @@ rivermendhealthcenters.com: did not receive HSTS header
riversideauto.net: did not receive HSTS header
riverstyxgame.com: could not connect to host
rivlo.com: could not connect to host
-rizon.me: max-age too low: 0
rj.gg: could not connect to host
rjnutrition.consulting: did not receive HSTS header
rk6.cz: could not connect to host
-rkkhok.hu: did not receive HSTS header
+rkc-hygrotherm.de: could not connect to host
rkmantpur.org: did not receive HSTS header
rmaqequipamentos.com.br: could not connect to host
rmdlingerie.com.br: did not receive HSTS header
@@ -10975,11 +11751,13 @@ rme.li: did not receive HSTS header
roadfeast.com: could not connect to host
roan24.pl: did not receive HSTS header
robertabittle.com: could not connect to host
-robertglastra.com: could not connect to host
+robertayamashita.com: could not connect to host
+robertayamashita.com.br: could not connect to host
+robertbln.com: could not connect to host
roberto-webhosting.nl: did not receive HSTS header
+robertocasares.no-ip.biz: could not connect to host
robi-net.it: could not connect to host
robigalia.org: did not receive HSTS header
-robin-novotny.com: could not connect to host
robinvdmarkt.nl: could not connect to host
robomonkey.org: could not connect to host
robteix.com: did not receive HSTS header
@@ -10992,6 +11770,7 @@ rocketnet.ml: could not connect to host
rockeyscrivo.com: did not receive HSTS header
rocksberg.net: could not connect to host
rockz.io: did not receive HSTS header
+rodarion.pl: could not connect to host
rodehutskors.net: could not connect to host
rodney.id.au: did not receive HSTS header
rodneybrooksjr.com: did not receive HSTS header
@@ -10999,17 +11778,15 @@ rodosto.com: did not receive HSTS header
roelf.org: did not receive HSTS header
roeper.party: could not connect to host
roesemann.email: could not connect to host
+rofrank.space: could not connect to host
rogeiro.net: could not connect to host
rogerdat.ovh: could not connect to host
-roguesignal.net: did not receive HSTS header
-rohanbassett.com: could not connect to host
+rohankrishnadev.in: could not connect to host
rohlik.cz: did not receive HSTS header
roketix.co.uk: did not receive HSTS header
rolandinsh.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
rolandkolodziej.com: max-age too low: 86400
-rolandreed.cn: did not receive HSTS header
rolandslate.com: did not receive HSTS header
-rolandszabo.com: could not connect to host
rolemaster.net: could not connect to host
roleplayhome.com: could not connect to host
rolroer.co.za: could not connect to host
@@ -11017,7 +11794,6 @@ romaimperator.com: did not receive HSTS header
romainmuller.xyz: did not receive HSTS header
romans-place.me.uk: could not connect to host
romanticschemermovie.com: could not connect to host
-romanticvillas.com.au: could not connect to host
romeoferraris.com: did not receive HSTS header
romulusapp.com: could not connect to host
ron2k.za.net: could not connect to host
@@ -11030,15 +11806,17 @@ roo.ie: could not connect to host
rool.me: did not receive HSTS header
roolevoi.ru: could not connect to host
room-checkin24.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+roosteroriginals.com: could not connect to host
rootbsd.at: could not connect to host
rootforum.org: did not receive HSTS header
-rootrelativity.com: did not receive HSTS header
+rootrelativity.com: could not connect to host
rootservice.org: did not receive HSTS header
rootwpn.com: could not connect to host
rop.io: could not connect to host
roquecenter.org: did not receive HSTS header
roromendut.online: could not connect to host
rorymcdaniel.com: did not receive HSTS header
+rosewoodranch.com: did not receive HSTS header
rosi-royal.com: could not connect to host
rospa100.com: did not receive HSTS header
rossclark.com: did not receive HSTS header
@@ -11048,10 +11826,11 @@ rotex1840.de: did not receive HSTS header
rotozen.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
rotter-dam.nl: did not receive HSTS header
rotterdamjazz.info: could not connect to host
+rotzonline.com: could not connect to host
rough.nu: could not connect to host
+roundaboutweb.info: did not receive HSTS header
roundtheme.com: did not receive HSTS header
rous.se: could not connect to host
-routerclub.ru: could not connect to host
rouvray.org: could not connect to host
royal-forest.org: max-age too low: 0
royal-mangal.ch: could not connect to host
@@ -11069,11 +11848,9 @@ rrom.me: did not receive HSTS header
rs-devdemo.host: could not connect to host
rsajeey.info: could not connect to host
rsampaio.info: did not receive HSTS header
-rsblake.net: did not receive HSTS header
rsf.io: could not connect to host
rsi.im: did not receive HSTS header
rskuipers.com: did not receive HSTS header
-rsldb.com: could not connect to host
rsmaps.org: could not connect to host
rstraining.co.uk: could not connect to host
rstsecuritygroup.co.uk: could not connect to host
@@ -11083,14 +11860,18 @@ rtho.me: did not receive HSTS header
rtvi.com: did not receive HSTS header
rubbereggs.ca: could not connect to host
rubbix.net: could not connect to host
+rubbleremovalsbenoni.co.za: did not receive HSTS header
rubecodeberg.com: could not connect to host
ruben.am: did not receive HSTS header
rubendv.be: did not receive HSTS header
+rubens.cloud: did not receive HSTS header
rubenschulz.nl: could not connect to host
rubi-ka.net: max-age too low: 0
ruborr.se: did not receive HSTS header
+ruby-auf-schienen.de: could not connect to host
rubysecurity.org: did not receive HSTS header
-rubyshop.nl: did not receive HSTS header
+rubyshop.nl: could not connect to host
+rucnerobene.eu: could not connect to host
rudeotter.com: did not receive HSTS header
rue-de-la-vieille.fr: max-age too low: 0
ruflay.ru: could not connect to host
@@ -11102,6 +11883,7 @@ ruig.jp: could not connect to host
ruitershoponline.nl: did not receive HSTS header
ruja.dk: did not receive HSTS header
rukhaiyar.com: could not connect to host
+rummel-platz.de: could not connect to host
rumoterra.com.br: could not connect to host
run-forrest.run: could not connect to host
runawebinar.nl: could not connect to host
@@ -11114,17 +11896,13 @@ runtondev.com: did not receive HSTS header
ruobiyi.com: could not connect to host
ruqu.nl: could not connect to host
rusadmin.biz: did not receive HSTS header
-ruska-modra.cz: did not receive HSTS header
-ruskamodra.cz: did not receive HSTS header
rusl.me: could not connect to host
rusmolotok.ru: could not connect to host
-russellandbrowns.co.uk: max-age too low: 0
russmarshall.com: could not connect to host
rustbyexample.com: did not receive HSTS header
rustfanatic.com: did not receive HSTS header
ruurdboomsma.nl: could not connect to host
ruxit.com: did not receive HSTS header
-rv-jpshop.com: could not connect to host
rvg.zone: could not connect to host
rw-solutions.tech: could not connect to host
rwanderlust.com: did not receive HSTS header
@@ -11132,6 +11910,8 @@ rxprep.com: did not receive HSTS header
rxt.social: could not connect to host
rxv.cc: could not connect to host
ryanteck.uk: did not receive HSTS header
+rybox.info: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+ryejuice.sytes.net: could not connect to host
rylin.net: did not receive HSTS header
rylore.com: could not connect to host
ryssland.guide: could not connect to host
@@ -11141,34 +11921,41 @@ s-on.li: could not connect to host
s-rickroll-p.pw: could not connect to host
s.how: could not connect to host
s0923.com: could not connect to host
+s0laris.co.uk: could not connect to host
+s1mplescripts.de: could not connect to host
+s3cases.com: did not receive HSTS header
s3n.se: could not connect to host
saabwa.org: did not receive HSTS header
sabatek.pl: did not receive HSTS header
sabine-forschbach.de: could not connect to host
sabineforschbach.de: could not connect to host
sabtunes.com: did not receive HSTS header
+sac-shop.com: did not receive HSTS header
saco-ceso.com: could not connect to host
sadiejanehair.com: could not connect to host
-sadsu.com: could not connect to host
-safe.moe: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+safari-afrique.com: did not receive HSTS header
+safe.moe: did not receive HSTS header
safedevice.net: did not receive HSTS header
safelist.eu: did not receive HSTS header
safemovescheme.co.uk: could not connect to host
+safepay.io: could not connect to host
saferedirect.link: could not connect to host
saferedirectlink.com: could not connect to host
safersurfing.eu: did not receive HSTS header
safesecret.info: did not receive HSTS header
safetyrisk.net: did not receive HSTS header
safewings-nh.nl: could not connect to host
-safing.me: did not receive HSTS header
+safing.me: could not connect to host
+safnah.com: did not receive HSTS header
sagarhandicraft.com: could not connect to host
sageth.com: could not connect to host
sah3.net: could not connect to host
-saharalondon.com: max-age too low: 0
sail-nyc.com: did not receive HSTS header
saint-astier-triathlon.com: did not receive HSTS header
saintjohnlutheran.church: did not receive HSTS header
+saintw.com: could not connect to host
sairai.bid: could not connect to host
+saitrance.com: could not connect to host
sakaserver.com: did not receive HSTS header
sakib.ninja: did not receive HSTS header
sakurabuff.com: could not connect to host
@@ -11177,20 +11964,21 @@ sale.sh: could not connect to host
salearnership.co.za: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
saleslift.pl: did not receive HSTS header
sallysubs.com: could not connect to host
-salon-claudia.ch: could not connect to host
salonestella.it: could not connect to host
salserocafe.com: did not receive HSTS header
salserototal.com: could not connect to host
saltedskies.com: could not connect to host
saltra.online: could not connect to host
+salvaalocombia.com: could not connect to host
salverainha.org: could not connect to host
salzamt.tk: could not connect to host
samanthahumphreysstudio.com: did not receive HSTS header
samaritan.tech: could not connect to host
samaritansnet.org: did not receive HSTS header
sametovymesic.cz: could not connect to host
+samkelleher.com: could not connect to host
saml2.com: could not connect to host
-samlamac.com: did not receive HSTS header
+samlamac.com: could not connect to host
samm.com.au: did not receive HSTS header
sammyjohnson.com: could not connect to host
samp.im: could not connect to host
@@ -11199,19 +11987,19 @@ sampoznay.ru: did not receive HSTS header
samraskauskas.com: could not connect to host
samsen.club: could not connect to host
samsonova.de: could not connect to host
-samsungxoa.com: did not receive HSTS header
+samsungxoa.com: could not connect to host
samvanderkris.com: did not receive HSTS header
sanael.net: could not connect to host
sanasalud.org: could not connect to host
sanatfilan.com: did not receive HSTS header
sanatrans.com: could not connect to host
-sancy.de: max-age too low: 0
+sand-islets.de: did not receive HSTS header
sandviks.com: did not receive HSTS header
+sanglierhurlant.fr: could not connect to host
sanguoxiu.com: could not connect to host
sanhei.ch: did not receive HSTS header
sanik.my: did not receive HSTS header
-sanissimo.com.mx: max-age too low: 86400
-sanmuding.com: could not connect to host
+sanradon.by: did not receive HSTS header
sansage.com.br: could not connect to host
sansdev.com: could not connect to host
sansemea.com: did not receive HSTS header
@@ -11228,7 +12016,6 @@ santorinibbs.com: did not receive HSTS header
santouri.be: could not connect to host
saotn.org: did not receive HSTS header
sapereaude.com.pl: did not receive HSTS header
-sapience.com: did not receive HSTS header
sapporobeer.com: could not connect to host
sapuncheta.com: could not connect to host
saq.com: could not connect to host
@@ -11236,14 +12023,15 @@ sarah-beckett-harpist.com: did not receive HSTS header
sarahsweetlife.com: could not connect to host
sarahsweger.com: could not connect to host
sarakas.com: could not connect to host
-saraleebread.com: max-age too low: 86400
sarangsemutbandung.com: could not connect to host
sarindia.com: could not connect to host
sarindia.de: could not connect to host
+sarink.eu: could not connect to host
sarisonproductions.com: did not receive HSTS header
sarkarischeme.in: could not connect to host
sarkisozleri.us: could not connect to host
sarndipity.com: could not connect to host
+saro.me: did not receive HSTS header
saruwebshop.co.za: could not connect to host
sat.rent: did not receive HSTS header
sat7a-riyadh.com: did not receive HSTS header
@@ -11262,13 +12050,14 @@ saturngames.co.uk: could not connect to host
saucyfox.net: did not receive HSTS header
saudeeconforto.com.br: did not receive HSTS header
sauenytt.no: could not connect to host
+saumon.io: did not receive HSTS header
saumon.xyz: could not connect to host
saunasandstuff.ca: did not receive HSTS header
saunasandstuff.com: did not receive HSTS header
savacloud.com: did not receive HSTS header
save.gov: could not connect to host
saveaward.gov: could not connect to host
-savecashindia.com: could not connect to host
+savecashindia.com: did not receive HSTS header
savekorea.net: max-age too low: 0
savemoneyonenergy.com: did not receive HSTS header
savethedogfishfoundation.org: could not connect to host
@@ -11276,18 +12065,21 @@ saveyour.biz: could not connect to host
savingbytes.com: could not connect to host
savinggoliath.com: could not connect to host
savvysuit.com: did not receive HSTS header
-sawamura-rental.com: max-age too low: 0
saxol-group.com: could not connect to host
say-hanabi.com: could not connect to host
sayhanabi.com: could not connect to host
sazima.ru: did not receive HSTS header
+sbirecruitment.co.in: could not connect to host
sbm.cloud: could not connect to host
sbobetfun.com: did not receive HSTS header
sbox-archives.com: could not connect to host
sby.de: did not receive HSTS header
sc4le.com: could not connect to host
+scaffoldhirefourways.co.za: did not receive HSTS header
+scaffoldhirerandburg.co.za: did not receive HSTS header
scala.click: did not receive HSTS header
scannabi.com: could not connect to host
+sch44r0n.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
schaafenstrasse.koeln: could not connect to host
schachburg.de: did not receive HSTS header
schadegarant.net: could not connect to host
@@ -11295,17 +12087,23 @@ schalkoortbv.nl: did not receive HSTS header
schau-rein.co.at: did not receive HSTS header
schauer.so: could not connect to host
schd.io: did not receive HSTS header
+schefczyk.com: could not connect to host
+schefczyk.de: could not connect to host
+schefczyk.eu: could not connect to host
schermreparatierotterdam.nl: did not receive HSTS header
schlabbi.com: did not receive HSTS header
schmidttulskie.de: could not connect to host
schmitt.ovh: could not connect to host
schmitt.ws: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+schneider-electric.tg: could not connect to host
schnell-abnehmen.tips: did not receive HSTS header
schnell-gold.com: did not receive HSTS header
scholl.io: could not connect to host
schooli.io: could not connect to host
schooltrends.co.uk: did not receive HSTS header
+schoolze.com: did not receive HSTS header
schoop.me: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+schorel.ovh: could not connect to host
schraebanowicz.net: did not receive HSTS header
schreiber-netzwerk.eu: did not receive HSTS header
schreibnacht.de: did not receive HSTS header
@@ -11316,13 +12114,15 @@ schroepfglas-versand.de: did not receive HSTS header
schroettle.com: did not receive HSTS header
schulterglatzen-altenwalde.de: could not connect to host
schwarzkopfforyou.de: did not receive HSTS header
+schwarzwaldcon.de: could not connect to host
schweiz.guide: could not connect to host
schweizerbolzonello.net: could not connect to host
schwetz.net: could not connect to host
+sci-internet.tk: could not connect to host
scib.tk: could not connect to host
scicasts.com: max-age too low: 7776000
+science-anatomie.com: did not receive HSTS header
scienceathome.org: did not receive HSTS header
-sciencebase.gov: did not receive HSTS header
sciencemonster.co.uk: could not connect to host
scintillating.stream: could not connect to host
scionasset.com: did not receive HSTS header
@@ -11340,15 +12140,17 @@ scottferguson.com.au: did not receive HSTS header
scotthel.me: did not receive HSTS header
scotthelme.com: did not receive HSTS header
scottnicol.co.uk: could not connect to host
-scourt.info: could not connect to host
+scourt.info: max-age too low: 0
scourt.org.ua: could not connect to host
+scoutdb.ch: did not receive HSTS header
scrambl.is: could not connect to host
scramble.io: did not receive HSTS header
scrambler.in: could not connect to host
scrapings.net: could not connect to host
screencaster.io: did not receive HSTS header
+screenplay.jp: max-age too low: 0
screenresolution.space: could not connect to host
-screensaversplanet.com: could not connect to host
+screensaversplanet.com: did not receive HSTS header
scribbleserver.com: could not connect to host
scribe.systems: could not connect to host
scrion.com: could not connect to host
@@ -11359,6 +12161,7 @@ scriptict.nl: could not connect to host
scriptjunkie.us: could not connect to host
scrollstory.com: did not receive HSTS header
scruffymen.com: could not connect to host
+scrumbleship.com: did not receive HSTS header
sctm.at: could not connect to host
sdhmanagementgroup.com: could not connect to host
sdia.ru: could not connect to host
@@ -11367,10 +12170,9 @@ sdmoscow.ru: could not connect to host
sdrobs.com: did not receive HSTS header
sdsl-speedtest.de: could not connect to host
se7ensins.com: did not receive HSTS header
-sealbaker.com: could not connect to host
+seadus.ee: could not connect to host
seanationals.org: did not receive HSTS header
seanchaidh.org: could not connect to host
-seankilgarriff.com: could not connect to host
seans.cc: did not receive HSTS header
seanstrout.com: did not receive HSTS header
seansyardservice.com: did not receive HSTS header
@@ -11386,7 +12188,7 @@ sebi.cf: could not connect to host
sebster.com: did not receive HSTS header
secandtech.com: could not connect to host
seccomp.ru: did not receive HSTS header
-seceye.cn: did not receive HSTS header
+seceye.cn: could not connect to host
secitem.de: could not connect to host
secnet.ga: could not connect to host
secondary-survivor.com: could not connect to host
@@ -11395,12 +12197,13 @@ secondary-survivor.net: could not connect to host
secondarysurvivor.help: could not connect to host
secondarysurvivorportal.com: could not connect to host
secondarysurvivorportal.help: could not connect to host
+secondbike.co.uk: did not receive HSTS header
secondbyte.nl: could not connect to host
secondpay.nl: could not connect to host
secondspace.ca: could not connect to host
secretnation.net: did not receive HSTS header
secretofanah.com: could not connect to host
-secretpanties.com: could not connect to host
+secretsanta.fr: could not connect to host
sectest.ml: could not connect to host
sectia22.ro: did not receive HSTS header
secur3.us: did not receive HSTS header
@@ -11416,7 +12219,6 @@ secureideas.com: did not receive HSTS header
secureindia.co: could not connect to host
secureradio.net: could not connect to host
securesuisse.ch: could not connect to host
-securetronic.ch: could not connect to host
securita.eu: did not receive HSTS header
security-carpet.com: could not connect to host
security-thoughts.org: could not connect to host
@@ -11425,7 +12227,6 @@ security.xn--q9jyb4c: could not connect to host
securityarena.com: could not connect to host
securitybsides.pl: did not receive HSTS header
securityglance.com: could not connect to host
-securityheaders.io: did not receive HSTS header
securityinet.biz: did not receive HSTS header
securityinet.net: did not receive HSTS header
securityinet.org.il: could not connect to host
@@ -11459,15 +12260,14 @@ selco-himejiminami.com: could not connect to host
selecadm.name: could not connect to host
selectary.com: could not connect to host
selectcertifiedautos.com: did not receive HSTS header
-selectel.com: did not receive HSTS header
selectruckscalltrackingreports.com: could not connect to host
seleondar.ru: did not receive HSTS header
-self-signed.com: could not connect to host
selfdefenserx.com: did not receive HSTS header
selfhosters.com: could not connect to host
selfie-france.fr: could not connect to host
-selfmade4u.de: did not receive HSTS header
+selfmade4u.de: could not connect to host
selfserverx.com: could not connect to host
+selitysvideot.fi: did not receive HSTS header
selldorado.com: could not connect to host
sellercritic.com: did not receive HSTS header
sellocdn.com: could not connect to host
@@ -11475,30 +12275,35 @@ sellservs.co.za: could not connect to host
semantheme.fr: did not receive HSTS header
semen3325.xyz: could not connect to host
semenkovich.com: did not receive HSTS header
-semenov.su: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
sementes.gratis: could not connect to host
semps-servers.de: could not connect to host
-sendash.com: could not connect to host
+sendash.com: did not receive HSTS header
sendmeback.de: did not receive HSTS header
senedirect.com: could not connect to host
-sens2lavie.com: max-age too low: 0
+senmonsyoku.top: did not receive HSTS header
+sens2lavie.com: did not receive HSTS header
senseofnumber.co.uk: did not receive HSTS header
+senseye.io: did not receive HSTS header
sensiblemn.org: could not connect to host
sensibus.com: did not receive HSTS header
sensoft-int.com: could not connect to host
-sensualism.com: could not connect to host
seo-lagniappe.com: did not receive HSTS header
+seoarchive.org: could not connect to host
seobot.com.au: could not connect to host
+seohochschule.de: could not connect to host
seomarketingdeals.com: did not receive HSTS header
seomen.biz: could not connect to host
seomobo.com: could not connect to host
seosanantonioinc.com: did not receive HSTS header
seoscribe.net: could not connect to host
seosec.xyz: could not connect to host
+seotronix.net: did not receive HSTS header
seowarp.net: did not receive HSTS header
sep23.ru: could not connect to host
+sepakbola.win: could not connect to host
sephr.com: did not receive HSTS header
sepie.gob.es: did not receive HSTS header
+seproco.com: could not connect to host
seq.tf: did not receive HSTS header
serafin.tech: could not connect to host
serathius.ovh: could not connect to host
@@ -11506,10 +12311,11 @@ serbien.guide: could not connect to host
serenitycreams.com: did not receive HSTS header
serfdom.io: did not receive HSTS header
serized.pw: could not connect to host
-serkaneles.com: did not receive HSTS header
+serkaneles.com: could not connect to host
servecrypt.com: could not connect to host
servecrypt.net: could not connect to host
servecrypt.ru: could not connect to host
+server-bg.net: could not connect to host
server.pk: did not receive HSTS header
serverangels.co.uk: did not receive HSTS header
servercode.ca: did not receive HSTS header
@@ -11520,25 +12326,22 @@ servermonkey.nl: could not connect to host
servfefe.com: could not connect to host
servicevie.com: did not receive HSTS header
servu.de: did not receive HSTS header
+servx.ru: did not receive HSTS header
seryo.moe: could not connect to host
seryo.net: could not connect to host
seryovpn.com: could not connect to host
sesha.co.za: did not receive HSTS header
+setkit.net: did not receive HSTS header
setuid.de: could not connect to host
setuid.io: did not receive HSTS header
-sevsey.ru: could not connect to host
-sex-education.com: could not connect to host
-sexgarage.de: could not connect to host
-sexocomgravidas.com: could not connect to host
-sexpay.net: could not connect to host
+sevenhearts.online: could not connect to host
sexshopfacil.com.br: could not connect to host
sexshopsgay.com: did not receive HSTS header
-sexwork.net: could not connect to host
seyahatsagliksigortalari.com: could not connect to host
-seydaozcan.com: did not receive HSTS header
+seydaozcan.com: could not connect to host
seyr.it: could not connect to host
+seyr.me: could not connect to host
sfashion.si: did not receive HSTS header
-sfaturiit.ro: could not connect to host
sfhobbies.com.br: could not connect to host
sfsltd.com: did not receive HSTS header
sgcaccounts.co.uk: did not receive HSTS header
@@ -11547,9 +12350,10 @@ sgthotshot.com: could not connect to host
sh11.pp.ua: did not receive HSTS header
sh4y.com: could not connect to host
sha2017.org: did not receive HSTS header
+shaamrelief.org: did not receive HSTS header
shadiku.com: could not connect to host
shadow-socks.net: could not connect to host
-shadow-socks.org: did not receive HSTS header
+shadow-socks.org: could not connect to host
shadow-socks.pro: could not connect to host
shadowguardian507-irl.tk: did not receive HSTS header
shadowguardian507.tk: did not receive HSTS header
@@ -11576,8 +12380,9 @@ shakebox.de: could not connect to host
shamka.ru: could not connect to host
shanesage.com: could not connect to host
shang-yu.cn: could not connect to host
-shankangke.com: could not connect to host
+shankangke.com: did not receive HSTS header
shanxiapark.com: could not connect to host
+shanyhs.com: did not receive HSTS header
shapesedinburgh.co.uk: did not receive HSTS header
shardsoft.com: could not connect to host
shareimg.xyz: could not connect to host
@@ -11590,7 +12395,6 @@ shareworx.net: could not connect to host
sharezen.de: could not connect to host
sharingcode.com: did not receive HSTS header
sharpe-practice.co.uk: could not connect to host
-sharvey.ca: could not connect to host
shatorin.com: could not connect to host
shauncrowley.co.uk: could not connect to host
shaunwheelhou.se: could not connect to host
@@ -11598,18 +12402,21 @@ shavingks.com: could not connect to host
shawnbsmith.me: did not receive HSTS header
shawnh.net: could not connect to host
shawnstarrcustomhomes.com: did not receive HSTS header
+shawnwilson.info: could not connect to host
+shellj.me: did not receive HSTS header
shellsec.pw: did not receive HSTS header
+shengrenyu.com: could not connect to host
shentengtu.idv.tw: could not connect to host
shep.co.il: did not receive HSTS header
sheratan.web.id: could not connect to host
-shereallyheals.com: did not receive HSTS header
+shereallyheals.com: could not connect to host
shermantank.biz: did not receive HSTS header
shervik.ga: could not connect to host
+shethbox.com: could not connect to host
shevronpatriot.ru: did not receive HSTS header
sheying.tm: could not connect to host
shg-pornographieabhaengigkeit.de: did not receive HSTS header
-shh.sh: could not connect to host
-shiatsu-institut.ch: did not receive HSTS header
+shiatsu-institut.ch: could not connect to host
shibainu.com.br: could not connect to host
shibe.club: could not connect to host
shieldofachilles.in: could not connect to host
@@ -11619,7 +12426,7 @@ shiftnrg.org: did not receive HSTS header
shiftplanning.com: did not receive HSTS header
shiinko.com: could not connect to host
shikinobi.com: did not receive HSTS header
-shimo.im: did not receive HSTS header
+shimo.im: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
shindorei.fr: could not connect to host
shinebijoux.com.br: could not connect to host
shinju.moe: could not connect to host
@@ -11634,7 +12441,7 @@ shiroki-k.net: could not connect to host
shirosaki.org: could not connect to host
shiseki.top: did not receive HSTS header
shishkin.link: did not receive HSTS header
-shitfest.info: could not connect to host
+shitfest.info: did not receive HSTS header
shitposting.life: could not connect to host
shk.im: could not connect to host
shlemenkov.by: could not connect to host
@@ -11643,6 +12450,7 @@ sho-tanaka.jp: did not receive HSTS header
shocksrv.com: did not receive HSTS header
shooshosha.com: could not connect to host
shootpooloklahoma.com: could not connect to host
+shopatkei.com: could not connect to host
shopdopastor.com.br: could not connect to host
shopherbal.co.za: could not connect to host
shopods.com: did not receive HSTS header
@@ -11652,10 +12460,11 @@ shoppingreview.org: did not receive HSTS header
shoprose.ru: could not connect to host
shoprsc.com: could not connect to host
shops.neonisi.com: could not connect to host
+shorten.ninja: could not connect to host
shortpath.com: could not connect to host
shortr.li: could not connect to host
shota.party: could not connect to host
-shota.vip: could not connect to host
+shotonwhat.com: could not connect to host
shotpixonline.com.br: did not receive HSTS header
show-stream.tv: could not connect to host
shower.im: did not receive HSTS header
@@ -11681,18 +12490,18 @@ siao-mei.com: did not receive HSTS header
sichere-kartenakzeptanz.de: could not connect to host
siciliadigitale.pro: could not connect to host
sictame-tigf.org: did not receive HSTS header
-siddhant.me: max-age too low: 0
siebens.net: could not connect to host
sifls.com: could not connect to host
sifreuret.com: could not connect to host
+signere.com: could not connect to host
+signere.no: could not connect to host
signoracle.com: could not connect to host
signosquecombinam.com.br: could not connect to host
-sigterm.no: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+sigsegv.run: did not receive HSTS header
siikarantacamping.fi: did not receive HSTS header
sijimi.cn: could not connect to host
sijmenschoon.nl: could not connect to host
sikatehtaat.fi: could not connect to host
-sikayetvar.com: did not receive HSTS header
siku.pro: could not connect to host
silent.live: could not connect to host
silentcircle.com: did not receive HSTS header
@@ -11704,15 +12513,18 @@ silicagelpackets.ca: did not receive HSTS header
silqueskineyeserum.com: could not connect to host
silver-drachenkrieger.de: did not receive HSTS header
silverback.is: did not receive HSTS header
-silvergoldbull.fi: could not connect to host
+silvergoldbull.ba: could not connect to host
+silvergoldbull.md: could not connect to host
silverhome.ninja: could not connect to host
silverpvp.com: could not connect to host
+silverstartup.sk: could not connect to host
silviamacallister.com: did not receive HSTS header
silvistefi.com: could not connect to host
silvobeat.blog: could not connect to host
+sim-sim.appspot.com: did not receive HSTS header
simbast.com: could not connect to host
simbihaiti.com: max-age too low: 7889238
-simbol.id: did not receive HSTS header
+simbol.id: could not connect to host
simbolo.co.uk: could not connect to host
simccorp.com: did not receive HSTS header
simeon.us: max-age too low: 2592000
@@ -11729,6 +12541,8 @@ simongong.net: did not receive HSTS header
simonsaxon.com: did not receive HSTS header
simonsmh.cc: did not receive HSTS header
simpan.id: could not connect to host
+simpeo.fr: did not receive HSTS header
+simpeo.org: did not receive HSTS header
simpleai.net: max-age too low: 600
simplefraud.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
simplelearner.com: could not connect to host
@@ -11740,6 +12554,7 @@ simplixos.org: could not connect to host
simplyenak.com: did not receive HSTS header
sims4hub.ga: could not connect to host
simtin-net.de: could not connect to host
+simumiehet.com: could not connect to host
simyo.nl: did not receive HSTS header
sin30.net: could not connect to host
sincai666.com: could not connect to host
@@ -11747,19 +12562,18 @@ sinclairmoving.com: did not receive HSTS header
sincron.org: could not connect to host
sinefili.com: did not receive HSTS header
sinful.pw: could not connect to host
-sinfulforums.net: could not connect to host
-singerwang.com: did not receive HSTS header
-singles-berlin.de: could not connect to host
+singee.site: could not connect to host
singul4rity.com: could not connect to host
sinkip.com: could not connect to host
sinneserweiterung.de: could not connect to host
sinoscandinavia.se: could not connect to host
sinosky.org: did not receive HSTS header
-sinsojb.me: could not connect to host
sintesysglobal.com: did not receive HSTS header
sinusbot.online: did not receive HSTS header
sion.moe: did not receive HSTS header
+sipsik.net: did not receive HSTS header
siqi.wang: could not connect to host
+sirburton.com: did not receive HSTS header
siriad.com: could not connect to host
sirius-lee.net: could not connect to host
siro.gq: did not receive HSTS header
@@ -11767,17 +12581,22 @@ siroop.ch: max-age too low: 86400
sistemasespecializados.com: did not receive HSTS header
sistersurprise.de: did not receive HSTS header
sitecloudify.com: could not connect to host
-sitehost.io: max-age too low: 86400
+sitecuatui.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+sitehome.eu: could not connect to host
+sitehost.io: did not receive HSTS header
sitemaxiphilippe.ch: could not connect to host
sitennisclub.com: did not receive HSTS header
siterip.org: could not connect to host
sites.google.com: did not receive HSTS header (error ignored - included regardless)
sitesforward.com: did not receive HSTS header
+sitesko.de: did not receive HSTS header
+sitesource101.com: did not receive HSTS header
sitesten.com: did not receive HSTS header
sittinginoblivion.com: did not receive HSTS header
sixcorners.info: could not connect to host
sizingservers.be: did not receive HSTS header
-sizzle.co.uk: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+sizzle.co.uk: did not receive HSTS header
+sjdaws.com: could not connect to host
sjhyl11.com: could not connect to host
sjsc.fr: did not receive HSTS header
skandiabanken.no: did not receive HSTS header
@@ -11792,9 +12611,10 @@ ski-insurance.com.au: did not receive HSTS header
skidstresser.com: could not connect to host
skiinstructor.services: did not receive HSTS header
skilldetector.com: could not connect to host
-skillproxy.com: max-age too low: 0
+skillproxy.com: could not connect to host
skillproxy.net: could not connect to host
skillproxy.org: could not connect to host
+skinbet.co: could not connect to host
skinmarket.co: could not connect to host
skischuleulm.de: did not receive HSTS header
skk.io: could not connect to host
@@ -11804,17 +12624,15 @@ skoda-im-dialog.de: could not connect to host
skoda-nurdiebesten.de: did not receive HSTS header
skoda-service-team-cup.de: did not receive HSTS header
skotty.io: did not receive HSTS header
-skou.dk: could not connect to host
skpdev.net: could not connect to host
-skrivande.co: did not receive HSTS header
+skrivande.co: could not connect to host
skullhouse.nyc: did not receive HSTS header
sky-aroma.com: could not connect to host
skyasker.cn: could not connect to host
-skyasker.com: could not connect to host
+skyasker.com: did not receive HSTS header
skyflix.me: could not connect to host
skyline.link: could not connect to host
skyline.tw: did not receive HSTS header
-skylinertech.com: could not connect to host
skylocker.net: could not connect to host
skyoy.com: did not receive HSTS header
skypeassets.com: could not connect to host
@@ -11825,6 +12643,7 @@ skyveo.ml: did not receive HSTS header
skyway.capital: did not receive HSTS header
skyworldserver.ddns.net: could not connect to host
sl1pkn07.wtf: could not connect to host
+slab.com: did not receive HSTS header
slaps.be: could not connect to host
slash-dev.de: did not receive HSTS header
slash64.co.uk: could not connect to host
@@ -11843,11 +12662,13 @@ sliceone.com: could not connect to host
slicketl.com: did not receive HSTS header
slightfuture.click: could not connect to host
slightfuture.com: did not receive HSTS header
+slimmerbouwen.be: did not receive HSTS header
slix.io: could not connect to host
sln.cloud: could not connect to host
slope.haus: could not connect to host
slovakiana.sk: did not receive HSTS header
slovoice.org: could not connect to host
+slowfood.es: did not receive HSTS header
slowsociety.org: could not connect to host
slse.ca: max-age too low: 0
sluplift.com: did not receive HSTS header
@@ -11861,10 +12682,10 @@ smallshopit.com: did not receive HSTS header
smart-mirror.de: did not receive HSTS header
smart-ov.nl: could not connect to host
smartbiz.vn: could not connect to host
+smartboleta.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
smartbuyelectric.com: could not connect to host
smartcoin.com.br: could not connect to host
smarterskies.gov: did not receive HSTS header
-smartfon4you.ru: max-age too low: 0
smarthomedna.com: did not receive HSTS header
smartit.pro: did not receive HSTS header
smartlend.se: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
@@ -11872,12 +12693,13 @@ smartofficesandsmarthomes.com: did not receive HSTS header
smartofficeusa.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
smartphone.continental.com: could not connect to host
smartrak.co.nz: did not receive HSTS header
+smcbox.com: did not receive HSTS header
smdev.fr: could not connect to host
smet.us: could not connect to host
smexpt.com: did not receive HSTS header
smi-a.me: could not connect to host
smileawei.com: could not connect to host
-smimea.com: could not connect to host
+smimea.com: did not receive HSTS header
smirkingwhorefromhighgarden.pro: could not connect to host
smith.is: could not connect to host
smittix.co.uk: did not receive HSTS header
@@ -11887,15 +12709,17 @@ smksultanismail2.com: could not connect to host
smkw.com: did not receive HSTS header
sml.lc: could not connect to host
smmcab.ru: could not connect to host
-smokinghunks.com: could not connect to host
smove.sg: did not receive HSTS header
smplix.com: could not connect to host
+smries.com: could not connect to host
+sms1.ro: could not connect to host
smsben.cn: did not receive HSTS header
smsben.com: did not receive HSTS header
smspodmena.ru: could not connect to host
smtp.bz: did not receive HSTS header
smuhelper.cn: could not connect to host
smusg.com: could not connect to host
+smx.net.br: could not connect to host
snafarms.com: did not receive HSTS header
snailing.org: could not connect to host
snakehosting.dk: did not receive HSTS header
@@ -11907,27 +12731,31 @@ sneed.company: could not connect to host
snekchat.moe: could not connect to host
snelwerk.be: could not connect to host
sng.my: could not connect to host
+snic.website: could not connect to host
+sniderman.xyz: could not connect to host
snip.host: could not connect to host
snippet.host: could not connect to host
snod.land: did not receive HSTS header
snoozedds.com: max-age too low: 600
snoqualmiefiber.org: could not connect to host
+snovey.com: could not connect to host
snowdy.eu: could not connect to host
snowdy.link: could not connect to host
so-healthy.co.uk: did not receive HSTS header
sobabox.ru: could not connect to host
sobinski.pl: did not receive HSTS header
soboleva-pr.com.ua: could not connect to host
-socal-babes.com: could not connect to host
soccergif.com: could not connect to host
soci.ml: could not connect to host
social-journey.com: could not connect to host
socialbillboard.com: could not connect to host
socialcs.xyz: could not connect to host
+socialdj.de: did not receive HSTS header
+socialfacecook.com: could not connect to host
socialgrowing.cl: did not receive HSTS header
socialhead.io: could not connect to host
socialhub.com: did not receive HSTS header
-socialnitro.com: could not connect to host
+socialmirror.app: did not receive HSTS header
socialprize.com: could not connect to host
socialspirit.com.br: did not receive HSTS header
socialworkout.com: could not connect to host
@@ -11940,10 +12768,10 @@ socomponents.co.uk: could not connect to host
sodacore.com: could not connect to host
soe-server.com: could not connect to host
softballsavings.com: did not receive HSTS header
-softclean.pt: could not connect to host
+softclean.pt: did not receive HSTS header
sogeek.me: could not connect to host
sogravatas.net.br: could not connect to host
-sohamroy.me: could not connect to host
+soia.ca: could not connect to host
sojingle.net: could not connect to host
sokolka.tv: did not receive HSTS header
sol-3.de: did not receive HSTS header
@@ -11951,21 +12779,20 @@ solarcom.com.br: could not connect to host
solartrackerapp.com: could not connect to host
soldbygold.net: did not receive HSTS header
solentes.com.br: could not connect to host
-soli.cafe: could not connect to host
-solicafe.at: could not connect to host
solidfuelappliancespares.co.uk: did not receive HSTS header
solidimage.com.br: could not connect to host
-solidus.systems: did not receive HSTS header
+solidus.systems: could not connect to host
solidwebnetworks.co.uk: did not receive HSTS header
solinter.com.br: did not receive HSTS header
solisrey.es: could not connect to host
soljem.com: did not receive HSTS header
soll-i.ch: did not receive HSTS header
+solos.im: did not receive HSTS header
solosmusic.xyz: could not connect to host
solsystems.ru: did not receive HSTS header
solutive.fi: did not receive HSTS header
+solve-it.se: did not receive HSTS header
solymar.co: could not connect to host
-somali-derp.com: could not connect to host
some.rip: max-age too low: 6307200
somebodycares.org: did not receive HSTS header
someshit.xyz: could not connect to host
@@ -11974,7 +12801,7 @@ somethingnew.xyz: could not connect to host
somethingsimilar.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
sonafe.info: did not receive HSTS header
sonerezh.bzh: did not receive HSTS header
-songzhuolun.com: could not connect to host
+sonialive.com: did not receive HSTS header
sonic.network: did not receive HSTS header
sonicrainboom.rocks: could not connect to host
sonja-daniels.com: could not connect to host
@@ -11982,6 +12809,7 @@ sonja-kowa.de: could not connect to host
sonyforum.no: did not receive HSTS header
soobi.org: did not receive HSTS header
soondy.com: did not receive HSTS header
+soontm.de: could not connect to host
soply.com: could not connect to host
soporte.cc: could not connect to host
sorenam.com: could not connect to host
@@ -11992,6 +12820,7 @@ sorn.service.gov.uk: did not receive HSTS header
sortaweird.net: could not connect to host
sortingwizard.com: could not connect to host
soruly.moe: did not receive HSTS header
+sos.de: did not receive HSTS header
sosaka.ml: could not connect to host
sosecu.red: could not connect to host
sosiolog.com: could not connect to host
@@ -11999,12 +12828,14 @@ sosko.in.rs: could not connect to host
sotiran.com: could not connect to host
sotor.de: did not receive HSTS header
soucorneteiro.com.br: could not connect to host
+sougi-review.top: did not receive HSTS header
soulcraft.bz: could not connect to host
soulema.com: could not connect to host
soulfulglamour.uk: could not connect to host
soulsteer.com: could not connect to host
soundforsound.co.uk: did not receive HSTS header
-souravsaha.com: did not receive HSTS header
+soundsecurity.io: could not connect to host
+souqtajmeel.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
sourcecode.love: could not connect to host
sourcelair.com: did not receive HSTS header
sourcitec.com: did not receive HSTS header
@@ -12032,6 +12863,7 @@ spacelabs.io: could not connect to host
spacemo.com: did not receive HSTS header
spacountryexplorer.org.au: did not receive HSTS header
spaggel.nl: did not receive HSTS header
+spaldingwall.com: could not connect to host
spam.lol: could not connect to host
spamloco.net: did not receive HSTS header
spangehlassociates.com: did not receive HSTS header
@@ -12039,7 +12871,7 @@ spanien.guide: could not connect to host
sparelib.com: max-age too low: 3650
spark.team: could not connect to host
sparkbase.cn: could not connect to host
-sparklingsparklers.com: could not connect to host
+sparklingsparklers.com: did not receive HSTS header
sparkwood.org: could not connect to host
sparmedo.de: did not receive HSTS header
sparsa.army: could not connect to host
@@ -12052,29 +12884,31 @@ spdysync.com: could not connect to host
specialedesigns.com: could not connect to host
specialistnow.com.au: did not receive HSTS header
speculor.net: could not connect to host
-spedition-transport-umzug.de: could not connect to host
+spedplus.com.br: did not receive HSTS header
speed-mailer.com: could not connect to host
speedcounter.net: could not connect to host
speeds.vip: could not connect to host
speedway.com.pl: did not receive HSTS header
-speedy.lt: max-age too low: 0
-speedychat.it: could not connect to host
speedyprep.com: did not receive HSTS header
speidel.com.tr: did not receive HSTS header
spencerbaer.com: could not connect to host
+spendwise.com.au: could not connect to host
sperohub.io: could not connect to host
sperohub.lt: did not receive HSTS header
spherenix.org: could not connect to host
sphinx.network: could not connect to host
spicydog.tk: could not connect to host
spicywombat.com: could not connect to host
+spidermail.tk: could not connect to host
+spidernet.tk: could not connect to host
spiegels.nl: could not connect to host
spielcasinos.com: did not receive HSTS header
+spiet.nl: could not connect to host
spikeykc.me: did not receive HSTS header
-spillmaker.no: could not connect to host
spilsbury.io: could not connect to host
spineandscoliosis.com: did not receive HSTS header
spirit-dev.net: max-age too low: 0
+spirit-hunters-germany.de: did not receive HSTS header
spiritbionic.ro: could not connect to host
spiritfanfics.com: did not receive HSTS header
spisoggrin.dk: did not receive HSTS header
@@ -12087,23 +12921,27 @@ spokonline.com: could not connect to host
spon.cz: did not receive HSTS header
sponsortobias.com: could not connect to host
spontex.org: did not receive HSTS header
-spookyinternet.com: could not connect to host
+sporara.com: did not receive HSTS header
+sportakrobatik.at: could not connect to host
sportchirp-internal.azurewebsites.net: did not receive HSTS header
sporthit.ru: could not connect to host
sportifik.com: did not receive HSTS header
sportingoods.com.br: could not connect to host
sportscollection.com.br: could not connect to host
+sportsmanadvisor.com: could not connect to host
sportwette.eu: did not receive HSTS header
spot-events.com: could not connect to host
spotifyripper.tk: could not connect to host
spotlightsrule.com: could not connect to host
spotlightsrule.ddns.net: could not connect to host
-sppin.fr: could not connect to host
spreadsheets.google.com: did not receive HSTS header (error ignored - included regardless)
spresso.me: did not receive HSTS header
+sprigings.com: did not receive HSTS header
springsoffthegrid.com: could not connect to host
sprint.ml: did not receive HSTS header
sprk.fitness: did not receive HSTS header
+sproing.ca: max-age too low: 0
+spron.in: could not connect to host
sproutconnections.com: could not connect to host
sprueche-zum-valentinstag.de: did not receive HSTS header
sprueche-zur-geburt.info: did not receive HSTS header
@@ -12111,8 +12949,11 @@ sprueche-zur-hochzeit.de: did not receive HSTS header
sprueche-zur-konfirmation.de: did not receive HSTS header
sprutech.de: could not connect to host
sqetsa.com: did not receive HSTS header
+sqroot.eu: could not connect to host
sqshq.de: did not receive HSTS header
+squaddraft.com: did not receive HSTS header
square.gs: could not connect to host
+squarelab.it: did not receive HSTS header
squatldf.org: could not connect to host
squids.space: could not connect to host
squirtlesbians.net: could not connect to host
@@ -12130,11 +12971,12 @@ srvonfire.com: could not connect to host
ss-free.net: could not connect to host
ss-x.ru: could not connect to host
ss.wtf: could not connect to host
+ssco.xyz: did not receive HSTS header
+ssconn.com: could not connect to host
ssh.nu: could not connect to host
sshool.at: could not connect to host
-ssl.panoramio.com: did not receive HSTS header
+ssl.panoramio.com: could not connect to host
ssl.rip: could not connect to host
-ssl888.com: could not connect to host
sslzilla.de: did not receive HSTS header
ssn1.ru: did not receive HSTS header
sso.to: could not connect to host
@@ -12150,6 +12992,7 @@ stackhub.cc: could not connect to host
stadionmanager.com: could not connect to host
stadjerspasonline.nl: could not connect to host
stadtbauwerk.at: did not receive HSTS header
+stadtbuecherei-bad-wurzach.de: did not receive HSTS header
stadtgartenla.com: could not connect to host
staffjoy.com: did not receive HSTS header
staffjoystaging.com: could not connect to host
@@ -12159,24 +13002,28 @@ stalkerhispano.com: max-age too low: 0
stalkerteam.pl: did not receive HSTS header
stalkthe.net: could not connect to host
stalschermer.nl: could not connect to host
+stanandjerre.org: could not connect to host
standardssuck.org: did not receive HSTS header
standingmist.com: did not receive HSTS header
standoutbooks.com: max-age too low: 0
+standuppaddlesports.com.au: did not receive HSTS header
stannahtrapliften.nl: did not receive HSTS header
star-stuff.de: did not receive HSTS header
starandshield.com: did not receive HSTS header
starapple.nl: did not receive HSTS header
starcafe.me: could not connect to host
stardeeps.net: max-age too low: 0
+starease.net: could not connect to host
starfeeling.net: could not connect to host
stargatepartners.com: did not receive HSTS header
starina.ru: could not connect to host
-starking.net.cn: could not connect to host
starklane.com: max-age too low: 300
starmusic.ga: could not connect to host
starplatinum.jp: could not connect to host
starquake.nl: could not connect to host
+starsam80.net: could not connect to host
starsbattle.net: could not connect to host
+starteesforsale.co.za: did not receive HSTS header
startup.melbourne: could not connect to host
startuplevel.com: could not connect to host
startuponcloud.com: max-age too low: 2678400
@@ -12188,6 +13035,7 @@ state-sponsored-actors.net: could not connect to host
statementinsertsforless.com: did not receive HSTS header
stateofexception.io: could not connect to host
statgram.me: could not connect to host
+static-692b8c32.de: could not connect to host
static-assets.io: could not connect to host
static.hosting: could not connect to host
static.or.at: did not receive HSTS header
@@ -12202,13 +13050,16 @@ statuschecks.net: could not connect to host
stavebnice.net: did not receive HSTS header
staxflax.tk: could not connect to host
stayokhotelscdc-mailing.com: could not connect to host
+stb-schefczyk.de: could not connect to host
stcable.net: did not receive HSTS header
stcomex.com: did not receive HSTS header
stdrc.cc: did not receive HSTS header
+steamhours.com: could not connect to host
steampunkrobot.com: did not receive HSTS header
steelbea.ms: could not connect to host
steelrhino.co: could not connect to host
steem.io: did not receive HSTS header
+steenackers.be: did not receive HSTS header
stefanweiser.de: did not receive HSTS header
steffi-in-australien.com: could not connect to host
stem.is: did not receive HSTS header
@@ -12232,8 +13083,10 @@ stewartremodelingadvantage.com: could not connect to host
sticklerjs.org: could not connect to host
stickmy.cn: could not connect to host
stickswag.cf: could not connect to host
+stig.io: did not receive HSTS header
stiger.me: could not connect to host
stigroom.com: could not connect to host
+stijnbelmans.be: max-age too low: 604800
stilettomoda.com.br: could not connect to host
stillblackhat.id: could not connect to host
stillyarts.com: did not receive HSTS header
@@ -12241,6 +13094,8 @@ stinkytrashhound.com: could not connect to host
stirlingpoon.net: could not connect to host
stirlingpoon.xyz: could not connect to host
stitthappens.com: could not connect to host
+stjohnmiami.org: did not receive HSTS header
+stjohnsc.com: could not connect to host
stkbn.com: could not connect to host
stkeverneparishcouncil.org.uk: did not receive HSTS header
stl.news: did not receive HSTS header
@@ -12259,6 +13114,7 @@ stomadental.com: did not receive HSTS header
stonecutterscommunity.com: could not connect to host
stonemanbrasil.com.br: could not connect to host
stopakwardhandshakes.org: could not connect to host
+stopbreakupnow.org: did not receive HSTS header
stopwoodfin.org: could not connect to host
storbritannien.guide: could not connect to host
store-host.com: did not receive HSTS header
@@ -12274,8 +13130,9 @@ stpatricksguild.com: did not receive HSTS header
stqry.com: did not receive HSTS header
str0.at: did not receive HSTS header
strangeplace.net: did not receive HSTS header
-strangescout.me: could not connect to host
+strangescout.me: did not receive HSTS header
strasweb.fr: did not receive HSTS header
+strathewerd.de: did not receive HSTS header
strbt.de: could not connect to host
strchr.com: did not receive HSTS header
stream-ing.xyz: could not connect to host
@@ -12284,17 +13141,20 @@ streamdesk.ca: did not receive HSTS header
streamer.tips: did not receive HSTS header
streamingeverywhere.com: could not connect to host
streamingmagazin.de: could not connect to host
+streampanel.net: did not receive HSTS header
+streamthemeeting.com: did not receive HSTS header
streamzilla.com: did not receive HSTS header
streetmarket.ru: could not connect to host
strehl.tk: could not connect to host
streklhof.at: did not receive HSTS header
+strelitzia02.com: could not connect to host
stressfreehousehold.com: could not connect to host
strictlysudo.com: could not connect to host
strife.tk: could not connect to host
strila.me: could not connect to host
+striptizer.tk: did not receive HSTS header
stroeercrm.de: could not connect to host
strongest-privacy.com: could not connect to host
-strongsalpinesucculents.com: did not receive HSTS header
stuartbaxter.co: could not connect to host
stubbings.eu: could not connect to host
student-scientist.org: did not receive HSTS header
@@ -12303,16 +13163,20 @@ studentrdh.com: did not receive HSTS header
studentresearcher.org: did not receive HSTS header
studentskydenik.cz: could not connect to host
studenttravel.cz: did not receive HSTS header
-studiebegeleiding-haegeman.be: could not connect to host
+studer.su: could not connect to host
studinf.xyz: could not connect to host
studio-panic.com: did not receive HSTS header
+studiocn.cn: did not receive HSTS header
studiodoprazer.com.br: could not connect to host
studiozelden.com: did not receive HSTS header
+studport.rv.ua: max-age too low: 604800
studyabroadstation.com: could not connect to host
studybay.com: did not receive HSTS header
studydrive.net: did not receive HSTS header
studyhub.cf: did not receive HSTS header
+studying-neet.com: could not connect to host
stugb.de: did not receive HSTS header
+stumeta2018.de: could not connect to host
stupidstatetricks.com: could not connect to host
sturbock.me: did not receive HSTS header
sturdio.com.br: could not connect to host
@@ -12321,7 +13185,7 @@ stuudium.life: could not connect to host
stylenda.com: could not connect to host
stylle.me: could not connect to host
stytt.com: could not connect to host
-suareforma.com: did not receive HSTS header
+suareforma.com: could not connect to host
subbing.work: could not connect to host
subdimension.org: could not connect to host
subeesu.com: could not connect to host
@@ -12332,26 +13196,28 @@ subsys.no: did not receive HSTS header
subtitle.rip: could not connect to host
subwayz.de: did not receive HSTS header
subzerolosangeles.com: did not receive HSTS header
+subzerotech.co.uk: could not connect to host
+successwithflora.com: could not connect to host
succubus.network: could not connect to host
-succubus.xxx: could not connect to host
+suche.org: could not connect to host
suchprogrammer.net: did not receive HSTS header
sudo.im: could not connect to host
sudo.li: did not receive HSTS header
+sudokian.io: could not connect to host
sudosu.fr: could not connect to host
suempresa.cloud: could not connect to host
+suffts.de: did not receive HSTS header
sugarcitycon.com: could not connect to host
sugarsweetorsour.com: did not receive HSTS header
sugartownfarm.com: could not connect to host
suian.or.jp: max-age too low: 86400
-suiranfes.com: max-age too low: 0
suite73.org: could not connect to host
suitocracy.com: could not connect to host
summer.ga: could not connect to host
-summershomes.com: could not connect to host
summitbankofkc.com: did not receive HSTS header
summitmasters.net: did not receive HSTS header
-sumoscout.de: could not connect to host
-sun-wellness-online.com.vn: did not receive HSTS header
+sumoscout.de: did not receive HSTS header
+sun.re: could not connect to host
suncountrymarine.com: did not receive HSTS header
sundaycooks.com: max-age too low: 2592000
suneilpatel.com: could not connect to host
@@ -12364,17 +13230,17 @@ sunxchina.com: could not connect to host
sunyanzi.tk: could not connect to host
suos.io: could not connect to host
supcro.com: could not connect to host
-super-erotica.ru: could not connect to host
+super-demarche.com: could not connect to host
super-garciniaslim.com: could not connect to host
+super-o-blog.com: could not connect to host
super-radiant-skin.com: could not connect to host
super-ripped-power.com: could not connect to host
super-slim-coffee.com: could not connect to host
superbabysitting.ch: could not connect to host
superbike.tw: could not connect to host
-superbshare.com: could not connect to host
supercastlessouthsydney.com.au: could not connect to host
supercreepsvideo.com: did not receive HSTS header
-superiorfloridavacation.com: did not receive HSTS header
+superiorfloridavacation.com: could not connect to host
superklima.ro: did not receive HSTS header
superlandnetwork.de: did not receive HSTS header
superlentes.com.br: could not connect to host
@@ -12401,11 +13267,15 @@ survivalistplanet.com: did not receive HSTS header
susastudentenjobs.de: could not connect to host
susconam.org: could not connect to host
suseasky.com: did not receive HSTS header
+sushiwereld.be: did not receive HSTS header
suspiciousdarknet.xyz: could not connect to host
sussexwebdesigns.com: could not connect to host
+sussexwebsites.info: could not connect to host
sustainability.gov: did not receive HSTS header
suts.co.uk: could not connect to host
+suttonbouncycastles.co.uk: could not connect to host
suvidhaapay.com: could not connect to host
+suzukikazuki.com: max-age too low: 0
suzukikenichi.com: did not receive HSTS header
svadobkajuvi.sk: did not receive HSTS header
svarovani.tk: could not connect to host
@@ -12420,41 +13290,45 @@ svjvn.cz: could not connect to host
swacp.com: could not connect to host
swaggerdile.com: could not connect to host
swaleacademiestrust.org.uk: max-age too low: 2592000
+swallsoft.co.uk: could not connect to host
+swallsoft.com: could not connect to host
swanseapartyhire.co.uk: could not connect to host
+swarmation.com: did not receive HSTS header
swdatlantico.pt: could not connect to host
sweep.cards: did not receive HSTS header
sweetlegs.jp: could not connect to host
sweetstreats.ca: could not connect to host
sweetvanilla.jp: could not connect to host
sweharris.org: could not connect to host
+swerve-media-testbed-03.co.uk: could not connect to host
swfloshatraining.com: could not connect to host
-swift-devedge.de: did not receive HSTS header
+swift-devedge.de: could not connect to host
swiftconf.com: did not receive HSTS header
swiftcrypto.com: could not connect to host
swiggy.com: did not receive HSTS header
-swimmer.com.au: did not receive HSTS header
swimming.ca: did not receive HSTS header
swissentreprises.ch: could not connect to host
swisstranslate.ch: did not receive HSTS header
swisstranslate.fr: did not receive HSTS header
swisswebhelp.ch: could not connect to host
+swissxperts.ch: could not connect to host
swite.com: did not receive HSTS header
swmd5c.org: could not connect to host
+swordfighting.net: could not connect to host
swu.party: could not connect to host
+swuosa.org: could not connect to host
sx3.no: could not connect to host
sxbk.pw: could not connect to host
syam.cc: could not connect to host
sydgrabber.tk: could not connect to host
-syha.org.uk: did not receive HSTS header
+syha.org.uk: could not connect to host
sykl.us: could not connect to host
-sylvaincombe.net: could not connect to host
sylvangarden.org: could not connect to host
sylvanorder.com: could not connect to host
synackr.com: did not receive HSTS header
synapticconsulting.co.uk: could not connect to host
syncaddict.net: could not connect to host
syncappate.com: could not connect to host
-synccentre.com: could not connect to host
syncclinicalstudy.com: could not connect to host
syncer.jp: did not receive HSTS header
syncmylife.net: could not connect to host
@@ -12467,24 +13341,22 @@ syntheticmotoroil.org: did not receive HSTS header
syobon.org: could not connect to host
syrocon.ch: could not connect to host
sys.tf: could not connect to host
+sysadmins.ro: could not connect to host
sysadminstory.com: could not connect to host
sysert.tv: could not connect to host
-sysgeek.cn: did not receive HSTS header
+sysgeek.cn: could not connect to host
syso.name: could not connect to host
syspen.space: could not connect to host
sysrq.tech: could not connect to host
syss.de: did not receive HSTS header
systea.net: could not connect to host
systemd.me: could not connect to host
-systoolbox.net: could not connect to host
syy.hk: did not receive HSTS header
szaszm.tk: could not connect to host
-szczot3k.pl: did not receive HSTS header
szerbnyelvkonyv.hu: could not connect to host
szlovaknyelv.hu: could not connect to host
szlovennyelv.hu: could not connect to host
szongott.net: did not receive HSTS header
-szunia.com: could not connect to host
szymczak.at: could not connect to host
t-complex.space: could not connect to host
t-ken.xyz: could not connect to host
@@ -12495,26 +13367,31 @@ t3rror.net: could not connect to host
t4c-rebirth.com: could not connect to host
t4x.org: could not connect to host
taabe.xyz: could not connect to host
-tab.watch: could not connect to host
+taartenfeesies.nl: did not receive HSTS header
+tab.watch: did not receive HSTS header
taberu-fujitsubo.com: did not receive HSTS header
+tabino.top: did not receive HSTS header
tabitatsu.jp: did not receive HSTS header
tabla-periodica.com: could not connect to host
+tachyonapp.com: could not connect to host
tacoma-games.com: did not receive HSTS header
tacotown.tk: could not connect to host
tadcastercircuit.org.uk: did not receive HSTS header
tadigitalstore.com: could not connect to host
-tadu.de: could not connect to host
tafoma.com: did not receive HSTS header
tageau.com: could not connect to host
tagesmutter-in-bilm.de: did not receive HSTS header
-taglondon.org: did not receive HSTS header
tahakomat.cz: could not connect to host
tahf.net: could not connect to host
taichi-jade.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
taidu.news: could not connect to host
tailify.com: did not receive HSTS header
+tailpuff.net: did not receive HSTS header
tails.com.ar: could not connect to host
taim.io: could not connect to host
+takebackyourstate.com: could not connect to host
+takebackyourstate.net: could not connect to host
+takebackyourstate.org: could not connect to host
takebonus.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
takedownthissite.com: could not connect to host
takinet.kr: could not connect to host
@@ -12524,33 +13401,39 @@ talentuar.com: could not connect to host
tales-of-interia.de: could not connect to host
talheim-records.ca: could not connect to host
talk.google.com: did not receive HSTS header (error ignored - included regardless)
+talk.xyz: could not connect to host
talkitup.mx: could not connect to host
talkitup.online: could not connect to host
talklifestyle.nl: could not connect to host
tallr.se: could not connect to host
tallshoe.com: could not connect to host
-talroo.com: did not receive HSTS header
tam7t.com: did not receive HSTS header
+tamaraboutique.com: could not connect to host
+tamasszabo.net: did not receive HSTS header
tamersunion.org: did not receive HSTS header
tamex.xyz: could not connect to host
tandarts-haarlem.nl: did not receive HSTS header
tandblekningidag.com: could not connect to host
+tandk.com.vn: did not receive HSTS header
tangerine.ga: could not connect to host
tangibilizing.com: could not connect to host
+tangiblesecurity.com: did not receive HSTS header
+tangsisi.com: could not connect to host
tangyue.date: could not connect to host
tangzhao.net: could not connect to host
taniesianie.pl: did not receive HSTS header
tankfreunde.de: did not receive HSTS header
tante-bugil.net: could not connect to host
+tantetilli.de: could not connect to host
tantotiempo.de: did not receive HSTS header
tanze-jetzt.de: could not connect to host
taotuba.net: did not receive HSTS header
-taozj.org: could not connect to host
+taozj.org: did not receive HSTS header
tapestries.tk: could not connect to host
tapfinder.ca: could not connect to host
tapka.cz: did not receive HSTS header
tappublisher.com: did not receive HSTS header
-tarantul.org.ua: could not connect to host
+taranis.re: could not connect to host
taravancil.com: did not receive HSTS header
tarek.link: could not connect to host
targaryen.house: could not connect to host
@@ -12563,30 +13446,35 @@ tassup.com: could not connect to host
tasta.ro: did not receive HSTS header
tasticfilm.com: could not connect to host
tastyyy.co: could not connect to host
+tasyacherry-anal.com: could not connect to host
tatilbus.com: could not connect to host
tatilmix.com: could not connect to host
tatort-fanpage.de: did not receive HSTS header
tatt.io: could not connect to host
-tattvaayoga.com: did not receive HSTS header
tauchkater.de: could not connect to host
tavoittaja.fi: did not receive HSTS header
tavopica.lt: did not receive HSTS header
taxaudit.com: did not receive HSTS header
taxbench.com: could not connect to host
+taxmadras.com: could not connect to host
taxsnaps.co.nz: did not receive HSTS header
+taxspeaker.com: did not receive HSTS header
tazemama.biz: could not connect to host
tazj.in: did not receive HSTS header
tazz.in: could not connect to host
tbarter.com: did not receive HSTS header
+tbrss.com: did not receive HSTS header
+tbys.us: could not connect to host
tc-bonito.de: did not receive HSTS header
tcao.info: could not connect to host
tcby45.xyz: could not connect to host
+tchaka.top: could not connect to host
tcl.ath.cx: did not receive HSTS header
-tcomms.org: max-age too low: 0
tcp.expert: did not receive HSTS header
tcwebvn.com: could not connect to host
tdelmas.eu: could not connect to host
tdelmas.ovh: could not connect to host
+tdpblog.site: could not connect to host
tdsb.cf: could not connect to host
tdsb.ga: could not connect to host
tdsb.gq: could not connect to host
@@ -12599,9 +13487,10 @@ tdsbhack.tk: could not connect to host
teacherph.net: could not connect to host
teachforcanada.ca: did not receive HSTS header
tealdrones.com: did not receive HSTS header
-team-pancake.eu: did not receive HSTS header
+team-pancake.eu: could not connect to host
team-teasers.com: could not connect to host
team2fou.cf: did not receive HSTS header
+teamassists.com: did not receive HSTS header
teambeoplay.co.uk: did not receive HSTS header
teamblueridge.org: could not connect to host
teamdaylo.xyz: could not connect to host
@@ -12610,11 +13499,10 @@ teampoint.cz: could not connect to host
teams.microsoft.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
teamsocial.co: did not receive HSTS header
teamup.rocks: did not receive HSTS header
-teamx-gaming.de: did not receive HSTS header
+teamx-gaming.de: could not connect to host
teamzeus.cz: could not connect to host
teaparty.id: could not connect to host
-tearoy.faith: did not receive HSTS header
-teasenetwork.com: could not connect to host
+tearoy.faith: could not connect to host
tebieer.com: could not connect to host
tech-blog.fr: did not receive HSTS header
tech-finder.fr: could not connect to host
@@ -12623,7 +13511,7 @@ techandtux.de: could not connect to host
techask.it: could not connect to host
techassist.io: did not receive HSTS header
techcavern.ml: did not receive HSTS header
-techelements.co: could not connect to host
+techelements.co: did not receive HSTS header
techfactslive.com: did not receive HSTS header
techhipster.net: could not connect to host
techhub.ml: could not connect to host
@@ -12632,12 +13520,12 @@ techllage.com: could not connect to host
techloaner.com: did not receive HSTS header
techmasters.andover.edu: could not connect to host
techmatehq.com: could not connect to host
-technicabv.nl: did not receive HSTS header
technicalforensic.com: could not connect to host
technicalpenguins.com: did not receive HSTS header
technikrom.org: did not receive HSTS header
technogroup.cz: did not receive HSTS header
technosavvyport.com: did not receive HSTS header
+technosuport.com: did not receive HSTS header
technotonic.com.au: did not receive HSTS header
techpointed.com: could not connect to host
techpro.net.br: did not receive HSTS header
@@ -12647,8 +13535,8 @@ techtoy.store: could not connect to host
techtrackerpro.com: could not connect to host
techtraveller.com.au: did not receive HSTS header
techunit.org: could not connect to host
-techview.link: max-age too low: 1209600
tecit.ch: could not connect to host
+tecnidev.com: could not connect to host
tecnimotos.com: did not receive HSTS header
tecnogaming.com: did not receive HSTS header
tecture.de: did not receive HSTS header
@@ -12657,7 +13545,6 @@ tedxkmitl.com: could not connect to host
tee-idf.net: could not connect to host
teedb.de: could not connect to host
teehaus-shila.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-teenerotic.net: could not connect to host
teeplelaw.com: did not receive HSTS header
tefl.io: did not receive HSTS header
tegelsensanitaironline.nl: did not receive HSTS header
@@ -12675,12 +13562,12 @@ telecharger-itunes.com: could not connect to host
telecharger-open-office.com: could not connect to host
telecharger-winrar.com: could not connect to host
telefisk.org: did not receive HSTS header
-telefoncek.si: could not connect to host
telefonnummer.online: could not connect to host
telefonogratuito.com: did not receive HSTS header
telefoonnummerinfo.nl: could not connect to host
telekollektiv.org: could not connect to host
telescam.com: could not connect to host
+teleshop.be: could not connect to host
teletechnology.in: did not receive HSTS header
teletra.ru: could not connect to host
telfordwhitehouse.co.uk: did not receive HSTS header
@@ -12688,6 +13575,7 @@ tellingua.com: did not receive HSTS header
temasa.net: did not receive HSTS header
temehu.com: did not receive HSTS header
tempcraft.net: could not connect to host
+tempflix.com: could not connect to host
tempo.co: did not receive HSTS header
tempodecolheita.com.br: could not connect to host
ten-cafe.com: could not connect to host
@@ -12695,7 +13583,6 @@ tenberg.com: could not connect to host
tendertool.nl: could not connect to host
tendoryu-aikido.org: did not receive HSTS header
tenerife-villas.com: did not receive HSTS header
-tengroup.com: max-age too low: 0
tengu.cloud: could not connect to host
tenispopular.com: could not connect to host
tenni.xyz: could not connect to host
@@ -12708,10 +13595,9 @@ teodio.cl: did not receive HSTS header
teoleonie.com: did not receive HSTS header
teos.online: could not connect to host
teoskanta.fi: could not connect to host
+tepid.org: could not connect to host
teranga.ch: did not receive HSTS header
terminalvelocity.co.nz: could not connect to host
-termitemounds.org: could not connect to host
-termitinitus.org: could not connect to host
terra-x.net: could not connect to host
terra.by: did not receive HSTS header
terrax.berlin: could not connect to host
@@ -12725,6 +13611,8 @@ testandroid.xyz: could not connect to host
testbawks.com: could not connect to host
testbirds.cz: could not connect to host
testbirds.sk: could not connect to host
+testdomain.ovh: could not connect to host
+testnode.xyz: could not connect to host
testovaci.ml: could not connect to host
tetrafinancial-commercial-business-equipment-financing.com: did not receive HSTS header
tetrafinancial-energy-mining-equipment-financing.com: did not receive HSTS header
@@ -12733,17 +13621,18 @@ tetrafinancial-manufacturing-industrial-equipment-financing.com: did not receive
tetrafinancial-news.com: did not receive HSTS header
tetrafinancial-technology-equipment-software-financing.com: did not receive HSTS header
tetramax.eu: did not receive HSTS header
-tetrarch.co: did not receive HSTS header
+tetrarch.co: could not connect to host
tetsai.com: could not connect to host
teufelsystem.de: could not connect to host
teuniz.nl: did not receive HSTS header
texte-zur-taufe.de: did not receive HSTS header
textoplano.xyz: could not connect to host
textracer.dk: could not connect to host
-tf2stadium.com: did not receive HSTS header
+tf2stadium.com: could not connect to host
tfcoms-sp-tracker-client.azurewebsites.net: could not connect to host
tffans.com: could not connect to host
tfl.lu: did not receive HSTS header
+tgbyte.com: did not receive HSTS header
tgod.co: could not connect to host
tgr.re: could not connect to host
tgtv.tn: did not receive HSTS header
@@ -12751,13 +13640,12 @@ th-bl.de: did not receive HSTS header
th3nd.com: did not receive HSTS header
thackert.myfirewall.org: could not connect to host
thagki9.com: did not receive HSTS header
-thai.land: could not connect to host
+thai.land: did not receive HSTS header
thaianthro.com: max-age too low: 0
thaigirls.xyz: could not connect to host
thaihostcool.com: did not receive HSTS header
thailandpropertylisting.com: did not receive HSTS header
thailandpropertylistings.com: did not receive HSTS header
-thalgott.net: could not connect to host
thalmann.fr: did not receive HSTS header
thalskarth.com: could not connect to host
thatgudstuff.com: could not connect to host
@@ -12771,7 +13659,6 @@ the-finance-blog.com: could not connect to host
the-gist.io: could not connect to host
the-paddies.de: did not receive HSTS header
the-sky-of-valkyries.com: could not connect to host
-the-zenti.de: did not receive HSTS header
the.ie: max-age too low: 0
the420vape.org: could not connect to host
theamateurs.net: did not receive HSTS header
@@ -12782,32 +13669,38 @@ thebakingclass.com: max-age too low: 60
thebasementguys.com: could not connect to host
thebeautifulmusic.net: did not receive HSTS header
thebeginningisnye.com: could not connect to host
-theberkshirescompany.com: could not connect to host
+theberkshirescompany.com: did not receive HSTS header
thebigfail.net: could not connect to host
thebreakhotel.com: did not receive HSTS header
thebrotherswarde.com: could not connect to host
thebte.com: could not connect to host
thebuffalotavern.com: could not connect to host
-thecandidforum.com: could not connect to host
thecapitalbank.com: did not receive HSTS header
thecharlestonwaldorf.com: did not receive HSTS header
theclementinebutchers.com: could not connect to host
theclimbingunit.com: did not receive HSTS header
+thecloudmigrator.com: did not receive HSTS header
thecloudrevolution.net: did not receive HSTS header
theclubjersey.com: did not receive HSTS header
thecodeninja.net: did not receive HSTS header
thecoffeehouse.xyz: could not connect to host
-thecustomizewindows.com: could not connect to host
+thecoffeepod.co.uk: did not receive HSTS header
+thecskr.in: could not connect to host
+thecsw.com: did not receive HSTS header
thedailyupvote.com: could not connect to host
+thedarkartsandcrafts.com: could not connect to host
+thedevilwearswibra.nl: did not receive HSTS header
+thedominatorsclan.com: did not receive HSTS header
thedrinks.co: did not receive HSTS header
thedrop.pw: did not receive HSTS header
thedrunkencabbage.com: could not connect to host
thedystance.com: could not connect to host
-theeducationchannel.info: could not connect to host
theelitebuzz.com: could not connect to host
theendofzion.com: did not receive HSTS header
theepankar.com: could not connect to host
theescapistswiki.com: could not connect to host
+theevergreen.me: could not connect to host
+theexpatriate.de: could not connect to host
theeyeopener.com: did not receive HSTS header
thefarbeyond.com: could not connect to host
thefootballanalyst.com: did not receive HSTS header
@@ -12816,27 +13709,25 @@ thefreebirds.in: could not connect to host
thefrk.xyz: could not connect to host
thefrozenfire.com: did not receive HSTS header
thefutureharrills.com: could not connect to host
-thegamerscamp.com: max-age too low: 0
thegemriverside.com.vn: could not connect to host
thego2swatking.com: could not connect to host
thegoldregister.co.uk: could not connect to host
thegraciousgourmet.com: did not receive HSTS header
thegreenvpn.com: could not connect to host
thehiddenbay.cc: could not connect to host
-thehiddenbay.eu: max-age too low: 0
+thehiddenbay.eu: could not connect to host
thehiddenbay.me: could not connect to host
thehiddenbay.net: could not connect to host
-thehiddenbay.ws: could not connect to host
thehighersideclothing.com: did not receive HSTS header
thehistory.me: could not connect to host
thehonorguard.org: did not receive HSTS header
thehoopsarchive.com: could not connect to host
-thehotfix.net: could not connect to host
theimagesalon.com: max-age too low: 43200
theinvisibletrailer.com: could not connect to host
theitsage.com: did not receive HSTS header
thejobauction.com: did not receive HSTS header
thejserver.de: could not connect to host
+thekrewserver.com: did not receive HSTS header
thelapine.ca: did not receive HSTS header
thelefthand.org: could not connect to host
thelinuxspace.com: could not connect to host
@@ -12844,28 +13735,36 @@ thelostyankee.com: could not connect to host
themadmechanic.net: could not connect to host
themanufacturingmarketingagency.com: could not connect to host
themarble.co: could not connect to host
+themaster.site: did not receive HSTS header
themathbehindthe.science: could not connect to host
themathematician.uk: could not connect to host
themerchandiser.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+themesurgeons.net: could not connect to host
themicrocapital.com: could not connect to host
themoderate.xyz: could not connect to host
thenextstep.events: could not connect to host
thenorthschool.org.uk: did not receive HSTS header
thenrdhrd.nl: could not connect to host
theodorejones.info: could not connect to host
+theojones.name: could not connect to host
theokonst.tk: did not receive HSTS header
+theosblog.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
theosophie-afrique.org: could not connect to host
theoverfly.co: could not connect to host
+thepaffy.de: could not connect to host
thepartywarehouse.co.uk: did not receive HSTS header
thepcweb.tk: could not connect to host
+thepeninsulaires.com: could not connect to host
thepiratebay.al: could not connect to host
thepiratebay.poker: could not connect to host
thepiratebay.tech: could not connect to host
+theposhfudgecompany.co.uk: could not connect to host
theprincegame.com: could not connect to host
theprivacysolution.com: could not connect to host
thequillmagazine.org: could not connect to host
therise.ca: max-age too low: 300
thermique.ch: could not connect to host
+theroamingnotary.com: did not receive HSTS header
therockawaysny.com: did not receive HSTS header
thesearchnerds.co.uk: did not receive HSTS header
thesecurityteam.net: could not connect to host
@@ -12877,27 +13776,25 @@ thesled.net: could not connect to host
thesplit.is: could not connect to host
thestack.xyz: could not connect to host
thestagchorleywood.co.uk: did not receive HSTS header
+thestonegroup.de: could not connect to host
thetapirsmouth.com: could not connect to host
thethirdroad.com: did not receive HSTS header
-thetradinghall.com: could not connect to host
thetruthhurvitz.com: could not connect to host
theurbanyoga.com: did not receive HSTS header
theuucc.org: did not receive HSTS header
thevintagenews.com: did not receive HSTS header
thevoid.one: could not connect to host
-thewagesroom.co.uk: could not connect to host
thewallset.com: could not connect to host
-thewebdexter.com: could not connect to host
thewebfellas.com: did not receive HSTS header
thewego.com: could not connect to host
theweilai.com: could not connect to host
thewhiterabbit.space: could not connect to host
theworkingeye.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
thewp.pro: could not connect to host
-thezero.org: could not connect to host
thezonders.com: did not receive HSTS header
thgros.fr: could not connect to host
thierfreund.de: did not receive HSTS header
+thierryhayoz.ch: could not connect to host
thinkcash.nl: could not connect to host
thinkcoding.de: could not connect to host
thinkcoding.org: could not connect to host
@@ -12905,7 +13802,9 @@ thinkdo.jp: could not connect to host
thinkswap.com: did not receive HSTS header
thinlyveiledcontempt.com: could not connect to host
thirdpartytrade.com: did not receive HSTS header
+thirdworld.moe: did not receive HSTS header
thirty5.net: did not receive HSTS header
+thirtyspot.com: did not receive HSTS header
thisisacompletetest.ga: could not connect to host
thisisforager.com: could not connect to host
thismumdoesntknowbest.com: could not connect to host
@@ -12915,36 +13814,38 @@ thkb.net: could not connect to host
thomas-ferney.fr: did not receive HSTS header
thomas-gibertie.fr: did not receive HSTS header
thomas-grobelny.de: could not connect to host
-thomasbreads.com: max-age too low: 86400
+thomas-prior.com: could not connect to host
thomascloud.ddns.net: could not connect to host
thomasetsophie.fr: could not connect to host
thomasharvey.me: did not receive HSTS header
thomaskliszowski.fr: did not receive HSTS header
thomasmeester.nl: did not receive HSTS header
thomasnet.fr: could not connect to host
+thomasscholz.com: max-age too low: 2592000
thomasschweizer.net: could not connect to host
thomasvt.xyz: max-age too low: 2592000
thorbis.com: could not connect to host
-thorbiswebsitedesign.com: did not receive HSTS header
+thorbiswebsitedesign.com: could not connect to host
thorgames.nl: did not receive HSTS header
thorncreek.net: did not receive HSTS header
thot.space: could not connect to host
threatcentral.io: could not connect to host
threebrothersbrewing.com: max-age too low: 2592000
threebulls.be: did not receive HSTS header
-threv.net: could not connect to host
thriveapproach.co.uk: did not receive HSTS header
thrivewellnesshub.co.za: did not receive HSTS header
throughthelookingglasslens.co.uk: could not connect to host
thrx.net: did not receive HSTS header
thumbtack.com: did not receive HSTS header
thundercampaign.com: could not connect to host
+thunderfield-boat.co.uk: could not connect to host
thyrex.fr: could not connect to host
+ti-js.com: could not connect to host
ti.blog.br: could not connect to host
tianxicaipiao.com: could not connect to host
tianxicaipiao.win: could not connect to host
tianxicp.com: could not connect to host
-tianxing.pro: did not receive HSTS header
+tianxing.pro: could not connect to host
tianxingvpn.pro: could not connect to host
tibbitshall.ca: could not connect to host
tibovanheule.site: could not connect to host
@@ -12954,9 +13855,10 @@ tickreport.com: did not receive HSTS header
ticktock.today: did not receive HSTS header
tictactux.de: could not connect to host
tidmore.us: could not connect to host
-tiendafetichista.com: could not connect to host
+tie-online.org: did not receive HSTS header
tiendschuurstraat.nl: could not connect to host
tiensnet.com: could not connect to host
+tierarztpraxis-illerwinkel.de: did not receive HSTS header
tierrarp.com: could not connect to host
tiffanytravels.com: did not receive HSTS header
tightlineproductions.com: did not receive HSTS header
@@ -12964,12 +13866,12 @@ tigit.co.nz: could not connect to host
tikutiku.pl: could not connect to host
tildebot.com: could not connect to host
tilient.eu: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-tilikum.io: did not receive HSTS header
tilkah.com.au: did not receive HSTS header
tillcraft.com: could not connect to host
timbeilby.com: could not connect to host
timbuktutimber.com: did not receive HSTS header
timcamara.com: did not receive HSTS header
+timco.cloud: could not connect to host
time-river.xyz: could not connect to host
timeatlas.com: did not receive HSTS header
timer.fit: could not connect to host
@@ -12983,7 +13885,8 @@ timeserver3.de: could not connect to host
timestamp.io: did not receive HSTS header
timestamp.uk: could not connect to host
timhjalpen.se: could not connect to host
-timmy.im: could not connect to host
+timklefisch.de: did not receive HSTS header
+timmy.ws: could not connect to host
timotrans.de: did not receive HSTS header
timotrans.eu: did not receive HSTS header
timowi.de: could not connect to host
@@ -13004,6 +13907,7 @@ tipsyk.ru: could not connect to host
tiredofeating.com: could not connect to host
tiremoni.ch: did not receive HSTS header
tirex.media: did not receive HSTS header
+tism.in: could not connect to host
tiste.org: could not connect to host
titanlab.de: could not connect to host
titanleaf.com: could not connect to host
@@ -13029,26 +13933,25 @@ tlshost.net: could not connect to host
tm-solutions.eu: could not connect to host
tm.id.au: did not receive HSTS header
tmaward.net: could not connect to host
+tmdc.ddns.net: could not connect to host
tmhlive.com: could not connect to host
tmin.cf: could not connect to host
tmitchell.io: could not connect to host
tmprod.com: did not receive HSTS header
-tmtradingmorocco.ma: did not receive HSTS header
+tmtradingmorocco.ma: could not connect to host
tnb-plattform.de: could not connect to host
tncnanet.com.br: could not connect to host
tno.io: could not connect to host
-tob-rulez.de: could not connect to host
tobaby.com.br: could not connect to host
tobaccore.eu: could not connect to host
tobaccore.sk: could not connect to host
tobias-bielefeld.de: did not receive HSTS header
-tobias4.ddns.net: did not receive HSTS header
tobiasbergius.se: could not connect to host
-tobiaskorf.de: could not connect to host
tobiasmathes.com: could not connect to host
tobiasmathes.name: could not connect to host
tobiasofficial.at: could not connect to host
tobiassachs.cf: could not connect to host
+tobiassachs.de: could not connect to host
tobiassachs.tk: could not connect to host
tobyx.is: could not connect to host
todesschaf.org: could not connect to host
@@ -13059,6 +13962,7 @@ todosrv.com: could not connect to host
tofa-koeln.de: could not connect to host
tofu.im: could not connect to host
togelonlinecommunity.com: did not receive HSTS header
+tojeto.eu: could not connect to host
toka.sg: could not connect to host
tokage.me: could not connect to host
tokenloan.com: could not connect to host
@@ -13067,7 +13971,7 @@ tokobungadijambi.com: did not receive HSTS header
tokobungadilampung.com: could not connect to host
tokobungadipadangflorist.com: did not receive HSTS header
tokoindo.top: could not connect to host
-tokoone.com: could not connect to host
+tokoone.com: did not receive HSTS header
tokotamz.net: could not connect to host
tokotimbangandigitalmurah.web.id: did not receive HSTS header
tokototech.com: could not connect to host
@@ -13076,6 +13980,7 @@ tollmanz.com: did not receive HSTS header
tollsjekk.no: did not receive HSTS header
tolud.com: could not connect to host
tom.run: did not receive HSTS header
+tomandshirley.com: could not connect to host
tomeara.net: could not connect to host
tomevans.io: did not receive HSTS header
tomharling.co.uk: could not connect to host
@@ -13088,31 +13993,32 @@ tommyads.com: could not connect to host
tommyweber.de: did not receive HSTS header
tomphill.co.uk: could not connect to host
tonburi.jp: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-tongmu.me: did not receive HSTS header
-tonguetechnology.com: could not connect to host
+tongmu.me: could not connect to host
toniharant.de: could not connect to host
-tonyfantjr.com: max-age too low: 0
toomanypillows.com: could not connect to host
-top-solar-info.de: could not connect to host
+tooolroc.org: could not connect to host
top-stage.net: could not connect to host
top10mountainbikes.info: could not connect to host
topanlage.de: could not connect to host
topbargains.com.au: did not receive HSTS header
topbestsellerproduct.com: did not receive HSTS header
+topbilan.com: did not receive HSTS header
topdeskdev.net: could not connect to host
topdetoxcleanse.com: could not connect to host
+topdevbox.net: could not connect to host
topmarine.se: did not receive HSTS header
topnewstoday.org: could not connect to host
topnotchendings.com: could not connect to host
topnovini.com: did not receive HSTS header
toppik.com.br: could not connect to host
+topservercccam.com: did not receive HSTS header
topshelfguild.com: could not connect to host
toptenthebest.com: did not receive HSTS header
toptranslation.com: did not receive HSTS header
+topwin.la: could not connect to host
topyx.com: did not receive HSTS header
tor2web.org: could not connect to host
torbay.ga: could not connect to host
-torbe.es: could not connect to host
torchl.it: could not connect to host
toretfaction.net: could not connect to host
torg-room.ru: could not connect to host
@@ -13144,55 +14050,74 @@ touchbasemail.com: did not receive HSTS header
touchpointidg.us: could not connect to host
touchscreen-handy.de: did not receive HSTS header
touchstonefms.co.uk: did not receive HSTS header
+touhou.cc: did not receive HSTS header
touray-enterprise.ch: could not connect to host
tournaire.fr: did not receive HSTS header
tourpeer.com: did not receive HSTS header
toursandtransfers.it: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
tousproducteurs.fr: did not receive HSTS header
-towandalibrary.org: did not receive HSTS header
towaway.ru: could not connect to host
town-farm.surrey.sch.uk: could not connect to host
+tox.im: did not receive HSTS header
toxicboot.com: could not connect to host
toxicip.com: could not connect to host
toxme.se: did not receive HSTS header
+toymania.de: could not connect to host
toyotamotala.se: could not connect to host
-tpansino.com: could not connect to host
tpbcdn.com: could not connect to host
tpblist.xyz: could not connect to host
+tpbunblocked.org: could not connect to host
tpe-edu.com: could not connect to host
tpms4u.at: did not receive HSTS header
tppdebate.org: did not receive HSTS header
+trabajarenperu.com: did not receive HSTS header
tracetracker.com: did not receive HSTS header
tracetracker.no: did not receive HSTS header
+track.plus: could not connect to host
trackdays4fun.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
tracker-gps.ch: could not connect to host
-trackingstream.com: could not connect to host
+trackingstream.com: did not receive HSTS header
tracktivity.com.au: did not receive HSTS header
trade-smart.ru: could not connect to host
tradietrove.com.au: did not receive HSTS header
-trading-analytics.com: did not receive HSTS header
-tradingbhavishya.com: could not connect to host
+trading-analytics.com: could not connect to host
+tradingbhavishya.com: did not receive HSTS header
tradingcentre.com.au: did not receive HSTS header
tradinghope.com: could not connect to host
tradingrooms.com: did not receive HSTS header
traditional-knowledge.tk: did not receive HSTS header
+tradiz.org: could not connect to host
+traeningsprojekt.dk: did not receive HSTS header
trafficquality.org: could not connect to host
-traffictigers.com: could not connect to host
+traffictigers.com: did not receive HSTS header
traforet.win: could not connect to host
train-track.co.uk: did not receive HSTS header
traindb.nl: did not receive HSTS header
+trainhorns.us: did not receive HSTS header
training4girls.ru: could not connect to host
-traininglist.org: did not receive HSTS header
+traininglist.org: could not connect to host
trainingproviderresults.gov: could not connect to host
+trainline.at: could not connect to host
+trainline.cn: could not connect to host
+trainline.com.br: could not connect to host
+trainline.com.pt: could not connect to host
+trainline.cz: could not connect to host
+trainline.dk: could not connect to host
trainline.io: could not connect to host
+trainline.nl: could not connect to host
+trainline.no: could not connect to host
+trainline.pl: could not connect to host
+trainline.se: could not connect to host
trainut.com: could not connect to host
trakfusion.com: could not connect to host
+tran.pw: did not receive HSTS header
tranos.de: did not receive HSTS header
transbike.es: did not receive HSTS header
transcendmotor.sg: could not connect to host
transcriptionwave.com: did not receive HSTS header
transdirect.com.au: did not receive HSTS header
transformify.org: did not receive HSTS header
+transgendernetwerk.nl: did not receive HSTS header
transl8.eu: did not receive HSTS header
translate.googleapis.com: did not receive HSTS header (error ignored - included regardless)
transmithe.net: could not connect to host
@@ -13202,8 +14127,10 @@ trauertexte.info: did not receive HSTS header
traumhuetten.de: did not receive HSTS header
travality.ru: could not connect to host
travel-kuban.ru: did not receive HSTS header
+travel1x1.com: could not connect to host
travelinsightswriter.com: could not connect to host
travelinsurance.co.nz: did not receive HSTS header
+travelling.expert: could not connect to host
travotion.com: could not connect to host
trazosdearte.com: did not receive HSTS header
treasuredinheritanceministry.com: did not receive HSTS header
@@ -13219,6 +14146,7 @@ trendberry.ru: could not connect to host
trendingpulse.com: could not connect to host
trendisland.de: did not receive HSTS header
trendydips.com: could not connect to host
+trewe.eu: could not connect to host
triadwars.com: did not receive HSTS header
triageo.com.au: could not connect to host
trialmock.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
@@ -13234,6 +14162,7 @@ trinitytechdev.com: did not receive HSTS header
tripcombi.com: did not receive HSTS header
tripdelta.com: did not receive HSTS header
tripinsider.club: did not receive HSTS header
+tripp.xyz: did not receive HSTS header
trisportas.lt: did not receive HSTS header
tristanfarkas.one: could not connect to host
trixati.org.ua: did not receive HSTS header
@@ -13241,18 +14170,21 @@ trixies-wish.nz: could not connect to host
trixy.com.br: could not connect to host
troi.de: did not receive HSTS header
trollme.me: could not connect to host
+trollscave.xyz: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
tronflix.com: did not receive HSTS header
troo.ly: could not connect to host
trouter.io: could not connect to host
trouver-son-chemin.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+truckgpsreviews.com: did not receive HSTS header
true.ink: did not receive HSTS header
truebred-labradors.com: did not receive HSTS header
+truejob.com: did not receive HSTS header
+trumeet.top: did not receive HSTS header
trunkjunk.co: could not connect to host
trush.in: could not connect to host
trustedinnovators.com: could not connect to host
trusteecar.com: did not receive HSTS header
trustmeimfancy.com: could not connect to host
-truthmessages.pw: could not connect to host
trybind.com: could not connect to host
tryfabulousdiet.com: could not connect to host
tryfm.net: did not receive HSTS header
@@ -13260,6 +14192,7 @@ trynowrinkleseyeserum.com: could not connect to host
tryoneday.co: did not receive HSTS header
tryti.me: could not connect to host
ts2.se: could not connect to host
+ts3-dns.me: could not connect to host
ts3.consulting: could not connect to host
tsaro.io: could not connect to host
tsdom.net: could not connect to host
@@ -13267,25 +14200,24 @@ tsecy.com: could not connect to host
tsgbit.net: could not connect to host
tsgoc.com: did not receive HSTS header
tsigaradiko.com: could not connect to host
-tsng-stg.tk: could not connect to host
tsrstore.gq: could not connect to host
-tssouthernpower.com: max-age too low: 0
+tsu-ku-ro.com: could not connect to host
tsukeawase.com: did not receive HSTS header
+tsukuba.style: could not connect to host
tsumegumi.net: could not connect to host
tsumi.moe: could not connect to host
tsura.org: could not connect to host
tsurezurematome.ga: could not connect to host
tsurimap.com: could not connect to host
tsutsumi-kogyo.jp: could not connect to host
-tt.dog: did not receive HSTS header
ttackmedical.com.br: could not connect to host
+ttb.gov: did not receive HSTS header
tts.co.nz: did not receive HSTS header
tty.space: could not connect to host
ttz.im: could not connect to host
tuamoronline.com: could not connect to host
tubbutec.de: did not receive HSTS header
tubeju.com: could not connect to host
-tuberecht.de: max-age too low: 0
tubetoon.com: did not receive HSTS header
tubetooncartoons.com: did not receive HSTS header
tubex.ga: could not connect to host
@@ -13295,7 +14227,6 @@ tucnak.eu: could not connect to host
tueche.com.ar: did not receive HSTS header
tuingereedschappen.net: did not receive HSTS header
tuja.hu: could not connect to host
-tulenceria.es: could not connect to host
tulsameetingroom.com: could not connect to host
tuminauskas.lt: did not receive HSTS header
tunai.id: could not connect to host
@@ -13305,7 +14236,8 @@ tungstenroyce.com: did not receive HSTS header
tupizm.com: could not connect to host
turismo.cl: could not connect to host
turkiet.guide: could not connect to host
-turn-sticks.com: did not receive HSTS header
+turkrock.com: did not receive HSTS header
+turn-sticks.com: could not connect to host
turnik-67.ru: could not connect to host
turniker.ru: could not connect to host
turnsticks.com: could not connect to host
@@ -13314,14 +14246,17 @@ turtles.ga: could not connect to host
tusb.ml: did not receive HSTS header
tussengelegenwoningverkopen.nl: could not connect to host
tuthowto.com: did not receive HSTS header
-tutoragency.org: could not connect to host
tutorio.ga: could not connect to host
+tutu.ro: could not connect to host
tuturulianda.com: did not receive HSTS header
tuvalie.com: did not receive HSTS header
tuxhound.org: could not connect to host
+tuxplace.nl: could not connect to host
tv.search.yahoo.com: could not connect to host
+tvc.red: could not connect to host
+tverdohleb.com: could not connect to host
tvoru.com.ua: did not receive HSTS header
-tvtubeflix.com: max-age too low: 2592000
+tvtubeflix.com: could not connect to host
tvz-materijali.com: could not connect to host
tw2-tools.ga: could not connect to host
twarog.cc: could not connect to host
@@ -13366,15 +14301,16 @@ txcp01.com: could not connect to host
txcp02.com: could not connect to host
txf.pw: could not connect to host
ty2u.com: did not receive HSTS header
-tycjt.vip: could not connect to host
+tycjt.vip: did not receive HSTS header
tykoon.com: could not connect to host
tyler.coach: could not connect to host
tyler.rs: could not connect to host
tylercoach.com: could not connect to host
tylerharcourt.ca: max-age too low: 86400
tylerharcourt.com: could not connect to host
-tylerharcourt.net: could not connect to host
+tylerharcourt.org: did not receive HSTS header
tylerharcourt.xyz: could not connect to host
+tylerjharcourt.com: could not connect to host
tyleromeara.com: could not connect to host
tylian.net: max-age too low: 0
typeofweb.com: did not receive HSTS header
@@ -13382,18 +14318,13 @@ typingrevolution.com: did not receive HSTS header
tyreis.com: could not connect to host
tyrelius.com: could not connect to host
tyroproducts.eu: did not receive HSTS header
-tyroremotes.no: did not receive HSTS header
tyskland.guide: could not connect to host
-tysye.ca: could not connect to host
tzappa.net: could not connect to host
tzwe.com: could not connect to host
-u-blox.com: max-age too low: 0
u-master.net: did not receive HSTS header
-u-tokyo.club: could not connect to host
u175.com: could not connect to host
uadp.pw: could not connect to host
uahs.org.uk: did not receive HSTS header
-uatgootax.ru: did not receive HSTS header
ubalert.com: could not connect to host
uber.com.au: did not receive HSTS header
ubercalculator.com: did not receive HSTS header
@@ -13402,7 +14333,8 @@ ubicloud.de: could not connect to host
ubicv.com: could not connect to host
ublox.com: did not receive HSTS header
ubtce.com: could not connect to host
-ubuntuhot.com: did not receive HSTS header
+ubuntuhot.com: could not connect to host
+udruga-point.hr: did not receive HSTS header
ueba1085.jp: could not connect to host
uefeng.com: did not receive HSTS header
uega.net: did not receive HSTS header
@@ -13416,6 +14348,7 @@ ugisgutless.com: could not connect to host
ugo.ninja: could not connect to host
ugosadventures.com: could not connect to host
uhasseltctf.ga: could not connect to host
+uhlhosting.ch: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
uhm.io: did not receive HSTS header
uhuru-market.com: could not connect to host
uitslagensoftware.nl: did not receive HSTS header
@@ -13440,39 +14373,36 @@ umaimise.info: did not receive HSTS header
umgardi.ca: could not connect to host
umidev.com: could not connect to host
umie.cc: did not receive HSTS header
-ump45.moe: could not connect to host
+ump45.moe: did not receive HSTS header
umsapi.com: could not connect to host
unapolegetic.co: did not receive HSTS header
unart.info: could not connect to host
unbanthe.net: could not connect to host
-unblockat.tk: could not connect to host
+unblockat.tk: did not receive HSTS header
unblocked-networks.org: could not connect to host
-unblocked.blue: could not connect to host
+unblocked.blue: did not receive HSTS header
unblocked.date: could not connect to host
unblocked.faith: could not connect to host
unblocked.host: could not connect to host
-unblocked.party: max-age too low: 0
-unblocked.sh: could not connect to host
+unblocked.party: could not connect to host
unblocked.st: did not receive HSTS header
-unblocked.today: max-age too low: 0
-unblocked.vc: could not connect to host
+unblocked.today: could not connect to host
unblocked.win: could not connect to host
unblocked.works: could not connect to host
unblocked.world: could not connect to host
unblockedall.site: could not connect to host
+unblockedbay.info: could not connect to host
unblockerproxy.site: could not connect to host
unblockerproxy.top: could not connect to host
unblockmy.party: could not connect to host
unblockmy.tech: could not connect to host
unblockmy.xyz: could not connect to host
-unblockmyproxy.site: max-age too low: 0
+unblockmyproxy.site: could not connect to host
unblockthe.site: could not connect to host
unblockthe.top: could not connect to host
unccdesign.club: could not connect to host
unclegen.xyz: could not connect to host
-undeadbrains.de: could not connect to host
under30stravelinsurance.com.au: did not receive HSTS header
-undercovercondoms.com: could not connect to host
underkin.com: could not connect to host
underskatten.tk: could not connect to host
unefuite.ch: could not connect to host
@@ -13482,37 +14412,40 @@ unhu.fr: could not connect to host
uni-games.com: could not connect to host
uni2share.com: could not connect to host
unicefkaarten.be: did not receive HSTS header
+unicefkort.dk: did not receive HSTS header
unicooo.com: could not connect to host
unicorn.li: could not connect to host
unicorncloud.org: could not connect to host
+unifiednetwork.me: could not connect to host
uniformecomgas.com.br: could not connect to host
uniformehope.com.br: did not receive HSTS header
uniformehumboldt.com.br: did not receive HSTS header
uniformespousoalegre.com.br: did not receive HSTS header
unikitty-on-tour.com: could not connect to host
unikrn.com: could not connect to host
-uninet.cf: did not receive HSTS header
unionstationapp.com: could not connect to host
+unipig.de: could not connect to host
unirenter.ru: did not receive HSTS header
unison.com: did not receive HSTS header
-unisyssecurity.com: did not receive HSTS header
+unisyssecurity.com: could not connect to host
uniteasia.org: did not receive HSTS header
unitedcyberdevelopment.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
unitlabs.net: could not connect to host
unitrade-425.co.za: did not receive HSTS header
university4industry.com: did not receive HSTS header
-universogay.com: could not connect to host
univstore.win: could not connect to host
univz.com: could not connect to host
unixtime.pro: could not connect to host
-unknownbreakup.com: did not receive HSTS header
unknownphenomena.net: could not connect to host
+unmanaged.space: could not connect to host
unplugg3r.dk: could not connect to host
unravel.ie: could not connect to host
+uns.vn: could not connect to host
unschoolrules.com: did not receive HSTS header
unstockd.org: could not connect to host
unsupervised.ca: did not receive HSTS header
unsystem.net: could not connect to host
+unterkunft.guru: did not receive HSTS header
untoldstory.eu: did not receive HSTS header
unwiredbrain.com: could not connect to host
unwomen.is: did not receive HSTS header
@@ -13521,7 +14454,9 @@ uonstaffhub.com: could not connect to host
uow.ninja: could not connect to host
up1.ca: could not connect to host
upaknship.com: did not receive HSTS header
+upbad.com: did not receive HSTS header
upboard.jp: could not connect to host
+upgauged.com: could not connect to host
upldr.pw: could not connect to host
uploadbro.com: could not connect to host
upmchealthsecurity.us: could not connect to host
@@ -13531,7 +14466,6 @@ upstats.eu: could not connect to host
uptic.net: did not receive HSTS header
upupming.site: did not receive HSTS header
ur-lauber.de: did not receive HSTS header
-urandom.eu.org: did not receive HSTS header
urban-garden.lt: could not connect to host
urban-garden.lv: could not connect to host
urbanmic.com: could not connect to host
@@ -13541,12 +14475,14 @@ urlachershop.com.br: did not receive HSTS header
urlchomp.com: did not receive HSTS header
urology.wiki: did not receive HSTS header
urphp.com: could not connect to host
-us-immigration.com: did not receive HSTS header
+ursae.co: did not receive HSTS header
+us-immigration.com: could not connect to host
usaab.org: did not receive HSTS header
usafuelservice.com: did not receive HSTS header
+usatomotori.com: did not receive HSTS header
usbirthcertificate.com: could not connect to host
usbtypeccompliant.com: could not connect to host
-uscitizenship.info: did not receive HSTS header
+uscitizenship.info: could not connect to host
uscntalk.com: could not connect to host
uscp8.com: could not connect to host
uscurrency.gov: did not receive HSTS header
@@ -13557,7 +14493,9 @@ user-new.com: did not receive HSTS header
usercare.com: did not receive HSTS header
useresponse.com: did not receive HSTS header
userify.com: max-age too low: 0
+usimmigration.us: could not connect to host
uslab.io: could not connect to host
+usparklodging.com: did not receive HSTS header
usportsgo.com: could not connect to host
usr.nz: did not receive HSTS header
utilitronium-shockwave.com: could not connect to host
@@ -13572,9 +14510,9 @@ uttnetgroup.fr: could not connect to host
utumno.ch: did not receive HSTS header
utvbloggen.se: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
uvarov.pw: did not receive HSTS header
-uwac.co.uk: could not connect to host
uwesander.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
uwfreelanceopticien.nl: could not connect to host
+uwsoftware.be: did not receive HSTS header
uwstartups.com: could not connect to host
uxux.pl: could not connect to host
uygindir.ml: could not connect to host
@@ -13582,8 +14520,6 @@ uyym.com: could not connect to host
uzmandroid.com: could not connect to host
uzmandroid.net: could not connect to host
uzmandroid.top: could not connect to host
-uzsvm.cz: could not connect to host
-v-d-p.net: did not receive HSTS header
v-desk.ga: could not connect to host
v0rtex.xyz: could not connect to host
v0tti.com: did not receive HSTS header
@@ -13597,7 +14533,7 @@ v5xp.com: did not receive HSTS header
v7.cl: could not connect to host
v789xl.com: did not receive HSTS header
vaaddress.co: could not connect to host
-vaalmarketplace.co.za: did not receive HSTS header
+vaalmarketplace.co.za: could not connect to host
vacationality.com: could not connect to host
vacationfund.co: could not connect to host
vacationscostarica.com: did not receive HSTS header
@@ -13611,13 +14547,13 @@ vadik.me: could not connect to host
vadodesign.nl: did not receive HSTS header
vaibhavchatarkar.com: could not connect to host
valaeris.de: did not receive HSTS header
+valasi.eu: could not connect to host
valecnatechnika.cz: could not connect to host
valenhub.com: could not connect to host
valenhub.es: could not connect to host
valenscaelum.com: could not connect to host
valesdev.com: did not receive HSTS header
valethound.com: could not connect to host
-valhalla-agency.com: max-age too low: 0
valhallacostarica.com: could not connect to host
valhallamovement.com: did not receive HSTS header
valitron.se: did not receive HSTS header
@@ -13629,29 +14565,29 @@ valopv.be: could not connect to host
vamoaeturismo.com.br: could not connect to host
vamosfalardesaude.pt: could not connect to host
vampirism.eu: could not connect to host
-vampyrium.net: could not connect to host
vanacht.co.za: did not receive HSTS header
vanajahosting.com: did not receive HSTS header
vanderkley.it: could not connect to host
-vanderrijt.nl: did not receive HSTS header
vanderstraeten.dynv6.net: could not connect to host
vanessabalibridal.com: could not connect to host
vanestack.com: could not connect to host
+vanetv.com: did not receive HSTS header
+vangeluwedeberlaere.be: did not receive HSTS header
vanitas.xyz: did not receive HSTS header
vanitynailworkz.com: could not connect to host
vanlaanen.com: did not receive HSTS header
vansieleghem.com: could not connect to host
+vante.me: could not connect to host
+vantru.is: could not connect to host
vapecraftinc.com: did not receive HSTS header
vapemania.eu: could not connect to host
vapeshopsupply.com: max-age too low: 7889238
varela-electricite.fr: could not connect to host
-variable.agency: could not connect to host
variablyconstant.com: could not connect to host
varta.io: could not connect to host
vasa-webstranka.sk: did not receive HSTS header
vasanth.org: could not connect to host
-vascomm.co.id: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-vase-eroticke-povidky.cz: could not connect to host
+vastkustenrunt.se: did not receive HSTS header
vavai.net: did not receive HSTS header
vayaport.com: could not connect to host
vbest.net: could not connect to host
@@ -13663,13 +14599,14 @@ vconcept.ch: could not connect to host
vconcept.me: could not connect to host
vcr.re: could not connect to host
vdhco.be: did not receive HSTS header
-vdownloader.com: could not connect to host
+vdrpro.com: could not connect to host
veblen.com: did not receive HSTS header
vechkasov.ru: could not connect to host
vectro.me: could not connect to host
vedatkamer.com: did not receive HSTS header
vega-motor.com.ua: did not receive HSTS header
vega.dyndns.info: could not connect to host
+vegalayer.com: did not receive HSTS header
vegalengd.com: did not receive HSTS header
veganosonline.com: could not connect to host
veggiefasting.com: could not connect to host
@@ -13688,25 +14625,31 @@ vemokin.net: could not connect to host
venicecomputerrepair.com: could not connect to host
venicefloridawebsitedesign.com: could not connect to host
venicerealdeal.com: could not connect to host
+venirextra.com: did not receive HSTS header
+venirideal.com: did not receive HSTS header
venixplays-stream.ml: could not connect to host
venmos.com: could not connect to host
-vennet.fr: max-age too low: 0
venninvestorplatform.com: did not receive HSTS header
venoom.eu: did not receive HSTS header
vensl.org: could not connect to host
venturepro.com: did not receive HSTS header
-ventzke.com: did not receive HSTS header
+venturum.com: could not connect to host
+venturum.de: could not connect to host
+venturum.eu: could not connect to host
+venturum.net: could not connect to host
venzocrm.com: did not receive HSTS header
+ver-ooginoog.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+veraandsteve.date: could not connect to host
verdeandco.co.uk: could not connect to host
+verdict.gg: could not connect to host
verifiedinvesting.com: could not connect to host
verifikatorindonesia.com: could not connect to host
veristor.com: did not receive HSTS header
-verliefde-jongens.nl: could not connect to host
vermontcareergateway.org: could not connect to host
vernonfishandgame.ca: did not receive HSTS header
versfin.net: could not connect to host
versia.ru: did not receive HSTS header
-vertikar.net: max-age too low: 0
+versolslapeyre.fr: did not receive HSTS header
veryhax.de: could not connect to host
veryyounglesbians.com: could not connect to host
ves.vn.ua: could not connect to host
@@ -13722,21 +14665,22 @@ vglimg.com: could not connect to host
vhost.co.id: could not connect to host
viabemestar.com.br: could not connect to host
viadeux.com: did not receive HSTS header
-vialibido.com.br: could not connect to host
+viagra-kaufen.biz: did not receive HSTS header
viasinc.com: did not receive HSTS header
vibrashop.com.br: did not receive HSTS header
vicenage.com: could not connect to host
viceversa.xyz: did not receive HSTS header
vicianovi.cz: could not connect to host
-viciousflora.com: could not connect to host
viciousviscosity.xyz: could not connect to host
victorenxovais.com.br: could not connect to host
victoriapemberton.com: did not receive HSTS header
vid.me: did not receive HSTS header
+vidadu.com: did not receive HSTS header
vidb.me: could not connect to host
vidbuchanan.co.uk: did not receive HSTS header
viddiaz.com: did not receive HSTS header
videnskabsklubben.dk: did not receive HSTS header
+videoload.co: could not connect to host
videomuz.com: could not connect to host
videorullen.se: could not connect to host
videotogel.net: could not connect to host
@@ -13745,29 +14689,31 @@ vider.ga: could not connect to host
vidid.net: could not connect to host
vidiproject.com: did not receive HSTS header
viditut.com: could not connect to host
+vidlyoficial.com: could not connect to host
vidz.ga: could not connect to host
-vieaw.com: could not connect to host
viennan.net: could not connect to host
+vientos.coop: could not connect to host
vietnam-lifer.com: could not connect to host
vietnamchevrolet.net: did not receive HSTS header
-vietnamphotographytours.com: could not connect to host
-viewsea.com: could not connect to host
+vietnamphotographytours.com: did not receive HSTS header
+viewsea.com: max-age too low: 0
vigilo.cf: could not connect to host
vigilo.ga: could not connect to host
viikko.eu: could not connect to host
vijos.org: did not receive HSTS header
vikasbabyworld.de: could not connect to host
-viktor-machnik.de: could not connect to host
-viktorsvantesson.net: did not receive HSTS header
+viktor-machnik.de: did not receive HSTS header
+viktorsvantesson.net: could not connect to host
viladochurrasco.com.br: could not connect to host
vilaydin.com: did not receive HSTS header
vilight.com.br: could not connect to host
-villa-romantica-zillertal.at: did not receive HSTS header
villacarmela.com.br: did not receive HSTS header
villainsclothing.com.au: could not connect to host
villasenor.online: could not connect to host
+villekaaria.eu: could not connect to host
vilog.me: could not connect to host
vimeosucks.nyc: could not connect to host
+vinagro.sk: could not connect to host
vinasec.se: could not connect to host
vinbet.org: could not connect to host
vinbet000.com: could not connect to host
@@ -13785,28 +14731,30 @@ vinesauce.info: could not connect to host
vinetalk.net: could not connect to host
vinicius.sl: could not connect to host
viniferawineclub.com: did not receive HSTS header
-vintageheartcoffee.com: max-age too low: 0
+vinogradovka.com: did not receive HSTS header
vio.no: did not receive HSTS header
violenceinterrupted.org: did not receive HSTS header
+violet-letter.delivery: could not connect to host
viosey.com: could not connect to host
+vioye.com: did not receive HSTS header
viperdns.com: could not connect to host
vipesball.net: could not connect to host
viphospitality.se: could not connect to host
-vipi.es: could not connect to host
viplentes.com.br: did not receive HSTS header
vipmusic.ga: could not connect to host
vipnettikasinoklubi.com: could not connect to host
viral8.jp: could not connect to host
virginiacrimeanalysisnetwork.org: did not receive HSTS header
+virial.de: did not receive HSTS header
viris.si: max-age too low: 536000
+virtualcloud.ddns.net: could not connect to host
+virtualhealth.com: did not receive HSTS header
virtualstrongbox.ca: did not receive HSTS header
visa-shinsei.com: did not receive HSTS header
visanhigia.com: could not connect to host
viserproject.com: did not receive HSTS header
vision-painting.com: did not receive HSTS header
-visionarymedia.nl: could not connect to host
visiongamestudios.com: could not connect to host
-visionnissancanandaiguaparts.com: could not connect to host
visionthroughknowledge.com: could not connect to host
visiontree-beta.eu: could not connect to host
visiontree.eu: could not connect to host
@@ -13826,8 +14774,11 @@ vitapingu.de: could not connect to host
vitta.me: did not receive HSTS header
vitzro.kr: could not connect to host
viva-french.com: did not receive HSTS header
+vivanosports.com.br: did not receive HSTS header
vivasports.com.br: could not connect to host
vivocloud.com: could not connect to host
+vivoregularizafacil.com.br: did not receive HSTS header
+vivoseg.com: did not receive HSTS header
vivremoinscher.fr: did not receive HSTS header
vizeat.com: did not receive HSTS header
vkino.com: could not connect to host
@@ -13835,10 +14786,8 @@ vkulagin.ru: could not connect to host
vladimiroff.org: did not receive HSTS header
vldkn.net: could not connect to host
vleij.family: could not connect to host
-vliegensvlug.services: max-age too low: 2592000
vlogge.com: could not connect to host
vlzbazar.ru: could not connect to host
-vmoe.info: did not receive HSTS header
vmrdev.com: could not connect to host
vmstan.com: did not receive HSTS header
vocab.guru: could not connect to host
@@ -13846,23 +14795,29 @@ voceinveste.com: did not receive HSTS header
vogt.tech: could not connect to host
voice-of-design.com: could not connect to host
voicesuk.co.uk: did not receive HSTS header
+void-it.nl: could not connect to host
voidark.com: did not receive HSTS header
voidi.ca: could not connect to host
voidserv.net: could not connect to host
+voilo.club: did not receive HSTS header
+voilodaisuki.club: did not receive HSTS header
voipkb.com: did not receive HSTS header
+voiro.club: did not receive HSTS header
+voirodaisuki.club: did not receive HSTS header
volatimer.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
volbyzive.cz: did not receive HSTS header
volcain.io: could not connect to host
volcrado.com: did not receive HSTS header
volkden.com: could not connect to host
+volkswurst.de: did not receive HSTS header
voltimax.com: could not connect to host
voltotc.com: did not receive HSTS header
-voluptueuse.com: could not connect to host
+voluptueuse.com: did not receive HSTS header
vonavy-cukor.sk: could not connect to host
vonavycukor.sk: could not connect to host
vonedelmann.de: did not receive HSTS header
vongerlach.at: did not receive HSTS header
-vonterra.us: did not receive HSTS header
+vonterra.us: could not connect to host
vooreenveiligthuis.nl: did not receive HSTS header
voorjou.com: did not receive HSTS header
vorangerie.com: could not connect to host
@@ -13874,7 +14829,6 @@ votresiteweb.ch: could not connect to host
vow.vn: could not connect to host
vowsy.club: did not receive HSTS header
vox.vg: did not receive HSTS header
-vozami.com: could not connect to host
vpip.net: could not connect to host
vpl.me: did not receive HSTS header
vpn-byen.dk: did not receive HSTS header
@@ -13897,19 +14851,17 @@ vrijstaandhuis-in-zuid-holland-kopen.nl: could not connect to host
vrijstaandhuis-in-zuidplas-kopen.nl: could not connect to host
vrijstaandhuis-in-zwartewaterland-kopen.nl: could not connect to host
vrijstaandhuisverkopen.nl: could not connect to host
-vrlaid.com: could not connect to host
vrobert.fr: could not connect to host
-vrsgames.com.mx: did not receive HSTS header
vrzl.pro: could not connect to host
vsc-don-stocksport.de: did not receive HSTS header
-vsestiralnie.com: did not receive HSTS header
vucdn.com: could not connect to host
+vulnerabilities.io: could not connect to host
+vumetric.com: could not connect to host
vuosaarenmontessoritalo.fi: did not receive HSTS header
vvl.me: did not receive HSTS header
vwoforangeparts.com: could not connect to host
vxapps.com: could not connect to host
vxml.club: could not connect to host
-vyncke.org: max-age too low: 2678400
vynedmusic.com: could not connect to host
vyshivanochka.in.ua: could not connect to host
vysvetluju.cz: could not connect to host
@@ -13918,22 +14870,21 @@ vyvygen.com: did not receive HSTS header
vzk.io: could not connect to host
w10club.com: could not connect to host
w2gshop.com.br: could not connect to host
+w4.no: did not receive HSTS header
w4a.fr: could not connect to host
-w4b.in: could not connect to host
w4xzr.top: could not connect to host
w4xzr.xyz: could not connect to host
w9rld.com: did not receive HSTS header
wabifoggynuts.com: could not connect to host
wachtwoordencheck.nl: could not connect to host
-waelti.xxx: could not connect to host
wafairhaven.com.au: did not receive HSTS header
wafni.com: could not connect to host
wahhoi.net: did not receive HSTS header
+wai-in.com: could not connect to host
wait.moe: could not connect to host
waixingrenfuli7.vip: could not connect to host
wakapp.de: could not connect to host
wakened.net: did not receive HSTS header
-wakfu.cc: max-age too low: 0
walkeryoung.ca: could not connect to host
walkingforhealth.org.uk: did not receive HSTS header
wallabag.it: did not receive HSTS header
@@ -13943,6 +14894,7 @@ wallet.google.com: did not receive HSTS header (error ignored - included regardl
wallsblog.dk: could not connect to host
walnutgaming.co.uk: could not connect to host
walterlynnmosley.com: did not receive HSTS header
+wan.pp.ua: could not connect to host
wanashi.com: could not connect to host
wanban.io: could not connect to host
wanda76.com: could not connect to host
@@ -13952,15 +14904,13 @@ wanda96.com: could not connect to host
wanda97.com: could not connect to host
wanda98.com: could not connect to host
wangjiatun.com.tw: could not connect to host
-wangjun.me: did not receive HSTS header
wangkezun.com: could not connect to host
wangqiliang.xn--fiqs8s: could not connect to host
wangql.cn: could not connect to host
-wangyubao.cn: could not connect to host
-wanquanojbk.com: could not connect to host
+wanquanojbk.com: did not receive HSTS header
wantshow.com.br: did not receive HSTS header
wapjt.cn: could not connect to host
-wapking.live: did not receive HSTS header
+wapking.live: could not connect to host
wapt.fr: did not receive HSTS header
warandpeace.xyz: could not connect to host
warcraftjournal.org: could not connect to host
@@ -13972,11 +14922,13 @@ warezaddict.com: could not connect to host
warhistoryonline.com: did not receive HSTS header
warlions.info: could not connect to host
warped.com: did not receive HSTS header
+warren.sh: could not connect to host
warrencreative.com: did not receive HSTS header
warsentech.com: could not connect to host
warumsuchen.at: did not receive HSTS header
wasatchconstables.com: did not receive HSTS header
wasatchcrest.com: did not receive HSTS header
+wasfuereintheater.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
wassim.is: could not connect to host
watashi.bid: could not connect to host
watchium.com: did not receive HSTS header
@@ -13989,11 +14941,15 @@ watsonhall.uk: could not connect to host
wattechweb.com: did not receive HSTS header
wavefloatrooms.com: did not receive HSTS header
wavefrontsystemstech.com: could not connect to host
+wavesoftime.com: could not connect to host
+waxlrs.com: could not connect to host
waylaydesign.com: did not receive HSTS header
waylee.net: did not receive HSTS header
wbit.co.il: did not receive HSTS header
-wbut.ml: did not receive HSTS header
-we-bb.com: could not connect to host
+wbut.ml: could not connect to host
+wdesk.com: did not receive HSTS header
+wdmg.com.ua: max-age too low: 604800
+wdt.io: did not receive HSTS header
we.serveftp.net: could not connect to host
wealthformyhealth.com: did not receive HSTS header
wear2work.nl: could not connect to host
@@ -14004,11 +14960,13 @@ weaverhairextensions.nl: could not connect to host
web-demarche.com: could not connect to host
web-industry.fr: could not connect to host
web-insider.net: did not receive HSTS header
+web-mail.info: could not connect to host
web-vision.de: did not receive HSTS header
web4all.fr: did not receive HSTS header
web4pro.fr: could not connect to host
webandwords.com.au: could not connect to host
webanker.sh: did not receive HSTS header
+webapky.cz: could not connect to host
webapps.directory: could not connect to host
webart-factory.de: could not connect to host
webassadors.com: could not connect to host
@@ -14016,7 +14974,8 @@ webbuzz.com.au: did not receive HSTS header
webchat.domains: did not receive HSTS header
webcreation.rocks: did not receive HSTS header
webdesign-kronberg.de: did not receive HSTS header
-webdesignssussex.co.uk: did not receive HSTS header
+webdesignsandiego.com: did not receive HSTS header
+webdesignssussex.co.uk: could not connect to host
webdev-quiz.de: did not receive HSTS header
webdev.mobi: could not connect to host
webdosh.com: did not receive HSTS header
@@ -14025,12 +14984,12 @@ webelement.sk: did not receive HSTS header
weberjulia.com: could not connect to host
webfronten.dk: did not receive HSTS header
webgaff.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+webgreat.de: max-age too low: 3600
webhackspro.com: could not connect to host
webhelyesarcu.hu: did not receive HSTS header
webhosting4.net: did not receive HSTS header
webhostingpros.ml: could not connect to host
webies.ro: did not receive HSTS header
-webkeks.org: could not connect to host
webless.com: could not connect to host
webm.to: could not connect to host
webmail.mayfirst.org: did not receive HSTS header
@@ -14038,24 +14997,23 @@ webmaniabr.com: did not receive HSTS header
webmarketingfestival.it: did not receive HSTS header
webmixseo.com: did not receive HSTS header
webnetmail4u.com: could not connect to host
-webneuch.ch: did not receive HSTS header
+webneuch.ch: could not connect to host
webneuch.com: did not receive HSTS header
webneuch.eu: did not receive HSTS header
webneuch.fr: did not receive HSTS header
webneuch.info: did not receive HSTS header
webneuch.swiss: did not receive HSTS header
webninja.work: could not connect to host
+webnoob.net: could not connect to host
webnosql.com: could not connect to host
webperformance.ru: could not connect to host
-webproject.rocks: could not connect to host
webproshosting.tk: could not connect to host
webpublica.pt: could not connect to host
-webqueens.com: could not connect to host
websandbox.uk: could not connect to host
-websec.nl: max-age too low: 7776000
websiteadvice.com.au: did not receive HSTS header
websitedesign.bg: did not receive HSTS header
websitesabq.com: did not receive HSTS header
+websmartmedia.co.uk: did not receive HSTS header
webspotter.nl: could not connect to host
webstationservice.fr: could not connect to host
webstellung.com: could not connect to host
@@ -14064,42 +15022,49 @@ webswitch.io: could not connect to host
webtar.info: could not connect to host
webtech.com.br: could not connect to host
webtechgadgetry.com: could not connect to host
+webtek.nu: could not connect to host
webthings.com.br: did not receive HSTS header
webtiles.co.uk: could not connect to host
webukhost.com: could not connect to host
webuni.hu: did not receive HSTS header
-webveloper.com: max-age too low: 0
+webveloper.com: did not receive HSTS header
webwork.pw: could not connect to host
webypass.xyz: could not connect to host
+webzanem.com: could not connect to host
wecanfindit.co.za: could not connect to host
-wecanvisit.com: could not connect to host
+wedding-m.jp: did not receive HSTS header
weddingenvelopes.co.uk: did not receive HSTS header
weddingibiza.nl: could not connect to host
wedotrains.club: did not receive HSTS header
weebsr.us: could not connect to host
weed.ren: could not connect to host
+week.report: could not connect to host
weekly.fyi: could not connect to host
-weerstationgiethoorn.nl: could not connect to host
+weerstationgiethoorn.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
wegenaer.nl: could not connect to host
weicn.org: did not receive HSTS header
weightreviews.com: did not receive HSTS header
weiji.ga: could not connect to host
weiler.xyz: could not connect to host
+weiming.ddns.net: could not connect to host
weinhandel-preissler.de: could not connect to host
weiyuz.com: max-age too low: 6585555
weizenke.im: could not connect to host
wejumall.com: could not connect to host
wekibe.de: could not connect to host
-welby.cat: could not connect to host
+welby.cat: did not receive HSTS header
welches-kinderfahrrad.de: did not receive HSTS header
welkers.org: could not connect to host
wellastore.ru: could not connect to host
wellcomp.com.br: did not receive HSTS header
-wellies.com.au: max-age too low: 7889238
wellness.so: could not connect to host
+wellopp.com: did not receive HSTS header
wellproducedwines.com: did not receive HSTS header
wellsolveit.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+wellsplasticsurgery.com: did not receive HSTS header
+wellspringcamps.com: did not receive HSTS header
welovejobs.com: did not receive HSTS header
+welovemail.com: could not connect to host
welpy.com: could not connect to host
weltentreff.com: could not connect to host
weltmeisterschaft.net: could not connect to host
@@ -14109,12 +15074,12 @@ wendigo.pl: could not connect to host
wenode.net: could not connect to host
wentu.ml: could not connect to host
wenz.io: did not receive HSTS header
-werbik.at: could not connect to host
-werdeeintimo.de: did not receive HSTS header
+wer.sh: could not connect to host
+werdeeintimo.de: could not connect to host
wereldplanner.nl: could not connect to host
werhatunsverraten.eu: could not connect to host
werken-bij-inwork.nl: could not connect to host
-werkenbijkfc.nl: did not receive HSTS header
+werkenbijkfc.nl: could not connect to host
werkplaatsoost.nl: did not receive HSTS header
werkruimtebottendaal.nl: could not connect to host
werner-schaeffer.de: did not receive HSTS header
@@ -14122,7 +15087,9 @@ wernerschaeffer.de: did not receive HSTS header
wesayyesprogram.com: could not connect to host
wesleyharris.ca: did not receive HSTS header
wespeakgeek.co.za: could not connect to host
-westendzone.com: could not connect to host
+westcanal.net: could not connect to host
+westcoastaggregate.com: could not connect to host
+westendzone.com: max-age too low: 0
westerhoud.nl: did not receive HSTS header
westlinwinds.com: could not connect to host
westsussexconnecttosupport.org: could not connect to host
@@ -14132,16 +15099,18 @@ wetherbyweather.org.uk: did not receive HSTS header
wetoxic.com: could not connect to host
wettbonus.info: max-age too low: 0
wettbuero.de: did not receive HSTS header
-wetten.eu: max-age too low: 0
+wetten.eu: did not receive HSTS header
wettertoertchen.com: could not connect to host
wetthost.com: could not connect to host
wetttipps.com: could not connect to host
wetttipps.de: could not connect to host
wevahoo.com: could not connect to host
+wevg.org: could not connect to host
wevolver.com: did not receive HSTS header
wewillgo.com: could not connect to host
wewillgo.org: did not receive HSTS header
wewlad.me: could not connect to host
+wezl.net: did not receive HSTS header
wf-training-master.appspot.com: did not receive HSTS header (error ignored - included regardless)
wftda.com: did not receive HSTS header
wg-tools.de: could not connect to host
@@ -14163,11 +15132,11 @@ whitehat.id: did not receive HSTS header
whiterabbit.org: did not receive HSTS header
whiterabbitcakery.com: could not connect to host
whiteroom.agency: did not receive HSTS header
+whiteshadowimperium.com: could not connect to host
whitestagforge.com: could not connect to host
whoclicks.net: could not connect to host
whoisapi.online: could not connect to host
wholebites.com: max-age too low: 7889238
-wholesomeharvestbread.com: max-age too low: 86400
wholikes.us: could not connect to host
whoneedstobeprimaried.today: could not connect to host
whoownsmyavailability.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
@@ -14176,10 +15145,10 @@ whysuck.com: could not connect to host
wiapply.com: could not connect to host
wibruje.pl: did not receive HSTS header
wibuw.com: could not connect to host
+widdleguy.com: did not receive HSTS header
wideinfo.org: did not receive HSTS header
widenews.org: did not receive HSTS header
wienerwichtelchallenge.at: could not connect to host
-wienholding.at: max-age too low: 0
wieninternational.at: did not receive HSTS header
wificafehosting.com: did not receive HSTS header
wifimapa.cz: could not connect to host
@@ -14192,13 +15161,17 @@ wikisports.eu: could not connect to host
wild-emotion-events.de: could not connect to host
wildbee.org: could not connect to host
wildbirds.dk: did not receive HSTS header
+wildcard.hu: could not connect to host
wilddog.com: did not receive HSTS header
+wildewood.ca: could not connect to host
wilf1rst.com: could not connect to host
+wilfrid-calixte.fr: could not connect to host
wilhelm-nathan.de: could not connect to host
willcipriano.com: could not connect to host
willeminfo.ch: did not receive HSTS header
willemsjort.be: did not receive HSTS header
william.si: did not receive HSTS header
+williamboundsltd.com: could not connect to host
williamle.com: did not receive HSTS header
williamsapiens.com: could not connect to host
williamtm.design: could not connect to host
@@ -14206,9 +15179,7 @@ willkommen-fuerstenberg.de: could not connect to host
willosagiede.com: did not receive HSTS header
wilsonovi.com: could not connect to host
winaes.com: did not receive HSTS header
-winbuzzer.com: did not receive HSTS header
winclient.cn: could not connect to host
-wind.moe: could not connect to host
windholz.us: could not connect to host
windowsforum.com: did not receive HSTS header
windowstech.it: did not receive HSTS header
@@ -14221,6 +15192,7 @@ winebid.com: could not connect to host
winecodeavocado.com: could not connect to host
wineworksonline.com: could not connect to host
winfield.me.uk: did not receive HSTS header
+winfieldchen.me: did not receive HSTS header
winged.io: did not receive HSTS header
wingos.net: could not connect to host
wingumd.net: could not connect to host
@@ -14228,27 +15200,27 @@ winnersports.co: could not connect to host
winpack.cf: could not connect to host
winpack.eu.org: could not connect to host
winsec.nl: could not connect to host
-winshiplending.com: did not receive HSTS header
+winshiplending.com: could not connect to host
winsufi.biz: could not connect to host
wintercircle.co: max-age too low: 60
-wipc.net: could not connect to host
-wipply.com: did not receive HSTS header
+wintermeyer-consulting.de: could not connect to host
+wipc.net: did not receive HSTS header
+wipply.com: could not connect to host
wirbatz.org: did not receive HSTS header
wirc.gr: could not connect to host
wireless-emergency-stop.com: did not receive HSTS header
-wirkaufendeinau.to: did not receive HSTS header
+wirkaufendeinau.to: could not connect to host
wisak.eu: could not connect to host
wisdomize.me: could not connect to host
wiseloan.com: did not receive HSTS header
wishcert.com: could not connect to host
wishesbee.com: could not connect to host
-wispapp.com: did not receive HSTS header
wissl.org: could not connect to host
witae.com: could not connect to host
withgoogle.com: did not receive HSTS header (error ignored - included regardless)
withmy.beer: could not connect to host
withoutacrystalball.com: did not receive HSTS header
-withustrading.com: could not connect to host
+withustrading.com: did not receive HSTS header
withyoutube.com: did not receive HSTS header (error ignored - included regardless)
wittcher.com: could not connect to host
wittepapaver.nl: did not receive HSTS header
@@ -14258,15 +15230,13 @@ witzemaschine.com: max-age too low: 0
wizardmeow.xin: could not connect to host
wizardspire.com: did not receive HSTS header
wizznab.tk: could not connect to host
-wjbolles.com: did not receive HSTS header
wk-cpm.com: could not connect to host
wk577.com: could not connect to host
wlzhiyin.cn: could not connect to host
wmawri.com: did not receive HSTS header
-wmcuk.net: could not connect to host
+wmcuk.net: did not receive HSTS header
wmfinanz.com: could not connect to host
wmoda.com.br: could not connect to host
-wnmed.com.au: did not receive HSTS header
wnmm.nl: could not connect to host
wnnc.co.uk: could not connect to host
wobblylang.org: could not connect to host
@@ -14276,14 +15246,14 @@ wodice.com: could not connect to host
wohnungsbau-ludwigsburg.de: did not receive HSTS header
woima.fi: max-age too low: 604800
wokeai.net: did not receive HSTS header
+woktoss.com: could not connect to host
wolfemg.com: could not connect to host
wolfenland.net: did not receive HSTS header
-wolferstetterkeller.de: could not connect to host
wolfesden.com: could not connect to host
+wolfram.io: could not connect to host
wollekorb.de: could not connect to host
womf.org: did not receive HSTS header
womosale.de: could not connect to host
-wonder.com.mx: max-age too low: 86400
wonderbooks.club: could not connect to host
wonderfall.xyz: could not connect to host
wonderhost.info: could not connect to host
@@ -14299,22 +15269,22 @@ wooviet.com: could not connect to host
wopen.org: could not connect to host
wordbits.net: did not receive HSTS header
wordplay.one: could not connect to host
+wordpresspro.cl: did not receive HSTS header
wordsofamaster.com: could not connect to host
work-and-jockel.de: did not receive HSTS header
-workemy.com: could not connect to host
+workemy.com: did not receive HSTS header
workfone.io: could not connect to host
workpermit.com.vn: could not connect to host
workray.com: did not receive HSTS header
worksofwyoming.org: did not receive HSTS header
workwithgo.com: could not connect to host
world-education-association.org: could not connect to host
+worldchess.london: could not connect to host
worldfree4.org: could not connect to host
worldlist.org: could not connect to host
-worldnettps.com: did not receive HSTS header
worldpovertysolutions.org: did not receive HSTS header
worldsbeststory.com: did not receive HSTS header
worldwhisperer.net: could not connect to host
-wormdisk.net: could not connect to host
wormholevpn.net: could not connect to host
worshapp.com: could not connect to host
wow-travel.eu: could not connect to host
@@ -14326,9 +15296,9 @@ wp-stack.pro: could not connect to host
wp6.pw: could not connect to host
wpblog.com.tw: could not connect to host
wpcarer.pro: could not connect to host
+wpcdn.bid: did not receive HSTS header
wpcheck.io: could not connect to host
wpcontrol.se: could not connect to host
-wpdesigner.ir: did not receive HSTS header
wpfortify.com: could not connect to host
wpg-inc.com: did not receive HSTS header
wphelpwithhomework.tk: could not connect to host
@@ -14337,13 +15307,15 @@ wphostingspot.com: did not receive HSTS header
wpinfos.de: did not receive HSTS header
wplatin.com: could not connect to host
wpmetadatastandardsproject.org: could not connect to host
-wprevs.com: could not connect to host
+wprevs.com: did not receive HSTS header
wpruby.com: did not receive HSTS header
wpspeed.nl: did not receive HSTS header
wpunpacked.com: could not connect to host
wpyecom.es: did not receive HSTS header
wpzhiku.com: did not receive HSTS header
wql.zj.cn: did not receive HSTS header
+wrapit.hu: could not connect to host
+wrapitup.co.uk: did not receive HSTS header
wrbunderwriting.com: did not receive HSTS header
wrfu.co.nz: did not receive HSTS header
wriedts.de: did not receive HSTS header
@@ -14365,7 +15337,6 @@ wubify.com: could not connect to host
wubocong.com: could not connect to host
wubthecaptain.eu: could not connect to host
wuchipc.com: could not connect to host
-wuetix.de: max-age too low: 0
wufupay.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
wuhengmin.com: could not connect to host
wulpi.it: did not receive HSTS header
@@ -14373,9 +15344,9 @@ wumbo.kiwi: could not connect to host
wundtherapie-schulung.de: could not connect to host
wurzelzwerg.net: could not connect to host
wusx.club: could not connect to host
+wutianxian.com: did not receive HSTS header
wvr-law.de: did not receive HSTS header
wvw698.com: max-age too low: 2592000
-wwjd.dynu.net: could not connect to host
www-001133.com: could not connect to host
www-0385.com: could not connect to host
www-1116.com: did not receive HSTS header
@@ -14383,12 +15354,11 @@ www-1117.com: could not connect to host
www-38978.com: could not connect to host
www-39988.com: did not receive HSTS header
www-507.net: could not connect to host
-www-62755.com: could not connect to host
+www-62755.com: did not receive HSTS header
www-68277.com: could not connect to host
www-746.com: could not connect to host
www-771122.com: did not receive HSTS header
www-8003.com: did not receive HSTS header
-www-86499.com: did not receive HSTS header
www-88599.com: did not receive HSTS header
www-8887999.com: could not connect to host
www-9995.com: did not receive HSTS header
@@ -14418,6 +15388,7 @@ www.icann.org: did not receive HSTS header
www.jitsi.org: did not receive HSTS header
www.ledgerscope.net: could not connect to host
www.logentries.com: did not receive HSTS header
+www.makeyourlaws.org: could not connect to host
www.moneybookers.com: did not receive HSTS header
www.neonisi.com: could not connect to host
www.paycheckrecords.com: did not receive HSTS header
@@ -14436,9 +15407,11 @@ wygluszanie.eu: could not connect to host
wyu.cc: could not connect to host
wyzphoto.nl: did not receive HSTS header
wyzwaniemilosci.com: could not connect to host
+wzfetish.com.br: could not connect to host
x-pertservice.com: did not receive HSTS header
x-power-detox.com: could not connect to host
x-ripped-hd.com: could not connect to host
+x1616.tk: could not connect to host
x23.eu: did not receive HSTS header
x2c0.net: did not receive HSTS header
x2w.io: could not connect to host
@@ -14446,21 +15419,20 @@ x3led.com: could not connect to host
x509.pub: could not connect to host
x509.pw: could not connect to host
x64architecture.com: could not connect to host
-x69.biz: could not connect to host
-x69x.net: could not connect to host
+xanax.pro: could not connect to host
xanderweaver.com: did not receive HSTS header
xandocs.com: could not connect to host
xat.re: did not receive HSTS header
xavierbarroso.com: could not connect to host
xbc.nz: could not connect to host
xbind.io: could not connect to host
+xchangeinfo.com: could not connect to host
xchating.com: could not connect to host
xcompany.one: could not connect to host
xcoop.me: did not receive HSTS header
xd.gov: did not receive HSTS header
xdd.io: could not connect to host
xdty.org: could not connect to host
-xecure.zone: could not connect to host
xehoivn.vn: could not connect to host
xellos.ga: could not connect to host
xellos.ml: could not connect to host
@@ -14468,29 +15440,29 @@ xenesisziarovky.sk: could not connect to host
xenosphere.tk: could not connect to host
xeonlab.com: could not connect to host
xeonlab.de: could not connect to host
-xerownia.eu: could not connect to host
-xett.com: did not receive HSTS header
+xett.com: could not connect to host
xfive.de: could not connect to host
-xfrag-networks.com: did not receive HSTS header
xg3n1us.de: did not receive HSTS header
xgusto.com: did not receive HSTS header
-xhadius.de: could not connect to host
xia100.xyz: could not connect to host
-xiamenshipbuilding.com: could not connect to host
xiangqiushi.com: did not receive HSTS header
xianguocy.com: could not connect to host
xiaody.me: could not connect to host
+xiaolan.me: could not connect to host
xiaolvmu.com: could not connect to host
xiaolvmu.me: could not connect to host
-xiaomionline24.pl: did not receive HSTS header
+xiaomionline24.pl: could not connect to host
xiaoxiao.im: could not connect to host
-xiazhanjian.com: did not receive HSTS header
+xiaxuejin.cn: did not receive HSTS header
+xilegames.com: could not connect to host
xiliant.com: did not receive HSTS header
-ximage.me: could not connect to host
+ximage.me: did not receive HSTS header
ximens.me: could not connect to host
xinbiji.cn: could not connect to host
+xinex.cz: could not connect to host
xing.ml: could not connect to host
xinghuokeji.xin: could not connect to host
+xingiahanvisa.net: did not receive HSTS header
xinnixwebshop.be: did not receive HSTS header
xiqi.us: could not connect to host
xirion.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
@@ -14499,6 +15471,7 @@ xivpn.com: could not connect to host
xiyu.it: did not receive HSTS header
xiyu.moe: did not receive HSTS header
xjoi.net: could not connect to host
+xjoin.de: could not connect to host
xlaff.com: could not connect to host
xlboo.com: did not receive HSTS header
xlfblog.com: did not receive HSTS header
@@ -14506,7 +15479,6 @@ xlinar.com: could not connect to host
xmiui.com: could not connect to host
xmonk.org: did not receive HSTS header
xmr.my: could not connect to host
-xmv.cz: could not connect to host
xn----7sbmucgqdbgwwc5e9b.xn--p1ai: could not connect to host
xn--3lqp21gwna.xn--fiqs8s: could not connect to host
xn--3lqp21gwna.xn--fiqz9s: could not connect to host
@@ -14519,11 +15491,11 @@ xn--4dbjwf8c.gq: could not connect to host
xn--4dbjwf8c.ml: could not connect to host
xn--4dbjwf8c.tk: could not connect to host
xn--6cv66l79sp0n0ibo7s9ne.xyz: did not receive HSTS header
-xn--6x6a.life: could not connect to host
xn--7rvz7ku3ppnr.jp: could not connect to host
xn--7v8h.cf: could not connect to host
xn--80aaihqncaejjobbu6v.xn--p1ai: did not receive HSTS header
xn--80ablh1c.online: could not connect to host
+xn--80ac0aqlt.xn--p1ai: could not connect to host
xn--80aocgsfei.xn--p1ai: could not connect to host
xn--88j2fy28hbxmnnf9zlw5buzd.com: did not receive HSTS header
xn--8mr166hf6s.xn--fiqs8s: could not connect to host
@@ -14531,9 +15503,13 @@ xn--98jm6m.jp: could not connect to host
xn--9pr52k0p5a.com: did not receive HSTS header
xn--bstlinser-v2a.com: could not connect to host
xn--c5w27q.ml: could not connect to host
+xn--cckvb1cwa0c5br5e2d2711k.net: could not connect to host
xn--datenrettung-mnchen-jbc.com: did not receive HSTS header
xn--dckya4a0bya6x.com: could not connect to host
xn--dckya4a0bya6x.jp: could not connect to host
+xn--e--0g4aiy1b8rmfg3o.jp: could not connect to host
+xn--e--4h4axau6ld4lna0g.com: could not connect to host
+xn--e--ig4a4c3f6bvc5et632i.com: could not connect to host
xn--e--k83a5h244w54gttk.xyz: could not connect to host
xn--ekr87w7se89ay98ezcs.biz: did not receive HSTS header
xn--gmq92k.nagoya: could not connect to host
@@ -14552,6 +15528,7 @@ xn--lna-4000-9za.nu: could not connect to host
xn--lnakuten-9za.com: did not receive HSTS header
xn--ls8hi7a.tk: could not connect to host
xn--maraa-rta.org: could not connect to host
+xn--mensenges-o1a8c.gq: could not connect to host
xn--mhringen-65a.de: did not receive HSTS header
xn--milchaufschumer-test-lzb.de: could not connect to host
xn--n8jubz39q0g0afpa985c.com: could not connect to host
@@ -14559,11 +15536,11 @@ xn--neb-tma3u8u.xyz: could not connect to host
xn--o77hka.ga: could not connect to host
xn--p8jskj.jp: could not connect to host
xn--pck4e3a2ex597b4ml.xyz: did not receive HSTS header
-xn--pckqk6xk43lunk.net: did not receive HSTS header
+xn--pckqk6xk43lunk.net: could not connect to host
xn--qckqc0nxbyc4cdb4527err7c.biz: did not receive HSTS header
xn--qckyd1cu698a35zarib.xyz: could not connect to host
xn--r77hya.ga: could not connect to host
-xn--rdiger-kuhlmann-zvb.de: could not connect to host
+xn--rlcus7b3d.xn--xkc2dl3a5ee0h: could not connect to host
xn--rt-cja.eu: could not connect to host
xn--sdkwa9azd389v01ya.com: did not receive HSTS header
xn--srenpind-54a.dk: could not connect to host
@@ -14590,22 +15567,21 @@ xn--yoamomisuasbcn-ynb.com: could not connect to host
xn--zck9a4b352yuua.jp: did not receive HSTS header
xng.io: did not receive HSTS header
xobox.me: could not connect to host
-xoda.pw: could not connect to host
xoffy.com: did not receive HSTS header
xom.party: could not connect to host
xombra.com: could not connect to host
xor-a.net: could not connect to host
-xotika.tv: could not connect to host
+xpenology-fr.net: could not connect to host
xperiacodes.com: could not connect to host
xpi.fr: could not connect to host
xpj.sx: could not connect to host
-xpressprint.com.br: max-age too low: 60
+xpressprint.com.br: max-age too low: 90
xpwn.cz: could not connect to host
+xq55.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+xqin.net: could not connect to host
xrp.pw: could not connect to host
xscapers.com: did not receive HSTS header
-xserownia.com.pl: could not connect to host
-xserownia.eu: could not connect to host
-xserownia.pl: could not connect to host
+xsstime.nl: could not connect to host
xsyds.cn: did not receive HSTS header
xt.om: did not receive HSTS header
xtom.email: could not connect to host
@@ -14616,13 +15592,11 @@ xtreamhosting.eu: could not connect to host
xtrim.ru: did not receive HSTS header
xtzone.be: could not connect to host
xuexb.com: did not receive HSTS header
-xujan.com: could not connect to host
xuntaosms.com: could not connect to host
xupeng.me: could not connect to host
xuyh0120.win: did not receive HSTS header
+xwalck.se: could not connect to host
xxbase.com: did not receive HSTS header
-xxx3dbdsm.com: could not connect to host
-xxxladyboysporn.com: could not connect to host
xy1919.com: could not connect to host
xy6161.com: could not connect to host
xy6262.com: could not connect to host
@@ -14632,9 +15606,12 @@ xy7272.com: could not connect to host
xy7373.com: could not connect to host
xyndrac.net: max-age too low: 2592000
xynex.us: could not connect to host
+xynta.ch: could not connect to host
+xza.fr: could not connect to host
y-o-w.com: did not receive HSTS header
y-s.pw: could not connect to host
y3451.com: could not connect to host
+yaay.com.br: could not connect to host
yaccin.com: could not connect to host
yachts-magazine.com: did not receive HSTS header
yagi2.com: did not receive HSTS header
@@ -14643,17 +15620,17 @@ yalla.jp: did not receive HSTS header
yamamo10.com: could not connect to host
yameveo.com: did not receive HSTS header
yanwh.xyz: did not receive HSTS header
-yaoidreams.com: could not connect to host
-yaporn.tv: could not connect to host
+yaoidreams.com: did not receive HSTS header
+yaporn.tv: did not receive HSTS header
yarchives.jp: could not connect to host
yard-fu.com: could not connect to host
yardbird.us: could not connect to host
yarnhookup.com: did not receive HSTS header
-yarogneva.ru: could not connect to host
yasinaydin.net: did not receive HSTS header
yasutomonodokoiko.com: did not receive HSTS header
yaucy.win: could not connect to host
yawen.tw: did not receive HSTS header
+ybresson.com: could not connect to host
ybscareers.co.uk: did not receive HSTS header
ycaaz.com: did not receive HSTS header
ycc.wtf: could not connect to host
@@ -14662,7 +15639,7 @@ ydy.jp: could not connect to host
yecl.net: did not receive HSTS header
yello.website: could not connect to host
yellowcar.website: could not connect to host
-yemalu.com: did not receive HSTS header
+yemalu.com: could not connect to host
yemekbaz.az: could not connect to host
yenniferallulli.com: could not connect to host
yenniferallulli.de: could not connect to host
@@ -14673,9 +15650,11 @@ yepbitcoin.com: could not connect to host
yesdevnull.net: did not receive HSTS header
yesfone.com.br: could not connect to host
yestees.com: did not receive HSTS header
+yeswecan.co.bw: did not receive HSTS header
yetcore.io: could not connect to host
yetishirt.com: could not connect to host
yffengshi.ml: could not connect to host
+ygcdyf.com: did not receive HSTS header
yggdar.ga: could not connect to host
yhori.xyz: could not connect to host
yibaoweilong.top: could not connect to host
@@ -14688,10 +15667,9 @@ yinga.ga: did not receive HSTS header
yingsuo.ltd: could not connect to host
yingyj.com: did not receive HSTS header
yinhe12.net: did not receive HSTS header
-yipingguo.com: did not receive HSTS header
yippie.nl: could not connect to host
yizhu.com: could not connect to host
-ylilauta.org: could not connect to host
+yjsoft.me: could not connect to host
ylk.io: could not connect to host
ynode.co: did not receive HSTS header
ynsn.nl: could not connect to host
@@ -14699,7 +15677,9 @@ yntongji.com: could not connect to host
yob.vn: could not connect to host
yobbelwobbel.de: could not connect to host
yobst.tk: could not connect to host
+yoga-prive.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
yoga.is-an-engineer.com: could not connect to host
+yogatrainingrishikesh.com: could not connect to host
yogeshbeniwal.com: did not receive HSTS header
yogoeasy.com: did not receive HSTS header
yohanesmario.com: did not receive HSTS header
@@ -14707,30 +15687,33 @@ yoimise.net: did not receive HSTS header
yoiyado.info: did not receive HSTS header
yokeepo.com: could not connect to host
yolo-csgo.com: could not connect to host
-yoloboatrentals.com: did not receive HSTS header
-yolocelebs.com: could not connect to host
+yolocelebs.com: did not receive HSTS header
yoloprod.fr: could not connect to host
yoloseo.com: could not connect to host
yomena.in: could not connect to host
yomepre.com: could not connect to host
yopers.com: did not receive HSTS header
+yorkshireterrier.com.br: could not connect to host
+yorname.ml: could not connect to host
yoru.me: could not connect to host
yoticonnections.com: could not connect to host
yotilabs.com: could not connect to host
youcaitian.com: did not receive HSTS header
youcancraft.de: could not connect to host
+youcanfuckoff.xyz: could not connect to host
youcontrol.ru: could not connect to host
youfencun.com: did not receive HSTS header
-youjizz.bz: could not connect to host
+youlend.com: did not receive HSTS header
youlog.net: could not connect to host
youngandunited.nl: did not receive HSTS header
younl.net: could not connect to host
youon.tokyo: did not receive HSTS header
-youpark.no: did not receive HSTS header
yourbapp.ch: could not connect to host
yourcomputer.expert: did not receive HSTS header
yourgame.co.il: did not receive HSTS header
youri.me: could not connect to host
+yourlovesong.com.mx: could not connect to host
+yourname.xyz: did not receive HSTS header
yoursbookstore.jp: max-age too low: 0
yoursecondphone.co: could not connect to host
yourself.today: could not connect to host
@@ -14738,32 +15721,35 @@ yourstrongbox.com: could not connect to host
youruseragent.info: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
yourznc.com: could not connect to host
yousite.by: could not connect to host
-youth2009.org: could not connect to host
+youth2009.org: did not receive HSTS header
youtube: could not connect to host
youtubeviews.ml: could not connect to host
-youwatchporn.com: could not connect to host
youyoulemon.com: could not connect to host
ypcs.fi: did not receive HSTS header
-ypiresia.fr: could not connect to host
yryz.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+yslbeauty.com: did not receive HSTS header
ytcuber.xyz: could not connect to host
ythyth.com: max-age too low: 2592000
ytvwld.de: did not receive HSTS header
-yu.vc: max-age too low: 2592000
yu7.jp: did not receive HSTS header
yudan.com.br: could not connect to host
yude.ml: could not connect to host
yue2.net: did not receive HSTS header
+yuema.net.cn: could not connect to host
yufan.me: did not receive HSTS header
yugege.cf: could not connect to host
yuhen.ru: did not receive HSTS header
-yuhuo.org: could not connect to host
+yuhuo.org: max-age too low: 0
+yui.cat: did not receive HSTS header
+yukijinji.moe: did not receive HSTS header
yukiminami.net: could not connect to host
+yukimochi.io: could not connect to host
yuko.moe: could not connect to host
yukonrefugees.com: could not connect to host
yum.beer: could not connect to host
-yum0.cn: could not connect to host
+yumli.net: could not connect to host
yummyfamilyrecipes.com: could not connect to host
+yummylooks.com: did not receive HSTS header
yuna.love: could not connect to host
yuna.tg: could not connect to host
yunpan.blue: could not connect to host
@@ -14771,7 +15757,6 @@ yuntama.xyz: could not connect to host
yunzhan.io: could not connect to host
yunzhu.org: could not connect to host
yuppi.tv: max-age too low: 43200
-yurimoens.be: did not receive HSTS header
yurinet.org: could not connect to host
yuriykuzmin.com: did not receive HSTS header
yutabon.com: could not connect to host
@@ -14785,8 +15770,8 @@ z-coder.com: could not connect to host
z0rro.net: could not connect to host
z3liff.com: could not connect to host
z3liff.net: could not connect to host
+zacharopoulos.me: could not connect to host
zachbolinger.com: could not connect to host
-zadarkside.ro: max-age too low: 0
zadieheimlich.com: did not receive HSTS header
zaem.tv: could not connect to host
zahnrechner-staging.azurewebsites.net: could not connect to host
@@ -14808,6 +15793,8 @@ zavca.com: did not receive HSTS header
zbasenem.pl: did not receive HSTS header
zbchen.com: could not connect to host
zbigniewgalucki.eu: did not receive HSTS header
+zbp.at: did not receive HSTS header
+zby.io: could not connect to host
zdravotnickasluzba.eu: could not connect to host
zdrowiepaleo.pl: did not receive HSTS header
zdx.ch: max-age too low: 0
@@ -14823,12 +15810,12 @@ zehntner.ch: max-age too low: 3600
zeitzer-turngala.de: could not connect to host
zelfmoord.ga: could not connect to host
zelfstandigemakelaars.net: could not connect to host
+zellari.ru: did not receive HSTS header
zeloz.xyz: could not connect to host
zenghx.tk: could not connect to host
zenhaiku.com: did not receive HSTS header
zeno-system.com: did not receive HSTS header
zenpayroll.com: did not receive HSTS header
-zenti.cloud: did not receive HSTS header
zentience.dk: did not receive HSTS header
zentience.net: did not receive HSTS header
zentience.org: did not receive HSTS header
@@ -14836,8 +15823,9 @@ zentraler-kreditausschuss.de: did not receive HSTS header
zentralwolke.de: did not receive HSTS header
zenvite.com: could not connect to host
zenwears.com: could not connect to host
+zenycosta.com: could not connect to host
zepect.com: did not receive HSTS header
-zera.com.au: max-age too low: 0
+zera.com.au: could not connect to host
zerekin.net: did not receive HSTS header
zero-sum.xyz: could not connect to host
zero-x-baadf00d.com: could not connect to host
@@ -14852,23 +15840,31 @@ zetadisseny.es: did not receive HSTS header
zeto365.pl: did not receive HSTS header
zett4.me: max-age too low: 172800
zeug.co: could not connect to host
+zewtie.com: could not connect to host
zeytin.pro: could not connect to host
zgan.ga: could not connect to host
zh1.li: could not connect to host
zhang.wtf: could not connect to host
+zhangcheng.org: did not receive HSTS header
zhangruilin.com: did not receive HSTS header
zhangsir.net: could not connect to host
zhaochen.xyz: could not connect to host
zhaojin97.cn: could not connect to host
zhendingresources.com: did not receive HSTS header
+zhengouwu.com: could not connect to host
zhenmeish.com: could not connect to host
zhh.in: could not connect to host
zhihua-lai.com: did not receive HSTS header
-zhiin.net: could not connect to host
+zhiin.net: did not receive HSTS header
zhikin.com: could not connect to host
+zhimajk.com: could not connect to host
zhome.info: could not connect to host
zhoujiashu.com: could not connect to host
+zhuji.com: could not connect to host
+zhuji.com.cn: could not connect to host
+zhuji5.com: could not connect to host
zhujicaihong.com: could not connect to host
+zhuweiyou.com: did not receive HSTS header
zi0r.com: did not receive HSTS header
zian.online: could not connect to host
zicklam.com: could not connect to host
@@ -14880,16 +15876,21 @@ zippy-download.com: could not connect to host
zippy-download.de: could not connect to host
zirtue.io: could not connect to host
zivagold.com: did not receive HSTS header
+zivver.com: could not connect to host
zivy-ruzenec.cz: could not connect to host
+zixo.sk: could not connect to host
ziyuanabc.xyz: could not connect to host
+ziz.exchange: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
zizoo.com: did not receive HSTS header
zju.tv: could not connect to host
zjubtv.com: could not connect to host
zjutv.com: could not connect to host
zkillboard.com: did not receive HSTS header
zking.ga: could not connect to host
+zlc1994.com: did not receive HSTS header
zlcp.com: could not connect to host
zmsastro.co.za: could not connect to host
+zmscable.com: did not receive HSTS header
zmy.im: could not connect to host
znacite.com: did not receive HSTS header
znd.jp: could not connect to host
@@ -14899,45 +15900,51 @@ zoe.vc: could not connect to host
zohar.link: could not connect to host
zohar.shop: could not connect to host
zokster.net: could not connect to host
-zollihood.ch: did not receive HSTS header
zolotoy-standart.com.ua: did not receive HSTS header
+zombiesecured.com: could not connect to host
zomiac.pp.ua: could not connect to host
zonadebolsa.es: did not receive HSTS header
+zonadigital.co: did not receive HSTS header
+zone403.net: could not connect to host
zoneminder.com: did not receive HSTS header
zoners.si: did not receive HSTS header
zonky.io: could not connect to host
zoo24.de: did not receive HSTS header
zoofaeth.de: did not receive HSTS header
+zoofit.com.au: did not receive HSTS header
zoological-gardens.eu: could not connect to host
zoomingin.net: max-age too low: 5184000
zoommailing.com: did not receive HSTS header
zoorigin.com: did not receive HSTS header
-zorasvobodova.cz: did not receive HSTS header
zortium.report: could not connect to host
zorz.info: could not connect to host
-zotero.org: did not receive HSTS header
zoznamrealit.sk: did not receive HSTS header
+zq789.com: could not connect to host
zqhong.com: could not connect to host
zqjs.tk: could not connect to host
zrkr.de: could not connect to host
zrn.in: did not receive HSTS header
ztan.tk: could not connect to host
-ztcaoll222.cn: did not receive HSTS header
+ztcaoll222.cn: could not connect to host
ztytian.com: could not connect to host
+zuan-in.com: could not connect to host
zuckerfloh.de: did not receive HSTS header
zudomc.me: could not connect to host
zuehlcke.de: could not connect to host
zukix.com: could not connect to host
-zulu7.com: could not connect to host
+zulu7.com: did not receive HSTS header
zumazar.ru: could not connect to host
zunftmarke.de: did not receive HSTS header
+zutsu-raku.com: did not receive HSTS header
zuviel.space: could not connect to host
zvncloud.com: did not receive HSTS header
-zwembadheeten.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-zxity.co.uk: did not receive HSTS header
+zvz.im: could not connect to host
+zwembadheeten.nl: could not connect to host
+zx1168.com: could not connect to host
+zx2268.com: could not connect to host
+zxity.co.uk: could not connect to host
zxity.ltd: could not connect to host
zxity.uk: could not connect to host
-zy.md: could not connect to host
zyf.pw: could not connect to host
zymbit.com: did not receive HSTS header
zync.ca: did not receive HSTS header
diff --git a/security/manager/ssl/nsSTSPreloadList.inc b/security/manager/ssl/nsSTSPreloadList.inc
index 966eb308a..16dd59d71 100644
--- a/security/manager/ssl/nsSTSPreloadList.inc
+++ b/security/manager/ssl/nsSTSPreloadList.inc
@@ -8,7 +8,7 @@
/*****************************************************************************/
#include <stdint.h>
-const PRTime gPreloadListExpirationTime = INT64_C(1540445053556000);
+const PRTime gPreloadListExpirationTime = INT64_C(1544002174024000);
class nsSTSPreload
{
@@ -18,8 +18,6 @@ class nsSTSPreload
};
static const nsSTSPreload kSTSPreloadList[] = {
- { "0.me.uk", true },
- { "0005pay.com", true },
{ "00100010.net", true },
{ "0010100.net", true },
{ "00120012.net", true },
@@ -35,7 +33,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "00660066.net", true },
{ "00770077.net", true },
{ "00778899.com", true },
- { "00880088.net", true },
{ "00990099.net", true },
{ "00dani.me", true },
{ "00f.net", true },
@@ -75,17 +72,23 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "0391315.com", true },
{ "046569.com", true },
{ "04sun.com", true },
+ { "050.ca", true },
{ "050media.nl", true },
{ "0511315.net", true },
{ "0513c.com", true },
{ "055268.com", true },
{ "0573wk.com", true },
- { "066318.com", true },
{ "066538.com", true },
- { "066928.com", true },
- { "066938.com", true },
{ "06se.com", true },
+ { "07733.win", true },
+ { "078805.com", true },
+ { "078810.com", true },
+ { "078820.com", true },
+ { "078860.com", true },
+ { "078890.com", true },
+ { "0788yh.com", true },
{ "0792112.com", true },
+ { "0809yh.com", true },
{ "081638.com", true },
{ "081752.com", true },
{ "081763.com", true },
@@ -120,22 +123,20 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "0916app.com", true },
{ "09892.net", true },
{ "0au.de", true },
- { "0c.eu", true },
{ "0c3.de", true },
- { "0cdn.ga", true },
{ "0day.agency", true },
+ { "0des.com", true },
{ "0ik.de", true },
- { "0iz.net", true },
{ "0knowledge.de", false },
{ "0o0.edu.pl", true },
{ "0paste.com", true },
- { "0vi.org", true },
{ "0wx.cat", true },
{ "0wx.es", true },
{ "0wx.eu", true },
{ "0wx.org", true },
{ "0x.cx", true },
{ "0x.sk", true },
+ { "0x0.li", true },
{ "0x00ff00ff.com", true },
{ "0x17.de", true },
{ "0x52.net", true },
@@ -181,7 +182,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "10439.net", true },
{ "10453.net", true },
{ "10495.net", true },
- { "1066.io", true },
{ "10774.net", true },
{ "10840.net", true },
{ "10gb.io", true },
@@ -192,12 +192,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "10v2.com", true },
{ "1100.so", true },
{ "110110110.net", true },
- { "1116pay.com", true },
{ "112112112.net", true },
{ "112app.nl", true },
{ "112hz.com", true },
{ "113113113.net", true },
+ { "114514ss.com", true },
{ "118118118.net", true },
+ { "11bt.cc", true },
{ "11dzon.com", true },
{ "11loc.de", true },
{ "11scc.com", true },
@@ -220,13 +221,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "123plons.nl", true },
{ "123roulement.be", true },
{ "123roulement.com", true },
- { "123termpapers.com", true },
{ "123test.com", true },
{ "123test.nl", true },
{ "123writings.com", true },
{ "124133.com", true },
{ "124633.com", true },
{ "125m125.de", true },
+ { "1288fc.com", true },
+ { "12photos.eu", true },
{ "12thmanrising.com", true },
{ "12vpn.net", true },
{ "130.ua", true },
@@ -264,7 +266,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "149733.com", true },
{ "14it.de", true },
{ "14x3.de", true },
- { "15-10.com", true },
{ "1511774230.rsc.cdn77.org", true },
{ "152433.com", true },
{ "154233.com", true },
@@ -273,14 +274,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "156433.com", true },
{ "1590284872.rsc.cdn77.org", true },
{ "1600esplanade.com", true },
- { "160887.com", true },
{ "1644091933.rsc.cdn77.org", true },
{ "1661237.com", true },
- { "166166.com", true },
{ "1689886.com", true },
{ "168bo9.com", true },
{ "168bo9.net", true },
- { "168esb.com", true },
{ "1750studios.com", false },
{ "17hats.com", true },
{ "1811559.com", true },
@@ -290,6 +288,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "188da.com", true },
{ "188dv.com", true },
{ "189dv.com", true },
+ { "189fc.com", true },
{ "18celebration.com", true },
{ "18celebration.org", true },
{ "18f.gov", true },
@@ -305,6 +304,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "1a-werkstattgeraete.de", true },
{ "1ab-machinery.com", true },
{ "1aim.com", true },
+ { "1b1.pl", true },
{ "1c-power.ru", true },
{ "1cover.co.nz", true },
{ "1cover.com.au", true },
@@ -312,12 +312,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "1f123.net", true },
{ "1hourproofreading.com", true },
{ "1it.click", true },
- { "1item.co.il", true },
{ "1js.de", true },
{ "1kando.com", false },
{ "1km.ro", true },
{ "1kmi.co", true },
{ "1ll.uk", true },
+ { "1m.duckdns.org", true },
{ "1montre.fr", true },
{ "1morebounce.co.uk", true },
{ "1nfr.com", false },
@@ -327,7 +327,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "1panorama.ru", true },
{ "1para.net", true },
{ "1password.com", true },
- { "1pw.ca", true },
{ "1px.tv", true },
{ "1r.is", true },
{ "1rs.nl", true },
@@ -336,7 +335,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "1se2or3.com", true },
{ "1st-bounce.co.uk", true },
{ "1st-community.de", true },
- { "1st4abounce.co.uk", true },
{ "1stchoicefun.co.uk", true },
{ "1stclassbouncycastles.co.uk", true },
{ "1stforfun.co.uk", true },
@@ -348,16 +346,20 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "1wirelog.de", true },
{ "1wl.uk", true },
{ "2.wtf", true },
+ { "200fcw.com", true },
+ { "2018.wales", true },
{ "2048-spiel.de", true },
{ "20at.com", true },
{ "20denier.com", true },
{ "21.co.uk", true },
{ "215dy.net", true },
+ { "21sthammersmith.org.uk", true },
{ "21x9.org", true },
+ { "2222yh.com", true },
+ { "22bt.cc", true },
{ "22digital.agency", true },
{ "22scc.com", true },
{ "230beats.com", true },
- { "2333.press", true },
{ "2333666.xyz", true },
{ "2333blog.com", true },
{ "233abc.com", true },
@@ -377,14 +379,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "24ip.com", true },
{ "24ip.de", true },
{ "24ip.fr", true },
- { "24pcr.com", true },
{ "24timeravis.dk", true },
- { "256pages.com", false },
{ "258da.com", true },
{ "25reinyan25.net", true },
{ "2600edinburgh.org", true },
{ "2600hq.com", true },
- { "260887.com", true },
{ "263.info", true },
{ "27728522.com", true },
{ "28-industries.com", true },
@@ -393,6 +392,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "288da.com", true },
{ "28peaks.com", true },
{ "28spots.net", true },
+ { "2912.nl", true },
{ "2948.ca", true },
{ "298da.com", true },
{ "2991236.com", true },
@@ -417,6 +417,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "2kgwf.fi", true },
{ "2krueger.de", true },
{ "2li.ch", true },
+ { "2manydots.nl", true },
{ "2mb.solutions", true },
{ "2mir.com", true },
{ "2nains.ch", true },
@@ -427,6 +428,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "2rsc.net", true },
{ "2stv.net", true },
{ "2ulcceria.nl", true },
+ { "2wheel.com", true },
{ "3-dot-careapp1-146314.appspot.com", true },
{ "300m.com", false },
{ "302422.com", true },
@@ -437,10 +439,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "304squadron.org", true },
{ "3056999.com", true },
{ "309422.com", true },
- { "30hzcollective.com", true },
{ "30yearmortgagerates.net", true },
{ "310422.com", true },
- { "3133780x.com", true },
{ "313422.com", true },
{ "314022.com", true },
{ "314122.com", true },
@@ -452,8 +452,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "315422.com", true },
{ "316433.com", true },
{ "319422.com", true },
+ { "319k3.com", true },
{ "31klabs.com", true },
- { "31tv.ru", true },
{ "320281.net", true },
{ "321live.nl", true },
{ "324022.com", true },
@@ -468,8 +468,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "329422.com", true },
{ "32h.de", true },
{ "33-km.ru", true },
+ { "3333yh.com", true },
{ "33445.com", true },
- { "338da.com", true },
+ { "33445111.com", true },
+ { "33445222.com", true },
+ { "33445333.com", true },
+ { "33445444.com", true },
+ { "33836.com", true },
{ "33scc.com", true },
{ "340422.com", true },
{ "340622.com", true },
@@ -510,7 +515,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "349233.com", true },
{ "349433.com", true },
{ "349533.com", true },
- { "34oztonic.eu", true },
{ "350422.com", true },
{ "354022.com", true },
{ "354133.com", true },
@@ -525,7 +529,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "365365.com", true },
{ "365daysreview.com", true },
{ "365healthworld.com", true },
- { "365maya.com", true },
{ "365propertybuyer.co.uk", true },
{ "365skulls.com", true },
{ "370422.com", true },
@@ -555,6 +558,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "3aandl.com", true },
{ "3ags.de", true },
{ "3amtoolbox.se", true },
+ { "3ank.in", true },
{ "3bakayottu.com", true },
{ "3bigking.com", true },
{ "3c-d.de", true },
@@ -574,6 +578,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "3james.com", true },
{ "3logic.ru", true },
{ "3n5b.com", true },
+ { "3os.ooo", true },
{ "3phase.pw", true },
{ "3plusdesign.gr", true },
{ "3prn.com", true },
@@ -589,6 +594,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "3sdatasolution.de", true },
{ "3sdatasolutions.de", true },
{ "3sddns.de", true },
+ { "3sdns.de", true },
{ "3shosting.de", true },
{ "3smail.de", true },
{ "3timegear.com", true },
@@ -597,10 +603,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "3typen.tv", true },
{ "3v4l.org", true },
{ "3weekdietworks.com", true },
- { "3xx.link", true },
{ "4-1-where.com", true },
- { "4-it.de", true },
{ "40-grad.de", true },
+ { "4000milestare.com", true },
{ "403.ch", true },
{ "404notfound.com.br", true },
{ "4096b.com", true },
@@ -610,38 +615,31 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "41199.com", true },
{ "411film.com", true },
{ "411movie.com", true },
- { "41studio.com", true },
+ { "414553.com", true },
{ "41where.com", true },
{ "420java.com", true },
{ "4237.com", true },
{ "42day.info", true },
{ "42entrepreneurs.fr", true },
{ "439050.com", true },
- { "440887.com", true },
{ "441jj.com", false },
- { "442887.com", true },
- { "443887.com", true },
- { "444887.com", true },
- { "445887.com", true },
+ { "4444yh.com", true },
{ "448da.com", true },
{ "44scc.com", true },
- { "4500.co.il", true },
+ { "44sec.com", true },
+ { "4500.co.il", false },
+ { "451.ooo", true },
+ { "4553s.com", true },
{ "4553vip.com", true },
- { "4706666.com", true },
- { "4716666.com", true },
- { "4726666.com", true },
- { "4736666.com", true },
- { "4756666.com", true },
- { "4786666.com", true },
{ "478933.com", true },
{ "47essays.com", true },
{ "491mhz.net", true },
{ "49889.com", true },
- { "4997777.com", true },
{ "49dollaridahoregisteredagent.com", true },
{ "4decor.org", true },
{ "4everproxy.com", true },
{ "4eyes.ch", true },
+ { "4fit.ro", true },
{ "4freepress.com", true },
{ "4g-server.eu", false },
{ "4garage.com.br", true },
@@ -658,7 +656,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "4u2ore.net", true },
{ "4vector.com", true },
{ "4vf.de", true },
- { "4winds.pt", true },
{ "4x.fi", true },
{ "4x4.lk", true },
{ "4xlabs.co", true },
@@ -668,6 +665,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "500d500.com", true },
{ "500e500.com", true },
{ "500f500.com", true },
+ { "500fcw.com", true },
{ "500g500.com", true },
{ "500h500.com", true },
{ "500i500.com", true },
@@ -707,15 +705,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "51877.net", true },
{ "519422.com", true },
{ "51acg.eu.org", true },
- { "51aifuli.com", true },
{ "5214889.com", true },
{ "5214889.net", true },
{ "524022.com", true },
{ "524622.com", true },
{ "524922.com", true },
{ "525.info", true },
- { "52b9.com", true },
- { "52b9.net", true },
{ "52kb365.com", true },
{ "52ncp.net", true },
{ "52sykb.com", true },
@@ -740,12 +735,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "545922.com", true },
{ "546802.com", true },
{ "54below.com", true },
+ { "5518k3.com", true },
{ "5533445.com", true },
+ { "5555yh.com", true },
{ "558da.com", true },
+ { "55bt.cc", true },
{ "55scc.com", true },
{ "576422.com", true },
{ "579422.com", true },
- { "57he.com", true },
{ "57wilkie.net", true },
{ "583422.com", true },
{ "585422.com", true },
@@ -759,9 +756,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "595422.com", true },
{ "596422.com", true },
{ "598598598.net", true },
+ { "5986fc.com", true },
{ "5997891.com", true },
{ "5apps.com", true },
{ "5c1fd0f31022cbc40af9f785847baaf9.space", true },
+ { "5chat.it", true },
{ "5crowd.com", true },
{ "5dm.tv", true },
{ "5ece.de", true },
@@ -835,6 +834,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "646722.com", true },
{ "649022.com", true },
{ "649622.com", true },
+ { "64970.com", true },
{ "649722.com", true },
{ "649822.com", true },
{ "64bitgaming.de", true },
@@ -843,16 +843,25 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "6541166.com", true },
{ "6542277.com", true },
{ "6543399.com", true },
+ { "65477.com", true },
+ { "6547700.com", true },
+ { "6547711.com", true },
+ { "6547722.com", true },
+ { "6547733.com", true },
+ { "6547744.com", true },
+ { "6547755.com", true },
+ { "6547766.com", true },
{ "6548855.com", true },
{ "6548877.com", true },
{ "659422.com", true },
+ { "6616fc.com", true },
{ "66205.net", true },
{ "6633445.com", true },
{ "6652566.com", true },
{ "6660111.ru", true },
{ "6664553.com", true },
{ "666668722.com", true },
- { "6677.us", true },
+ { "6666yh.com", true },
{ "668da.com", true },
{ "670422.com", true },
{ "671422.com", true },
@@ -863,7 +872,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "679422.com", true },
{ "680422.com", true },
{ "686848.com", true },
- { "688da.com", true },
{ "690422.com", true },
{ "691422.com", true },
{ "692422.com", true },
@@ -885,7 +893,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "700.az", true },
{ "704233.com", true },
{ "704533.com", true },
- { "7045h.com", true },
{ "704633.com", true },
{ "712433.com", true },
{ "713433.com", true },
@@ -911,11 +918,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "741833.com", true },
{ "742833.com", true },
{ "743833.com", true },
+ { "74th.jp", true },
{ "762.ch", true },
{ "771122.tv", true },
{ "7717a.com", true },
{ "772244.net", true },
{ "7733445.com", true },
+ { "7777yh.com", true },
{ "777coin.com", true },
{ "778da.com", true },
{ "7885765.com", true },
@@ -923,7 +932,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "7891553.com", true },
{ "7891997.com", true },
{ "789zr.com", true },
- { "7bwin.com", true },
{ "7careconnect.com", true },
{ "7delights.com", true },
{ "7delights.in", true },
@@ -935,10 +943,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "7proxies.com", true },
{ "7sons.de", true },
{ "7thcircledesigns.com", true },
- { "7trade8.com", true },
{ "7x24servis.com", true },
{ "804322.com", true },
- { "808phone.net", true },
{ "809422.com", true },
{ "80993.net", true },
{ "814022.com", true },
@@ -946,8 +952,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "8189196.com", true },
{ "818da.com", true },
{ "8206688.com", true },
- { "826468.com", true },
- { "826498.com", true },
{ "8522.com", true },
{ "8522club.com", true },
{ "8522hk.com", true },
@@ -955,22 +959,25 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "8522top.com", true },
{ "8522tw.com", true },
{ "8522usa.com", true },
- { "86metro.ru", true },
- { "8722.com", true },
+ { "86499.com", true },
+ { "8649955.com", true },
+ { "8649966.com", true },
+ { "8649977.com", true },
+ { "8688fc.com", true },
{ "8722am.com", true },
{ "8722cn.com", true },
{ "8722hk.com", true },
{ "8722ph.com", true },
{ "8722tw.com", true },
{ "8722usa.com", true },
+ { "8818k3.com", true },
{ "8833445.com", true },
{ "88522am.com", true },
- { "887.ag", true },
{ "888888722.com", true },
{ "88889822.com", true },
{ "8888esb.com", true },
+ { "8888yh.com", true },
{ "888msc.vip", true },
- { "88d.com", true },
{ "8901178.com", true },
{ "8901178.net", true },
{ "8910899.com", true },
@@ -981,13 +988,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "8917818.net", true },
{ "8951889.com", true },
{ "8951889.net", true },
+ { "8989k3.com", true },
{ "8992088.com", true },
{ "8992088.net", true },
{ "8ack.de", true },
{ "8ackprotect.com", true },
{ "8da188.com", true },
{ "8da2017.com", true },
- { "8da2018.com", true },
{ "8da88.com", true },
{ "8da999.com", true },
{ "8dabet.com", true },
@@ -1011,8 +1018,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "912422.com", true },
{ "913422.com", true },
{ "914122.com", true },
+ { "918116.com", true },
{ "918gd.com", true },
- { "918yy.com", true },
{ "919422.com", true },
{ "91966.com", true },
{ "919945.com", true },
@@ -1069,6 +1076,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "9farm.com", true },
{ "9iwan.net", true },
{ "9jajuice.com", true },
+ { "9pkfz.com", true },
{ "9ss6.com", true },
{ "9tolife.be", true },
{ "9uelle.jp", true },
@@ -1081,19 +1089,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "a-1indianawaterproofing.com", true },
{ "a-allard.be", true },
{ "a-classinflatables.co.uk", true },
- { "a-intel.com", true },
{ "a-little-linux-box.at", true },
{ "a-msystems.com", true },
{ "a-oben.org", true },
{ "a-shafaat.ir", true },
{ "a-starbouncycastles.co.uk", true },
+ { "a0print.nl", true },
{ "a1bouncycastlehire.com", true },
{ "a1jumpandbounce.co.uk", true },
{ "a1moldsolutions.com", true },
{ "a1scuba.com", true },
{ "a1scubastore.com", true },
{ "a2a.net", true },
- { "a2c-co.net", true },
{ "a2nutrition.com.au", true },
{ "a3.pm", true },
{ "a4sound.com", true },
@@ -1107,7 +1114,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "aabanet.com.br", true },
{ "aaben-bank.dk", true },
{ "aabenbank.dk", true },
- { "aacfree.com", true },
{ "aagetransport.no", true },
{ "aalalbayt.com", true },
{ "aalalbayt.net", true },
@@ -1121,6 +1127,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "aaomidi.com", true },
{ "aapas.org.ar", true },
{ "aardvarksolutions.co.za", true },
+ { "aarkue.eu", true },
{ "aaron.xin", true },
{ "aaronhorler.com", true },
{ "aaronhorler.com.au", true },
@@ -1128,6 +1135,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "aaronroyle.com", true },
{ "aaronsilber.me", true },
{ "aatf.us", true },
+ { "aati.be", true },
{ "aavienna.com", true },
{ "abaapplianceservice.com", true },
{ "abacus-events.co.uk", true },
@@ -1135,7 +1143,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "abacustech.co.jp", true },
{ "abacustech.net", true },
{ "abacustech.org", true },
- { "abandonedmines.gov", true },
{ "abbadabbabouncycastles.co.uk", true },
{ "abbas.ch", true },
{ "abborsjo.fi", true },
@@ -1147,7 +1154,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "abc.li", true },
{ "abcbouncycastlessurrey.co.uk", true },
{ "abcbouncyfactory.co.uk", true },
- { "abcdef.be", true },
{ "abcheck.se", true },
{ "abckam.com", true },
{ "abcpartyhire.com", true },
@@ -1163,6 +1169,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "aberdeencastles.co.uk", true },
{ "aberdeenjudo.co.uk", true },
{ "abeus.com", true },
+ { "abhisharma.me", true },
{ "abi-2017.tk", true },
{ "abiapp.net", true },
{ "abibruce.co.uk", true },
@@ -1209,7 +1216,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "abolitionniste.com", true },
{ "abolizionista.com", true },
{ "abos.eu", true },
- { "abosav.com", true },
{ "abouncycastleman.co.uk", true },
{ "abouthrm.nl", true },
{ "aboutict.nl", true },
@@ -1231,6 +1237,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "abseits.org", true },
{ "absolem.cc", true },
{ "absolutehaitian.com", true },
+ { "absolutehosting.co.za", true },
{ "absolutelyinflatables.co.uk", true },
{ "absoluterush.net", true },
{ "absolutewaterproofingsolutions.com", true },
@@ -1251,13 +1258,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ac0g.dyndns.org", true },
{ "aca-creative.co.uk", true },
{ "academicexperts.us", true },
+ { "academichealthscience.net", true },
{ "academie-de-police.ch", true },
{ "academytv.com.au", true },
{ "acaeum.com", true },
{ "acampar.com.br", true },
{ "acara-yoga.de", true },
- { "acat.io", true },
{ "acbrussels-used.be", true },
+ { "accadoro.it", true },
{ "accbay.com", true },
{ "accelaway.com", true },
{ "acceleratenetworks.com", true },
@@ -1278,10 +1286,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "accordiondoor.com", true },
{ "accounts.firefox.com", true },
{ "accounts.google.com", true },
+ { "accpodcast.com", true },
{ "accredit.ly", true },
{ "accudraftpaintbooths.com", true },
{ "accuritconsulting.com", true },
{ "accuritpresence.com", true },
+ { "ace.media", true },
{ "ace.one", true },
{ "acealters.com", true },
{ "aceanswering.com", true },
@@ -1332,6 +1342,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "acoustique-tardy.com", true },
{ "acperu.ch", true },
{ "acquisition.gov", true },
+ { "acquistareviagragenericoitalia.net", true },
+ { "acraft.org", true },
+ { "acrealux.lu", true },
{ "acrepairgeorgetown.com", true },
{ "acrepairhutto.com", true },
{ "acrepairroundrocktx.com", true },
@@ -1362,18 +1375,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "active-tluszcz.pl", true },
{ "active.hu", false },
{ "activecare-monitor.com", true },
+ { "activeclearweb.com", true },
{ "activehire.co.uk", true },
{ "activeleisure.ie", true },
{ "activeworld.net", false },
- { "activistasconstructivos.org", true },
{ "activitesaintnicaise.org", true },
{ "activityeventhire.co.uk", true },
+ { "actom.cc", true },
{ "actors-cafe.net", true },
{ "actorsroom.com", true },
{ "actserv.co.ke", true },
- { "actu-film.com", true },
{ "acuica.co.uk", false },
{ "acul.me", true },
+ { "acupofsalt.tv", true },
{ "acus.gov", true },
{ "acwcerts.co.uk", true },
{ "acwi.gov", true },
@@ -1406,7 +1420,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "adamradocz.com", true },
{ "adams.dk", true },
{ "adamsbouncycastles.co.uk", true },
+ { "adamsfoundationrepair.com", true },
{ "adamstas.com", true },
+ { "adamwallington.co.uk", true },
{ "adamwilcox.org", true },
{ "adapt-elektronik.com", true },
{ "adapt.de", true },
@@ -1415,7 +1431,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "adaptivemechanics.edu.au", true },
{ "adawolfa.cz", true },
{ "adayinthelifeof.nl", true },
- { "adblock.ovh", true },
{ "adblockextreme.com", true },
{ "adblockextreme.net", true },
{ "adblockextreme.org", true },
@@ -1454,7 +1469,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "adlershop.ch", true },
{ "adm-sarov.ru", true },
{ "adme.co.il", true },
- { "admin-numerique.com", true },
{ "admin-serv.net", true },
{ "admin.fedoraproject.org", true },
{ "admin.google.com", true },
@@ -1465,11 +1479,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "admino.cz", true },
{ "adminwerk.com", true },
{ "adminwiki.fr", true },
- { "admirable.one", true },
{ "admody.com", true },
+ { "admongo.gov", true },
{ "adnanotoyedekparca.com", true },
{ "adnot.am", true },
{ "adnseguros.es", true },
+ { "adoniscabaret.co.uk", true },
{ "adonnante.com", true },
{ "adoptionlink.co.uk", true },
{ "adora-illustrations.fr", true },
@@ -1492,6 +1507,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "adrianmejias.com", true },
{ "adrien.vin", true },
{ "adrienkohlbecker.com", true },
+ { "adriennesmiles.com", true },
{ "adrinet.tk", true },
{ "adrup.com", true },
{ "adsbouncycastles.co.uk", true },
@@ -1499,10 +1515,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "adtgroup.com", true },
{ "adurra.com", true },
{ "aduvi.de", true },
+ { "advance.hr", true },
{ "advanced-scribes.com", true },
{ "advanced.info", true },
{ "advancedoneroofing.com", true },
- { "advancedplasticsurgerycenter.com", true },
{ "advancedprotectionkey.com", true },
{ "advancedprotectionsecuritykey.com", true },
{ "advancedweb.hu", true },
@@ -1559,6 +1575,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "aegrel.ee", true },
{ "aehe.us", true },
{ "aei.co.uk", true },
+ { "aelurus.com", true },
{ "aeon.co", true },
{ "aep-digital.com", true },
{ "aeradesign.com", true },
@@ -1568,6 +1585,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "aerisnetwork.com", true },
{ "aero-pioneer.com", true },
{ "aerobotz.com", true },
+ { "aerosimexperience.com", true },
{ "aertel.ie", true },
{ "aessencia.com.br", true },
{ "aestheticdr.org", true },
@@ -1587,12 +1605,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "afb24.de", true },
{ "afbeelding.im", true },
{ "afbeeldinguploaden.nl", true },
+ { "afeefzarapackages.com", true },
{ "affichagepub3.com", true },
{ "affiliatefeatures.com", true },
{ "affiliateroyale.com", true },
{ "affiliatetest.azurewebsites.net", true },
{ "affilie.de", true },
- { "affinity.vc", true },
{ "affinitysync.com", true },
{ "affissioni.roma.it", true },
{ "affittacamere.roma.it", true },
@@ -1607,6 +1625,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "afi-business-consulting.com", true },
{ "aficionados.com.br", true },
{ "afinadoronline.com.br", true },
+ { "afinaudio.com", true },
{ "aflamtorrent.com", true },
{ "aflfreebets.com", true },
{ "aflowershop.ca", true },
@@ -1623,6 +1642,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "afrikarl.de", true },
{ "afrodigital.uk", true },
{ "afs-asso.org", true },
+ { "aftab-alam.de", true },
{ "after.digital", true },
{ "afterhate.fr", true },
{ "afterskool.eu", true },
@@ -1636,8 +1656,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "agate.pw", true },
{ "agechecker.net", true },
{ "ageg.ca", true },
- { "agelesscitizen.com", true },
- { "agenbettingasia.com", true },
{ "agenceklic.com", true },
{ "agenciadeempregosdourados.com.br", true },
{ "agenciafiscal.pe", true },
@@ -1657,7 +1675,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "agilebits.com", true },
{ "agilebits.net", false },
{ "agilecraft.com", true },
- { "agileecommerce.com.br", true },
{ "agileui.com", true },
{ "agiley.se", true },
{ "agilizing.us", true },
@@ -1668,7 +1685,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "agiserv.fr", true },
{ "agliamici.it", true },
{ "agnesk.blog", true },
- { "agonswim.com", false },
{ "agoodmind.com", true },
{ "agoravox.fr", true },
{ "agoravox.it", true },
@@ -1694,7 +1710,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "agrekov.ru", true },
{ "agreor.com", true },
{ "agrichamber.com.ua", true },
- { "agricolo.ch", true },
{ "agridir.site", true },
{ "agrilinks.org", true },
{ "agrios.de", true },
@@ -1709,12 +1724,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "aheng.me", true },
{ "ahero4all.org", true },
{ "ahiru3.com", true },
- { "ahkubiak.ovh", true },
{ "ahlaejaba.com", true },
{ "ahmad.works", true },
{ "ahmadly.com", true },
{ "ahmedabadflowermall.com", true },
- { "ahmedcharles.com", true },
{ "ahmerjamilkhan.org", true },
{ "ahmetozer.org", true },
{ "ahosi.com", true },
@@ -1722,33 +1735,32 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ahoyconference.com", true },
{ "ahtuxpk.ru", true },
{ "ahughes03.com", true },
- { "ahwah.net", true },
{ "ahxxm.com", true },
{ "ai-english.jp", true },
{ "ai-soft.co.jp", true },
- { "ai1989.com", true },
{ "aia.de", true },
{ "aibaoyou.com", true },
{ "aibenzi.com", true },
- { "aicial.co.uk", true },
{ "aidanapple.com", true },
{ "aidanmontare.net", true },
- { "aide-admin.com", true },
{ "aide-valais.ch", true },
{ "aiden.link", true },
{ "aidhan.net", true },
{ "aids.gov", true },
{ "aie.de", true },
- { "aiesecarad.ro", true },
{ "aiforsocialmedia.com", true },
{ "aifriccampbell.com", true },
{ "aigcev.org", true },
{ "aigenpul.se", true },
+ { "aignermunich.jp", true },
{ "aiicy.org", true },
{ "aiida.se", true },
{ "aijsk.com", true },
{ "aikenpromotions.com", true },
+ { "aiki.de", true },
+ { "aiki.do", true },
{ "aikido-club-limburg.de", true },
+ { "aikido-kiel.de", true },
{ "aikido-linz.at", true },
{ "aikido-wels.at", true },
{ "aimeeandalec.com", true },
@@ -1756,10 +1768,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "aimgroup.co.tz", true },
{ "aimotive.com", true },
{ "aintevenmad.ch", true },
- { "aioboot.com", true },
{ "aiois.com", true },
{ "aipbarcelona.com", true },
- { "aiphyron.com", true },
{ "air-craftglass.com", true },
{ "air-shots.ch", true },
{ "air-we-go.co.uk", true },
@@ -1769,23 +1779,22 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "airborne-inflatables.co.uk", true },
{ "airclass.com", true },
{ "aircomms.com", true },
- { "airconsalberton.co.za", true },
{ "airconsboksburg.co.za", true },
{ "airconsfourways.co.za", true },
{ "airconsmidrand.co.za", true },
{ "airconssandton.co.za", true },
{ "airductclean.com", false },
+ { "airductcleaning-fresno.com", true },
{ "airdur.eu", true },
{ "aireaseleaks.org", true },
- { "airedaleterrier.com.br", true },
{ "airetvie.com", true },
- { "airfax.io", true },
{ "airhart.me", true },
{ "airhelp.com", true },
{ "airhorn.de", true },
{ "airi-tabei.com", true },
{ "airicy.com", true },
{ "airikai.com", true },
+ { "airlinesettlement.com", true },
{ "airmail.cc", true },
{ "airmaxinflatables.com", true },
{ "airnow.gov", true },
@@ -1802,7 +1811,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "airwegobouncycastles.co.uk", true },
{ "airwolfthemes.com", true },
{ "ais.fashion", true },
+ { "aisance-co.com", true },
{ "aisi316l.net", true },
+ { "aisr.nl", true },
{ "aistockcharts.com", true },
{ "ait.com.ar", true },
{ "aiticon.com", true },
@@ -1811,7 +1822,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "aivd.lol", true },
{ "aivene.com", true },
{ "aiwdirect.com", true },
- { "aixvox.com", true },
+ { "aixvox.com", false },
{ "aixxe.net", true },
{ "aizxxs.com", true },
{ "aizxxs.net", true },
@@ -1830,6 +1841,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ajnasz.hu", true },
{ "ajsb85.com", true },
{ "ak-varazdin.hr", true },
+ { "ak-webit.de", true },
+ { "aka.ms", true },
{ "akachanikuji.com", true },
{ "akademeia.moe", true },
{ "akalashnikov.ru", true },
@@ -1837,11 +1850,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "akaoma.com", true },
{ "akasha.world", true },
{ "akazakov.info", true },
- { "akcounselingservices.com", true },
{ "akdusekbudil.cz", true },
{ "akelius.de", false },
{ "akfoundationindia.com", true },
- { "akihiro.xyz", true },
+ { "akhealthconnection.com", true },
{ "akihito.com", true },
{ "akijo.de", true },
{ "akita-boutique.com", true },
@@ -1894,15 +1906,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "alanya.law", true },
{ "alaricfavier.eu", false },
{ "alarmcomplete.co.uk", true },
+ { "alarna.de", true },
{ "alasdelalma.com.co", true },
+ { "alaskajewelry.com", true },
{ "alastairs-place.net", true },
- { "alaundeil.xyz", true },
{ "alaxyjewellers.co.za", true },
{ "alb-flirt.de", true },
{ "albanboye.info", true },
+ { "albanesi.it", true },
{ "albbounce.co.uk", true },
{ "albersdruck.de", true },
{ "albertathome.org", true },
+ { "albertbogdanowicz.pl", true },
{ "albertinum-goettingen.de", true },
{ "albion2.org", true },
{ "alboweb.nl", true },
@@ -1910,9 +1925,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "alca31.com", true },
{ "alcatelonetouch.us", true },
{ "alchimic.ch", true },
+ { "alcnutrition.com", true },
{ "alco-united.com", true },
{ "alcoholapi.com", true },
- { "alcorao.org", true },
{ "aldes.co.za", true },
{ "aldien.com.br", true },
{ "aldo-vandini.de", true },
@@ -1922,7 +1937,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "alecpap.com", true },
{ "alecpapierniak.com", true },
{ "alecrust.com", true },
- { "aleksejjocic.tk", true },
{ "aleksib.fi", true },
{ "alela.fr", true },
{ "alerbon.net", true },
@@ -1939,6 +1953,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "alexanderb.info", true },
{ "alexandermuetzel.de", true },
{ "alexanderneng.de", true },
+ { "alexandernorth.ch", true },
{ "alexanderschimpf.de", true },
{ "alexanderzinn.com", true },
{ "alexandra-schulze.de", true },
@@ -1963,7 +1978,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "alexismeza.nl", true },
{ "alexkott.com", true },
{ "alexlouden.com", true },
- { "alexmak.net", true },
{ "alexmerkel.com", true },
{ "alexmerkel.me", true },
{ "alexmerkel.xyz", true },
@@ -1985,11 +1999,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "alexwardweb.com", true },
{ "alexyang.me", true },
{ "alfa-tech.su", true },
- { "alfaperfumes.com.br", true },
{ "alghanimcatering.com", true },
{ "algoentremanos.com", true },
{ "algofactory.de", true },
{ "algolia.com", true },
+ { "algorithmofsuccess.com", true },
+ { "algoritmus-uspechu.cz", true },
{ "aliacraft.net", true },
{ "aliantsoft.pl", true },
{ "aliaswp.com", true },
@@ -1997,10 +2012,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "alibip.de", true },
{ "alice-noutore.com", true },
{ "alice.tw", true },
+ { "alicemaywebdesign.com.au", true },
{ "alicestudio.it", true },
{ "alicetone.net", true },
{ "alicialab.org", true },
- { "alien.bz", true },
{ "alienation.biz", true },
{ "alienflight.com", true },
{ "alienslab.net", true },
@@ -2008,7 +2023,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "alignrs.com", true },
{ "aliim.gdn", true },
{ "alijammusic.com", true },
- { "alikulov.me", true },
{ "alinasmusicstudio.com", true },
{ "alinode.com", true },
{ "alisonisrealestate.com", true },
@@ -2034,7 +2048,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "allactioneventhire.co.uk", true },
{ "allamericanmuslim.com", true },
{ "allamericatrans.com", true },
- { "allangirvan.net", true },
{ "allarmi.roma.it", true },
{ "allbenjoy.de", true },
{ "allbounceandplay.co.uk", true },
@@ -2051,7 +2064,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "alldigitalsolutions.com", true },
{ "alle.bg", true },
{ "allemobieleproviders.nl", true },
- { "allenosgood.com", true },
{ "allenscaravans.co.uk", true },
{ "allensun.org", true },
{ "allerbestefreunde.de", true },
@@ -2070,6 +2082,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "allinone-ranking150.com", true },
{ "allis.studio", true },
{ "alljamin.com", true },
+ { "allladyboys.com", true },
{ "allmebel.ru", true },
{ "allmend-ru.de", true },
{ "allns.fr", true },
@@ -2084,7 +2097,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "allproptonline.com", true },
{ "allroundpvp.net", true },
{ "allsearch.io", true },
- { "allseasons-cleaning.co.uk", true },
{ "allshousedesigns.com", true },
{ "allstakesupply.com.au", true },
{ "allstarautokiaparts.com", true },
@@ -2092,6 +2104,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "allstarquilts.com", true },
{ "allsync.com", true },
{ "allsync.nl", true },
+ { "allthecryptonews.com", true },
{ "allthethings.co.nz", true },
{ "allthings.me", true },
{ "allthingsblogging.com", true },
@@ -2100,9 +2113,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "alltubedownload.net", true },
{ "allurescarves.com", true },
{ "alluvion.studio", true },
- { "allvips.ru", true },
{ "almaatlantica.com", true },
- { "almagalla.com", true },
{ "almavios.com", true },
{ "aloesoluciones.com.ar", true },
{ "alohapartyevents.co.uk", true },
@@ -2146,17 +2157,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "alpinetrek.co.uk", true },
{ "alpiniste.fr", true },
{ "alqassam.net", true },
+ { "alquiaga.com", true },
{ "alrait.com", true },
{ "alroniks.com", true },
{ "als-japan.com", true },
{ "alstroemeria.org", true },
- { "alt-tab-design.com", true },
{ "alt-three.com", true },
{ "alt.org", true },
{ "altaplana.be", true },
{ "altedirect.com", true },
{ "alter-news.fr", true },
- { "alterbaum.net", true },
{ "altered.network", true },
{ "alternador.com.br", true },
{ "alternative.bike", true },
@@ -2167,7 +2177,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "altes-sportamt.de", true },
{ "altesses.eu", true },
{ "altestore.com", true },
- { "altitudemoversdenver.com", true },
{ "altkremsmuensterer.at", true },
{ "altmaestrat.es", true },
{ "altoa.cz", true },
@@ -2183,11 +2192,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "altunbas.info", true },
{ "alumni-kusa.jp", true },
{ "aluoblog.pw", true },
+ { "aluoblog.top", false },
{ "alupferd.de", true },
{ "aluroof.eu", true },
{ "alvcs.com", true },
{ "alviano.com", true },
{ "alvicom.hu", true },
+ { "alvis-audio.com", true },
{ "alvn.ga", true },
{ "alvosec.com", true },
{ "alwaysdry.com.au", true },
@@ -2203,10 +2214,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "alza.sk", true },
{ "alzashop.com", true },
{ "alzonaprinting.com", true },
+ { "am-dd.com", true },
{ "am2s.fr", true },
{ "am3.se", true },
{ "ama.ne.jp", true },
- { "amadilo.de", false },
+ { "amadoraslindas.com", true },
{ "amadvice.com", true },
{ "amaforro.com", true },
{ "amagdic.com", true },
@@ -2219,13 +2231,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "amalfitabula.it", true },
{ "amandasage.ca", true },
{ "amani-kinderdorf.de", true },
- { "amaranthus.com.ph", true },
{ "amaresq.com", true },
- { "amartinz.at", true },
+ { "amateri.com", true },
{ "amateurvoicetalent.com", true },
{ "amato.tk", true },
{ "amatsuka.com", true },
- { "amatzen.dk", true },
{ "amauf.de", true },
{ "amazili-communication.com", true },
{ "amazing-castles.co.uk", true },
@@ -2238,12 +2248,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ambiente.one", true },
{ "ambiq.nl", true },
{ "ambouncyhire.com", true },
+ { "amcangroup.com", true },
{ "amcchemical.com", true },
{ "amcfirst.com", true },
{ "amchainitiative.org", true },
{ "amcs.website", true },
{ "amdouglas.com", true },
- { "amechancez.site", true },
+ { "amechancez.work", true },
{ "amedtest.org", true },
{ "ameego.com", true },
{ "ameego.it", true },
@@ -2297,8 +2308,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "amministratorecondominio.roma.it", true },
{ "amnesty.org.au", true },
{ "amnesy.fr", true },
- { "amoozesh98.com", true },
- { "amoozesh98.ir", true },
{ "amorgos-aegialis.com", true },
{ "amorim.ca", true },
{ "amosng.com", true },
@@ -2307,12 +2316,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "amphibo.ly", true },
{ "ampproject.com", true },
{ "ampproject.org", true },
+ { "amrcaustin.com", true },
+ { "amrcla.com", true },
{ "ams.co.rs", true },
- { "amsportuk.com", true },
{ "amsterdamian.com", true },
{ "amuq.net", true },
{ "amuraimpianti.it", true },
- { "amv-crm.ru", true },
+ { "amyfoundhermann.com", true },
{ "amyharrisonline.com", true },
{ "amyrussellhair.com", true },
{ "amyyeung.com", true },
@@ -2320,35 +2330,27 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "anacreon.de", true },
{ "anadiyogacentre.com", true },
{ "anadoluefessk.org", true },
- { "anaethelion.fr", true },
{ "anaiscoachpersonal.es", true },
{ "anaisypirueta.es", true },
{ "anajianu.ro", true },
- { "anakros.me", false },
+ { "analangelsteen.com", true },
{ "analbleachingguide.com", true },
{ "analgesia.net", true },
{ "analisilaica.it", true },
{ "analogist.net", true },
+ { "analteengirls.net", true },
{ "analyticsinmotion.com", true },
- { "analyticum.at", true },
- { "analyticum.com", true },
- { "analyticum.de", true },
- { "analyticum.eu", true },
- { "analyticum.net", true },
{ "ananas.gq", true },
{ "ananke.io", true },
{ "anankecosmetics.com", true },
{ "anantshri.info", true },
+ { "ananyoo.com", true },
{ "anarchistischegroepnijmegen.nl", false },
{ "anassiriphotography.com", false },
{ "anastasia-shamara.ru", true },
- { "anastasiafond.com", true },
- { "ancarda.net", true },
{ "ancestramil.fr", true },
{ "anchev.net", true },
{ "anchovy.nz", false },
- { "ancient-gates.de", true },
- { "ancientcraft.eu", true },
{ "ancientnorth.com", true },
{ "ancientnorth.nl", true },
{ "ancolies-andre.com", true },
@@ -2358,7 +2360,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "andalusierondreizen.nl", true },
{ "andariegocusco.com", true },
{ "andarpersassi.it", true },
- { "andbraiz.com", true },
{ "andel.info", false },
{ "anders.hamburg", true },
{ "anderskp.dk", true },
@@ -2368,6 +2369,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "andiscyber.space", true },
{ "anditi.com", true },
{ "andoms.fi", true },
+ { "andre-ballensiefen.de", true },
{ "andre-lategan.com", true },
{ "andre-otto.com", true },
{ "andrea-kiaora.de", true },
@@ -2375,8 +2377,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "andrea-wirthensohn.at", true },
{ "andreaboero.it", true },
{ "andreagourmet.it", true },
+ { "andreahruby.it", true },
{ "andreamcnett.com", true },
- { "andreasbasurto.com", true },
{ "andreaseracleous.com", true },
{ "andreasfeusi.ch", true },
{ "andreaskrasa.com", true },
@@ -2391,10 +2393,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "andrepicard.de", true },
{ "andrespaz.com", true },
{ "andreundnina.de", true },
- { "andrewdavidwong.com", true },
+ { "andrewbdesign.com", true },
{ "andrewdaws.io", true },
{ "andrewensley.com", true },
- { "andrewhowden.com", true },
{ "andrewimeson.com", true },
{ "andrewin.ru", true },
{ "andrewmichaud.com", true },
@@ -2414,7 +2415,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "androidhry.cz", true },
{ "androidkatalog.cz", true },
{ "androidnovinky.cz", true },
- { "androidsphone.com", true },
+ { "androidservicetool.com", true },
{ "androidtamer.com", true },
{ "androidtelefony.cz", true },
{ "androidzone.me", true },
@@ -2430,7 +2431,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "andyc.cc", true },
{ "andycloud.dynu.net", true },
{ "andycrockett.io", true },
- { "andymelichar.com", true },
{ "andymoore.info", true },
{ "andys-place.co.uk", true },
{ "andyt.eu", true },
@@ -2439,12 +2439,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "anedot.com", true },
{ "anedot.space", true },
{ "anedot.xyz", true },
+ { "anegabawa.com", true },
{ "anetaben.nl", true },
{ "anextraordinaryday.net", true },
{ "ange-de-bonheur444.com", true },
{ "angehardy.com", true },
{ "angel-body.com", true },
- { "angelic47.com", true },
+ { "angelesydemonios.es", true },
+ { "angelicare.co.uk", true },
{ "angelinahair.com", true },
{ "angelremigene.com", true },
{ "angelsgirl.eu.org", true },
@@ -2462,20 +2464,23 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "angrut.com", true },
{ "angry.im", true },
{ "angrysnarl.com", true },
- { "angryteeth.net", false },
+ { "angryteeth.net", true },
{ "anguiao.com", true },
{ "angularjs.org", false },
{ "angusmak.com", true },
{ "anhaffen.lu", true },
+ { "ani-man.de", true },
{ "aniaimichal.eu", true },
{ "aniforprez.net", true },
{ "anim.ee", true },
{ "animacurse.moe", true },
{ "animaemundi.be", true },
{ "animal-liberation.com", true },
+ { "animal-nature-human.com", true },
{ "animal-rights.com", true },
{ "animalistic.io", true },
{ "animaltesting.fr", true },
+ { "animan.ca", true },
{ "animationsmusicales.ch", true },
{ "anime-culture.com", true },
{ "anime-rg.com", true },
@@ -2484,9 +2489,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "anime1.me", true },
{ "anime1.moe", true },
{ "anime1.pw", true },
- { "anime1.top", true },
{ "animeai.com", true },
{ "animefluxxx.com", true },
+ { "animesharp.com", true },
{ "animetriad.com", true },
{ "animojis.es", true },
{ "animorphsfanforum.com", true },
@@ -2530,7 +2535,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "annonasoftware.com", true },
{ "annotate.software", true },
{ "annoyingasfuk.com", true },
- { "annrusnak.com", true },
{ "annuaire-jcb.com", true },
{ "annuaire-photographe.fr", false },
{ "anohana.org", true },
@@ -2539,7 +2543,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "anoncom.net", true },
{ "anoneko.com", true },
{ "anongoth.pl", true },
- { "anonrea.ch", true },
{ "anons.fr", true },
{ "anonukradio.org", true },
{ "anonym-surfen.de", true },
@@ -2549,17 +2552,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "anotherchef.com", true },
{ "anotherfatgeek.net", true },
{ "anowicki.pl", false },
- { "anoxinon.de", true },
+ { "anoxinon.de", false },
{ "ans-delft.nl", true },
{ "ans-ge.ch", true },
{ "ansas.eu", true },
{ "ansas.net", true },
{ "ansdell.net", true },
- { "anseo.ninja", true },
{ "ansermet.net", true },
{ "ansgar-sonntag.de", true },
{ "ansgarsonntag.de", true },
- { "anshuman-chatterjee.com", false },
+ { "ansibeast.net", true },
{ "ansichtssache.at", true },
{ "ansogning-sg.dk", true },
{ "anstaskforce.gov", true },
@@ -2567,10 +2569,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "antama.nl", true },
{ "antani.cloud", true },
{ "antarcti.co", true },
+ { "antarees.net", true },
{ "antarespc.com", true },
{ "antcas.com", true },
- { "antecim.fr", true },
{ "antennista.catania.it", true },
+ { "antennista.milano.it", true },
{ "antennista.pavia.it", true },
{ "antennista.roma.it", true },
{ "antennisti.milano.it", true },
@@ -2583,20 +2586,20 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "anthonyaires.com", true },
{ "anthonycarbonaro.com", true },
{ "anthonygaidot.fr", true },
- { "anthonyloop.com", true },
{ "anthropoid.ca", true },
{ "anti-bible.com", true },
{ "anti-radar.org", true },
{ "antibioticshome.com", true },
{ "anticopyright.com", true },
- { "antifraud.net.ru", true },
{ "antihype.space", true },
{ "antik-trodelmarkt.de", true },
{ "antikvariat.ru", true },
+ { "antikvarius.ro", true },
{ "antiled.by", true },
{ "antimine.me", true },
{ "antipolygraph.org", true },
{ "antique-pedalcars.ch", true },
+ { "antirayapmalang.com", true },
{ "antirepressionbayarea.com", true },
{ "antispeciesism.com", true },
{ "antispeciesist.com", true },
@@ -2608,6 +2611,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "antonchen.com", true },
{ "antonellabb.eu", true },
{ "antonin.one", true },
+ { "antonio-gartenbau.de", true },
{ "antonjuulnaber.dk", true },
{ "antons.io", true },
{ "antota.lt", true },
@@ -2631,7 +2635,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "anzeiger.ag", true },
{ "ao-dev.com", true },
{ "ao2.it", true },
- { "aobogo.com", true },
+ { "aoaprograms.net", true },
{ "aoku3d.com", true },
{ "aomonk.com", true },
{ "aopedeure.nl", true },
@@ -2656,11 +2660,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "apdx.com", true },
{ "apef.ch", true },
{ "apercloud.es", true },
+ { "aperim.com", true },
{ "apertis.org", true },
{ "aperturesciencelabs.de", true },
{ "apervita.net", true },
{ "apexitsolutions.ca", true },
{ "apfelcholest.de", true },
+ { "apgw.jp", true },
{ "aphelionentertainment.com", true },
{ "aphotrax.eu", true },
{ "api-connect.com", true },
@@ -2687,6 +2693,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "apis.google.com", true },
{ "apis.moe", true },
{ "apisyouwonthate.com", true },
+ { "apivia.fr", true },
{ "apk.li", true },
{ "apk4fun.com", true },
{ "aplikaceproandroid.cz", true },
@@ -2705,6 +2712,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "aposke.com", true },
{ "aposke.net", true },
{ "aposke.org", true },
+ { "apotheke-ch.org", true },
{ "apothes.is", true },
{ "app-at.work", true },
{ "app.lookout.com", true },
@@ -2747,6 +2755,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "apponic.com", true },
{ "apponline.com", true },
{ "apprank.in", true },
+ { "apprenticeship.gov", true },
+ { "apprenticeships.gov", true },
{ "approbo.com", true },
{ "approvedtreecare.com", true },
{ "apps.co", true },
@@ -2768,15 +2778,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "aprefix.com", true },
{ "apretatuercas.es", true },
{ "aprikaner.de", true },
+ { "aprogend.com.br", true },
{ "aproposcomputing.com", true },
{ "aprovpn.com", true },
{ "aprr.org", true },
{ "aprsdroid.org", true },
{ "aprz.de", true },
{ "apstudynotes.org", true },
- { "aptitude9.com", true },
{ "apu-board.de", true },
{ "apv-ollon.ch", true },
+ { "aqilacademy.com.au", true },
{ "aqsiq.net", true },
{ "aqua-fitness-nacht.de", true },
{ "aqua-fotowelt.de", true },
@@ -2798,8 +2809,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "aquitainebrasserie.com.au", true },
{ "aquitroc.com", true },
{ "ar-informatique.ch", true },
- { "ar.al", true },
{ "arab.dating", true },
+ { "arabsexi.info", true },
{ "arachina.com", true },
{ "arados.de", true },
{ "arai21.net", true },
@@ -2832,8 +2843,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "archivesdelavieordinaire.ch", true },
{ "archlinux.de", true },
{ "archlinux.org", true },
- { "archmediamarketing.com", true },
- { "archsec.info", true },
{ "arcobalabs.ca", true },
{ "arcridge.ca", true },
{ "arctic.gov", true },
@@ -2847,6 +2856,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "areaclienti.net", true },
{ "areafiftylan.nl", true },
{ "areatrend.com", true },
+ { "arekatieandchrisgettingmarried.com", true },
+ { "arekatieandchrisgettingmarried.today", true },
+ { "arekatieandchrismarriedyet.com", true },
{ "arendburgers.nl", true },
{ "arenlor.com", true },
{ "arenlor.info", true },
@@ -2856,11 +2868,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "arethsu.se", true },
{ "arfad.ch", true },
{ "arg.zone", true },
- { "argama-nature.com", true },
{ "arganaderm.ch", true },
{ "argb.de", true },
{ "argekultur.at", true },
- { "argh.io", true },
{ "argot.com", true },
{ "argovpay.com", true },
{ "ariaartgallery.com", true },
@@ -2896,6 +2906,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "arlen.tv", true },
{ "arlenarmageddon.com", true },
{ "arlet.click", true },
+ { "arm-host.com", true },
{ "armadaquadrat.com", true },
{ "armandsdiscount.com", true },
{ "armansfinejewellery.com", true },
@@ -2913,6 +2924,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "armyprodej.cz", true },
{ "arnaudb.net", true },
{ "arnaudfeld.de", true },
+ { "arnaudminable.net", true },
{ "arniescastles.co.uk", true },
{ "arno-klein.de", true },
{ "arno-klein.eu", true },
@@ -2957,12 +2969,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "arteaga.xyz", true },
{ "artecat.ch", true },
{ "artedellavetrina.it", true },
+ { "artedona.com", true },
{ "artefakt.es", true },
+ { "artefeita.com.br", true },
{ "arteinstudio.it", true },
{ "artelt.com", true },
{ "artemis.re", true },
{ "arterienundvenen.ch", true },
- { "arteseideias.com.pt", true },
{ "arteshow.ch", true },
{ "artetrama.com", false },
{ "artforum.sk", true },
@@ -2970,7 +2983,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "arthermitage.org", true },
{ "arthur.cn", true },
{ "arthurlaw.ca", true },
- { "artificial.army", true },
{ "artik.cloud", true },
{ "artimpact.ch", true },
{ "artioml.net", true },
@@ -2978,6 +2990,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "artisans-libres.com", true },
{ "artisansoftaste.com", true },
{ "artistagenda.com", true },
+ { "artistrunwebsite.com", true },
{ "artlantis.nl", true },
{ "artleading.ru", true },
{ "artlifeisgood.com", true },
@@ -2988,7 +3001,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "artmarketingnews.com", true },
{ "artmaxi.eu", true },
{ "artmoney.com", true },
- { "arto.bg", true },
{ "artofmonitoring.com", false },
{ "artofwhere.com", true },
{ "artratio.net", true },
@@ -2997,8 +3009,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "arts.gov", true },
{ "artschmidtoptical.com", true },
{ "artspac.es", true },
- { "artstopinc.com", true },
- { "arturkohut.com", true },
{ "arturrossa.de", true },
{ "arturszalak.com", true },
{ "artweby.cz", true },
@@ -3008,9 +3018,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "arveron.ch", true },
{ "arvid.io", true },
{ "arvindhariharan.com", true },
- { "arvindhariharan.me", true },
{ "arvutiladu.ee", true },
{ "arw.me", true },
+ { "arxell.com", true },
{ "aryan-nation.com", true },
{ "aryasenna.net", true },
{ "arzid.com", true },
@@ -3025,10 +3035,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "asanger.biz", true },
{ "asato-jewelry.com", true },
{ "asbito.de", true },
+ { "ascamso.com", true },
+ { "ascendprime.com", true },
{ "ascension.run", true },
{ "ascensori.biz", true },
{ "ascgathering.com", true },
{ "ascii.moe", true },
+ { "asciiwwdc.com", true },
{ "asd.gov.au", true },
{ "asdyx.de", true },
{ "asec01.net", true },
@@ -3043,13 +3056,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ashd3.goip.de", true },
{ "ashlocklawgroup.com", true },
{ "ashmportfolio.com", true },
+ { "ashutoshmishra.org", true },
{ "asia-gazette.com", true },
{ "asia-global-risk.com", true },
{ "asia.dating", true },
{ "asiaheavens.com", true },
{ "asialeonding.at", true },
{ "asian-industry.eu", true },
- { "asianbet77.co", true },
{ "asianodor.com", true },
{ "asianshops.net", true },
{ "asianspa.co.uk", true },
@@ -3058,19 +3071,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "asile-colis.fr", true },
{ "asinetasima.com", true },
{ "asisee.photography", true },
- { "ask.pe", true },
{ "ask1.org", true },
{ "askcaisse.com", true },
{ "askizzy.org.au", true },
{ "askkaren.gov", true },
- { "askmagicconch.com", false },
{ "askme24.de", true },
{ "askv6.net", true },
{ "askvg.com", true },
{ "askwhy.cz", true },
{ "askwhy.eu", true },
{ "aslinfinity.com", true },
- { "asm-x.com", false },
{ "asmbsurvey.com", true },
{ "asmdz.com", true },
{ "asmik-armenie.com", true },
@@ -3090,7 +3100,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "asr.rocks", true },
{ "asr.solar", true },
{ "asra.gr", true },
- { "asryflorist.com", true },
{ "asseenfromthesidecar.org", true },
{ "assemble-together.org", true },
{ "assempsaibiza.com", true },
@@ -3111,14 +3120,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "assumptionpj.org", true },
{ "astal.rs", true },
{ "astarbouncycastles.co.uk", true },
+ { "astarforu.com", true },
{ "astarmathsandphysics.com", true },
{ "astec-informatica.com", true },
{ "astengox.com", true },
{ "astenotarili.online", true },
{ "astenretail.com", true },
{ "astral.org.pl", true },
+ { "astrology42.com", true },
{ "astroscopy.ch", true },
- { "astrosnail.pt.eu.org", true },
{ "astrovandalistas.cc", true },
{ "astural.org", true },
{ "astutikhonda.com", true },
@@ -3131,7 +3141,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "asvsa.ch", true },
{ "asws.nl", true },
{ "asystent-dzierzawy.pl", true },
- { "at-one.ca", true },
{ "at.search.yahoo.com", false },
{ "atac.no", true },
{ "atacadocervejeiro.com.br", true },
@@ -3159,6 +3168,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ateliers-veronese-nantes.fr", true },
{ "atelierssud.ch", true },
{ "atelierssud.swiss", true },
+ { "atencionbimbo.com", false },
+ { "atendimentodelta.com.br", true },
{ "atg.soy", true },
{ "atgoetschel.ch", true },
{ "atgroup.gr", true },
@@ -3172,6 +3183,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "atheoryofchange.com", true },
{ "atherosense.ga", true },
{ "athlin.de", true },
+ { "atigerseye.com", true },
{ "atimbertownservices.com", true },
{ "atishchenko.com", true },
{ "atisoft.biz", true },
@@ -3189,6 +3201,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "atlantichomes.com.au", true },
{ "atlantis-kh.noip.me", true },
{ "atlantischild.hu", true },
+ { "atlantishq.de", true },
{ "atlantiswaterproofing.com", true },
{ "atlas.co", true },
{ "atlaschiropractic.org", true },
@@ -3212,6 +3225,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "atomism.com", true },
{ "atorcidabrasileira.com.br", true },
{ "atplonline.co", true },
+ { "atpnutrition.com", true },
{ "atraining.ru", true },
{ "atraverscugy.ch", true },
{ "atrevillot.com", true },
@@ -3221,6 +3235,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "atte.fi", true },
{ "attendantdesign.com", true },
{ "attendu.cz", true },
+ { "attention.horse", true },
+ { "attilagyorffy.com", true },
{ "attilavandervelde.nl", true },
{ "attinderdhillon.com", true },
{ "attitudes-bureaux.fr", true },
@@ -3248,7 +3264,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "audialbuquerqueparts.com", true },
{ "audiblox.co.za", true },
{ "audio-detector.com", true },
+ { "audiobookstudio.com", true },
{ "audiolibri.org", true },
+ { "audiolot.com", true },
{ "audion.hr", true },
{ "audioonly.stream", true },
{ "audiophile.ch", true },
@@ -3264,7 +3282,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "auditsquare.com", true },
{ "auerbach-verlag.de", true },
{ "auf-feindgebiet.de", true },
- { "aufprise.de", true },
{ "augaware.org", true },
{ "augen-seite.de", true },
{ "augiero.it", true },
@@ -3277,6 +3294,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "augustiner-kantorei.de", true },
{ "aukaraoke.su", true },
{ "aulaschrank.gq", true },
+ { "aulo.in", false },
{ "aumilieudumonde.gf", true },
{ "aunali1.com", true },
{ "auntie-eileens.com.au", true },
@@ -3293,22 +3311,22 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "aurosa.cz", true },
{ "auroware.com", true },
{ "aus-ryugaku.info", true },
- { "auskunftsbegehren.at", true },
{ "ausmwoid.de", true },
{ "aussiefunadvisor.com", true },
{ "aussieservicedown.com", true },
{ "aussiestoresonline.com", true },
{ "austin-pearce.com", true },
+ { "austin-security-cameras.com", true },
{ "austincardiac.com", true },
{ "austinheap.com", true },
{ "austinuniversityhouse.com", true },
{ "australian.dating", true },
{ "australianarmedforces.org", true },
- { "australianfreebets.com.au", true },
{ "australianimmigrationadvisors.com.au", true },
{ "australien-tipps.info", true },
{ "austromorph.space", true },
{ "auszeit-lanzarote.com", true },
+ { "auszeit-walsrode.de", true },
{ "auszeit.bio", true },
{ "auth.adult", true },
{ "authinfo-bestellen.de", true },
@@ -3316,11 +3334,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "author24.biz", true },
{ "authoritysolutions.com", true },
{ "authorsguild.in", true },
- { "autism-osaka.org", true },
+ { "autimatisering.nl", true },
{ "auto-anleitung.de", true },
{ "auto-motor-i-sport.pl", true },
{ "auto-plus.tn", true },
{ "auto-spurgo.com", true },
+ { "auto.nl", true },
{ "autoauctionsohio.com", true },
{ "autoauctionsvirginia.com", true },
{ "autobedrijfgarant.nl", true },
@@ -3333,11 +3352,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "autocrypt.org", true },
{ "autod.hu", true },
{ "autodalmacija.com", true },
- { "autoecoledumontblanc.com", true },
{ "autoentrepreneurinfo.com", true },
{ "autoepc.ro", true },
{ "autoinsurancehavasu.com", true },
{ "autokovrik-diskont.ru", true },
+ { "autoledky.sk", true },
{ "automaan.nl", true },
{ "automacity.com", true },
{ "automatethis.com.au", true },
@@ -3350,9 +3369,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "autoparts.im", true },
{ "autoparts.sh", true },
{ "autoparts.wf", true },
+ { "autoprice.info", true },
{ "autorando.com", true },
+ { "autoschadeschreuder.nl", true },
{ "autoscuola.roma.it", true },
{ "autoshinka72.ru", true },
+ { "autoshopsolutions.com", true },
{ "autoshun.org", true },
{ "autoskola.hr", true },
{ "autoskole.hr", true },
@@ -3363,10 +3385,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "autoterminus-used.be", true },
{ "autoverzekeringafsluiten.com", true },
{ "autowerkstatt-puchheim.de", true },
+ { "autozane.com", true },
{ "autres-talents.fr", true },
+ { "auux.com", true },
{ "auvernet.org", true },
{ "aux-arts-de-la-table.com", true },
{ "auxquatrevents.ch", true },
+ { "av-yummy.com", true },
+ { "av01.tv", true },
{ "av0ndale.de", true },
{ "ava-creative.de", false },
{ "ava-software.at", true },
@@ -3374,7 +3400,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "avabouncehire.co.uk", true },
{ "avacariu.me", true },
{ "availablecastles.com", true },
- { "avalon-island.ru", true },
{ "avalon-rpg.com", true },
{ "avalon-studios.de", true },
{ "avanet.ch", true },
@@ -3391,6 +3416,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "avedesk.org", false },
{ "aventurische-allianz.de", true },
{ "avenueeyecare.com", true },
+ { "avepol.cz", true },
+ { "avepol.eu", true },
{ "averageinspired.com", true },
{ "averam.net", true },
{ "averen.co.uk", true },
@@ -3402,9 +3429,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "aviationstrategy.aero", true },
{ "avid.blue", true },
{ "avietech.com", true },
- { "avitres.com", true },
{ "aviv.nyc", true },
{ "avlhostel.com", true },
+ { "avmemo.com", true },
+ { "avmoo.com", true },
{ "avnet.ws", true },
{ "avocadooo.stream", true },
{ "avocatbeziau.com", true },
@@ -3413,7 +3441,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "avova.de", true },
{ "avpres.net", true },
{ "avptp.org", true },
- { "avqueen.cn", false },
+ { "avqueen.cn", true },
{ "avsox.com", true },
{ "avticket.ru", false },
{ "avtoforex.ru", true },
@@ -3426,6 +3454,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "awaresec.no", true },
{ "awaro.net", true },
{ "awbouncycastlehire.com", true },
+ { "awccanadianpharmacy.com", true },
{ "awen.me", true },
{ "awesomebouncycastles.co.uk", true },
{ "awesomesit.es", true },
@@ -3439,11 +3468,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "awsome-books.co.uk", true },
{ "awxg.com", true },
{ "ax25.org", true },
- { "axa-middleeast.com", true },
{ "axchap.ir", true },
{ "axelname.ru", true },
{ "axelteichmann.net", true },
- { "axem.co.jp", true },
{ "axiomer.com", true },
{ "axiomer.es", true },
{ "axiomer.eu", true },
@@ -3454,6 +3481,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "axolotlfarm.org", true },
{ "axonholdingse.eu", true },
{ "axrec.de", true },
+ { "axtudo.com", true },
{ "axtux.tk", true },
{ "ayanomimi.com", true },
{ "aycomba.de", true },
@@ -3462,6 +3490,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "aykutcevik.com", true },
{ "aylak.com", true },
{ "aylesburycastlehire.co.uk", true },
+ { "aymerick.fr", true },
{ "aymericlagier.com", true },
{ "ayon.group", true },
{ "ayothemes.com", true },
@@ -3469,13 +3498,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ayrshirebouncycastlehire.co.uk", true },
{ "ayumindev.net", true },
{ "ayurveda-mantry.com", true },
- { "az-moga.bg", true },
- { "az-vinyl-boden.de", true },
{ "az.search.yahoo.com", false },
{ "azadliq.info", true },
{ "azazy.net", false },
{ "azgfd.com", true },
- { "azia.info", true },
{ "azimut.fr", true },
{ "azlk-team.ru", true },
{ "azort.com", true },
@@ -3493,7 +3519,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "b-b-law.com", true },
{ "b-boom.nl", true },
{ "b-cyclesshop.ch", true },
- { "b-entropy.com", true },
+ { "b-f-s.pl", true },
+ { "b-freerobux.ga", true },
{ "b-landia.net", true },
{ "b-root-force.de", true },
{ "b-services.net", true },
@@ -3530,8 +3557,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "b5989.net", true },
{ "b61688.com", true },
{ "b64.club", true },
- { "b72.com", true },
- { "b72.net", true },
{ "b8591.com", true },
{ "b8591.net", true },
{ "b8979.com", true },
@@ -3595,7 +3620,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "b9883.net", true },
{ "b9884.net", true },
{ "b9885.net", true },
- { "b9886.com", true },
{ "b9886.net", true },
{ "b9887.net", true },
{ "b9888.net", true },
@@ -3603,7 +3627,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "b9920.com", true },
{ "b9948.com", true },
{ "b9948.net", true },
- { "b99520.com", true },
{ "b9960.com", true },
{ "b99881.com", true },
{ "b99882.com", true },
@@ -3627,6 +3650,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "babyboom.pl", true },
{ "babycamapp.com", true },
{ "babyfotograf-schweiz.ch", true },
+ { "babymasaze.cz", true },
{ "babyphototime.com", true },
{ "babypibu.com", true },
{ "bacgrouppublishing.com", true },
@@ -3634,6 +3658,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "baches-piscines.com", true },
{ "baciu.ch", true },
{ "backeby.eu", true },
+ { "backlogapp.io", true },
{ "backmountaingas.com", true },
{ "backpacken.org", true },
{ "backpacker.dating", true },
@@ -3644,6 +3669,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "backterris.com", true },
{ "backtest.org", true },
{ "backupcloud.ru", true },
+ { "backupsinop.com.br", true },
{ "bacon-monitoring.org", true },
{ "baconismagic.ca", true },
{ "bacontreeconsulting.com", true },
@@ -3659,6 +3685,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "badges.fedoraproject.org", true },
{ "badges.stg.fedoraproject.org", true },
{ "badgesenpatches.nl", true },
+ { "badgirlsbible.com", true },
{ "badhusky.com", true },
{ "badmania.fr", true },
{ "badmintonbible.com", true },
@@ -3705,7 +3732,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bakingstone.com", true },
{ "bakkerinjebuurt.be", true },
{ "bakongcondo.com", true },
- { "bakxnet.com", true },
{ "balade-commune.ch", true },
{ "baladecommune.ch", true },
{ "balancascia.com.br", true },
@@ -3716,12 +3742,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "balconnr.com", true },
{ "balconsverdun.com", true },
{ "baldur.cc", true },
- { "balenciaspa.com", true },
{ "balia.de", true },
{ "balicekzdravi.cz", true },
+ { "balidesignshop.com.br", true },
{ "balikonos.cz", true },
{ "balinese.dating", true },
{ "balist.es", true },
+ { "balivillassanur.com", true },
{ "balkonien.org", true },
{ "ball.holdings", true },
{ "ballarin.cc", true },
@@ -3731,12 +3758,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ballonsportclub-erlangen.de", true },
{ "ballotapi.com", true },
{ "ballothero.com", true },
+ { "ballparkbuns.com", false },
{ "ballroom.info", true },
+ { "balnearionaturaspa.com", true },
{ "balslev.io", true },
- { "balticer.de", true },
{ "balticnetworks.com", true },
{ "bamahammer.com", true },
- { "bambambaby.com.br", true },
{ "bambooforest.nl", true },
{ "bamboorelay.com", true },
{ "bambumania.com.br", true },
@@ -3745,13 +3772,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bancaolhares.com.br", true },
{ "bancobai.ao", true },
{ "bancoctt.pt", true },
- { "bandar303.cc", true },
{ "bandar303.win", true },
{ "bandeira1.com.br", true },
{ "bandgap.io", true },
{ "bandiga.it", true },
{ "bandito.re", true },
- { "bangdream.ga", true },
+ { "banes.ch", true },
{ "bangkok-dark-night.com", true },
{ "bangkok.dating", true },
{ "bangkokcity.de", true },
@@ -3765,8 +3791,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bankersonline.com", true },
{ "banketbesteld.nl", true },
{ "bankfreeoffers.com", true },
+ { "bankgradesecurity.com", true },
{ "bankin.com", true },
{ "bankinter.pt", true },
+ { "bankio.se", true },
{ "bankitt.network", true },
{ "banknet.gov", true },
{ "bankofdenton.com", true },
@@ -3778,9 +3806,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bannsecurity.com", true },
{ "banoviny.sk", true },
{ "banquevanbreda.be", true },
- { "banri.me", true },
{ "banter.city", true },
- { "banxehoi.com", true },
{ "bao-in.com", true },
{ "bao-in.net", true },
{ "baobeiglass.com", true },
@@ -3793,21 +3819,22 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "barabrume.fr", true },
{ "barans2239.com", true },
{ "barbarafabbri.com", true },
+ { "barbarafeldman.com", true },
{ "barbarians.com", false },
{ "barbaros.info", true },
{ "barbate.fr", true },
- { "barbershop-harmony.org", true },
{ "barbu.family", true },
{ "barburas.com", true },
{ "barcamp.koeln", true },
+ { "barcel.com.mx", false },
{ "barclays.net", true },
{ "barcodeberlin.com", true },
{ "barcoderealty.com", true },
{ "bardiharborow.tk", true },
+ { "barf-alarm.de", true },
{ "baripedia.org", true },
{ "baris-sagdic.com", true },
{ "bariseau-mottrie.be", true },
- { "barisi.me", true },
{ "bariskaragoz.nl", true },
{ "barkerjr.xyz", true },
{ "barlotta.net", true },
@@ -3815,7 +3842,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "barnel.com", true },
{ "barnrats.com", true },
{ "barpodsosnami.pl", true },
- { "barprive.com", true },
{ "barracuda.com.tr", true },
{ "barrera.io", true },
{ "barriofut.com", true },
@@ -3849,10 +3875,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "basementdoctornorthwest.com", true },
{ "basementfinishingohio.com", true },
{ "bashstreetband.co.uk", true },
+ { "basicapparel.de", true },
{ "basicattentiontoken.org", true },
{ "basilicaknights.org", true },
- { "basilm.co", true },
{ "basketball-brannenburg.de", true },
+ { "basketsbymaurice.com", false },
{ "basnoslovno.com.ua", false },
{ "basnoslovno.ru", true },
{ "bass-pro.ru", true },
@@ -3865,6 +3892,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bastiv.com", true },
{ "bastivmobile.com", true },
{ "bastolino.de", true },
+ { "basw.eu", true },
+ { "baswetter.photography", true },
{ "basyspro.net", true },
{ "bat909.com", true },
{ "bat909.net", true },
@@ -3879,6 +3908,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "batlab.ch", true },
{ "batolis.com", true },
{ "batonger.com", true },
+ { "batook.org", true },
{ "batschu.de", true },
{ "batten.eu.org", true },
{ "batteryservice.ru", false },
@@ -3900,19 +3930,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bayareaenergyevents.com", true },
{ "baychimo.com", true },
{ "bayden.com", true },
- { "bayer-stefan.com", true },
{ "bayer-stefan.de", true },
{ "bayer-stefan.eu", true },
{ "bayerhazard.de", true },
- { "bayerstefan.com", true },
{ "bayerstefan.de", true },
{ "bayerstefan.eu", true },
{ "bayherbalist.com", true },
{ "bayilelakiku.com", true },
+ { "bayly.eu", true },
{ "baymard.com", true },
{ "baywatch.io", true },
{ "bayz.de", true },
{ "bazaarcompass.com", true },
+ { "bazdell.com", false },
{ "bazos.at", true },
{ "bazos.cz", true },
{ "bazos.sk", true },
@@ -3932,9 +3962,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bbnx.net", true },
{ "bbswin9.cc", true },
{ "bbswin9.com", true },
+ { "bbuio.com", false },
{ "bbw.dating", true },
{ "bbwcs.co.uk", true },
- { "bbwf.de", true },
{ "bbxin9.com", true },
{ "bbxin9.net", true },
{ "bc-bd.org", false },
@@ -3949,6 +3979,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bch7al.ma", true },
{ "bchep.com", true },
{ "bck-koethen.de", true },
+ { "bck-lelystad.nl", true },
{ "bck.me", true },
{ "bclogandtimberbuilders.com", true },
{ "bclrk.us", true },
@@ -3957,8 +3988,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bcmhire.co.uk", true },
{ "bcmlu.org", true },
{ "bcnet.com.hk", true },
- { "bcnet.hk", true },
- { "bcodeur.com", true },
{ "bcpc-ccgpfcheminots.com", true },
{ "bcrook.com", true },
{ "bcswampcabins.com", true },
@@ -3967,10 +3996,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bda-boulevarddesairs.com", true },
{ "bdata.cl", true },
{ "bdd.fi", true },
- { "bdenzer.com", true },
{ "bdikaros-network.net", true },
{ "bdpachicago.tech", true },
{ "bdvg.org", true },
+ { "be-a-password.ninja", true },
{ "be-ka-tec.de", true },
{ "be-up-developpement.com", true },
{ "be-webdesign.com", true },
@@ -3993,6 +4022,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "beacinsight.com", true },
{ "beadare.com", true },
{ "beadare.nl", true },
+ { "beaglesecurity.com", true },
{ "bealpha.pl", true },
{ "beamer-discount.de", true },
{ "beanjuice.me", true },
@@ -4033,7 +4063,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bedfordnissanparts.com", true },
{ "bedlingtonterrier.com.br", true },
{ "bednar.co", true },
- { "bedouille.com", true },
{ "bedrocklinux.org", true },
{ "bedste10.dk", true },
{ "bee-creative.nl", true },
@@ -4056,6 +4085,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "beekeeper.tools", true },
{ "beekeeping.clothing", true },
{ "beekeeping.tools", true },
+ { "beeksnetwork.nl", true },
{ "beelen.fr", true },
{ "beelit.com", true },
{ "beercandle.com", true },
@@ -4078,7 +4108,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "beezkneezcastles.co.uk", true },
{ "beeznest.com", true },
{ "befoodsafe.gov", true },
- { "beforesunrise.de", true },
{ "beframed.ch", true },
{ "befundonline.de", true },
{ "begabungsfoerderung.info", true },
@@ -4086,9 +4115,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "beginatzero.com", true },
{ "beginner.nl", true },
{ "beginwp.top", true },
+ { "begoodny.co.il", true },
{ "behamzdarma.cz", true },
+ { "behindthethrills.com", true },
+ { "behna24hodin.cz", true },
{ "behoerden-online-dienste.de", true },
- { "beholdthehurricane.com", true },
{ "behoreal.cz", true },
{ "bei18.com", true },
{ "beichtgenerator.de", true },
@@ -4129,14 +4160,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bellthrough.com", true },
{ "belly-button-piercings.com", true },
{ "belmontgoessolar.org", true },
+ { "belouga.org", true },
{ "belt.black", true },
{ "belua.com", true },
{ "belvoirbouncycastles.co.uk", true },
{ "bely-mishka.by", true },
{ "belyvly.com", true },
{ "bemsoft.pl", true },
- { "bemvindoaolar.com.br", true },
- { "ben-energy.com", false },
{ "ben-stock.de", true },
{ "ben.ninja", true },
{ "ben2.co.il", true },
@@ -4162,7 +4192,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "benevita.bio", true },
{ "benevita.life", true },
{ "benevita.live", true },
- { "benevita.organic", true },
{ "bengalurugifts.com", true },
{ "bengisureklam.com", true },
{ "benhaney.com", true },
@@ -4174,6 +4203,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "benjamindietrich.de", true },
{ "benjaminjurke.com", true },
{ "benjaminjurke.net", true },
+ { "benjaminkopelke.com", true },
{ "benjaminpiquet.fr", true },
{ "benjamins.com", true },
{ "benjaminvasel.de", true },
@@ -4202,6 +4232,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bentongroup.co.uk", true },
{ "bentonweatherstone.co.uk", true },
{ "bentrask.com", true },
+ { "benz-hikaku.com", true },
{ "benzi.io", true },
{ "beoordelingen.be", true },
{ "bephoenix.org.uk", true },
@@ -4224,10 +4255,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bergfreunde.se", true },
{ "berglust-pur.de", true },
{ "bergstoneware.com", true },
- { "berhampore-gateway.tk", true },
{ "berichtsheft-vorlage.de", true },
{ "berikod.ru", true },
- { "berliancom.com", true },
+ { "berliancom.com", false },
{ "berlin-flirt.de", true },
{ "berlin.dating", true },
{ "bermeitinger.eu", true },
@@ -4236,6 +4266,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bernardcontainers.be", true },
{ "bernarddickens.com", true },
{ "bernardfischer.fr", true },
+ { "bernardgo.com", true },
{ "bernat.im", true },
{ "bernd-leitner-fotodesign.com", true },
{ "bernd-leitner-fotodesign.de", true },
@@ -4248,6 +4279,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "berodes.be", true },
{ "berr.yt", true },
{ "berra.se", true },
+ { "berruezoabogados.com", true },
{ "berrus.com", true },
{ "berry.cat", true },
{ "berrypay.com", true },
@@ -4262,7 +4294,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bertrandkeller.info", true },
{ "bertsmithvwparts.com", true },
{ "beryl.net", true },
- { "berz.one", true },
{ "besb.io", true },
{ "besb66.com", true },
{ "beschriftung-metz.de", true },
@@ -4277,11 +4308,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "best-of-bounce.co.uk", true },
{ "best-wallpaper.net", true },
{ "best10websitebuilders.com", true },
+ { "best2pay.net", true },
{ "best66.me", true },
{ "bestattungen-kammerer.de", true },
{ "bestattungshaus-kammerer.de", true },
{ "bestautoinsurance.com", true },
- { "bestbatteriesonline.com", true },
{ "bestbonuses.co.uk", true },
{ "bestbrakes.com", true },
{ "bestbridal.top", true },
@@ -4292,6 +4323,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bestesb.net", true },
{ "bestessaycheap.com", true },
{ "bestessayhelp.com", true },
+ { "bestfriendsequality.org", true },
{ "bestgiftever.ca", true },
{ "bestgifts4you.com", true },
{ "bestinductioncooktop.us", true },
@@ -4300,11 +4332,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bestmotherfucking.website", true },
{ "bestoffert.club", true },
{ "bestoliveoils.com", true },
- { "bestpaintings.nl", true },
{ "bestpartyhire.com", true },
{ "bestperfumebrands.com", true },
- { "bestschools.top", true },
{ "bestseries.tv", true },
+ { "bestshoesmix.com", true },
{ "bestwebsite.gallery", true },
{ "bet-99.cc", true },
{ "bet-99.com", true },
@@ -4312,10 +4343,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bet168wy.com", true },
{ "bet168wy.net", true },
{ "bet909.com", true },
- { "bet990.com", true },
{ "bet9bet9.net", true },
{ "betacavi.com", true },
{ "betacloud.io", true },
+ { "betalenviainternet.nl", true },
{ "betaworx.de", true },
{ "betaworx.eu", true },
{ "betecnet.de", true },
@@ -4326,17 +4357,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "betpamm.com", true },
{ "betrallyarabia.com", true },
{ "betseybuckheit.com", true },
- { "betsonlinefree.com.au", true },
{ "betsyshilling.com", true },
{ "bett1.de", true },
{ "better-bounce.co.uk", true },
+ { "better.com", true },
{ "better.fyi", true },
{ "betterbabyshop.com.au", true },
+ { "betterconsult.com", true },
{ "bettercrypto.org", true },
{ "betterhelp.com", true },
{ "betterjapanese.org", true },
{ "betterna.me", true },
{ "betterscience.org", true },
+ { "bettertechinterviews.com", true },
{ "bettertest.it", true },
{ "betterweb.fr", true },
{ "betterworldinternational.org", true },
@@ -4347,11 +4380,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bettrlifeapp.com", true },
{ "betulashop.ch", true },
{ "betwalker.com", true },
+ { "between.be", true },
{ "betwin9.com", true },
{ "betwin9.net", true },
{ "beulen.email", true },
{ "beulen.link", true },
{ "beulen.pro", true },
+ { "beuteugeu.com", true },
{ "bevedo.cz", true },
{ "beveiligingscamerawestland.nl", true },
{ "bevelpix.com", true },
@@ -4359,18 +4394,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bevinco2020.com", true },
{ "bevinsco.org", true },
{ "bevnut.com", true },
- { "bewegungsfluss.com", true },
+ { "bewegungsfluss.com", false },
{ "bewerbungsfoto-deinfoto.ch", true },
+ { "bewertet.de", true },
{ "bewonderen.com", true },
- { "bexit-hosting.nl", true },
- { "bexit-security.eu", true },
- { "bexit-security.nl", true },
{ "bexit.nl", true },
{ "bexithosting.nl", true },
{ "bexleycastles.co.uk", true },
{ "beybiz.com", true },
{ "beylikduzuvaillant.com", true },
- { "beyond-infinity.org", true },
+ { "beyond-infinity.org", false },
{ "beyond-rational.com", true },
{ "beyondalderaan.net", true },
{ "beyondbounce.co.uk", true },
@@ -4398,9 +4431,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bg-sexologia.com", true },
{ "bg16.de", true },
{ "bgbhsf.top", true },
- { "bgdaddy.com", true },
{ "bgenlisted.com", true },
{ "bgeo.io", true },
+ { "bgfashion.net", true },
{ "bgfoto.info", true },
{ "bghost.xyz", true },
{ "bgkoleda.bg", true },
@@ -4414,6 +4447,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bharath-g.in", true },
{ "bhodisoft.com", true },
{ "bhost.net", true },
+ { "bhosted.nl", true },
{ "bhtelecom.ba", true },
{ "bhuntr.com", true },
{ "bi.search.yahoo.com", false },
@@ -4434,7 +4468,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bibuch.com", true },
{ "bicecontracting.com", true },
{ "bicha.net", true },
- { "bichonfrise.com.br", true },
{ "bicranial.io", true },
{ "bicycle-events.com", true },
{ "biddl.com", true },
@@ -4443,6 +4476,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bie.edu", false },
{ "biegner-technik.de", true },
{ "biehlsoft.info", true },
+ { "bielefailed.de", true },
{ "bien-etre-sante.info", true },
{ "bienici.com", true },
{ "bienoubien.org", true },
@@ -4452,9 +4486,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bieser.ch", true },
{ "biester.pro", true },
{ "bifrost.cz", true },
+ { "biftin.net", true },
{ "big-andy.co.uk", true },
{ "big-bounce.co.uk", true },
{ "big-fluglaerm-hamburg.de", true },
+ { "bigbendguide.com", true },
{ "bigbluedoor.net", true },
{ "bigbouncebouncycastles.co.uk", true },
{ "bigbouncetheory.co.uk", true },
@@ -4489,29 +4525,28 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bikkelbroeders.nl", false },
{ "bilalic.com", true },
{ "bilalkilic.de", true },
- { "bilanligne.com", true },
{ "bilbayt.com", true },
{ "bilder-designs.de", true },
+ { "bildiri.ci", true },
{ "bildkomponist.de", true },
{ "bildschirmflackern.de", true },
{ "biletyplus.by", true },
- { "biletyplus.com", true },
{ "biletyplus.ua", true },
{ "bilgo.com", true },
{ "bilibili.red", true },
{ "bilimoe.com", true },
{ "bilke.org", true },
{ "billaud.eu.org", true },
- { "billgoldstein.name", true },
{ "billhartzer.com", true },
{ "billiger-mietwagen.de", true },
+ { "billigerfinder.de", true },
{ "billigpoker.dk", true },
{ "billionairemailinglist.com", false },
{ "billionkiaparts.com", true },
{ "billogram.com", true },
{ "billpro.com", false },
+ { "billpro.com.au", true },
{ "billrhodesbakery.com", true },
- { "billrobinson.io", true },
{ "billy.pictures", true },
{ "billyoh.com", true },
{ "billysbouncycastlehire.co.uk", true },
@@ -4519,6 +4554,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "biloplysninger.dk", true },
{ "bilsho.com", true },
{ "biltullen.com", true },
+ { "bimbo.com", false },
+ { "bimbo.com.ar", false },
+ { "bimbobakeriesusa.com", false },
{ "bimmerlabs.com", true },
{ "bin95.com", true },
{ "bina.az", true },
@@ -4530,10 +4568,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "binans.xyz", true },
{ "binarization.com", true },
{ "binarization.net", true },
- { "binarization.org", true },
{ "binaryapparatus.com", true },
{ "binaryappdev.com", true },
- { "binarycreations.scot", true },
{ "binarydream.fi", true },
{ "binaryevolved.com", true },
{ "binaryrebel.net", true },
@@ -4543,18 +4579,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "binding-problem.com", true },
{ "binfind.com", true },
{ "bing.com", true },
- { "bingo-wear.com", true },
{ "bingobank.org", true },
- { "bingostars.com", true },
{ "binhex.net", true },
{ "binkanhada.biz", true },
{ "binkconsulting.be", true },
- { "binsp.net", true },
{ "binti.com", true },
{ "bintooshoots.com", true },
{ "bio-disinfestazione.it", true },
{ "bio-feed.org", true },
{ "bio24.si", true },
+ { "bioatelier.it", true },
{ "biobuttons.ch", true },
{ "biocheminee.com", true },
{ "biodiagnostiki.clinic", true },
@@ -4566,6 +4600,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bioemsan.cz", true },
{ "bioequivalence.design", true },
{ "bioetco.ch", true },
+ { "bioexploratorium.pl", true },
{ "biogecho.ch", true },
{ "biogecho.swiss", true },
{ "biogeist.de", true },
@@ -4577,7 +4612,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "biomax-mep.com.br", true },
{ "biometrics.es", true },
{ "biomodra.cz", true },
- { "biopreferred.gov", true },
{ "biopsychiatry.com", true },
{ "bioresonanz-ibiza.com", true },
{ "biosafe.ch", true },
@@ -4587,22 +4621,22 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "biospeak.solutions", true },
{ "biosphere.cc", true },
{ "biotechware.com", true },
- { "biou.me", true },
{ "bipyo.com", true },
{ "birbaumer.li", true },
{ "birchbarkfurniture.ch", true },
{ "birchbarkfurniture.com", true },
{ "birchbarkfurniture.fr", true },
- { "birdandbranchnyc.com", true },
{ "birdbrowser.com", true },
{ "birdfeeder.online", true },
{ "birdiehosting.nl", true },
{ "birdslabel.com", true },
{ "birdymanbestreviews.com", true },
+ { "birgerschwarz.de", true },
{ "birgit-rydlewski.de", true },
{ "birgitandmerlin.com", true },
{ "birkengarten.ch", true },
{ "birkenstab.de", true },
+ { "birkhoff.me", true },
{ "birminghamcastlehire.co.uk", true },
{ "birminghamsunset.com", true },
{ "birthdaytip.com", true },
@@ -4621,10 +4655,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bit-cloud.de", true },
{ "bit-rapid.com", true },
{ "bit-sentinel.com", true },
- { "bit.biz.tr", true },
{ "bit.voyage", true },
{ "bit8.com", true },
- { "bitace.com", true },
{ "bitbank.cc", true },
{ "bitbeans.de", true },
{ "bitbucket.com", true },
@@ -4634,7 +4666,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bitcalt.eu.org", true },
{ "bitcalt.ga", true },
{ "bitclubfun.com", true },
- { "bitcoin-casino-no-deposit-bonus.com", true },
{ "bitcoin-india.net", true },
{ "bitcoin-india.org", true },
{ "bitcoin.asia", true },
@@ -4656,11 +4687,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bitcointhefts.com", true },
{ "bitcoinwalletscript.tk", true },
{ "bitcoinx.gr", true },
+ { "bitcoinx.ro", true },
{ "bitedge.com", true },
{ "bitenose.com", true },
{ "bitex.la", true },
{ "bitfasching.de", false },
{ "bitfehler.net", true },
+ { "bitfence.io", true },
{ "bitfinder.nl", true },
{ "bitfuse.net", true },
{ "bitgo.com", true },
@@ -4668,6 +4701,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bithap.com", true },
{ "bithir.co.uk", true },
{ "bititrain.com", true },
+ { "bitk.co", true },
+ { "bitk.co.uk", true },
+ { "bitk.eu", true },
{ "bitk.uk", true },
{ "bitlish.com", true },
{ "bitlo.com", true },
@@ -4680,10 +4716,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bitmarket.net", true },
{ "bitmarket.pl", true },
{ "bitmessage.ch", true },
- { "bitmex.com", true },
{ "bitmidi.com", true },
{ "bitminter.com", true },
- { "bitmoe.com", true },
{ "bitok.com", true },
{ "bitpoll.de", true },
{ "bitpoll.org", true },
@@ -4701,8 +4735,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bitten.pw", true },
{ "bittersweetcandybowl.com", true },
{ "bittylicious.com", true },
- { "bituptick.com", true },
- { "bitvegas.com", true },
{ "bitvest.io", true },
{ "bitwolk.nl", true },
{ "bitxel.com.co", true },
@@ -4729,7 +4761,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bkentertainments.co.uk", true },
{ "bkhayes.com", true },
{ "bkhpilates.co.uk", true },
- { "bklaindia.com", true },
{ "bkositspartytime.co.uk", true },
{ "bl4ckb0x.biz", true },
{ "bl4ckb0x.com", true },
@@ -4757,7 +4788,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "blablacar.ro", true },
{ "blablacar.rs", true },
{ "blablacar.ru", true },
- { "black-khat.com", true },
+ { "black-gay-porn.biz", true },
{ "black-mail.nl", true },
{ "black-pool.net", true },
{ "black-raven.fr", true },
@@ -4781,28 +4812,29 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "blackfire.io", true },
{ "blackgamelp.de", true },
{ "blackgate.org", true },
+ { "blackhat.dk", true },
{ "blackhelicopters.net", true },
{ "blackhillsinfosec.com", true },
{ "blackilli.de", true },
{ "blackislegroup.com", true },
- { "blackl.net", true },
- { "blacklightparty.be", true },
+ { "blackkeg.ca", true },
+ { "blackmonday.gr", true },
{ "blacknetwork.eu", true },
- { "blacknova.io", true },
{ "blackonion.com", true },
{ "blackpapermoon.de", true },
- { "blackpayment.ru", true },
- { "blackphantom.de", true },
{ "blackphoenix.de", true },
+ { "blackroadphotography.de", true },
{ "blackscytheconsulting.com", true },
{ "blackseals.net", true },
{ "blackys-chamber.de", true },
{ "blaise.io", true },
{ "blakecoin.org", true },
{ "blakekhan.com", true },
+ { "blameomar.com", true },
{ "blancodent.com", true },
{ "blankersfamily.com", true },
{ "blanket.technology", true },
+ { "blasorchester-runkel.de", true },
{ "blastentertainment.com.au", true },
{ "blastersklan.com", true },
{ "blastzoneentertainments.co.uk", true },
@@ -4819,6 +4851,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "blechpirat.name", true },
{ "blechschmidt.saarland", true },
{ "blenderrecipereviews.com", true },
+ { "blending.kr", true },
{ "blendle.com", true },
{ "blendle.nl", true },
{ "blendr.com", true },
@@ -4830,7 +4863,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "blichmann.eu", true },
{ "blidz.com", true },
{ "blieque.co.uk", true },
+ { "bliesekow.net", true },
{ "blikk.no", true },
+ { "blikund.swedbank.se", true },
{ "blindpigandtheacorn.com", true },
{ "bling9.com", true },
{ "bling999.cc", true },
@@ -4844,6 +4879,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "blip.website", true },
{ "blissjoe.com", true },
{ "blissplan.com", true },
+ { "blitzprog.org", true },
{ "blivawesome.dk", true },
{ "blivvektor.dk", true },
{ "blizhost.com", true },
@@ -4855,15 +4891,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "blobfolio.com", true },
{ "block-this.com", true },
{ "block65.com", true },
+ { "blockchain.com", true },
{ "blockchain.info", true },
- { "blockchainced.com", true },
{ "blockchaindaigakko.jp", true },
+ { "blockchainwhiz.com", true },
{ "blockedyourcar.com", true },
{ "blockedyourcar.net", true },
{ "blockedyourcar.org", true },
{ "blockified.io", true },
{ "blockmetry.com", true },
- { "blockshopauto.com", true },
{ "blockstream.com", true },
{ "blockxit.de", true },
{ "bloemenbesteld.nl", true },
@@ -4876,6 +4912,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "blogbooker.com", true },
{ "blogconcours.net", true },
{ "blogcuaviet.com", true },
+ { "blogdeyugioh.com", true },
{ "blogexpert.ca", true },
{ "bloggermumofthreeboys.com", true },
{ "blogging-life.com", true },
@@ -4908,23 +4945,23 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bluecrazii.nl", true },
{ "blued.moe", true },
{ "bluedeck.org", true },
- { "bluefinger.nl", true },
{ "blueflare.org", true },
{ "bluefrag.com", true },
{ "bluefuzz.nl", true },
{ "blueimp.net", true },
{ "blueliquiddesigns.com.au", true },
{ "bluemeda.web.id", true },
+ { "bluemoonroleplaying.com", true },
+ { "bluemtnrentalmanagement.ca", true },
{ "bluenote9.com", true },
{ "bluepearl.tk", true },
{ "blueperil.de", true },
- { "bluepoint.foundation", true },
- { "bluepoint.institute", true },
{ "bluepoint.one", true },
{ "bluepostbox.de", true },
{ "blueprintloans.co.uk", true },
{ "bluerootsmarketing.com", true },
{ "blues-and-pictures.com", true },
+ { "bluesecure.com.br", true },
{ "blueskycoverage.com", true },
{ "bluestardiabetes.com", true },
{ "bluewavewebdesign.com", true },
@@ -4939,15 +4976,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "blumiges-fischbachtal.de", false },
{ "blundell.wedding", true },
{ "bluntandsnakes.com", true },
- { "bluop.com", true },
{ "blupig.net", true },
{ "bluproducts.com.es", true },
{ "blurringexistence.net", true },
{ "blusmurf.net", true },
{ "blutopia.xyz", true },
{ "blyat.science", true },
- { "bm-i.ch", true },
- { "bm-immo.ch", true },
+ { "blyth.me.uk", true },
{ "bmhglobal.com.au", true },
{ "bmone.net", true },
{ "bmriv.com", true },
@@ -4980,9 +5015,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "boatme.de", true },
{ "boattrader.com", true },
{ "boattrader.com.au", true },
+ { "bobaly.es", true },
{ "bobancoamigo.com", true },
{ "bobazar.com", true },
{ "bobcopeland.com", true },
+ { "bobep.ru", true },
{ "bobkidbob.com", true },
{ "bobkoetsier.nl", true },
{ "bobnbouncedublin.ie", true },
@@ -4996,8 +5033,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bocloud.eu", true },
{ "bocreation.fr", true },
{ "bodhi.fedoraproject.org", true },
+ { "bodis.nl", true },
{ "bodixite.com", true },
- { "bodrumfarm.com", true },
{ "bodsch.com", true },
{ "bodybuildingworld.com", true },
{ "bodyconshop.com", true },
@@ -5008,7 +5045,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bodyworkbymichael.com", true },
{ "boeddhashop.nl", true },
{ "boekenlegger.nl", true },
- { "boel073.nl", true },
{ "boem.gov", true },
{ "boernecancerfonden.dk", true },
{ "bogdancornianu.com", true },
@@ -5023,7 +5059,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "boisewaldorf.org", true },
{ "boke112.com", true },
{ "bokka.com", true },
- { "bolainfoasia.com", true },
+ { "bokutake.com", true },
{ "boldmediagroup.com", true },
{ "boldt-metallbau.de", true },
{ "bolektro.de", true },
@@ -5035,7 +5071,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bolt.cm", false },
{ "boltbeat.com", true },
{ "bolte.org", true },
- { "boltn.uk", true },
{ "bomb.codes", true },
{ "bonaccorso.eu", true },
{ "bonami.cz", true },
@@ -5044,12 +5079,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bonami.ro", true },
{ "bonami.sk", true },
{ "bonbonmania.com", true },
+ { "bondagefetishstore.com", true },
+ { "bondank.com", true },
{ "bondarenko.dn.ua", true },
{ "bondingwithbaby.ca", true },
{ "bondoer.fr", true },
{ "bondskampeerder.nl", true },
- { "bondtofte.dk", true },
{ "bonebunny.de", true },
+ { "boneko.de", true },
+ { "bonesserver.com", true },
{ "bonfi.net", true },
{ "bonibuty.com", true },
{ "bonifacius.be", true },
@@ -5066,7 +5104,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bonprix.co.uk", true },
{ "bonqoeur.ca", true },
{ "bonsaimedia.nl", true },
- { "boobox.xyz", true },
{ "boodaah.com", true },
{ "boodmo.com", true },
{ "boogiebouncecastles.co.uk", true },
@@ -5075,9 +5112,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bookingapp.nl", true },
{ "bookingdeluxesp.com", true },
{ "bookingready.com", true },
+ { "bookingslog.com", true },
{ "bookingworldspeakers.com", true },
{ "bookluk.com", true },
- { "bookmakersfreebets.com.au", true },
{ "bookmein.in", true },
{ "bookourdjs.com", true },
{ "booksearch.jp", true },
@@ -5097,6 +5134,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "booox.net", true },
{ "booox.org", true },
{ "booox.pw", true },
+ { "boop.gq", true },
{ "boop.pro", true },
{ "booq.org", true },
{ "booquiz.com", true },
@@ -5127,7 +5165,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "borysek.net", true },
{ "borzoi.com.br", true },
{ "bosabosa.org", true },
- { "boschee.net", true },
{ "boscoyacht.ch", true },
{ "boskeopolis-stories.com", true },
{ "boss.az", true },
@@ -5149,11 +5186,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bouchonville-knifemaker.com", true },
{ "bouckaert-usedcars.be", true },
{ "boudah.pl", true },
- { "boueki.jp", true },
- { "boueki.org", true },
{ "bougeret.fr", true },
{ "bouk.co", true },
- { "boukoubengo.com", true },
{ "boulzicourt.fr", true },
{ "bounce-a-mania.co.uk", true },
{ "bounce-a-roo.co.uk", true },
@@ -5263,6 +5297,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bound2bounce.co.uk", true },
{ "boundarybrighton.com", true },
{ "bountyfactory.io", true },
+ { "bourasse.fr", true },
{ "bourdon.fr.eu.org", true },
{ "bourhis.info", true },
{ "bournefun.co.uk", true },
@@ -5273,6 +5308,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bouw.live", true },
{ "bouzouks.net", true },
{ "bovenwebdesign.nl", true },
+ { "bowdens.me", true },
{ "bowedwallcrackrepair.com", true },
{ "boweryandvine.com", true },
{ "bowlcake.fr", true },
@@ -5290,6 +5326,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "boxpirates.to", true },
{ "boxvergelijker.nl", true },
{ "boyhost.cn", true },
+ { "boypoint.de", true },
{ "boz.nl", false },
{ "bozdoz.com", true },
{ "bozit.com.au", true },
@@ -5335,7 +5372,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "brainvoyagermusic.com", true },
{ "brainwork.space", true },
{ "brakemanpro.com", true },
- { "brakstad.org", true },
{ "bralnik.com", true },
{ "brambogaerts.nl", true },
{ "bramburek.net", true },
@@ -5345,9 +5381,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bramvanaken.be", true },
{ "bran.land", true },
{ "branch-bookkeeper.com", true },
- { "brand-foo.com", true },
- { "brand-foo.jp", true },
- { "brand-foo.net", true },
{ "brandbil.dk", true },
{ "brandbuilderwebsites.com", true },
{ "brandcodeconsulting.com", true },
@@ -5368,7 +5401,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "brasalcosmetics.com", true },
{ "brashear.me", true },
{ "brasilbombas.com.br", true },
- { "brasilmorar.com", true },
{ "brasserie-mino.fr", true },
{ "brasspipedreams.org", true },
{ "bratislava-airport-taxi.com", true },
@@ -5387,6 +5419,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bravehearts.org.au", true },
{ "braviskindenjeugd.nl", true },
{ "bravisziekenhuis.nl", true },
+ { "brazenfol.io", true },
{ "brazilian.dating", true },
{ "brazillens.com", true },
{ "brck.nl", true },
@@ -5412,6 +5445,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "brefy.com", true },
{ "brege.org", true },
{ "bregnedalsystems.dk", true },
+ { "breitband.bz.it", true },
{ "breitbild-beamer.de", true },
{ "brejoc.com", true },
{ "bremen-restaurants.de", true },
@@ -5425,6 +5459,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bretcarmichael.com", true },
{ "brettabel.com", true },
{ "brettelliff.com", true },
+ { "brettw.xyz", true },
{ "bretz-hufer.de", true },
{ "bretzner.fr", true },
{ "brevboxar.se", true },
@@ -5435,6 +5470,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "brianalawayconsulting.com", true },
{ "briandwells.com", true },
{ "brianfoshee.com", true },
+ { "briangarcia.ga", true },
+ { "brianjohnson.co.za", true },
{ "brianlanders.us", true },
{ "brianmwaters.net", true },
{ "brianroadifer.com", true },
@@ -5447,7 +5484,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "brickvortex.com", true },
{ "bricolajeux.ch", true },
{ "brid.gy", false },
+ { "brideandgroomdirect.ie", true },
{ "bridgeglobalmarketing.com", true },
+ { "bridgement.com", true },
{ "bridgevest.com", true },
{ "bridgingdirectory.com", true },
{ "brie.tech", true },
@@ -5466,7 +5505,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "brilliantdecisionmaking.com", true },
{ "brilliantproductions.co.nz", true },
{ "brimspark.systems", true },
- { "brinkhu.is", true },
{ "brinquedoseducativos.art.br", true },
{ "brio-shop.ch", true },
{ "brisbanelogistics.com.au", true },
@@ -5482,7 +5520,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "britishscienceweek.org", true },
{ "britneyclause.com", true },
{ "britton-photography.com", true },
- { "brmsalescommunity.com", true },
{ "brn.by", true },
{ "bro.hk", true },
{ "broadleft.org", true },
@@ -5523,11 +5560,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "brunick.de", false },
{ "brunn.email", true },
{ "brunner.ninja", false },
+ { "brunohenc.from.hr", true },
{ "brunoramos.com", true },
{ "brunoramos.org", true },
{ "brunosouza.org", true },
+ { "brush.ninja", true },
{ "bruun.co", true },
+ { "bryankaplan.com", true },
{ "bryanquigley.com", true },
+ { "bryansmith.net", true },
+ { "bryansmith.tech", true },
{ "bs-network.net", true },
{ "bs-security.com", true },
{ "bs.sb", true },
@@ -5536,10 +5578,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bsa157.org", true },
{ "bsatroop794.org", true },
{ "bsc-rietz.at", true },
+ { "bscc.support", true },
{ "bsd-box.net", true },
{ "bsd.com.ro", true },
{ "bsdes.net", true },
{ "bsdfreak.dk", true },
+ { "bsdlab.com", true },
{ "bsdracing.ca", true },
{ "bsdunix.xyz", true },
{ "bsee.gov", true },
@@ -5552,18 +5596,20 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bsidessf.com", true },
{ "bsimerch.com", true },
{ "bslim-e-boutique.com", true },
- { "bsociabl.com", true },
{ "bsp-southpool.com", true },
- { "bsquared.org", true },
{ "bstoked.net", true },
{ "bsw-solution.de", true },
{ "bt123.xyz", true },
+ { "bt78.cn", true },
+ { "bt85.cn", true },
+ { "bt9.cc", true },
+ { "bt96.cn", true },
+ { "bt995.com", true },
{ "bta.lv", false },
{ "btaoke.com", true },
{ "btc2secure.com", true },
{ "btcarmory.com", true },
{ "btcbolsa.com", true },
- { "btcgo.nl", true },
{ "btcontract.com", true },
{ "btcpop.co", true },
{ "btcycle.org", true },
@@ -5573,6 +5619,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "btorrent.xyz", true },
{ "btrb.ml", true },
{ "btsapem.com", true },
+ { "btserv.de", true },
{ "btsoft.eu", true },
{ "btsow.com", true },
{ "btth.live", true },
@@ -5580,7 +5627,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "btth.tv", true },
{ "btth.xyz", true },
{ "bttorj45.com", true },
- { "bubba.cc", true },
+ { "bturboo.com", true },
{ "bubblegumblog.com", true },
{ "bubblespetspa.com", true },
{ "bubblinghottubs.co.uk", true },
@@ -5613,15 +5660,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "buergerdialog.net", true },
{ "buergerhaushalt.com", true },
{ "bueroplus.de", true },
+ { "bueroschwarz.design", true },
{ "bueroshop24.de", true },
{ "buffaloautomation.com", true },
{ "buffaloturf.com.au", true },
+ { "buffetbouc.com", true },
{ "bug.blue", true },
{ "bug.ee", true },
{ "bugcrowd.com", true },
+ { "bugginslab.co.uk", true },
{ "bugs.chromium.org", true },
{ "bugsmashed.com", true },
- { "bugtrack.co.uk", true },
{ "bugzil.la", true },
{ "bugzilla.mozilla.org", true },
{ "build.chromium.org", true },
@@ -5643,7 +5692,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bulario.com", true },
{ "bulario.net", true },
{ "bulbcompare.com", true },
- { "buldogueingles.com.br", true },
{ "bulkcandystore.com", true },
{ "bulkingtime.com", true },
{ "bulktrade.de", true },
@@ -5656,7 +5704,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bullpay.com", true },
{ "bullshitmail.nl", true },
{ "bullterrier.nu", true },
- { "bulmastife.com.br", true },
{ "bulwarkhost.com", true },
{ "bumarkamoda.com", true },
{ "bunbun.be", false },
@@ -5674,6 +5721,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "burgers.io", true },
{ "burghardt.pl", true },
{ "buri.be", false },
+ { "burialinsurancenetwork.com", true },
{ "buricloud.fr", true },
{ "burke.services", true },
{ "burlapsac.ca", true },
@@ -5686,7 +5734,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "buronwater.com", true },
{ "burotec-sarl.com", true },
{ "burr.is", true },
- { "burroughsid.com", true },
{ "bursaries-southafrica.co.za", true },
{ "burtplasticsurgery.com", true },
{ "burtrum.family", true },
@@ -5700,36 +5747,38 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "busindre.com", true },
{ "business-garden.com", true },
{ "business.facebook.com", false },
- { "businessadviceperth.com.au", true },
{ "businesscentermarin.ch", true },
{ "businessesdirectory.eu", true },
{ "businessfactors.de", true },
{ "businessimmigration-eu.com", true },
{ "businessimmigration-eu.ru", true },
{ "businessplanexperts.ca", true },
+ { "businessradar.com.au", true },
+ { "busit.be", true },
+ { "busold.ws", true },
{ "bustadice.com", true },
{ "bustimes.org", true },
{ "bustup-tips.com", true },
+ { "busuttil.org.uk", true },
{ "butarque.es", true },
{ "buthowdoyoubuygroceries.com", true },
{ "butikvip.ru", true },
- { "butt.repair", true },
{ "buttercupstraining.co.uk", true },
{ "buttermilk.cf", true },
{ "buttonline.ch", true },
+ { "buttonrun.com", true },
{ "buturyu.net", true },
- { "buturyu.org", true },
{ "buurtgenotencollectief.nl", true },
{ "buurtpreventiefraneker.nl", true },
{ "buxum-communication.ch", true },
{ "buy-thing.com", true },
{ "buyaccessible.gov", true },
- { "buybike.shop", true },
+ { "buycarpet.shop", true },
{ "buycook.shop", true },
- { "buydesired.com", true },
{ "buydissertations.com", true },
{ "buyerdocs.com", true },
{ "buyessayscheap.com", true },
+ { "buyhealth.shop", true },
{ "buyinginvestmentproperty.com", true },
{ "buyjewel.shop", true },
{ "buymindhack.com", true },
@@ -5746,12 +5795,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "buzzprint.it", true },
{ "bvalle.com", true },
{ "bvgg.eu", true },
- { "bvionline.eu", true },
{ "bvl.aero", true },
{ "bvv-europe.eu", true },
{ "bw.codes", true },
{ "bwcscorecard.org", true },
{ "bwe-seminare.de", true },
+ { "bwfc.nl", true },
{ "bwh1.net", true },
{ "bwilkinson.co.uk", true },
{ "bwin86.com", true },
@@ -5766,12 +5815,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bwwb.nu", true },
{ "bx-n.de", true },
{ "bxp40.at", true },
- { "by2230.com", true },
- { "by2238.com", true },
- { "by2239.com", true },
- { "by2251.com", true },
- { "by2253.com", true },
- { "by2254.com", true },
+ { "by.cx", true },
{ "byatte.com", true },
{ "bydisk.com", false },
{ "byeskille.no", true },
@@ -5781,13 +5825,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bymark.co", true },
{ "bymike.co", true },
{ "bynder.com", true },
+ { "bynumlaw.net", true },
{ "bypass.sh", true },
{ "byrko.cz", true },
{ "byrko.sk", true },
+ { "byronkg.us", true },
{ "byronprivaterehab.com.au", true },
{ "byronr.com", true },
{ "byrtz.de", true },
- { "bysb.net", true },
+ { "bysb.net", false },
{ "byte-time.com", true },
{ "byte128.com", true },
{ "bytearts.net", true },
@@ -5806,6 +5852,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "byteshark.org", true },
{ "bytesign.de", true },
{ "bytesizedalex.com", true },
+ { "bytesunlimited.com", true },
{ "bytesystems.com", true },
{ "bythen.cn", true },
{ "bythisverse.com", true },
@@ -5827,8 +5874,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "c0rn3j.com", true },
{ "c2design.it", true },
{ "c2o-library.net", true },
+ { "c3hv.cn", true },
{ "c3vo.de", true },
{ "c3w.at", true },
+ { "c3wien.at", true },
{ "c4539.com", true },
{ "c4k3.net", true },
{ "c7dn.com", true },
@@ -5866,6 +5915,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cadoth.net", true },
{ "cadra.nl", true },
{ "cadsys.net", true },
+ { "cadusilva.com", true },
{ "caesarkabalan.com", true },
{ "cafe-service.ru", false },
{ "cafedupont.be", true },
@@ -5911,7 +5961,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "calculator.tf", true },
{ "calcworkshop.com", true },
{ "caldecotevillagehall.co.uk", true },
- { "calebmorris.com", false },
+ { "caleb.host", true },
{ "calebthompson.io", true },
{ "calendarr.com", true },
{ "calendarsnow.com", true },
@@ -5927,20 +5977,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "callawayracing.se", true },
{ "callear.org", true },
{ "callhub.io", true },
- { "callmereda.com", true },
{ "calltoar.ms", true },
{ "calltothepen.com", true },
{ "callumsilcock.com", true },
{ "callumsilcock.me", true },
{ "calluna.nl", true },
{ "calmtech.com", true },
- { "calomel.org", true },
{ "calotte-academy.com", true },
{ "calvin.my", true },
{ "calvinallen.net", false },
{ "calypso-tour.net", true },
{ "calyxengineers.com", true },
- { "calyxinstitute.org", false },
{ "camaradivisas.com", true },
{ "camaras.uno", true },
{ "camarilloelectric.com", true },
@@ -5955,11 +6002,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cambodian.dating", true },
{ "cambridgebouncers.co.uk", true },
{ "camconn.cc", true },
- { "camda.online", true },
{ "camelservers.com", true },
{ "cameraviva.com.br", true },
{ "camerweb.es", true },
{ "camilomodzz.net", true },
+ { "camolist.com", true },
{ "camp-pleinsoleil.ch", true },
{ "camp.co.uk", true },
{ "campaign-ad.com", true },
@@ -5967,6 +6014,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "campaignagent.com.au", true },
{ "campaignwiki.org", true },
{ "campamentos.info", true },
+ { "campbellapplianceheatingandair.com", true },
{ "campbrainybunch.com", true },
{ "campcambodia.org", true },
{ "campcanada.org", true },
@@ -5977,7 +6025,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "campertrailerfinance.com.au", true },
{ "camperverzekerd.nl", true },
{ "campfiretails.org", true },
- { "campfourpaws.com", true },
{ "camping-seilershof.de", true },
{ "campinghuntingshooting.com", true },
{ "campingskyhooks.com", true },
@@ -5986,21 +6033,22 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "campus-discounts.com", true },
{ "campus-finance.com", true },
{ "campusdrugprevention.gov", true },
- { "campusportalng.com", true },
{ "campuswire.com", true },
{ "campwabashi.org", true },
- { "camsky.de", true },
+ { "camshowhub.com", true },
+ { "camsky.de", false },
{ "canada-tourisme.ch", true },
+ { "canadabread.com", false },
{ "canadalife.de", true },
{ "canadasmotorcycle.ca", true },
{ "canadian-nurse.com", true },
{ "canadian.dating", true },
{ "canadianchristianity.com", false },
+ { "canadianoutdoorequipment.com", true },
{ "canadiantouristboard.com", true },
{ "canalsidehouse.be", true },
{ "canalsidehouse.com", true },
{ "canarymod.net", true },
- { "cancelmyprofile.com", true },
{ "cancerdata.nhs.uk", true },
{ "candaceplayforth.com", true },
{ "candex.com", true },
@@ -6013,14 +6061,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "canerkorkmaz.com", true },
{ "cangelloplasticsurgery.com", true },
{ "cangku.in", true },
- { "cangku.moe", true },
+ { "cangku.moe", false },
{ "canglong.net", true },
{ "canhazip.com", true },
+ { "canicaprice.com", true },
{ "canihavesome.coffee", true },
{ "canker.org", true },
{ "canlidoviz.com", true },
{ "canmipai.com", true },
{ "cannabis-marijuana.com", true },
+ { "cannahealth.com", false },
{ "cannoli.london", true },
{ "cannyfoxx.me", true },
{ "canoonic.se", true },
@@ -6034,13 +6084,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "canyoupwn.me", true },
{ "cao.gov", true },
{ "cao.la", true },
- { "caodecristachines.com.br", true },
{ "caodesantohumberto.com.br", true },
{ "capacent.is", true },
{ "capachitos.cl", true },
{ "capacitacionyautoempleo.com", true },
{ "capacityproject.org", true },
{ "capekeen.com", true },
+ { "capellidipremoli.com", true },
+ { "caphane.com", true },
{ "capimlimaoflores.com.br", true },
{ "capitainebaggy.ch", true },
{ "capital-match.com", true },
@@ -6053,10 +6104,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "capitaltg.com", true },
{ "capitolpathways.org", true },
{ "caplinbouncycastles.co.uk", true },
+ { "capogna.com", false },
{ "capper.de", true },
{ "capriccio.to", true },
{ "caprichosdevicky.com", true },
- { "caps.is", true },
{ "capsogusto.com", true },
{ "capstansecurity.co.uk", true },
{ "capstansecurity.com", true },
@@ -6066,12 +6117,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "capturapp.com", false },
{ "capture-app.com", true },
{ "captured-symphonies.com", true },
- { "capturethepen.co.uk", true },
{ "capuchinox.com", true },
{ "caputo.com", true },
{ "caputodesign.com", true },
- { "car-rental24.com", true },
- { "car-shop.top", true },
{ "car.info", true },
{ "car24.de", true },
{ "car24portal.de", true },
@@ -6101,6 +6149,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cardelmar.de", true },
{ "cardelmar.es", true },
{ "cardexchangesolutions.com", true },
+ { "cardios.srv.br", true },
{ "cardranking.jp", true },
{ "cardrecovery.fr", true },
{ "cardse.net", true },
@@ -6111,7 +6160,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cardxl.nl", true },
{ "care4all.com", true },
{ "careeapp.com", true },
- { "careeraid.in", true },
{ "careeroptionscoach.com", true },
{ "careerpower.co.in", true },
{ "carefour.nl", true },
@@ -6122,6 +6170,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "careyshop.cn", true },
{ "carezone.com", false },
{ "cargobay.net", true },
+ { "cargorestraintsystems.com.au", true },
{ "caribbean.dating", true },
{ "caribbeanarthritisfoundation.org", true },
{ "caribbeanexams.com", true },
@@ -6137,6 +6186,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "carlingfordapartments.com.au", true },
{ "carlmjohnson.net", true },
{ "carlobiagi.de", true },
+ { "carlocksmithfallbrook.com", true },
+ { "carlosfelic.io", true },
{ "carlosjeurissen.com", true },
{ "carnaticalifornia.com", true },
{ "carnet-du-voyageur.com", true },
@@ -6155,13 +6206,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "carpetcleaningtomball.com", true },
{ "carrando.com", true },
{ "carre-lutz.com", true },
+ { "carrentalsathens.com", true },
{ "carriedin.com", true },
{ "carrierplatform.com", true },
{ "carringtonrealtygroup.com", true },
{ "carrollservicecompany.com", true },
{ "carson-aviation-adventures.com", true },
{ "carspneu.cz", true },
- { "carsten.pw", true },
{ "cartadeviajes.cl", true },
{ "cartadeviajes.co", true },
{ "cartadeviajes.com", true },
@@ -6186,7 +6237,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cartouche-deal.fr", true },
{ "cartouche24.eu", true },
{ "cartucce24.it", true },
- { "carun.us", true },
{ "carusorealestate.com", true },
{ "caryefurd.com", true },
{ "casa-due-pur.com", true },
@@ -6194,8 +6244,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "casa-due.com", true },
{ "casa-mea-inteligenta.ro", true },
{ "casa-su.casa", true },
+ { "casabouquet.com", true },
{ "casacameo.com", false },
{ "casadasportasejanelas.com", true },
+ { "casadellecose.com", true },
{ "casadoarbitro.com.br", true },
{ "casadowifi.com.br", true },
{ "casalindamex.com", true },
@@ -6205,6 +6257,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "casbia.info", true },
{ "casbuijs.nl", true },
{ "casburggraaf.com", true },
+ { "casc.cz", true },
{ "cascadesjobcorpscca.com", true },
{ "cascavelle.fr", true },
{ "cascavelle.nl", true },
@@ -6212,6 +6265,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "caseplus-daem.de", true },
{ "cash-4x4.com", true },
{ "cashati.com", true },
+ { "cashbook.co.tz", true },
+ { "cashbot.cz", true },
{ "cashlink.de", true },
{ "cashlink.io", true },
{ "cashlogic.ch", true },
@@ -6232,7 +6287,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "castible.de", true },
{ "castlecapers.com.au", true },
{ "castlecms.io", true },
- { "castlejackpot.com", true },
{ "castleking.net", true },
{ "castlekingdomstockport.co.uk", true },
{ "castlekingkent.co.uk", true },
@@ -6242,23 +6296,24 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "castles4rascalsiow.co.uk", true },
{ "castlesrus-kent.com", true },
{ "castleswa.com.au", true },
- { "casusgrillcaribbean.com", true },
{ "cat-blum.com", true },
{ "cat-box.de", true },
{ "cat.net", true },
{ "cat73.org", true },
{ "catalog.beer", true },
{ "catalogobiblioteca.com", true },
+ { "catalogoreina.com", true },
{ "catalystapp.co", true },
{ "catbold.space", true },
{ "catbull.com", true },
{ "catburton.co.uk", true },
{ "catchersgear.com", true },
{ "catchfotografie.nl", true },
+ { "catchhimandkeephim.com", true },
{ "catchief.com", true },
{ "catdecor.ru", true },
{ "catenacondos.com", true },
- { "catgirl.me", true },
+ { "catfooddispensersreviews.com", true },
{ "catharinesomerville.com", true },
{ "catharisme.eu", true },
{ "catharisme.net", true },
@@ -6267,6 +6322,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "catholics.dating", true },
{ "cathosa.nl", true },
{ "cativa.net", true },
+ { "catl.st", true },
{ "catmoose.ca", true },
{ "catnet.dk", false },
{ "cattivo.nl", false },
@@ -6277,19 +6333,21 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "caulong-ao.net", true },
{ "cav.ac", true },
{ "cavac.at", true },
- { "cavalierkingcharlesspaniel.com.br", true },
{ "cave-reynard.ch", true },
{ "cavevinsdefrance.fr", true },
{ "cavzodiaco.com.br", true },
+ { "cayafashion.de", true },
{ "caylercapital.com", true },
{ "cazaviajes.es", true },
{ "cazes.info", true },
{ "cb-crochet.com", true },
- { "cbamo.org", true },
{ "cbbank.com", true },
{ "cbc-hire.co.uk", true },
{ "cbcf.info", true },
+ { "cbd.casa", true },
{ "cbd.supply", true },
+ { "cbdev.de", true },
+ { "cbdmarket.space", true },
{ "cbecrft.net", true },
{ "cbintermountainrealty.com", true },
{ "cbr-xml-daily.ru", true },
@@ -6297,9 +6355,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cbw.sh", true },
{ "cc-brantomois.fr", true },
{ "ccac.gov", true },
+ { "ccavenue.com", true },
+ { "cccwien.at", true },
{ "ccgn.co", true },
{ "ccgx.de", true },
{ "ccja.ro", false },
+ { "ccoooss.com", true },
{ "ccprwebsite.org", true },
{ "ccsource.org", true },
{ "ccsys.com", true },
@@ -6308,7 +6369,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ccu.plus", true },
{ "ccv-deutschland.de", true },
{ "ccv.ch", true },
- { "ccv.eu", true },
{ "ccv.nl", true },
{ "cd-sport.com", true },
{ "cd.search.yahoo.com", false },
@@ -6321,12 +6381,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cdbtech.com", true },
{ "cdburnerxp.se", true },
{ "cdda.ch", true },
- { "cdeck.net", true },
{ "cdepot.eu", true },
{ "cdkeykopen.com", true },
{ "cdlcenter.com", true },
{ "cdn.ampproject.org", true },
- { "cdn.sx.cn", true },
{ "cdn6.de", true },
{ "cdncompanies.com", true },
{ "cdnjs.com", true },
@@ -6343,11 +6401,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cedriccassimo.com", true },
{ "cedricmartineau.com", true },
{ "ceebee.com", true },
- { "cefak.org.br", true },
{ "cejhon.cz", false },
{ "cekaja.com", true },
{ "celcomhomefibre.com.my", true },
- { "celebrityhealthcritic.com", true },
{ "celebrityscope.net", true },
{ "celectro-pro.com", true },
{ "celiendev.ch", true },
@@ -6360,7 +6416,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "celti.name", true },
{ "celuliteonline.com", true },
{ "cementscience.com", true },
- { "cemeteriat.com", true },
{ "ceml.ch", true },
{ "cenatorium.pl", true },
{ "censurfridns.dk", true },
@@ -6376,18 +6431,22 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "centralbank.ae", true },
{ "centralebigmat.eu", true },
{ "centralegedimat.eu", true },
+ { "centralmarket.com", true },
{ "centralmissourifoundationrepair.com", true },
+ { "centralpoint.be", false },
+ { "centralpoint.nl", false },
{ "centralstatecu.org", true },
- { "centralvoice.org", true },
{ "centrationgame.com", true },
{ "centredaccueil.fr", true },
{ "centreoeil.ch", true },
{ "centricbeats.com", true },
{ "centrobill.com", true },
+ { "centrodoinstalador.com.br", true },
{ "centrojovencuenca.es", true },
{ "centrosocialferrel.pt", true },
{ "centrumhodinek.cz", true },
{ "centruvechisv.ro", true },
+ { "centum.no", true },
{ "centura.de", true },
{ "centurialeonina.com", true },
{ "centurioninfosec.com", true },
@@ -6396,15 +6455,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "centurioninfosec.sg", true },
{ "centurionunderground.com", true },
{ "century-group.com", true },
- { "ceoimon.com", true },
{ "ceopedia.org", true },
+ { "ceoptique.com", true },
{ "ceramixcoating.nl", true },
{ "ceramiya.com", true },
{ "cerastar.com", true },
{ "cerber.us", true },
{ "cerberis.com", true },
{ "cerberusinformatica.it", true },
- { "cercevelet.com", true },
{ "cerebelo.info", true },
{ "cerena-silver.ru", true },
{ "ceres-corp.org", true },
@@ -6430,6 +6488,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "certifiednurses.org", true },
{ "certmonitor.com.au", true },
{ "certmonitor.net", true },
+ { "certnazionale.it", true },
{ "certspotter.com", true },
{ "certspotter.org", true },
{ "cervejista.com", true },
@@ -6448,13 +6507,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ceyizlikelisleri.com", true },
{ "cf-ide.de", true },
{ "cf-tm.net", true },
- { "cf11.de", true },
{ "cfa.gov", true },
{ "cfan.space", true },
{ "cfda.gov", true },
{ "cfdcre5.org", true },
{ "cfh.com", true },
- { "cfneia.org", true },
{ "cfno.org", true },
{ "cfo.gov", true },
{ "cfpa-formation.fr", true },
@@ -6476,6 +6533,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ch-laborit.fr", true },
{ "ch-sc.de", true },
{ "ch.search.yahoo.com", false },
+ { "ch47f.com", true },
{ "chabaojia.com", true },
{ "chabaudparfum.com", true },
{ "chabert-provence.fr", true },
@@ -6491,12 +6549,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "chaletmanager.com", true },
{ "chaletpierrot.ch", true },
{ "chaleur.com", true },
- { "chalker.io", true },
{ "challengeblog.org", true },
{ "challstrom.com", true },
{ "chamathellawala.com", true },
{ "chambion.ch", true },
- { "chameleon-ents.co.uk", true },
{ "champdogs.co.uk", true },
{ "champdogs.com", true },
{ "champicreuse.fr", true },
@@ -6527,6 +6583,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "chaosfield.at", true },
{ "chaoslab.org", true },
{ "chaosriftgames.com", true },
+ { "chaoswars.ddns.net", true },
{ "chaotichive.com", true },
{ "chaoticlaw.com", true },
{ "chapelaria.tf", true },
@@ -6541,6 +6598,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "charissadescande.com", true },
{ "charitylog.co.uk", true },
{ "charl.eu", true },
+ { "charlenevondell.com", true },
{ "charles-darwin.com", true },
{ "charlesbwise.com", true },
{ "charlesjay.com", true },
@@ -6561,6 +6619,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "charmander.me", true },
{ "charmingsaul.com", true },
{ "charmyadesara.com", true },
+ { "charr.xyz", true },
{ "chars.ga", true },
{ "charta-digitale-vernetzung.de", true },
{ "charteroak.org", true },
@@ -6568,10 +6627,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "chartpen.com", true },
{ "chartsy.de", true },
{ "charuru.moe", true },
- { "chasafilli.ch", true },
{ "chaseandzoey.de", true },
{ "chasetrails.co.uk", true },
- { "chasing-coins.com", true },
{ "chat-libera.org", true },
{ "chat-senza-registrazione.net", true },
{ "chat.cz", true },
@@ -6581,7 +6638,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "chatbot.one", true },
{ "chatbotclic.com", true },
{ "chatbotclick.com", true },
- { "chatbots.email", true },
{ "chatbots.systems", true },
{ "chatear.social", true },
{ "chateau-belvoir.com", true },
@@ -6606,7 +6662,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "chatzimanolis.gr", true },
{ "chaurocks.com", true },
{ "chaussenot.net", true },
- { "chaverde.org", true },
{ "chavetaro.com", true },
{ "chaz6.com", true },
{ "chazalet.fr", true },
@@ -6618,7 +6673,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "chcsct.com", true },
{ "chd-expert.fr", true },
{ "chdgaming.xyz", true },
- { "cheah.xyz", true },
{ "cheapalarmparts.com.au", true },
{ "cheapcaribbean.com", true },
{ "cheapessay.net", true },
@@ -6635,12 +6689,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cheapgeekts.com", false },
{ "cheapgoa.com", true },
{ "cheapiesystems.com", true },
- { "cheapssl.com.tr", true },
{ "cheapticket.in", true },
{ "cheapwritinghelp.com", true },
{ "check.torproject.org", false },
{ "checkecert.nl", true },
- { "checkhost.org", true },
{ "checkmateshoes.com", false },
{ "checkmyessay.com", true },
{ "checkmyessays.com", true },
@@ -6652,7 +6704,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "checktype.com", true },
{ "checkui.com", true },
{ "checkyourmath.com", true },
- { "checkyourmeds.com", true },
{ "checkyourprivilege.org", true },
{ "checkyourreps.org", true },
{ "checos.co.uk", true },
@@ -6661,29 +6712,31 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cheekymonkeysinflatables.co.uk", true },
{ "cheela.org", true },
{ "cheeseemergency.co.uk", true },
+ { "cheesefusion.com", true },
{ "cheesehosting.net", true },
{ "cheetahwerx.com", true },
{ "cheez.systems", true },
{ "cheezflix.uk", true },
{ "chehalemgroup.com", true },
+ { "cheladmin.ru", true },
{ "chelema.xyz", true },
{ "cheltenhambounce.co.uk", true },
{ "cheltenhambouncycastles.co.uk", true },
{ "cheltik.ru", true },
{ "chemicalcrux.org", true },
- { "chemicalguys-ruhrpott.de", true },
{ "chemiphys.com", true },
{ "chenapartment.com", true },
- { "chengtongled.com", true },
{ "chenkun.pro", true },
{ "chenky.com", true },
{ "chennien.com", true },
{ "chenqinghua.com", true },
{ "chentianyi.cn", true },
{ "chenzhekl.me", true },
+ { "cheolguso.com", true },
{ "cherevoiture.com", true },
{ "cherie-belle.com", true },
{ "cherrett.digital", true },
+ { "cherry-green.ch", true },
{ "cherryonit.com", true },
{ "cherrywoodtech.com", true },
{ "chertseybouncycastles.co.uk", true },
@@ -6693,6 +6746,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "chevymotor-occasions.be", true },
{ "chewey.de", true },
{ "chewey.org", true },
+ { "chez-janine.de", true },
{ "chez-oim.org", true },
{ "chez.moe", true },
{ "chfr.search.yahoo.com", false },
@@ -6708,9 +6762,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "chicisimo.com", true },
{ "chicolawfirm.com", true },
{ "chiemgauflirt.de", true },
+ { "chif16.at", true },
{ "chikan-beacon.net", true },
{ "chikatomo-ryugaku.com", true },
{ "chikazawa.info", true },
+ { "chikory.com", true },
{ "childcare.gov", true },
{ "childcounseling.org", true },
{ "childcustodylegalaid.org", true },
@@ -6718,20 +6774,20 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "childrenandmedia.org.au", true },
{ "childrenfirstalways.org", true },
{ "childreninadversity.gov", true },
+ { "childrens-room.com", true },
{ "childrensentertainmentleicester.co.uk", true },
{ "childrenspartiesrus.com", true },
{ "childstats.gov", true },
{ "childvisitationassistance.org", true },
+ { "childwelfare.gov", true },
{ "chilihosting.eu", true },
{ "chilio.net", true },
{ "chillebever.nl", true },
- { "chilli943.info", true },
{ "chima.net", true },
{ "chima.us", true },
{ "chimeratool.com", true },
{ "chimerity.com", true },
{ "chimpanzee.net", true },
- { "china-dhl.org", true },
{ "chinacdn.org", true },
{ "chinahighlights.ru", true },
{ "chinaspaceflight.com", true },
@@ -6745,7 +6801,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "chiralsoftware.com", true },
{ "chireiden.net", true },
{ "chiro-neuchatel.ch", true },
- { "chiropracticwpb.com", true },
{ "chiropraktik-riemann.de", true },
{ "chiropraticien-neuchatel.ch", true },
{ "chiropratique-neuchatel.ch", true },
@@ -6757,11 +6812,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "chitoku.jp", false },
{ "chksite.com", true },
{ "chl.la", true },
- { "chloeallison.co.uk", true },
{ "chloehorler.com", true },
{ "chloescastles.co.uk", true },
{ "chlth.com", true },
- { "chm.vn", true },
{ "chmsoft.com.ua", true },
{ "chmsoft.ru", true },
{ "chmurakotori.ml", true },
@@ -6772,11 +6825,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "chocolatesandhealth.com", true },
{ "chocolatier-tristan.ch", true },
{ "chocotough.nl", false },
- { "chodocu.com", true },
{ "choe.fi", true },
{ "choisirmonerp.com", true },
+ { "chokladfantasi.net", true },
{ "chollima.pro", true },
{ "chon.io", true },
+ { "chonghe.org", true },
{ "chook.as", true },
{ "choootto.club", true },
{ "choosemypc.net", true },
@@ -6803,38 +6857,38 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "chrismathys.com", true },
{ "chrismcclendon.com", true },
{ "chrismckee.co.uk", true },
+ { "chrismorgan.info", true },
{ "chrismurrayfilm.com", true },
{ "chrisnekarda.com", true },
- { "chrisnicholas.io", true },
{ "chrispstreet.com", true },
{ "christadelphiananswers.org", true },
{ "christadelphians.eu", true },
{ "christchurchbouncycastles.co.uk", true },
+ { "christec.net", true },
{ "christensenplace.us", true },
+ { "christerwaren.fi", true },
{ "christiaanconover.com", true },
{ "christian-gredig.de", true },
{ "christian-host.com", true },
{ "christian-liebel.com", true },
+ { "christian-stadelmann.de", true },
{ "christianbargon.de", false },
{ "christiancleva.com", true },
{ "christianfaq.org", true },
{ "christianforums.com", true },
{ "christiangehring.org", true },
- { "christianillies.de", true },
{ "christianjens.com", true },
{ "christianliebel.com", true },
{ "christianpeltier.com", true },
{ "christianpilgrimage.com.au", true },
{ "christians.dating", true },
{ "christianscholz.de", true },
- { "christianscholz.eu", true },
{ "christiehawkes.com", true },
{ "christiesantiques.com", true },
{ "christmascard.be", true },
{ "christmaspartyhire.co.uk", true },
{ "christoph-conrads.name", true },
{ "christophbartschat.com", true },
- { "christophebarbezat.ch", true },
{ "christopher-simon.de", true },
{ "christopherandcharlotte.uk", true },
{ "christopherburg.com", true },
@@ -6848,7 +6902,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "chriswarrick.com", true },
{ "chriswbarry.com", true },
{ "chriswells.io", true },
- { "chromaxa.com", true },
{ "chromcraft-revington.com", true },
{ "chrome-devtools-frontend.appspot.com", true },
{ "chrome.com", false },
@@ -6863,7 +6916,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "chronoshop.cz", true },
{ "chrpaul.de", true },
{ "chrstn.eu", true },
- { "chs.us", true },
{ "chsh.moe", true },
{ "chsterz.de", true },
{ "chua.family", true },
@@ -6875,9 +6927,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "chupadelfrasco.com", true },
{ "churchlinkpro.com", true },
{ "churchthemes.com", true },
- { "churchwebcanada.ca", true },
- { "churchwebsupport.com", true },
+ { "churningtracker.com", true },
{ "chxdf.net", true },
+ { "chyen.cc", true },
{ "chytraauta.cz", true },
{ "chziyue.com", true },
{ "ci-fo.org", true },
@@ -6887,7 +6939,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cianmawhinney.me", true },
{ "ciansc.com", true },
{ "ciat.no", false },
- { "cidadedopoker.com.br", true },
{ "cidbot.com", true },
{ "cidersus.com.ec", true },
{ "cie-theatre-montfaucon.ch", true },
@@ -6906,7 +6957,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cine.to", true },
{ "cinefilzonen.se", true },
{ "cinelite.club", true },
- { "cinema5.ru", false },
{ "cinemarxism.com", true },
{ "cinemysticism.com", true },
{ "cineplex.my", true },
@@ -6934,7 +6984,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cipri.nl", true },
{ "cipri.org", true },
{ "cipria.no", true },
- { "cipriano.nl", true },
{ "cipy.com", true },
{ "cir.is", true },
{ "circara.com", true },
@@ -6953,11 +7002,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ciscodude.net", false },
{ "cisoaid.com", true },
{ "ciss.ltd", true },
+ { "cisum-cycling.com", true },
{ "cisy.me", true },
{ "citationgurus.com", true },
{ "citcuit.in", true },
{ "cities.cl", true },
{ "citimarinestore.com", true },
+ { "citizen-cam.de", true },
{ "citizensbankal.com", true },
{ "citizenscience.gov", false },
{ "citizensleague.org", true },
@@ -6978,14 +7029,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "citysportapp.com", true },
{ "cityworksonline.com", true },
{ "ciubotaru.tk", true },
- { "civicunicorn.com", true },
- { "civicunicorn.us", true },
{ "civilg20.org", true },
{ "civillines.nl", true },
{ "cj-espace-vert.fr", true },
{ "cj-jackson.com", true },
- { "cjdpenterprises.com", true },
- { "cjdpenterprises.com.au", true },
{ "cjey.me", true },
{ "cjhzp.net", true },
{ "cjr.host", true },
@@ -7004,6 +7051,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ckostecki.de", true },
{ "cktennis.com", true },
{ "cl.search.yahoo.com", false },
+ { "clad.cf", true },
{ "claimconnect.com", true },
{ "claimconnect.us", true },
{ "claimjeidee.be", true },
@@ -7011,6 +7059,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "clairegold.com", true },
{ "clairescastles.co.uk", true },
{ "clanebouncycastles.com", true },
+ { "clangwarnings.com", true },
{ "clanrose.org.uk", true },
{ "clanthor.com", true },
{ "clanwarz.com", true },
@@ -7022,12 +7071,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "classdojo.com", true },
{ "classicalpilates.ca", true },
{ "classics.io", true },
+ { "classictheatrecumbria.co.uk", true },
{ "classpoint.cz", true },
{ "classroom.google.com", true },
+ { "classroomconductor.com", true },
{ "classroomcountdown.co.nz", true },
{ "classteaching.com.au", true },
{ "claude-leveille.com", true },
- { "claude.tech", true },
{ "claudia-urio.com", true },
{ "claus-bahr.de", true },
{ "clauseriksen.net", true },
@@ -7042,13 +7092,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cleanbrowsing.org", true },
{ "cleancode.club", true },
{ "cleanhouse2000.us", true },
+ { "cleaningservicejulai.com", true },
{ "cleansewellness.com", true },
- { "clear.ml", true },
{ "clearance365.co.uk", true },
{ "clearblueday.co.uk", true },
{ "clearbreezesecuritydoors.com.au", true },
{ "clearip.com", true },
- { "clearkonjac.com", true },
{ "clearsettle-admin.com", true },
{ "clemenscompanies.com", true },
{ "clement-beaufils.fr", true },
@@ -7062,16 +7111,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "clicandfioul.com", true },
{ "clicecompre.com.br", true },
{ "clicheshishalounge.co.uk", true },
- { "click-2-order.co.uk", true },
{ "click-licht.de", true },
- { "click2order.co.uk", true },
{ "clickclock.cc", true },
{ "clickenergy.com.au", true },
{ "clickforclever.com", true },
- { "clickomobile.com", true },
{ "clickphish.com", true },
{ "clicksaveandprint.com", true },
- { "clicktenisdemesa.com.br", true },
{ "clien.net", true },
{ "client.coach", true },
{ "clientboss.com", true },
@@ -7083,7 +7128,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "climatestew.com", true },
{ "clindoeilmontagne.com", true },
{ "clingout.com", true },
- { "clinicadam.com", true },
+ { "clinicadam.com", false },
{ "clinicadelogopedia.net", true },
{ "clinicalrehabilitation.info", true },
{ "clinicaltrials.gov", true },
@@ -7092,6 +7137,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cliniquevethuy.be", true },
{ "clintonlibrary.gov", true },
{ "clintonplasticsurgery.com", true },
+ { "clip.ovh", false },
{ "clipclip.com", true },
{ "clive.io", true },
{ "clmde.de", true },
@@ -7102,16 +7148,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "clochix.net", true },
{ "clockcaster.com", true },
{ "clockworksms.com", true },
- { "clod-hacking.com", true },
{ "clojurescript.ru", true },
{ "cloppenburg-autmobil.com", true },
{ "cloppenburg-automobil.com", true },
{ "clorik.com", true },
{ "clorophilla.net", true },
+ { "closeli.cn", true },
{ "closelinksecurity.co.uk", true },
{ "closelinksecurity.com", true },
{ "closetemail.com", true },
- { "closient.com", true },
{ "cloturea.fr", true },
{ "cloud-surfer.net", true },
{ "cloud.bugatti", true },
@@ -7121,35 +7166,33 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cloud42.ch", false },
{ "cloud9bouncycastlehire.com", true },
{ "cloudapps.digital", true },
- { "cloudbased.info", true },
{ "cloudbolin.es", true },
{ "cloudbreaker.de", true },
{ "cloudbrothers.info", true },
- { "cloudcactuar.com", true },
+ { "cloudcactuar.com", false },
{ "cloudcaprice.net", true },
{ "cloudcloudcloud.cloud", true },
{ "cloudconsulting.net.za", true },
{ "cloudconsulting.org.za", true },
{ "cloudconsulting.web.za", true },
{ "cloudey.net", true },
- { "cloudfiles.at", true },
{ "cloudflare-dns.com", true },
{ "cloudflare.com", true },
{ "cloudflareonazure.com", true },
{ "cloudia.org", true },
{ "cloudily.com", true },
+ { "cloudimproved.com", true },
{ "cloudkit.pro", false },
{ "cloudlight.biz", true },
- { "cloudmigrator365.com", true },
{ "cloudnote.cc", true },
+ { "cloudns.net", true },
{ "cloudoptimizedsmb.com", true },
{ "cloudoptimus.com", true },
- { "cloudpagesforwork.com", true },
- { "cloudpebble.net", true },
{ "cloudpengu.in", true },
{ "cloudpipes.com", true },
{ "cloudsecurityalliance.org", true },
{ "cloudservice.io", true },
+ { "cloudservices.nz", true },
{ "cloudsocial.io", true },
{ "cloudspace-analytics.com", true },
{ "cloudspeedy.net", true },
@@ -7188,7 +7231,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cluefulca.com", true },
{ "cluefulca.net", true },
{ "cluefulca.org", true },
- { "cluster.biz.tr", true },
{ "clusteranalyse.net", true },
{ "clusterfuck.nz", true },
{ "clustermaze.net", true },
@@ -7218,6 +7260,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cn.search.yahoo.com", false },
{ "cn8522.com", true },
{ "cna-aiic.ca", true },
+ { "cna5.cc", true },
{ "cnam-idf.fr", true },
{ "cnam.net", true },
{ "cnatraining.network", true },
@@ -7225,6 +7268,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cnc-lehrgang.de", true },
{ "cncado.net", true },
{ "cncbazar365.com", true },
+ { "cncmachinemetal.com", true },
{ "cncrans.ch", true },
{ "cnet-hosting.com", true },
{ "cni-certing.it", true },
@@ -7243,8 +7287,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "coastline.net.au", true },
{ "coathangastrangla.com", true },
{ "coathangastrangler.com", true },
- { "coathangerstrangla.com", true },
- { "coathangerstrangler.com", true },
{ "coatl-industries.com", true },
{ "cobalt.io", true },
{ "cobaltgp.com", true },
@@ -7261,10 +7303,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cocoaheads.at", false },
{ "cocoamexico.com", true },
{ "cocodemy.com", true },
+ { "cocodroid.com", true },
{ "coconutoil24.com", true },
{ "cocoscastles.co.uk", true },
{ "cocquyt-usedcars.be", true },
{ "cocubes.com", true },
+ { "cocyou.ooo", true },
{ "coda.io", true },
{ "coda.moe", true },
{ "coda.today", true },
@@ -7298,7 +7342,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "codercy.com", true },
{ "codereview.appspot.com", false },
{ "codereview.chromium.org", false },
- { "coderhangout.com", true },
{ "coderme.com", true },
{ "codersbistro.com", true },
{ "codes.pk", true },
@@ -7313,6 +7356,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "codeux.com", false },
{ "codeux.info", false },
{ "codeux.net", false },
+ { "codeventure.de", true },
{ "codeversetech.com", true },
{ "codewild.de", true },
{ "codeyellow.nl", true },
@@ -7330,7 +7374,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "codyevanscomputer.com", true },
{ "codymoniz.com", true },
{ "codyqx4.com", true },
- { "coecrafters.com", true },
{ "coffee-mamenoki.jp", true },
{ "coffeeandteabrothers.com", true },
{ "coffeetocode.me", true },
@@ -7341,6 +7384,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cognitip.com", true },
{ "cognitivecomputingconsortium.com", true },
{ "cognitohq.com", true },
+ { "cogsquad.house", true },
{ "coi-verify.com", true },
{ "coiffeurschnittstelle.ch", true },
{ "coigach-assynt.org", true },
@@ -7384,8 +7428,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "colengo.com", true },
{ "colf.online", true },
{ "colibris.xyz", true },
+ { "colincampbell.me", true },
{ "colinchartier.com", true },
{ "colincogle.name", true },
+ { "colinsnaith.co.uk", true },
{ "colinstark.ca", true },
{ "collabora-office.com", true },
{ "collabora.ca", true },
@@ -7405,9 +7451,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "collbox.co", true },
{ "collectdocs.com", true },
{ "collectfood.com", true },
- { "collectiblebeans.com", true },
{ "collectivesupply.com", true },
{ "collectorknives.net", true },
+ { "collectorsystems.com", true },
{ "collegeconnexxions.com.au", true },
{ "collegenavigator.gov", true },
{ "collegepaperworld.com", true },
@@ -7424,6 +7470,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "colorbrush.ru", true },
{ "colorcodedlyrics.com", true },
{ "colorectalcompounding.com", true },
+ { "colorfuldots.com", true },
{ "colorhexa.com", true },
{ "coloringnotebook.com", true },
{ "coloristcafe.com", true },
@@ -7435,18 +7482,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "colson-occasions.be", true },
{ "columbuswines.com", true },
{ "colyakootees.com", true },
+ { "com-in.de", true },
{ "comalia.com", true },
{ "comarkinstruments.net", true },
{ "combatircelulitis.com", true },
{ "combattrecellulite.com", true },
{ "combron.be", true },
+ { "combron.co.uk", true },
{ "combron.com", true },
{ "combron.nl", true },
- { "comchezmeme.com", true },
{ "comcol.nl", true },
+ { "comdotgame.com", true },
{ "comdurav.com", true },
{ "comercialtpv.com", true },
- { "comercialtrading.eu", true },
{ "comerford.net", true },
{ "comestoarra.com", true },
{ "cometbot.cf", true },
@@ -7466,6 +7514,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "comm.cx", true },
{ "commco.nl", true },
{ "commechezvous.ch", true },
+ { "commerce.gov", true },
{ "commercial-academy.fr", true },
{ "commissionagenda.com", true },
{ "commitsandrebases.com", true },
@@ -7476,6 +7525,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "communityblog.fedoraproject.org", true },
{ "communitycodeofconduct.com", true },
{ "communote.net", true },
+ { "como-se-escribe.com", true },
+ { "comocurarlagastritistratamientonatural.com", true },
{ "comodesinflamarlashemorroides.org", true },
{ "comodo.nl", true },
{ "comodormirmasrapido.com", true },
@@ -7496,12 +7547,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "compagnia-buffo.de", true },
{ "compagniemartin.com", true },
{ "comparatif-moto.fr", true },
+ { "compareandrecycle.co.uk", true },
{ "compareandrecycle.com", false },
{ "compareinsurance.com.au", true },
{ "comparesoft.com", true },
{ "comparexcloudcenter.com", true },
{ "compartir.party", true },
{ "compassdirectportal.com", true },
+ { "compassfinance.com", true },
{ "compassintladv.com", true },
{ "compasslos.com", true },
{ "compeat.com", true },
@@ -7521,10 +7574,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "compoundingrxusa.com", true },
{ "compraneta.com", false },
{ "compreautomacao.com.br", true },
- { "compredietlight.com.br", true },
{ "compree.com", true },
- { "compsmag.com", true },
- { "comptrollerofthecurrency.gov", true },
{ "compubench.com", true },
{ "compucastell.ch", true },
{ "compucorner.mx", true },
@@ -7534,6 +7584,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "computer-acquisti.com", true },
{ "computeracademy.co.za", true },
{ "computerassistance.co.uk", true },
+ { "computerbas.nl", true },
{ "computerbase.de", true },
{ "computerhilfe-feucht.de", true },
{ "computernetwerkwestland.nl", true },
@@ -7550,7 +7601,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "concertsenboite.fr", true },
{ "concertsto.com", true },
{ "conciliumnotaire.ca", true },
- { "conclave.global", true },
{ "concreterepairatlanta.com", true },
{ "concursopublico.com.br", true },
{ "concursos.com.br", true },
@@ -7565,6 +7615,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "condroz-motors.be", true },
{ "conectadev.com", true },
{ "conectar.ru", true },
+ { "conectumfinanse.pl", true },
{ "conejovalleyelectrical.com", true },
{ "conejovalleyelectrician.com", true },
{ "conejovalleyexteriorlighting.com", true },
@@ -7588,7 +7639,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "conkret.de", true },
{ "conkret.mobi", true },
{ "conmedapps.com", true },
- { "connaitre-les-astres.com", true },
{ "connect-ed.network", true },
{ "connect.dating", true },
{ "connect.facebook.net", true },
@@ -7602,11 +7652,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "connexas.eu", true },
{ "connext.de", true },
{ "connictro.de", true },
+ { "conniesacademy.com", true },
{ "connorsmith.co", true },
{ "connyduck.at", true },
{ "conocimientosdigitales.com", true },
{ "conory.com", true },
- { "conpins.nl", true },
{ "conrad-kostecki.de", true },
{ "conradkostecki.de", true },
{ "conrail.blue", true },
@@ -7615,6 +7665,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "consec-systems.de", true },
{ "conseil-gli.fr", true },
{ "consejosdenutricion.com", true },
+ { "consensoprivacy.it", true },
+ { "conservados.com.br", true },
{ "conservatoriesincornwall.com", true },
{ "consideredgifts.com", true },
{ "consilium-vitae.ch", true },
@@ -7628,12 +7680,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "constant-rough.de", true },
{ "constares.de", true },
{ "construct-trust.com", true },
+ { "constructexpres.ro", true },
+ { "construction-student.co.uk", true },
{ "constructionjobs.com", true },
{ "consul.io", true },
{ "consulenza.pro", true },
- { "consultation.biz.tr", true },
{ "consultimator.com", true },
+ { "consultimedia.de", true },
{ "consultpetkov.com", true },
+ { "consulvation.com", true },
{ "consumeractionlawgroup.com", true },
{ "consumerfiles.com", true },
{ "consumersentinel.gov", true },
@@ -7647,11 +7702,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "contentpass.net", true },
{ "contessa32experience.com", true },
{ "contextplatform.com", true },
+ { "conti-profitlink.co.uk", true },
{ "continuum.memorial", true },
{ "contrabass.net", true },
{ "contractormountain.com", true },
{ "contractwriters.com", true },
- { "contraout.com", true },
{ "contraspin.co.nz", true },
{ "contratatupoliza.com", true },
{ "contributor.google.com", false },
@@ -7670,6 +7725,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "convert.im", true },
{ "convert.zone", true },
{ "converter.ml", true },
+ { "converticacommerce.com", false },
{ "convexset.org", true },
{ "convocatoriafundacionpepsicomexico.org", false },
{ "cookeatup.com", true },
@@ -7691,8 +7747,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cookwithmanali.com", true },
{ "cool-parties.co.uk", true },
{ "cool-wallpapers.jp", true },
- { "cool110.tk", true },
- { "cool110.xyz", true },
{ "coolattractions.co.uk", true },
{ "cooldan.com", true },
{ "coole-fete.de", true },
@@ -7701,7 +7755,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "coolprylar.se", true },
{ "coolrc.me", true },
{ "coolviewthermostat.com", true },
+ { "coolwallet.io", true },
{ "coopens.com", true },
+ { "coor.fun", true },
{ "coore.jp", true },
{ "coorpacademy.com", true },
{ "copdfoundation.org", true },
@@ -7709,7 +7765,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "copperhead.co", true },
{ "copperheados.com", true },
{ "copplaw.com", true },
- { "coptic-treasures.com", true },
{ "coptkm.cz", true },
{ "copycaught.co", true },
{ "copycaught.net", true },
@@ -7720,13 +7775,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "copyright-watch.org", true },
{ "copytrack.com", true },
{ "corbi.net.au", true },
- { "corbinhesse.com", true },
+ { "cordep.biz", true },
{ "corder.tech", true },
{ "cordeydesign.ch", true },
{ "cordis.io", true },
{ "cordis.tk", true },
{ "cordlessdog.com", true },
- { "core-concepts.de", true },
+ { "core-concepts.de", false },
{ "core-networks.de", true },
{ "core.mx", true },
{ "core.org.pt", false },
@@ -7744,7 +7799,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "coribi.com", true },
{ "corintech.net", true },
{ "corisu.co", true },
- { "coriver.me", true },
{ "corkedwinebar.com", true },
{ "corksoncolumbus.com", true },
{ "corlija.com", true },
@@ -7754,7 +7808,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cornerstonecmc.org", true },
{ "corniche.com", true },
{ "corningcu.org", true },
- { "cornodo.com", true },
{ "corona-academy.com", true },
{ "corona-renderer.cloud", true },
{ "corona-renderer.com", true },
@@ -7777,6 +7830,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "correctiv.org", true },
{ "corrupted.io", true },
{ "corsa-b.uk", true },
+ { "corsectra.com", true },
+ { "corsihaccpsicurezzalavoro.it", true },
{ "cortexitrecruitment.com", true },
{ "cortexx.nl", true },
{ "cortis-consulting.ch", true },
@@ -7784,6 +7839,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "corvus.eu.org", true },
{ "coryadum.com", true },
{ "corytyburski.com", true },
+ { "cosasque.com", true },
{ "cosciamoos.com", true },
{ "cosirex.com", true },
{ "coslinker.com", true },
@@ -7794,6 +7850,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cosmeticos-naturales.com", true },
{ "cosmeticosdelivery.com.br", true },
{ "cosmic-os.org", true },
+ { "cosmicnavigator.com", true },
{ "cosmodacollection.com", true },
{ "cosmofunnel.com", true },
{ "cosmundi.de", true },
@@ -7807,12 +7864,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "costreportdata.com", false },
{ "costulessdirect.com", true },
{ "coteries.com", true },
- { "cotonea.de", true },
{ "cotonmusic.ch", true },
{ "cotta.dk", true },
{ "cotwe-ge.ch", true },
{ "cougar.dating", true },
- { "counselling.network", true },
{ "counstellor.com", true },
{ "counter-team.ch", true },
{ "counterglobal.com", true },
@@ -7820,6 +7875,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "countingto.one", true },
{ "countryattire.com", true },
{ "countrybrewer.com.au", true },
+ { "countryfrog.uk", true },
{ "countryhouseresort.com", true },
{ "countryoutlaws.ca", true },
{ "countybankdel.com", true },
@@ -7832,7 +7888,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "coursera.org", true },
{ "courtlistener.com", true },
{ "couscous.recipes", true },
- { "cousincouples.com", true },
{ "coussinsky.net", true },
{ "covbounce.co.uk", true },
{ "covenantoftheriver.org", true },
@@ -7845,16 +7900,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cowbird.org", true },
{ "cowboyim.com", true },
{ "coweo.cz", true },
- { "coworkingmanifesto.com", true },
{ "coxxs.me", true },
{ "coxxs.moe", true },
{ "cozitop.com.br", true },
- { "cozmaadrian.ro", true },
{ "cozo.me", true },
- { "cozy.io", true },
- { "cozycloud.cc", true },
{ "cozyeggdesigns.com", true },
- { "cpahunt.com", true },
+ { "cp-st-martin.be", true },
+ { "cpahunt.com", false },
{ "cpbapremiocaduceo.com.ar", true },
{ "cpcheats.co", true },
{ "cpd-education.co.uk", true },
@@ -7864,9 +7916,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cppan.org", true },
{ "cppressinc.com", true },
{ "cpqcol.gov.co", true },
+ { "cprheartcenter.com", true },
{ "cprnearme.com", true },
{ "cptoon.com", true },
- { "cpu.biz.tr", true },
{ "cpvmatch.eu", true },
{ "cpy.pt", true },
{ "cqchome.com", true },
@@ -7885,12 +7937,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "craftinghand.com", true },
{ "craftinginredlipstick.com", true },
{ "craftist.de", true },
- { "craftngo.hu", true },
{ "craftsmandruggets.com", true },
{ "craftwmcp.xyz", true },
{ "craftyguy.net", true },
{ "craftyphotons.net", true },
{ "crag.com.tw", true },
+ { "craigary.net", true },
{ "craigbates.co.uk", true },
{ "craigfrancis.co.uk", true },
{ "craigrouse.com", true },
@@ -7911,7 +7963,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "crazydomains.co.uk", true },
{ "crazydomains.com.au", true },
{ "crazydomains.in", true },
- { "crazyfamily11.de", true },
{ "crazymeeshu.com", true },
{ "crazynoisybizarre.town", true },
{ "crazypaul.com", true },
@@ -7922,10 +7973,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "crea-shops.ch", true },
{ "crea.bg", true },
{ "creadstudy.com", true },
+ { "crealogix-online.com", true },
{ "creamcastles.co.uk", true },
{ "creared.edu.co", true },
{ "create-ls.jp", true },
{ "create-together.nl", true },
+ { "createme.com.pl", true },
{ "createursdefilms.com", true },
{ "creatieven.com", true },
{ "creation-contemporaine.com", true },
@@ -7941,6 +7994,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "creativedigital.co.nz", true },
{ "creativefolks.co.uk", true },
{ "creativefreedom.ca", true },
+ { "creativeink.de", true },
{ "creativekkids.com", true },
{ "creativelaw.eu", true },
{ "creativeliquid.com", true },
@@ -7962,7 +8016,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "creditkarma.com", true },
{ "creditos-rapidos.com", true },
{ "creditproautos.com", false },
- { "creditreporttips.net", true },
{ "creeks-coworking.com", true },
{ "creep.im", true },
{ "creepycraft.nl", true },
@@ -7987,12 +8040,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "crgm.net", true },
{ "criadorespet.com.br", true },
{ "cribcore.com", true },
+ { "crickey.eu", true },
{ "criena.com", true },
{ "criena.net", true },
+ { "crimefreeliving.com", true },
{ "crimevictims.gov", true },
{ "criminal-attorney.ru", true },
{ "criminal.enterprises", true },
{ "crimson.no", true },
+ { "crip-usk.ba", true },
{ "crisisactual.com", true },
{ "crisisnextdoor.gov", true },
{ "crisp.chat", true },
@@ -8009,9 +8065,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "crizin.io", true },
{ "crm.onlime.ch", false },
{ "croceverdevb.it", true },
+ { "crochetnerd.com", true },
{ "croisedanslemetro.com", true },
{ "croisieres.discount", true },
{ "croixblanche-haguenau.fr", true },
+ { "cromefire.myds.me", true },
{ "cronberg.ch", true },
{ "croncron.io", true },
{ "cronix.cc", true },
@@ -8035,7 +8093,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "crossorig.in", true },
{ "crossoverit.com", true },
{ "crosssellguide.com", true },
- { "crow.tw", true },
{ "crowdbox.net", true },
{ "crowdcloud.be", true },
{ "crowdliminal.com", true },
@@ -8050,7 +8107,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "croydonbouncycastles.co.uk", true },
{ "crrev.com", true },
{ "crstat.ru", true },
- { "crt.sh", true },
{ "crt2014-2024review.gov", true },
{ "crumbcontrol.com", true },
{ "crunchrapps.com", true },
@@ -8072,16 +8128,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "crypto.cat", false },
{ "crypto.graphics", true },
{ "crypto.is", false },
- { "cryptobells.com", false },
{ "cryptobin.co", true },
{ "cryptocon.org", true },
- { "cryptoegg.ca", true },
{ "cryptofan.org", true },
- { "cryptofrog.co", true },
{ "cryptography.ch", true },
{ "cryptography.io", true },
{ "cryptoguidemap.com", true },
- { "cryptoisnotacrime.org", true },
{ "cryptojourney.com", true },
{ "cryptolinc.com", true },
{ "cryptology.ch", true },
@@ -8107,18 +8159,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cryz.ru", true },
{ "cs2016.ch", true },
{ "csabg.org", true },
+ { "csbgtribalta.com", true },
{ "csbs.fr", true },
{ "csbuilder.io", true },
+ { "csca.me", true },
{ "cscdn.net", true },
{ "csd-sevnica.si", true },
- { "cser.me", true },
{ "csfcloud.com", true },
{ "csfd.cz", true },
{ "csfloors.co.uk", true },
{ "csfm.com", true },
- { "csgo.help", true },
{ "csgo.su", true },
- { "csgogamers.com", false },
{ "csgohandouts.com", true },
{ "csgoswap.com", true },
{ "csgotwister.com", true },
@@ -8138,6 +8189,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cssaunion.com", true },
{ "cstb.ch", true },
{ "cstp-marketing.com", true },
+ { "csu.st", true },
{ "csuw.net", true },
{ "csvalpha.nl", true },
{ "cswarzone.com", true },
@@ -8166,6 +8218,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cubecraft.net", true },
{ "cubecraftstore.com", true },
{ "cubecraftstore.net", true },
+ { "cubekrowd.net", true },
{ "cubia.de", true },
{ "cubia3.com", true },
{ "cubia4.com", true },
@@ -8182,12 +8235,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cuecasonline.com.br", true },
{ "cuentasmutualamr.org.ar", true },
{ "cuetoems.com", true },
+ { "cuibonobo.com", true },
{ "cuisinezest.com", true },
{ "cultiv.nl", true },
{ "cultivo.bio", true },
{ "cultofd50.org", true },
{ "cultofperf.org.uk", true },
- { "culture-school.top", true },
{ "culturedcode.com", true },
{ "cultureelbeleggen.nl", true },
{ "culturerain.com", true },
@@ -8205,7 +8258,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cur.by", true },
{ "curacao-firma.com", true },
{ "curamail.co.uk", true },
- { "curatedgeek.com", true },
+ { "curareldolordeespalda.com", true },
{ "curbside.com", true },
{ "curia.fi", true },
{ "curieux.digital", true },
@@ -8213,7 +8266,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "curiosity-driven.org", true },
{ "curlybracket.co.uk", true },
{ "currency-strength.com", true },
- { "current.com", true },
{ "currentlystreaming.com", true },
{ "currentobserver.com", true },
{ "currynissanmaparts.com", true },
@@ -8237,14 +8289,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "custodyxchange.com", true },
{ "customdissertation.com", true },
{ "customerbox.ir", true },
+ { "customfitbymj.net", true },
{ "customfitmarketing.com", true },
{ "customgear.com.au", true },
{ "customizeyourshower.com", true },
+ { "customizeyoursink.com", true },
{ "customromlist.com", true },
{ "customshort.link", true },
{ "customwritingservice.com", true },
{ "customwritten.com", true },
{ "cutephil.com", true },
+ { "cutimbo.com", true },
{ "cutimbo.ovh", true },
{ "cutner.co", true },
{ "cuvva.co", true },
@@ -8275,10 +8330,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cvv.cn", true },
{ "cw.center", true },
{ "cwagner.me", true },
- { "cwarren.is", true },
{ "cwarren.org", true },
{ "cwbrtrust.ca", true },
{ "cwgaming.co.uk", true },
+ { "cwinfo.fi", true },
{ "cwmart.in", true },
{ "cwningen.cymru", false },
{ "cwrcoding.com", true },
@@ -8291,6 +8346,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cybercrew.cc", true },
{ "cybercrime-forschung.de", true },
{ "cyberduck.io", true },
+ { "cyberdyne-industries.net", true },
+ { "cyberexplained.info", true },
{ "cyberfrancais.ro", true },
{ "cybergrx.com", true },
{ "cyberguerrilla.info", true },
@@ -8301,8 +8358,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cybermeldpunt.nl", true },
{ "cyberoptic.de", true },
{ "cyberphaze.com", true },
+ { "cyberpioneer.net", false },
+ { "cyberpubonline.com", true },
{ "cyberregister.nl", true },
{ "cyberregister.org", true },
+ { "cybersantri.com", true },
+ { "cybersecurity.nz", true },
{ "cybersecuritychallenge.be", true },
{ "cybersecurityketen.nl", true },
{ "cyberseguranca.com.br", true },
@@ -8311,7 +8372,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cybersmart.co.uk", true },
{ "cybersmartdefence.com", true },
{ "cyberspace.community", true },
- { "cyberspace.today", true },
{ "cyberspect.com", true },
{ "cyberspect.io", true },
{ "cyberstatus.de", true },
@@ -8320,7 +8380,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cyberwars.dk", true },
{ "cyberwire.nl", true },
{ "cyberxpert.nl", true },
- { "cybit.io", true },
{ "cybozu.cn", true },
{ "cybozu.com", true },
{ "cybozulive-dev.com", true },
@@ -8330,13 +8389,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cyclisjumper.gallery", true },
{ "cyclop-editorial.fr", true },
{ "cydetec.com", true },
- { "cyelint.com", true },
{ "cyfly.org", true },
{ "cygnaltech.com", true },
{ "cygnan.com", true },
{ "cygnatus.com", true },
{ "cygnius.net", true },
- { "cygu.ch", true },
{ "cyhour.com", true },
{ "cykelbanor.se", true },
{ "cylindricity.com", true },
@@ -8351,6 +8408,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cyph.video", true },
{ "cyph.ws", true },
{ "cypherpunk.at", true },
+ { "cypherpunk.com", true },
{ "cypressinheritancesaga.com", true },
{ "cypresslegacy.com", true },
{ "cyprus-company-service.com", true },
@@ -8361,19 +8419,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cytegic-update-packages.com", true },
{ "cyumus.com", true },
{ "cyyzaid.cn", true },
- { "czakey.net", true },
{ "czbix.com", true },
{ "czc.cz", true },
{ "czechamlp.com", true },
{ "czechvirus.cz", true },
{ "czerno.com", true },
{ "czfa.pl", true },
- { "czk.mk", true },
{ "d-20.fr", true },
{ "d-designerin.de", true },
{ "d-eisenbahn.com", true },
{ "d-loop.de", true },
- { "d-macindustries.com", true },
{ "d-msg.com", true },
{ "d-parts24.de", true },
{ "d-quantum.com", true },
@@ -8389,8 +8444,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "d2s.uk", true },
{ "d3njjcbhbojbot.cloudfront.net", true },
{ "d3xt3r01.tk", true },
+ { "d3xx3r.de", true },
{ "d42.no", true },
- { "d4wson.com", true },
{ "d4x.de", true },
{ "d66.nl", true },
{ "d8.io", true },
@@ -8413,7 +8468,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dadrian.io", true },
{ "daduke.org", true },
{ "daemen.org", true },
- { "daemon.xin", true },
{ "daemonslayer.net", true },
{ "daemwool.ch", true },
{ "daevel.fr", true },
@@ -8440,7 +8494,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "daisypeanut.com", true },
{ "daiwai.de", false },
{ "daiweihu.com", true },
- { "daiyuu.jp", true },
{ "dak.org", true },
{ "daknob.net", true },
{ "daktarisys.com", true },
@@ -8458,6 +8511,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dalmatiersheusden.be", true },
{ "damaged.org", true },
{ "damasexpress.com", true },
+ { "damghaem.ir", true },
{ "damicris.ro", true },
{ "damienoreilly.org", true },
{ "damienpontifex.com", true },
@@ -8480,7 +8534,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dancingshiva.at", true },
{ "dandenongroadapartments.com.au", true },
{ "daneandthepain.com", true },
- { "dango.in", true },
{ "danhalliday.com", true },
{ "daniel-baumann.ch", true },
{ "daniel-cholewa.de", true },
@@ -8492,7 +8545,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "danielas.boutique", true },
{ "danielehniss.de", true },
{ "danielepestilli.com", true },
+ { "danielgorr.de", true },
{ "danielheal.net", true },
+ { "danielhinterlechner.eu", true },
{ "danielhochleitner.de", true },
{ "danieljamesscott.org", true },
{ "danieljireh.com", true },
@@ -8503,15 +8558,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "danielmoch.com", true },
{ "danielmostertman.com", false },
{ "danielmostertman.nl", false },
+ { "danielpeukert.cz", true },
{ "danielrozenberg.com", true },
{ "danielsblog.org", true },
{ "danielschreurs.com", true },
{ "danielstach.cz", true },
{ "danielsteiner.net", true },
{ "danielstiner.me", true },
+ { "danielt.co.uk", true },
{ "danielthompson.info", true },
{ "danieltollot.de", true },
- { "danielverlaan.nl", true },
{ "danielvoogsgerd.nl", true },
{ "danifabi.eu", true },
{ "danilapisarev.com", true },
@@ -8522,13 +8578,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "danla.nl", true },
{ "danmaby.com", true },
{ "danmarksbedstefredagsbar.dk", true },
+ { "danmarksflyttemand.dk", true },
+ { "danmassarano.com", true },
{ "danminkevitch.com", true },
{ "danna-salary.com", true },
{ "danny-tittel.de", true },
{ "danny.fm", true },
{ "dannycairns.com", true },
{ "dannyrohde.de", true },
- { "dannystevens.co.uk", true },
{ "danonsecurity.com", true },
{ "danotage.tv", true },
{ "danova.de", true },
@@ -8542,6 +8599,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dansk-skole.de", true },
{ "dansk777.dk", true },
{ "danskoferie.dk", true },
+ { "danslan.org", true },
{ "danstillman.com", true },
{ "dantelistan.com", true },
{ "dantransports.fr", true },
@@ -8551,7 +8609,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "danyabanya.com", true },
{ "dao.spb.su", true },
{ "daoro.net", true },
- { "daphne.informatik.uni-freiburg.de", true },
{ "dapim.co.il", true },
{ "daplie.com", true },
{ "daracokorilo.com", true },
@@ -8564,9 +8621,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "daren.com.br", true },
{ "dareyou.be", true },
{ "dariaburger.de", true },
+ { "darinjohnson.ca", true },
{ "darinkotter.com", true },
{ "darioackermann.ch", true },
- { "dariosirangelo.me", true },
{ "darioturchetti.me", true },
{ "darisni.me", true },
{ "dark-infection.de", true },
@@ -8577,7 +8634,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "darkengine.net", true },
{ "darkeststar.org", true },
{ "darkfire.ch", true },
- { "darkishgreen.com", true },
{ "darknetlive.com", true },
{ "darknight.blog", true },
{ "darkroomsaredead.com", true },
@@ -8592,7 +8648,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "darkx.me", true },
{ "darom.jp", true },
{ "darookee.net", false },
- { "darrenm.net", true },
{ "darshnam.com", true },
{ "dart-tanke.com", true },
{ "dart-tanke.de", true },
@@ -8602,6 +8657,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dartsdon.jp", true },
{ "dartshopmn.nl", true },
{ "darwinkel.net", true },
+ { "daryl.moe", true },
{ "darylcumbo.net", true },
{ "das-forum24.de", true },
{ "das-mediale-haus.de", true },
@@ -8625,13 +8681,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "datacenternews.asia", true },
{ "datacenternews.co.nz", true },
{ "datacentrenews.eu", true },
- { "datacool.tk", true },
{ "datadit.hu", true },
{ "datadyne.technology", true },
+ { "datafd.com", true },
+ { "datafd.net", true },
{ "dataformers.at", true },
{ "dataharvest.at", true },
- { "datahoarder.download", true },
{ "datahoarder.xyz", true },
+ { "datahoarderschool.club", true },
{ "datakick.org", true },
{ "datalife.gr", true },
{ "datalysis.ch", true },
@@ -8639,14 +8696,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "datapun.ch", true },
{ "datapure.net", true },
{ "dataregister.info", true },
+ { "datascience.cafe", true },
{ "datascience.ch", true },
{ "datascomemorativas.com.br", true },
- { "datasharesystem.com", true },
{ "dataskydd.net", true },
{ "dataspace.pl", true },
{ "dataswamp.org", true },
{ "datatekniikka.fi", false },
- { "datateknologsektionen.se", true },
+ { "datateknologsektionen.se", false },
{ "datatree.nl", true },
{ "datatruckers.com", true },
{ "datatruckers.eu", true },
@@ -8655,18 +8712,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "datememe.com", true },
{ "datengrab.xyz", true },
{ "datenkeks.de", true },
- { "datenlast.de", true },
+ { "dateno1.com", true },
{ "datenreiter.org", true },
{ "datenschutz-consult.de", true },
{ "datenschutz-individuell.de", true },
{ "datenschutzgrundverordnung.de", true },
{ "datenschutztag.org", true },
+ { "datenschutzzentrum.de", true },
{ "datenwerkstatt.net", true },
{ "datewon.net", false },
{ "datingticino.ch", true },
+ { "datmancrm.com", true },
{ "datovyaudit.cz", true },
{ "datsound.ru", true },
- { "datsumou-q.com", true },
{ "datumou-osusume.com", true },
{ "datumou-recipe.com", true },
{ "datumstudio.jp", true },
@@ -8679,7 +8737,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "daveoc64.co.uk", true },
{ "davepage.me.uk", true },
{ "davepearce.com", true },
- { "daverandom.com", true },
{ "davescomputertips.com", true },
{ "davesinclair.com.au", true },
{ "davetempleton.com", true },
@@ -8687,6 +8744,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "davewardle.com", true },
{ "davewut.ca", true },
{ "david-corry.com", true },
+ { "david-jeffery.co.uk", true },
{ "david-mallett.com", true },
{ "david-pearce.com", true },
{ "david-reess.de", true },
@@ -8695,7 +8753,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "davidadrian.org", true },
{ "davidandersson.se", true },
{ "davidbranco.me", true },
- { "davidbrito.tech", true },
{ "davidbuckell.com", true },
{ "davidcrx.net", true },
{ "daviddever.net", true },
@@ -8706,8 +8763,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "davidking.xyz", true },
{ "davidlamprea.com", true },
{ "davidlane.io", true },
+ { "davidlillo.com", true },
{ "davidlyness.com", true },
- { "davidmcevoy.org.uk", true },
{ "davidmessenger.co.uk", true },
{ "davidnadaski.com", true },
{ "davidpearce.com", true },
@@ -8715,18 +8772,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "davidpescarolo.it", true },
{ "davidschadlich.com", true },
{ "davidschlachter.com", true },
+ { "davidsimner.me.uk", true },
{ "davidsopas.com", true },
+ { "davidundetiwan.com", true },
{ "davie3.com", true },
{ "davimun.org", true },
{ "davisroi.com", true },
{ "davo-usedcars.be", true },
{ "davy-server.com", true },
- { "daw.nz", true },
{ "dawena.de", true },
{ "dawnbringer.eu", true },
{ "dawnbringer.net", true },
{ "dawnofeden.net", true },
- { "dawnsonb.com", true },
{ "dawoud.org", true },
{ "dawson-floridavilla.co.uk", true },
{ "day-peak.com", true },
@@ -8767,7 +8824,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dcautomacao.com.br", true },
{ "dcbouncycastles.co.uk", true },
{ "dcc.cat", true },
- { "dcc.moe", true },
+ { "dccommunity.de", true },
{ "dcepler.net", true },
{ "dchatelain.ch", true },
{ "dchest.org", true },
@@ -8777,13 +8834,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dcmt.co", true },
{ "dcpower.eu", true },
{ "dcrdev.com", true },
- { "dd.art.pl", true },
{ "ddays2008.org", true },
{ "ddel.de", true },
{ "dden.ca", true },
{ "ddepot.us", true },
+ { "ddholdingservices.com", true },
{ "ddhosted.com", true },
- { "ddns-anbieter.de", true },
{ "ddns-test.de", true },
{ "ddnsweb.com", true },
{ "ddproxy.cf", true },
@@ -8831,8 +8887,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "debbyefurd.com", true },
{ "debie-usedcars.be", true },
{ "debigare.com", true },
- { "debitoutil.com", true },
- { "debitpaie.com", true },
{ "debron-ot.nl", true },
{ "debrusoft.ch", true },
{ "debt.com", true },
@@ -8851,7 +8905,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "decoder.link", true },
{ "decompiled.de", true },
{ "decor-d.com", true },
- { "decoratore.roma.it", true },
+ { "decoratingadvice.co.uk", true },
{ "decoratrix.com", true },
{ "decorauvent.ca", true },
{ "decorestilo.com.br", true },
@@ -8880,11 +8934,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "deeperxh.com", true },
{ "deephill.com", true },
{ "deeployr.io", true },
- { "deeps.me", true },
{ "deepserve.info", true },
{ "deepsouthsounds.com", true },
{ "deepspace.dedyn.io", true },
{ "deepwealth.institute", true },
+ { "deepz.pt", true },
{ "deepzz.com", true },
{ "deer.team", true },
{ "deezeno.com", true },
@@ -8899,6 +8953,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "defero.io", true },
{ "deflect.ca", true },
{ "deflumeri.com", true },
+ { "deflumeriker.com", true },
{ "defman.me", true },
{ "defme.eu", true },
{ "defont.nl", true },
@@ -8912,6 +8967,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "degeberg.com", true },
{ "degeberg.dk", true },
{ "degen-elektrotechnik.de", true },
+ { "degosoft.nl", true },
{ "degoulet.net", true },
{ "degracetechnologie.com", true },
{ "degressif.com", true },
@@ -8935,7 +8991,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dekonix.ru", true },
{ "dekulk.nl", true },
{ "delahrzolder.nl", true },
- { "delandalucia.com", true },
{ "delbecqvo.be", true },
{ "delbrouck.ch", true },
{ "deleidscheflesch.nl", true },
@@ -8945,11 +9000,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "delhionlinegifts.com", true },
{ "deliacreates.com", true },
{ "deliandiver.org", true },
- { "deliberatedigital.com", true },
{ "deliciisanatoase.ro", true },
{ "deliciousmedia.co.uk", true },
{ "deliciousmedia.net", true },
{ "delicioustable.com", true },
+ { "delid.cz", true },
{ "delitto.top", true },
{ "delivery.co.at", true },
{ "dellipaoli.com", true },
@@ -8960,19 +9015,21 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "delta-smart.ch", true },
{ "delta.ru", true },
{ "delta23.de", false },
+ { "deltaacademy.org", true },
{ "deltadata.ch", true },
{ "deltafinanceiro.com.br", true },
{ "deltaonlineguards.com", true },
{ "deltaservers.com.br", true },
{ "deltasmart.ch", true },
{ "deltava.org", true },
- { "demarche-expresse.com", true },
{ "demarle.ch", true },
{ "dementiapraecox.de", true },
{ "demeyere-usedcars.be", true },
{ "demfloro.ru", true },
{ "demijn.nl", true },
{ "demilletech.net", true },
+ { "demmer.one", true },
+ { "demo.swedbank.se", true },
{ "demo9.ovh", true },
{ "democracychronicles.com", true },
{ "democracyineurope.eu", true },
@@ -8982,6 +9039,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "demonwav.com", true },
{ "demonwolfdev.com", true },
{ "demotivatorbi.ru", true },
+ { "dempsters.ca", false },
{ "demuzere.be", true },
{ "demuzere.com", true },
{ "demuzere.eu", true },
@@ -8998,9 +9056,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "denisewakeman.com", true },
{ "denistruffaut.fr", false },
{ "deniszczuk.pl", true },
+ { "denizdesign.co.uk", true },
{ "dennisang.com", true },
{ "dennisdoes.net", false },
{ "denniskoot.nl", true },
+ { "dennismurphy.biz", true },
{ "dennisvandenbos.nl", true },
{ "dennogumi.org", true },
{ "denous.nl", true },
@@ -9044,6 +9104,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "derekkent.com", true },
{ "dergeilstestammderwelt.de", true },
{ "derhil.de", true },
+ { "derk-jan.com", true },
{ "derkuki.de", true },
{ "derma-expert.eu", true },
{ "dermapuur.nl", true },
@@ -9105,14 +9166,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "detoxetmoi.com", true },
{ "detoxsinutritie.ro", true },
{ "detroit-english.de", true },
- { "detroitrocs.org", true },
{ "detroitstylepizza.com", true },
{ "detroitzoo.org", true },
{ "detski.center", true },
{ "detskysad.com", true },
{ "detuinmuze.nl", true },
{ "detype.nl", true },
- { "deuchnord.fr", true },
{ "deude.de", true },
{ "deukie.nl", true },
{ "deurenfabriek.nl", true },
@@ -9136,11 +9195,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "devalps.eu", true },
{ "devb.nl", true },
{ "devcast.io", true },
+ { "devcf.com", true },
{ "devct.cz", false },
{ "devcu.com", true },
{ "devcu.net", true },
- { "devdom.io", true },
- { "devdoodle.net", true },
{ "devel.cz", true },
{ "develerik.com", true },
{ "develop.cool", true },
@@ -9148,7 +9206,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "developer.mydigipass.com", false },
{ "developerdan.com", true },
{ "developerfair.com", true },
- { "developermail.io", true },
{ "developers.facebook.com", false },
{ "developfx.com", true },
{ "developmentaid.org", true },
@@ -9156,18 +9213,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "develux.com", true },
{ "develux.net", true },
{ "devenney.io", true },
+ { "devh.net", true },
{ "deviant.email", true },
{ "devillers-occasions.be", true },
{ "devilshakerz.com", true },
{ "deviltracks.net", true },
- { "devin-balimuhac.de", true },
{ "devinfo.net", false },
+ { "devirc.net", true },
{ "devisnow.fr", true },
{ "devjack.de", true },
{ "devkid.net", true },
- { "devkit.cc", false },
{ "devklog.net", true },
- { "devlamvzw.org", true },
+ { "devlamvzw.org", false },
{ "devlatron.net", true },
{ "devlogr.com", true },
{ "devolution.ws", true },
@@ -9186,7 +9243,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dexalo.de", true },
{ "deyute.com", true },
{ "dezeregio.nl", true },
- { "dezet-ev.de", true },
{ "dezintranet.com", true },
{ "dezmembrariromania.ro", true },
{ "dezshop24.de", true },
@@ -9204,49 +9260,47 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dgby.org", true },
{ "dgeex.eu", true },
{ "dggm.ru", true },
- { "dggwp.de", true },
{ "dgitup.com", true },
{ "dgportals.co.uk", true },
{ "dgpot.com", true },
{ "dgt-portal.de", true },
{ "dgx.io", true },
{ "dharveydev.com", true },
+ { "dhautefeuille.eu", true },
{ "dhauwer.nl", true },
{ "dhaynes.xyz", true },
{ "dhconcept.ch", true },
+ { "dheart.net", true },
{ "dhhs.gov", true },
{ "dhinflatables.co.uk", true },
- { "dhlcotizadorexpo-qa.azurewebsites.net", true },
{ "dhlinux.org", true },
{ "dhome.at", true },
{ "dhuy.net", true },
{ "di2pra.com", true },
{ "di2pra.fr", true },
- { "diabolic.chat", true },
{ "diadorafitness.es", true },
{ "diadorafitness.it", true },
{ "diagnocentro.cl", true },
{ "diagnostix.org", true },
{ "dialoegue.com", true },
{ "diamante.ro", true },
- { "diamondpkg.org", true },
+ { "diamantovaburza.cz", true },
+ { "diamondsleepsolutions.com", true },
{ "diamondyze.nl", true },
{ "diamorphine.com", true },
{ "diamsmedia.ch", true },
+ { "dianafaraj.de", true },
{ "dianefriedli.ch", true },
{ "dianurse.com", true },
{ "diare-na-miru.cz", true },
{ "diario-egipto.com", true },
{ "diasdasemana.com", true },
{ "diasp.org", true },
- { "diavo.de", true },
{ "dibiphp.com", true },
{ "diccionarioabierto.com", true },
{ "diccionariodedudas.com", true },
{ "dice.tokyo", true },
{ "dicelab.co.uk", true },
- { "dicgaming.net", true },
- { "dicio.com.br", true },
{ "dicionario.org", true },
{ "dicionariodegirias.com.br", true },
{ "dicionariodelatim.com.br", true },
@@ -9254,7 +9308,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dicionariodesimbolos.com.br", true },
{ "dicionarioetimologico.com.br", true },
{ "dickieslife.com", true },
- { "dickpics.ru", true },
{ "dicoding.com", true },
{ "dictionaryofnumbers.com", true },
{ "dictzone.com", true },
@@ -9271,7 +9324,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "die-seide.de", true },
{ "die-sinlosen.de", true },
{ "die-speisekammer-reutlingen.de", true },
- { "diedrich.co", true },
+ { "diedrich.co", false },
{ "diedrich.me", true },
{ "dieecpd.org", true },
{ "diegelernten.de", true },
@@ -9285,6 +9338,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "diemattels.at", true },
{ "dienchaninstitute.com", true },
{ "dienstplan.cc", true },
+ { "dienstplan.one", true },
{ "dierabenmutti.de", true },
{ "dierenartsdeconinck.be", true },
{ "dierencompleet.nl", true },
@@ -9330,13 +9384,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "digital.gov", false },
{ "digital.govt.nz", true },
{ "digital1st.co.uk", true },
- { "digital2web.com", true },
+ { "digital1world.com", true },
+ { "digital2web.com", false },
{ "digitalarchitecture.com", true },
{ "digitalbitbox.com", true },
{ "digitalcash.cf", true },
{ "digitalcitizen.life", true },
{ "digitalcitizen.ro", true },
- { "digitalcloud.ovh", true },
{ "digitalcreationclass.com", true },
{ "digitalcuko.com", true },
{ "digitaldashboard.gov", true },
@@ -9351,9 +9405,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "digitaleoverheid.nl", true },
{ "digitalewelten.de", true },
{ "digitalezukunft-hagen.de", true },
+ { "digitalezukunft.nrw", true },
{ "digitalfishfun.com", true },
{ "digitalfuturenow.com", true },
{ "digitalgov.gov", false },
+ { "digitalhabit.at", true },
+ { "digitalhabitat.io", true },
{ "digitalliteracy.gov", true },
{ "digitalmaniac.co.uk", true },
{ "digitalmarketingindallas.com", true },
@@ -9389,12 +9446,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dimmershiddenhills.com", true },
{ "dimmerslakesherwood.com", true },
{ "dimmersnewburypark.com", true },
+ { "dimmersoakpark.com", true },
{ "dimmersthousandoaks.com", true },
{ "dimmerswestlakevillage.com", true },
{ "dimonb.com", true },
+ { "dimseklubben.dk", true },
{ "din-hkd.jp", true },
{ "dineachook.com.au", true },
+ { "dinepont.fr", true },
+ { "dingcc.com", true },
{ "dinge.xyz", true },
+ { "dingelbob-schuhcreme.gq", true },
+ { "dingsbums.shop", true },
{ "dinheirolucrar.com", true },
{ "dinkommunikasjon.no", true },
{ "dinmtb.dk", true },
@@ -9404,6 +9467,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "diodeled.com", true },
{ "diodo.me", true },
{ "dionysos-ios.gr", true },
+ { "dipalma.me", true },
{ "dipling.de", true },
{ "diplona.de", true },
{ "dipulse.it", true },
@@ -9420,15 +9484,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "directorioz.com", true },
{ "directreal.sk", true },
{ "directspa.fr", true },
+ { "direktvermarktung-schmitzberger.at", true },
{ "dirips.com", true },
{ "dirk-scheele.de", true },
{ "dirko.net", true },
{ "dirkwolf.de", true },
{ "dirtcraft.ca", true },
- { "dirtygeek.ovh", true },
+ { "disability.gov", true },
{ "disabled.dating", true },
{ "disanteimpianti.com", true },
- { "disarc.com", true },
{ "disavow.tools", true },
{ "disc.uz", true },
{ "discarica.it", true },
@@ -9440,6 +9504,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "discipul.nl", true },
{ "discofitta.com", true },
{ "disconformity.net", true },
+ { "discord.gg", true },
{ "discord4j.com", true },
{ "discordapp.com", true },
{ "discordghost.space", true },
@@ -9450,6 +9515,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "discover-shaken.com", true },
{ "discoverthreejs.com", true },
{ "discoveryaima.com", true },
+ { "discoveryottawa.ca", true },
{ "discoveryrom.org", true },
{ "discreet-condooms.nl", true },
{ "dise-online.de", true },
@@ -9480,21 +9546,23 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "disinfestazioni.venezia.it", true },
{ "disinfestazioni.verona.it", true },
{ "disinfestazionivespe.milano.it", true },
+ { "disinfestazionizanzare.milano.it", true },
{ "disinisharing.com", true },
{ "diskbit.com", true },
{ "diskbit.nl", true },
{ "dismail.de", true },
{ "dispatchitsolutions.com", true },
{ "dispatchitsolutions.io", true },
- { "displayideas.gr", true },
{ "disposable.link", true },
{ "disroot.org", true },
{ "disrupters.ch", true },
{ "dissertationhelp.com", true },
{ "dissidence.ovh", true },
+ { "dissident.host", true },
{ "dist.torproject.org", false },
{ "disti.com", true },
{ "distiduffer.org", true },
+ { "distillery.com", true },
{ "distinguishedprisoner.com", true },
{ "distribuidoracristal.com.br", true },
{ "distribuidorveterinario.es", true },
@@ -9518,14 +9586,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "divi-experte.de", true },
{ "divinegames.studio", true },
{ "diving.photo", true },
+ { "divorciosmurcia.com", true },
+ { "divvymonkey.com", true },
{ "dixi.fi", true },
{ "diybook.at", true },
{ "diycc.org", true },
{ "diygod.me", true },
{ "diymediahome.org", true },
{ "diyosun.com", true },
+ { "diytechguides.com", true },
{ "diyvideoeditor.com", true },
- { "diz.in.ua", true },
{ "dizzythewizard.co.uk", true },
{ "dj-leszwolle.nl", true },
{ "dj-x.info", true },
@@ -9538,7 +9608,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "djc.me", true },
{ "djcursuszwolle.nl", true },
{ "djdavid98.hu", true },
- { "djieno.com", true },
{ "djipanov.com", true },
{ "djlive.pl", true },
{ "djlnetworks.co.uk", true },
@@ -9563,7 +9632,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dlitz.net", true },
{ "dll4free.com", true },
{ "dlld.com", true },
- { "dlouwrink.nl", true },
{ "dlrsp.org", true },
{ "dlscomputers.com.au", true },
{ "dlunch.net", true },
@@ -9571,6 +9639,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dlzz.net", true },
{ "dm.lookout.com", false },
{ "dm.mylookout.com", false },
+ { "dm4productions.com", true },
{ "dm7ds.de", true },
{ "dmailshop.ro", true },
{ "dmarc.dk", true },
@@ -9579,13 +9648,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dmd.lv", true },
{ "dmdd.org.uk", true },
{ "dmeevalumate.com", true },
- { "dmfd.net", true },
{ "dmi.es", true },
- { "dmlogic.com", true },
+ { "dmitry.sh", true },
{ "dmmkenya.co.ke", true },
{ "dmmultionderhoud.nl", true },
{ "dmschilderwerken.nl", true },
- { "dmwall.cn", true },
+ { "dmx.xyz", true },
{ "dmxledlights.com", true },
{ "dn3s.me", true },
{ "dn42.eu", false },
@@ -9596,6 +9664,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dndtools.net", true },
{ "dne.lu", true },
{ "dnfc.rocks", true },
+ { "dnlr.tech", true },
{ "dnmlab.it", true },
{ "dnplegal.com", true },
{ "dns-control.eu", true },
@@ -9605,26 +9674,25 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dns8.online", true },
{ "dnscrawler.com", true },
{ "dnscrypt.info", true },
+ { "dnscrypt.nl", true },
{ "dnscurve.io", true },
{ "dnshallinta.fi", true },
{ "dnsinfo.ml", true },
{ "dnsman.se", true },
- { "dnsql.io", true },
{ "dnstwister.report", true },
- { "do-it.cz", true },
{ "do-prod.com", true },
{ "do.gd", true },
{ "do.search.yahoo.com", false },
{ "do13.net", true },
- { "do67.de", true },
- { "do67.net", true },
{ "dobrev.family", true },
+ { "dobrisan.ro", true },
{ "dobsnet.net", true },
{ "doc.python.org", true },
{ "doc.to", true },
{ "doc8643.com", true },
{ "docabo.ch", true },
{ "docbox.ch", true },
+ { "doceamoraviverbem.com", true },
{ "docemeldoces.com", true },
{ "dochimera.com", true },
{ "dochitaceahlau.ro", true },
@@ -9663,7 +9731,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dogear.ch", true },
{ "dogfi.sh", true },
{ "dogft.com", true },
- { "doggedbyirs.com", true },
{ "doggroomingcourse.com", true },
{ "dogmap.jp", true },
{ "dogoo.com", true },
@@ -9672,9 +9739,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dogrescuegreece.nl", true },
{ "dogworld.com.br", true },
{ "dohanews.co", true },
+ { "doihavetoputonpants.com", true },
{ "dokan-e.com", false },
{ "dokelio-idf.fr", true },
{ "dokipy.no", true },
+ { "dokspot.cf", true },
+ { "dokspot.ga", true },
{ "doku-gilde.de", true },
{ "dokuboard.com", true },
{ "dokuraum.de", true },
@@ -9684,7 +9754,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dollemore.com", true },
{ "dolorism.com", true },
{ "dolphin-it.de", true },
- { "dolt.xyz", true },
{ "dom-medicina.ru", true },
{ "doma.in", true },
{ "domadillo.com", true },
@@ -9754,6 +9823,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "donkennedyandsons.com", true },
{ "donkeytrekkingkefalonia.com", true },
{ "donmaldeamores.com", true },
+ { "donnacha.blog", true },
{ "donnachie.net", true },
{ "donner-reuschel.de", true },
{ "donnons.org", false },
@@ -9766,7 +9836,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dont.watch", true },
{ "dontbubble.me", true },
{ "dontcageus.org", true },
- { "donthedragonwilson.com", true },
{ "donttrust.me", true },
{ "donutcompany.co.jp", true },
{ "donzool.es", true },
@@ -9796,6 +9865,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "doriangirod.ch", true },
{ "dorianharmans.nl", true },
{ "dorianmuthig.com", true },
+ { "doridian.net", true },
{ "dormiu.com", true },
{ "dormiu.com.br", true },
{ "dorquelle.com", true },
@@ -9803,7 +9873,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dorth.nl", true },
{ "dosenbierrepublik.com", true },
{ "dosenkiwi.at", true },
- { "dosipe.com", true },
{ "doska.by", true },
{ "doska.ru", true },
{ "dosomeworks.biz", true },
@@ -9819,19 +9888,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dosyauzantisi.com", true },
{ "dot.ro", true },
{ "dotacni-parazit.cz", true },
- { "dotb.dn.ua", false },
{ "dotbigbang.com", true },
{ "dotbox.org", true },
- { "dotconnor.com", true },
+ { "dotcircle.co", true },
{ "dotgov.gov", true },
{ "dothebangthingsalon.com", true },
{ "dothydesign.com", true },
{ "dotjs.party", true },
{ "dotkniseandroida.cz", true },
- { "dotkod.com", true },
{ "dotkod.pl", true },
{ "dotneko.net", true },
- { "dotnetsandbox.ca", true },
{ "dotphoto.com", true },
{ "dotplex.com", true },
{ "dotplex.de", true },
@@ -9846,9 +9912,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "doublestat.me", true },
{ "doubleup.com.au", true },
{ "doucheba.gs", false },
- { "dougferris.id.au", true },
{ "dougley.com", true },
- { "doujin-domain.cz", true },
{ "doujinshi.info", true },
{ "dounats.com", true },
{ "douzer.de", true },
@@ -9860,6 +9924,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "downloadaja.com", true },
{ "downloadgamemods.com", true },
{ "downloadgram.com", true },
+ { "downloads.zdnet.com", true },
{ "downloadsoftwaregratisan.com", true },
{ "downrightcute.com", true },
{ "downtimerobot.com", true },
@@ -9876,7 +9941,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dpd.com.pl", true },
{ "dperson.net", true },
{ "dpfsolutionsfl.com", true },
- { "dpg.no", true },
{ "dpi-design.de", true },
{ "dpisecuretests.com", true },
{ "dprb.biz", true },
@@ -9920,7 +9984,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dragon-chem.eu", true },
{ "dragon-hearts.co.uk", true },
{ "dragoncave.me", true },
- { "dragoncityhack.tips", true },
{ "dragonfly.co.uk", true },
{ "dragonheartsrpg.com", true },
{ "dragonkin.net", true },
@@ -9933,8 +9996,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dragonsunited.info", true },
{ "dragonsunited.net", true },
{ "dragonsunited.org", true },
+ { "dragonwork.me", true },
{ "drakeluce.com", true },
- { "drakensberg-tourism.com", true },
{ "drakenson.de", true },
{ "dramaticpeople.com", true },
{ "dramyalderman.com", true },
@@ -9945,6 +10008,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "drawesome.uy", true },
{ "drawingcode.net", true },
{ "drbethanybarnes.com", true },
+ { "drbriones.com", true },
+ { "drchrislivingston.com", true },
{ "drchristinehatfield.ca", true },
{ "drchristophepanthier.com", true },
{ "drdavidgilpin.com", true },
@@ -9985,9 +10050,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "drillingsupply.info", true },
{ "drillingsupplystore.com", true },
{ "drillion.net", true },
+ { "drillshackresort.com", true },
{ "drinkplanet.eu", true },
{ "drive.google.com", false },
- { "drive.xyz", true },
{ "driven2shine.eu", true },
{ "drivenes.net", true },
{ "driver.ru", true },
@@ -10004,6 +10069,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "drjenafernandez.com", true },
{ "drjoe.ca", true },
{ "drjuanitacollier.com", false },
+ { "drjulianneil.com", true },
{ "drkhsh.at", false },
{ "drkmtrx.xyz", true },
{ "drlangsdon.com", true },
@@ -10036,13 +10102,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "drown.photography", true },
{ "drpetervoigt.de", true },
{ "drpico.com.au", true },
- { "drpure.pw", true },
{ "drrr.chat", true },
{ "drrr.wiki", true },
{ "drsajjadian.com", true },
{ "drschruefer.de", true },
{ "drsturgeonfreitas.com", true },
- { "drturner.com.au", false },
{ "drubn.de", false },
{ "drugs.com", true },
{ "drumbe.at", true },
@@ -10054,21 +10118,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "drusillas.co.uk", true },
{ "druwe.net", true },
{ "druznek.me", true },
- { "druznek.rocks", true },
- { "druznek.xyz", true },
{ "drvr.xyz", true },
{ "drweissbrot.net", true },
{ "drybjed.net", true },
{ "drycleancoalition.org", true },
{ "drycreekphoto.com", true },
{ "drydrydry.com", true },
- { "ds67.de", true },
{ "dsancomics.com", true },
+ { "dsanraffleshangbai.xyz", true },
{ "dsayce.com", true },
{ "dsbrowser.com", true },
{ "dsdalismerkezi.com", true },
{ "dsebastien.net", true },
- { "dsektionen.se", true },
+ { "dsektionen.se", false },
{ "dshield.org", true },
{ "dsm5.com", true },
{ "dsmjs.com", true },
@@ -10081,15 +10143,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dsteiner.at", true },
{ "dstvinstallrandburg.co.za", true },
{ "dsuinnovation.com", true },
- { "dsyunmall.com", true },
{ "dt27.org", true },
{ "dtbouncycastles.co.uk", true },
{ "dtdsh.com", true },
{ "dte.co.uk", true },
{ "dtechstore.com.br", true },
- { "dtg-fonds.com", true },
- { "dtg-fonds.de", true },
- { "dtg-fonds.net", true },
{ "dtk-vom-chausseehaus.de", true },
{ "dtnx.eu", true },
{ "dtnx.net", true },
@@ -10098,7 +10156,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dtuaarsfest.dk", true },
{ "dtx.sk", true },
{ "dualascent.com", true },
- { "duan.li", true },
+ { "dualias.xyz", false },
{ "dub.cz", true },
{ "dubai-company.ae", true },
{ "dubaieveningsafari.com", true },
@@ -10109,6 +10167,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dubrovskiy.net", true },
{ "dubrovskiy.pro", true },
{ "ducalendars.com", true },
+ { "duch.cloud", true },
{ "duchyoffeann.com", true },
{ "duckasylum.com", true },
{ "duckbase.com", true },
@@ -10117,13 +10176,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "duckinc.net", true },
{ "duct.me", true },
{ "duernberg.at", true },
+ { "duesee.org", true },
{ "duesterhus.eu", true },
{ "dufrei.com", true },
- { "dugnet.com", false },
- { "dugnet.io", false },
- { "dugnet.net", false },
- { "dugnet.org", false },
- { "dugnet.tech", false },
{ "dugunedavet.com", true },
{ "duh.se", true },
{ "duijf.info", true },
@@ -10138,6 +10193,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dumax.xyz", true },
{ "dumbdemo.com", true },
{ "dumbeartech.com", true },
+ { "dumberger-bau.de", true },
{ "dumbfunded.co.uk", true },
{ "dumbomove.com.au", true },
{ "dumino.bg", true },
@@ -10149,13 +10205,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "duncanwinfrey.com", true },
{ "dundalkdonnie.com", true },
{ "dungeon-bbs.de", true },
- { "dungi.org", true },
{ "dunklau.fr", true },
{ "dunkle-seite.org", true },
{ "dunloptrade.com", true },
{ "dunmanelectric.com", true },
{ "duobus.nl", true },
- { "duoluodeyu.com", true },
+ { "duocircle.com", true },
{ "duonganhtuan.com", true },
{ "duoquadragintien.fr", true },
{ "dupisces.com.tw", true },
@@ -10179,11 +10234,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dustyspokesbnb.ca", true },
{ "dutch.desi", true },
{ "dutchdare.nl", true },
- { "dutchessuganda.com", true },
{ "dutchforkrunners.com", true },
{ "dutchrank.nl", true },
{ "dutchwanderers.nl", true },
{ "dutchweballiance.nl", true },
+ { "dv189.com", true },
{ "dvbris.co.uk", true },
{ "dvbris.com", true },
{ "dvdland.com.au", true },
@@ -10193,8 +10248,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dvwc.org", true },
{ "dvx.cloud", true },
{ "dwbtoftshit.com", true },
- { "dwellstudio.com", true },
{ "dwgf.xyz", true },
+ { "dwi-sued.de", true },
{ "dworzak.ch", true },
{ "dwscdv3.com", true },
{ "dwtm.ch", true },
@@ -10215,10 +10270,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dylankatz.com", true },
{ "dylanknoll.ca", true },
{ "dylanspcrepairs.com", true },
+ { "dylanwise.net", true },
{ "dylmye.me", true },
{ "dymersion.com", true },
{ "dymfbbs.com", true },
- { "dymowski.de", true },
+ { "dymowski.de", false },
{ "dyn-dnhensel.de", true },
{ "dyn-nserve.net", true },
{ "dyn.im", true },
@@ -10231,11 +10287,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dynamictostatic.com", true },
{ "dynamicyou.co.uk", true },
{ "dynamo.city", true },
+ { "dynapptic.com", true },
{ "dynastic.co", true },
+ { "dyncdn.me", true },
{ "dynn.be", true },
{ "dynorphin.com", true },
{ "dynorphins.com", true },
- { "dynts.pro", true },
{ "dynx.pl", true },
{ "dyrenesverden.no", true },
{ "dyrkar.com", true },
@@ -10245,8 +10302,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dyyn.de", true },
{ "dyz.pw", true },
{ "dzeina.ch", true },
- { "dzet.de", true },
- { "dziekonski.com", true },
+ { "dziary.com", true },
{ "dziurdzia.pl", true },
{ "dzndk.com", true },
{ "dzndk.net", true },
@@ -10259,6 +10315,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "e-bikesdirect.co.uk", true },
{ "e-biografias.net", true },
{ "e-briancon.com", true },
+ { "e-colle.info", true },
{ "e-cottage.com.br", true },
{ "e-enterprise.gov", false },
{ "e-hon.link", true },
@@ -10269,7 +10326,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "e-lifetechnology.com", true },
{ "e-migration.ch", true },
{ "e-planetelec.fr", false },
- { "e-speak24.pl", true },
{ "e-standardstore.org", true },
{ "e-surveillant.nl", true },
{ "e-teacher.pl", true },
@@ -10314,7 +10370,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "eagleyecs.com", true },
{ "eaimty.com", true },
{ "ealev.de", true },
- { "eames-clayton.us", true },
{ "eapestudioweb.com", true },
{ "earl.org.uk", true },
{ "earlyyearshub.com", true },
@@ -10322,19 +10377,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "earn.com", true },
{ "earthsystemprediction.gov", true },
{ "earticleblog.com", true },
- { "earvinkayonga.com", true },
- { "easelforart.com", true },
{ "easez.net", true },
{ "eashwar.com", true },
{ "eason-yang.com", true },
{ "east-line.su", true },
{ "eastarm.net", true },
{ "eastcoastbubbleandbounce.co.uk", true },
- { "eastcoastinflatables.co.uk", true },
+ { "easterncapebirding.co.za", true },
{ "eastlothianbouncycastles.co.uk", true },
{ "eastmanbusinessinstitute.com", true },
{ "eastsidecottages.co.uk", true },
- { "easy-factures.fr", true },
{ "easy-rpg.org", false },
{ "easyadsnbanners.tk", false },
{ "easycoding.org", true },
@@ -10345,7 +10397,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "easydumpsterrental.com", true },
{ "easyfiles.ch", true },
{ "easyhaul.com", true },
- { "easykraamzorg.nl", true },
+ { "easykraamzorg.nl", false },
{ "easyocm.hu", true },
{ "easyoutdoor.nl", true },
{ "easypay.bg", true },
@@ -10356,19 +10408,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "easyschools.org", true },
{ "easyslide.be", true },
{ "easystore.co", true },
+ { "easytechguides.com", true },
{ "easytechsecurity.com", true },
{ "easyweenies.com", true },
- { "eat-mine.ml", true },
{ "eat-sleep-code.com", true },
{ "eat4happiness.com", true },
{ "eatery.co.il", true },
- { "eatlowcarb.de", false },
{ "eatmebudapest.hu", true },
{ "eaton-works.com", true },
{ "eatry.io", true },
{ "eatsleeprepeat.net", true },
{ "eatson.com", true },
- { "eattherich.us", true },
{ "eatz.com", true },
{ "eaucube.com", true },
{ "eauxdespleiades.ch", true },
@@ -10398,6 +10448,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ebrnd.de", true },
{ "ec-baran.de", true },
{ "ec-current.com", true },
+ { "ecacollege.nsw.edu.au", true },
+ { "ecardoo.com", true },
{ "ecchidreams.com", true },
{ "ecclesia-koeln.de", true },
{ "ecco-verde.com", false },
@@ -10408,7 +10460,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "echatta.org", true },
{ "echidna-rocktools.eu", true },
{ "echo-security.co", true },
- { "echo.cc", true },
{ "echoactive.com", true },
{ "echoanalytics.com", true },
{ "echodio.com", true },
@@ -10438,6 +10489,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ecocreativity.org", true },
{ "ecodedi.com", true },
{ "ecodesigns.nl", true },
+ { "ecodigital.social", true },
{ "ecofabrica.com.br", true },
{ "ecofac-bs.com", true },
{ "ecogen.com.au", true },
@@ -10449,6 +10501,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ecoledusabbat.org", true },
{ "ecolemathurincordier.com", true },
{ "ecombustibil.ro", true },
+ { "ecommercestore.net.br", true },
{ "ecompen.co.za", true },
{ "economias.pt", true },
{ "economic-sanctions.com", true },
@@ -10473,16 +10526,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ecpannualmeeting.com", true },
{ "ecrandouble.ch", true },
{ "ecupcafe.com", false },
+ { "ecxforum.com", true },
{ "ed.gs", true },
{ "ed4becky.net", true },
{ "edakoe.ru", true },
+ { "edanni.io", true },
{ "edd-miles.com", true },
{ "eddesign.ch", true },
{ "eddmil.es", true },
{ "eddokloosterman.com", true },
+ { "eddyn.net", true },
{ "edeca.net", true },
{ "edehsa.com", true },
- { "edenvalerubbleremovals.co.za", true },
{ "edesseglabor.hu", true },
{ "edfinancial.com", true },
{ "edge-cloud.net", true },
@@ -10504,14 +10559,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "edited.de", true },
{ "edition-bambou.com", true },
{ "edition-sonblom.de", true },
- { "editoraacademiacrista.com.br", true },
{ "edlinger.at", true },
{ "edlinger.mobi", true },
{ "edlinus.cn", true },
+ { "edmodo.com", true },
{ "edmoncu.com", true },
{ "edmundcelis.com", true },
{ "edoss.co.za", true },
+ { "edp-collaborative.com", true },
{ "edplan.io", true },
+ { "edpubs.gov", false },
+ { "edragneainpuscarie.ro", true },
{ "edsby.com", true },
{ "edservicing.com", true },
{ "edsm.net", true },
@@ -10533,6 +10591,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "eduid.se", false },
{ "edumundo.nl", true },
{ "eduroam.no", true },
+ { "eduroam.uy", true },
{ "edusanjal.com", true },
{ "edusantorini.com", true },
{ "eduvpn.no", true },
@@ -10552,7 +10611,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "edxn.de", true },
{ "edyou.eu", true },
{ "edzilla.info", true },
- { "ee-terminals.com", true },
{ "eellak.gr", true },
{ "eelsden.net", true },
{ "eelzak.nl", true },
@@ -10566,6 +10624,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "eewna.org", true },
{ "ef-georgia.org", true },
{ "ef.gy", true },
+ { "efa-football.com", true },
{ "efaas.nl", true },
{ "efag.com", true },
{ "efeen.nl", true },
@@ -10579,7 +10638,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "effex.ru", true },
{ "effizienta.ch", true },
{ "efflam.net", true },
- { "efg-darmstadt.de", true },
+ { "efg-darmstadt.de", false },
{ "efinity.io", true },
{ "efmcredentialing.org", true },
{ "eft.boutique", true },
@@ -10594,7 +10653,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "egfl.org.uk", true },
{ "egg-ortho.ch", true },
{ "eggblast.com", true },
- { "eggert.org", false },
{ "eggplant.today", true },
{ "egiftcards.be", true },
{ "eglek.com", true },
@@ -10626,15 +10684,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "eickhof.co", true },
{ "eickhof.us", true },
{ "eickhofcolumbaria.com", true },
- { "eidolons.org", true },
{ "eifel.website", true },
- { "eiga-movie.com", true },
- { "eigenbubi.de", true },
{ "eigenpul.se", true },
{ "eigenpulse.com", true },
{ "eighty-aid.com", true },
{ "eightyfour.ca", true },
{ "eigpropertyauctions.co.uk", true },
+ { "eihaikyo.com", true },
{ "eilhan.com", true },
{ "eimacs.com", true },
{ "einar.io", true },
@@ -10648,12 +10704,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "einsatzstellenverwaltung.de", true },
{ "einser.com", true },
{ "einsit.com", true },
- { "einsitapis.com", true },
{ "einsteinathome.org", true },
{ "eintageinzug.de", true },
{ "eintragsservice24.de", true },
{ "eipione.com", true },
{ "eirastudios.co.uk", false },
+ { "eisaev.ru", true },
+ { "eiskratzer-bedrucken.de", true },
{ "eit-web.de", false },
{ "eitler.cx", true },
{ "eiyoushi-shigoto.com", true },
@@ -10674,7 +10731,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ekokontakt.cz", true },
{ "ekonbenefits.com", true },
{ "ekostecki.de", true },
- { "ekpyroticfrood.net", true },
{ "ekrana.info", true },
{ "eksisozluk.com", true },
{ "ekuatorial.com", true },
@@ -10692,15 +10748,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "elastic7.uk", true },
{ "elb500ttl.nl", true },
{ "elbetech.net", true },
+ { "elbohlyart.com", true },
{ "elcambiador.es", true },
{ "eldapoint.co.uk", true },
{ "elderoost.com", true },
{ "eldertons.co.uk", true },
{ "eldietista.es", true },
+ { "eldinhadzic.com", true },
{ "eldisagjapi.com", true },
{ "eldisagjapi.de", true },
{ "eldrid.ge", true },
{ "eldritchfiction.net", true },
+ { "electionsbycounty.com", true },
{ "electionsdatabase.com", true },
{ "electr0sheep.com", true },
{ "electragirl.com", true },
@@ -10752,6 +10811,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "electriciansimivalley.com", true },
{ "electricianthousandoaks.com", true },
{ "electricianwestlakevillage.com", true },
+ { "electricimagination.co.uk", true },
{ "electriclakesherwood.com", true },
{ "electricmalibu.com", true },
{ "electricmoorpark.com", true },
@@ -10765,7 +10825,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "electronicfasteners.com", true },
{ "electrostatics.com", true },
{ "electrotainment.com", true },
- { "eled.io", true },
{ "elefandt.com", true },
{ "elefantevoador.com", true },
{ "eleicoes2014.com.br", true },
@@ -10811,10 +10870,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "elettricista-roma.org", true },
{ "eleusis-zur-verschwiegenheit.de", true },
{ "elevator.ee", true },
- { "elexel.ru", true },
+ { "elevatoraptitudetest.com", true },
{ "elexprimidor.com", true },
{ "elfe.de", true },
+ { "elfnon.com", true },
{ "elgalponazo.com.ar", true },
+ { "elglobo.com.mx", false },
{ "elgosblanc.com", false },
{ "elguadia.faith", true },
{ "elhamadimi.com", true },
@@ -10822,8 +10883,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "elhossari.com", true },
{ "elia.cloud", true },
{ "elian-art.de", true },
- { "elias-nicolas.com", true },
- { "eliasojala.me", true },
{ "elibom.com", true },
{ "elie.net", true },
{ "elifesciences.org", true },
@@ -10842,30 +10901,30 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "elisabethkostecki.de", true },
{ "elisabethrene.com", true },
{ "elisechristie.com", true },
- { "elistor6100.xyz", false },
- { "elite-box.com", true },
- { "elite-box.org", true },
+ { "elistor6100.xyz", true },
+ { "elite-porno.ru", true },
{ "elite12.de", true },
{ "elitebouncingfun.com", true },
{ "elitegameservers.net", true },
- { "elitehosting.de", true },
+ { "elitehosting.de", false },
{ "elixi.re", true },
{ "elixir.bzh", true },
{ "eliyah.co.il", true },
{ "elizabethbuitrago.com", true },
{ "elizabethgreenfield.com", true },
+ { "elizeugomes.com.br", true },
{ "eljef.me", true },
{ "elkoy.org", true },
{ "ell-net.tokyo", true },
{ "ella-kwikmed.com", false },
{ "ellak.gr", true },
- { "ellegaard.dk", true },
{ "ellemental.me", true },
{ "ellencorddry.com", true },
{ "ellevit.ch", true },
{ "elliesbouncers.co.uk", true },
{ "elliff.net", true },
{ "elliot.cat", true },
+ { "elliquiy.com", true },
{ "elliriehl.at", true },
{ "ellisamusements.co.uk", true },
{ "ellisleisure.co.uk", true },
@@ -10906,21 +10965,23 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "elwix.com", true },
{ "elxsi.de", true },
{ "elyasweb.com", true },
- { "elyisus.info", true },
{ "elysiria.fr", true },
{ "elysiumware.com", true },
{ "em-biotek.cz", true },
{ "emaging-productions.fr", true },
{ "emailalaperformance.fr", true },
{ "emailconfiguration.com", true },
+ { "emailcontrol.nl", true },
{ "emailfuermich.de", true },
{ "emailhunter.co", true },
{ "emailing.alsace", true },
{ "emailprivacytester.com", true },
{ "emailtools.io", true },
{ "emaily.eu", true },
+ { "emanuel.photography", true },
{ "emanuelduss.ch", true },
{ "emanueleanastasio.com", true },
+ { "emanuelemazzotta.com", true },
{ "embassycargo.eu", true },
{ "emberlife.com", true },
{ "embox.net", true },
@@ -10947,7 +11008,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "emilstahl.dk", true },
{ "emilvarga.com", true },
{ "emilyjohnson.ga", true },
- { "emilyshepherd.me", true },
{ "emirabiz.com", false },
{ "emirichardson.com", true },
{ "emivauthey.com", true },
@@ -10959,14 +11019,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "emmababy420.com", true },
{ "emmagraystore.com", true },
{ "emmaliddell.com", true },
- { "emmanuelle-et-julien.ch", true },
{ "emobilityforum.org", true },
- { "emoji.bzh", true },
+ { "emoji.bzh", false },
{ "emolafarm.com", true },
{ "emond-usedcars.net", true },
{ "empathogen.com", true },
{ "empathogens.com", true },
{ "empathy.ca", true },
+ { "emperola.com", true },
{ "emperor-penguin.com", true },
{ "emperor-penguins.com", true },
{ "empese.com", true },
@@ -10977,6 +11037,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "employer411.com", true },
{ "emporiodascalcinhas.com.br", true },
{ "emporiodosperfumes.com.br", true },
+ { "emporioonline.com.br", true },
{ "emporiopatanegra.com.br", true },
{ "emporioviverbem.com.br", false },
{ "empower.net", true },
@@ -10984,6 +11045,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "emprego.pt", true },
{ "empyrean-advisors.com", true },
{ "emresaglam.com", true },
+ { "emtradingacademy.com", true },
{ "emultiagent.pl", true },
{ "emupedia.net", true },
{ "emvoiceapp.com", true },
@@ -10993,12 +11055,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "en-crypt.me", true },
{ "en-maktoob.search.yahoo.com", false },
{ "en4rab.co.uk", true },
- { "en4u.org", true },
{ "enaah.de", true },
{ "enaim.de", true },
{ "enamae.net", true },
{ "enbecom.net", true },
- { "encadrer-mon-enfant.com", true },
{ "encfs.win", true },
{ "encircleapp.com", true },
{ "encnet.de", true },
@@ -11012,6 +11072,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "encryptallthethings.net", true },
{ "encrypted.google.com", true },
{ "encuentraprecios.es", true },
+ { "ende-x.com", true },
{ "endeal.nl", true },
{ "ender.co.at", true },
{ "enderbycamping.com", true },
@@ -11056,11 +11117,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "engiedev.net", true },
{ "engineowning.com", true },
{ "enginepit.com", true },
+ { "enginx.cn", true },
{ "enginx.net", true },
{ "englishbulgaria.net", true },
{ "englishcast.com.br", true },
{ "englishclub.com", true },
- { "englishdirectory.de", true },
{ "englishforums.com", true },
{ "englishlol.com", true },
{ "englishphonopass.com", true },
@@ -11069,15 +11130,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "enigma.swiss", true },
{ "enijew.com", true },
{ "enitso.de", true },
- { "enixgaming.com", true },
{ "enjincoin.io", true },
{ "enjinwallet.io", true },
{ "enjinx.io", true },
{ "enjoyphoneblog.it", true },
- { "enjoystudio.ro", true },
{ "enlatte.com", true },
{ "enlazaresbueno.cl", true },
- { "enlighten10x.ga", true },
{ "enlightened.si", true },
{ "enlightenedhr.com", true },
{ "enlightenment.org", true },
@@ -11096,6 +11154,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ensage.io", true },
{ "enscosupply.com", true },
{ "ensemble-rubato.de", true },
+ { "enskat.de", true },
+ { "enskatson-sippe.de", true },
{ "ensley.tech", true },
{ "ensons.de", true },
{ "ensured.com", true },
@@ -11105,7 +11165,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "entabe.jp", true },
{ "entactogen.com", true },
{ "entactogens.com", true },
- { "enteente.com", true },
{ "enterprisechannel.asia", true },
{ "enterprisey.enterprises", true },
{ "entheogens.com", true },
@@ -11123,9 +11182,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "envant.co.uk", true },
{ "enveloppenopmaat.nl", true },
{ "envescent.com", true },
- { "enviam.de", true },
{ "enviaya.com.mx", true },
- { "environment.ai", true },
{ "environmentkirklees.org", true },
{ "enviroprobasements.com", true },
{ "envirotech.com.au", true },
@@ -11144,8 +11201,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "epassafe.com", true },
{ "epave.paris", true },
{ "epay.bg", true },
- { "epaygateway.net", true },
- { "ephe.be", true },
+ { "epdeveloperchallenge.com", true },
{ "ephesusbreeze.com", true },
{ "epi.one", true },
{ "epic-vistas.com", true },
@@ -11155,11 +11211,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "epicenter.work", true },
{ "epicenter.works", true },
{ "epicentre.works", true },
+ { "epichouse.net", false },
{ "epicinflatables.co.uk", true },
{ "epickitty.co.uk", true },
{ "epicpages.com", true },
{ "epicsecure.de", true },
- { "epicsoft.de", true },
+ { "epicsoft.de", false },
{ "epicvistas.com", true },
{ "epicvistas.de", true },
{ "epicwalnutcreek.com", true },
@@ -11203,13 +11260,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "eppelduerferjugend.lu", true },
{ "eppelpress.lu", true },
{ "epreskripce.cz", true },
- { "epsilon.dk", true },
{ "epsorting.cz", true },
+ { "epublibre.org", true },
{ "epulsar.ru", true },
{ "epvin.com", true },
{ "epyonsuniverse.net", true },
{ "eq-serve.com", true },
- { "eqorg.com", true },
{ "equalcloud.com", true },
{ "equidam.com", true },
{ "equinecoaching.ca", true },
@@ -11247,7 +11303,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ericjohnltd.com", true },
{ "erick.blog", true },
{ "ericleuthardt.com", true },
- { "ericloud.tk", true },
{ "erico.jp", true },
{ "ericoc.com", true },
{ "ericwie.se", true },
@@ -11262,20 +11317,20 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "erikwalther.eu", true },
{ "erinaceinae.com", true },
{ "eriner.me", true },
- { "erinlin.com", true },
{ "erinn.io", true },
{ "erisrenee.com", true },
{ "erixschueler.de", true },
{ "erkaelderbarenaaben.dk", true },
{ "ernest.ly", true },
- { "eroimatome.com", true },
{ "eroma.com.au", true },
{ "eron.info", true },
+ { "erotpo.cz", false },
{ "erp-band.ru", true },
{ "erp.band", true },
{ "erpax.com", true },
{ "erpband.ru", true },
{ "erpcargo.com", false },
+ { "erperium.com", true },
{ "erpiv.com", true },
{ "errietta.me", true },
{ "errlytics.com", true },
@@ -11308,7 +11363,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "es-geenen.de", true },
{ "es.search.yahoo.com", false },
{ "es888.net", true },
- { "es8888.net", true },
{ "es999.net", true },
{ "es9999.net", true },
{ "esagente.com", true },
@@ -11319,10 +11373,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "esb-in.net", true },
{ "esb-top.com", true },
{ "esb-top.net", true },
- { "esb111.com", true },
- { "esb111.net", true },
- { "esb112.com", true },
- { "esb112.net", true },
{ "esb116.com", true },
{ "esb1314.net", true },
{ "esb1668.com", true },
@@ -11341,12 +11391,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "esb1788.info", true },
{ "esb1788.net", true },
{ "esb1788.org", true },
- { "esb17888.com", true },
{ "esb2013.com", true },
{ "esb2013.net", true },
{ "esb2099.com", true },
{ "esb2099.net", true },
- { "esb222.net", true },
{ "esb258.net", true },
{ "esb325.com", true },
{ "esb325.net", true },
@@ -11358,16 +11406,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "esb553.com", true },
{ "esb555.biz", true },
{ "esb555.cc", true },
- { "esb555.com", true },
{ "esb556.com", true },
{ "esb5889.com", true },
{ "esb5889.net", true },
{ "esb6.net", true },
- { "esb666.com", true },
- { "esb666.net", true },
- { "esb66666.com", true },
{ "esb677.net", true },
- { "esb688.com", true },
{ "esb775.net", true },
{ "esb777.biz", true },
{ "esb777.me", true },
@@ -11377,7 +11420,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "esb8886.com", true },
{ "esb9527.com", true },
{ "esb9588.com", true },
- { "esb9588.info", true },
{ "esb9588.net", true },
{ "esb9588.org", true },
{ "esb999.org", true },
@@ -11398,8 +11440,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "esball518.info", true },
{ "esball518.net", true },
{ "esball518.org", true },
- { "esball888.com", true },
- { "esball888.net", true },
{ "esballs.com", true },
{ "esbbon.com", true },
{ "esbbon.net", true },
@@ -11413,6 +11453,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "esbm5.net", true },
{ "esc.chat", true },
{ "escael.org", true },
+ { "escape2rooms.fr", true },
{ "escapeplaza.de", true },
{ "escapetalk.nl", true },
{ "escargotbistro.com", true },
@@ -11420,9 +11461,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "esclear.de", true },
{ "escontact.ch", true },
{ "escort-byuro.net", true },
- { "escortdisplay.com", true },
{ "escortmantra.com", true },
- { "escritoriodearte.com", true },
+ { "escritoriodearte.com", false },
{ "escuelabiblica.com", true },
{ "escxtra.com", true },
{ "escyr.top", true },
@@ -11431,15 +11471,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "eservices-greece.com", true },
{ "esg-abi2001.de", true },
{ "esgr.in", true },
+ { "eshepperd.com", true },
{ "eshobe.com", true },
{ "eshop-prices.com", true },
{ "eshtapay.com", true },
- { "esibun.net", true },
{ "esigmbh.de", true },
{ "esipublications.com", true },
{ "esite.ch", true },
{ "eskdale.net", true },
- { "eskriett.com", true },
{ "esmoney.cc", true },
{ "esmoney.me", true },
{ "esoa.net", true },
@@ -11464,7 +11503,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "esphigmenou.gr", true },
{ "espigol.org", true },
{ "esports-network.de", true },
- { "esprit-cloture.fr", true },
{ "espritrait.com", true },
{ "esquirou-trieves.fr", true },
{ "esquisse.fr", true },
@@ -11477,22 +11515,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "essayhave.com", true },
{ "essaynews.com", true },
{ "essaypro.net", true },
- { "essayshark.com", true },
{ "essaytalk.com", true },
{ "essaywebsite.com", true },
{ "essaywriting.biz", true },
{ "essenalablog.de", true },
- { "essenceofvitalitydetox.com", true },
{ "essencesdeprana.org", true },
- { "essentiel-physique.com", true },
{ "essite.net", true },
{ "esslm.sk", true },
{ "essoduke.org", true },
- { "essteebee.ch", true },
{ "estafallando.es", true },
{ "estafallando.mx", true },
{ "estaleiro.org", true },
{ "estan.cn", true },
+ { "estate360.co.tz", true },
{ "estateczech-eu.ru", true },
{ "estcequejailaflemme.fr", true },
{ "estcequonmetenprodaujourdhui.info", true },
@@ -11506,17 +11541,20 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "estoic.net", true },
{ "estoniantrade.ee", true },
{ "estonoentraenelexamen.com", true },
- { "estoqueinformatica.com.br", true },
+ { "estudioamazonico.com", true },
{ "estudiserradal.com", true },
{ "esw00.com", true },
+ { "esw06.com", true },
{ "esw07.com", true },
{ "esw08.com", true },
{ "esw09.com", true },
{ "eswap.cz", true },
+ { "et-inf.de", true },
{ "etaes.eu", true },
{ "etajerka-spb.ru", true },
{ "etalent.net", true },
{ "etaoinwu.win", true },
+ { "etasigmaphi.org", true },
{ "etath.com", true },
{ "etaxi.tn", true },
{ "etccooperative.org", true },
@@ -11529,15 +11567,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "eteesheet.com", true },
{ "eternal-warriors.de", true },
{ "eternalabyss.int.eu.org", true },
+ { "eternalflame.cn", true },
{ "eternit.roma.it", true },
{ "etfacta.com", true },
{ "eth-faucet.net", true },
{ "eth0.nl", true },
+ { "etha.nz", true },
{ "ethack.org", true },
{ "ethaligan.fr", true },
{ "ethan.pm", true },
{ "ethandelany.me", true },
- { "ethanlew.is", true },
{ "ethercalc.com", true },
{ "ethercalc.org", true },
{ "ethergeist.de", true },
@@ -11552,12 +11591,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ethitter.com", true },
{ "ethosinfo.com", true },
{ "etienne.cc", true },
+ { "etikus-hacker.hu", true },
{ "etincelle.ml", true },
{ "etiquetaunica.com.br", true },
{ "etoile-usedcars.com", true },
{ "etre-soi.ch", true },
{ "etre-vivant.fr", true },
{ "etrecosmeticderm.com", true },
+ { "etresmant.es", true },
{ "etrker.com", true },
{ "etskinner.com", true },
{ "etskinner.net", true },
@@ -11574,7 +11615,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "euaggelion.blog.br", true },
{ "euanbarrett.com", true },
{ "euchre.us", true },
- { "eucollegetours.com", true },
{ "eugenekay.com", true },
{ "eugenetech.org", true },
{ "eujuicers.bg", true },
@@ -11603,7 +11643,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "euroalter.com", true },
{ "eurocenterobuda.hu", true },
{ "eurocomcompany.cz", true },
- { "euroescortguide.com", true },
{ "eurofrank.eu", true },
{ "eurolocarno.es", true },
{ "europapier.at", true },
@@ -11620,6 +11659,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "europapier.ua", true },
{ "europastudien.de", true },
{ "european-agency.org", true },
+ { "europeancupinline.eu", true },
{ "europeanpreppers.com", true },
{ "europeantimberconnectors.ca", true },
{ "europeantransportmanagement.com", true },
@@ -11629,6 +11669,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "europop.com", true },
{ "eurora.de", true },
{ "euroscot.de", true },
+ { "euroservice.com.gr", true },
{ "euroshop.or.at", true },
{ "euroskano.nl", true },
{ "eurotime.ua", true },
@@ -11646,6 +11687,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "eva.cz", true },
{ "evaartinger.de", true },
{ "evades.io", true },
+ { "evadifranco.com", true },
+ { "evafojtova.cz", true },
{ "evailoil.ee", true },
{ "evailoil.eu", true },
{ "evalesc.com", true },
@@ -11666,11 +11709,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "evemarketer.com", true },
{ "evemodx.com", true },
{ "evenementenhoekvanholland.nl", true },
+ { "evenstar-gaming.com", true },
{ "event4fun.no", true },
{ "eventaro.com", true },
{ "eventive.org", true },
{ "eventosenmendoza.com.ar", true },
- { "eventplace.me", false },
{ "events-hire.co.uk", true },
{ "eventtech.com", false },
{ "ever.sale", true },
@@ -11680,6 +11723,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "everhome.de", true },
{ "everling.lu", true },
{ "everlong.org", true },
+ { "everpcpc.com", true },
{ "evertonarentwe.com", true },
{ "everwaking.com", false },
{ "everybodyhertz.co.uk", true },
@@ -11689,7 +11733,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "everydaywp.com", true },
{ "everyex.com", true },
{ "everyfad.com", true },
- { "everymove.org", true },
{ "everythingaccess.com", true },
{ "everytrycounts.gov", false },
{ "everywhere.cloud", true },
@@ -11701,9 +11744,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "evidenceusa.com.br", true },
{ "evidentiasoftware.com", true },
{ "evilarmy.com", true },
+ { "evilcult.me", true },
+ { "evileden.com", true },
{ "evilized.de", true },
{ "evilmartians.com", true },
- { "evilness.nl", true },
{ "evilsite.cf", true },
{ "evilvolcanolairs.com", true },
{ "evion.nl", true },
@@ -11713,10 +11757,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "evodation.org", true },
{ "evodia-spirits.de", true },
{ "evok.com.co", false },
+ { "evokepk.com", true },
{ "evolutioninflatables.co.uk", true },
{ "evolutionlending.co.uk", true },
{ "evolutionpets.com", true },
{ "evolvetechnologies.co.uk", true },
+ { "evolvingthoughts.net", true },
{ "evonews.com", true },
{ "evony.eu", true },
{ "evosyn.com", true },
@@ -11747,15 +11793,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "exagoni.com.my", true },
{ "example.sc", true },
{ "example.wf", true },
+ { "examsmate.in", true },
{ "exaplac.com", true },
{ "exatmiseis.net", false },
{ "exceed.global", true },
+ { "exceedagency.com", true },
{ "exceltechdubai.com", true },
{ "exceltechoman.com", true },
+ { "exceltobarcode.com", true },
{ "excentos.com", true },
{ "excessamerica.com", true },
{ "excesssecurity.com", true },
- { "exchangecoordinator.com", true },
{ "exchangeworks.co", true },
{ "exchaser.com", true },
{ "exclusivebouncycastles.co.uk", true },
@@ -11763,14 +11811,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "exdamo.de", false },
{ "exe-boss.tech", true },
{ "exebouncycastles.co.uk", true },
- { "execution.biz.tr", true },
{ "exehack.net", true },
{ "exeintel.com", true },
{ "exekutori.com", true },
{ "exemples-de-stands.com", true },
+ { "exerforge.com", true },
+ { "exerforge.net", true },
{ "exeria.de", true },
{ "exexcarriers.com", true },
+ { "exgaywatch.com", true },
{ "exgen.io", true },
+ { "exhaledayspa.com.au", true },
{ "exhalespa.com", true },
{ "exhibityour.com", true },
{ "exiahost.com", true },
@@ -11778,14 +11829,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "exmoe.com", true },
{ "exocen.com", true },
{ "exon.io", true },
+ { "exoscale.ch", true },
{ "exoscale.com", true },
{ "exoten-spezialist.de", true },
+ { "exoticads.com", true },
{ "exousiakaidunamis.pw", true },
{ "exp.de", true },
{ "expancio.com", true },
{ "expandeco.com", true },
{ "expatmortgage.uk", true },
- { "expatriate.pl", true },
{ "expecting.com.br", true },
{ "experienceoutdoors.org.uk", true },
{ "experienceoz.com.au", true },
@@ -11796,11 +11848,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "experts-en-gestion.fr", true },
{ "expertsverts.com", true },
{ "expiscor.solutions", true },
- { "explodingcamera.com", true },
{ "exploflex.com.br", true },
{ "exploit.party", true },
{ "exploit.ph", true },
{ "exploited.cz", true },
+ { "exploitit.com.au", true },
{ "exploodo.rocks", true },
{ "exploravacations.in", true },
{ "exploringenderby.com", true },
@@ -11829,10 +11881,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "expxkcd.com", true },
{ "exs.lv", true },
{ "exside.com", true },
+ { "exsora.com", true },
{ "extasic.com", true },
{ "extendwings.com", true },
{ "extensia.it", true },
- { "extensibility.biz.tr", true },
{ "extensiblewebmanifesto.org", true },
{ "extensiblewebreportcard.org", true },
{ "extensiblewebsummit.org", true },
@@ -11863,6 +11915,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "extreme-players.de", true },
{ "extreme.co.th", true },
{ "extremeservicesandrestoration.com", true },
+ { "exultcosmetics.co.uk", true },
{ "exyplis.com", true },
{ "eyasc.nl", true },
{ "eydesignguidelines.com", true },
@@ -11874,6 +11927,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "eyep.me", true },
{ "eyes-berg.ch", true },
{ "eyes-berg.com", true },
+ { "eyesandearsrescue.org", true },
{ "eyesonly.cc", true },
{ "eynio.com", true },
{ "eyona.com", true },
@@ -11888,14 +11942,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ezgif.com", true },
{ "ezhik-din.ru", true },
{ "eznfe.com", true },
- { "ezorgportaal.nl", true },
{ "eztvtorrent.com", true },
{ "ezwritingservice.com", true },
+ { "ezzhole.net", true },
{ "f-be.com", true },
{ "f-droid.org", true },
{ "f-hd.net", true },
{ "f-thie.de", true },
+ { "f-u-c-k.wien", true },
{ "f00.fr", true },
+ { "f0x.es", true },
{ "f13cybertech.cz", true },
{ "f1classement.com", true },
{ "f1fever.co.uk", true },
@@ -11910,7 +11966,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "f5w.de", true },
{ "fa-works.com", true },
{ "faber.org.ru", true },
- { "faberusa.com", true },
{ "fabian-fingerle.de", true },
{ "fabian-koeppen.de", true },
{ "fabianackle.ch", true },
@@ -11929,11 +11984,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fabriziorocca.com", true },
{ "fabriziorocca.it", true },
{ "fabrysociety.org", true },
+ { "fabse.net", true },
{ "facanabota.com", true },
{ "facanabota.com.br", true },
+ { "faccess.it", true },
{ "facciadastile.it", true },
{ "face-mania.com", true },
{ "facealacrise.fr", true },
+ { "facebattle.com", true },
{ "facebook-atom.appspot.com", true },
{ "facebook.com", true },
{ "facebydrh.com", true },
@@ -11990,8 +12048,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fairviewmotel-simcoe.com", true },
{ "fairydust.space", true },
{ "faithgrowth.com", true },
+ { "faithindemocracy.eu", false },
{ "faithleaks.org", true },
{ "faithmissionaries.com", true },
+ { "faithwatch.org", true },
{ "faixaazul.com", true },
{ "fakeapple.nl", true },
{ "fakerli.com", true },
@@ -12011,6 +12071,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fallenangeldrinks.com", true },
{ "fallenangelspirits.co.uk", true },
{ "fallenangelspirits.com", true },
+ { "fallenmystic.com", true },
{ "fallenspirits.co.uk", true },
{ "falling.se", true },
{ "fallofthecitadel.com", true },
@@ -12018,6 +12079,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "falsum.net", true },
{ "fam-kreibich.de", true },
{ "fam-stemmer.de", false },
+ { "fam-weyer.de", false },
{ "famcloud.de", true },
{ "famdouma.nl", true },
{ "fameng.nl", true },
@@ -12052,9 +12114,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fandomservices.com", true },
{ "fanfareunion.ch", true },
{ "fangs.ink", true },
+ { "fanhouwan.com", true },
{ "fanjoe.be", true },
{ "fansided.com", true },
- { "fansmade.art", true },
{ "fantasiapainter.com", true },
{ "fantasticcleaners.com.au", true },
{ "fantastichandymanmelbourne.com.au", true },
@@ -12071,7 +12133,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fap.no", true },
{ "faq.ie", true },
{ "fara.gov", true },
- { "faradji.nu", true },
{ "faradome.ws", true },
{ "faraslot8.com", true },
{ "farcecrew.de", true },
@@ -12085,15 +12146,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "farmer.dating", true },
{ "farmers.gov", false },
{ "farmkazuto.com", true },
+ { "faroebusinessreport.com", true },
{ "faroes.net", true },
{ "faroes.org", true },
{ "farrel-f.cf", true },
{ "farrel-f.id", true },
{ "farrel-f.tk", true },
{ "farrelf.blog", true },
+ { "farsil.eu", true },
{ "fart.wtf", true },
{ "farwat.ru", true },
- { "fascia.fit", true },
+ { "fashion-stoff.de", true },
{ "fashion24.de", true },
{ "fashion4ever.pl", true },
{ "fashionunited.be", true },
@@ -12124,6 +12187,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fastconfirm.com", true },
{ "fastforwardsociety.nl", true },
{ "fastforwardthemes.com", true },
+ { "fastlike.co", true },
{ "fastmail.com", false },
{ "fastonline.ro", true },
{ "fastpresence.com", true },
@@ -12145,6 +12209,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fawong.com", true },
{ "faxite.com", true },
{ "faxvorlagen-druckvorlagen.de", true },
+ { "fayntic.com", true },
{ "fb.me", true },
{ "fbcdn.net", true },
{ "fbcopy.com", true },
@@ -12173,6 +12238,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fdms.gov", true },
{ "fdn.one", true },
{ "fdos.me", true },
+ { "fdp-brig-glis.ch", true },
{ "fdsys.gov", false },
{ "feac.us", true },
{ "feaden.me", true },
@@ -12185,7 +12251,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "featuredmen.com", false },
{ "feb.gov", true },
{ "fecik.sk", true },
- { "fed51.com", true },
{ "fedcenter.gov", true },
{ "federaljobs.gov", true },
{ "federalreserve.gov", true },
@@ -12196,10 +12261,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fedorahosted.org", true },
{ "fedoramagazine.org", true },
{ "fedorapeople.org", true },
+ { "fedoraproject.org", true },
+ { "fedpartnership.gov", true },
{ "fedramp.gov", false },
{ "fedrtc.org", true },
{ "fedshirevets.gov", true },
{ "fedux.com.ar", true },
+ { "fedvan.com", true },
+ { "fee-hosting.com", true },
{ "feedbin.com", false },
{ "feedfall.com", true },
{ "feedhq.org", true },
@@ -12207,9 +12276,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "feedough.com", true },
{ "feedthefuture.gov", true },
{ "feegg.com.br", true },
+ { "feel-events.com", true },
{ "feel.aero", true },
{ "feelgood-workouts.de", true },
- { "feelmom.com", true },
{ "feeltennis.net", true },
{ "feen.us", true },
{ "feepod.com", true },
@@ -12224,18 +12293,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fegli.gov", true },
{ "fehngarten.de", true },
{ "fehnladen.de", true },
- { "feigling.net", true },
+ { "feigling.net", false },
{ "feilen.de", true },
{ "feisbed.com", true },
{ "feisim.com", true },
{ "feisim.org", true },
- { "feist.io", true },
{ "feistyduck.com", true },
{ "feizhujianzhi.com", true },
{ "fejes.house", true },
{ "feld.design", true },
{ "feld.saarland", true },
{ "feldhousen.com", true },
+ { "felett.es", true },
{ "felgitscher.xyz", true },
{ "felinepc.com", true },
{ "felisslovakia.sk", true },
@@ -12260,8 +12329,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "feng-in.com", true },
{ "feng-in.net", true },
{ "feng.si", true },
- { "fengyi.tel", true },
- { "fenixhost.com.br", true },
{ "fenster-bank.at", true },
{ "fenster-bank.de", true },
{ "ferdies.co.za", true },
@@ -12313,6 +12380,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ff-getzersdorf.at", true },
{ "ff-obersunzing-niedersunzing.de", true },
{ "ff14-mstdn.xyz", true },
+ { "ffb.gov", false },
{ "ffbans.org", true },
{ "ffiec.gov", true },
{ "ffis.me", true },
@@ -12338,11 +12406,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fiam.me", true },
{ "fiareapp.red", false },
{ "fiasgo.com", true },
+ { "fiasgo.dk", true },
{ "fiasgo.i.ng", true },
{ "fibo-forex.org", true },
- { "fibrasynormasdecolombia.com", true },
{ "fibretv.co.nz", true },
{ "fibretv.tv", true },
+ { "fichier-pdf.fr", true },
{ "fickweiler.nl", true },
{ "ficlab.com", true },
{ "ficus.io", true },
@@ -12353,12 +12422,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fidelis-it.net", true },
{ "fidhouriet.ch", true },
{ "fiduciaire-ratio.ch", true },
- { "fieldclockapp.com", true },
{ "fieldwork-paysage.com", true },
{ "fierlafijn.net", true },
{ "fiery.me", true },
{ "fifei.de", true },
{ "fifichachnil.paris", true },
+ { "fifr.nl", true },
{ "fiftynorth.eu", true },
{ "fiftyonetielt.be", true },
{ "figan.cz", true },
@@ -12369,33 +12438,37 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "figura.cz", true },
{ "figurasdelinguagem.com.br", true },
{ "fiilr.com", true },
+ { "fiissh.tech", true },
{ "fiix.io", true },
+ { "fijnefeestdageneneengelukkignieuwjaar.nl", true },
+ { "fijnewoensdag.nl", true },
{ "fiken.no", true },
{ "fil.fi", true },
{ "filanthropystar.org", true },
{ "file-cloud.eu", true },
{ "file-pdf.it", true },
+ { "filebox.moe", false },
{ "filecopa.com", true },
- { "fileon.com", true },
{ "files.from-me.org", true },
{ "filestar.io", true },
{ "filetransfer.one", true },
- { "filewall.de", true },
{ "filezilla-project.org", true },
+ { "filezilla.cn", true },
{ "filhin.es", true },
{ "filhodohomem.com", true },
{ "fili.org", true },
{ "filidorwiese.nl", true },
+ { "filiio.com", true },
{ "filingsmadeeasy.com", true },
{ "filip-prochazka.com", true },
{ "filippo.io", true },
{ "filipsebesta.com", true },
{ "filleritemsindia.com", true },
- { "fillitupchallenge.eu", true },
{ "fillo.sk", true },
{ "film-tutorial.com", true },
{ "film.photography", true },
{ "film.photos", true },
+ { "filmatiporno.xxx", true },
{ "filme-onlines.com", true },
{ "filmesonline.online", true },
{ "filmitis.com", true },
@@ -12403,6 +12476,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "filmserver.de", true },
{ "filmsite-studio.com", true },
{ "filoo.de", true },
+ { "filstop.com", true },
{ "filterflasche-kaufen.de", true },
{ "filterlists.com", true },
{ "filtr.me", true },
@@ -12413,7 +12487,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "financejobs.ch", true },
{ "financepark.ch", true },
{ "financniexperti.sk", true },
+ { "finansa.no", true },
{ "finch.am", true },
+ { "finchi.de", true },
{ "finchnest.co.uk", true },
{ "find-job-in.com", true },
{ "find-mba.com", true },
@@ -12432,16 +12508,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "findyourvoice.ca", true },
{ "fine-services.paris", true },
{ "finecocoin.io", true },
+ { "finefriends.nl", true },
{ "finelovedolls.com", true },
{ "finenet.com.tw", true },
{ "finfev.de", true },
{ "finflix.net", true },
{ "finform.ch", true },
{ "fini-de-jouer.ch", true },
+ { "finisron.in", true },
{ "finkelstein.fr", true },
{ "finkenberger.org", false },
{ "finnclass.cz", true },
{ "finnwea.com", true },
+ { "finpt.com", false },
{ "finsprings.org", true },
{ "fintandunleavy.com", true },
{ "fintechnics.com", false },
@@ -12496,8 +12575,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fischer-its.com", false },
{ "fischer-kundendienst.de", true },
{ "fischers.cc", true },
- { "fischers.it", true },
- { "fischers.srv.br", true },
{ "fise.cz", true },
{ "fish-hook.ru", true },
{ "fishbattle.io", true },
@@ -12512,6 +12589,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fishtacos.blog", true },
{ "fistu.la", true },
{ "fit-4u.ch", true },
+ { "fit-mit-nina.com", true },
{ "fit-mit-system.eu", true },
{ "fit365.jp", true },
{ "fitchannel.com", true },
@@ -12525,10 +12603,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fiuxy.bz", true },
{ "fiuxy.co", true },
{ "fiuxy.me", true },
+ { "fiuxy.org", true },
{ "fiveboosts.xyz", true },
+ { "fivethirtyeight.com", true },
{ "fixatom.com", true },
- { "fixeaide.com", true },
- { "fixeaider.com", true },
{ "fixel.express", true },
{ "fixforce.nl", true },
{ "fixhotsauce.com", true },
@@ -12536,16 +12614,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fixitfelix.us", true },
{ "fixmyalarmpanel.co.uk", true },
{ "fixmycomputerdude.com", true },
- { "fixvoltage.ru", true },
{ "fizz.buzz", false },
{ "fj.search.yahoo.com", false },
{ "fj.simple.com", false },
{ "fjharcu.com", true },
+ { "fjordboge.dk", true },
{ "fjugstad.com", true },
{ "fkcdn.de", true },
{ "fkfev.de", true },
{ "fktpm.ru", true },
- { "flaemig42.de", true },
+ { "flaemig42.de", false },
{ "flagburningworld.com", true },
{ "flagfox.net", true },
{ "flagshop.jp", true },
@@ -12553,17 +12631,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "flamer-scene.com", false },
{ "flamero.fi", true },
{ "flamet.eu", true },
+ { "flamingkeys.com", true },
{ "flamme-von-anor.de", true },
{ "flana.com", true },
{ "flanga.io", true },
{ "flangaapis.com", true },
{ "flapoverspeed.com", true },
- { "flaretechnologies.io", true },
{ "flashback.org", true },
{ "flashbeing.com", true },
{ "flashcomp.cz", true },
{ "flashgot.net", true },
{ "flat.io", true },
+ { "flatlandchurch.com", true },
{ "flatmail.pl", true },
{ "flatmatehub.com.au", true },
{ "flatpackmates.co.uk", true },
@@ -12588,11 +12667,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fleetssl.com", true },
{ "flehm.de", true },
{ "fleisch.club", true },
+ { "flers-agglo.fr", true },
+ { "flerstourisme.fr", true },
{ "fletchto99.com", true },
{ "flets-ms.com", true },
{ "fleurenplume.fr", true },
{ "fleurette.me", true },
+ { "fleuryfleury.com", true },
{ "flexapplications.se", true },
+ { "fleximaal.com", true },
+ { "fleximal.com", true },
{ "fleximus.org", false },
{ "flexport.com", true },
{ "flexstart.me", true },
@@ -12604,7 +12688,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "flightmedx.com", true },
{ "flightschoolbooking.com", true },
{ "flightschoolcandidates.gov", true },
- { "flightschoolusa.com", true },
{ "flightzero.cf", true },
{ "fliino.com", true },
{ "fliino.eu", true },
@@ -12621,9 +12704,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "flirtee.net", true },
{ "flirtfaces.de", true },
{ "flirtos.de", true },
+ { "flirtycourts.com", true },
{ "flixports.com", true },
{ "flmortgagebank.com", true },
+ { "floatationlocations.com", true },
{ "floaternet.com", true },
+ { "flockbox.club", true },
{ "flocktofedora.org", true },
{ "floersheimer-openair.de", true },
{ "floffi.media", true },
@@ -12644,13 +12730,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "floriankeller.de", true },
{ "florianmitrea.uk", true },
{ "florianschmitt.ca", true },
- { "floridaderi.ru", true },
+ { "floriantanner.ch", true },
+ { "floridafabrication.net", true },
{ "floridafieros.org", true },
{ "floridahomesinvest.com", true },
{ "florinlungu.it", true },
{ "florismoo.nl", true },
{ "florismouwen.com", false },
- { "florispoort.nl", true },
{ "florisvdk.net", true },
{ "floriswesterman.nl", true },
{ "flosch.at", false },
@@ -12696,9 +12782,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "flyinglocksmiths.com", false },
{ "flyingpackets.net", true },
{ "flyingrub.me", true },
+ { "flyingspaghettimonsterdonationsfund.nl", true },
{ "flymns.fr", true },
{ "flynn.io", true },
{ "flyserver.co.il", true },
+ { "flyshe.co.uk", true },
{ "flyspace.ml", true },
{ "flyssh.net", true },
{ "flyswoop.com", true },
@@ -12717,7 +12805,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fmussatmd.com", true },
{ "fnb-griffinonline.com", true },
{ "fnbnokomis.com", true },
- { "fnfpt.co.uk", true },
+ { "fnkr.net", true },
{ "fnof.ch", true },
{ "fnordserver.eu", true },
{ "fnzc.co.nz", true },
@@ -12733,10 +12821,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "foia.gov", true },
{ "foiaonline.gov", true },
{ "fojing.com", true },
+ { "fojt.cz", true },
+ { "fojtova.cz", true },
+ { "fojtovi.cz", true },
{ "fokan.be", true },
{ "fokep.no", true },
{ "fokkusu.fi", true },
{ "fol.tf", true },
+ { "folio.no", true },
{ "foljeton.dk", true },
{ "folk.as", true },
{ "folkfests.org", true },
@@ -12752,10 +12844,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "folwark.krakow.pl", true },
{ "folwarkwiazy.pl", true },
{ "fomopop.com", true },
- { "fondanastasia.ru", true },
{ "fondationwiggli.ch", true },
{ "fondsdiscountbroker.de", true },
{ "fondy.eu", true },
+ { "fondy.ru", true },
{ "fondy.ua", true },
{ "fonga.ch", true },
{ "fonolo.com", true },
@@ -12770,16 +12862,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "foodattitude.ch", true },
{ "foodblogger.club", true },
{ "foodcowgirls.com", true },
- { "foodev.de", true },
{ "foodsafety.gov", true },
{ "foodsafetyjobs.gov", true },
- { "foodserve.in", true },
+ { "foodsouvenirs.it", true },
+ { "foodtable.at", true },
{ "foodwise.marketing", true },
{ "foolip.org", true },
{ "foolwealth.com", true },
{ "foorack.com", true },
{ "fooster.io", true },
{ "foot.fr", true },
+ { "footagecrate.com", true },
{ "footballforum.de", true },
{ "for.care", true },
{ "foray-jero.me", true },
@@ -12794,25 +12887,28 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "foreachcode.com", true },
{ "forecastcity.com", true },
{ "foreclosureattorneyhouston.com", true },
+ { "forefrontcloud.com", true },
{ "foregroundweb.com", true },
{ "forellenpark.com", true },
{ "forento.be", true },
+ { "foresdon.jp", true },
{ "foresthillhomes.ca", true },
{ "forestraven.net", true },
{ "foreverssl.com", true },
{ "foreversummertime.com", true },
+ { "forewordreviews.com", true },
{ "forex.ee", true },
{ "forexchef.de", true },
{ "forexee.com", true },
+ { "forexsignals7.com", true },
{ "forextimes.ru", false },
{ "forfunssake.co.uk", true },
{ "forge-goerger.eu", true },
{ "forglemmigej.net", true },
{ "forgotten-legends.org", true },
- { "formadmin.com", true },
- { "formaliteo.com", true },
{ "forman.store", true },
{ "formapi.io", true },
+ { "formasdemaquillarse.com", true },
{ "format-paysage.ch", true },
{ "formation-assureur.com", true },
{ "formation-mac.ch", true },
@@ -12821,6 +12917,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "formini.dz", true },
{ "formkiq.com", true },
{ "formula-ot.ru", true },
+ { "formulacionquimica.com", true },
{ "fornoreason.net.au", true },
{ "foro.io", false },
{ "forodeespanol.com", true },
@@ -12828,6 +12925,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "forologikidilosi.com.gr", true },
{ "forourselves.com", true },
{ "forpc.us", true },
+ { "forplayers.pl", true },
{ "forrestheller.com", true },
{ "forro.info", true },
{ "forsakringsarkivet.se", true },
@@ -12838,6 +12936,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "forteggz.nl", true },
{ "fortesanshop.it", true },
{ "fortnine.ca", true },
+ { "fortnitemagic.ga", true },
{ "fortran.io", true },
{ "fortress.no", true },
{ "fortress.sk", true },
@@ -12847,7 +12946,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "forum-heg.ch", true },
{ "forum-kinozal-tv.appspot.com", true },
{ "forum-kinozal.appspot.com", true },
- { "forum.linode.com", false },
{ "forum.quantifiedself.com", false },
{ "forum3.ru", true },
{ "forumvoordemocratie.nl", true },
@@ -12858,7 +12956,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fosaudit.com", true },
{ "foscamcanada.com", true },
{ "fosdem.org", true },
- { "foshanshequ.com", false },
{ "fossguard.com", true },
{ "fossilfreeyale.org", true },
{ "fotella.com", true },
@@ -12878,6 +12975,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fotoleitner.com", true },
{ "fotoleitner.de", true },
{ "fotonjan.com", true },
+ { "fotostravestisbr.com", true },
{ "fotostudio-leitner.com", true },
{ "fotostudio-leitner.de", true },
{ "fotostudio-schweiz.ch", true },
@@ -12893,6 +12991,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fourdesignstudio.com", true },
{ "foutrelis.com", true },
{ "fowlervwparts.com", true },
+ { "fowlsmurf.net", true },
{ "foxbnc.co.uk", true },
{ "foxdev.co", true },
{ "foxhound.com.br", true },
@@ -12906,6 +13005,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fpersona.com", true },
{ "fpki.sh", true },
{ "fptravelling.com", false },
+ { "fpvr.org", true },
{ "fpy.cz", true },
{ "fr.search.yahoo.com", false },
{ "fr33tux.org", true },
@@ -12919,13 +13019,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "framedpaws.com", true },
{ "framezdakkapellen.nl", true },
{ "fran.cr", true },
- { "francesca-and-lucas.com", true },
{ "francescopalazzo.com", true },
{ "francescoservida.ch", true },
{ "francetraceur.fr", true },
{ "franchini.email", true },
{ "franchini.engineer", true },
- { "francisli.net", true },
+ { "francisli.net", false },
{ "franckgirard.net", true },
{ "franckyz.com", true },
{ "francois-gaillard.fr", true },
@@ -12977,70 +13076,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "frdl.ch", true },
{ "freaksites.dk", true },
{ "freaksports.com.au", true },
- { "freakyamazing.com", true },
- { "freakyaweso.me", true },
- { "freakyawesome.band", true },
- { "freakyawesome.ca", true },
- { "freakyawesome.club", true },
- { "freakyawesome.co", true },
- { "freakyawesome.co.uk", true },
- { "freakyawesome.com", true },
- { "freakyawesome.company", true },
- { "freakyawesome.email", true },
- { "freakyawesome.events", true },
- { "freakyawesome.fashion", true },
- { "freakyawesome.fitness", true },
- { "freakyawesome.fm", true },
- { "freakyawesome.fun", true },
- { "freakyawesome.fyi", true },
- { "freakyawesome.games", true },
- { "freakyawesome.guide", true },
- { "freakyawesome.guru", true },
- { "freakyawesome.in", true },
- { "freakyawesome.info", true },
- { "freakyawesome.life", true },
- { "freakyawesome.live", true },
- { "freakyawesome.marketing", true },
- { "freakyawesome.me", true },
- { "freakyawesome.media", true },
- { "freakyawesome.network", true },
- { "freakyawesome.news", true },
- { "freakyawesome.online", true },
- { "freakyawesome.org", true },
- { "freakyawesome.photography", true },
- { "freakyawesome.photos", true },
- { "freakyawesome.press", true },
- { "freakyawesome.recipes", true },
- { "freakyawesome.rentals", true },
- { "freakyawesome.reviews", true },
- { "freakyawesome.services", true },
- { "freakyawesome.shop", true },
- { "freakyawesome.site", true },
- { "freakyawesome.social", true },
- { "freakyawesome.software", true },
- { "freakyawesome.solutions", true },
- { "freakyawesome.store", true },
- { "freakyawesome.team", true },
- { "freakyawesome.tips", true },
- { "freakyawesome.today", true },
- { "freakyawesome.tours", true },
- { "freakyawesome.tv", true },
- { "freakyawesome.video", true },
- { "freakyawesome.website", true },
- { "freakyawesome.work", true },
- { "freakyawesome.world", true },
- { "freakyawesome.xyz", true },
- { "freakyawesomeblog.com", true },
- { "freakyawesomeio.com", true },
- { "freakyawesomemedia.com", true },
- { "freakyawesomenews.com", true },
- { "freakyawesomeplugin.com", true },
- { "freakyawesomeplugins.com", true },
- { "freakyawesomesite.com", true },
- { "freakyawesometeam.com", true },
- { "freakyawesometheme.com", true },
- { "freakyawesomethemes.com", true },
- { "freakyawesomewp.com", true },
{ "frebi.org", true },
{ "frebib.co.uk", true },
{ "frebib.com", true },
@@ -13055,7 +13090,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "frederikvig.com", true },
{ "fredloya.com", true },
{ "fredriksslekt.se", true },
- { "fredtec.ru", true },
{ "fredvoyage.fr", true },
{ "free-your-pc.com", true },
{ "free.com.tw", true },
@@ -13064,7 +13098,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "freebcard.com", true },
{ "freebetoffers.co.uk", true },
{ "freeblog.me", true },
- { "freebookmakerbets.com.au", true },
{ "freebookmakersbetsandbonuses.com.au", true },
{ "freeboson.org", true },
{ "freecam2cam.site", true },
@@ -13072,10 +13105,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "freecookies.nl", true },
{ "freedev.cz", true },
{ "freedom.press", true },
+ { "freedomfinance.se", true },
{ "freedomflotilla.org", true },
{ "freedomfrontier.tk", true },
{ "freedomkiaparts.com", true },
{ "freedomonline.bg", true },
+ { "freedomrahoitus.fi", true },
{ "freeenglishhelp.com", true },
{ "freeform4u.de", true },
{ "freegame-mugen.jp", true },
@@ -13094,6 +13129,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "freelanceshipping.com", true },
{ "freelauri.com", true },
{ "freelifer.jp", true },
+ { "freelo.cz", true },
{ "freelysurf.cf", true },
{ "freemans.com", true },
{ "freemyipod.org", true },
@@ -13109,9 +13145,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "freesitemapgenerator.com", true },
{ "freesms-online.de", true },
{ "freesnowden.is", true },
+ { "freesoft-board.to", true },
{ "freesoftlab.com", true },
{ "freesolitaire.win", true },
- { "freesourcestl.org", true },
{ "freethetv.ie", true },
{ "freetsa.org", true },
{ "freevps.us", false },
@@ -13168,6 +13204,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "friends24.cz", true },
{ "friendship-quotes.co.uk", true },
{ "friendshipismagicsquad.com", true },
+ { "frieslandrail.nl", true },
{ "friet.org", true },
{ "frietbesteld.nl", true },
{ "friezy.ru", true },
@@ -13184,13 +13221,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "frizo.com", true },
{ "frly.de", true },
{ "frob.nl", true },
- { "froehlich.it", true },
+ { "froehliche-hessen.de", true },
{ "frogatto.com", true },
{ "frogeye.fr", true },
{ "froggitt.com", true },
{ "frogsonamission.de", true },
{ "froh.co.jp", true },
{ "frolova.org", true },
+ { "from-the-net.com", true },
{ "fromscratch.rocks", true },
{ "fromthesoutherncross.com", true },
{ "fronteers.nl", false },
@@ -13202,7 +13240,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "froufe.com", true },
{ "frozen-geek.net", true },
{ "frozen-solid.net", true },
+ { "frprn.com", true },
{ "frprn.es", true },
+ { "frprn.xxx", true },
{ "frtn.com", true },
{ "frtr.gov", true },
{ "frtrains.com", true },
@@ -13222,6 +13262,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fs-fitness.eu", true },
{ "fs-maistadt.de", true },
{ "fs257.com", true },
+ { "fsapubs.gov", false },
+ { "fsbn.eu", true },
{ "fsbnh.bank", true },
{ "fsbpaintrock.com", true },
{ "fsbturton.com", true },
@@ -13229,11 +13271,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fsck.jp", true },
{ "fsckd.com", true },
{ "fscott.de", true },
+ { "fsdress.com", true },
+ { "fsfxpackages.com", true },
{ "fsj4u.ch", true },
{ "fsk.fo", true },
{ "fsky.info", true },
{ "fsm2016.org", true },
{ "fsps.ch", true },
+ { "fsstyle.com", true },
+ { "fsvoboda.cz", true },
{ "fsvt.ch", true },
{ "ft.com", false },
{ "ftang.de", true },
@@ -13255,7 +13301,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fuckobr.com", true },
{ "fuckobr.net", true },
{ "fuckobr.org", true },
- { "fuckobr.ru", true },
{ "fuckobr.su", true },
{ "fuckonthefirst.date", true },
{ "fuckup.dk", true },
@@ -13273,10 +13318,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fukakukeiba.com", true },
{ "fukikaeru.com", true },
{ "fukushimacoffee.com", true },
+ { "fulfilmentcrowd.com", true },
{ "fulgenzis.com", true },
{ "fuliwang.info", true },
{ "fuliwang.us", true },
{ "full-race.com", true },
+ { "full-stack.ninja", true },
{ "fullautomotivo.com.br", true },
{ "fullbundle.com", true },
{ "fullhost.com", true },
@@ -13300,11 +13347,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "funchestra.at", false },
{ "functional.cc", true },
{ "functions-online.com", true },
- { "fundacionfranciscofiasco.org", true },
+ { "fundayltd.com", true },
{ "fundays.nl", true },
{ "fundchan.com", true },
{ "fundeego.com", true },
- { "funderburg.me", false },
{ "fundingempire.com", true },
{ "fundort.ch", true },
{ "funds.ddns.net", true },
@@ -13313,7 +13359,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "funfoodco.co.uk", true },
{ "funfunmstdn.tokyo", true },
{ "funhouse-inflatables.co.uk", true },
- { "funi4u.com", true },
{ "funinbeds.org.uk", true },
{ "funken-networks.de", true },
{ "funktionel.co", true },
@@ -13354,25 +13399,28 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "furryyiff.site", true },
{ "fursuitbutts.com", true },
{ "furtherfood.com", true },
+ { "fusa-miyamoto.jp", true },
+ { "fuselight.nl", true },
{ "fuseos.net", true },
{ "fushee.com", true },
{ "fusiongaming.de", true },
+ { "fuskator.com", true },
{ "fussball-xxl.de", true },
{ "fussell.io", true },
{ "futagro.com", true },
{ "futrou.com", true },
{ "future-moves.com", true },
- { "futurefire.de", true },
{ "futurefund.com", true },
{ "futurefundapp.com", true },
{ "futurehack.io", true },
{ "futurenda.com", true },
{ "futureoceans.org", true },
+ { "futuretimes.io", true },
{ "futurezone.at", true },
{ "futurope.com", true },
{ "fuwafuwa.moe", true },
- { "fuxwerk.de", true },
{ "fuyu.moe", true },
+ { "fuzoku.jp", true },
{ "fuzzing-project.org", true },
{ "fveevaete.com", true },
{ "fwdx.net", true },
@@ -13404,7 +13452,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fxwebstudio.net.au", true },
{ "fyksen.me", true },
{ "fyn.nl", true },
- { "fyol.xyz", true },
+ { "fyretrine.com", true },
{ "fysesbjerg.dk", true },
{ "fysio123.nl", true },
{ "fysiomassageoosterhout.nl", true },
@@ -13419,6 +13467,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "g-marketing.ro", true },
{ "g-o.pl", true },
{ "g-rom.net", true },
+ { "g0881.com", true },
{ "g1.ie", true },
{ "g10e.ch", true },
{ "g2links.com", true },
@@ -13435,7 +13484,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gabe565.com", true },
{ "gabecook.com", true },
{ "gabemack.com", true },
- { "gabethebabetv.com", true },
{ "gabinetpsychoterapii.krakow.pl", true },
{ "gabriel.to", true },
{ "gabrielsimonet.ch", true },
@@ -13461,10 +13509,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gaines-sodiamex.fr", true },
{ "gaio-automobiles.fr", true },
{ "gaireg.de", true },
- { "gaiserik.com", true },
{ "gaitandmobility.com", true },
{ "gaitrehabilitation.com", true },
{ "gaitresearch.com", true },
+ { "gajas18.com", true },
{ "gakkainavi-epsilon.jp", true },
{ "gakkainavi-epsilon.net", true },
{ "gakkainavi.jp", true },
@@ -13479,13 +13527,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "galeries.photo", true },
{ "galgopersa.com.br", true },
{ "galileanhome.org", true },
- { "galileomtz.com", true },
{ "galinas-blog.de", true },
{ "galinos.gr", true },
{ "galle.cz", true },
{ "gallerify.eu", true },
+ { "galletasgabi.com.mx", false },
{ "galleyfoods.com", true },
{ "gallicrooster.com", true },
+ { "gallifreyapp.co.uk", true },
{ "gallifreypermaculture.com.au", true },
{ "gallun-shop.com", true },
{ "galpaoap.com.br", true },
@@ -13498,7 +13547,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gambitnash.com", true },
{ "gambitprint.com", true },
{ "gamblersgaming.eu", true },
- { "game-files.net", false },
{ "game7.de", true },
{ "gameblabla.nl", true },
{ "gamebrott.com", true },
@@ -13512,12 +13560,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gamekaitori.jp", true },
{ "gamekeepers.cz", true },
{ "gamenerd.net", true },
- { "gameofbay.org", true },
{ "gameofpwnz.com", true },
{ "gamepad.com.br", true },
{ "gamercredo.com", true },
{ "gamerezo.com", true },
- { "gamerz-stream.com", true },
{ "gamerzdot.com", true },
{ "games4theworld.org", true },
{ "gamesaviour.com", true },
@@ -13546,8 +13592,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gandc.co", false },
{ "gandgliquors.com", true },
{ "ganggalbichler.at", true },
- { "gangnam-club.com", true },
{ "gansleit.com", false },
+ { "ganzgraph.de", true },
{ "ganztagplus.de", true },
{ "gao.rocks", true },
{ "gaojianli.tk", true },
@@ -13556,7 +13602,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gapdirect.com", true },
{ "gapfa.org", true },
{ "gaptek.id", false },
- { "gar-nich.net", false },
{ "garage-leone.com", true },
{ "garage-meynard.com", true },
{ "garageenginuity.com", true },
@@ -13565,14 +13610,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "garagevanhulle-used.be", true },
{ "garanteasy.com", true },
{ "garbage-juice.com", true },
+ { "garbomuffin.com", true },
{ "garda-see.mobi", true },
{ "gardedenfantspourtous.fr", true },
{ "garden-life.org", true },
{ "gardengameshireuk.com", true },
{ "garderobche.eu", true },
{ "gardikagigih.com", true },
+ { "gardinte.com", true },
{ "garedtech.com", false },
{ "garethbowker.com", true },
+ { "garethkirkreviews.com", true },
{ "garethrhugh.es", true },
{ "garforthgolfclub.co.uk", true },
{ "gargazon.net", true },
@@ -13588,6 +13636,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "garywhittington.com", true },
{ "gashalot.com", true },
{ "gastoudererenda.nl", true },
+ { "gastritisolucion.com", true },
{ "gastrotiger.at", true },
{ "gastrotiger.de", true },
{ "gate2home.com", true },
@@ -13595,7 +13644,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gatewaybridal.com", true },
{ "gatewaybronco.com", true },
{ "gatilagata.com.br", true },
- { "gatomix.net", true },
{ "gauche.com", true },
{ "gaudeamus-folklor.cz", true },
{ "gaudere.co.jp", true },
@@ -13603,13 +13651,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gautham.it", false },
{ "gauthier.dk", true },
{ "gautvedt.no", true },
- { "gavick.com", false },
{ "gavins.stream", true },
{ "gavinsblog.com", true },
{ "gay-jays.com", true },
+ { "gay-sissies.com", true },
+ { "gayforgenji.com", true },
{ "gayjays.com", true },
{ "gaysexpositions.guide", true },
+ { "gaysfisting.com", true },
+ { "gaytorrent.ru", true },
{ "gayukai.net", true },
+ { "gayxsite.com", true },
{ "gazachallenge.org", true },
{ "gazee.net", true },
{ "gazellegames.net", false },
@@ -13619,10 +13671,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gbit.xyz", true },
{ "gbl.selfip.net", true },
{ "gboys.net", true },
- { "gc-mc.de", true },
{ "gc.gy", true },
{ "gcbit.dk", true },
{ "gcfadvisors.com", true },
+ { "gcgeeks.com.au", true },
{ "gcguild.net", true },
{ "gchq.wtf", true },
{ "gcoded.de", true },
@@ -13631,13 +13683,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gdax.com", true },
{ "gdb-tutorial.net", true },
{ "gdgrzeszow.pl", true },
+ { "gdhzcgs.com", true },
{ "gdiary.net", true },
{ "gdpr-pohotovost.cz", true },
- { "gdprhallofshame.com", true },
{ "gdutnic.com", true },
{ "gdv.me", true },
{ "gdz-spishy.com", true },
- { "gdz.tv", true },
{ "ge3k.net", false },
{ "gear4you.shop", true },
{ "gearallnews.com", true },
@@ -13662,19 +13713,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gee.is", true },
{ "geecrat.com", true },
{ "geek-hub.de", true },
+ { "geek.ch", true },
{ "geek1.de", true },
{ "geekabit.nl", true },
{ "geekandi.com", true },
{ "geekariom.com", true },
{ "geekchimp.com", true },
{ "geekclubbooks.com", true },
- { "geekdt.com", true },
{ "geeklair.net", true },
{ "geeklan.co.uk", true },
{ "geekles.net", true },
{ "geeknik.com", true },
{ "geekpad.com", true },
- { "geeks.one", true },
{ "geekseries.fr", true },
{ "geekshirts.cz", true },
{ "geektopia.es", true },
@@ -13691,13 +13741,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "geertswei.nl", true },
{ "gegeco.ch", true },
{ "geh.li", true },
- { "gehaowu.com", true },
{ "gehopft.de", true },
{ "gehreslaw.com", true },
{ "gehrke.in", true },
{ "gehsicht.de", true },
{ "geigenbauer.in", false },
{ "geiser-family.ch", true },
+ { "geisser-elektronikdata.de", true },
{ "gelb-computer.de", true },
{ "geld-im-blick.de", true },
{ "geld24.nl", true },
@@ -13709,14 +13759,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gelog-software.de", false },
{ "geloofindemocratie.nl", false },
{ "geluidsstudio.com", true },
- { "gem-indonesia.net", true },
+ { "gem-indonesia.net", false },
{ "gem-info.fr", true },
{ "gemeentemolenwaard.nl", true },
{ "gemeinsam-ideen-verwirklichen.de", true },
{ "gemini.com", true },
{ "gemquery.com", true },
{ "genchev.io", true },
- { "gencmedya.com", true },
+ { "gencmedya.com", false },
{ "genderidentiteit.nl", true },
{ "gendrin.com", true },
{ "gendundrupa.ch", true },
@@ -13726,6 +13776,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "geneau.net", true },
{ "genehightower.com", true },
{ "genehome.com.au", true },
+ { "generador-electrico.com", true },
{ "general-anaesthesia.com", true },
{ "general-anaesthetics.com", true },
{ "general-anesthesia.com", true },
@@ -13744,13 +13795,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "geneve-naturisme.ch", true },
{ "genevoise-entretien.ch", true },
{ "genfaerd.dk", true },
- { "genie-seiner-generation.de", true },
{ "geniusteacher.in", true },
{ "geniuszone.biz", true },
{ "genocidediary.org", true },
+ { "genodeftest.de", true },
+ { "genome.gov", true },
{ "genomequestlive.com", true },
{ "genosse-einhorn.de", true },
- { "genossen.ru", true },
{ "genoveve.de", true },
{ "gensend.com", true },
{ "gensenwedding.jp", true },
@@ -13778,10 +13829,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "george-brighton.co.uk", true },
{ "george-orwell.com", true },
{ "georgebrighton.co.uk", true },
+ { "georgecolgrove.com", true },
{ "georgehalachev.com", true },
{ "georgemaschke.com", true },
{ "georgemaschke.net", true },
- { "georgeperez.me", true },
{ "georgescarryout.com", true },
{ "georgewbushlibrary.gov", true },
{ "georgiaglassrepair.com", true },
@@ -13803,7 +13854,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "germandarknes.net", true },
{ "germansoldiers.net", true },
{ "germanssky.de", true },
- { "germanticz.de", true },
{ "gernert-server.de", true },
{ "gero.io", true },
{ "gerritcodereview.com", true },
@@ -13815,12 +13865,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "geschwinder.net", true },
{ "gestorehotel.com", true },
{ "gestormensajeria.com", true },
- { "gesundes-im-napf.de", true },
{ "gesundheitmassage.com", true },
{ "gesundheitswelt24.de", true },
{ "get-erp.ru", true },
{ "get-it-live.com", true },
- { "get-it-live.de", true },
{ "get-link.info", true },
{ "get-on.bid", true },
{ "get-refer.com", true },
@@ -13828,6 +13876,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "get2getha.org", true },
{ "get4x.com", true },
{ "geta.pub", true },
+ { "getbonfire.com", true },
{ "getbooks.co.il", true },
{ "getbox.me", true },
{ "getbreadcrumbs.com", true },
@@ -13842,14 +13891,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "getfirstalert.com", true },
{ "getfittedstore.com", true },
{ "getflorence.co.uk", true },
- { "getfuturama.com", true },
{ "getgeek.es", true },
{ "gethow.org", true },
{ "gethttpsforfree.com", true },
{ "geti2p.com", true },
{ "getidmcc.com", true },
{ "getimgs.com", true },
- { "getitlive.de", true },
{ "getitpeople.com", true },
{ "getmango.com", true },
{ "getmdl.io", true },
@@ -13873,15 +13920,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "getsilknow.com", true },
{ "getsmartaboutdrugs.gov", true },
{ "getsport.mobi", true },
- { "getswadeshi.com", true },
+ { "getsubs.net", true },
{ "getteamninja.com", true },
{ "getthefriendsyouwant.com", true },
{ "getticker.com", true },
{ "getts.ro", true },
{ "getupandbounce.co.uk", true },
{ "getvdownloader.com", true },
+ { "getweloop.io", true },
{ "getwisdom.io", true },
- { "getyeflask.com", true },
{ "getyou.onl", true },
{ "getyourlifestraight.com", true },
{ "geyduschek.be", true },
@@ -13900,18 +13947,20 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gfnetfun.cf", true },
{ "gforce.ninja", true },
{ "gfoss.eu", true },
+ { "gfournier.ca", true },
{ "gfxbench.com", true },
{ "ggdcpt.com", true },
{ "gginin.today", true },
{ "ggl-luzern.ch", true },
{ "ggma.co.uk", true },
{ "ggmmontascale.it", true },
+ { "ggobbo.com", true },
{ "ggp2.com", true },
{ "ggs-marschallstrasse.de", true },
{ "ggs.jp", true },
{ "ggservers.com", true },
+ { "ggx.us", true },
{ "gha.st", true },
- { "ghcif.de", true },
{ "ghini.com", true },
{ "ghislainphu.fr", true },
{ "ghostblog.info", false },
@@ -13940,6 +13989,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gierds.de", true },
{ "giethoorn.com", true },
{ "gietvloergarant.nl", false },
+ { "giftcard.net", true },
{ "giftedconsortium.com", true },
{ "giftking.nl", false },
{ "giftmaniabrilhos.com.br", true },
@@ -13953,9 +14003,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gigawa.lt", true },
{ "giggletotz.co.uk", true },
{ "gigime.com", true },
+ { "gigin.eu", true },
+ { "gigin.me", true },
{ "gigis-pizzeria.de", true },
{ "gigis.cloud", true },
{ "giglink.club", true },
+ { "gigolodavid.be", true },
{ "gigseekr.com", true },
{ "gigtroll.eu", true },
{ "gijsbertus.com", true },
@@ -13966,6 +14019,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gilium.com", true },
{ "gillesdesnoyers.com", true },
{ "gillesmorelle.com", true },
+ { "gillfamily.de", true },
{ "gillmanandsoame.co.uk", true },
{ "gillyscastles.co.uk", true },
{ "gilmoreid.com.au", true },
@@ -13974,7 +14028,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ginie.de", true },
{ "ginionusedcars.be", true },
{ "ginja.co.th", true },
- { "ginkel.com", true },
{ "ginnegappen.nl", true },
{ "ginniemae.gov", true },
{ "ginza-luce.net", true },
@@ -13982,6 +14035,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "giochi-online.ws", true },
{ "giochiecodici.it", true },
{ "gioielleriamolena.com", true },
+ { "gippert-klein.de", true },
{ "giraffeduck.com", true },
{ "giraffeinflatables.co.uk", true },
{ "giraffenland.de", true },
@@ -13991,7 +14045,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "girlsforum.com", true },
{ "girlsgenerationgoods.com", true },
{ "girlsgonesporty.com", true },
- { "girlsnet.work", true },
{ "girlz.jp", true },
{ "girsa.org", true },
{ "girvas.ru", true },
@@ -14001,7 +14054,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "git.ac.cn", true },
{ "git.market", true },
{ "git.tt", true },
- { "gitar.io", true },
{ "gitep.org.uk", true },
{ "gites-alizea.com", true },
{ "gitesdeshautescourennes.com", true },
@@ -14009,6 +14061,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gitla.in", true },
{ "gitstuff.tk", true },
{ "gittigidiyor.com", true },
+ { "gittr.ch", true },
{ "giuem.com", true },
{ "giunchi.net", true },
{ "giuseppemacario.men", true },
@@ -14022,21 +14075,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "givesunlight.com", true },
{ "givingnexus.org", false },
{ "givip.eu", true },
- { "gixtools.co.uk", true },
{ "gixtools.com", true },
{ "gixtools.net", true },
- { "gixtools.uk", true },
{ "gizmo.ovh", true },
{ "gj-bochum.de", true },
{ "gjcampbell.co.uk", true },
{ "gjengset.com", true },
{ "gjspunk.de", false },
{ "gkimanyar.org", true },
+ { "gkoenig-innenausbau.de", true },
{ "gkralik.eu", true },
{ "gl.search.yahoo.com", false },
{ "glaciernursery.com", true },
{ "gladwellentertainments.co.uk", true },
- { "glahcks.com", true },
{ "glamguru.co.il", true },
{ "glamguru.world", true },
{ "glamour4you.de", true },
@@ -14077,9 +14128,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "globalhorses.de", true },
{ "globalipaction.ch", true },
{ "globalisierung-fakten.de", true },
+ { "globalityinvestment.com", true },
{ "globalmoneyapp.com", true },
{ "globalonetechnology.com", true },
- { "globalperspectivescanada.com", true },
{ "globalprojetores.com.br", true },
{ "globalresearchcouncil.org", true },
{ "globalresistancecorporation.com", true },
@@ -14087,8 +14138,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "globcoin.io", true },
{ "globeinform.com", true },
{ "globelink-group.com", true },
+ { "glocalworks.jp", true },
{ "glofox.com", true },
{ "gloneta.com", false },
+ { "glossopnorthendafc.co.uk", true },
{ "glotech.co.uk", true },
{ "glotechkitchens.co.uk", true },
{ "glotechrepairs.co.uk", true },
@@ -14097,18 +14150,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "glueckskindter.de", true },
{ "gluedtomusic.com", true },
{ "gluit.de", true },
+ { "glutenfreelife.co.nz", true },
{ "glutenfreevr.com", true },
{ "glykofridis.nl", true },
- { "glyph.ws", true },
{ "glyxins.com", true },
{ "gm.search.yahoo.com", false },
{ "gmail.com", false },
- { "gmantra.org", true },
{ "gmbh-kiekin.de", true },
{ "gmc.uy", true },
{ "gmccar.it", true },
{ "gmcd.co", true },
{ "gmdu.net", true },
+ { "gmind.ovh", true },
{ "gmod.de", true },
{ "gmpark.dk", true },
{ "gmpartsdb.com", true },
@@ -14124,7 +14177,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gmx.fr", true },
{ "gmx.net", true },
{ "gn00.com", true },
- { "gnaptracker.tk", true },
{ "gnax.jp", false },
{ "gnetion.com", true },
{ "gnetwork.eu", true },
@@ -14136,9 +14188,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gnuplus.me", true },
{ "gnwp.eu", true },
{ "gnylf.com", true },
+ { "go-dutch.eu", true },
{ "go-embedded.de", true },
{ "go-wild.co.uk", true },
{ "go-zh.org", true },
+ { "go.microsoft.com", true },
{ "go.xero.com", false },
{ "go2ubl.nl", true },
{ "goa8.xyz", true },
@@ -14146,7 +14200,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "goalongtravels.com", true },
{ "goanalyse.co.uk", true },
{ "goand.run", true },
- { "goapunks.net", true },
{ "goatbot.xyz", true },
{ "goatcloud.com", true },
{ "gobarrelroll.com", true },
@@ -14158,6 +14211,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gocleanerslondon.co.uk", true },
{ "god-clan.hu", true },
{ "god-esb.com", true },
+ { "godaxen.tv", true },
{ "godbo9.cc", true },
{ "godbo9.com", true },
{ "godbo9.net", true },
@@ -14174,9 +14228,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "goedverzekerd.net", true },
{ "goemail.me", true },
{ "goerlitz-zgorzelec.org", true },
- { "goerres2014.de", true },
{ "goetemp.de", true },
{ "goetic.space", true },
+ { "goettinger-biergarten.de", true },
{ "goffrie.com", true },
{ "gofigure.fr", false },
{ "goflo.net", true },
@@ -14185,6 +14239,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gogleapis.com", true },
{ "gogonano.com", true },
{ "gogoodyear.eu", true },
+ { "gogroopie.com", true },
+ { "gogroopie.ie", true },
{ "gogrow.com", true },
{ "gogsat.com", true },
{ "gohon.org", true },
@@ -14208,11 +14264,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "goldstein.tel", true },
{ "golf18network.com", true },
{ "golf18staging.com", true },
- { "golfburn.com", true },
{ "golfhausmallorca.com", true },
{ "golfmeile.de", true },
{ "golfpark-bostalsee.de", true },
{ "golfscape.com", true },
+ { "golighthouse.com", true },
{ "golik.net.pl", false },
{ "golser.info", true },
{ "gomasy.jp", true },
@@ -14229,7 +14285,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gooday.life", true },
{ "gooddomainna.me", true },
{ "goodenough.nz", false },
- { "goodfeels.net", true },
+ { "goodvibesblog.com", true },
{ "google", true },
{ "google-analytics.com", true },
{ "googleandroid.cz", true },
@@ -14247,6 +14303,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gordonscouts.com.au", true },
{ "gorf.chat", true },
{ "gorf.club", true },
+ { "gorgias.me", true },
{ "gorky.media", true },
{ "gorn.ch", true },
{ "gorschenin.com", true },
@@ -14255,6 +14312,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gosforthdentalsurgery.co.uk", true },
{ "goshawkdb.io", true },
{ "goshin-group.co.jp", true },
+ { "goshow.tv", true },
{ "gospelfollower.com", true },
{ "gospelofmark.ch", true },
{ "gospelvestcination.de", true },
@@ -14262,6 +14320,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gostest.org", true },
{ "gosuland.org", true },
{ "got-tty.de", true },
+ { "goteborgsklassikern.se", true },
{ "gotech.com.eg", false },
{ "gothamlimo.com", true },
{ "gothic.dating", true },
@@ -14270,6 +14329,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "goto.google.com", true },
{ "goto.msk.ru", true },
{ "goto.world", true },
+ { "goto10.se", true },
{ "gotomi.info", true },
{ "gotowned.org", false },
{ "gotoxy.at", true },
@@ -14277,8 +14337,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gottcode.org", false },
{ "goudenharynck.be", true },
{ "gouforit.com", true },
- { "goujianwen.com", true },
- { "goukon.ru", true },
{ "gouldcooksey.com", true },
{ "goup.co", true },
{ "goup.com.tr", true },
@@ -14292,7 +14350,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "govtjobs.blog", true },
{ "govtrack.us", true },
{ "govype.com", true },
- { "gowe.wang", false },
{ "gowildrodeo.co.uk", true },
{ "gowin9.com", true },
{ "gowin9.net", true },
@@ -14302,7 +14359,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gpdimaranathasiantar.org", true },
{ "gpfclan.de", true },
{ "gpgscoins.com", true },
- { "gpio.gq", true },
{ "gplans.us", true },
{ "gpm.ltd", true },
{ "gprs.uk.com", true },
@@ -14316,8 +14372,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gr.search.yahoo.com", false },
{ "gra2.com", true },
{ "graasp.net", false },
+ { "grabacabpa.com", true },
{ "grabi.ga", true },
{ "grace-wan.com", true },
+ { "gracebaking.com", false },
{ "gracedays.org", true },
{ "gracethrufaith.com", true },
{ "gracetini.com", true },
@@ -14341,6 +14399,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "grahamcluley.com", true },
{ "grahamofthewheels.com", true },
{ "grailians.com", true },
+ { "grailify.com", true },
{ "graingert.co.uk", true },
{ "graliv.net", false },
{ "gram.tips", true },
@@ -14361,8 +14420,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "grandmusiccentral.com.au", true },
{ "grandpadusercontent.com", true },
{ "grandwailea.com", true },
- { "granfort.es", true },
+ { "granfort.es", false },
{ "granian.pro", true },
+ { "granishe.com", true },
{ "graniteind.com", true },
{ "grannys-stats.com", true },
{ "grannyshouse.de", true },
@@ -14383,6 +14443,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "grasshoppervape.com", true },
{ "grassreinforcement.com.au", true },
{ "gratis-lovecheck.de", true },
+ { "gratisgamecards.nl", true },
{ "gratisrollenspieltag.de", true },
{ "gratiswifivoorjegasten.nl", true },
{ "gratitudeabundancepassion.com", true },
@@ -14391,7 +14452,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gravilink.com", true },
{ "gravitascreative.net", true },
{ "gravitechthai.com", true },
- { "gravity-dev.de", false },
{ "gravity-inc.net", true },
{ "gravityformspdfextended.com", true },
{ "gravitypdf.com", true },
@@ -14406,6 +14466,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "grc.com", false },
{ "greatagain.gov", true },
{ "greatergoodoffers.com", true },
+ { "greatestwebsiteonearth.com", true },
{ "greatfire.org", true },
{ "greatislandarts.ca", true },
{ "greatlakeside.de", true },
@@ -14420,6 +14481,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "green-care.nl", true },
{ "green-light.co.nz", true },
{ "greenaddress.it", true },
+ { "greenapproach.ca", true },
{ "greencircleplantnursery.com.au", true },
{ "greencircleplantnursery.net.au", true },
{ "greenenergysolution.uk", true },
@@ -14435,6 +14497,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "greenpeace-magazin.de", true },
{ "greenpeace.berlin", true },
{ "greenroach.ru", true },
+ { "greenrushdaily.com", true },
{ "greensdictofslang.com", true },
{ "greensquare.tk", true },
{ "greenteamtwente.nl", true },
@@ -14443,6 +14506,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "greer.ru", true },
{ "greg.red", true },
{ "greger.me", true },
+ { "gregmilton.com", true },
+ { "gregmilton.org", true },
{ "gregoirow.be", true },
{ "gregorians.org", true },
{ "gregorkofler.com", true },
@@ -14454,6 +14519,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "grenadiere-kaarst.de", true },
{ "grenadierkorps-kaarst.de", true },
{ "grenadierkorps.de", true },
+ { "grendel.no", true },
{ "grengine.ch", true },
{ "grepmaste.rs", true },
{ "grepular.com", true },
@@ -14482,7 +14548,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "griegshipbrokers.com", true },
{ "griegshipbrokers.no", true },
{ "griesser2.de", true },
- { "grifomarchetti.com", true },
{ "grillteller42.de", true },
{ "grimcalc.com", true },
{ "grimm-gastrobedarf.de", true },
@@ -14495,8 +14560,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "grmp.fr", true },
{ "grocock.me.uk", true },
{ "groenaquasolutions.nl", true },
+ { "groenewoud.me", true },
{ "groentebesteld.nl", true },
- { "groenteclub.nl", true },
{ "groepjam-usedcars.be", true },
{ "grog.pw", true },
{ "grokker.com", true },
@@ -14509,7 +14574,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "groovydisk.com", true },
{ "groovygoldfish.org", true },
{ "gropp.org", true },
- { "grossberger-ge.org", true },
+ { "gross.business", true },
{ "grossell.ru", true },
{ "groszek.pl", true },
{ "groth.im", true },
@@ -14526,6 +14591,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "growingallthings.co.uk", true },
{ "growit.events", true },
{ "growy.ch", true },
+ { "grozter.se", true },
{ "grsecurity.net", true },
{ "gruble.de", true },
{ "gruebebraeu.ch", true },
@@ -14541,7 +14607,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "grunwaldzki.center", true },
{ "grunwasser.fr", true },
{ "grupomakben.com", true },
+ { "grupomedlegal.com", true },
{ "grupoparco.com", true },
+ { "gruppoipl.it", true },
+ { "gruselgrotte.com", true },
{ "grusenmeyer.be", true },
{ "gruwa.net", true },
{ "grytics.com", true },
@@ -14552,7 +14621,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gsimagebank.co.uk", true },
{ "gslink.me", true },
{ "gsmsecurity.net", true },
- { "gsoc.se", true },
{ "gsrc.io", true },
{ "gst.name", true },
{ "gst.priv.at", true },
@@ -14569,20 +14637,22 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gtmasterclub.it", false },
{ "gtmetrix.com", true },
{ "gtopala.com", true },
+ { "gtour.info", false },
{ "gtravers-basketmaker.co.uk", true },
{ "gts-dp.de", true },
{ "gtts.space", true },
{ "guanyembadalona.org", true },
+ { "guanzhong.ca", true },
{ "guardian360.nl", true },
{ "guardianproject.info", true },
{ "guardiansoftheearth.org", true },
{ "gubagoo.com", true },
{ "gubagoo.io", true },
- { "gudangpangan.id", true },
{ "gudini.net", true },
{ "gudrun.ml", true },
{ "guegan.de", true },
{ "guelo.ch", true },
+ { "guendra.dedyn.io", true },
{ "guenthereder.at", true },
{ "guerrilla.technology", true },
{ "guesthouse-namaste.com", true },
@@ -14601,13 +14671,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "guid2steamid.com", true },
{ "guid2steamid.pw", true },
{ "guide-peche-cantal.com", true },
- { "guidechecking.com", true },
+ { "guidebook.co.tz", true },
{ "guidedselling.net", true },
- { "guideline.gov", true },
- { "guidelines.gov", true },
+ { "guideline.gov", false },
+ { "guidelines.gov", false },
{ "guideo.ch", true },
{ "guidepointsecurity.com", true },
- { "guides-et-admin.com", true },
{ "guides-peche64.com", true },
{ "guidesetc.com", true },
{ "guidetoiceland.is", false },
@@ -14628,7 +14697,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gume4you.com", true },
{ "gumi.ca", true },
{ "gunceloyunhileleri.com", true },
- { "guniram.com", true },
{ "gunwatch.co.uk", true },
{ "gunworld.com.au", true },
{ "guochang.xyz", true },
@@ -14642,7 +14710,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gurochan.ch", true },
{ "gurpusmaximus.com", true },
{ "guru-naradi.cz", true },
- { "gurubetng.com", true },
{ "gurucomi.com", true },
{ "gurueffect.com", true },
{ "gurugardener.co.nz", true },
@@ -14650,20 +14717,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gustaff.de", true },
{ "gustiaux.com", true },
{ "gut8er.com.de", true },
- { "guts.me", true },
- { "guts.moe", true },
{ "gutschein-spezialist.de", true },
{ "gutscheingeiz.de", true },
{ "gutuia.blue", true },
{ "guus-thijssen.nl", true },
{ "guusvandewal.nl", true },
{ "guvernalternativa.ro", true },
- { "guyot-tech.com", true },
{ "gv-neumann.de", true },
{ "gvatas.in", true },
{ "gveh.de", true },
{ "gvi-timing.ch", true },
- { "gvi.be", true },
{ "gviedu.com", true },
{ "gvitiming.ch", true },
{ "gvm.io", true },
@@ -14713,6 +14776,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "h24.org", true },
{ "h2s-design.de", true },
{ "h2u.tv", true },
+ { "h3artbl33d.nl", true },
+ { "h3z.jp", false },
{ "h404bi.com", true },
{ "ha-kunamatata.de", true },
{ "ha3.eu", true },
@@ -14733,7 +14798,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "haccp.milano.it", true },
{ "haccp.roma.it", true },
{ "hacettepeteknokent.com.tr", true },
- { "hachre.de", true },
+ { "hachre.de", false },
{ "hack.club", true },
{ "hackademix.net", true },
{ "hackanders.com", true },
@@ -14741,7 +14806,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hackbarth.guru", true },
{ "hackbeil.name", true },
{ "hackcraft.net", true },
- { "hackdown.me", true },
{ "hackenkunjeleren.nl", true },
{ "hackenturet.dk", true },
{ "hacker.club", true },
@@ -14764,6 +14828,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hackerpoints.com", true },
{ "hackerschat.net", true },
{ "hackerstxt.org", true },
+ { "hackettrecipes.com", true },
{ "hackgins.com", true },
{ "hackingand.coffee", false },
{ "hackingdh.com", true },
@@ -14775,7 +14840,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hackthissite.org", true },
{ "hacktic.info", true },
{ "hacktivis.me", true },
- { "hackyourfaceoff.com", true },
+ { "hackzogtum-coburg.de", true },
{ "hadaly.fr", true },
{ "hadleighswimmingclub.co.uk", true },
{ "hadouk.in", true },
@@ -14791,17 +14856,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "haha-raku.com", true },
{ "hahay.es", true },
{ "haiboxu.com", true },
- { "hail2u.net", true },
{ "hailer.com", true },
{ "hairbeautyartists.it", true },
{ "haircrazy.com", true },
- { "hairplaybychenellekay.com", true },
+ { "hairplaybychenellekay.com", false },
{ "hairraisingphotobooths.co.uk", true },
{ "hairtonic-lab.com", true },
{ "haixihui.cn", true },
{ "haizum.pro", true },
{ "hajekj.net", true },
- { "hajnzic.at", true },
{ "hak5.org", true },
{ "hakaru.org", true },
{ "hakase.io", true },
@@ -14809,6 +14872,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hake.me", true },
{ "hal-9th.space", true },
{ "halacs.hu", true },
+ { "halbich.design", true },
{ "haleo.net", true },
{ "half.host", true },
{ "halfco.de", true },
@@ -14832,10 +14896,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hamacho-kyudo.com", true },
{ "hamali.bg", true },
{ "hamburgerbesteld.nl", true },
+ { "hamcocc.com", true },
{ "hamcram.io", true },
{ "hamiltonlinen.com", true },
{ "hamiltonmedical.nl", true },
- { "hamish.ca", true },
{ "hammer-corp.com", true },
{ "hammer-schnaps.com", true },
{ "hammer-sms.com", true },
@@ -14846,16 +14910,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hanakaraku.com", true },
{ "hanashi.eu", true },
{ "hanbing.it", true },
- { "hancatemc.com", true },
{ "handbrake.fr", true },
{ "handcraft.eu.org", true },
{ "handgelenkbandage-test.de", true },
{ "handlecoin.com", true },
{ "handleidingkwijt.com", true },
{ "handmade-workshop.de", true },
- { "handmadegobelin.com", true },
{ "handmadeshoes.pe", true },
- { "handmadetutorials.ro", true },
{ "handyglas.com", true },
{ "handymanlondonplease.co.uk", true },
{ "handynummer.online", true },
@@ -14863,7 +14924,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "handyticket.de", true },
{ "hanfox.co.uk", false },
{ "hanfverband-erfurt.de", true },
- { "hang333.moe", true },
{ "hangar.hosting", true },
{ "hangcapnach.com", true },
{ "hangouts.google.com", true },
@@ -14872,6 +14932,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hannoluteijn.nl", true },
{ "hanoibuffet.com", true },
{ "hansbijster.nl", true },
+ { "hansch.ventures", true },
+ { "hanschventures.com", true },
+ { "hansen-kronshagen.de", true },
{ "hansen.hn", true },
{ "hansmund.com", true },
{ "hansolrella.com", true },
@@ -14886,13 +14949,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hanzubon.jp", true },
{ "hao-zhang.com", true },
{ "haogoodair.ca", true },
- { "haoqi.men", true },
+ { "haotown.cn", true },
{ "haozhang.org", true },
{ "haozi.me", true },
{ "hapheemraadssingel.nl", true },
{ "hapijs.cn", true },
{ "hapissl.com", true },
{ "hapivm.com", true },
+ { "happndin.com", true },
{ "happy-baby.info", true },
{ "happy-end-shukatsu.com", true },
{ "happyagain.de", true },
@@ -14904,7 +14968,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "happydietplan.com", true },
{ "happydoq.ch", true },
{ "happygadget.me", true },
- { "happyheartsabode.com", true },
{ "happykidscastles.co.uk", true },
{ "happylifestyle.com", true },
{ "happyschnapper.com", true },
@@ -14929,13 +14992,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hardrain980.com", true },
{ "hardtfrieden.de", true },
{ "hardtime.ru", true },
+ { "harekaze.info", true },
{ "haribilalic.com", true },
{ "harilova.fr", true },
{ "harisht.me", false },
{ "haritsa.co.id", true },
{ "harjitbhogal.com", true },
{ "harlor.de", true },
- { "harmfarm.nl", true },
{ "harmoney.co.nz", true },
{ "harmoney.com", true },
{ "harmoney.com.au", true },
@@ -14944,9 +15007,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "harp.gov", true },
{ "harrcostl.com", true },
{ "harringtonca.com", true },
- { "harrisonsdirect.co.uk", true },
{ "harrisonswebsites.com", true },
{ "harrisonvillenaz.org", true },
+ { "harry-baker.com", true },
{ "harrymclaren.co.uk", true },
{ "harryphoto.fr", true },
{ "harrysgardengamehire.co.uk", true },
@@ -14962,6 +15025,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "harvester.fr", true },
{ "harveyauzorst.com", true },
{ "harveymilton.com", true },
+ { "has-no-email-set.de", false },
{ "hasdf.de", true },
{ "hasecuritysolutions.com", true },
{ "haselsteiner.me", true },
@@ -14972,6 +15036,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hashi.dk", true },
{ "hashiconf.eu", true },
{ "hashicorp.com", true },
+ { "hashimah.ca", true },
{ "hashimoto-jimusho.com", true },
{ "hashinteractive.com", true },
{ "hashish.net", true },
@@ -14982,7 +15047,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hasilocke.de", true },
{ "haskovec.com", true },
{ "hasselbach-dellwig.de", true },
- { "hatarisecurity.co.ke", true },
{ "hatcherlawgroupnm.com", true },
{ "hatul.info", true },
{ "haucke.xyz", true },
@@ -15010,10 +15074,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "havellab.de", true },
{ "havelland-obstler.de", true },
{ "haven-moon.com", true },
+ { "havenstrategies.com", true },
{ "haverstack.com", true },
+ { "havetherelationshipyouwant.com", true },
{ "hawaar.com", true },
{ "hawaya.com", true },
- { "hawk-la.com", true },
{ "hawkeyeinsight.com", true },
{ "hawkinsonkiaparts.com", true },
{ "hawkofgeorgia.com", true },
@@ -15052,10 +15117,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hdguru.com", true },
{ "hdhoang.space", true },
{ "hdnastudio.com", true },
- { "hdritalyphotos.com", true },
{ "hdrsource.com", true },
{ "hdrtranscon.com", true },
{ "hds-lan.de", true },
+ { "hdwallpapers.net", true },
{ "heaaart.com", true },
{ "head.org", true },
{ "head.ru", true },
@@ -15087,6 +15152,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "healthybeterlife.click", true },
{ "healthyfitfood.com", true },
{ "healthypeople.gov", true },
+ { "heap.zone", true },
{ "hearmeraw.uk", true },
{ "heart.taxi", true },
{ "heartbeat24.de", true },
@@ -15094,16 +15160,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "heartlandbiomed.com", true },
{ "heartmdinstitute.com", true },
{ "heartsintrueharmony.com", true },
- { "heartsucker.com", true },
+ { "heartsucker.com", false },
{ "hearttruth.gov", true },
{ "heartview.com.br", true },
{ "heartwoodart.com", true },
{ "hearty.blog", true },
- { "hearty.cf", true },
{ "hearty.ga", true },
{ "hearty.gq", true },
{ "hearty.me", true },
{ "hearty.ml", true },
+ { "hearty.ooo", true },
{ "hearty.org.tw", true },
{ "hearty.taipei", true },
{ "hearty.us", true },
@@ -15116,7 +15182,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "heavyequipments.org", true },
{ "heayao.com", true },
{ "hebergeurssd.com", true },
- { "hebikhiv.nl", true },
{ "hebingying.cn", true },
{ "hebocon.nl", true },
{ "hebriff.com", true },
@@ -15181,6 +15246,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "helencrump.co.uk", true },
{ "helenelefauconnier.com", true },
{ "helenkellersimulator.org", true },
+ { "helfordriversc.co.uk", true },
{ "helichat.de", true },
{ "helikon.ro", true },
{ "helioanodyne.eu", true },
@@ -15191,21 +15257,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hellersgas.com", true },
{ "helles-koepfchen.de", true },
{ "helloacm.com", true },
- { "hellomouse.net", true },
- { "hellotandem.com", true },
{ "hellsgamers.pw", true },
{ "hellsh.com", true },
{ "helmut-a-binser.de", true },
{ "help.simpletax.ca", true },
{ "helpconnect.com.au", true },
- { "helpdebit.com", true },
- { "helpfacile.com", true },
- { "helpfixe.com", true },
- { "helpflux.com", true },
- { "helpfute.com", true },
{ "helpgoabroad.com", true },
{ "helpmij.cf", true },
- { "helppresta.com", true },
{ "helpscoutdocs.com", true },
{ "helpstarloja.com.br", true },
{ "helsinki.dating", true },
@@ -15215,15 +15273,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hemdal.se", true },
{ "hemnet.se", true },
{ "hen.ne.ke", true },
+ { "henchman.io", true },
+ { "hendersonvalleyautomotive.co.nz", true },
{ "hendrik.li", true },
{ "hendrinortier.nl", true },
{ "hendyisaac.com", true },
{ "hengelsportdeal.com", true },
{ "hengstumone.com", true },
+ { "henhenlu.com", true },
{ "henkboelman.com", true },
{ "henkbrink.com", true },
{ "henker.net", true },
{ "henkverlinde.com", false },
+ { "henley-computer-repairs.co.uk", true },
{ "henleybouncycastles.co.uk", true },
{ "hennadesigns.org", true },
{ "hennecke-forstbetrieb.de", true },
@@ -15237,17 +15299,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "henrock.net", true },
{ "henry.gg", true },
{ "henryphan.com", false },
+ { "hentaiz.net", true },
{ "hentschke-bau.de", true },
{ "hentschke-betonfertigteilwerk.de", true },
{ "hentschke-invest.de", true },
{ "heppler.net", true },
{ "heptafrogs.de", true },
- { "heptner24.de", true },
- { "her25.com", false },
{ "herbal-id.com", true },
{ "herbandpat.org", true },
{ "herberichfamily.com", true },
{ "herbert.io", true },
+ { "herbhuang.com", true },
{ "herbweb.net", true },
{ "herbweb.org", true },
{ "herculex.fi", true },
@@ -15265,6 +15327,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "herndl.org", true },
{ "herni-kupony.cz", true },
{ "herocentral.de", true },
+ { "herofil.es", true },
{ "herohirehq.co.uk", true },
{ "heroiclove.com", true },
{ "heroicpixel.com", true },
@@ -15284,6 +15347,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "herzbotschaft.de", true },
{ "herzfuersoziales.at", true },
{ "herzig.cc", true },
+ { "hesa.com", true },
{ "hesaplama.net", true },
{ "hessen-liebe.de", true },
{ "hestervanderheijden.nl", true },
@@ -15291,27 +15355,24 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hestia-systeme.com", true },
{ "hestia-systeme.eu", true },
{ "hestia-systeme.fr", true },
+ { "hesyifei.com", true },
{ "hetene.nl", true },
{ "hethely.ch", true },
- { "hetmer.com", true },
{ "hetmer.cz", true },
- { "hetmer.net", true },
{ "heute-kaufen.de", true },
{ "heute.training", true },
{ "heverhagen.rocks", true },
{ "hevertonfreitas.com.br", true },
{ "hex.bz", true },
- { "hexacon.io", true },
+ { "hex.nl", true },
{ "hexagon-e.com", true },
{ "hexapt.com", true },
{ "hexclock.io", true },
{ "hexcode.in", true },
- { "hexe.net", true },
{ "hexed.it", true },
{ "hexicurity.com", true },
{ "hexid.me", true },
{ "hexieshe.com", true },
- { "hexo.io", true },
{ "hexony.com", true },
{ "hexr.org", true },
{ "hexstream.net", true },
@@ -15352,7 +15413,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hiddenhillsoutdoorlighting.com", true },
{ "hiddenmalta.net", true },
{ "hideallip.com", true },
- { "hidedd.com", true },
{ "hideouswebsite.com", true },
{ "hidroshop.com.br", true },
{ "hieu.com.au", true },
@@ -15370,10 +15430,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "highspeedinternet.my", true },
{ "highspeedinternetservices.ca", true },
{ "hightechbasementsystems.com", true },
- { "hightechgadgets.net", true },
{ "highwaytohoell.de", true },
{ "higilopocht.li", true },
- { "higp.de", true },
+ { "hikarukujo.com", true },
{ "hike.pics", true },
{ "hikingguy.com", true },
{ "hilahdih.cz", true },
@@ -15381,6 +15440,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hilariousbeer.com.mx", true },
{ "hilaryhutler.com", true },
{ "hilchenba.ch", true },
+ { "hilde.link", true },
+ { "hildegardis-schule.de", true },
{ "hilfe-bei-krebs-vechta.de", true },
{ "hilfreiche-server.tips", true },
{ "hilhorst-uitvaartverzorging.nl", true },
@@ -15412,21 +15473,23 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hiratake.xyz", true },
{ "hire-a-coder.de", true },
{ "hireabouncycastle.net", true },
+ { "hirefitness.co.uk", true },
{ "hireprofs.com", true },
{ "hiresteve.ca", true },
- { "hiresuccessstaffing.com", true },
{ "hiretech.com", true },
{ "hirevets.gov", true },
{ "hirezzportal.com", true },
{ "hiring-process.com", true },
{ "hiromuogawa.com", true },
{ "hirotaka.org", true },
+ { "hirte-digital.de", true },
{ "hirzaconsult.ro", true },
{ "hisbrucker.net", true },
+ { "hisingensck.se", true },
+ { "hisnet.de", true },
{ "hispanic.dating", true },
{ "histocamp.de", true },
{ "histoire-cite.ch", true },
- { "histoire-theatre.com", true },
{ "historia-arte.com", true },
{ "history.google.com", true },
{ "hitandhealth.nl", true },
@@ -15461,6 +15524,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hjkhs.cn", true },
{ "hjort.land", true },
{ "hjortland.org", true },
+ { "hjphoto.co.uk", true },
{ "hjtky.cn", true },
{ "hjw-kunstwerk.de", true },
{ "hk.search.yahoo.com", false },
@@ -15473,6 +15537,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hlavi.hu", true },
{ "hledejlevne.cz", true },
{ "hledejpravnika.cz", true },
+ { "hlfh.space", true },
{ "hlidacnajemneho.cz", true },
{ "hlinformatics.nl", true },
{ "hlsmandarincentre.com", true },
@@ -15486,12 +15551,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hn.search.yahoo.com", false },
{ "hnfertilizermachine.com", true },
{ "hnonline.sk", true },
+ { "hnwebi.com", true },
{ "hnyp.hu", true },
{ "hoaas.no", true },
{ "hoahau.org", true },
{ "hoarding.me", true },
{ "hobby-drechselei.de", true },
{ "hobbyspeed.com", true },
+ { "hocassian.cn", true },
{ "hochhaus.us", true },
{ "hochoukikikiraku.com", true },
{ "hochzeit-dana-laurens.de", true },
@@ -15506,12 +15573,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hoe.re", true },
{ "hoeft-autolackierung.de", true },
{ "hoekvanholland.eu", true },
- { "hoelty.network", true },
+ { "hoeren.club", true },
{ "hoesnelwasik.nl", true },
- { "hoeveiligismijn.nl", true },
{ "hoevenstein.nl", true },
{ "hoewler.ch", true },
{ "hoezzi.nl", true },
+ { "hof-mulin.ch", true },
{ "hofapp.de", true },
{ "hofauer.de", true },
{ "hoflerlawfirm.com", true },
@@ -15519,10 +15586,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hogrebe.de", true },
{ "hogwarts.io", true },
{ "hohm.in", true },
- { "hoikuen-now.top", true },
{ "hoiquanadida.com", true },
{ "hoken-wakaru.jp", true },
- { "hokepon.com", true },
{ "hokieprivacy.org", true },
{ "hokify.at", true },
{ "hokify.ch", true },
@@ -15535,7 +15600,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "holistichealer.in", true },
{ "holisticon.de", true },
{ "hollandsdiep.nl", true },
- { "hollerau.de", true },
{ "hollermann.eu", true },
{ "hollo.me", true },
{ "hollowpoint.xyz", true },
@@ -15588,10 +15652,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "homeseller.com", true },
{ "homeserver-kp.de", true },
{ "homesteadfarm.org", true },
- { "homewatt.co.uk", true },
{ "homeyou.com", true },
{ "hommeatoutfaire.be", true },
{ "homophoni.com", true },
+ { "hompus.nl", false },
{ "homyremedies.com", true },
{ "hon-matsuba.co.jp", true },
{ "honda-centrum.cz", true },
@@ -15604,7 +15668,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "honeycreeper.com", true },
{ "honeyhaw.com", true },
{ "honeypot.net", true },
- { "hong.io", true },
+ { "hongoi.com", true },
{ "honkion.net", true },
{ "honovere.de", true },
{ "hontoir.eu", true },
@@ -15612,16 +15676,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hoofddorp-centraal.nl", true },
{ "hookany.com", true },
{ "hooowl.com", true },
+ { "hoop.la", true },
{ "hoopertechnicalsolutions.com", true },
{ "hooplessinseattle.com", true },
- { "hooray.beer", true },
{ "hoorr.com", true },
{ "hootworld.net", false },
{ "hoowhen.cn", true },
{ "hopconseils.ch", true },
{ "hopconseils.com", true },
{ "hope-line-earth.jp", true },
- { "hopesb.org", true },
{ "hopla.sg", true },
{ "hoplongtech.com", true },
{ "hoponmedia.de", true },
@@ -15641,13 +15704,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "horkel.cf", true },
{ "horn.co", true },
{ "hornertranslations.com", true },
- { "horning.co", true },
{ "hornyforhanzo.com", true },
{ "horodance.dk", true },
{ "horrell.ca", true },
{ "horrendous-servers.com", true },
{ "horsehunter.co.uk", true },
{ "horstmanshof.eu", true },
+ { "hory.me", true },
{ "horza.org", true },
{ "hoshimaq.com.br", true },
{ "hoshimaquinas.com.br", true },
@@ -15660,7 +15723,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hostarea51.com", true },
{ "hostcoz.com", true },
{ "hosteasy.nl", false },
- { "hostedbgp.net", true },
{ "hostedcomments.com", true },
{ "hostedtalkgadget.google.com", true },
{ "hostfission.com", true },
@@ -15691,8 +15753,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hotelcoliber.pl", true },
{ "hotelflow.com.br", true },
{ "hotelident.de", true },
+ { "hotello.io", true },
{ "hotelmap.com", true },
{ "hotels-insolites.com", true },
+ { "hotels4teams.com", true },
{ "hotelsinbuxton.com", true },
{ "hotelsinformer.com", true },
{ "hotelsinncoventry.com", true },
@@ -15701,6 +15765,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hotesb.com", true },
{ "hotesb.net", true },
{ "hothbricks.com", true },
+ { "hotjuice.com", true },
{ "hotnewhiphop.com", true },
{ "hoto.us", true },
{ "hoton.in", true },
@@ -15736,12 +15801,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "howmanymilesfrom.com", true },
{ "howsecureismypassword.net", true },
{ "howsmyssl.com", true },
+ { "howsmytls.com", true },
{ "howsyourhealth.org", true },
{ "howtogeek.com", true },
{ "howtogeekpro.com", true },
{ "howtogosolar.org", true },
{ "howtoinstall.co", true },
{ "howtolaser.com", true },
+ { "howtotech.de", true },
{ "hozana.si", false },
{ "hp-work.net", true },
{ "hp42.de", true },
@@ -15752,13 +15819,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hpisavageforum.com", true },
{ "hpkp-faq.de", true },
{ "hpnow.com.br", true },
+ { "hps.hu", true },
+ { "hqq.tv", true },
{ "hquest.pro.br", true },
{ "hqwebhosting.tk", false },
+ { "hr-tech.shop", true },
{ "hr98.xyz", true },
{ "hrabogados.com", true },
{ "hraesvelg.net", true },
{ "hranicka.cz", true },
{ "hrbatypes.cz", true },
+ { "hrbl.lc", true },
{ "hrdns.de", false },
{ "href.one", true },
{ "hreflang.info", true },
@@ -15768,6 +15839,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hroling.nl", true },
{ "hroschyk.cz", true },
{ "hrstapps-dev.com", true },
+ { "hrtech.shop", true },
{ "hru.gov", true },
{ "hryniewski.net", true },
{ "hryx.net", true },
@@ -15780,7 +15852,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hsivonen.iki.fi", true },
{ "hsmr.cc", true },
{ "hsn.com", true },
- { "hsr.gov", true },
+ { "hsr.gov", false },
{ "hsts.me", true },
{ "hstsfail.appspot.com", true },
{ "hstspreload.appspot.com", true },
@@ -15792,6 +15864,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "htaccessbook.com", true },
{ "htaps.com", true },
{ "hte.ovh", true },
+ { "html.moe", true },
{ "html5.org", true },
{ "html5media.info", true },
{ "htmlacademy.ru", true },
@@ -15808,24 +15881,31 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "https4all.org", true },
{ "httpsecured.net", true },
{ "httpsecurityreport.com", true },
+ { "httpsiseasy.com", true },
+ { "httpsispisseasy.com", true },
{ "httpsnow.com", true },
{ "httpsnow.org", true },
{ "httpswatch.ca", true },
{ "httpswatch.com", true },
{ "hu.search.yahoo.com", false },
+ { "hu8188.com", true },
{ "hu8518.com", true },
{ "hu8555.com", true },
{ "hu8588.com", true },
{ "hu8777.com", true },
{ "hu8bet.com", true },
+ { "hu8hu8.com", true },
{ "hua-in.com", true },
{ "hua-in.net", true },
{ "hua-li88.com", true },
{ "hua-li88.net", true },
{ "huagati.com", true },
{ "huahinpropertylisting.com", true },
+ { "huang-haitao.com", true },
{ "huangjingjing.com", true },
+ { "huangliangbo.com", true },
{ "huangting.me", true },
+ { "huangzenghao.cn", false },
{ "huashan.co.uk", true },
{ "huaxueba.com", true },
{ "hub.org.ua", true },
@@ -15843,11 +15923,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "huffduffer.com", true },
{ "hughtodd.ink", true },
{ "hugi.is", true },
+ { "hugizrecords.com", true },
{ "huglen.info", true },
{ "hugofs.com", true },
{ "hugolynx.fr", true },
{ "huguesblanchard.paris", true },
{ "huguesditciles.com", true },
+ { "huh.today", true },
{ "hui-in.com", true },
{ "hui-in.net", true },
{ "huihui.moe", true },
@@ -15864,12 +15946,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hulet.tech", true },
{ "hulldevs.net", true },
{ "hulpbijmarketing.nl", true },
+ { "hulpmiddelenshop.nl", true },
{ "hulsoft.co.uk", true },
{ "human-clone.com", true },
{ "humanenrich.com", true },
{ "humanesources.com", true },
+ { "humanexperiments.com", true },
{ "humanity.com", true },
- { "humankode.com", true },
{ "humans.io", true },
{ "humanzee.com", true },
{ "humblebee.at", true },
@@ -15897,8 +15980,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "humblebee.us", true },
{ "humblebeeshop.ca", true },
{ "humblebeeshop.com.au", true },
+ { "humbledot.com", true },
{ "humboldtmfg.com", true },
{ "hummy.tv", true },
+ { "humorcaliente.com", true },
+ { "humorce.com", true },
{ "humpchies.com", true },
{ "humpen.se", true },
{ "humppakone.com", true },
@@ -15919,6 +16005,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hupp.se", true },
{ "hurd.is", true },
{ "huren.nl", true },
+ { "hurleyhomestead.com", true },
{ "huroji.com", true },
{ "hurricanelabs.com", false },
{ "hurtigtinternet.dk", true },
@@ -15930,13 +16017,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hustle.com", true },
{ "hustle.life", true },
{ "hustlehope.com", true },
+ { "hustunique.com", true },
{ "huto.ml", true },
{ "huurwoordenaar.nl", true },
{ "huutonauru.net", true },
{ "huwcbjones.co.uk", true },
{ "huwcbjones.uk", true },
{ "huxley.net", true },
+ { "huyvu.nl", true },
{ "hvdbox.de", true },
+ { "hveradistributions.com", true },
{ "hverdagogkink.no", true },
{ "hvh.no", true },
{ "hvmk.nl", true },
@@ -15946,6 +16036,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hwag-pb.de", true },
{ "hwinfo.com", true },
{ "hx53.de", true },
+ { "hxp.io", true },
{ "hxsf.me", true },
{ "hxying.com", true },
{ "hybridiyhdistys.fi", true },
@@ -15958,8 +16049,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hybula.com", true },
{ "hycken.com", true },
{ "hyckenberg.com", true },
- { "hydai.co", true },
{ "hyderabadonlinegifts.com", true },
+ { "hydrabit.nl", true },
{ "hydrasolutions.de", true },
{ "hydrazin.pw", true },
{ "hydro17.com", true },
@@ -15994,10 +16085,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hypothyroidmom.com", true },
{ "hyundai.no", true },
{ "hyvinvointineuvoja.fi", true },
- { "hztgzz.com", true },
{ "i-geld.de", true },
{ "i-hakul.net", true },
- { "i-logic.co.jp", true },
+ { "i-logic.co.jp", false },
{ "i-meto.com", true },
{ "i-office.com.vn", true },
{ "i-proswiss.com", true },
@@ -16016,14 +16106,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "i5y.org", true },
{ "i66.me", true },
{ "i879.com", true },
- { "i9multiequipamentos.com.br", true },
{ "ia.net", true },
+ { "ia1000.com", true },
{ "iaco.li", true },
{ "iactu.info", true },
{ "iaeste.no", true },
{ "iaeste.or.jp", true },
{ "iahemobile.net", true },
- { "iain.tech", true },
{ "iainsimms.co.uk", true },
{ "iainsimms.com", true },
{ "iainsimms.me", true },
@@ -16036,6 +16125,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "iamlbk.com", true },
{ "iamle.com", true },
{ "iamtheib.me", true },
+ { "iamtonyarthur.com", true },
{ "iamusingtheinter.net", true },
{ "iamwoodbeard.com", true },
{ "ian.sh", true },
@@ -16057,19 +16147,20 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ibauruapan.com.mx", true },
{ "ibcmed.org", true },
{ "iberiaversicherungen.com", true },
+ { "ibericaderedes.es", true },
{ "ibexcore.com", true },
{ "ibin.co", true },
{ "ibiz.mk", true },
{ "ibnw.de", true },
- { "ibox.ovh", true },
{ "ibpegasus.tk", true },
{ "ibpsrecruitment.co.in", true },
{ "ibrainmedicine.org", true },
{ "ibrom.eu", true },
- { "ibwin.com", true },
+ { "ibwc.gov", true },
{ "ic-lighting.com.au", true },
{ "ic3.gov", true },
{ "icafecash.com", true },
+ { "icake.life", true },
{ "icanhasht.ml", true },
{ "icarlos.net", true },
{ "icbemp.gov", true },
@@ -16081,14 +16172,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ich-hab-die-schnauze-voll-von-der-suche-nach-ner-kurzen-domain.de", true },
{ "ich-tanke.de", true },
{ "ichasco.com", true },
+ { "ichbinein.org", true },
{ "ichbinkeinreh.de", true },
{ "ichmachdas.net", true },
- { "ichronos.net", true },
+ { "ickerseashop.com", true },
+ { "iclart.com", true },
{ "iclinic.ua", true },
+ { "icloudlogin.com", true },
{ "icmhd.ch", true },
{ "icmp2018.org", true },
- { "icnsoft.me", true },
+ { "icmshoptrend.com", true },
{ "icnsoft.org", true },
+ { "ico500.com", true },
{ "icodeconnect.com", true },
{ "icoh.it", true },
{ "icondoom.nl", true },
@@ -16119,26 +16214,24 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "idaeus.eu", true },
{ "idafauziyah.com", true },
{ "idahoansforliberty.net", true },
+ { "idarv.com", true },
{ "idaspis.com", true },
{ "idatha.de", true },
{ "idc-business.be", true },
{ "idc.yn.cn", true },
{ "idconsult.nl", true },
- { "iddconnect.com", true },
- { "iddconnect.org", true },
{ "idealinflatablehire.co.uk", true },
{ "idealninajemce.cz", false },
{ "idealtruss.com", true },
{ "idealtruss.com.tw", true },
- { "idealvenir.com", true },
{ "idealwhite.space", true },
{ "ideaman924.com", true },
{ "ideashop.com", true },
{ "ideaweb.de", true },
- { "idenamaislami.com", true },
{ "idensys.nl", false },
{ "ident-clinic.be", true },
{ "identifyme.net", true },
+ { "identity.plus", true },
{ "identitytheft.gov", true },
{ "idered.net", true },
{ "idesignstudio.de", true },
@@ -16165,14 +16258,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "idrinktoomuch.coffee", true },
{ "idrissi.eu", true },
{ "idrycleaningi.com", true },
- { "idsoccer.com", true },
- { "idtheft.gov", true },
{ "idubaj.cz", true },
{ "idunno.org", true },
{ "idvl.de", true },
{ "ie.search.yahoo.com", false },
{ "iea-annex61.org", true },
- { "iec.pe", true },
{ "ieedes.com", true },
{ "ieeesb.nl", true },
{ "ieeesbe.nl", true },
@@ -16181,11 +16271,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "iemas.azurewebsites.net", true },
{ "iemb.tk", true },
{ "ienakanote.com", false },
+ { "ies-italia.it", true },
{ "ietsdoenofferte.nl", true },
{ "ieval.ro", true },
{ "iewar.com", true },
- { "iexpert9.com", true },
{ "ifamily.top", false },
+ { "ifangpei.cn", true },
+ { "ifangpei.com.cn", true },
{ "ifconfig.co", true },
{ "ifelse.io", true },
{ "ifengge.cn", true },
@@ -16199,18 +16291,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ifort.fr", true },
{ "ifosep.fr", true },
{ "ifoss.me", true },
- { "ifreetion.cn", true },
{ "ifsac.org", true },
{ "ifsclist.com", true },
{ "ifsr.de", true },
{ "iftarsaati.org", true },
{ "iftrue.de", true },
- { "ifttl.com", true },
+ { "ifttl.com", false },
{ "ifyou.live", true },
{ "ig.com", true },
- { "iga-semi.jp", true },
{ "igaryhe.io", true },
{ "igcc.jp", true },
+ { "igeh-immo.at", true },
{ "igglabs.com", true },
{ "iggprivate.com", true },
{ "iggsoft.com", true },
@@ -16225,6 +16316,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ignat.by", true },
{ "ignatovich.me", true },
{ "ignet.gov", true },
+ { "ignitedlocal.com", true },
{ "ignitedmindz.in", true },
{ "igorw.org", true },
{ "igotoffer.com", false },
@@ -16234,12 +16326,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ih8sn0w.com", true },
{ "iha6.com", true },
{ "ihacklabs.com", true },
- { "ihc.im", false },
+ { "ihatethissh.it", true },
+ { "ihc.im", true },
{ "ihkk.net", true },
{ "ihollaback.org", true },
{ "ihopeit.works", true },
{ "ihostup.net", true },
{ "ihrhost.com", true },
+ { "ii74.com", true },
{ "iiit.pl", true },
{ "iirii.com", true },
{ "iix.se", true },
@@ -16250,8 +16344,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ijunohana.jp", true },
{ "ikachalife.com", true },
{ "ikarate.ru", true },
- { "ike.io", true },
{ "ikeacareers.co.uk", true },
+ { "ikespta.com", true },
{ "ikeyless.com", true },
{ "ikigaiweb.com", true },
{ "ikiler.com", true },
@@ -16264,6 +16358,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "iklive.org", false },
{ "ikulist.me", true },
{ "ikvts.de", true },
+ { "ikwilthepiratebay.org", true },
{ "ila.fi", true },
{ "ilamparas.at", true },
{ "ilamparas.co.uk", true },
@@ -16277,9 +16372,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ile-sapporo.jp", true },
{ "ileci.de", true },
{ "ilektronika-farmakeia-online.gr", true },
- { "ilemonrain.com", true },
+ { "ilemonrain.com", false },
{ "ilhan.name", true },
+ { "iliastsi.net", true },
{ "iligang.cn", true },
+ { "iligang.com", true },
+ { "iligang.link", true },
+ { "iligang.xin", true },
{ "illambias.ch", true },
{ "illegalpornography.com", true },
{ "illegalpornography.me", true },
@@ -16299,7 +16398,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ilmiobusinessonline.it", true },
{ "ilmiogiardiniere.it", true },
{ "ilmuk.org", false },
- { "iloilofit.org", true },
{ "ilove.fish", true },
{ "ilrg.com", true },
{ "iltec-prom.ru", true },
@@ -16315,6 +16413,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "imadalin.ro", true },
{ "image-drive.de", true },
{ "imagebin.ca", true },
+ { "imagecurl.com", true },
+ { "imagecurl.org", true },
{ "imagefu.com", true },
{ "imageination.co", true },
{ "imagenesdedibujosalapizfacilesdehacer.com", true },
@@ -16326,13 +16426,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "imagine-programming.com", true },
{ "imaginetricks.com", true },
{ "imagr.io", true },
+ { "imanageproducts.co.uk", true },
+ { "imanageproducts.uk", true },
+ { "imanesdeviaje.com", true },
{ "imarkethost.co.uk", true },
{ "imask.ml", true },
{ "imawhale.com", true },
{ "imbianchino.roma.it", true },
{ "imbushuo.net", true },
{ "imcsx.co", true },
- { "imedi.it", true },
+ { "imedes.de", true },
{ "imediafly.com", true },
{ "imedikament.de", true },
{ "imeds.pl", true },
@@ -16359,15 +16462,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "imlonghao.com", true },
{ "immaterium.de", true },
{ "immaternity.com", true },
+ { "immatix.xyz", true },
{ "immersion-pictures.com", true },
{ "immersivewebportal.com", true },
- { "immigrationdirect.com.au", true },
{ "immo-agentur.com", true },
{ "immo-passion.net", true },
{ "immo-vk.de", true },
{ "immobiliarecapitani.com", true },
{ "immobilien-badlippspringe.de", true },
{ "immobilien-in-istanbul.de", true },
+ { "immobilien-zirm.de", true },
{ "immobilier-nice.fr", true },
{ "immobilier92.net", true },
{ "immobiza.com", false },
@@ -16382,6 +16486,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "impactfestival.be", true },
{ "impactpub.ch", true },
{ "impakho.com", true },
+ { "impas.se", true },
{ "impelup.com", true },
{ "imperdin.com", true },
{ "imperial-legrand.com", true },
@@ -16391,14 +16496,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "impex.com.bd", true },
{ "impiantistica.org", true },
{ "implantologie-dr-loeck.de", true },
- { "implicitdenial.com", true },
{ "imponet.com.ar", true },
{ "import-shopping.de", true },
+ { "importsagt.com", true },
{ "impotsimple.ca", true },
{ "imppac-schmuck.de", true },
{ "imppac.de", true },
{ "imprendo.co", true },
{ "imprendo.pro", true },
+ { "imprenta-es.com", false },
{ "impresa-di-pulizie.org", true },
{ "impresa-pulizie.it", true },
{ "impresadipulizie.roma.it", true },
@@ -16414,8 +16520,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "imrunner.ru", true },
{ "ims-sargans.ch", true },
{ "imscompany.com", true },
- { "imwnk.cn", true },
+ { "imwnk.cn", false },
{ "imydl.com", true },
+ { "imydl.tech", true },
{ "imyunya.com", true },
{ "imyvm.com", true },
{ "imyz.tw", true },
@@ -16436,11 +16543,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "incarna.co", true },
{ "incertint.com", true },
{ "inchcape-fleet-autobid.co.uk", true },
+ { "inche-ali.com", true },
{ "inchenaim.com", true },
+ { "incigma.com", true },
{ "includesubdomains.preloaded.test", true },
{ "includesubdomains2.preloaded.test", true },
{ "incoherent.ch", true },
{ "incommon.io", true },
+ { "incompliance.de", true },
{ "inconcerts.de", true },
{ "incontrixsingle.net", true },
{ "incowrimo.org", true },
@@ -16472,6 +16582,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "indogerman.de", true },
{ "indogermanstartup.com", true },
{ "indogermantrade.de", true },
+ { "indoorcomfortteam.com", true },
{ "indoorplantsexpert.com", true },
{ "indostar303.com", true },
{ "indovinabank.com.vn", true },
@@ -16480,17 +16591,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "indusfastremit.com", true },
{ "indust.me", true },
{ "industrialstarter.com", true },
- { "industriasrenova.com", true },
{ "indybay.org", true },
{ "ineardisplay.com", true },
{ "inebula.it", true },
+ { "ineed.coffee", false },
+ { "inertianetworks.com", true },
{ "inesfinc.es", true },
{ "inesta.nl", true },
{ "inet.se", true },
+ { "inetpub.cn", true },
{ "inetserver.eu", true },
{ "inetsoftware.de", true },
+ { "inevitavelbrasil.com.br", true },
{ "inf-fusion.ca", true },
- { "inference.biz.tr", true },
{ "infermiere.roma.it", true },
{ "inficom.org", true },
{ "infinite.hosting", true },
@@ -16498,6 +16611,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "infinitiofallentownparts.com", true },
{ "infinitiofaugustaparts.com", true },
{ "infinitioflynnwoodparts.com", true },
+ { "infinity.to", true },
{ "infinitybas.com", true },
{ "infinityengine.org", true },
{ "infinityepos.co.uk", true },
@@ -16509,6 +16623,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "inflatamania.com", true },
{ "inflexsys.com", true },
{ "influencerchampions.com", true },
+ { "influo.com", true },
{ "infmed.com", true },
{ "info-beamer.com", true },
{ "info-d-74.com", true },
@@ -16526,18 +16641,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "infopier.sg", true },
{ "infopulsa.com", true },
{ "infor-allaitement.be", true },
- { "inforisposte.com", true },
{ "informaciondeciclismo.com", true },
{ "informatiebeveiliging.nl", true },
{ "informatik-handwerk.de", true },
{ "informationrx.org", true },
{ "informnapalm.org", true },
- { "infos-generation.com", true },
{ "infosec-handbook.eu", true },
{ "infosec.exchange", true },
{ "infosec.pizza", true },
{ "infosec.wiki", true },
{ "infosenior.ch", true },
+ { "infosimmo.com", true },
{ "infotainworld.com", true },
{ "infotolium.com", true },
{ "infotune.nl", true },
@@ -16545,17 +16659,23 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "infoweb.ee", true },
{ "infra.land", true },
{ "infra.press", true },
+ { "infrafire.com", true },
+ { "infraflip.com", true },
+ { "infraflux.com", true },
+ { "infrafusion.com", true },
{ "infranium.com", true },
{ "infranium.eu", true },
{ "infranium.info", true },
{ "infranium.net", true },
{ "infranium.org", true },
+ { "infranotes.com", true },
{ "infrapirtis.lt", true },
{ "infrarank.com", true },
{ "infrarank.net", true },
+ { "ing-buero-junk.de", true },
{ "ing89.cc", true },
{ "ing89.com", true },
- { "ingalls.run", true },
+ { "ingatlanjogaszok.hu", true },
{ "ingatlanneked.hu", true },
{ "ingber.com", true },
{ "inge-r.nl", true },
@@ -16572,16 +16692,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "inhaltsangabe.de", true },
{ "inheritestate.com", true },
{ "inhouseents.co.uk", true },
- { "iniiter.com", true },
{ "inima.org", true },
- { "inios.fr", false },
+ { "inios.fr", true },
{ "inishbofin.ie", true },
{ "initq.net", true },
- { "initramfs.io", true },
{ "initrd.net", true },
{ "inixal.com", true },
{ "ink.horse", true },
{ "inkable.com.au", true },
+ { "inkbunny.net", false },
{ "inkhor.se", true },
{ "inkontriamoci.com", true },
{ "inksay.com", true },
@@ -16598,13 +16717,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "inmoodforsex.com", true },
{ "inmusrv.de", true },
{ "innerfence.com", true },
- { "innerform.com", true },
{ "innermostparts.org", true },
{ "innersafe.com", true },
{ "innohb.com", true },
{ "innolabfribourg.ch", true },
{ "innoloop.com", true },
{ "innophate-security.com", true },
+ { "innot.net", true },
{ "innoteil.com", true },
{ "innovaptor.at", true },
{ "innovaptor.com", true },
@@ -16616,11 +16735,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "innsalzachsingles.de", true },
{ "innwan.com", true },
{ "inoa8.com", true },
- { "inobun.jp", true },
+ { "inorder.website", true },
{ "inovat.ma", true },
{ "inovatec.com", true },
- { "inox.io", true },
- { "inoxio.com", true },
+ { "inovatecsystems.com", true },
{ "inpas.co.uk", true },
{ "inquant.de", true },
{ "ins-kreativ.de", true },
@@ -16657,12 +16775,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "installatietechniekgresnigt.nl", true },
{ "installgentoo.net", true },
{ "instamojo.com", true },
- { "instant-hack.io", true },
{ "instant-thinking.de", true },
{ "instant.io", true },
{ "instantkhabar.com", true },
{ "instantsubs.de", true },
- { "instaquiz.ru", true },
{ "instava.cz", true },
{ "instawi.com", true },
{ "instela.com", true },
@@ -16690,7 +16806,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "integralblue.com", true },
{ "integralkk.com", true },
{ "integratedmedicalonline.com", true },
- { "integrationinc.com", false },
{ "integraxor.com.tw", true },
{ "integrity.gov", true },
{ "integrityoklahoma.com", true },
@@ -16708,6 +16823,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "intelligence-explosion.com", true },
{ "intellinetixvibration.com", true },
{ "intelly.nl", true },
+ { "intelly365.nl", true },
{ "intencje.pl", true },
{ "intensifyrsvp.com.au", true },
{ "inter-corporate.com", true },
@@ -16724,10 +16840,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "interfloraservices.co.uk", true },
{ "interflores.com.br", true },
{ "interfug.de", true },
- { "intergenx.co.uk", true },
- { "intergenx.com", true },
- { "intergenx.org", true },
- { "intergenx.org.uk", true },
{ "intergozd.si", true },
{ "interiery-waters.cz", true },
{ "interimages.fr", true },
@@ -16738,24 +16850,28 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "interlingvo.biz", true },
{ "intermax.nl", true },
{ "intermedinet.nl", true },
+ { "internacao.com", true },
{ "internalkmc.com", true },
{ "internaluse.net", true },
{ "international-arbitration-attorney.com", true },
{ "international-nash-day.com", true },
{ "internationalfashionjobs.com", true },
{ "internationaltalento.it", true },
- { "internaut.co.za", true },
{ "internect.co.za", true },
+ { "internet-software.eu", true },
{ "internetaanbieders.eu", true },
{ "internetbank.swedbank.se", true },
{ "internetbugbounty.com", true },
{ "internetcom.jp", true },
+ { "internetfonden.se", true },
{ "internethealthreport.org", true },
{ "internethering.de", true },
{ "internetinhetbuitengebied.nl", true },
{ "internetmarkets.net", true },
+ { "internetmuseum.se", true },
{ "internetofdon.gs", true },
{ "internetoffensive.fail", true },
+ { "internetofinsecurethings.com", true },
{ "internetovehazardnihry.cz", true },
{ "internetpro.me", true },
{ "internetzentrale.net", true },
@@ -16774,6 +16890,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "intl-webs.com", true },
{ "intmissioncenter.org", true },
{ "into.technology", true },
+ { "intocities.de", false },
{ "inton.biz", true },
{ "intoparking.com", false },
{ "intpforum.com", true },
@@ -16809,9 +16926,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "investor.gov", true },
{ "investoren-beteiligung.de", true },
{ "investorforms.com", true },
+ { "investorloanshub.com", true },
+ { "investosure.com", true },
{ "investpay.ru", true },
- { "invidio.us", true },
- { "invinsec.com", true },
{ "invioinc.com", true },
{ "inviosolutions.com", true },
{ "invis.net", true },
@@ -16826,21 +16943,24 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "invoiced.com", true },
{ "invoicefinance.com", true },
{ "invoicefinance.nl", true },
- { "invuelto.com", true },
{ "invuite.com", true },
{ "inwestcorp.se", true },
{ "inzdr.com", true },
{ "inzelabs.com", true },
{ "iobint.com", true },
{ "iocheck.com", false },
+ { "iochen.com", true },
+ { "iocurrents.com", true },
{ "iodine.com", true },
{ "ioerror.us", true },
{ "iofort.com", true },
{ "iojo.net", true },
{ "ioliver.co.uk", true },
+ { "iomedia.ch", true },
{ "iompost.com", true },
{ "iomstamps.com", true },
{ "ionlabs.kr", true },
+ { "ionote.me", true },
{ "ionovia.de", true },
{ "ionx.co.uk", true },
{ "ioover.net", true },
@@ -16851,6 +16971,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "iossifovlab.com", true },
{ "iostream.by", true },
{ "iotfen.com", true },
+ { "iowaschoolofbeauty.com", true },
{ "ip-blacklist.net", true },
{ "ip-hahn.de", true },
{ "ip-tanz.com", true },
@@ -16858,6 +16979,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ip2country.info", true },
{ "ip3office.com", true },
{ "ip6.li", true },
+ { "ipad.li", true },
{ "ipadkaitori.jp", true },
{ "ipadportfolioapp.com", true },
{ "ipal.im", true },
@@ -16908,12 +17030,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "iqboxy.com", true },
{ "iqsmn.org", true },
{ "ir1s.com", true },
+ { "iramellor.com", true },
+ { "iran-geo.com", true },
{ "iranian.lgbt", true },
{ "iranianholiday.com", true },
+ { "iranjeunesse.com", true },
{ "irasandi.com", true },
{ "irayo.net", true },
{ "irc-results.com", true },
+ { "ircmett.de", true },
{ "iready.ro", true },
+ { "ireef.tv", true },
{ "iren.ch", true },
{ "irenekauer.com", true },
{ "irf2.pl", true },
@@ -16924,9 +17051,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "iridiumflare.de", true },
{ "iriomote.com", true },
{ "iris-design.info", true },
- { "iris-insa.com", true },
+ { "iris-insa.com", false },
{ "irish.dating", true },
- { "irishmusic.nu", true },
{ "irisjieun.com", true },
{ "irland-firma.com", true },
{ "irmgard-woelfle.de", true },
@@ -16942,7 +17068,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "irritant.net", true },
{ "iruarts.ch", true },
{ "iruca.co", true },
- { "irun-telecom.co.uk", true },
{ "is-going-to-rickroll.me", true },
{ "is-sw.net", true },
{ "isaacdgoodman.com", true },
@@ -16970,12 +17095,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "isecrets.se", true },
{ "iservicio.mx", true },
{ "isfff.com", true },
+ { "isfriday.com", true },
{ "isgp-studies.com", true },
{ "ishamf.com", true },
{ "ishangirdhar.com", true },
{ "ishet.al", true },
{ "ishiharaken.com", true },
- { "isidom.fr", true },
+ { "ishtarfreya.com", true },
{ "isil.fi", true },
{ "isimonbrown.co.uk", true },
{ "isincheck.com", true },
@@ -16991,11 +17117,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "iskkk.net", true },
{ "iskogen.nu", true },
{ "islam.si", true },
+ { "islamonline.net", true },
{ "islandhosting.com", true },
{ "islazia.fr", true },
{ "isletech.net", true },
{ "isliada.org", true },
- { "islief.com", true },
{ "ismat.com", true },
{ "ismena.bg", true },
{ "ismetroonfiretoday.com", true },
@@ -17030,6 +17156,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "issasfrissa.se", true },
{ "issforum.org", true },
{ "issio.net", true },
+ { "issue.watch", true },
+ { "issues.email", true },
{ "issuesofconcern.in", true },
{ "ist-intim.de", true },
{ "istdieweltschonuntergegangen.de", true },
@@ -17067,6 +17195,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "it-schamans.de", true },
{ "it-service24.at", true },
{ "it-service24.ch", true },
+ { "it-service24.com", true },
{ "it-shamans.de", true },
{ "it-shamans.eu", true },
{ "it-sysoft.com", true },
@@ -17109,26 +17238,29 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "itesign.de", true },
{ "itfh.eu", true },
{ "itfix.cz", true },
- { "itforcc.com", true },
{ "itforge.nl", true },
{ "itgirls.rs", true },
+ { "ithakama.com", true },
+ { "ithakama.cz", true },
{ "ithenrik.com", true },
{ "ithinc.net", true },
{ "itilo.de", true },
{ "itiomassagem.com.br", true },
{ "itis.gov", true },
{ "itis4u.ch", true },
- { "itisjustnot.cricket", true },
+ { "itkaufmann.at", true },
{ "itlitera.com", true },
{ "itludens.com", true },
- { "itmanie.cz", true },
+ { "itmindscape.com", true },
{ "itn.co.uk", true },
{ "itneeds.tech", true },
{ "itnews-bg.com", true },
{ "itnota.com", true },
{ "itochan.jp", true },
+ { "itogoyomi.com", true },
{ "itooky.com", true },
{ "itpro.ua", true },
+ { "itproject.guru", false },
{ "itrack.in.th", true },
{ "itraveille.fr", true },
{ "itring.pl", false },
@@ -17147,7 +17279,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "itsense.fr", true },
{ "itsevident.com", true },
{ "itsgoingdown.org", true },
- { "itshka.rv.ua", true },
{ "itskayla.com", true },
{ "itsmyparty.ie", true },
{ "itsnotquitethehilton.com", true },
@@ -17208,6 +17339,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "iyassu.com", true },
{ "iyuanbao.net", true },
{ "iz8mbw.net", true },
+ { "izaakbeekman.com", true },
{ "izevg.ru", true },
{ "izhaojie.com", true },
{ "izodiacsigns.com", true },
@@ -17230,6 +17362,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "j8y.de", true },
{ "ja-dyck.de", true },
{ "ja-gps.com.au", true },
+ { "ja-publications.agency", false },
{ "ja.md", true },
{ "jaakkohannikainen.fi", true },
{ "jaalits.com", true },
@@ -17266,19 +17399,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jacobian.org", true },
{ "jacobphono.com", true },
{ "jacuzziprozone.com", true },
- { "jadopado.com", true },
+ { "jadchaar.me", true },
{ "jaegerlacke.de", true },
- { "jaepinformatica.com", true },
{ "jagbouncycastles.co.uk", true },
{ "jagerman.com", true },
{ "jaguarlandrover-asse.be", true },
{ "jaguarlandrover-occasions.be", true },
- { "jaguarwong.xyz", true },
{ "jahanaisamu.com", true },
{ "jahmusic.net", true },
{ "jahner.xyz", true },
{ "jahofmann.de", false },
{ "jailbreakingisnotacrime.org", true },
+ { "jaion.tech", true },
{ "jaispirit.com", false },
{ "jaitnetworking.com", false },
{ "jak-na-les.cz", true },
@@ -17287,14 +17419,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jake.eu.org", true },
{ "jake.ml", true },
{ "jake.nom.za", true },
- { "jakebeardsley.com", true },
{ "jakecurtis.de", true },
{ "jakenbake.com", true },
{ "jakereynolds.co", true },
{ "jakerullman.com", true },
{ "jakeslab.tech", true },
{ "jaketremper.com", true },
- { "jakewalker.xyz", true },
{ "jakob-server.tk", true },
{ "jakobejitblokaci.cz", true },
{ "jakobkrigovsky.com", true },
@@ -17312,6 +17442,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jamaat.hk", true },
{ "jamacha.org", true },
{ "jamalfi.bio", true },
+ { "jamaware.org", true },
{ "jamberry.com.mx", true },
{ "jamberrynails.co.uk", true },
{ "james-bell.co.uk", true },
@@ -17328,17 +17459,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jameshost.net", true },
{ "jameshunt.us", false },
{ "jamesj.me", false },
- { "jamesl.ml", true },
{ "jamesmarsh.net", true },
{ "jamesmilazzo.com", true },
{ "jamesmorrison.me", true },
- { "jamesrains.com", true },
{ "jamesrobertson.io", true },
{ "jamesrobertson.net", true },
{ "jamesrussellward.co.uk", true },
{ "jamessmith.me.uk", true },
{ "jamhost.org", true },
{ "jamie.ie", true },
+ { "jamielarter.ca", true },
{ "jamielinux.com", true },
{ "jamiemagee.co.uk", true },
{ "jamiemagee.dk", true },
@@ -17352,6 +17482,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jamonsilva.com", true },
{ "jamstatic.fr", false },
{ "jan-and-maaret.de", true },
+ { "jan-bucher.ch", true },
{ "jan-hill.com", true },
{ "jan-rieger.de", true },
{ "jan-roenspies.de", true },
@@ -17376,10 +17507,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "janokacer.sk", true },
{ "janschaumann.de", true },
{ "janssenwigman.nl", true },
- { "janverlaan.nl", true },
{ "jaot.info", true },
{ "japaniac.de", false },
{ "japanphilosophy.com", true },
+ { "japansm.com", true },
{ "japanwatches.xyz", true },
{ "jape.today", true },
{ "jardin-exotique-rennes.fr", true },
@@ -17387,6 +17518,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jardiniersduminotaure.fr", true },
{ "jaredeberle.org", false },
{ "jaredfernandez.com", true },
+ { "jaredfraser.com", true },
{ "jarivisual.com", true },
{ "jarl.ninja", true },
{ "jarniashop.se", true },
@@ -17402,7 +17534,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jasongerber.ch", true },
{ "jasonian-photo.com", true },
{ "jasonmili.online", true },
- { "jasonradin.com", true },
{ "jasonsansone.com", true },
{ "jasper.link", true },
{ "jasperhammink.com", true },
@@ -17412,13 +17543,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jaszbereny-vechta.eu", true },
{ "javalestari.com", true },
{ "javamilk.com", true },
+ { "javfree.me", true },
{ "javierburgos.net", true },
- { "jaxageto.de", true },
{ "jaycouture.com", true },
- { "jayf.de", true },
{ "jayfreestone.com", true },
- { "jayharris.ca", true },
{ "jaymecd.rocks", true },
+ { "jayrl.com", true },
{ "jaysaw.me", true },
{ "jaytx.com", true },
{ "jayxon.com", true },
@@ -17436,13 +17566,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jbs-jardins.ch", true },
{ "jbsinternational.com", true },
{ "jbt-stl.com", true },
+ { "jcadg.com", true },
{ "jcai.dk", true },
{ "jcaicedo.com", true },
{ "jcaicedo.tk", true },
{ "jci.cc", true },
{ "jcolideles.com", true },
{ "jcra.net", true },
+ { "jctf.team", true },
{ "jcwodan.nl", true },
+ { "jcyz.cf", true },
{ "jd-group.co.uk", true },
{ "jd1.de", true },
{ "jdassets.com", true },
@@ -17450,7 +17583,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jdcdirectsales.com", true },
{ "jdcdirectsales.com.ph", true },
{ "jdcgroup.com.ph", true },
- { "jdfk.net", true },
+ { "jdegbau.com", true },
{ "jdheysupplies.co.uk", true },
{ "jdjohnsonmedia.com", true },
{ "jdm.elk.pl", true },
@@ -17472,6 +17605,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jeanneret-combustibles.ch", true },
{ "jec-dekrone.be", true },
{ "jeda.ch", true },
+ { "jedayoshi.me", true },
{ "jedayoshi.tk", true },
{ "jedepannetonordi.fr", true },
{ "jedidiah.eu", false },
@@ -17479,7 +17613,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jediweb.com.au", true },
{ "jedwarddurrett.com", true },
{ "jeec.ist", true },
- { "jeepeg.com", true },
{ "jeepmafia.com", true },
{ "jeff.forsale", true },
{ "jeffanderson.me", true },
@@ -17497,7 +17630,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jeffwebb.com", true },
{ "jefrydco.id", true },
{ "jekhar.com", true },
- { "jekkt.com", true },
{ "jelena-adeli.com", true },
{ "jelewa.de", true },
{ "jell.ie", true },
@@ -17540,6 +17672,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jeremyness.com", true },
{ "jeremypaul.me", true },
{ "jeremytcd.com", true },
+ { "jericamacmillan.com", true },
{ "jeroendeneef.com", true },
{ "jeroenensanne.wedding", true },
{ "jeroenvanderwal.nl", true },
@@ -17549,6 +17682,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jerseyjumpingbeans.co.uk", true },
{ "jerseylvi2013.org", true },
{ "jes.events", true },
+ { "jesec.io", true },
{ "jesse3.com", true },
{ "jesseerbach.com", true },
{ "jessekaufman.com", true },
@@ -17556,6 +17690,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jessevictors.com", true },
{ "jessgranger.com", true },
{ "jessicabenedictus.nl", false },
+ { "jessicahrehor.com", true },
{ "jesters-court.net", true },
{ "jesuisadmin.fr", true },
{ "jet-stream.fr", true },
@@ -17567,14 +17702,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jetmirshatri.com", true },
{ "jetsetboyz.net", true },
{ "jetsieswerda.nl", true },
- { "jettlarue.com", true },
{ "jetwhiz.com", true },
- { "jeugdkans.nl", true },
{ "jeuxetcodes.fr", true },
{ "jeweet.net", true },
{ "jewishboyscouts.com", true },
{ "jexler.net", true },
- { "jez.nl", true },
{ "jfbst.net", true },
{ "jfr.im", true },
{ "jfreitag.de", true },
@@ -17585,7 +17717,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jgwb.eu", true },
{ "jhalderm.com", true },
{ "jhaveri.net", true },
- { "jhcommunitysports.co.uk", true },
{ "jhe.li", true },
{ "jhf.io", true },
{ "jhill.de", true },
@@ -17594,6 +17725,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jhw-profiles.de", true },
{ "jhwestover.com", true },
{ "jiacl.com", true },
+ { "jiahao.codes", true },
{ "jianshu.com", true },
{ "jianyuan.pro", true },
{ "jiazhao.ga", true },
@@ -17611,6 +17743,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jimmyroura.ch", true },
{ "jimshaver.net", true },
{ "jimslop.nl", true },
+ { "jinancy.fr", true },
{ "jinanshen.com", true },
{ "jinbo123.com", false },
{ "jinbowiki.org", true },
@@ -17620,17 +17753,20 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jingjo.com.au", true },
{ "jinja.ai", true },
{ "jinkuru.net", true },
- { "jinliming.ml", true },
{ "jino-jossy.appspot.com", true },
{ "jinshuju.net", true },
+ { "jintaiyang123.org", true },
{ "jiogo.com", true },
{ "jirav.com", true },
{ "jiripudil.cz", true },
+ { "jirosworld.com", true },
{ "jisai.net.cn", true },
+ { "jisha.site", true },
{ "jiveiaktivno.bg", true },
{ "jixun.moe", true },
{ "jiyusu.com", true },
{ "jjj.blog", true },
+ { "jjlvk.nl", true },
{ "jjspartyhire.co.uk", true },
{ "jjspartytime.co.uk", true },
{ "jjvanoorschot.nl", true },
@@ -17646,6 +17782,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jl-dns.nl", true },
{ "jl-exchange.nl", true },
{ "jl-mail.nl", true },
+ { "jldp.org", true },
{ "jlkhosting.com", true },
{ "jlot.org", true },
{ "jlponsetto.com", true },
@@ -17654,30 +17791,30 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jm-bea.net", true },
{ "jmalarcon.es", true },
{ "jmarciniak.it", true },
+ { "jmatt.org", true },
{ "jmbelloteau.com", true },
{ "jmcashngold.com.au", true },
{ "jmcataffo.com", true },
{ "jmcleaning.services", true },
{ "jmedved.com", true },
{ "jmentertainment.co.uk", true },
+ { "jmfjltd.com", true },
{ "jmk.hu", true },
- { "jmoreau.ddns.net", true },
{ "jmotion.co.uk", true },
{ "jmpb.hu", true },
{ "jmpmotorsport.co.uk", true },
{ "jmsolodesigns.com", true },
{ "jmssg.jp", true },
{ "jmvdigital.com", true },
- { "jncde.de", true },
{ "jncie.de", true },
{ "jncie.eu", true },
{ "jncip.de", true },
{ "jnjdj.com", true },
{ "jnm-art.com", true },
{ "joa-ebert.com", true },
- { "joacimeldre.com", true },
+ { "joaoaugusto.net", true },
{ "joaosampaio.com.br", true },
- { "job.biz.tr", true },
+ { "job-offer.de", true },
{ "jobbkk.com", true },
{ "jobbsafari.no", true },
{ "jobbsafari.se", true },
@@ -17686,6 +17823,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jobindex.dk", true },
{ "joblab.com.ua", true },
{ "joblife.co.za", true },
+ { "jobmi.com", true },
+ { "jobmiplayground.com", true },
{ "jobmob.co.il", true },
{ "jobs-in-tech.com", true },
{ "jobs.at", true },
@@ -17695,14 +17834,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jobsisbrown.com", true },
{ "jobss.co.uk", true },
{ "jobsuchmaschine.ch", true },
- { "jobtestprep.de", true },
- { "jobtestprep.dk", true },
- { "jobtestprep.fr", true },
- { "jobtestprep.it", true },
- { "jobtestprep.nl", true },
- { "jobtestprep.se", true },
{ "jobwinner.ch", true },
{ "jobzninja.com", true },
+ { "jockbusuttil.co.uk", true },
+ { "jockbusuttil.com", true },
+ { "jockbusuttil.uk", true },
+ { "jodaniels.photography", true },
{ "jodlajodla.si", true },
{ "joduska.me", true },
{ "jodyboucher.com", false },
@@ -17712,6 +17849,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "joedoyle.us", true },
{ "joefixit.co", true },
{ "joehenry.co.uk", true },
+ { "joejohnson.name", true },
{ "joel.coffee", true },
{ "joelcoustrain.com", true },
{ "joeldrapper.com", true },
@@ -17723,6 +17861,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "joelmarkhamphotography.com.au", true },
{ "joelmunch.com", true },
{ "joelnichols.uk", true },
+ { "joemotherfuckingjohnson.com", true },
{ "joepitt.co.uk", false },
{ "joerss.at", true },
{ "joeskup.com", true },
@@ -17744,6 +17883,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "johannes-zinke.de", true },
{ "johannes.io", true },
{ "johannes.wtf", true },
+ { "johannesburg-escorts.co.za", true },
{ "johanneskonrad.de", true },
{ "johannespichler.com", false },
{ "johansf.tech", true },
@@ -17768,7 +17908,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "johnroberts.me", true },
{ "johnrockefeller.net", true },
{ "johnsegovia.com", true },
- { "johnsiu.com", true },
{ "johnsonho.net", true },
{ "johnvanhese.nl", true },
{ "johnyytb.be", true },
@@ -17784,8 +17923,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jollykidswobbleworld.co.uk", true },
{ "jolokia.ch", true },
{ "jomo.tv", true },
+ { "jomofojo.co", true },
+ { "jomofojo.com", true },
{ "jonandnoraswedding.com", true },
- { "jonarcher.info", true },
{ "jonas-thelemann.de", true },
{ "jonas-wenk.de", false },
{ "jonaskjodt.com", true },
@@ -17797,6 +17937,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jonathanj.nl", true },
{ "jonathanschle.de", true },
{ "jonathanselea.se", false },
+ { "jonblankenship.com", true },
+ { "jondarby.com", true },
{ "jondevin.com", true },
{ "jondowdle.com", true },
{ "jonesopolis.xyz", true },
@@ -17807,6 +17949,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jongcs.com", true },
{ "jonilar.com", true },
{ "jonincharacter.com", true },
+ { "jonirrings.com", true },
{ "jonkermedia.nl", false },
{ "jonlabelle.com", true },
{ "jonlu.ca", true },
@@ -17820,21 +17963,21 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jooksms.com", true },
{ "jooksuratas.ee", true },
{ "joomlant.org", true },
+ { "joonatoona.me", true },
{ "joostrijneveld.nl", true },
{ "joostvanderlaan.nl", true },
- { "jooto.com", true },
- { "jopl.org", true },
{ "jopsens.de", true },
{ "joran.org", true },
+ { "jordan-jungk.de", true },
+ { "jordanhamilton.me", true },
{ "jordankirby.co.uk", true },
{ "jordankmportal.com", true },
- { "jordanp.engineer", true },
{ "jordans.co.uk", true },
{ "jordanscorporatelaw.com", true },
{ "jordanstrustcompany.com", true },
+ { "jordhy.com", true },
{ "jorisdalderup.nl", true },
{ "jornalalerta.com.br", true },
- { "josc.com.au", true },
{ "joscares.com", true },
{ "jose-alexand.re", true },
{ "jose-lesson.com", true },
@@ -17843,7 +17986,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "josef-lotz.de", true },
{ "josefjanosec.com", true },
{ "josegerber.ch", true },
+ { "josemikkola.fi", true },
{ "josepbel.com", true },
+ { "josephbleroy.com", true },
{ "josephsniderman.com", true },
{ "josephsniderman.net", true },
{ "josephsniderman.org", true },
@@ -17874,6 +18019,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "joyofcookingandbaking.com", true },
{ "jpdeharenne.be", true },
{ "jpeg.io", true },
+ { "jpgangbang.com", true },
{ "jphandjob.com", true },
{ "jplesbian.com", true },
{ "jpmelos.com", true },
@@ -17895,9 +18041,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jross.me", true },
{ "jrtapsell.co.uk", true },
{ "jrxpress.com", true },
- { "jsbentertainment.nl", true },
- { "jsbevents.nl", true },
- { "jsblights.nl", true },
{ "jschoi.org", true },
{ "jschumacher.info", true },
{ "jsd-cog.org", true },
@@ -17908,9 +18051,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jskoelliken.ch", true },
{ "jslidong.top", true },
{ "jsmetallerie.fr", true },
+ { "jsnfwlr.io", true },
{ "jsteward.moe", true },
{ "jstore.ch", true },
{ "jsuse.xyz", true },
+ { "jsxc.ch", true },
{ "jtcat.com", true },
{ "jthackery.com", false },
{ "jtl-software.com", true },
@@ -17926,16 +18071,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jubileum.online", true },
{ "jucca-nautica.si", true },
{ "juch.cc", true },
- { "juchheim-methode.de", true },
{ "juchit.at", true },
+ { "jucktehkeinen.de", true },
{ "judc-ge.ch", true },
{ "judge2020.com", true },
{ "judge2020.me", true },
{ "judoprodeti.cz", true },
- { "judosaintdenis.fr", false },
+ { "judosaintdenis.fr", true },
{ "juef.space", true },
{ "juegosycodigos.es", true },
{ "juegosycodigos.mx", true },
+ { "juelda.com", true },
{ "juergen-elbert.de", true },
{ "juergenhecht.de", true },
{ "juergenklieber.de", true },
@@ -17998,13 +18144,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jumpingjacksbouncycastles.co.uk", true },
{ "jumpinjaes.co.uk", true },
{ "jumpinmonkeys.co.uk", true },
- { "jumpman-iphone-design.de", true },
{ "jumpnplay.co.uk", true },
{ "junespina.com", true },
{ "junethack.net", true },
{ "jungaa.fr", true },
{ "jungesforumkonstanz.de", true },
- { "jungleculture.co.za", true },
{ "jungleducks.ca", true },
{ "junglejackscastles.co.uk", true },
{ "junglememories.co.uk", true },
@@ -18021,11 +18165,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jura-reiseschutz.de", true },
{ "jurassicbarkharrogate.co.uk", true },
{ "jurassicgolf.nl", true },
- { "juridiqueo.com", true },
{ "juridoc.com.br", true },
{ "jurijbuga.de", true },
{ "jurisprudent.by", true },
- { "juristeo.com", true },
{ "jurriaan.ninja", true },
{ "just-a-clanpage.de", true },
{ "just-vet-and-drive.fr", true },
@@ -18038,10 +18180,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "justboom.co", true },
{ "justbouncecastles.co.uk", true },
{ "justchunks.net", true },
+ { "justgalak.com", true },
{ "justgalak.org", true },
+ { "justice.gov", true },
{ "justice4assange.com", true },
- { "justiceo.org", true },
- { "justin-tech.com", true },
{ "justinellingwood.com", true },
{ "justinharrison.ca", true },
{ "justinho.com", true },
@@ -18074,6 +18216,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jwmmarketing.com", true },
{ "jwnotifier.org", true },
{ "jwschuepfheim.ch", true },
+ { "jwsoft.nl", true },
{ "jxir.de", true },
{ "jydemarked.dk", true },
{ "jyggen.com", true },
@@ -18084,19 +18227,22 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "k-homes.net", true },
{ "k-netz.de", true },
{ "k-pan.com", true },
+ { "k-plant.com", true },
{ "k-pture.com", true },
{ "k-scr.me", true },
{ "k-tube.com", true },
{ "k258059.net", true },
{ "k2mts.org", true },
{ "k33k00.com", true },
- { "k3nny.fr", false },
+ { "k3nny.fr", true },
{ "k4r.ru", true },
+ { "k7azx.com", true },
{ "k82.org", true },
{ "k8r.eu", true },
{ "k9swx.com", true },
{ "kaamoscreations.com", true },
{ "kaangenc.me", true },
+ { "kaany.io", true },
{ "kaasbesteld.nl", true },
{ "kaashosting.nl", true },
{ "kaatha-kamrater.se", true },
@@ -18135,7 +18281,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kajak.land", true },
{ "kaka.farm", true },
{ "kakao-karten.de", true },
- { "kakaomilchkuh.de", true },
{ "kakaravaara.fi", true },
{ "kakie-gobocha.jp", true },
{ "kakie-kolesa.ru", true },
@@ -18160,7 +18305,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kalterersee.ch", true },
{ "kalwestelectric.com", true },
{ "kamatajisyaku.tokyo.jp", true },
- { "kamikaichimaru.com", true },
+ { "kamikaichimaru.com", false },
+ { "kaminbau-laub.de", true },
{ "kamixa.se", true },
{ "kamppailusali.fi", true },
{ "kamui.co.uk", true },
@@ -18187,7 +18333,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kangooroule.fr", true },
{ "kanis.ag", true },
{ "kankimaru.com", true },
- { "kanmitao.com", true },
{ "kanna.cf", true },
{ "kannchen.de", true },
{ "kanobu.ru", true },
@@ -18198,7 +18343,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kantorkita.net", true },
{ "kantorosobisty.pl", true },
{ "kany.me", false },
- { "kanzakiranko.jp", false },
{ "kanzashi.com", true },
{ "kanzlei-myca.de", true },
{ "kanzlei-oehler.com", true },
@@ -18217,26 +18361,22 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "karalane.com", true },
{ "karamomo.net", true },
{ "karanastic.com", true },
- { "karanjthakkar.com", true },
{ "karanlyons.com", true },
{ "karasik.by", true },
{ "karateka.org", true },
{ "karateka.ru", true },
- { "karatekit.co.uk", true },
{ "kardize24.pl", true },
- { "karenledger.ca", true },
{ "kargl.net", true },
{ "karguine.in", true },
{ "karhm.com", true },
{ "karina.gd", true },
{ "karit.nz", true },
- { "karjala-ski.ru", true },
{ "karlbowden.com", true },
{ "karlic.net", true },
+ { "karlin.run", true },
{ "karlis-kavacis.id.lv", true },
{ "karlloch.de", true },
{ "karlsmithmn.org", true },
- { "karlstabo.se", true },
{ "karlzotter.com", true },
{ "karmaassurance.ca", true },
{ "karmabaker.com", true },
@@ -18246,7 +18386,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "karmic.com", true },
{ "karn.nu", true },
{ "karneid.info", true },
- { "karpanhellas.com", false },
{ "karsofsystems.com", true },
{ "karsten-voigt.de", true },
{ "karta-paliwowa.pl", true },
@@ -18260,7 +18399,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "karupp-did.net", true },
{ "kasadara.com", true },
{ "kasei.im", true },
- { "kashis.com.au", true },
{ "kashmirobserver.net", true },
{ "kasko.io", true },
{ "kasnoffskinclinic.com", true },
@@ -18269,9 +18407,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kastelruth.biz", true },
{ "kastemperaturen.ga", true },
{ "kastorsky.ru", true },
+ { "katagena.com", true },
{ "katalogbutikker.dk", true },
{ "katata-kango.ac.jp", true },
{ "katedra.de", true },
+ { "kateduggan.net", true },
{ "katekligys.com", true },
{ "katemihalikova.cz", true },
{ "katericke.com", true },
@@ -18304,8 +18444,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kayakabovegroundswimmingpools.com", true },
{ "kayleen.net", true },
{ "kaysis.gov.tr", true },
+ { "kazakov.lt", true },
{ "kazamasion.com", true },
- { "kazanasolutions.de", true },
{ "kazand.lt", true },
{ "kazandaemon.ru", true },
{ "kazu.click", true },
@@ -18316,7 +18456,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kbb-ev.de", true },
{ "kbbouncycastlehire.co.uk", true },
{ "kbcequitas.hu", true },
- { "kbfl.org", true },
{ "kbit.dk", true },
{ "kbjorklu.com", true },
{ "kbleventhire.co.uk", true },
@@ -18327,7 +18466,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kc5mpk.com", true },
{ "kcliner.com", true },
{ "kcmicapital.com", true },
- { "kcolford.com", true },
+ { "kcolford.com", false },
{ "kcore.org", true },
{ "kcptun.com", true },
{ "kcshipping.co.uk", true },
@@ -18338,11 +18477,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kdyby.org", true },
{ "ke7tlf.us", true },
{ "keakon.net", true },
- { "keaneokelley.com", true },
{ "keaysmillwork.com", true },
{ "keb.com.au", true },
{ "keb.net.au", true },
{ "kebabbesteld.nl", true },
+ { "kebabbruce.com", true },
{ "kedarastudios.com", true },
{ "kedibizworx.com", true },
{ "kedv.es", true },
@@ -18356,24 +18495,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "keepersecurity.com", true },
{ "keepingtheplot.co.uk", true },
{ "keepiteasy.eu", true },
- { "keepmanager.org", true },
- { "keeprubyweird.com", true },
{ "keeweb.info", true },
{ "keezin.ga", true },
{ "keganthorrez.com", true },
{ "kehlenbach.net", true },
{ "keifel.de", true },
{ "kein-design.de", true },
- { "kein-fidget-spinner-werden.de", true },
{ "keinanung.nl", true },
{ "keinefilterblase.de", true },
{ "keisaku.org", true },
{ "keishiando.com", true },
{ "keithlomax.com", true },
{ "kejar.id", true },
- { "kejibot.com", true },
{ "keke-shop.ch", true },
- { "kekehouse.net", true },
{ "kekgame.com", true },
{ "kekku.li", true },
{ "keksi.io", true },
@@ -18383,8 +18517,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kelgtermans-usedcars.be", true },
{ "kelheor.space", true },
{ "kellerlan.org", true },
+ { "kelleymcchesney.us", true },
{ "kellygrenard.com", true },
{ "kellyskastles.co.uk", true },
+ { "kellyssportsbarandgrill.com", true },
{ "kelmarsafety.com", true },
{ "kelvinfichter.com", true },
{ "kemmerer-net.de", true },
@@ -18397,10 +18533,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kenalsworld.com", true },
{ "kenbillionsyuan.tk", true },
{ "kenbonny.net", true },
- { "kenderbeton-magyarorszag.hu", true },
- { "kenderbetonmagyarorszag.hu", true },
- { "kenderhaz-magyarorszag.hu", true },
- { "kenderhazmagyarorszag.hu", true },
{ "kengilmour.com", true },
{ "kenguntokku.jp", true },
{ "kenia-vakantie.nl", true },
@@ -18408,6 +18540,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kenners.org", true },
{ "kennethaasan.no", true },
{ "kennethferguson.com", true },
+ { "kennethlim.me", true },
{ "kenneths.org", true },
{ "kenny-peck.com", true },
{ "keno.im", true },
@@ -18416,7 +18549,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kenrogers.co", false },
{ "kens.pics", true },
{ "kensbouncycastles.co.uk", true },
- { "kensparkesphotography.com", true },
{ "kentec.net", true },
{ "kenterlis.gr", true },
{ "kenvix.com", false },
@@ -18449,6 +18581,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ketty-voyance.com", true },
{ "keutel.net", true },
{ "kevinapease.com", true },
+ { "kevinbowers.me", true },
{ "kevinbusse.de", true },
{ "kevincox.ca", false },
{ "kevinfoley.cc", true },
@@ -18457,13 +18590,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kevinhq.com", true },
{ "kevinkla.es", true },
{ "kevinlocke.name", true },
- { "kevinmeijer.nl", true },
- { "kevinmorssink.nl", true },
{ "kevinpirnie.com", true },
+ { "kevinrandles.com", true },
{ "kevinratcliff.com", true },
{ "kevyn.lu", true },
- { "kewego.co.uk", true },
{ "keybase.io", true },
+ { "keybored.co", true },
{ "keybored.me", true },
{ "keycdn.com", true },
{ "keycenter.com.br", true },
@@ -18498,14 +18630,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "khmath.com", true },
{ "khmb.ru", true },
{ "khoury-dulla.ch", true },
+ { "khs1994.com", true },
{ "khudothiswanpark.vn", true },
{ "kiadoapartman.hu", true },
{ "kiahoriane.com", true },
- { "kiaka.co", true },
{ "kiano.net", true },
{ "kiapartscenter.net", true },
{ "kiapartsdepartment.com", true },
- { "kiapps.ovh", true },
+ { "kibea.net", true },
{ "kibibit.net", true },
{ "kibriscicek.net", true },
{ "kick-in.nl", true },
@@ -18533,14 +18665,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kidzpartiesllp.co.uk", true },
{ "kidzsmile.co.uk", true },
{ "kiebel.de", true },
+ { "kiedys.net", true },
+ { "kiehls.pt", true },
{ "kiekin.org", true },
{ "kiekko.pro", true },
- { "kiel-kind.de", true },
{ "kieran.ie", true },
{ "kieranjones.uk", true },
{ "kiesuwcursus.nl", true },
{ "kiesuwkerstkaart.nl", true },
{ "kiffmarks.com", true },
+ { "kigmbh.com", true },
{ "kikbb.com", true },
{ "kiki-voice.jp", true },
{ "kikimilyatacado.com.br", true },
@@ -18551,10 +18685,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "killerit.in", true },
{ "killerrobots.com", true },
{ "killymoonbouncycastles.com", true },
+ { "kilobyte22.de", true },
{ "kilogram.nl", true },
{ "kilometertje.nl", true },
{ "kimamass.com", true },
- { "kimberlybeautysoapcompany.com", true },
{ "kimdumaine.com", true },
{ "kimiris.com", true },
{ "kimis.gr", true },
@@ -18565,7 +18699,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kimotodental.com", true },
{ "kimsufi-jordi.tk", true },
{ "kimtran.kim", true },
- { "kin.life", true },
{ "kin.pet", true },
{ "kinautas.com", true },
{ "kinderbasar-luhe.de", true },
@@ -18595,17 +18728,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kingtecservices.com", true },
{ "kini24.ru", true },
{ "kinkenonline.com", true },
- { "kinmunity.com", true },
{ "kinnikinnick.com", true },
{ "kinniyaonlus.com", true },
{ "kinocheck.de", true },
{ "kinohled.cz", true },
- { "kinomoto.me", true },
{ "kinomoto.ovh", false },
{ "kinos.nl", true },
{ "kinozal-tv.appspot.com", true },
{ "kinsights.com", false },
- { "kintawifi.com", false },
{ "kintone.com", true },
{ "kintore.tv", true },
{ "kiocloud.com", true },
@@ -18614,7 +18744,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kippenbart.gq", true },
{ "kipriakipita.gr", true },
{ "kiragameforum.net", true },
- { "kirainmoe.com", true },
{ "kiraku.co", true },
{ "kirbear.com", true },
{ "kirche-dortmund-ost.de", true },
@@ -18646,6 +18775,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kissesb.net", true },
{ "kissflow.com", true },
{ "kissgyms.com", true },
+ { "kisskiss.ch", true },
+ { "kissmycreative.com", true },
{ "kisstube.tv", true },
{ "kitabnamabayi.com", true },
{ "kitbag.com.au", true },
@@ -18664,6 +18795,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kiteschoolschellinkhout.nl", true },
{ "kiteschoolwijkaanzee.nl", true },
{ "kiteschoolzandvoort.nl", true },
+ { "kitsapsolutions.com", true },
{ "kittmedia.com", true },
{ "kittpress.com", true },
{ "kittyhacker101.tk", true },
@@ -18675,6 +18807,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kiwipayment.com", true },
{ "kiwipayments.com", true },
{ "kiwiplace.com", true },
+ { "kiyotatsu.com", true },
{ "kj-prince.com", true },
{ "kj1391.com", true },
{ "kj1397.com", true },
@@ -18689,9 +18822,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kkaefer.com", true },
{ "kki.org", true },
{ "kkovacs.eu", true },
+ { "kkr-bridal.net", true },
{ "kks-karlstadt.de", true },
{ "kksg.com", true },
- { "kkull.tv", true },
{ "kkyy.me", true },
{ "kl-diaetist.dk", true },
{ "klaim.us", true },
@@ -18720,7 +18853,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kleine-strolche-lich.de", true },
{ "kleineanfragen.de", true },
{ "kleinfein.co", true },
- { "kleinholding.com", true },
{ "kleinreich.de", true },
{ "kleinserienproduktion.com", true },
{ "kleinsys.com", true },
@@ -18760,8 +18892,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "knaake.net", true },
{ "knab-networks.com", true },
{ "knapp.noip.me", true },
+ { "knapp.servehttp.com", true },
{ "knarcraft.net", true },
{ "kncg.pw", true },
+ { "kndkv.com", true },
{ "kneblinghausen.de", true },
{ "knegten-agilis.com", true },
{ "knep.me", true },
@@ -18771,11 +18905,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kngk.org", true },
{ "kniga.market", false },
{ "knight-industries.org", true },
- { "knightsblog.de", true },
{ "knightsbridge.net", true },
{ "knightsbridgegroup.org", true },
{ "knightsbridgewine.com", true },
{ "knip.ch", true },
+ { "knispel-online.de", true },
{ "knitfarious.com", true },
{ "kniwweler.com", true },
{ "knmv.nl", true },
@@ -18789,6 +18923,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "knthost.com", true },
{ "knuckles.tk", true },
{ "knurps.de", true },
+ { "knutur.is", true },
{ "knygos.lt", true },
{ "ko-sys.com", true },
{ "ko.si", true },
@@ -18802,10 +18937,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kocherev.org", true },
{ "kochereva.com", true },
{ "kochhar.net", true },
+ { "kockanakocko.si", true },
{ "kodak-ism.com", true },
{ "kodden.com.br", true },
{ "kode-it.de", true },
{ "kode.ch", true },
+ { "kodify.net", true },
{ "koe.hn", true },
{ "koebbes.de", true },
{ "koecollege.com", true },
@@ -18841,6 +18978,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "koketteriet.se", true },
{ "kokoiroworks.com", true },
{ "kokumoto.com", true },
+ { "kolbeck.tk", true },
{ "kolbeinsson.se", true },
{ "kolcsey.eu", true },
{ "koldanews.com", true },
@@ -18934,6 +19072,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kostya.ws", true },
{ "kotausaha.com", true },
{ "kotelezobiztositas.eu", true },
+ { "kother.org", true },
{ "kotilinkki.fi", true },
{ "kotitesti.fi", true },
{ "kotly-marten.com.ua", true },
@@ -18947,7 +19086,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kov.space", true },
{ "koval.io", true },
{ "kovaldo.ru", true },
- { "kovals.sk", true },
{ "kovehitus.ee", true },
{ "kovnsk.net", true },
{ "kovspace.com", true },
@@ -18991,12 +19129,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kramsj.uk", true },
{ "krang.org.uk", true },
{ "krankenpflege-haushaltshilfe.de", true },
- { "krasavchik.by", true },
{ "krasnodar-avia.ru", true },
- { "krasota.ru", false },
{ "krasovsky.me", true },
{ "krausoft.hu", true },
{ "krautomat.com", true },
+ { "kraynik.com", true },
{ "krazykastles.co.uk", true },
{ "krazykoolkastles.com", true },
{ "krazyphotobooths.co.uk", true },
@@ -19018,9 +19155,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kriptosec.com", true },
{ "kris.click", true },
{ "krise-chance.ch", true },
+ { "krishofer.com", true },
{ "krislamoureux.com", true },
{ "krismurray.co.uk", true },
{ "krisstarkey.co.uk", true },
+ { "kristiehill.com", true },
{ "kristikala.nl", true },
{ "kristinbailey.com", true },
{ "kristofdv.be", true },
@@ -19042,6 +19181,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kruisselbrink.com", true },
{ "kruk.co", true },
{ "krumberconsulting.com", true },
+ { "krupa.net.pl", false },
{ "krutka.cz", true },
{ "kruu.de", true },
{ "kruzhki-s-kartinkami.ru", true },
@@ -19057,10 +19197,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ks-watch.de", true },
{ "kschv-rdeck.de", true },
{ "kselenia.ee", true },
+ { "ksero.center", true },
{ "ksero.wroclaw.pl", true },
- { "ksham.net", true },
{ "kshlm.in", true },
- { "ksk-agentur.de", true },
+ { "kspg.tv", true },
+ { "ksukelife.com", true },
{ "kt-zoe.com", true },
{ "ktbnetbank.com", true },
{ "kthnxbai.xyz", true },
@@ -19075,9 +19216,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kuaza.com", true },
{ "kub.hr", true },
{ "kubica.ch", true },
+ { "kubierecki.pl", true },
{ "kubik-rubik.de", false },
+ { "kubiwa.net", true },
{ "kubkprf.ru", true },
- { "kuchenfeelisa.de", true },
+ { "kublis.ch", true },
{ "kuchentraum.eu", true },
{ "kucnibudzet.com", true },
{ "kudo.co.id", true },
@@ -19086,7 +19229,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kuehndel.org", true },
{ "kuehnel-bs.de", true },
{ "kuehnel-online.eu", true },
- { "kuehnel.org", true },
{ "kuemmerlin.eu", true },
{ "kuemmling.eu", true },
{ "kuhn-elektrotechnik.de", true },
@@ -19099,6 +19241,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kulde.net", true },
{ "kulickovy-pojezd.cz", true },
{ "kulivps.com", true },
+ { "kum.com", true },
{ "kuma.es", true },
{ "kumachan.biz", true },
{ "kumalog.com", true },
@@ -19110,7 +19253,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kunstschule-krabax.de", true },
{ "kunstundunrat.de", true },
{ "kuoruan.com", true },
- { "kupdokuchyne.cz", true },
{ "kupferstichshop.com", true },
{ "kupid.com", true },
{ "kupiec.eu.org", true },
@@ -19122,10 +19264,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kurashino-mall.com", true },
{ "kurofuku.me", true },
{ "kuroinu.jp", true },
- { "kuroisalva.xyz", false },
{ "kurona.ga", true },
{ "kuronekogaro.com", true },
- { "kurrietv.nl", true },
+ { "kurrende.nrw", true },
{ "kurschies.de", true },
{ "kurserne.dk", true },
{ "kurswahl-online.de", true },
@@ -19155,6 +19296,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kwat.chat", true },
{ "kwbresidential.com", true },
{ "kwcolville.com", true },
+ { "kwedo.com", true },
{ "kwench.com", true },
{ "kwidz.fr", true },
{ "kwmr.me", true },
@@ -19166,6 +19308,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kybi.sk", true },
{ "kydara.com", true },
{ "kyledrake.net", true },
+ { "kylegutschow.com", true },
{ "kylejohnson.io", true },
{ "kylelaker.com", true },
{ "kylescastles.co.uk", true },
@@ -19175,41 +19318,42 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kynastonwedding.co.uk", true },
{ "kyobostory-events.com", true },
{ "kyoko.org", true },
- { "kyonagashima.com", true },
{ "kyosaku.org", true },
{ "kyoto-k9.com", true },
{ "kyoto-mic.com", true },
{ "kyoto-sake.net", true },
{ "kyoto-tomikawa.jp", true },
{ "kyoto-tomoshibi.jp", true },
- { "kyouko.nl", true },
{ "kyprexxo.com", true },
{ "kyras-castles.co.uk", true },
{ "kyunyuki.com", true },
{ "kyusyu.org", true },
{ "kyy.me", true },
{ "kz.search.yahoo.com", false },
+ { "kzar.co.uk", true },
{ "kzsdabas.hu", true },
{ "l-lab.org", true },
{ "l0re.com", true },
{ "l2guru.ru", true },
+ { "l33te.net", true },
{ "l4n-clan.de", true },
{ "l7plumbing.com.au", true },
{ "l7world.com", true },
{ "l9.fr", true },
{ "la-baldosa.fr", true },
- { "la-cave-a-nodo.fr", true },
+ { "la-cave-a-nodo.fr", false },
{ "la-compagnie-des-elfes.fr", true },
{ "la-ganiere.com", true },
+ { "la-kaz-a-velo.fr", true },
{ "la-maison.ch", true },
+ { "la-maison.eu", true },
{ "la-petite-entreprise.com", true },
{ "la-tourmaline.ch", true },
- { "laassari.me", true },
+ { "laassari.me", false },
{ "laatikko.io", true },
{ "laatjeniethackmaken.nl", true },
{ "labande-annonce.fr", true },
{ "labcoat.jp", true },
- { "labfox.de", true },
{ "labms.com.au", true },
{ "labobooks.com", true },
{ "laboitebio-logique.ca", true },
@@ -19220,15 +19364,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "laboxfaitsoncinema.com", true },
{ "labradorpuppiesforsalebyregisteredlabradorbreeders.com", false },
{ "labrat.mobi", true },
+ { "labtest.ltd", true },
{ "lacantine.xyz", true },
- { "lacasa.fr", true },
+ { "lacaserita.org", true },
{ "lacaveducinquantenaire.com", true },
{ "lacetsfun.com", true },
{ "lacetsroses.ch", true },
{ "lachainedesentrepreneurs.fr", true },
{ "lachawoj.de", true },
+ { "lachlan-harris.com", true },
{ "lachlan.com", true },
- { "lachlankidson.net", true },
{ "lachosetypo.com", true },
{ "lacicloud.net", true },
{ "lacigf.org", true },
@@ -19239,7 +19384,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "laclefdor.ch", true },
{ "lacliniquefinanciere.com", true },
{ "lacoast.gov", true },
- { "lacuevadechauvet.com", true },
+ { "lacoquette.gr", true },
{ "lacyc3.eu", true },
{ "ladbroke.net", true },
{ "ladenzeile.at", true },
@@ -19252,7 +19397,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lafayette-rushford.com", true },
{ "lafcheta.info", true },
{ "lafeemam.fr", true },
- { "lafema.de", true },
{ "lafillepolyvalente.ca", true },
{ "lafillepolyvalente.com", true },
{ "lafka.org", true },
@@ -19265,15 +19409,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lagerauftrag.info", true },
{ "lagit.in", true },
{ "laglab.org", false },
- { "lagodny.eu", true },
+ { "lagodny.eu", false },
{ "lagout.org", true },
{ "lagriffeduservice.fr", true },
{ "laguiadelvaron.com", true },
{ "laguinguette.fr", true },
- { "laharilais.fr", true },
{ "lahipotesisgaia.com", true },
{ "lahnau-akustik.de", true },
{ "lahora.com.ec", true },
+ { "lai.is", true },
{ "lain.at", true },
{ "laindonleisure.co.uk", true },
{ "lak-berlin.de", true },
@@ -19297,7 +19441,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lakesherwoodoutdoorlighting.com", true },
{ "lakeshowlife.com", true },
{ "lakewoodcomputerservices.com", true },
- { "lakhesis.net", true },
{ "lakonia.com.br", true },
{ "lalalab.com", true },
{ "lalaya.fr", true },
@@ -19315,6 +19458,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lamclam.site", true },
{ "lame1337.xyz", true },
{ "lamiaposta.email", false },
+ { "lamikvah.org", true },
{ "laminine.info", true },
{ "lamp.re", false },
{ "lampegiganten.dk", true },
@@ -19323,17 +19467,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lampenwelt.at", true },
{ "lampenwelt.ch", true },
{ "lampposthomeschool.com", true },
- { "lamtv.com.mx", true },
- { "lan.biz.tr", true },
- { "lan2k.org", true },
+ { "lana.swedbank.se", true },
{ "lanbroa.eu", true },
- { "lanbyte.se", true },
+ { "lancashirecca.org.uk", true },
{ "lancejames.com", true },
{ "lancelafontaine.com", true },
{ "lanceyip.com", true },
- { "lancork.net", true },
{ "lancyvbc.ch", true },
{ "land.nrw", false },
+ { "landchecker.com.au", true },
{ "landflair-magazin.de", true },
{ "landhaus-christmann.de", true },
{ "landofelves.net", true },
@@ -19356,10 +19498,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "landscapelightingwestlakevillage.com", true },
{ "landyparts.nl", true },
{ "lanetix.com", true },
+ { "lanforalla.se", true },
{ "lang-php.com", true },
{ "langatang.com", true },
{ "langbein.org", true },
{ "langguth.io", true },
+ { "langkahteduh.com", true },
{ "langkawitrip.com", true },
{ "langstreckensaufen.de", true },
{ "languageterminal.com", true },
@@ -19407,7 +19551,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "largeviewer.com", true },
{ "lariposte.org", true },
{ "lariscus.eu", true },
- { "larky.top", true },
{ "larondinedisinfestazione.com", true },
{ "larptreff.de", true },
{ "larraz.es", true },
@@ -19457,8 +19600,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lateral.dog", true },
{ "lateralsecurity.com", true },
{ "latestdeals.co.uk", true },
- { "lathen-wahn.de", true },
{ "latiendadelbebefeliz.com", true },
+ { "latiendauno.com", true },
{ "latiendawapa.com", true },
{ "latino.dating", true },
{ "latinphone.com", true },
@@ -19473,6 +19616,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "laubacher.io", true },
{ "lauchundei.at", true },
{ "lauensteiner.de", true },
+ { "laufers.pl", true },
{ "laufpix.de", true },
{ "lauftreff-himmelgeist.de", true },
{ "laughinggrapepublishing.com", true },
@@ -19482,11 +19626,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "launchpad-app2.com", true },
{ "launchpadder2.com", true },
{ "lauraandwill.wedding", false },
+ { "lauraenvoyage.fr", true },
{ "laurakashiwase.com", true },
{ "lauraofrank.com", true },
{ "laurasplacefamilysupport.org.au", true },
{ "laurelblack.com", true },
- { "laurelspaandlash.com", true },
{ "laurenlobue.com", true },
{ "lauriemilne.com", true },
{ "lauriuc.sk", true },
@@ -19519,10 +19663,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lawrence-institute.com", true },
{ "lawrenceberg.nl", true },
{ "lawrencemurgatroyd.com", true },
+ { "lawyerkf.com", true },
{ "layfully.me", true },
{ "laylo.io", true },
{ "laylo.nl", true },
- { "laymans911.info", true },
+ { "layoutsatzunddruck.de", true },
{ "lazapateriahandmade.pe", true },
{ "lazowik.pl", true },
{ "lazurit.com", true },
@@ -19543,7 +19688,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lca-pv.de", true },
{ "lca.gov", true },
{ "lcars-sv.info", true },
+ { "lcbizsolutions.com", true },
{ "lce-events.com", true },
+ { "lcgaj.com", true },
{ "lcht.ch", false },
{ "lcrmscp.gov", true },
{ "lcy.cat", true },
@@ -19582,16 +19729,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "leakforums.net", true },
{ "leandre.cn", true },
{ "leanplando.com", true },
- { "leaodarodesia.com.br", true },
{ "leap-it.be", true },
{ "leapandjump.co.uk", true },
- { "learnedhacker.com", true },
{ "learnflakes.net", true },
{ "learnforestry.com", true },
{ "learning-id.com", true },
{ "learningis1.st", true },
{ "learninglaw.com", true },
- { "learningman.top", true },
{ "learnpianogreece.com", true },
{ "learnplayground.com", true },
{ "learntube.cz", true },
@@ -19622,7 +19766,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ledecologie.com.br", true },
{ "ledeguisement.com", true },
{ "lederer-it.com", true },
- { "ledlampor365.se", true },
{ "ledscontato.com.br", true },
{ "ledzom.ru", false },
{ "lee-fuller.co.uk", true },
@@ -19654,9 +19797,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "legadental.com", true },
{ "legaillart.fr", true },
{ "legalcontrol.info", true },
- { "legaleus.co.uk", true },
- { "legalisepeacebloom.com", true },
- { "legalrobot-uat.com", true },
+ { "legalinmotion.es", true },
{ "legalrobot.com", true },
{ "legatofmrc.fr", true },
{ "legendarycamera.com", true },
@@ -19677,10 +19818,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lehti-tarjous.net", true },
{ "leibniz-remscheid.de", false },
{ "leideninternationalreview.com", true },
- { "leifdreizler.com", false },
{ "leigh.life", true },
- { "leilautourdumon.de", true },
{ "leilonorte.com", true },
+ { "leiming.co", true },
{ "leinfelder.in", true },
{ "leipzig.photo", true },
{ "leipziger-triathlon.de", true },
@@ -19688,11 +19828,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "leisure-supplies-show.co.uk", true },
{ "leition.com", true },
{ "leitionusercontent.com", true },
+ { "leiyun.me", true },
{ "lejardindesmesanges.fr", true },
{ "lel.ovh", true },
{ "lelambiental.com.br", true },
- { "lelehei.com", true },
- { "lelubre.info", true },
{ "lemarcheelagrandeguerra.it", true },
{ "lemni.top", true },
{ "lemoine.at", true },
@@ -19700,8 +19839,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lemondrops.xyz", true },
{ "lemonop.com", true },
{ "lemonparty.co", true },
- { "lemonthy.ca", true },
- { "lemonthy.com", true },
{ "lemouillour.fr", true },
{ "lemuslimpost.com", true },
{ "lenagroben.de", true },
@@ -19711,7 +19848,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lengzzz.com", true },
{ "lenidh.de", true },
{ "leninalbertop.com.ve", true },
- { "lenkunz.me", true },
{ "lennyobez.be", true },
{ "lenr-forum.com", true },
{ "lensdoctor.com", true },
@@ -19721,7 +19857,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lenyip.com", true },
{ "lenyip.me", true },
{ "lenyip.works", true },
- { "lenzw.de", true },
{ "leoandpeto.com", true },
{ "leochedibracchio.com", true },
{ "leodaniels.com", true },
@@ -19735,10 +19870,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "leonauto.de", true },
{ "leonax.net", true },
{ "leondenard.com", true },
+ { "leonhooijer.nl", false },
{ "leonklingele.de", true },
{ "leowkahman.com", true },
{ "lep.gov", true },
{ "lepenetapeti.com", true },
+ { "leponton-lorient.fr", true },
{ "leppis-it.de", true },
{ "leprado.com", true },
{ "lepsos.com", true },
@@ -19759,6 +19896,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lesancheslibres.fr", true },
{ "lesarts.com", true },
{ "lesberger.ch", true },
+ { "lesbiansslaves.com", true },
+ { "lesbofight.com", true },
{ "leseditionsbraquage.com", true },
{ "lesgoodnews.fr", true },
{ "lesharris.com", true },
@@ -19774,16 +19913,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lespret.nl", true },
{ "lesscloud.com", true },
{ "lessets-graphiques.com", true },
- { "lessing.consulting", true },
{ "lessis.moe", true },
{ "lesterchan.net", true },
{ "lesterrassesdusoleil.ch", true },
{ "lesyndicat.info", true },
{ "let-go.cc", true },
{ "letemps.ch", true },
- { "letempsdunefleur.be", true },
- { "leter.io", true },
- { "lethbridgecoffee.com", true },
{ "lets-bounce.com", true },
{ "lets-go-acoustic.de", true },
{ "lets-ktai.jp", true },
@@ -19796,7 +19931,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "letsgetchecked.com", true },
{ "letsgowhilewereyoung.com", true },
{ "letskick.ru", true },
- { "letsorganise.uk", true },
{ "letspartyrugby.co.uk", true },
{ "letstalkcounseling.com", true },
{ "letterbox-online.de", true },
@@ -19827,24 +19961,26 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lewisdatasecurity.com", true },
{ "lewislaw.com", true },
{ "lewisllewellyn.me", true },
+ { "lexdigital.pl", true },
{ "lexico.pt", true },
{ "lexicography.online", true },
{ "lexpierce.social", true },
{ "lexway.pk", true },
{ "lexxyn.nl", true },
+ { "leymaritima.com", true },
{ "lezard-com.fr", true },
{ "lfashion.eu", true },
{ "lfgss.com", true },
{ "lfrconseil.com", true },
{ "lgbt.io", true },
+ { "lgbt.ventures", true },
+ { "lgbtqventures.com", true },
+ { "lgbtventures.com", true },
{ "lghfinancialstrategy.ch", true },
{ "lgpecasoriginais.com.br", true },
{ "lhajn.cz", true },
{ "lhakustik.se", true },
- { "lhalbert.xyz", true },
- { "lhasaapso.com.br", true },
{ "lhconsult.tk", false },
- { "lheinrich.de", true },
{ "lhost.su", true },
{ "li-ke.co.jp", true },
{ "li.search.yahoo.com", false },
@@ -19853,14 +19989,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lian-in.net", true },
{ "liang-li88.com", true },
{ "liang-li88.net", true },
- { "liangbp.com", true },
- { "lianwen.kim", true },
{ "lianye1.cc", true },
{ "lianye2.cc", true },
{ "lianye3.cc", true },
{ "lianye4.cc", true },
{ "lianye5.cc", true },
{ "lianye6.cc", true },
+ { "liautard.fr", true },
{ "lib64.net", true },
{ "libbitcoin.org", true },
{ "libble.eu", true },
@@ -19889,11 +20024,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "libskia.so", true },
{ "libsodium.org", true },
{ "libstock.si", true },
- { "liceo.cn", true },
{ "lichess.org", true },
+ { "lichtmetzger.de", true },
{ "lichtspot.de", true },
{ "lichttechnik-tumler.com", true },
{ "lichttraeumer.de", true },
+ { "lickmypussy.us", true },
{ "lickthesalt.com", true },
{ "lidavidm.me", true },
{ "lidel.org", true },
@@ -19909,8 +20045,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lidogr.com", true },
{ "lidong.me", true },
{ "lidow.eu", true },
- { "liduan.com", true },
- { "liduan.net", true },
+ { "liduan.net", false },
{ "liebel.org", true },
{ "lieberwirth.biz", true },
{ "lieblingsholz.de", true },
@@ -19920,10 +20055,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lifebetweenlives.com.au", true },
{ "lifecism.com", true },
{ "lifecoach.tw", false },
+ { "lifegrip.com.au", true },
{ "lifeinhex.com", true },
{ "lifeinsurancepro.org", true },
- { "lifeinsurances.pro", true },
- { "lifeinsurances24.com", true },
{ "lifekiss.ru", true },
{ "lifematenutrition.com", true },
{ "lifemstyle.com", true },
@@ -19939,7 +20073,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "light-up.xyz", true },
{ "light.mail.ru", true },
{ "lightbox.co", true },
- { "lightcloud.com", true },
{ "lighthouseinstruments.com", true },
{ "lighting-centres.co.uk", true },
{ "lightingagoura.com", true },
@@ -19964,8 +20097,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lights.co.uk", true },
{ "lightspeed.com", false },
{ "lightspeedta.co", true },
+ { "lighttp.com", true },
{ "lightupcollective.co.uk", true },
- { "lignemax.com", true },
{ "lignoma.com", true },
{ "ligonier.com", true },
{ "lihaul.dnsalias.net", true },
@@ -19996,7 +20129,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "limereslaw.com", true },
{ "limitededitioncomputers.com", true },
{ "limitededitionsolutions.com", true },
- { "limitget.com", true },
{ "limitxyz.com", true },
{ "limn.me", true },
{ "limoairporttoronto.net", true },
@@ -20012,15 +20144,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lincolnsfh.com", true },
{ "lincolnwayflorist.com", true },
{ "lincsbouncycastlehire.co.uk", true },
+ { "lindalap.fi", true },
+ { "lindemann.space", true },
{ "linden.me", true },
{ "lindeskar.se", true },
- { "lindholmen.club", true },
{ "lindnerhof-taktik.de", true },
{ "lindo.ru", true },
{ "lindon.pw", true },
{ "lindsayanderson.com", true },
{ "lindskogen.se", true },
{ "lindy.co", false },
+ { "line.biz", true },
{ "line.co.nz", true },
{ "lineageos.org", true },
{ "linearaudio.net", true },
@@ -20031,9 +20165,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lingerie.com.br", true },
{ "lingeriesilhouette.com", true },
{ "lingotaxi.com", true },
- { "lingting.vip", true },
{ "linguamilla.com", true },
{ "lingvo-svoboda.ru", true },
+ { "linherest.tk", true },
{ "link-sanitizer.com", true },
{ "link2serve.com", true },
{ "linkat4.cz", true },
@@ -20046,9 +20180,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "linkonaut.net", true },
{ "linkthis.me", true },
{ "linkthis.ml", true },
- { "linkthisstatus.ml", true },
{ "linktio.com", true },
{ "linky.tk", true },
+ { "linkybos.com", true },
{ "linkycat.com", true },
{ "linode.com", false },
{ "linost.com", true },
@@ -20080,10 +20214,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "linuxproperties.com", true },
{ "linx.li", true },
{ "linx.net", true },
- { "linxmind.eu", true },
{ "linzgau.de", true },
+ { "linzyjx.com", true },
{ "lionhosting.nl", true },
- { "lionlyrics.com", true },
{ "lionsdeal.com", true },
{ "lipartydepot.com", true },
{ "lipex.com", true },
@@ -20095,7 +20228,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "liquidinternet.co", true },
{ "liquidradio.pro", true },
{ "liquidwarp.net", true },
- { "liquimoly.market", true },
{ "lirion.de", true },
{ "liris-beautywelt.de", true },
{ "lirlandais.ch", true },
@@ -20115,6 +20247,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lists.fedoraproject.org", true },
{ "lists.stg.fedoraproject.org", true },
{ "litchidova.nl", true },
+ { "litebit.eu", true },
{ "litebits.com", true },
{ "litemind.com", true },
{ "literarymachin.es", true },
@@ -20133,11 +20266,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "littlepigcreek.com.au", true },
{ "littlepincha.fr", true },
{ "littleprincessandmascotparties.co.uk", true },
- { "littleqiu.net", true },
{ "littleredsbakeshop.com", true },
{ "littlericket.me", true },
{ "littlescallywagsplay.co.uk", true },
- { "littleservice.cn", true },
{ "littleskin.cn", true },
{ "littleswitch.co.jp", true },
{ "littlewatcher.com", true },
@@ -20148,7 +20279,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "liudon.org", true },
{ "liufengyu.cn", true },
{ "liul.in", true },
- { "liushuyu.tk", true },
+ { "liupeicheng.top", true },
{ "liv3d.stream", true },
{ "live4k.media", false },
{ "livebetterwith.com", true },
@@ -20157,11 +20288,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "livecards.es", true },
{ "livecards.eu", true },
{ "livecards.it", true },
- { "livechatlady.info", true },
{ "livedesign.at", true },
{ "livedesign24.de", true },
{ "liveflightapp.com", true },
{ "liveforspeed.se", true },
+ { "livejasmin.dk", true },
{ "livekaarten.be", true },
{ "livekaarten.nl", true },
{ "livekarten.at", true },
@@ -20180,6 +20311,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "liveperformersmeeting.net", true },
{ "liveregistratie.nl", true },
{ "livesearch-fukuoka.com", true },
+ { "livesheep.com", true },
{ "livesure.com", true },
{ "livetube.tv", true },
{ "livi.co", true },
@@ -20202,14 +20334,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lizhi.io", true },
{ "lizhi123.net", true },
{ "lizzaran.io", true },
- { "lizzythepooch.com", true },
{ "ljason.cn", true },
{ "ljs.io", true },
{ "lk-hardware.cz", true },
{ "lknw.de", true },
{ "lkp111138.me", true },
{ "llamacuba.com", true },
- { "lll.st", true },
{ "llm-guide.com", true },
{ "lloyd-day.me", true },
{ "lm-pumpen.de", false },
@@ -20219,12 +20349,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lmintlcx.com", true },
{ "lmmtfy.io", true },
{ "lmsptfy.com", true },
+ { "lmtls.me", true },
{ "lmtm.eu", true },
{ "lnhequipmentltd.com", true },
{ "lntu.org", true },
{ "lnx.li", true },
{ "load-ev.de", true },
- { "loadingdeck.com", false },
{ "loadlow.me", true },
{ "loadwallet.com", true },
{ "loafhead.me", true },
@@ -20246,12 +20376,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "localdata.us", true },
{ "localdecor.com.br", true },
{ "localethereum.com", true },
+ { "localhorst.duckdns.org", true },
{ "localhorst.xyz", false },
{ "localhost.ee", true },
- { "localnetwork.nz", true },
{ "localspot.pl", true },
{ "locapos.com", true },
- { "location-fichier-email.com", true },
{ "locationvoitureallemagne.com", true },
{ "locationvoitureangleterre.com", true },
{ "locationvoitureaustralie.com", true },
@@ -20263,13 +20392,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "locatorplus.gov", true },
{ "locauxrama.fr", true },
{ "locker.email", true },
+ { "locker.plus", true },
{ "lockify.com", true },
{ "lockpick.nl", true },
{ "lockpicks.se", true },
{ "lockr.io", true },
+ { "locksmithbalchsprings.com", true },
+ { "locksmithgarland-tx.com", true },
+ { "locksmithgrapevinetx.com", true },
+ { "locksmithmesquitetx.com", true },
+ { "locksmithspring.com", true },
+ { "locksmiththewoodlands.com", true },
{ "locomore.com", true },
{ "locomotionds.com", true },
- { "locomotive.net.br", true },
{ "lodash.com", false },
{ "loddeke.eu", true },
{ "lodewijkict.nl", true },
@@ -20292,7 +20427,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "logicio.de", false },
{ "logicio.net", false },
{ "logicne-hise.si", true },
- { "logicoma.com", true },
{ "login.corp.google.com", true },
{ "login.gov", false },
{ "login.launchpad.net", true },
@@ -20300,10 +20434,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "login.ubuntu.com", true },
{ "login.xero.com", false },
{ "login.yahoo.com", false },
- { "logingate.hu", true },
{ "loginsentinel.eu", true },
{ "logitank.net", true },
{ "logitel.de", true },
+ { "logoesun.com", true },
{ "logoglo.com", true },
{ "logojoes.net", true },
{ "logopaediereinhard.de", true },
@@ -20322,6 +20456,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lojadarenda.com.br", true },
{ "lojadewhisky.com.br", true },
{ "lojadoarcomprimido.com.br", true },
+ { "lojadoprazer.com.br", true },
{ "lojadosomautomotivo.com.br", true },
{ "lojafazendoarte.com.br", true },
{ "lojafilipaper.com.br", true },
@@ -20363,6 +20498,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lon-so.com", true },
{ "lona.io", true },
{ "lonal.com", true },
+ { "lonasdigital.com", true },
+ { "london-transfers.com", true },
{ "london.dating", true },
{ "londongallery.net", true },
{ "londongynaecologist.co", true },
@@ -20417,7 +20554,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lostkeys.co.uk", true },
{ "lostserver.com", true },
{ "lostwithdan.com", true },
- { "loteks.de", true },
{ "lothlorien.ca", false },
{ "lotn.mobi", true },
{ "lotn.nl", true },
@@ -20430,6 +20566,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lou.lt", true },
{ "louange-reconvilier.ch", true },
{ "loucanfixit.com", true },
+ { "louerunhacker.fr", true },
{ "louisvillecarguys.com", true },
{ "louisvillevmug.info", true },
{ "loune.net", true },
@@ -20441,11 +20578,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "loveisourweapon.com", true },
{ "lovelens.ch", false },
{ "lovelens.li", false },
- { "lovelive.us", true },
{ "lovelivewiki.com", true },
{ "lovelovenavi.jp", true },
{ "lovelytimes.net", true },
- { "lovemen.cc", true },
{ "lovemomiji.com", true },
{ "lovenwishes.com", true },
{ "loveph.one", true },
@@ -20469,12 +20604,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lowson.ca", true },
{ "loxal.net", true },
{ "loxal.org", true },
- { "loyaleco.it", true },
{ "lp-support.nl", true },
{ "lpacademy.com.br", true },
- { "lpm-uk.com", true },
{ "lpt-nebreziny.eu", true },
{ "lra-cloud.de", true },
+ { "lrhstsa.com", true },
{ "lrssystems.com", true },
{ "ls-alarm.de", true },
{ "lsal.me", true },
@@ -20498,10 +20632,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lubomirkazakov.com", true },
{ "luc-oberson.ch", true },
{ "luca.swiss", true },
- { "lucacastelnuovo.nl", false },
+ { "lucacastelnuovo.nl", true },
+ { "lucafrancesca.me", true },
{ "lucakrebs.de", true },
{ "lucasantarella.com", true },
- { "lucascantor.com", true },
{ "lucasem.com", true },
{ "lucasgymnastics.com", true },
{ "lucaslarson.net", true },
@@ -20516,7 +20650,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "luckycastles.co.uk", true },
{ "luckydog.pw", true },
{ "luckyfrog.hk", true },
- { "luckystarfishing.com", true },
{ "luckyxf.com", true },
{ "lucy.science", true },
{ "lucyparsonslabs.com", true },
@@ -20546,7 +20679,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lugui.in", true },
{ "lui.pink", true },
{ "luiscapelo.info", true },
- { "luisgf.es", true },
{ "luismaier.de", true },
{ "luisyr.com", true },
{ "luizkowalski.net", true },
@@ -20564,16 +20696,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lukasschauer.de", true },
{ "lukasschick.de", false },
{ "lukaszorn.de", true },
+ { "lukaszwojcik.net", true },
{ "lukatz.de", true },
{ "luke.ch", true },
{ "lukeistschuld.de", true },
+ { "lukem.eu", true },
+ { "lukem.net", true },
{ "lukeng.net", true },
{ "lukesbouncycastlehire.com", true },
{ "lukestebbing.com", true },
{ "lukmanulhakim.id", true },
{ "lukull-pizza.de", true },
- { "luma.family", true },
- { "luma.pink", true },
{ "lumi.pw", true },
{ "lumiere.com", true },
{ "luminaires-online.fr", true },
@@ -20581,12 +20714,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lunafag.ru", true },
{ "lunakit.org", true },
{ "lunanova.moe", true },
- { "lunapatch.com", true },
{ "lunapps.com", true },
{ "lunar6.ch", true },
{ "lunarlog.com", true },
{ "lunarshark.com", true },
- { "lunarsoft.net", true },
{ "lunartail.nl", true },
{ "lunasqu.ee", true },
{ "lunchbunch.me", true },
@@ -20605,6 +20736,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lupinencyclopedia.com", true },
{ "luso-livros.net", true },
{ "lusteniny.cz", false },
+ { "lustige-zitate.com", true },
{ "lustin.fr", true },
{ "lustrum.ch", true },
{ "lusynth.com", true },
@@ -20622,6 +20754,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "luxescreenprotector.nl", true },
{ "luxsci.com", true },
{ "luxurynsight.net", true },
+ { "luxurytimepieces.net", true },
{ "luxuryweddingsindonesia.com", true },
{ "luxusnivoucher.cz", true },
{ "luxusnyvoucher.sk", true },
@@ -20636,6 +20769,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lvmoo.com", true },
{ "lvrsystems.com", true },
{ "lw-addons.net", true },
+ { "lwhate.com", true },
{ "lwl.moe", true },
{ "lwl12.com", true },
{ "lxd.cc", true },
@@ -20645,6 +20779,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lydudlejning.net", true },
{ "lyfbits.com", true },
{ "lyftrideestimate.com", true },
+ { "lykai.ca", true },
{ "lymia.moe", true },
{ "lynero.dk", true },
{ "lyness.io", true },
@@ -20662,12 +20797,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lyrical-nonsense.com", true },
{ "lyricfm.ie", true },
{ "lys.ch", true },
- { "lyscnd.com", true },
{ "lyst.co.uk", true },
{ "lyuly.com", true },
{ "lyx.dk", true },
{ "lz.sb", true },
+ { "lzh.one", true },
{ "m-22.com", true },
+ { "m-chemical.com.hk", true },
{ "m-edmondson.co.uk", true },
{ "m-idea.jp", true },
{ "m-kleinert.de", true },
@@ -20687,17 +20823,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ma2t.com", true },
{ "maartenderaedemaeker.be", true },
{ "maartenvandekamp.nl", true },
+ { "maatwerkopruimcoaching.nl", true },
+ { "maatwerkzorgcoaching.nl", true },
{ "maaya.jp", true },
{ "maayogashram.com", true },
{ "mabankonline.com", true },
{ "mabulledu.net", true },
{ "mac-i-tea.ch", true },
- { "mac-world.pl", true },
{ "mac1.net", true },
{ "macaw.nl", true },
{ "macaws.org", true },
{ "maceinturecuir.com", true },
{ "maces-net.de", true },
+ { "macgenius.com", true },
{ "mach-politik.ch", true },
{ "macha.cloud", true },
{ "machbach.com", true },
@@ -20714,6 +20852,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mackey7.net", true },
{ "mackeysack.com", true },
{ "mackiehouse.ca", true },
+ { "macksproductions.in", true },
{ "maclemon.at", true },
{ "macleod.io", true },
{ "macnemo.de", true },
@@ -20728,7 +20867,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "macstore.pe", true },
{ "mactools.com.co", true },
{ "madae.nl", true },
- { "madandpissedoff.com", true },
{ "madars.org", false },
{ "madbin.com", true },
{ "madbouncycastles.co.uk", true },
@@ -20738,6 +20876,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "maddistonpsa.co.uk", true },
{ "maddreefer.com", true },
{ "made-in-earth.co.jp", true },
+ { "madebydusk.com", true },
{ "madebyshore.com", true },
{ "madeglobal.com", true },
{ "madeinchezmoi.net", true },
@@ -20746,23 +20885,23 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "madeloc.com", true },
{ "mademoiselledemargaux.com", true },
{ "mader.jp", true },
+ { "maderasbrown.com", true },
{ "madin.ru", true },
{ "madirc.net", true },
{ "madmar.ee", true },
{ "madoka.nu", true },
{ "madokami.net", true },
- { "madpeople.net", true },
{ "madreacqua.org", true },
{ "madridartcollection.com", true },
{ "madtec.de", true },
{ "madusecurity.com", true },
- { "madweb.design", true },
{ "mae-berlinistanbul.com", true },
{ "maedchenflohmarkt.at", true },
{ "maedchenflohmarkt.de", true },
{ "maelstrom-fury.eu", true },
{ "maelstrom.ninja", true },
{ "maeplasticsurgery.com", true },
+ { "maerzpa.de", true },
{ "maestrano.com", true },
{ "maff.co.uk", true },
{ "maff.scot", false },
@@ -20784,10 +20923,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "magentapinkinteriors.co.uk", true },
{ "magentoeesti.eu", true },
{ "magewell.nl", true },
+ { "maggie.com", true },
{ "magi-cake.com", true },
{ "magi.systems", true },
{ "magical-secrets.com", true },
- { "magical.rocks", true },
{ "magicalcircuslv.com", true },
{ "magicbroccoli.de", true },
{ "magicdaysomagh.co.uk", true },
@@ -20814,6 +20953,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mahjong.org", true },
{ "mahrer.net", true },
{ "maiaimobiliare.ro", true },
+ { "maidoty.net", true },
{ "maiebanatulfruncea.com", true },
{ "maijia800.com", true },
{ "maikolfish.it", true },
@@ -20850,6 +20990,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "maispa.com", true },
{ "maisretorno.com", true },
{ "maisvitaminas.com.br", true },
+ { "maitrechaton.fr", true },
{ "maitrise-orthopedique.com", true },
{ "majahoidja.ee", true },
{ "majaweb.cz", true },
@@ -20860,8 +21001,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "majkassab.net", true },
{ "majkassab.org", true },
{ "majkl.me", true },
- { "majkl.xyz", true },
- { "majkl578.cz", true },
{ "majkyto.cz", true },
{ "makaleci.com", true },
{ "make-your-own-song.com", true },
@@ -20871,6 +21010,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "makemejob.com", true },
{ "makenaiyo-fx.com", true },
{ "makera.ga", true },
+ { "makersatwork.com", true },
{ "maketheneighborsjealous.com", true },
{ "makeurbiz.com", true },
{ "makeyourlaws.org", true },
@@ -20888,6 +21028,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "maldives.cx", true },
{ "malenyflorist.com.au", true },
{ "malermeister-haussmann.de", true },
+ { "malesoowki.blog", true },
+ { "malezan.com", true },
{ "maliar.fr", true },
{ "malibu-electric.com", true },
{ "malibuelectrical.com", true },
@@ -20915,19 +21057,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "malscan.org", true },
{ "malta-firma.com", true },
{ "malte-kiefer.de", true },
- { "malware.watch", true },
+ { "malufs.com.br", true },
{ "malwareinvestigator.gov", true },
{ "malwarekillers.com", true },
{ "malwareverse.us", true },
{ "maly.cz", true },
- { "maly.io", false },
{ "malyshata.com", true },
{ "malysvet.net", true },
{ "mamaasia.info", true },
- { "mamacobaby.com", true },
{ "mamadea.be", true },
{ "mamadoma.com.ua", true },
{ "mamafit.club", true },
+ { "mamamoet.ru", true },
{ "mamanecesitaungintonic.com", true },
{ "mamiecouscous.com", true },
{ "mammals.net", true },
@@ -20939,6 +21080,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mamout.xyz", true },
{ "mamuko.nl", true },
{ "man3s.jp", true },
+ { "manaboutahor.se", false },
{ "manach.net", true },
{ "manage.cm", true },
{ "manage4all.de", true },
@@ -20950,7 +21092,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "manageprojects.com", false },
{ "manager-efficacement.com", true },
{ "manager.linode.com", false },
- { "managewp.org", true },
{ "manatees.net", true },
{ "manavgabhawala.com", true },
{ "manawill.jp", true },
@@ -20962,6 +21103,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "manfredi.io", true },
{ "manfredimatteo.com", true },
{ "manfredschafer.ch", true },
+ { "mangapoi.com", true },
{ "mangaristica.com", true },
{ "manhattanchoralensemble.org", true },
{ "manhole.club", true },
@@ -20983,6 +21125,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "manoro.de", true },
{ "manowarus.com", true },
{ "mansdell.net", true },
+ { "mansfeld.pl", true },
+ { "mansiontech.cn", true },
{ "mantabiofuel.com", true },
{ "mantor.org", false },
{ "manuall.de", true },
@@ -20990,7 +21134,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "manuall.ro", true },
{ "manualscollection.com", true },
{ "manuel-herrmann.de", true },
- { "manuel-schefczyk.de", true },
+ { "manuel7espejo.com", true },
{ "manuelahidalgo.org", true },
{ "manueldopheide.com", true },
{ "manueli.de", true },
@@ -21008,6 +21152,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "manyiu.com", true },
{ "manyue.org", true },
{ "maoi.re", true },
+ { "maomaobt.com", true },
{ "maomihz.com", true },
{ "maone.net", true },
{ "maorseo.com", true },
@@ -21016,7 +21161,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "maozedong.red", true },
{ "map4erfurt.de", true },
{ "map4jena.de", true },
- { "mapasmundi.com.br", true },
{ "mapblender.com", true },
{ "mapeo.io", true },
{ "maplanetebeaute.fr", true },
@@ -21026,24 +21170,28 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "maquillage-permanent-tatoo.com", true },
{ "maquinariaspesadas.org", true },
{ "mar-eco.no", true },
+ { "marabumadrid.com", false },
{ "marakovits.net", true },
{ "marble.com", true },
{ "marbogardenlidkoping.se", true },
{ "marc-hammer.de", true },
{ "marc-schlagenhauf.de", true },
{ "marcaixala.me", true },
+ { "marcaudefroy.com", true },
{ "marceau.ovh", true },
{ "marcel-preuss.de", true },
{ "marcel-veronetzki.de", true },
+ { "marcel-waldvogel.ch", true },
{ "marcelinofranchini.com", true },
{ "marcelinofranchini.eu", true },
{ "marcelinofranchini.info", true },
{ "marcelinofranchini.net", true },
{ "marcelinofranchini.org", true },
{ "marcelpreuss.de", true },
- { "marcelsiegert.com", true },
+ { "marcelwaldvogel.ch", true },
{ "marcelwiedemeier.com", true },
- { "marcgoertz.de", false },
+ { "marcelwolf.coach", true },
+ { "marcgoertz.de", true },
{ "marche-contre-monsanto.ch", true },
{ "marciaimportados.com.br", true },
{ "marcianoandtopazio.com", true },
@@ -21056,6 +21204,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "marcohager.de", true },
{ "marcoherten.com", true },
{ "marcuskoh.com", true },
+ { "marcusserver.synology.me", true },
{ "marcusstafford.com", true },
{ "marechal-company.com", true },
{ "marek.su", true },
@@ -21067,15 +21216,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "margo-co.ch", true },
{ "margo.ml", true },
{ "margotlondon.co.uk", true },
- { "mariacristinadoces.com.br", true },
{ "mariage-photo.ch", true },
{ "marianatherapy.com", true },
{ "marianelaisashi.com", true },
{ "marianhoenscheid.de", true },
{ "mariannenan.nl", true },
+ { "mariannethijssen.nl", true },
{ "mariaolesen.dk", true },
{ "mariapietropola.com", true },
- { "marie.club", true },
{ "mariehane.com", true },
{ "mariemiramont.fr", true },
{ "mariereichl.cz", true },
@@ -21089,6 +21237,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "marinbusinesscenter.ch", true },
{ "marine.gov", true },
{ "marinekaplama.com", true },
+ { "marinela.com.mx", false },
+ { "marinelausa.com", false },
{ "marines-shop.com", true },
{ "mario.party", false },
{ "marioabela.com", true },
@@ -21099,6 +21249,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mariushubatschek.de", true },
{ "mariviolin.com", true },
{ "marix.ro", true },
+ { "marjoleindens.be", true },
{ "marjoriecarvalho.com.br", true },
{ "mark-semmler.de", true },
{ "markaconnor.com", true },
@@ -21112,6 +21263,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "marketindex.com.au", true },
{ "marketing-2.de", true },
{ "marketing.limited", true },
+ { "marketing91.com", true },
{ "marketingco.nl", true },
{ "marketingconverts.com", true },
{ "marketinggenerators.nl", true },
@@ -21122,6 +21274,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "marketnsight.com", true },
{ "markhaehnel.de", true },
{ "markhenrick.site", true },
+ { "markholden.guru", true },
{ "markido.com", true },
{ "markitzeroday.com", true },
{ "markkirkforillinois.com", true },
@@ -21138,6 +21291,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "marksmit.co", true },
{ "marksouthall.com", true },
{ "markspres.org", true },
+ { "markstickley.co.uk", true },
{ "markt-heiligenstadt.de", false },
{ "marktcontact.com", true },
{ "marktissink.nl", true },
@@ -21148,23 +21302,20 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "markus.design", true },
{ "markusehrlicher.de", true },
{ "markusgran.de", true },
- { "markuskeppeler.no-ip.biz", true },
- { "markusueberallassetmanagement.de", true },
- { "markusueberallconsulting.de", true },
{ "marl.fr", true },
{ "marloncommunications.com", true },
{ "marlonlosurdopictures.com", true },
{ "marlonschultz.de", true },
{ "marlosoft.net", true },
+ { "marmista.roma.it", true },
{ "marmolesromero.com", true },
{ "marmolrain.cl", true },
{ "marmotte.love", true },
+ { "maroc-bivouac.com", true },
{ "marocemploi.co", true },
{ "marocmail.ma", true },
{ "marotero.com", true },
{ "marpa-wohnen.de", true },
- { "marqperso.ch", true },
- { "marquepersonnelle.ch", true },
{ "marqueswines.co.uk", true },
{ "marrai.de", true },
{ "marriage-shrine.jp", true },
@@ -21196,18 +21347,30 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "martingansler.de", true },
{ "martinkus.eu", true },
{ "martinmuc.de", true },
+ { "martinreed.net", true },
+ { "martinvillalba.com", true },
+ { "martinvillalba.com.ar", true },
+ { "martinvillalba.info", true },
+ { "martinvillalba.net", true },
+ { "martinvillalba.org", true },
{ "martonmihaly.hu", true },
+ { "martynhare.co.uk", true },
+ { "martynhare.uk", true },
{ "maru-life.com", true },
{ "maruhoi.com", true },
{ "marustat.ru", true },
{ "marvelmoviemarathon.com", true },
{ "marxmyths.org", true },
+ { "marycliffpress.com", true },
{ "maryeclark.com", true },
{ "maryeileen90.party", true },
{ "maryjruggles.com", true },
{ "marykatrinaphotography.com", true },
{ "masa-hou.com", true },
{ "masarik.sh", true },
+ { "masatotaniguchi.jp", true },
+ { "masayahost.com", true },
+ { "masaze-hanka.cz", true },
{ "mascosolutions.com", true },
{ "masdillah.com", true },
{ "maservant.net", true },
@@ -21220,6 +21383,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "maslife365.com", true },
{ "maslin.io", true },
{ "masrur.org", true },
+ { "massaboutique.com", true },
+ { "massage-vitalite.fr", true },
{ "massage4u.net", true },
{ "massagecupping.com", true },
{ "massagetainha-hanoi.com", true },
@@ -21250,10 +21415,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "masterstuff.de", true },
{ "mastiffingles.com.br", true },
{ "mastodon.at", true },
- { "mastodon.blue", false },
{ "mastodon.host", true },
{ "mastodon.rocks", true },
{ "mastodon.top", true },
+ { "mat.tt", true },
{ "matanz.de", true },
{ "matatabimix.com", true },
{ "match.audio", true },
@@ -21272,7 +21437,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mathalexservice.info", true },
{ "mathematik.rocks", true },
{ "mathembedded.com", true },
- { "matheo-schefczyk.de", true },
{ "mathhire.org", true },
{ "mathias.is", true },
{ "mathiasbynens.be", true },
@@ -21287,14 +21451,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mathsweek.org.nz", true },
{ "mathsweek.school.nz", true },
{ "mathys.io", true },
- { "matildajaneclothing.com", true },
{ "matjaz.it", true },
{ "matlss.com", true },
{ "matmessages.com", true },
{ "matomeathena.com", true },
{ "matoutepetiteboutique.com", true },
- { "matratzentester.com", true },
{ "matridiana.com", true },
+ { "matrimoni.uk", true },
{ "matriterie-sdv.ro", true },
{ "matrixim.cc", true },
{ "matrixmedia.ro", true },
@@ -21310,6 +21473,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mattbsg.xyz", true },
{ "mattcarr.net", false },
{ "mattcoles.io", true },
+ { "mattconstruction.com", true },
{ "mattcorp.com", true },
{ "matteomarescotti.it", true },
{ "mattferderer.com", true },
@@ -21374,10 +21538,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "maxfox.me", true },
{ "maxhamon.ovh", true },
{ "maxhoechtl.at", true },
- { "maxicore.co.za", true },
{ "maximdeboiserie.be", true },
+ { "maximdens.be", true },
{ "maximeferon.fr", true },
- { "maximelouet.me", true },
{ "maximilian-graf.de", true },
{ "maximilian-greger.com", true },
{ "maximiliankaul.de", true },
@@ -21399,6 +21562,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "maxwellmoore.co.uk", true },
{ "may24.tw", true },
{ "maya-ro.com", true },
+ { "mayaimplant.com", true },
{ "mayavi.co.in", true },
{ "maydex.info", true },
{ "mayerbrownllz.com", true },
@@ -21412,7 +21576,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "maze.design", true },
{ "maze.fr", true },
{ "mazternet.ru", true },
- { "mazurlabs.tk", true },
+ { "mazzotta.me", true },
{ "mb-is.info", true },
{ "mbaasy.com", true },
{ "mbaestlein.de", true },
@@ -21420,6 +21584,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mbardot.com", true },
{ "mbasic.facebook.com", false },
{ "mbcars.be", true },
+ { "mbda.gov", false },
{ "mbeo.ch", true },
{ "mbilker.us", true },
{ "mbinf.de", false },
@@ -21436,6 +21601,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mc-venture.net", false },
{ "mc4free.cc", true },
{ "mcatnnlo.org", true },
+ { "mccoolesredlioninn.com", true },
{ "mccrackon.com", true },
{ "mcdermottautomotive.com", true },
{ "mcdona1d.me", true },
@@ -21448,10 +21614,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mceconferencecentre.eu", true },
{ "mcfedries.com", true },
{ "mcfx.us", true },
+ { "mcgaccountancy.co.uk", true },
{ "mcgarderen.nl", true },
{ "mcgovernance.com", true },
{ "mchan.us", true },
- { "mchopkins.net", true },
{ "mchristopher.com", true },
{ "mcinterface.de", true },
{ "mcivor.me", true },
@@ -21459,6 +21625,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mckernan.in", true },
{ "mckinley.school", true },
{ "mcl.de", false },
+ { "mcl.gg", true },
{ "mclinflatables.co.uk", true },
{ "mclmotors.co.uk", true },
{ "mclyr.com", true },
@@ -21467,12 +21634,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mcnext.net", true },
{ "mcpaoffice.com", true },
{ "mcpart.land", true },
+ { "mcplayman.de", true },
{ "mcpro.games", true },
{ "mcprocdn.com", true },
{ "mcqyy.com", true },
{ "mcrn.jp", true },
{ "mcsinflatables.co.uk", true },
+ { "mcsniper.co", true },
{ "mcsrvstat.us", true },
+ { "mctherealm.net", true },
{ "mctools.org", true },
{ "mcynews.com", true },
{ "mcyukon.com", true },
@@ -21503,7 +21673,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "me-groups.com", true },
{ "me.net.nz", true },
{ "meadowfen.farm", true },
- { "meadowviewfarms.org", true },
{ "mealgoo.com", true },
{ "meamod.com", false },
{ "meanevo.com", true },
@@ -21515,29 +21684,33 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mechanus.io", true },
{ "mechmk1.me", true },
{ "med-otzyv.ru", true },
+ { "med360.at", true },
{ "medba.se", true },
{ "medcir.com.br", true },
{ "medcrowd.com", true },
+ { "meddatix.com", true },
{ "meddelare.com", true },
- { "meddigital.com", true },
+ { "meddigital.com", false },
{ "mede-handover.azurewebsites.net", true },
{ "medeinos.lt", true },
{ "medexpress.co.uk", true },
{ "medhy.fr", true },
{ "medi-link.co.il", true },
{ "medi.com.br", true },
+ { "media-courses.com", false },
{ "media-credit.eu", true },
{ "media-instance.ru", true },
{ "media-library.co.uk", true },
{ "media-pi.com", true },
+ { "media-serwis.com", true },
{ "mediaarea.net", true },
{ "mediablaster.com", true },
{ "mediaburst.co.uk", true },
{ "mediadex.be", true },
- { "mediaexpert.fr", true },
{ "mediafly.com", true },
{ "mediafocus.biz", true },
{ "mediagenic.ch", true },
+ { "mediagold.it", true },
{ "mediagrand.net", true },
{ "mediajurnal.com", true },
{ "medialab.nrw", true },
@@ -21551,6 +21724,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mediawiki.org", true },
{ "mediawin.pl", true },
{ "medic-world.com", true },
+ { "medicalabroad.org", true },
{ "medicalcountermeasures.gov", true },
{ "medicare-providers.net", true },
{ "medicarecoveragefinder.com", true },
@@ -21569,14 +21743,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "medinsider.li", true },
{ "medireport.fr", true },
{ "medium.com", true },
- { "mediumraw.org", true },
{ "medlineplus.gov", true },
- { "medmarkt24.com", true },
{ "medo64.com", true },
{ "medovea.ru", true },
{ "medpeer.jp", true },
{ "medpics.com", true },
- { "medpot.net", true },
{ "medschat.com", true },
{ "medtalents.ch", true },
{ "medtankers.management", true },
@@ -21586,6 +21757,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "medvet.com.es", true },
{ "medwaybouncycastlehire.co.uk", true },
{ "medyotan.ga", true },
+ { "meeco.kr", true },
{ "meedoenhartvanwestbrabant.nl", true },
{ "meedoennoordkop.nl", false },
{ "meehle.com", true },
@@ -21616,7 +21788,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "megaflowers.ru", true },
{ "megagifs.de", true },
{ "megainflatables.co.uk", true },
- { "megamarkey.de", true },
{ "megamisja.pl", true },
{ "meganandmarc.us", true },
{ "meganreel.com", true },
@@ -21626,13 +21797,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "megaplonk.com", true },
{ "megarex.jp", true },
{ "megasslstore.com", true },
+ { "megasystem.cl", true },
{ "megaxchange.com", true },
- { "mego.cloud", true },
{ "megumico.net", true },
{ "megustariasaber.com", true },
{ "megztosidejos.lt", true },
{ "meh.is", true },
{ "mehalick.com", true },
+ { "mehhh.xyz", true },
{ "mehmetakif.edu.tr", true },
{ "mehmetince.net", true },
{ "mehostdd.com", false },
@@ -21660,7 +21832,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "meinv.asia", true },
{ "meiqia.cn", true },
{ "meiqia.com", true },
- { "meisterritter.de", true },
+ { "meitan.gz.cn", true },
{ "mekatrotekno.com", true },
{ "mekesh.com", true },
{ "mekesh.net", true },
@@ -21677,9 +21849,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "melerpaine.com", true },
{ "melhoresdominios.com", true },
{ "melhoresmarcasdenotebook.com.br", true },
- { "melikoff.es", true },
{ "melillaorienta.es", true },
- { "melina-schefczyk.de", true },
{ "melissaadkins.com", true },
{ "melissaauclaire.com", true },
{ "melissameuwszen.nl", true },
@@ -21694,6 +21864,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "melopie.com", true },
{ "melted.me", true },
{ "meltzow.net", true },
+ { "members-arbourlake.com", true },
{ "members-only-shopping.com", true },
{ "members.nearlyfreespeech.net", false },
{ "membershipservices.org.uk", true },
@@ -21709,6 +21880,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "memiux.com", true },
{ "memo-linux.com", true },
{ "memo.ee", true },
+ { "memoire-resistance-ariege.fr", true },
{ "memorycards.ie", true },
{ "memoryex.net", true },
{ "memrise.com", true },
@@ -21717,13 +21889,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mendipbouncycastles.co.uk", true },
{ "mendozagenevieve.com", true },
{ "mendy.jp", true },
+ { "menhera.org", true },
{ "menielias.com", true },
{ "menkyo-blog.com", true },
{ "mennace.com", true },
+ { "menntagatt.is", true },
{ "menole.com", true },
{ "menole.de", true },
{ "menole.net", true },
- { "menotag.com", true },
{ "mensagemaniversario.com.br", true },
{ "mensagemdaluz.com", true },
{ "mensagensaniversario.com.br", true },
@@ -21733,14 +21906,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mentalhealth.gov", true },
{ "mentalhealthmn.org", true },
{ "mentaltraining-fuer-musiker.ch", true },
+ { "mentesemprendedoras.net", true },
{ "mentiq.az", true },
{ "mentorithm.com", true },
{ "mentz.info", true },
{ "menu.fyi", true },
{ "menudieta.com", true },
+ { "menuel.me", true },
{ "menuonlineordering.com", true },
{ "menzel-motors.com", true },
{ "menzietti.it", true },
+ { "meo.de", true },
{ "mephedrone.org", true },
{ "mer.gd", true },
{ "meransuedtirol.com", true },
@@ -21749,6 +21925,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mercadobitcoin.net", true },
{ "mercadoleal.com.br", true },
{ "mercadopago.com", true },
+ { "mercari.com", true },
{ "mercedes-benz.io", true },
{ "mercedes-ig.de", true },
{ "mercedespartscenter.com", true },
@@ -21775,6 +21952,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mes-bouquins.fr", true },
{ "mes-finances.be", true },
{ "mes10doigts.ovh", true },
+ { "mesappros.com", true },
{ "mescaline.com", true },
{ "mescaline.org", true },
{ "mesh.gov", true },
@@ -21783,6 +21961,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "messagevortex.com", true },
{ "messagevortex.net", true },
{ "messdorferfeld.de", true },
+ { "messenger.co.tz", true },
{ "messenger.com", true },
{ "messengerwebbrands.com", true },
{ "messer24.ch", true },
@@ -21797,6 +21976,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "metacoda.com", true },
{ "metacode.biz", true },
{ "metadatawiki.com", true },
+ { "metaether.net", true },
{ "metafurquest.net", true },
{ "metalu.ch", true },
{ "metanic.org", true },
@@ -21820,7 +22000,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "meteobox.pl", true },
{ "meteobox.sk", true },
{ "meteorapp.space", true },
- { "meteosherbrooke.com", true },
{ "meteosmit.it", true },
{ "meterhost.com", true },
{ "methamphetamine.co.uk", true },
@@ -21836,11 +22015,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "metropop.ch", true },
{ "metsasta.com", true },
{ "mettekopp.dk", true },
- { "meu-smartphone.com", true },
{ "meu-solutions.com", true },
{ "meujeitodigital.com.br", true },
- { "meupedido.online", true },
- { "meusigno.com", true },
{ "mevo.xyz", true },
{ "mevs.cz", true },
{ "mexican.dating", true },
@@ -21850,14 +22026,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mf-fischer.de", true },
{ "mfacko.cz", true },
{ "mfen.de", true },
- { "mfgod.com", true },
{ "mfgusa.com", true },
{ "mfits.co.uk", true },
{ "mflodin.se", true },
{ "mfxbe.de", true },
{ "mgi.gov", true },
{ "mgknet.com", true },
- { "mgoessel.de", true },
{ "mgrossklaus.de", true },
{ "mgrt.net", true },
{ "mgsisk.com", true },
@@ -21884,10 +22058,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "micalodeal.ch", true },
{ "micasamgmt.com", false },
{ "micbase.com", true },
- { "michael-schefczyk.de", true },
{ "michael-steinhauer.eu", true },
+ { "michael.band", true },
{ "michaelasawyer.com", true },
+ { "michaelband.co", true },
+ { "michaelband.com", true },
{ "michaeleichorn.com", true },
+ { "michaelhrehor.com", true },
{ "michaeliscorp.com", true },
{ "michaelizquierdo.com", true },
{ "michaeljdennis.com", true },
@@ -21919,7 +22096,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "michiganunionoptout.com", true },
{ "michmexguides.com.mx", true },
{ "michu.pl", true },
- { "mico.world", true },
+ { "mickelvaessen.com", true },
{ "micomi.co", true },
{ "miconcinemas.com", true },
{ "micr.io", true },
@@ -21949,7 +22126,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "midwestbloggers.org", true },
{ "midweststructuralrepair.com", true },
{ "miegl.com", true },
- { "miegl.cz", true },
+ { "miemus.eu", true },
{ "mietwohnungen-vermietung.com", true },
{ "mieuxgrandir.ch", true },
{ "mieuxvivreadarvoy.fr", true },
@@ -21969,7 +22146,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mijcorijneveld.nl", true },
{ "mijn-financien.be", true },
{ "mijnavg.eu", true },
- { "mijndiad.nl", true },
{ "mijnetickets.nl", false },
{ "mijnetz.nl", true },
{ "mijnkerstkaarten.be", true },
@@ -21977,9 +22153,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mijnsite.ovh", true },
{ "mijnstembureau.nl", true },
{ "mijntransacties.nl", true },
- { "mika.cat", true },
{ "mika.moe", true },
{ "mikadoe.nl", true },
+ { "mikakalathil.ca", true },
{ "mikakalevi.com", true },
{ "mikalikes.men", true },
{ "mike-bland.com", true },
@@ -21988,19 +22164,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mikeblog.site", true },
{ "mikebutcher.ca", true },
{ "mikecb.org", true },
- { "mikegarnett.co.uk", true },
{ "mikegerwitz.com", true },
{ "mikeguy.co.uk", true },
{ "mikehamburg.com", true },
{ "mikehilldesign.co.uk", true },
- { "mikerichards.photography", false },
+ { "mikerichards.photography", true },
{ "miketabor.com", true },
{ "miketheuer.com", true },
{ "mikevesch.com", true },
{ "mikewest.org", true },
{ "mikewillia.ms", true },
{ "mikewritesstuff.com", true },
- { "mikhirev.ru", true },
+ { "mikeybailey.org", true },
{ "mikhlevich.ru", true },
{ "miki-boras.de", true },
{ "miki.it", true },
@@ -22035,8 +22210,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "milldyke.nl", true },
{ "millefleurs.eu", true },
{ "millennium-thisiswhoweare.net", true },
+ { "millenniumweb.com", false },
{ "millhousenchurch.com", true },
- { "millibitcoin.jp", true },
{ "millionairegames.com", true },
{ "millistream.com", true },
{ "mim.properties", true },
@@ -22055,6 +22230,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mind-box.ch", true },
{ "mind-hochschul-netzwerk.de", true },
{ "mind-moves.es", true },
+ { "mindbodycontinuum.com", true },
{ "mindbodytherapymn.com", true },
{ "mindcell.no", true },
{ "mindcoding.ro", true },
@@ -22067,13 +22243,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mindturbo.com", true },
{ "mindwork.space", true },
{ "mine-craftlife.com", true },
+ { "mine260309.me", true },
{ "minebier.dk", true },
{ "minecraft-forum.eu", true },
{ "minecraft-server.eu", true },
{ "minecraftforum.de", true },
{ "minecraftforum.ovh", true },
{ "minecraftjson.com", true },
- { "minecrell.net", true },
{ "minehattan.de", true },
{ "minehub.de", true },
{ "minei.me", true },
@@ -22087,6 +22263,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "minez-nightswatch.com", false },
{ "minf3-games.de", true },
{ "mingky.net", true },
+ { "mingkyaa.com", true },
{ "mingming.info", true },
{ "mingram.net", true },
{ "mingwah.ch", true },
@@ -22103,7 +22280,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "minimayhemsoftplay.co.uk", true },
{ "minimbah.com.au", true },
{ "minimvc.com", true },
- { "miniskipper.at", false },
{ "ministeriumfuerinternet.de", true },
{ "minitruckin.net", true },
{ "minitrucktalk.com", true },
@@ -22165,6 +22341,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "missjoias.com.br", true },
{ "misskey.xyz", false },
{ "missoy.me", true },
+ { "misssex.de", true },
{ "missualready.com", true },
{ "missyou.link", true },
{ "mistacms.com", true },
@@ -22173,14 +22350,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mistybox.com", true },
{ "misupport.dk", true },
{ "misura.re", true },
- { "misuzu.moe", true },
{ "mit-uns.org", true },
{ "mita.me", true },
{ "mitabu.net", true },
{ "mitaines.ch", true },
{ "mitarbeitermotivation-anleitungen.de", true },
{ "mitchellhandymanservices.co.uk", true },
- { "mitchelmore.ca", true },
{ "miticobikes.com", true },
{ "mitigationcommission.gov", true },
{ "mitnetz-gas.de", true },
@@ -22199,8 +22374,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mitzpettel.com", true },
{ "miui-germany.de", true },
{ "mivestuariolaboral.com", true },
+ { "mivzak.im", true },
+ { "mivzakim.biz", true },
+ { "mivzakim.info", true },
+ { "mivzakim.mobi", true },
{ "mivzakim.net", true },
+ { "mivzakim.org", true },
+ { "mivzakim.tv", true },
{ "miweb.cr", false },
+ { "mixinglight.com", true },
{ "mixnshake.com", true },
{ "mixposure.com", true },
{ "mixtafrica.com", true },
@@ -22230,8 +22412,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mkcert.org", true },
{ "mkchandler.com", true },
{ "mkd.mk", true },
+ { "mkes.com", true },
{ "mkg-chirurgie-bruchsal.de", true },
- { "mkg-palais-hanau.de", true },
{ "mkg-scherer.de", true },
{ "mkg-wiebelskirchen.de", true },
{ "mkhsoft.eu", true },
@@ -22246,8 +22428,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mkse.com", true },
{ "mkset.ru", true },
{ "mktdigital.info", true },
+ { "mktemp.org", true },
{ "mkuznets.com", true },
- { "mkw.st", true },
{ "mlarte.com", true },
{ "mlcambiental.com.br", true },
{ "mlcnfriends.com", true },
@@ -22259,10 +22441,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mlsrv.de", true },
{ "mlundberg.se", true },
{ "mlvbphotography.com", true },
+ { "mlytics.com", true },
{ "mm13.at", true },
{ "mm404.com", true },
{ "mma-acareporting.com", true },
{ "mmalisz.com", true },
+ { "mmaps.ddns.net", true },
{ "mmarnitz.de", true },
{ "mmbb.org", true },
{ "mmcc.pe", true },
@@ -22275,7 +22459,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mmucha.de", true },
{ "mncloud.de", true },
{ "mncr.nl", true },
- { "mnd.sc", true },
{ "mne.moe", true },
{ "mnedc.org", true },
{ "mnemonic.ninja", true },
@@ -22288,7 +22471,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mnt9.de", true },
{ "mo-journal.com", true },
{ "mo.nl", true },
+ { "mo2021.de", true },
+ { "mo3.club", true },
{ "moa.moe", true },
+ { "moas.design", true },
+ { "mobag.ru", true },
{ "mobal.com", true },
{ "mobidea.com", true },
{ "mobifinans.ru", true },
@@ -22313,8 +22500,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mobilisation-generale.org", true },
{ "mobility-events.ch", true },
{ "mobilux.lv", true },
- { "mobimalin.com", true },
{ "mobio.net", true },
+ { "mobiproj.com", true },
{ "mobisaar-cloud.de", true },
{ "mobius.network", true },
{ "mobobe.com", true },
@@ -22322,8 +22509,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mobycoders.com", true },
{ "moc.ac", true },
{ "mocarps.hk", true },
+ { "mochanstore.com", true },
{ "mockerel.com", true },
- { "mocloud.win", true },
{ "mococo.co.uk", true },
{ "mocurio.com", false },
{ "modaexecutiva.com.br", true },
@@ -22339,7 +22526,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "modding-welt.com", true },
{ "mode-hautnah.de", true },
{ "mode-individuell.de", true },
- { "modecaso.com", true },
{ "modehaus-marionk.de", true },
{ "modelcase.co.jp", false },
{ "modelclub-draveil.eu", true },
@@ -22353,10 +22539,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "moderatoren.org", true },
{ "moderatorenpool.org", true },
{ "modernapprenticeships.org", true },
+ { "moderncoinmart.com", true },
+ { "moderntld.net", true },
{ "modifiedmind.com", true },
{ "modistry.com", true },
{ "modistryusercontent.com", true },
{ "modmountain.com", true },
+ { "modosaude.com.br", true },
{ "module.market", true },
{ "moechel.com", true },
{ "moefactory.com", true },
@@ -22374,6 +22563,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "moipourtoit.org", true },
{ "moisesbarrio.es", true },
{ "mojaknjiznica.com", false },
+ { "mojarada.nl", true },
{ "mojavenissanofbarstowparts.com", true },
{ "mojeco2.cz", true },
{ "mojefedora.cz", true },
@@ -22391,6 +22581,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "molb.org", true },
{ "molecularbiosystems.org", true },
{ "molinero.xyz", true },
+ { "mollaretsmeningitis.org", true },
+ { "molokai.org", true },
{ "molti.hu", true },
{ "molun.net", false },
{ "molunerfinn.com", true },
@@ -22398,11 +22590,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "momento.co.id", true },
{ "momentumdash.com", true },
{ "momirfarooq.com", true },
+ { "momjoyas.com", true },
{ "momozeit.de", true },
{ "momstableonline.com", true },
{ "momut.org", true },
{ "momy-genealogie.info", true },
- { "mon-mobile.com", true },
{ "mon-partage.fr", true },
{ "mon-trafic.com", true },
{ "mon22.ch", true },
@@ -22412,8 +22604,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "monaco-automaten.de", true },
{ "monad.io", true },
{ "monakasatmasr.com", true },
- { "monalisa.wtf", true },
{ "monalyse.com", true },
+ { "monarchcleanersnc.com", true },
{ "monbudget.org", true },
{ "moncoach.ch", true },
{ "mondedesnovels.com", true },
@@ -22421,6 +22613,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mondial-movers.nl", true },
{ "mondo-it.ch", true },
{ "moneni.com", true },
+ { "moneybird.com", true },
{ "moneychangersoftware.com", true },
{ "moneycredit.eu", true },
{ "moneygo.se", true },
@@ -22442,28 +22635,24 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "monkeyhill.us", true },
{ "monkeytek.ca", true },
{ "monkieteel.com", true },
- { "monkieteel.nl", true },
+ { "monlabs.com", true },
{ "monloyer.quebec", true },
{ "monnyonle.hu", true },
+ { "mono.cafe", true },
{ "mono0x.net", true },
{ "monobank.no", true },
- { "monodukuri.cafe", true },
{ "monodukuri.com", true },
- { "monodzukuri.cafe", true },
{ "monokoo.com", true },
{ "monolithapps.com", true },
{ "monolithindustries.com", true },
{ "monolithinteractive.com", true },
- { "monoseis-monotica.gr", true },
{ "monothesis.com", true },
{ "monoworks.co.jp", true },
- { "monozukuri.cafe", true },
{ "monpc-pro.fr", true },
{ "monpermismoto.com", true },
{ "monpermisvoiture.com", true },
{ "monpetitforfait.com", true },
{ "monpetitmobile.com", true },
- { "monsieurbureau.com", true },
{ "monsieursavon.ch", true },
{ "monstermashentertainments.co.uk", true },
{ "montage-kaika.de", true },
@@ -22482,16 +22671,20 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "montredeal.fr", true },
{ "montsaintaignan.fr", true },
{ "montychristie.com", true },
+ { "monzo.com", true },
+ { "monzo.me", true },
{ "moo.la", true },
{ "moobo.co.jp", true },
{ "moodfoods.com", true },
{ "moodforsex.com", true },
+ { "moodzshop.com", true },
{ "moojp.co.jp", true },
{ "moolah.rocks", true },
{ "moon.fish", true },
{ "moonagic.com", true },
{ "moonbot.io", true },
{ "moondrop.org", true },
+ { "moonkin.eu", true },
{ "moonlightcapital.ml", true },
{ "moonmelo.com", true },
{ "moonraptor.co.uk", true },
@@ -22510,14 +22703,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "moorparklighting.com", true },
{ "moorparkoutdoorlighting.com", true },
{ "mooselook.de", true },
+ { "moosmann-moehrle.de", true },
{ "moot-info.co.za", true },
- { "moovablestorage.com", true },
{ "moparcraft.net", true },
{ "moparisthebest.com", true },
{ "moparisthebest.net", true },
{ "moparisthebest.org", true },
{ "moparscape.net", true },
- { "mopedreifen.de", true },
+ { "mopedreifen.de", false },
{ "mople71.cz", true },
{ "moppeleinhorn.de", true },
{ "moppy.org", true },
@@ -22542,6 +22735,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "morethandigital.info", true },
{ "morganino.it", true },
{ "morgansleisure.co.uk", true },
+ { "morgner.com", true },
{ "moritz-baestlein.de", true },
{ "moritztremmel.de", true },
{ "moriz.de", true },
@@ -22557,6 +22751,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mortis.eu", true },
{ "mosaic-design.ru", true },
{ "mosaicadvisors.com", true },
+ { "moscatalogue.net", true },
{ "moscow.dating", true },
{ "mosfet.cz", true },
{ "moshwire.com", true },
@@ -22580,24 +22775,25 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "moteksystems.com", true },
{ "motezazer.fr", true },
{ "mothereff.in", false },
+ { "motifstudio.com.ua", true },
{ "motionless.nl", true },
{ "motiweb.fr", true },
{ "motohell.com", true },
{ "motojato.com.br", true },
{ "motonauticaibiza.com", true },
{ "motoreflex.com", true },
+ { "motornomaslo.bg", true },
{ "motorpointarenacardiff.co.uk", true },
{ "motorring.ru", true },
{ "motorsplus.com", false },
+ { "motorsportdiesel.com", false },
{ "motoryachtclub-radolfzell.de", true },
{ "motosikletevi.com", true },
{ "motostorie.blog", false },
{ "motovated.co.nz", true },
- { "motovio.de", true },
{ "motowilliams.com", true },
{ "motstats.co.uk", true },
{ "mottomortgage.com", true },
- { "moube.fr", true },
{ "moucloud.cn", true },
{ "moulinaparoles.ca", true },
{ "mountain-rock.ru", true },
@@ -22610,18 +22806,20 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "moveisfit.com.br", true },
{ "moveltix.net", true },
{ "movember.com", false },
+ { "movewellnesslab.com", true },
{ "movie-cross.net", true },
{ "movie-infos.net", true },
{ "movie1000.com", true },
+ { "movie4kto.site", true },
{ "movie4kto.stream", true },
{ "movieboost.nl", true },
{ "moviedeposit.com", true },
{ "moviefreeze.com", true },
{ "movieguys.org", true },
- { "movienang.com", true },
{ "movienized.de", true },
{ "moviepilot.com", true },
{ "moviesetc.net", true },
+ { "moviko.nz", true },
{ "movil.uno", true },
{ "movimento-terra.it", true },
{ "movinglogistics.nl", false },
@@ -22631,10 +22829,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "moyer.pub", true },
{ "moylen.eu", true },
{ "moyoo.net", true },
+ { "moysovet.info", true },
{ "mozartgroup.hu", true },
{ "mozektevidi.net", true },
{ "mozilla.cz", true },
{ "mozzez.de", true },
+ { "mp3gratuiti.com", true },
{ "mpa-pro.fr", true },
{ "mpac.ca", false },
{ "mpc-hc.org", true },
@@ -22643,13 +22843,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mpetroff.net", true },
{ "mpg-universal.com", true },
{ "mpg.ovh", true },
+ { "mpgaming.pro", true },
{ "mpintaamalabanna.it", true },
{ "mpkrachtig.nl", true },
{ "mplanetphl.fr", true },
{ "mplant.io", true },
{ "mplicka.cz", true },
{ "mplusm.eu", true },
- { "mpn.poker", true },
{ "mpnpokertour.com", true },
{ "mpodraza.pl", true },
{ "mpreserver.com", true },
@@ -22659,10 +22859,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mpy.ovh", true },
{ "mqas.net", true },
{ "mr-anderson.org", true },
- { "mr-coffee.net", true },
+ { "mr-designer-oman.com", true },
{ "mr-labo.jp", true },
- { "mr-nachhilfe.de", true },
- { "mr-wolf.nl", true },
+ { "mr-wolf.nl", false },
{ "mr3.io", true },
{ "mrazek.biz", true },
{ "mrbmafrica.com", true },
@@ -22674,19 +22873,22 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mrcoolevents.com", true },
{ "mrd.ninja", true },
{ "mrdayman.com", true },
+ { "mremallin.ca", true },
{ "mrevolution.eu", true },
{ "mrinalpurohit.in", true },
{ "mrkapowski.com", true },
{ "mrketolocksmith.com", true },
{ "mrknee.gr", true },
- { "mrksk.com", true },
+ { "mrkrabat.de", true },
{ "mrmoregame.de", true },
{ "mrnh.de", true },
- { "mrpropop.com", true },
+ { "mrning.com", true },
{ "mrs-labo.jp", true },
+ { "mrsbairds.com", false },
{ "mrserge.lv", true },
{ "mrsk.me", true },
{ "mrstat.co.uk", true },
+ { "mrv.li", true },
{ "mrx.one", true },
{ "mrxn.net", true },
{ "ms-alternativ.de", true },
@@ -22706,15 +22908,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "msmails.de", true },
{ "msnr.net", true },
{ "msopopop.cn", true },
- { "msp66.de", false },
{ "mspsocial.net", true },
{ "msquadrat.de", true },
+ { "msroot.de", true },
{ "mssys.de", true },
{ "mstdn.blue", true },
{ "mstdn.club", true },
{ "mstdn.fr", true },
{ "mstdn.onl", false },
- { "mstiles92.com", true },
{ "msuna.net", true },
{ "msv-limpezas.pt", true },
{ "msx.org", true },
@@ -22726,7 +22927,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mtasa.hu", true },
{ "mtb.wtf", true },
{ "mtcq.jp", true },
- { "mtg-tutor.de", true },
{ "mtgeni.us", true },
{ "mtgenius.com", true },
{ "mtgsuomi.fi", true },
@@ -22749,17 +22949,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "muabannhanh.com", false },
{ "muahahahaha.co.uk", true },
{ "mubiflex.nl", true },
+ { "muchohentai.com", true },
{ "muckingabout.eu", true },
{ "muckrack.com", true },
{ "mucmail.de", true },
{ "muctool.de", true },
{ "mud-status.de", true },
{ "mudcrab.us", false },
+ { "mudgezero.one", true },
+ { "muehlemann.net", true },
{ "muel.io", true },
+ { "muell-weg.de", true },
{ "muellapp.com", true },
- { "muenchberger.com", true },
{ "muenzubi.de", true },
- { "muffet.pw", true },
{ "mufibot.net", true },
{ "muguayuan.com", true },
{ "muh.io", true },
@@ -22767,6 +22969,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mulaccosmetics.com", true },
{ "mulaisehat.com", true },
{ "mulej.net", true },
+ { "mulheres18.com", true },
{ "muling.lu", true },
{ "mullens-usedcars.be", true },
{ "multi-vpn.biz", true },
@@ -22777,6 +22980,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "multigeist.de", true },
{ "multikalender.de", false },
{ "multimail.work", true },
+ { "multimatte.com", true },
{ "multimed.krakow.pl", true },
{ "multimedia-pool.com", true },
{ "multiplayernow.com", true },
@@ -22787,6 +22991,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "multisite.ovh", true },
{ "multitec.nl", true },
{ "multitek.no", true },
+ { "multitenantlaravel.com", true },
{ "multitheftauto.com", true },
{ "multiworldsoftware.com", true },
{ "multizone.games", true },
@@ -22804,22 +23009,24 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mundolarraz.es", true },
{ "mundschenk.at", true },
{ "mundtec.com.br", true },
+ { "munduch.cz", true },
+ { "munduch.eu", true },
{ "munirajiwa.com", true },
{ "munki.org", true },
{ "munkibuilds.org", true },
+ { "munwr.com", true },
{ "muqu.co", true },
{ "mur-vegetal-interieur.fr", true },
{ "murakami-sah.com", true },
{ "murashun.jp", true },
{ "muratore-roma.it", true },
- { "murdercube.com", true },
- { "murfy.kiwi", true },
{ "murfy.nz", true },
{ "murgi.de", true },
{ "murmel.it", false },
{ "murof.com.br", true },
{ "murzik.space", true },
{ "muscle-tg.com", true },
+ { "muscleangels.com", true },
{ "musclecarresearch.com", true },
{ "muscolinomusic.com", true },
{ "musearchengine.com", true },
@@ -22827,10 +23034,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "muses-success.info", true },
{ "musettishop.com", true },
{ "mush-room.co.jp", true },
+ { "mushfiqweb.com", true },
{ "mushikabu.net", true },
{ "music-is-my-life.de", true },
{ "music-project.eu", true },
{ "music.amazon.com", true },
+ { "musicaconleali.it", true },
{ "musicalive.nl", true },
{ "musicall.com", true },
{ "musicalschwarzenburg.ch", true },
@@ -22856,6 +23065,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mustafa.space", true },
{ "mustafaturhan.com", true },
{ "mustard.co.uk", true },
+ { "mustardking.me", true },
{ "mustasj.no", true },
{ "mustat.com", true },
{ "muster-folien.de", true },
@@ -22868,6 +23078,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "muthai.in.th", true },
{ "mutuals.cool", true },
{ "mutuelle.fr", true },
+ { "muusika.fun", true },
{ "muusikoiden.net", true },
{ "muwatenraqamy.org", true },
{ "muzeumkomiksu.eu", true },
@@ -22939,8 +23150,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mybicc.org", true },
{ "myblockchain.cloud", true },
{ "mybloggedlife.com", true },
+ { "mybodylife.com", true },
{ "mybon.at", false },
- { "mycamda.com", true },
+ { "mybonfire.com", true },
{ "mycard.moe", true },
{ "mycareersfuture.sg", true },
{ "mycieokien.info", false },
@@ -22954,6 +23166,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "myconsulting.ch", true },
{ "mycr.eu", true },
{ "mycreativeartsconsulting.com", true },
+ { "mycreativenook.com", true },
{ "mycreditcardcenter.com", true },
{ "mycrypnet.io", true },
{ "mycrypto.com", true },
@@ -22978,7 +23191,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mydroneservices.com", true },
{ "myeberspaecher.com", true },
{ "myeffect.today", true },
- { "myepass.de", true },
+ { "myeisenbahn.de", true },
+ { "myeml.net", true },
{ "myessaygeek.com", true },
{ "myetherwallet.com", true },
{ "myf.cloud", true },
@@ -23012,6 +23226,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "myimds.com", true },
{ "myimmitracker.com", true },
{ "myipaddr.de", true },
+ { "myipv4.de", true },
{ "myjudo.net", true },
{ "myjumparoo.co.uk", true },
{ "myjumpsuit.de", true },
@@ -23020,7 +23235,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mylatestnews.org", true },
{ "mylawyer.be", true },
{ "myleanfactory.de", true },
- { "mylene-chandelier.me", true },
{ "mylifeabundant.com", true },
{ "myliveupdates.com", true },
{ "mylookout.com", false },
@@ -23075,7 +23289,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "myproblog.com", true },
{ "myproxy.eu.org", true },
{ "mypup.nl", true },
- { "myqdu.com", true },
{ "myrandomtips.com", true },
{ "myranicol.com", true },
{ "myraytech.net", false },
@@ -23101,18 +23314,35 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "myrepublic.eu.com", true },
{ "myrepublic.ga", true },
{ "myrepublic.gq", true },
+ { "myrepublic.icu", true },
{ "myrepublic.id", true },
{ "myrepublic.in", true },
{ "myrepublic.limited", true },
+ { "myrepublic.lk", true },
{ "myrepublic.ml", true },
+ { "myrepublic.mobi", true },
+ { "myrepublic.my", true },
+ { "myrepublic.net", true },
{ "myrepublic.nz", true },
+ { "myrepublic.ph", true },
+ { "myrepublic.rocks", true },
+ { "myrepublic.tk", true },
+ { "myrepublic.tv", true },
+ { "myrepublic.tw", true },
{ "myrepublic.us.com", true },
+ { "myrepublic.xyz", true },
{ "myrepublicau.com", true },
{ "myrepublicaus.com", true },
{ "myrepublicbroadband.com.au", true },
{ "myrepublicfibre.com.au", true },
+ { "myrepublicgroup.com", true },
{ "myrepublicinternet.com.au", true },
+ { "myrepublicltd.com", true },
+ { "myrepublicmy.com", true },
{ "myrepublicnz.com", true },
+ { "myrepublicsg.com", true },
+ { "myrepublictelecom.com", true },
+ { "myrepubllc.net", true },
{ "myresearchapp.com", true },
{ "myrewardspoints.com", true },
{ "myriadof.com", true },
@@ -23121,13 +23351,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "myrig.ru", true },
{ "myrotvorets.center", true },
{ "myrp.co", true },
- { "myruststats.com", true },
{ "mysber.ru", true },
{ "myschoolphoto.org", true },
{ "myseatime.com", true },
{ "mysecretcase.com", false },
{ "mysectools.org", true },
{ "myself5.de", true },
+ { "myseo.ga", true },
{ "myseu.cn", true },
{ "mysexydate24.com", true },
{ "myshirtsize.com", true },
@@ -23143,14 +23373,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "myspicer.com", true },
{ "mysqldump-secure.org", true },
{ "myssl.com", true },
+ { "mystatus24.com", false },
{ "mysteriouscode.io", true },
{ "mysterymind.ch", true },
+ { "mysterysear.ch", true },
{ "mystic-welten.de", true },
{ "mystickphysick.com", true },
{ "mysticplumes.com", true },
{ "mystorymonster.com", true },
- { "mystown.org", true },
- { "mystudy.me", true },
{ "mystudycart.com", true },
{ "mysupboard.de", true },
{ "myswissmailaddress.com", true },
@@ -23182,6 +23412,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "myvitalhealthsolutions.com.au", true },
{ "myvoipnews.com", true },
{ "myvpl.com", true },
+ { "mywallets.io", true },
{ "mywari.com", true },
{ "mywebinar.io", true },
{ "mywebpanel.eu", true },
@@ -23193,7 +23424,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "myzina.cz", false },
{ "mz-mz.net", true },
{ "mzh.io", true },
- { "mzorn.photography", true },
+ { "mziulu.me", false },
+ { "mznet.de", true },
+ { "mzzj.de", true },
{ "n-a.date", true },
{ "n-design.de", true },
{ "n-kanazawa.jp", true },
@@ -23207,7 +23440,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "n0psled.nl", true },
{ "n26.com", true },
{ "n2servers.com", true },
+ { "n3twork.net", true },
{ "n4v.eu", true },
+ { "n5118.com", true },
{ "n6a.net", true },
{ "n7.education", true },
{ "na-school.nl", true },
@@ -23228,7 +23463,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nadyaolcer.fr", true },
{ "nafod.net", true },
{ "naga-semi.com", true },
- { "nagaragem.com.br", true },
{ "nagashi.ma", false },
{ "nagaya.biz", true },
{ "nagb.gov", true },
@@ -23268,29 +23502,32 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nameid.org", true },
{ "namepros.com", true },
{ "namereel.com", true },
+ { "namethatporn.com", true },
{ "nametiles.co", true },
{ "nami.bo", true },
{ "nami.exchange", true },
{ "nami.trade", true },
{ "naminam.de", true },
{ "namrs.net", true },
+ { "namskra.is", true },
{ "namu.live", true },
{ "namu.moe", true },
{ "namu.wiki", true },
{ "namuwikiusercontent.com", true },
- { "nanami.moe", true },
{ "nanarose.ch", true },
{ "nanch.com", true },
{ "nandex.org", true },
- { "nanfangstone.com", true },
+ { "nange.co", true },
{ "nankiseamansclub.com", true },
{ "nanofy.org", true },
{ "nanogi.ga", true },
{ "nanosingularity.com", true },
{ "nanotechnologist.com", true },
+ { "nanotechtorsion.com", true },
{ "nanovolt.nl", true },
{ "nanowallet.io", true },
{ "nanpuyue.com", true },
+ { "nansa.ch", true },
{ "nanubo.com", true },
{ "nanubo.de", true },
{ "naomi.es", false },
@@ -23298,11 +23535,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "naotone.com", true },
{ "napcae.de", true },
{ "naphogar.com", true },
+ { "napisdata.us", true },
{ "napolinissanctparts.com", true },
{ "narada.com.ua", true },
{ "narakenkoland.net", true },
{ "naralogics.com", true },
+ { "narardetval.se", true },
{ "narazaka.net", true },
+ { "narduin.xyz", true },
{ "narenderchopra.com", true },
{ "narfation.org", true },
{ "nargele.eu", true },
@@ -23321,6 +23561,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nasbnation.com", false },
{ "nascio.org", true },
{ "naseco.se", true },
+ { "nashira.cz", true },
{ "nashvillelidsurgery.com", true },
{ "nashzhou.me", true },
{ "nasme.tk", true },
@@ -23333,7 +23574,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "natation-nsh.com", false },
{ "natatorium.org", true },
{ "natchmatch.com", true },
- { "nate.sh", true },
+ { "natecraun.net", true },
{ "nathaliebaron.ch", true },
{ "nathaliebaroncoaching.ch", true },
{ "nathaliedijkxhoorn.com", true },
@@ -23352,20 +23593,22 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nationalmap.gov", true },
{ "nationalpriorities.org", true },
{ "nationaltaxprep.com", true },
+ { "nationaltrails.ru", true },
{ "nationwiderealtyinvestors.com", true },
{ "natives-team.ch", true },
{ "nativs.ch", true },
{ "natlec.com", true },
{ "natropie.pl", true },
{ "natsumihoshino.com", true },
- { "naturalcommission.com", true },
{ "naturalkitchen.co.uk", true },
{ "naturalspacesdomes.com", true },
{ "naturaum.de", true },
{ "nature-et-bio.fr", true },
+ { "nature-shots.net", true },
{ "natureflo.net", true },
{ "naturesbest.co.uk", true },
{ "naturesorganichaven.com", true },
+ { "natureword.com", true },
{ "naturheilpraxis-oida.de", true },
{ "naturheilpraxis-p-grote.de", true },
{ "naturline.com", true },
@@ -23376,7 +23619,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nausicaahotel.it", true },
{ "nautiljon.com", true },
{ "nautsch.de", true },
- { "navenlle.com", false },
+ { "navenlle.com", true },
{ "navienna.com", true },
{ "navient.com", true },
{ "navigate-it-services.de", false },
@@ -23387,6 +23630,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nayahe.ru", true },
{ "nayanaas.com", true },
{ "nazevfirmy.cz", true },
+ { "nazigol.com", true },
{ "nazuna.blue", true },
{ "nb.zone", true },
{ "nb6.de", true },
@@ -23464,7 +23708,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ncc-efm.org", true },
{ "ncc-qualityandsafety.org", true },
{ "nccemail.net", true },
- { "ncea.net.au", true },
+ { "ncdc.pt", true },
{ "nchangfong.com", true },
{ "nchponline.org", true },
{ "ncic.gg", true },
@@ -23479,7 +23723,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ndeoffshore.com", true },
{ "nder.be", true },
{ "ndhlink.com", true },
- { "ndmath.club", true },
{ "ndpbrn-research.org", true },
{ "nds-helicopter.de", true },
{ "ndy.sex", true },
@@ -23487,7 +23730,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nea.gov", true },
{ "nearbi.com.mx", true },
{ "nearby.in.th", true },
- { "nearon.nl", true },
{ "neartothesky.com", true },
{ "neatous.cz", true },
{ "neatous.net", true },
@@ -23495,6 +23737,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "neba.io", true },
{ "nebelhauch.de", true },
{ "nebelheim.de", true },
+ { "nebenbeiblog.ch", true },
{ "nebra.io", true },
{ "nebul.at", true },
{ "nebulae.co", true },
@@ -23505,11 +23748,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nectarleaf.com", true },
{ "nedcdata.org", true },
{ "nedim-accueil.fr", true },
- { "nediyor.com", true },
{ "nedlinin.com", true },
{ "nedraconsult.ru", true },
{ "nedys.top", true },
- { "neecist.org", true },
+ { "needemand.com", true },
{ "needle.net.nz", true },
{ "needle.nz", true },
{ "needstyle.ru", true },
@@ -23519,10 +23761,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "neet-investor.biz", true },
{ "nefertitis.cz", true },
{ "neflabs.com", true },
- { "neftebitum-kngk.ru", true },
{ "neftis.es", true },
{ "neg9.org", false },
{ "negai.moe", true },
+ { "negativecurvature.net", true },
{ "neglecteddiseases.gov", true },
{ "nehoupat.cz", true },
{ "nehrp.gov", true },
@@ -23559,13 +23801,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nemez.net", true },
{ "nemo.run", true },
{ "nemopan.com", true },
+ { "nemplex.win", true },
{ "nems.no", true },
{ "nemumu.com", true },
- { "nemunai.re", true },
{ "neo2shyalien.eu", false },
{ "neobits.nl", true },
{ "neocities.org", true },
{ "neoclick.io", true },
+ { "neocoding.com", true },
{ "neodrive.ch", true },
{ "neoedresources.org", true },
{ "neoeliteconsulting.com", true },
@@ -23593,7 +23836,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nepremicnine.click", true },
{ "nepremicnine.net", true },
{ "nepustil.net", false },
- { "nercp.org.uk", true },
{ "nerdhouse.io", true },
{ "nerdmind.de", true },
{ "nerdoutstudios.tv", true },
@@ -23602,19 +23844,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nerdtime.de", true },
{ "nerdwallet.com", true },
{ "nerdydev.net", true },
- { "neriumhcp.com", true },
{ "nerot.eu", true },
- { "nerull7.info", true },
{ "nerven.se", false },
{ "nesbase.com", true },
{ "nesolabs.com", true },
{ "nesolabs.de", true },
- { "nestedquotes.ca", true },
{ "nesterov.pw", true },
{ "nestor.nu", true },
{ "neswec.org.uk", true },
{ "net-masters.pl", true },
{ "net-safe.info", true },
+ { "net-share.de", true },
{ "net4visions.at", true },
{ "net4visions.de", true },
{ "netamia.com", true },
@@ -23637,6 +23877,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "netfabb.com", true },
{ "netflixlife.com", true },
{ "netfog.de", true },
+ { "netfuture.ch", true },
{ "netfxharmonics.com", true },
{ "netguide.co.nz", true },
{ "nethackwiki.com", true },
@@ -23645,6 +23886,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nethunter.top", true },
{ "netki.com", true },
{ "netlentes.com.br", true },
+ { "netlocal.ru", true },
{ "netmagicas.com.br", true },
{ "netmeister.org", true },
{ "netnik.de", true },
@@ -23653,8 +23895,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "netrelay.email", true },
{ "netrewrite.com", true },
{ "netrider.net.au", false },
+ { "netrogue.ninja", true },
{ "netronix.be", true },
- { "netronome.com", true },
{ "netsigna.de", true },
{ "netsite.dk", true },
{ "netsoins.org", true },
@@ -23662,6 +23904,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "netsparker.com.tr", true },
{ "netspeedia.net", true },
{ "netsphere.cz", true },
+ { "nettacompany.com.tr", true },
{ "nettamente.com", true },
{ "nette.org", true },
{ "nettegeschenke.de", true },
@@ -23682,12 +23925,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "network23.nl", true },
{ "networkersdiary.com", true },
{ "networking4all.com", true },
- { "networking4all.net", true },
{ "networkingnexus.net", true },
{ "networkingphoenix.com", true },
{ "networkposting.com", true },
{ "networth.at", true },
- { "networx-online.de", true },
+ { "netzfabrik.com", true },
{ "netzfrauen.org", true },
{ "netzwerkwerk.de", true },
{ "neuflizeobc.net", true },
@@ -23700,11 +23942,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "neuroethics.com", true },
{ "neurogroove.info", true },
{ "neurolab.no", true },
+ { "neuronasdigitales.com", true },
{ "neuropharmacology.com", true },
{ "neurozentrum-zentralschweiz.ch", true },
{ "neutralox.com", false },
{ "neuwal.com", true },
- { "never.pet", false },
+ { "neva.li", true },
+ { "never.pet", true },
+ { "nevergreen.io", true },
{ "nevermore.fi", true },
{ "neverwetturkey.com", true },
{ "nevntech.com", true },
@@ -23719,7 +23964,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "new-process.eu", true },
{ "new.travel.pl", true },
{ "newaccess.ch", true },
- { "newbieboss.com", false },
+ { "newbietech.cn", false },
{ "newborncryptocoin.com", false },
{ "newburybouncycastles.co.uk", true },
{ "newburyparkelectric.com", true },
@@ -23728,10 +23973,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "newburyparkexteriorlighting.com", true },
{ "newburyparklandscapelighting.com", true },
{ "newburyparkoutdoorlighting.com", true },
- { "newchance.store", true },
{ "newcitygas.ca", true },
{ "newcityinfo.ch", true },
{ "newcitystudio.ch", true },
+ { "newcloudwhodis.com", true },
{ "newcreamforface.com", true },
{ "newday.host", true },
{ "newdeveloper.download", true },
@@ -23750,20 +23995,22 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "newmovements.net", true },
{ "newodesign.com", true },
{ "newpathintegratedtherapy.com", true },
- { "newpoke.net", true },
{ "newreleases.io", true },
{ "news47ell.com", true },
{ "newsa2.com", true },
+ { "newsaboutgames.de", true },
{ "newserumforskin.com", true },
{ "newsmotor.info", true },
{ "newspsychology.com", true },
{ "newstone-tech.com", true },
+ { "newsyslog.org", true },
{ "newtonproject.org", true },
{ "newtrackon.com", true },
{ "newvehicle.com", true },
{ "nex.sx", true },
{ "nexgeneration-solutions.com", true },
{ "nexicafiles.com", true },
+ { "nexril.net", true },
{ "next-web.ad.jp", true },
{ "next24.io", true },
{ "nextads.ch", true },
@@ -23777,18 +24024,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nextevolution.co.uk", true },
{ "nextgen.sk", true },
{ "nextgencel.com", true },
- { "nexthop.co.jp", true },
+ { "nextgreatmess.com", true },
{ "nexthop.jp", true },
{ "nextmbta.com", true },
{ "nextme.se", true },
{ "nextnely.com", true },
{ "nextnowagency.com", true },
{ "nextrobotics.de", true },
- { "nextshutter.com", true },
{ "nextstep-labs.gr", true },
{ "nexttv.co.il", true },
{ "nexus-exit.de", true },
- { "nexus-vienna.at", true },
{ "nexusconnectinternational.eu", true },
{ "nexwebsites.com", true },
{ "nexxus-sistemas.net.br", true },
@@ -23798,20 +24043,21 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nf4.net", true },
{ "nf9q.com", true },
{ "nfe-elektro.de", true },
- { "nfhome.be", true },
{ "nfir.nl", true },
{ "nfl.dedyn.io", true },
{ "nfl.duckdns.org", true },
{ "nflmocks.com", true },
{ "nfls.io", true },
+ { "nfluence.org", true },
{ "nframe.io", true },
{ "nfrost.me", true },
{ "nfsec.pl", true },
{ "nfz.moe", true },
{ "ng-musique.com", true },
{ "ngasembaru.com", true },
- { "ngc.gov", true },
+ { "ngc.gov", false },
{ "nghe.net", true },
+ { "nginxconfig.com", true },
{ "nginxconfig.io", true },
{ "ngndn.jp", true },
{ "ngvf.de", true },
@@ -23819,8 +24065,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ngxpkg.com", true },
{ "nhccnews.org", true },
{ "nhchalton.com", true },
+ { "nhgteam.hu", true },
{ "nhimf.org", true },
- { "nhliberty.org", true },
{ "nhome.ba", true },
{ "nhsolutions.be", true },
{ "nhw.ovh", true },
@@ -23831,7 +24077,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "niagarafalls.ca", true },
{ "niagarafallsmuseums.ca", true },
{ "niagaraschoice.org", true },
- { "niallator.com", true },
{ "nibb13.tech", true },
{ "nibo.blog", true },
{ "nic.goog", true },
@@ -23839,6 +24084,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nic.how", true },
{ "nic.soy", true },
{ "nic.xn--q9jyb4c", true },
+ { "nice.ch", true },
{ "niceguyit.biz", true },
{ "nicesco.re", true },
{ "nicestudio.co.il", false },
@@ -23855,7 +24101,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nickdekruijk.nl", true },
{ "nickguyver.com", true },
{ "nickloose.de", true },
+ { "nicklord.com", true },
{ "nickmorri.com", true },
+ { "nickplotnek.co.uk", true },
{ "nickrickard.co.uk", true },
{ "nickscomputers.nl", true },
{ "nickserve.com", true },
@@ -23865,7 +24113,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nico.st", true },
{ "nicocourts.com", true },
{ "nicoknibbe.nl", true },
- { "nicolaeiotcu.ro", true },
{ "nicolajanedesigns.co.uk", true },
{ "nicolas-dumermuth.com", true },
{ "nicolas-hoffmann.net", true },
@@ -23876,6 +24123,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nicolaszambetti.ch", true },
{ "nicolaw.uk", true },
{ "nicoleoquendo.com", true },
+ { "niconico.ooo", true },
{ "niconode.com", false },
{ "nicoobook.com", true },
{ "nicsezcheckfbi.gov", true },
@@ -23892,7 +24140,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nien.cf", true },
{ "nien.co", true },
{ "nien.com", true },
- { "nien.com.tw", true },
{ "nien.eu.org", true },
{ "nien.gq", true },
{ "nien.org", true },
@@ -23906,7 +24153,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "niesstar.com", true },
{ "nietzsche.com", true },
{ "nieuwslagmaat.nl", true },
- { "nieuwsoverijssel.nl", true },
{ "niffler.software", true },
{ "niftiestsoftware.com", true },
{ "nigelwakefield.com", true },
@@ -23937,13 +24183,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nikimix.com", true },
{ "nikkasystems.com", true },
{ "nikkila.me", true },
- { "niklas.host", true },
+ { "nikklassen.ca", true },
{ "niklas.pw", true },
{ "niklasanderson.com", true },
{ "niklasbabel.com", true },
{ "nikolasgrottendieck.com", true },
{ "nikomo.fi", false },
{ "nikoninframe.co.uk", true },
+ { "nikonnps.co.uk", true },
{ "nikonpromotions.co.uk", true },
{ "nikonschool.co.uk", true },
{ "nikz.in", true },
@@ -23953,6 +24200,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nilrem.org", true },
{ "nimeshjm.com", true },
{ "nimidam.com", true },
+ { "nina-laaf.de", true },
{ "ninaforever.com", true },
{ "ninarinaldi.com.br", true },
{ "ninaundandre.de", true },
@@ -23965,10 +24213,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ninetaillabs.xyz", true },
{ "ninfora.com", true },
{ "ninja-galerie.de", true },
+ { "ninjaworld.co.uk", true },
{ "ninjio.com", true },
{ "ninov.de", true },
{ "nintendoforum.no", true },
+ { "ninth.cat", true },
{ "ninthfloor.org", true },
+ { "ninverse.com", true },
{ "nipax.cz", true },
{ "nipe-systems.de", true },
{ "nippon-oku.com", true },
@@ -23979,10 +24230,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nirjonmela.net", true },
{ "nirudo.me", true },
{ "nissanofbismarckparts.com", true },
- { "nitaonline.org", true },
{ "nitifilter.com", true },
{ "nitrix.me", true },
- { "nitrohorse.com", true },
+ { "nitrohorse.com", false },
{ "nitrokey.com", true },
{ "nitropanel.com", true },
{ "nitropur.com", true },
@@ -23998,6 +24248,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nja.id.au", true },
{ "njast.net", true },
{ "njguardtraining.com", true },
+ { "njilc.com", true },
{ "njpjanssen.nl", true },
{ "nkapliev.org", true },
{ "nkinka.de", true },
@@ -24016,9 +24267,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nmgb.ga", true },
{ "nmgb.ml", true },
{ "nmnd.de", true },
+ { "nmontag.com", true },
{ "nn.cz", true },
{ "nna774.net", true },
{ "nnqc.nl", true },
+ { "no-ip.cz", true },
{ "no-xice.com", true },
{ "no.search.yahoo.com", false },
{ "noagendahr.org", true },
@@ -24030,12 +24283,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nobly.de", true },
{ "noc.org", true },
{ "noc.wang", true },
- { "nocit.dk", true },
{ "nocks.com", true },
{ "nocmd.com", true },
{ "nocs.cn", true },
{ "nodalr.com", true },
- { "nodari.com.ar", true },
{ "nodariweb.com.ar", true },
{ "nodecompat.com", true },
{ "nodecraft.com", true },
@@ -24072,7 +24323,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "noisyfox.cn", true },
{ "nojestorget.se", true },
{ "nojok.es", true },
- { "nokia.la", true },
{ "nokono.com", true },
{ "nolaviz.org", true },
{ "noleggio-bagni-chimici.it", true },
@@ -24093,10 +24343,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "noodleyum.com", true },
{ "noodplan.co.za", true },
{ "noodweer.be", true },
+ { "noofficewalls.com", true },
{ "noon-entertainments.com", true },
{ "noop.ch", true },
{ "noordsee.de", true },
{ "noorsolidarity.com", true },
+ { "nootronerd.com", true },
{ "nootropic.com", true },
{ "nootropicpedia.com", true },
{ "noovell.com", true },
@@ -24152,14 +24404,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nosfermiers.com", true },
{ "noslite.nl", true },
{ "nospoint.cz", true },
- { "nossasenhoradaconceicao.com.br", true },
+ { "nosqlzoo.net", true },
+ { "nossasenhora.net", true },
{ "nossasenhoradodesterro.com.br", true },
{ "nostosh.eu.org", true },
{ "nostraforma.com", false },
{ "noswap.com", true },
- { "nosx.tk", true },
{ "nosyu.pe.kr", true },
- { "nota-web.com", true },
{ "nota.moe", true },
{ "notabug.org", true },
{ "notadd.com", true },
@@ -24171,7 +24422,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "notar-peikert.com", true },
{ "notare-marktplatz24.info", true },
{ "notarvysocina.cz", true },
- { "notboring.co.uk", true },
{ "notcompletelycorrect.com", true },
{ "notepad.nz", true },
{ "noteskeeper.ru", true },
@@ -24183,15 +24433,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "notnize.net", true },
{ "notnl.com", true },
{ "notofilia.com", true },
- { "notonprem.com", true },
{ "notora.tech", true },
{ "notoriousdev.com", true },
{ "notrecourrier.net", true },
+ { "notsafefor.work", true },
{ "nottori.com", true },
{ "nottres.com", true },
- { "notypiesni.sk", false },
{ "noudjalink.nl", true },
- { "nouma.fr", true },
+ { "noustique.com", true },
{ "nova-dess.ch", true },
{ "nova-wd.org.uk", true },
{ "nova.live", true },
@@ -24224,6 +24473,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nowitzki.me", true },
{ "nowlas.org", true },
{ "nowloading.co", true },
+ { "nowremindme.com", true },
{ "noxi.ga", true },
{ "noxlogic.nl", true },
{ "noyocenter.org", true },
@@ -24232,17 +24482,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "npath.de", true },
{ "npcrcss.org", true },
{ "npmcdn.com", true },
- { "npool.org", true },
{ "npw.net", true },
{ "nqesh.com", true },
{ "nqeshreviewer.com", true },
{ "nrc-gateway.gov", true },
{ "nrd.li", true },
+ { "nrdstd.io", true },
{ "nrev.ch", true },
{ "nrkn.fr", true },
{ "nrsweb.org", true },
- { "nrvn.cc", true },
- { "nrvnastudios.com", true },
+ { "nrvn.cc", false },
{ "ns-frontier.com", true },
{ "ns2servers.pw", true },
{ "nsa.lol", true },
@@ -24253,13 +24502,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nsboutique.com", true },
{ "nscnet.jp", true },
{ "nsfw-story.com", true },
+ { "nshipster.cn", true },
+ { "nshipster.com", true },
{ "nsm.ee", true },
{ "nsm.stat.no", true },
{ "nso.ie", true },
{ "nsp.ua", true },
{ "nst-maroc.com", true },
{ "nstd.net", true },
- { "nstremsdoerfer.ovh", true },
{ "nsworks.com", true },
{ "ntags.org", true },
{ "ntcoss.org.au", true },
@@ -24267,19 +24517,24 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nth.sh", true },
{ "nti.de", true },
{ "ntotten.com", true },
- { "ntppool.org", true },
+ { "ntppool.org", false },
+ { "ntwt.us", true },
{ "ntx360grad-fallakte.de", true },
{ "ntzwrk.org", true },
{ "nu-pogodi.net", true },
+ { "nu3.dk", true },
+ { "nu3.fi", true },
+ { "nu3.no", true },
+ { "nu3.se", true },
{ "nu3tion.com", true },
{ "nu3tion.cz", true },
{ "nuacht.ie", true },
{ "nuamooreaindonesia.com", true },
{ "nubella.com.au", true },
- { "nubeslayer.com", true },
{ "nubu.at", true },
{ "nuclearcat.com", true },
{ "nucleuscore.org", true },
+ { "nudestpics.com", true },
{ "nuel.cl", true },
{ "nuevaimagenpublicidad.es", true },
{ "nuffield.nl", true },
@@ -24288,6 +24543,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nullday.de", true },
{ "nullonerror.org", true },
{ "nullpointer.io", true },
+ { "nullroute.com", true },
{ "nulltime.net", false },
{ "numarasorgulama.tel", true },
{ "numatic.co.uk", true },
@@ -24299,6 +24555,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "numerik-games.ch", true },
{ "numero-aleatorio.com", true },
{ "numero1.ch", true },
+ { "numerologist.com", true },
{ "numerossanos.com.ar", true },
{ "numis.tech", true },
{ "numismed-seniorcare.de", true },
@@ -24323,10 +24580,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nutleyeducationalfoundation.org", true },
{ "nutleyef.org", true },
{ "nutonic-sports.com", true },
+ { "nutpanda.com", true },
{ "nutri-spec.me", true },
{ "nutricaovegana.com", true },
{ "nutriciametabolics-shop.de", true },
- { "nutrieduca.com", true },
{ "nutrifyyourself.com", true },
{ "nutripedia.gr", true },
{ "nutrishop.com", true },
@@ -24344,10 +24601,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nwgh.org", false },
{ "nwr-waffenbuch.de", true },
{ "nwra.com", true },
+ { "nwuss.okinawa", true },
{ "nwwc.dk", true },
{ "nwwnetwork.net", true },
{ "nxinfo.ch", true },
- { "nxt.sh", true },
{ "nya.as", true },
{ "nyan.it", true },
{ "nyan.stream", true },
@@ -24360,14 +24617,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nyiad.edu", true },
{ "nyip.co.uk", true },
{ "nyip.edu", true },
+ { "nylevemusic.com", true },
{ "nyloc.de", true },
+ { "nylonfeetporn.com", true },
{ "nymphetomania.net", true },
{ "nynex.net", true },
{ "nyoronfansubs.org", true },
{ "nyphox.ovh", true },
- { "nys-hk.com", false },
{ "nystudio107.com", true },
{ "nytrafficticket.com", true },
+ { "nyuusannkinn.com", true },
{ "nyxi.eu", true },
{ "nyyu.tk", true },
{ "nzb.cat", false },
@@ -24391,13 +24650,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "oakparklighting.com", true },
{ "oakparkoutdoorlighting.com", true },
{ "oakslighting.co.uk", true },
+ { "oanalista.com.br", true },
{ "oasisdabeleza.com.br", true },
{ "oatmealdome.me", true },
{ "oauth-dropins.appspot.com", false },
{ "obamalibrary.gov", true },
{ "oberhofdrinks.com", true },
{ "obermeiers.eu", true },
- { "oberoi.de", true },
{ "obfuscate.xyz", true },
{ "obg-global.com", true },
{ "obitech.de", true },
@@ -24420,6 +24679,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "occmon.net", true },
{ "occonnections.org", true },
{ "ocd2016.com", true },
+ { "ocdadmin.com", true },
{ "oceandns.eu", true },
{ "oceandns.net", true },
{ "oceandns.nl", true },
@@ -24440,8 +24700,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ocotg.com", true },
{ "ocrn.nl", true },
{ "ocsigroup.fr", true },
+ { "ocsr.nl", true },
{ "octal.es", true },
- { "octanio.com", true },
+ { "octarineparrot.com", true },
{ "octav.name", false },
{ "octohedralpvp.tk", true },
{ "octohost.net", true },
@@ -24453,6 +24714,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "octosys.ru", true },
{ "octothorpe.club", true },
{ "octothorpe.ninja", true },
+ { "oculus.com", true },
{ "oddmuse.org", true },
{ "oddnumber.ca", true },
{ "oddsandevens.ca", true },
@@ -24478,7 +24740,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "oemspace.nl", true },
{ "oemwolf.com", true },
{ "ofcampuslausanne.ch", true },
- { "ofcss.com", true },
{ "ofda.gov", true },
{ "offandonagain.org", true },
{ "offbyinfinity.com", true },
@@ -24506,15 +24767,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "oftn.org", true },
{ "oge.ch", true },
{ "ogis.gov", true },
- { "ogkw.de", true },
- { "oglen.ca", true },
{ "ogocare.com", true },
{ "oguya.ch", true },
{ "ogyaa.jp", true },
{ "oh14.de", true },
{ "ohadsoft.com", true },
{ "ohai.su", true },
- { "ohayosoro.me", true },
{ "ohchouette.com", true },
{ "ohd.dk", true },
{ "oheila.com", true },
@@ -24523,16 +24781,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ohiohealthfortune100.com", true },
{ "ohling.org", true },
{ "ohne-name.de", true },
- { "ohreally.de", true },
{ "ohsohairy.co.uk", true },
{ "ohyooo.com", true },
{ "oiaio.cn", true },
{ "oilpaintingsonly.com", true },
+ { "oirealtor.com", true },
{ "oisd.nl", true },
{ "oita-homes.com", true },
{ "ojaioliveoil.com", true },
{ "ojanaho.com", true },
- { "ojbk.eu", true },
{ "ojdip.net", true },
{ "ojomovies.com", true },
{ "ojp.gov", true },
@@ -24568,10 +24825,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "olcayanar.com", true },
{ "oldbrookinflatables.co.uk", true },
{ "oldbrookmarqueehire.co.uk", true },
+ { "oldchaphome.nl", true },
{ "oldenglishsheepdog.com.br", true },
{ "oldking.net", true },
{ "oldnews.news", true },
{ "oldoakflorist.com", true },
+ { "oldprop.com", true },
{ "oldtimerreifen-moeller.de", true },
{ "olegon.ru", true },
{ "olegs.be", true },
@@ -24584,11 +24843,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "olightstore.ro", true },
{ "oliode.tk", true },
{ "oliveoil.bot", true },
+ { "oliveoilschool.org", true },
{ "oliveoiltest.com", true },
{ "oliveoiltimes.com", true },
{ "oliveraiedelabastideblanche.fr", true },
{ "oliverclausen.com", true },
- { "oliverfaircliff.com", true },
{ "olivernaraki.com", true },
{ "oliverniebuhr.de", true },
{ "oliverspringer.eu", true },
@@ -24616,6 +24875,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "olympic-research.com", true },
{ "om1.com", true },
{ "omanko.porn", true },
+ { "omar.yt", true },
{ "omdesign.cz", true },
{ "omegahosting.net", true },
{ "omegathermoproducts.nl", true },
@@ -24630,15 +24890,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "omifind.com", true },
{ "omise.co", true },
{ "omitech.co.uk", true },
+ { "omlmetal.co.jp", true },
{ "omniasig.ro", true },
{ "omniasl.com", true },
{ "omniatv.com", true },
+ { "omnibot.tv", true },
{ "omnisafira.com", true },
{ "omniscimus.net", false },
{ "omnisiens.se", true },
{ "omnisky.dk", true },
{ "omnitrack.org", true },
{ "omniverse.ru", true },
+ { "omorashi.org", true },
+ { "omori.ch", true },
{ "omoteura.com", true },
{ "omranic.com", true },
{ "omronwellness.com", true },
@@ -24649,7 +24913,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "onahonavi.com", true },
{ "onarto.com", true },
{ "onazikgu.com", true },
- { "onbuzzer.com", true },
+ { "onbuzzer.com", false },
{ "onceuponarainbow.co.uk", true },
{ "oncf.asso.fr", true },
{ "oncodedesign.com", true },
@@ -24667,27 +24931,30 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "onebigcow.com", true },
{ "oneclic.ch", true },
{ "oneclickonejob.com", true },
- { "onedot.nl", true },
{ "onedottwelve.co.jp", true },
{ "onedottwelve.com", true },
{ "onedrive.com", true },
{ "onedrive.live.com", false },
{ "onee3.org", true },
{ "onefour.ga", false },
+ { "oneheartbali.church", true },
{ "oneidentity.me", true },
+ { "oneiroi.co.uk", true },
+ { "oneiros.cc", true },
{ "onemid.net", true },
{ "oneminute.io", false },
{ "onemoonmedia.de", true },
- { "onemusou.com", true },
{ "oneononeonone.de", true },
{ "oneononeonone.tv", true },
+ { "onepointsafeband.ca", true },
+ { "onepointsafeband.com", true },
{ "onepointzero.com", true },
+ { "oneprediction.com", true },
{ "onesports.cz", true },
{ "onestepfootcare.com", true },
{ "onestopcastles.co.uk", true },
{ "onetcenter.org", true },
{ "onetcodeconnector.org", true },
- { "onetech.it", true },
{ "onetime.info", true },
{ "onetonline.org", true },
{ "oneway.ga", true },
@@ -24698,6 +24965,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "onhistory.co.uk", true },
{ "onhub1.com", true },
{ "oni.nl", true },
+ { "onice.ch", true },
{ "onionplay.live", true },
{ "onionplay.org", true },
{ "onionscan.org", true },
@@ -24711,12 +24979,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "online-consulting-corp.fr", true },
{ "online-eikaiwa-guide.com", true },
{ "online-health-insurance.com", true },
+ { "online-horoskop.ch", true },
{ "online-lernprogramme.de", true },
{ "online-pr.at", true },
{ "online-results.dk", true },
{ "online-stopwatch.com", true },
{ "online.marketing", true },
{ "online.net.gr", true },
+ { "online.swedbank.se", true },
{ "online24.pt", true },
{ "onlinebizdirect.com", false },
{ "onlinecasino.vlaanderen", true },
@@ -24730,6 +25000,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "onlinelighting.com.au", true },
{ "onlinemarketingtraining.co.uk", true },
{ "onlinepokerspelen.be", true },
+ { "onlineporno.tv", true },
{ "onlinerollout.de", true },
{ "onlinestoreninjas.com", true },
{ "onlineth.com", false },
@@ -24741,6 +25012,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "onmaps.de", true },
{ "onmarketbookbuilds.com", true },
{ "onnee.ch", true },
+ { "onnext.cc", true },
{ "ono.es", true },
{ "onoranze-funebri.biz", true },
{ "onpay.io", true },
@@ -24752,7 +25024,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "onshuistrust.co.za", true },
{ "onspring.com", true },
{ "ontdekhetzelf.nu", true },
- { "onthe.network", true },
{ "onthebriteside.com", true },
{ "ontras.com", false },
{ "onurer.net", true },
@@ -24793,10 +25064,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "openacademies.com", true },
{ "openacte.ch", true },
{ "openas.org", true },
+ { "openbankproject.com", true },
{ "openbeecloud.com", true },
{ "openblox.org", true },
{ "openbsd.id", true },
- { "opencad.io", true },
{ "opencircuit.nl", true },
{ "openclima.com", true },
{ "opencluster.at", true },
@@ -24813,6 +25084,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "openitforum.pl", true },
{ "openkim.org", true },
{ "openkvk.nl", true },
+ { "openmirrors.cf", true },
{ "openmtbmap.org", true },
{ "opennippon.com", true },
{ "opennippon.ru", true },
@@ -24820,7 +25092,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "openquery.com.au", true },
{ "openrainbow.com", true },
{ "openrainbow.net", true },
- { "openrainbow.org", true },
+ { "openre.site", true },
{ "openrealestate.co", true },
{ "openresty.com", true },
{ "openreview.net", true },
@@ -24833,6 +25105,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "openstem.com.au", true },
{ "openstreetmap.is", true },
{ "openstreetmap.lu", true },
+ { "openstreetmap.org", true },
{ "opentrack.info", true },
{ "opentrash.org", true },
{ "opentuition.com", true },
@@ -24845,7 +25118,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "operationforever.com", true },
{ "opfin.com", true },
{ "opiates.ca", true },
- { "opic.gov", true },
{ "opin.me", true },
{ "opioids.co.uk", true },
{ "opioids.gov", true },
@@ -24858,6 +25130,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "oppaiti.me", true },
{ "oppejoud.ee", true },
{ "opportunis.me", true },
+ { "opposer.me", true },
{ "opq.pw", true },
{ "oprbox.com", true },
{ "oprechtgezegd.nl", true },
@@ -24871,7 +25144,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "optik-trosdorff.de", true },
{ "optimalsetup.com", true },
{ "optimisedlabs.com", true },
- { "optimist.bg", true },
{ "optimize-jpg.com", true },
{ "optimumwebdesigns.com", true },
{ "optimus.io", true },
@@ -24882,12 +25154,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "optometryscotland.org.uk", true },
{ "optoutday.de", true },
{ "opus-codium.fr", true },
+ { "oraculum.cz", true },
{ "orang-utans.com", true },
{ "orangecomputers.com", true },
{ "orangefab.asia", true },
{ "orangefinanse.com.pl", true },
{ "orangejetpack.com", true },
{ "orangenbaum.at", true },
+ { "orangenuts.in", true },
{ "oranges.tokyo", true },
{ "orangetravel.eu", true },
{ "orangutan-appeal.org.uk", true },
@@ -24903,7 +25177,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ordernow.at", true },
{ "orderswift.com", true },
{ "ordr.mobi", true },
- { "oreka.online", true },
{ "oreshinya.xyz", true },
{ "oreskylaw.com", true },
{ "oreto.de", true },
@@ -24921,11 +25194,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "orians.eu", true },
{ "oribia.net", true },
{ "orientalart.nl", true },
+ { "orientravelmacas.com", true },
{ "origami.to", true },
{ "origamika.com", true },
{ "originalniknihy.cz", true },
- { "originalsport.com.br", true },
- { "originpc.com", false },
+ { "origincoffee.com", true },
+ { "origincoffee.nz", true },
{ "orikadabra.nl", true },
{ "orikum.org", true },
{ "orimex-mebel.ru", true },
@@ -25004,7 +25278,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "otellio.com", true },
{ "otellio.de", true },
{ "otellio.it", true },
- { "other98.com", true },
{ "otherkinforum.com", true },
{ "oticasaopaulo.com.br", true },
{ "oticasvisao.net.br", true },
@@ -25021,7 +25294,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "otus-magnum.com", true },
{ "otvaracie-hodiny.sk", true },
{ "otya.me", true },
- { "ouaibe.qc.ca", true },
+ { "ouattara.ch", true },
{ "ouestsolutions.com", true },
{ "ouglor.com", true },
{ "ouimoove.com", true },
@@ -25075,6 +25348,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "overtrolls.de", true },
{ "overture.london", true },
{ "overwall.org", true },
+ { "overzicht.pro", true },
+ { "overzicht.ws", true },
{ "ovirt.org", true },
{ "ovix.co", true },
{ "ovnrain.com", true },
@@ -25082,7 +25357,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ovvy.net", false },
{ "owapi.net", true },
{ "owennelson.co.uk", true },
- { "owennelson.me", true },
{ "owid.cloud", true },
{ "owl-hakkei.com", true },
{ "owl-square.com", true },
@@ -25092,10 +25366,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "own3d.ch", true },
{ "ownc.at", true },
{ "ownmay.com", true },
- { "ownspec.com", true },
+ { "oxanababy.com", true },
{ "oxborrow.ca", true },
{ "oxelie.com", true },
- { "oxygaming.com", true },
+ { "oxo.cloud", true },
{ "oxygin.net", true },
{ "oxytocin.org", true },
{ "oyosoft.fr", true },
@@ -25108,7 +25382,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ozonytron.com", true },
{ "ozonytron.de", true },
{ "ozonytron.eu", true },
- { "ozoz.cc", true },
{ "ozvolvo.org", true },
{ "p-fent.ch", true },
{ "p-s-b.com", true },
@@ -25122,6 +25395,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pa.search.yahoo.com", false },
{ "paarberatung-hn.de", true },
{ "paardenhulp.nl", true },
+ { "paas-inf.net", true },
{ "paass.net", true },
{ "paazmaya.fi", true },
{ "pablo.im", true },
@@ -25142,14 +25416,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pabloarteaga.tech", true },
{ "pabloarteaga.uk", true },
{ "pabloarteaga.xyz", true },
- { "pablofain.com", true },
{ "pabuzo.vn", true },
{ "pacatlantic.com", true },
{ "pacco.com.br", true },
{ "pace.car", true },
{ "paceda.nl", true },
{ "pacelink.de", true },
- { "pachaiyappas.org", true },
{ "pacificpalisadeselectric.com", true },
{ "pacificpalisadeselectrical.com", true },
{ "pacificpalisadeselectrician.com", true },
@@ -25161,12 +25433,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "packagefactory.dk", true },
{ "packagingproject.management", true },
{ "packagist.org", false },
- { "packair.com", true },
{ "packaware.com", true },
{ "packer.io", true },
{ "packetdigital.com", true },
{ "packetlinux.com", true },
- { "pacnetwork.io", true },
{ "pactf.com", true },
{ "padam-group.com", true },
{ "padberx-marketing-consultants.de", true },
@@ -25192,15 +25462,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pagedesignpro.com", true },
{ "pagedesignshop.com", true },
{ "pagedesignweb.com", true },
+ { "pagefulloflies.io", true },
{ "pagewizz.com", true },
{ "pagiamtzis.com", true },
{ "pagina.com.mx", true },
- { "paginapolitica.ro", true },
{ "pagure.io", true },
- { "pagure.org", true },
{ "pahae.de", true },
{ "pahealthbilling.com", true },
- { "pahlawanpulsa.com", false },
{ "paichai.space", false },
{ "paincareehr.com", true },
{ "paindata.dk", true },
@@ -25216,7 +25484,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pajuvuo.fi", true },
{ "paketkreditsuzuki.com", true },
{ "paketo.cz", true },
- { "paketwatch.de", true },
+ { "paketwatch.de", false },
{ "pakho.xyz", true },
{ "pakistani.dating", true },
{ "pakitow.fr", true },
@@ -25224,14 +25492,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "paktolos.net", true },
{ "palabr.as", true },
{ "palapadev.com", true },
- { "palariviera.com", true },
{ "palatin.at", true },
{ "palava.tv", true },
{ "palavatv.com", true },
{ "palawan.jp", false },
{ "palazzo.link", true },
{ "palazzo.work", true },
- { "paleosquawk.com", true },
{ "paleotraining.com", true },
{ "palladium46.com", true },
{ "pallas.in", true },
@@ -25267,6 +25533,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "paneldewelopera.pl", true },
{ "paneu.de", true },
{ "panier-legumes.bio", true },
+ { "panj.ws", true },
{ "panlex.org", true },
{ "panmetro.com", true },
{ "panoma.de", true },
@@ -25292,12 +25559,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "papadopoulos.me", true },
{ "papakatsu-life.com", true },
{ "papapa-members.club", true },
+ { "papaya.me.uk", true },
{ "papayame.com", true },
{ "papayapythons.com", true },
{ "papelcraft.co.uk", true },
{ "paper-driver.biz", true },
{ "paper-republic.org", true },
- { "paperhaven.com.au", true },
{ "paperhoney.by", true },
{ "papertracker.net", true },
{ "paperturn.com", true },
@@ -25321,13 +25588,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "paradoxdesigns.org", true },
{ "paragonie.com", false },
{ "paragreen.net", true },
- { "parakranov.ru", true },
{ "paranoidmode.com", true },
{ "paranoidpenguin.net", true },
{ "paranoxer.hu", true },
{ "parasitologyclub.org", true },
{ "paratlan.hu", true },
{ "paratxt.org", true },
+ { "parav.xyz", true },
{ "parcelbroker.co.uk", true },
{ "parchcraftaustralia.com", true },
{ "parckwart.de", true },
@@ -25337,7 +25604,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "parentsintouch.co.uk", true },
{ "pariga.co.uk", true },
{ "paris-store.com", true },
- { "parisbloom.com", true },
{ "parisderriere.fr", true },
{ "parisescortgirls.com", true },
{ "parisfranceparking.com", true },
@@ -25349,7 +25615,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "parkinginparis.fr", true },
{ "parkingpoint.co.uk", true },
{ "parkrunstats.servehttp.com", true },
- { "parksland.net", true },
{ "parkviewmotorcompany.com", true },
{ "parkwayminyan.org", true },
{ "parlamento.gub.uy", true },
@@ -25403,10 +25668,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pasadenapooch.org", true },
{ "pasadenasandwich.co", true },
{ "pasadenasandwichcompany.com", true },
+ { "pasalt.com", true },
+ { "pasarella.eu", true },
{ "pascal-bourhis.com", true },
{ "pascal-bourhis.net", true },
{ "pascal-kannchen.de", true },
{ "pascal-wittmann.de", true },
+ { "pascaline-jouis.fr", true },
{ "pascalleguern.com", true },
{ "pascalmathis.com", true },
{ "pascalmathis.me", true },
@@ -25415,8 +25683,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pascualinmuebles.com", true },
{ "pasearch.nl", true },
{ "pashminacachemire.com", true },
- { "pasportaservo.org", true },
{ "pass.org.my", true },
+ { "passabook.com", true },
{ "passcod.name", true },
{ "passendonderwijs.nl", true },
{ "passfilesafe.com", true },
@@ -25447,10 +25715,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "passwordhashing.com", true },
{ "passwordkeeperbooks.com", true },
{ "passwords.google.com", false },
- { "passwordscon.com", true },
{ "passwordscon.org", true },
{ "passwordsecurity.info", true },
{ "passworks.io", true },
+ { "passy.pw", true },
{ "pasta-factory.co.il", true },
{ "pastaenprosecco.nl", true },
{ "paste.fedoraproject.org", true },
@@ -25462,15 +25730,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pasticcerialorenzetti.com", true },
{ "pastoral-verbund.de", true },
{ "pastorbelgagroenendael.com.br", true },
- { "pastorcanadense.com.br", true },
{ "pastordocaucaso.com.br", true },
{ "pastormaremanoabruzes.com.br", true },
{ "pastorsuico.com.br", true },
{ "pasztor.at", true },
- { "patadanabouca.pw", true },
{ "patatbesteld.nl", true },
{ "pataterosviajeros.com", true },
- { "patbatesremodeling.com", false },
{ "patdorf.com", true },
{ "patechmasters.com", true },
{ "patentados.com", true },
@@ -25530,7 +25795,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pauspam.net", true },
{ "pautadiaria.com", true },
{ "pavando.com", true },
+ { "pavelfojt.cz", true },
{ "pavelrebrov.com", true },
+ { "pavio.org", true },
{ "paw.cloud", true },
{ "paw.pt", true },
{ "pawel-international.com", true },
@@ -25538,9 +25805,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pawelurbanek.com", true },
{ "pawsomebox.co.uk", true },
{ "pawsr.us", true },
+ { "pawsru.org", true },
{ "paxerahealth.com", true },
{ "pay.gov", true },
{ "pay8522.com", true },
+ { "paybook.co.tz", true },
{ "payboy.biz", true },
{ "payboy.rocks", true },
{ "paybro.eu", true },
@@ -25570,17 +25839,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "payupay.ru", true },
{ "payzang.com", true },
{ "payzwin.com", true },
- { "pb.ax", true },
+ { "pb.ax", false },
{ "pback.se", true },
{ "pbosquet.com", true },
{ "pbourhis.me", true },
{ "pbr.so", true },
{ "pbraunschdash.com", true },
- { "pbreen.co.uk", true },
{ "pbrumby.com", true },
{ "pbz.im", true },
{ "pc-rescue.me", false },
- { "pc-tablet.com", true },
{ "pcbricole.fr", true },
{ "pccentral.nl", true },
{ "pcdocjim.com", true },
@@ -25598,6 +25865,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pclaeuft.de", true },
{ "pclob.gov", true },
{ "pcloud.com", true },
+ { "pcmedia.co.nz", true },
{ "pcmkrembangan.or.id", true },
{ "pcmr.info", true },
{ "pcnotdienst-oldenburg-rastede.de", true },
@@ -25605,10 +25873,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pcsetting.com", true },
{ "pctonic.net", true },
{ "pctrouble.net", true },
+ { "pdf-archive.com", true },
{ "pdfconvert.me", true },
{ "pdfmint.com", true },
+ { "pdfpassword.org", true },
+ { "pdfpasswort.de", true },
{ "pdfresizer.com", true },
- { "pdomo.me", true },
{ "pdox.net", true },
{ "pdragt.com", true },
{ "pdthings.net", true },
@@ -25623,6 +25893,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pear2pear.de", true },
{ "pearbloom.com", true },
{ "pearlcohen.com", true },
+ { "pearlsenroses.nl", true },
{ "pearlsonly.com", true },
{ "peaudorange.net", true },
{ "pebbles.net.in", true },
@@ -25674,12 +25945,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pegas-studio.net", true },
{ "pehapkari.cz", true },
{ "peifi.de", false },
- { "peinard.net", true },
{ "peippo.at", true },
{ "pekkapleppanen.fi", true },
{ "pekoe.se", true },
{ "pelanucto.cz", true },
{ "pelican.ie", true },
+ { "peliseries24.com", true },
{ "pelletizermill.com", true },
{ "pelletsprice.com", true },
{ "pelopogrund.com", true },
@@ -25691,7 +25962,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pendriveapps.com", true },
{ "penetrationstest.se", true },
{ "pengi.me", true },
- { "pengui.uk", true },
{ "penguindrum.moe", true },
{ "penguinprotocols.com", true },
{ "penispumpen.se", true },
@@ -25705,7 +25975,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pensioenfonds-ey.nl", true },
{ "pension-veldzigt.nl", true },
{ "pensionpilot.ca", true },
- { "pensiunealido.ro", true },
{ "penslabyrinth.com", true },
{ "pentandra.com", true },
{ "pentest.blog", true },
@@ -25713,6 +25982,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pentesterlab.com", true },
{ "penticton.photography", true },
{ "pentofun.ch", true },
+ { "pentoo.ch", true },
{ "penz.media", true },
{ "peoplelikemeapp.com", true },
{ "peoplesbankal.com", true },
@@ -25742,7 +26012,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "performaride.com.au", true },
{ "perfumeaz.com", true },
{ "perfumes.com.br", true },
- { "periodismoactual.com", true },
{ "periscope.tv", true },
{ "perishablepress.com", true },
{ "perm-avia.ru", true },
@@ -25764,6 +26033,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "perroquet-passion.ch", true },
{ "persephone.gr", true },
{ "personal-genome.com", true },
+ { "personaltrainer-senti.de", true },
{ "personcar.com.br", true },
{ "perspectivum.com", true },
{ "perspektivwechsel-coaching.de", true },
@@ -25778,12 +26048,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pescco.com.br", true },
{ "pestici.de", true },
{ "pestkill.info", true },
+ { "pesyun.cn", true },
{ "pet-hotel-mura.net", true },
- { "pet-life.top", true },
{ "petabits.de", true },
{ "petangen.se", true },
{ "petcarvers.com", true },
{ "petdesign.pet", true },
+ { "peteboc.com", true },
{ "petech.ro", true },
{ "petelew.is", true },
{ "peter.org.ua", true },
@@ -25840,6 +26111,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pfft.net", true },
{ "pfk.org.pl", true },
{ "pflan.dk", true },
+ { "pflanzen-shop.ch", true },
{ "pflanzenshop-emsland.de", true },
{ "pflegesalon-siebke.de", true },
{ "pfmeasure.com", true },
@@ -25861,10 +26133,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pharma-display.com", true },
{ "pharmaabsoluta.com.br", true },
{ "pharmaboard.de", true },
+ { "pharmaboard.org", true },
{ "pharmacieplusfm.ch", true },
{ "pharmafoto.ch", true },
{ "pharmaphoto.ch", true },
{ "pharmapolitics.com", true },
+ { "pharmasana.co.uk", true },
+ { "pharmasana.de", true },
{ "pharmica.co.uk", true },
{ "pharmica.uk", true },
{ "pharynks.com", true },
@@ -25898,6 +26173,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "philippinedroneassociation.org", true },
{ "philippkeschl.at", true },
{ "phillipgoldfarb.com", true },
+ { "phillipsuk.com", true },
+ { "phillyinjurylawyer.com", true },
{ "philna.sh", true },
{ "philosoftware.com.br", true },
{ "philosopherswool.com", true },
@@ -25912,9 +26189,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "phishing.rs", true },
{ "phishingusertraining.com", true },
{ "phligence.com", true },
+ { "phocean.net", true },
{ "phoenixlogan.com", true },
{ "phone-service-center.de", true },
{ "phormance.com", true },
+ { "phosagro.biz", false },
+ { "phosagro.com", false },
{ "phosagro.ru", false },
{ "phosphene.io", true },
{ "photek.fm", true },
@@ -25959,9 +26239,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "phus.lu", true },
{ "physicalism.com", true },
{ "physicalist.com", true },
+ { "physicpezeshki.com", true },
{ "physiotherapie-seiwald.de", true },
{ "physiovesenaz.ch", true },
- { "pi-box.ml", true },
{ "pi-control.de", true },
{ "pi-dash.com", true },
{ "pi-net.dedyn.io", true },
@@ -25970,7 +26250,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pianetaottica.it", true },
{ "pianetatatuaggi.it", true },
{ "pianyigou.com", true },
- { "piasto.com.cy", true },
{ "piatabrasil.com.br", true },
{ "piatanoua.md", true },
{ "piboubes.me", true },
@@ -25984,6 +26263,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pickelhaubes.com", true },
{ "pickersurvey.org", true },
{ "pickme.nl", false },
+ { "pickmysoap.gr", true },
{ "pickormix.co.uk", true },
{ "picksin.club", true },
{ "piclect.com", true },
@@ -25991,13 +26271,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "piconepress.com", true },
{ "picotech.com", true },
{ "picotronic.de", true },
- { "picshare.nz", true },
{ "picster.at", true },
{ "picsto.re", true },
{ "pictorial.com.sg", true },
{ "pictorista.com", true },
{ "pictr.nl", true },
{ "picture.team", true },
+ { "pictureguy.de", true },
{ "picturingjordan.com", true },
{ "pidginhost.com", true },
{ "pidjipi.com", true },
@@ -26032,6 +26312,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pikeitservices.com.au", true },
{ "pikimusic.moe", true },
{ "pilani.ch", true },
+ { "pilarguineagil.com", true },
{ "pildat.org", true },
{ "pileofgarbage.net", true },
{ "piliszek.net", true },
@@ -26064,9 +26345,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pinkbike.com", true },
{ "pinkbikecycle.com", true },
{ "pinkcasino.co.uk", true },
+ { "pinkerton.io", true },
{ "pinkladyapples.co.uk", true },
{ "pinklecfest.org", true },
{ "pinklittlenotebook.com", true },
+ { "pinkwalk.co.nz", true },
{ "pinkyf.com", true },
{ "pinnaclelife.co.nz", true },
{ "pinnaclelife.nz", true },
@@ -26074,6 +26357,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pinner.io", true },
{ "pinoydailytvshow.net", true },
{ "pinoylinux.org", true },
+ { "pinoytech.ph", true },
{ "pinpayments.com", true },
{ "pinpointengineer.co.uk", true },
{ "pinscher.com.br", true },
@@ -26089,6 +26373,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pintoselectrician.co.za", true },
{ "pioneer-car.eu", true },
{ "pioneer-rus.ru", true },
+ { "pipocao.com", true },
{ "piranil.com", true },
{ "pirate.trade", true },
{ "piratebayproxy.tf", true },
@@ -26106,6 +26391,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pirateproxy.sh", true },
{ "pirateproxy.tf", true },
{ "pirateproxy.tv", true },
+ { "pirates-comic.com", true },
{ "piratesforums.co", true },
{ "pircher.co.uk", true },
{ "pires.ovh", true },
@@ -26119,13 +26405,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pissflaps.co.uk", true },
{ "pisupp.ly", true },
{ "pitchpinecapital.com", true },
+ { "pitchupp.com", true },
{ "pitfire.io", true },
{ "pitot-rs.org", true },
- { "pitsstop.nu", true },
{ "pittmantraffic.co.uk", true },
{ "pivotaltracker.com", true },
{ "pivotanimation.org", true },
- { "pix-geeks.com", true },
{ "pix5.de", true },
{ "pixabay.com", true },
{ "pixel.facebook.com", false },
@@ -26150,6 +26435,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pizzabottle.com", false },
{ "pizzacook.ch", true },
{ "pizzafest.ddns.net", true },
+ { "pizzafunny.com.br", true },
{ "pizzagigant.hu", true },
{ "pizzahut.ru", true },
{ "pizzalongaway.it", true },
@@ -26166,7 +26452,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pj00900.com", true },
{ "pj539999.com", true },
{ "pjentertainments.co.uk", true },
- { "pjili.com", true },
{ "pjleisure.co.uk", true },
{ "pjo.no", true },
{ "pjuu.com", false },
@@ -26174,6 +26459,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pkbjateng.com", true },
{ "pkbjateng.or.id", true },
{ "pkgt.de", false },
+ { "pkirwan.com", true },
{ "pko.ch", true },
{ "pkov.cz", true },
{ "pkphotobooths.co.uk", true },
@@ -26184,7 +26470,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "placassinal.com.br", true },
{ "placebet.pro", true },
{ "placedaffiliate.com", true },
- { "placehold.co", true },
+ { "placedapps.com", true },
+ { "placedsupport.com", true },
{ "placeitsf.com", true },
{ "placeralplato.com", true },
{ "placker.com", true },
@@ -26254,12 +26541,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "playanka.com", true },
{ "playawaycastles.co.uk", true },
{ "playdaysparties.co.uk", true },
+ { "playerscout.net", true },
{ "playform.cloud", true },
+ { "playhappywheelsunblocked.com", true },
{ "playkh.com", true },
{ "playkinder.com", true },
{ "playocean.net", true },
{ "playpirates.com", true },
{ "playreal.city", true },
+ { "playsharp.com", true },
{ "playsnake.org", true },
{ "playsoundevents.be", true },
{ "playtictactoe.org", true },
@@ -26268,7 +26558,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "playzonecastles.co.uk", true },
{ "pld-entertainment.co.uk", true },
{ "pldx.org", true },
- { "pleaseuseansnisupportedbrowser.ml", true },
{ "plegro.com", true },
{ "pleiades.com.tr", true },
{ "pleier-it.de", false },
@@ -26278,7 +26567,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "plesse.pl", true },
{ "plexa.de", true },
{ "plexhome13.ddns.net", true },
- { "plexi.dyndns.tv", true },
{ "plextv.de", true },
{ "pliosoft.com", true },
{ "plissee-experte.de", true },
@@ -26305,6 +26593,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "plumbingbenoni.co.za", true },
{ "plumbingcentral.com.au", true },
{ "plumbingglenvista.co.za", true },
+ { "plumbingman.com.au", true },
{ "plumlocosoft.com", true },
{ "plumnet.ch", true },
{ "plumpie.net", false },
@@ -26385,6 +26674,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "poed.net.au", true },
{ "poedgirl.com", true },
{ "poeg.cz", true },
+ { "poezja.com.pl", true },
+ { "poezjagala.pl", true },
{ "poffenhouse.ddns.net", true },
{ "pogrebisky.net", true },
{ "pohlmann.io", true },
@@ -26408,10 +26699,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pokl.cz", true },
{ "polaire.org", true },
{ "polanda.com", true },
- { "polandb2b.directory", true },
{ "polar.uk.com", true },
{ "pole-emotion.ch", true },
- { "pole.net.nz", true },
{ "poleacademie.com", true },
{ "poles4pilots.com", true },
{ "policedriver.com", true },
@@ -26427,7 +26716,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "polish-translator.com", true },
{ "polish-translator.net", true },
{ "polish-translators.net", true },
- { "polish.directory", true },
{ "polishforums.com", true },
{ "polishmarriage.org", true },
{ "polishtranslation.com", true },
@@ -26437,6 +26725,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "politiezoneriho.be", true },
{ "politik-bei-uns.de", true },
{ "polizeiwallis.ch", true },
+ { "polkhealthforanewyou.net", true },
{ "polki.com", true },
{ "pollet-ghijs.be", true },
{ "pollet-ghys.be", true },
@@ -26448,17 +26737,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "poloniex.co.za", true },
{ "polskiemalzenstwo.org", true },
{ "poly-fast.com", true },
+ { "polycraftual.co.uk", true },
{ "polyfill.io", true },
{ "polyfluoroltd.com", true },
{ "polygamer.net", true },
{ "polymake.org", true },
{ "polymathematician.com", true },
- { "polymorph.rs", true },
{ "polynomapp.com", true },
{ "polypane.rocks", true },
{ "polypet.com.sg", true },
{ "polytarian.com", true },
- { "polytechecosystem.vc", true },
{ "polytekniskforening.dk", true },
{ "pomar.club", false },
{ "pomardaserra.com", true },
@@ -26489,7 +26777,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "poopr.ru", true },
{ "pop-corn.ro", true },
{ "pop3.jp", true },
+ { "popcat.ru", true },
{ "popcornpalacefundraising.com", true },
+ { "popcultureshack.com", true },
{ "popeyes.com", true },
{ "popinga.it", true },
{ "popmagz.com", true },
@@ -26503,11 +26793,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "porg.es", true },
{ "pork.org.uk", true },
{ "porkel.de", true },
+ { "porn77.info", true },
+ { "pornbay.org", true },
+ { "porncandi.com", true },
{ "pornfacefinder.com", true },
{ "pornhubhd.biz", true },
{ "porniwi.com", true },
{ "pornloupe.com", true },
+ { "porno-gif.ru", true },
+ { "pornohub.su", true },
+ { "pornolab-net.appspot.com", false },
{ "pornomens.be", true },
+ { "pornoserver.eu", true },
+ { "pornspider.to", true },
{ "porpcr.com", true },
{ "pors-sw.cz", true },
{ "port.im", true },
@@ -26517,6 +26815,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "port80.hamburg", true },
{ "portablebuildingsales.co.uk", true },
{ "portablespeakersfinder.com", true },
+ { "portailevangelique.ca", true },
{ "portal.tirol.gv.at", true },
{ "portalcarriers.com", true },
{ "portalcentric.net", true },
@@ -26529,6 +26828,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "porterranchelectrical.com", true },
{ "portofacil.com", true },
{ "portofala.pt", true },
+ { "portofrotterdam.com", false },
{ "portosonline.pl", true },
{ "portraitsystem.biz", true },
{ "portsdebalears.gob.es", true },
@@ -26537,6 +26837,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "portugal-a-programar.pt", true },
{ "portugalsko.net", true },
{ "porybox.com", true },
+ { "pos.co.tz", true },
{ "posalji.me", true },
{ "posaunenchor-senden.de", true },
{ "posbank.co.uk", true },
@@ -26548,7 +26849,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "positionus.io", true },
{ "positive.com.cy", true },
{ "positivenames.net", true },
- { "positivesobrietyinstitute.com", true },
{ "posobota.cz", true },
{ "posoiu.net", true },
{ "post-darwinian.com", true },
@@ -26593,7 +26893,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pourlesenfants.info", true },
{ "pouwels-oss.nl", true },
{ "povareschka.ru", true },
- { "powdersnow.top", true },
+ { "povesham.tk", true },
{ "powelljones.co.uk", true },
{ "power-coonies.de", true },
{ "power-fit.org", true },
@@ -26613,14 +26913,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "powersergdatasystems.com", true },
{ "powersergholdings.com", true },
{ "powersergthisisthewebsitefuckyouscott.com", true },
- { "powersergunited.com", true },
- { "powersergunited.org", true },
{ "powersergusercontent.com", true },
{ "powertothebuilder.com", true },
{ "powerwellness-korecki.de", true },
{ "pozemedicale.org", true },
{ "pozlife.net", true },
- { "pozytywnyplan.pl", true },
{ "pozzitiv.ro", true },
{ "pp3345.net", true },
{ "ppcrestaurants.com", true },
@@ -26662,6 +26959,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "prazynka.pl", true },
{ "prc-newmedia.com", true },
{ "prc.gov", true },
+ { "precept.uk.com", true },
{ "preciouslife.fr", true },
{ "preciscx.com", true },
{ "preciseassemblies.com", true },
@@ -26670,6 +26968,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "predoiu.ro", true },
{ "preexport.com", true },
{ "prefix.eu", true },
+ { "pregono.com", true },
{ "pregunteleakaren.gov", true },
{ "preigu.de", true },
{ "preis-alarm.info", true },
@@ -26685,6 +26984,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "prelved.nl", true },
{ "prelved.pl", true },
{ "prelved.se", true },
+ { "premaritalsex.info", true },
{ "prematureacceleration.club", true },
{ "premierbouncycastles.co.uk", true },
{ "premieresloges.ca", false },
@@ -26697,12 +26997,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "prenatalgeboortekaartjes.nl", true },
{ "prepaid-cards.xyz", true },
{ "prepaid-voip.nl", true },
+ { "prepaidgirl.com", true },
{ "prepaidkredietkaart.be", true },
{ "prepare-job-hunting.com", true },
- { "preposted.com", true },
{ "presbee.com", true },
{ "prescotonline.co.uk", true },
- { "prescriptionrex.com", true },
{ "present-m.com", true },
{ "presentesdegrife.com.br", true },
{ "president.bg", true },
@@ -26721,28 +27020,30 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "prestigerepairs.com.au", true },
{ "prestigesigns.net", true },
{ "prestonandsons.com.au", true },
+ { "prestonapp.com", true },
{ "prestonbrant.com", true },
{ "pretachique.com.br", true },
{ "pretix.eu", true },
+ { "pretrialservices.gov", true },
{ "pretty.hu", true },
{ "prettynode.com", true },
{ "pretwolk.nl", true },
{ "pretzelx.com", true },
{ "prevenir.ch", true },
+ { "preview-it-now.com", true },
{ "priceremoval.net", true },
{ "pricesniffer.co", true },
{ "prideindomination.com", true },
{ "pridetechdesign.com", true },
{ "prielwurmjaeger.de", true },
- { "primaconsulting.net", true },
{ "primalbase.com", true },
{ "primalinea.pro", true },
{ "primates.com", true },
{ "primewho.org", true },
{ "primordialsnooze.com", true },
{ "primorus.lt", true },
+ { "primotilesandbathrooms.co.uk", false },
{ "princeagency.com", true },
- { "princeofwhales.com", true },
{ "princesparktouch.com", true },
{ "princessefoulard.com", true },
{ "principalsexam.com", true },
@@ -26755,7 +27056,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "principia-magazin.de", true },
{ "principia-online.de", true },
{ "princovi.cz", true },
- { "prinesdoma.at", true },
{ "prinice.org", true },
{ "printeknologies.com", true },
{ "printerleasing.be", true },
@@ -26784,6 +27084,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "priorityelectric.mobi", true },
{ "priorityelectric.net", true },
{ "priorityessays.com", true },
+ { "prioritylawyers.com.au", true },
{ "prioritynissannewportnewsparts.com", true },
{ "prismacloud.com", true },
{ "prismacloud.green", true },
@@ -26795,19 +27096,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "privacy-week.at", true },
{ "privacy.com", true },
{ "privacybadger.org", true },
- { "privacyforjournalists.org.au", true },
{ "privacyinternational.org", true },
{ "privacyscore.org", true },
{ "privacyweek.at", true },
{ "privacyweek.de", true },
{ "privacyweek.eu", true },
{ "privacyweekvienna.at", true },
- { "privaday.de", true },
+ { "privaday.de", false },
{ "privasphere.com", true },
{ "privatebanks.uk", true },
{ "privatebin.info", true },
{ "privatecapsecurity.org", true },
- { "privategiant.com", true },
{ "privateideas.de", true },
{ "privateimarketing.com", true },
{ "privatepokertour.com", true },
@@ -26817,9 +27116,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "privatfrei.de", true },
{ "privatpatient-krankenhaus.de", true },
{ "privea.fr", true },
+ { "privelust.nl", true },
{ "priverify.com", true },
{ "privu.me", true },
{ "privy-staging.com", true },
+ { "privy.com", true },
{ "prjktruby.com", false },
{ "prknje.co", true },
{ "prknje.com", true },
@@ -26828,7 +27129,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pro-bike.ro", true },
{ "pro-esb.com", true },
{ "pro-esb.net", true },
- { "pro-image.de", true },
{ "pro-link.eu", true },
{ "pro-mile.pl", true },
{ "pro-netz.de", false },
@@ -26846,6 +27146,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "procinorte.net", true },
{ "proclib.org", true },
{ "procrastinationland.com", true },
+ { "procreditbank.com.al", true },
{ "proctorio.com", true },
{ "prodct.info", true },
{ "prodegree.com", true },
@@ -26862,6 +27163,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "productived.net", false },
{ "productlondon.com", true },
{ "productoinnovador.com", true },
+ { "productpeo.pl", true },
{ "products4more.at", true },
{ "produkttest-online.com", true },
{ "prodware.fr", true },
@@ -26877,6 +27179,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "professional.cleaning", true },
{ "professionalboundaries.com", true },
{ "professors.ee", true },
+ { "profhome-shop.com", true },
{ "profidea.cz", true },
{ "profile.tf", true },
{ "profiles.google.com", true },
@@ -26891,7 +27194,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "proggersession.com", true },
{ "proggersession.de", true },
{ "progiscad.com", true },
+ { "programistka.com", true },
{ "programlama.tk", true },
+ { "programmaticmagic.com", true },
{ "programsupport300procent.com", true },
{ "progreso.pl", true },
{ "progress-linux.org", true },
@@ -26900,8 +27205,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "progressiveplanning.com", true },
{ "prohrcloud.com", true },
{ "proimpact.it", true },
- { "project-rune.tech", true },
- { "project-splash.com", true },
{ "project.supply", true },
{ "projectarmy.net", false },
{ "projectblackbook.us", true },
@@ -26912,7 +27215,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "projectsecretidentity.org", true },
{ "projectunity.io", true },
{ "projektarbeit-projektplanung.de", true },
- { "projektzentrisch.de", true },
{ "projest.ch", true },
{ "projet-fly.ch", true },
{ "prok.pw", true },
@@ -26932,6 +27234,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "promozione.info", true },
{ "pronostic-king.fr", true },
{ "pronto-intervento.net", true },
+ { "prontossl.com", true },
{ "proobec.cz", true },
{ "proofwiki.org", true },
{ "proos.nl", true },
@@ -26940,11 +27243,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "propagandism.org", true },
{ "propagationtools.com", true },
{ "propepper.net", true },
- { "propershave.com", true },
{ "properticons.com", true },
{ "property-catalogue.eu", true },
{ "propertygroup.pl", true },
{ "propertyone.mk", true },
+ { "prophiler.de", true },
{ "propipesystem.com", true },
{ "proposalonline.com", true },
{ "propr.no", true },
@@ -26955,10 +27258,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "prosperontheweb.com", true },
{ "prospo.co", true },
{ "prostohobby.ru", true },
+ { "prostoporno.net", true },
{ "prostoporno.sexy", true },
{ "prostye-recepty.com", true },
+ { "prosurveillancegear.com", true },
{ "prot.ch", true },
{ "protectem.de", true },
+ { "protectoraanimalesalicante.org", true },
{ "protege.moi", true },
{ "protegetudescanso.com", true },
{ "protein-riegel-test.de", true },
@@ -26968,6 +27274,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "proteus-eretes.nl", true },
{ "proteus-tech.com", true },
{ "proto-online.ru", true },
+ { "protobetatest.com", true },
{ "protocol.ai", true },
{ "protonmail.com", true },
{ "protonvpn.com", true },
@@ -26977,15 +27284,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "proust.media", false },
{ "proustmedia.de", false },
{ "provectus.de", true },
- { "proveits.me", false },
{ "provence-appartements.com", true },
{ "providerlijst.com", true },
{ "providerlijst.nl", true },
{ "provision-isr.nl", true },
+ { "provisionircd.tk", true },
{ "provitec.com", true },
{ "provitec.de", true },
{ "provokator.co.il", true },
- { "proweser.de", true },
+ { "prowebcenter.com", true },
{ "prowise.com", true },
{ "proximityradio.fr", true },
{ "proxybay.bz", true },
@@ -26999,10 +27306,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "proymaganadera.com", true },
{ "prpferrara.it", true },
{ "prplz.io", true },
- { "prpr.cloud", true },
{ "prt.in.th", true },
{ "prtimes.com", true },
{ "prtpe.com", true },
+ { "pru.com.hk", true },
{ "pru.hk", true },
{ "pruma.com.br", true },
{ "prvikvadrat.hr", true },
@@ -27014,6 +27321,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ps-sale.ru", true },
{ "ps-w.ru", true },
{ "ps4all.nl", true },
+ { "psa.gov", true },
{ "psb.cloud", true },
{ "psb1.org", true },
{ "psb1911.com", true },
@@ -27027,7 +27335,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "psdsuc.com", true },
{ "pself.net", true },
{ "pseta.ru", true },
- { "pseudo.coffee", true },
{ "psg.bg", true },
{ "psicoexpansao.com.br", true },
{ "psicologasandrabernal.es", true },
@@ -27075,7 +27382,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ptrl.ws", true },
{ "ptron.org", true },
{ "puac.de", true },
- { "pub-online.ro", true },
{ "pubean.com", true },
{ "pubi.me", true },
{ "publanda.nl", true },
@@ -27089,20 +27395,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "publicintelligence.net", true },
{ "publick.net", true },
{ "publicrea.com", true },
- { "publicspeakingcamps.com", true },
{ "publicsuffix.org", true },
{ "publiq.space", true },
- { "publishingshack.com", true },
{ "pubreview.com.au", true },
{ "pubreviews.com", true },
{ "pucchi.net", true },
+ { "pucssa.org", true },
{ "puddis.de", true },
{ "pugovka72.ru", true },
{ "puhka.me", true },
{ "puissancemac.ch", true },
+ { "pukfalkenberg.dk", true },
{ "puli.com.br", true },
{ "pulizieuffici.milano.it", true },
- { "pulledporkheaven.com", true },
{ "pulpproject.org", true },
{ "pulser.stream", true },
{ "pumperszene.com", true },
@@ -27115,9 +27420,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "punte-juwelier.nl", true },
{ "pupboss.com", true },
{ "puppet.pl", true },
+ { "puq.moe", true },
{ "puravida-estate.com", true },
{ "pure-gmbh.com", true },
{ "purecabo.com", true },
+ { "pureessentialoil.biz", true },
+ { "pureholisticliving.me", true },
{ "pureitsolutionsllp.com", true },
{ "purelunch.co.uk", true },
{ "purevapeofficial.com", true },
@@ -27145,8 +27453,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pushrax.com", true },
{ "put.moe", true },
{ "put.re", true },
+ { "putatara.net", true },
{ "putman-it.nl", true },
{ "putney.io", true },
+ { "putomani.rs", true },
{ "puurwonengeldrop.nl", false },
{ "puxlit.net", true },
{ "puyallupnissanparts.com", true },
@@ -27187,18 +27497,20 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pzsearch.nl", true },
{ "q-inn.com", true },
{ "q-inn.nl", true },
+ { "q-technologies.com.au", true },
{ "q123123.com", true },
+ { "q5118.com", true },
{ "qa-brandywineglobal.com", true },
+ { "qa-team.xyz", true },
{ "qa.fedoraproject.org", true },
{ "qa.stg.fedoraproject.org", true },
{ "qabalah.jp", true },
{ "qaconstrucciones.com", true },
{ "qadmium.com", true },
- { "qadmium.tk", true },
+ { "qambarraza.com", true },
{ "qamrulhaque.com", true },
{ "qapital.com", true },
{ "qaz.cloud", true },
- { "qazcloud.com", true },
{ "qbeing.info", true },
{ "qbiju.com.br", true },
{ "qbus.pl", true },
@@ -27214,7 +27526,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "qcstudentcenter.com", true },
{ "qcstyleacademy.com", true },
{ "qctravelschool.com", true },
- { "qdon.space", true },
+ { "qdon.space", false },
{ "qedcon.org", false },
{ "qelectrotech.org", true },
{ "qetesh.de", true },
@@ -27224,6 +27536,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "qhse-professionals.nl", true },
{ "qianalysis.com", true },
{ "qianqiao.me", true },
+ { "qicomidadeverdade.com.br", true },
{ "qifu.me", true },
{ "qifu.org.cn", true },
{ "qiliang.wang", true },
@@ -27233,13 +27546,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "qis.fr", true },
{ "qitarabutrans.com", true },
{ "qiuri.org", true },
+ { "qiuxian.ddns.net", true },
{ "qivonline.pt", true },
{ "qiwi.be", true },
{ "qixi.biz", true },
{ "qkka.org", true },
{ "qldconservation.org.au", true },
{ "qldformulaford.org", true },
- { "qledtech.com", true },
{ "qlrace.com", false },
{ "qm-marzahnnordwest.de", true },
{ "qochealth.com", true },
@@ -27250,7 +27563,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "qponverzum.hu", true },
{ "qq-navi.com", true },
{ "qq52o.me", true },
+ { "qqrss.com", true },
{ "qqvips.com", true },
+ { "qqvrsmart.cn", true },
+ { "qr-city.org", true },
{ "qrcontagion.com", true },
{ "qrpth.eu", true },
{ "qruiser.com", true },
@@ -27258,14 +27574,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "qtacairsoft.com", true },
{ "qtl.me", true },
{ "qtn.net", true },
- { "qto.com", true },
{ "qto.net", true },
- { "qto.org", true },
{ "qtpass.org", true },
{ "qtpower.co.uk", true },
{ "qtpower.net", true },
{ "qtpower.org", true },
{ "qtvr.com", true },
+ { "qtxh.net", false },
{ "quackerswaterproofing.com", true },
{ "quaedam.org", true },
{ "quaggan.co", true },
@@ -27277,12 +27592,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "qualityofcourse.com", true },
{ "qualitypropertycare.co.uk", true },
{ "qualtrics.com", true },
- { "quanjinlong.cn", true },
{ "quant-labs.de", true },
{ "quantaloupe.tech", true },
{ "quanterra.ch", true },
{ "quantolytic.de", true },
- { "quantor.dk", true },
{ "quantoras.com", true },
{ "quantum-mechanics.com", true },
{ "quantum2.xyz", true },
@@ -27320,8 +27633,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "query-massage.com", true },
{ "question.com", true },
{ "questionable.host", true },
- { "questions-admin.com", true },
- { "questionyu.com", true },
{ "questsocial.it", true },
{ "quevisiongrafica.com", true },
{ "quic.stream", true },
@@ -27352,7 +27663,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "qvggroup.com", true },
{ "qvi.st", true },
{ "qvitoo.com", true },
- { "qwallet.ca", true },
{ "qwans.nl", true },
{ "qwant.com", true },
{ "qwant.fr", true },
@@ -27368,10 +27678,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "qx.fi", true },
{ "qx.se", true },
{ "qxy.ch", true },
- { "r-core.org", true },
{ "r-rwebdesign.com", true },
+ { "r-t-b.fr", true },
{ "r0t.co", true },
- { "r18.moe", true },
+ { "r0uzic.net", true },
{ "r1ch.net", true },
{ "r2d2pc.com", true },
{ "r33.space", true },
@@ -27381,6 +27691,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "r7h.at", true },
{ "r811.de", true },
{ "ra-micro-koeln.de", true },
+ { "ra-schaal.de", false },
{ "ra.co.ke", true },
{ "ra.vc", true },
{ "ra4wvpn.com", true },
@@ -27388,7 +27699,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rabbit.wales", false },
{ "rabbitfinance.com", true },
{ "rabica.de", true },
- { "rabotaescort.com", true },
{ "rabynska.eu", true },
{ "raccoltarifiuti.com", true },
{ "racermaster.xyz", true },
@@ -27406,14 +27716,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rackerlab.com", false },
{ "raclet.co.uk", true },
{ "raconconsulting.co.uk", true },
- { "racoo.net", true },
{ "racunovodstvo-prina.si", true },
{ "radar.sx", true },
{ "radaravia.ru", true },
{ "radartatska.se", true },
{ "radartek.com", true },
{ "radcube.hu", true },
- { "raddavarden.nu", true },
{ "radfieldhomecare.co.uk", true },
{ "radfieldhomecarefranchising.co.uk", true },
{ "radical.org", true },
@@ -27431,11 +27739,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "radionicabg.com", true },
{ "radiopolarniki.spb.ru", true },
{ "radiormi.com", true },
- { "radiorsvp.com", true },
+ { "radiosendungen.com", true },
{ "radis-adopt.com", true },
+ { "radiumtree.com", true },
{ "radondetectionandcontrol.com", true },
{ "radreisetraumtreibstoff.de", true },
{ "radtke.bayern", true },
+ { "radyabkhodro.net", true },
{ "radyn.com", true },
{ "raeu.me", true },
{ "raeven.nl", true },
@@ -27448,16 +27758,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rage.rip", true },
{ "rage4.com", true },
{ "raghavdua.in", true },
- { "rahadiana.com", true },
{ "rahulpnath.com", true },
{ "rai-co.net", true },
{ "raidensnakesden.co.uk", true },
{ "raidensnakesden.com", true },
{ "raidensnakesden.net", true },
+ { "raidstone.net", true },
{ "raiffeisen-kosovo.com", true },
{ "railgun.ac", true },
- { "railgun.com.cn", true },
{ "railjob.cn", true },
+ { "railtoo.com", true },
{ "railwaytech.net", true },
{ "railyardurgentcare.com", true },
{ "raimixmotoparts.com.br", true },
@@ -27471,11 +27781,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rainville.me", true },
{ "rainway.io", true },
{ "raipet.no-ip.biz", true },
- { "raisecorp.com", true },
{ "raiseyourflag.com", true },
{ "raissarobles.com", true },
{ "raito.win", true },
- { "rajkapoordas.com", true },
+ { "rajivshah.co.uk", true },
{ "rajyogarishikesh.com", true },
{ "rak-business-service.com", true },
{ "rakugaki.cn", true },
@@ -27493,14 +27802,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ralph.bike", true },
{ "ralphwoessner.com", true },
{ "raltha.com", true },
+ { "ram-it.nl", true },
{ "ram.nl", true },
{ "ramatola.uk", true },
{ "rambii.de", true },
{ "ramblingrf.tech", true },
- { "ramezanloo.com", false },
+ { "rambo.codes", true },
{ "rammstein-portugal.com", true },
{ "ramrecha.com", true },
- { "ramsor-gaming.de", true },
{ "randc.org", true },
{ "random-samplings.org", true },
{ "randomadversary.com", true },
@@ -27515,6 +27824,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rangsmo.se", true },
{ "rank-net.de", true },
{ "ranking-deli.jp", true },
+ { "ranktopay.com", true },
{ "ranson.com.au", true },
{ "rantanda.com", true },
{ "rante.com", true },
@@ -27531,6 +27841,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "raphrfg.com", true },
{ "rapidapp.io", true },
{ "rapidhubs.com", true },
+ { "rapidoo.com.br", true },
{ "rapidshit.net", true },
{ "rapidstone.com", true },
{ "rappet.de", true },
@@ -27543,7 +27854,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rascalscastles.co.uk", true },
{ "rascalscastlesdoncaster.co.uk", true },
{ "rasebo.ro", true },
- { "raspass.me", true },
+ { "raspii.tech", true },
{ "rastreie.net", true },
{ "rasty.cz", true },
{ "ratd.net", true },
@@ -27554,7 +27865,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rationalism.com", true },
{ "rationalops.com", true },
{ "rattenkot.io", true },
- { "raucris.ro", true },
{ "raulrivero.es", true },
{ "raum4224.de", true },
{ "rauros.net", true },
@@ -27564,7 +27874,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "raven.dog", true },
{ "ravenger.net", true },
{ "ravensbuch.de", true },
- { "ravenx.me", true },
{ "ravhaaglanden.org", true },
{ "ravindran.me", true },
{ "raviparekh.co.uk", true },
@@ -27599,25 +27908,28 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rbtvshitstorm.is", true },
{ "rburchell.com", true },
{ "rc-offi.net", true },
+ { "rc-rp.com", true },
{ "rc-shop.ch", true },
- { "rc7.ch", true },
{ "rca.fr", true },
{ "rcd.cz", true },
{ "rcdocuments.com", true },
{ "rchrdsn.uk", true },
{ "rclsm.net", true },
- { "rcmlinx.com", true },
{ "rcmurphy.com", true },
{ "rcnitrotalk.com", true },
+ { "rcorporation.be", true },
{ "rcraigmurphy.com", true },
{ "rcraigmurphy.net", true },
{ "rcsolutions.nl", true },
{ "rct.sk", true },
+ { "rctalk.com", true },
{ "rdfproject.it", true },
{ "rdl.at", false },
{ "rdmrotterdam.nl", true },
{ "rdmtaxservice.com", true },
{ "rdns.cc", true },
+ { "rdv-prefecture.com", true },
+ { "rdwh.tech", true },
{ "re-curi.com", true },
{ "re-engines.com", true },
{ "reachhead.com", true },
@@ -27632,7 +27944,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "readify.com.au", true },
{ "readingandmath.org", true },
{ "readingrats.de", true },
- { "readism.io", true },
{ "readonly.de", true },
{ "readouble.com", false },
{ "readtldr.com", true },
@@ -27640,16 +27951,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "readytongue.com", true },
{ "readytowear.es", true },
{ "reaganlibrary.gov", true },
- { "reakyaweso.me", true },
{ "real-digital.co.uk", true },
{ "real-it.nl", true },
{ "realcapoeira.ru", true },
{ "realestateonehowell.com", true },
{ "realestateradioshow.com", true },
+ { "realfamilyincest.com", true },
{ "realfreedom.city", true },
{ "realgarant-shop.de", false },
{ "realhorsegirls.net", true },
- { "realhost.name", true },
{ "realhypnosistraining.com.au", true },
{ "realitea.co.uk", true },
{ "reality.news", true },
@@ -27664,10 +27974,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "realmofespionage.xyz", true },
{ "realoteam.ddns.net", true },
{ "realraghavgupta.com", true },
- { "realum.com", true },
- { "realum.de", true },
- { "realum.eu", true },
- { "realum.net", true },
{ "realvnc.help", true },
{ "realwaycome.com", true },
{ "realwildart.com", true },
@@ -27683,11 +27989,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rebirthia.me", true },
{ "reboxetine.com", true },
{ "reboxonline.com", true },
+ { "rebtoor.com", true },
{ "recantoshop.com", true },
{ "recantoshop.com.br", true },
{ "recapp.ch", true },
+ { "receiliart.com", true },
{ "receptionsbook.com", true },
{ "recepty.eu", false },
+ { "recetasdecocinaideal.com", true },
{ "rechenknaecht.de", true },
{ "recht-freundlich.de", true },
{ "rechtenliteratuurleiden.nl", false },
@@ -27704,8 +28013,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "recmon.hu", true },
{ "reco-studio.de", true },
{ "recolic.net", true },
- { "recommended.reviews", true },
- { "recompiled.org", true },
{ "recon-networks.com", true },
{ "recordeuropa.com", false },
{ "recoveringspirit.com", true },
@@ -27713,6 +28020,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "recreation.gov", true },
{ "recreoviral.com", true },
{ "recruitmade.jp", true },
+ { "rectecforum.com", true },
{ "recuerdafilms.com", true },
{ "recuperodatiraidfastec.it", true },
{ "recurly.com", true },
@@ -27725,6 +28033,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "redactieco.nl", true },
{ "redb.cz", true },
{ "redballoonsecurity.com", true },
+ { "redcatrampageforum.com", true },
{ "redchat.cz", true },
{ "redcoded.com", true },
{ "redcone.net", true },
@@ -27763,7 +28072,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rediske.me", true },
{ "redit.com", true },
{ "redivis.com", true },
- { "redizoo.com", true },
{ "redletter.link", true },
{ "redlinelap.com", true },
{ "redlink.de", true },
@@ -27771,6 +28079,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "redneck-gaming.de", true },
{ "redneragenturen.org", true },
{ "rednsx.org", true },
+ { "redporno.cz", true },
{ "redprice.by", true },
{ "redshield.co", true },
{ "redshiftlabs.com.au", true },
@@ -27780,8 +28089,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "redteam-pentesting.de", true },
{ "redwaterhost.com", true },
{ "redweek.com", true },
- { "redwoodpaddle.es", true },
- { "redwoodpaddle.pt", true },
{ "redzurl.com", false },
{ "reed-sensor.com", true },
{ "reedloden.com", true },
@@ -27792,17 +28099,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "reevoo.com", true },
{ "reevu.net", true },
{ "reezer.org", true },
- { "ref1oct.nl", true },
{ "referdell.com", true },
{ "refficience.com", true },
{ "refill-roboter.de", true },
{ "reflectivity.io", true },
+ { "reflectores.net", true },
{ "reflexions.co", true },
{ "reflexive-engineering.com", true },
{ "reflexive.xyz", true },
{ "refood-cascaiscpr.eu", true },
{ "reforesttheplanet.com", true },
- { "reformatreality.com", true },
{ "refresh-media.nl", true },
{ "refreshliving.us", true },
{ "refuelcollective.com", true },
@@ -27842,7 +28148,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "regnix.net", true },
{ "regnr.info", true },
{ "regolithmedia.com", true },
- { "regoul.com", true },
{ "regraph.de", true },
{ "regulations.gov", true },
{ "reha-honpo.jp", true },
@@ -27852,8 +28157,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rehabphilippines.com", true },
{ "rehabthailand.com", true },
{ "rehabthailand.org", true },
+ { "reher.pro", true },
{ "rei.codes", true },
- { "rei.ki", true },
{ "reichardt-home.goip.de", true },
{ "reichel-steinmetz.de", true },
{ "reichelt-cloud.de", true },
@@ -27869,7 +28174,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "reinaertvandecruys.com", true },
{ "reinaldudras.ee", true },
{ "reinaldudrasfamily.ee", true },
- { "reineberthe.ch", true },
{ "reinencaressa.be", true },
{ "reinfer.io", true },
{ "reinhard.codes", true },
@@ -27893,7 +28197,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "relates.link", true },
{ "relax.hn", true },
{ "relaxdom.net", true },
- { "relaxhavefun.com", true },
{ "relaxpointhyncice.cz", true },
{ "relaybox.io", true },
{ "release-monitoring.org", true },
@@ -27902,6 +28205,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "reliant3sixty.com", true },
{ "religiousforums.com", true },
{ "relocatefeds.gov", false },
+ { "relojeriajoyeria.com", true },
+ { "relvan.com", true },
{ "rem0te.net", true },
{ "remambo.jp", true },
{ "remedi.tokyo", true },
@@ -27912,6 +28217,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rememberthemilk.com", false },
{ "remi-saurel.com", true },
{ "remissan.com", true },
+ { "remitatm.com", false },
{ "remonti.info", true },
{ "remote.so", true },
{ "remoteutilities.com", true },
@@ -27923,6 +28229,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "renascentia.asia", true },
{ "renaultclubticino.ch", true },
{ "renderloop.com", true },
+ { "rendre-service.ch", true },
{ "rene-schwarz.com", true },
{ "rene-stolp.de", true },
{ "renearends.nl", true },
@@ -27938,7 +28245,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "renezuo.com", true },
{ "renkenlaw.com", true },
{ "renlen.nl", true },
- { "rennfire.org", true },
{ "renov8sa.co.za", true },
{ "renovum.es", true },
{ "renrenche.com", false },
@@ -27959,8 +28265,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "repaper.org", true },
{ "reparo.pe", true },
{ "repaxan.com", true },
+ { "repkord.com", true },
{ "replicaswiss.nl", true },
- { "repo.ml", true },
{ "repology.org", true },
{ "report-uri.com", true },
{ "reporting.gov", true },
@@ -27984,18 +28290,20 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "requestr.co.uk", true },
{ "res-kc.com", true },
{ "resama.eu", true },
+ { "resc.la", true },
{ "rescms-secure.com", true },
{ "research-panel.jp", true },
{ "research.facebook.com", false },
{ "researchgate.net", true },
+ { "researchstory.com", true },
{ "reseausyndic.ca", true },
{ "reservar-un-hotel.com", true },
{ "reservetonshift.com", true },
- { "reservoirtp.fr", true },
{ "resfriatech.com.br", true },
{ "residence-simoncelli.com", true },
{ "residentiallocksmithsanantoniotx.com", true },
{ "resist.ca", true },
+ { "resistav.com", true },
{ "resolvefa.co.uk", true },
{ "resolvefa.com", true },
{ "resolving.com", true },
@@ -28011,12 +28319,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "responer.com", true },
{ "responsibledisclosure.nl", false },
{ "responsive-shop.com", true },
+ { "responsivepaper.com", true },
{ "respostas.com.br", true },
{ "ressl.ch", true },
{ "restaurant-oregano.de", true },
{ "restaurant-rosengarten.at", true },
- { "restaurantemiperu.com", true },
{ "restaurantguru.com", true },
+ { "restaurantmaan.nl", true },
{ "restauranttester.at", true },
{ "rester-a-domicile.ch", true },
{ "rester-autonome-chez-soi.ch", true },
@@ -28026,9 +28335,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "restoruns.xyz", true },
{ "restrealitaet.de", true },
{ "restrito.org", true },
- { "resultsdate.news", true },
{ "resursedigitale.ro", true },
{ "retefarmaciecostadamalfi.it", true },
+ { "retetenoi.net", true },
{ "retetop95.it", true },
{ "reticon.de", true },
{ "retireyourpassword.org", true },
@@ -28060,7 +28369,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "reuter-shop.com", true },
{ "reuter.de", true },
{ "revamed.com", false },
- { "revapost.fr", true },
{ "revayd.net", true },
{ "revensoftware.com", true },
{ "reverencestudios.com", true },
@@ -28085,6 +28393,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rewrite3.com", true },
{ "rex.tc", true },
{ "rexdf.net", true },
+ { "rexskz.info", true },
{ "rezept-planer.de", true },
{ "rezexpert.com", true },
{ "rezosup.net", true },
@@ -28098,6 +28407,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rgbinnovation.com", true },
{ "rgcomportement.fr", true },
{ "rgservers.com", true },
+ { "rhaegal.me", true },
{ "rhd-instruments.com", true },
{ "rhd-instruments.de", true },
{ "rhees.nl", true },
@@ -28114,7 +28424,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rhnet.at", true },
{ "rhodenmanorcattery.co.uk", true },
{ "rhodes.ml", true },
- { "rhodesianridgeback.com.br", true },
{ "rhodri.io", true },
{ "rhowell.io", true },
{ "rhymeswithmogul.com", true },
@@ -28123,15 +28432,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "riajenaka.com", true },
{ "rial.space", true },
{ "ribs.com", true },
- { "ricardo.nu", true },
{ "ricardobalk.nl", true },
{ "ricaud.me", true },
{ "riccardopiccioni.it", true },
{ "riccy.org", true },
{ "riceadvice.info", true },
- { "richardbloomfield.blog", true },
{ "richardcrosby.co.uk", true },
{ "richardhering.de", true },
+ { "richardhicks.us", true },
{ "richardjgreen.net", true },
{ "richardlangworth.com", true },
{ "richardlugten.nl", true },
@@ -28147,7 +28455,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "richonrails.com", true },
{ "ricketyspace.net", true },
{ "ricki-z.com", true },
- { "ricknox.com", true },
{ "rickrongen.nl", true },
{ "rickscastles.co.uk", true },
{ "rickvanderzwet.nl", true },
@@ -28163,7 +28470,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rideyourdamn.bike", true },
{ "ridingboutique.de", true },
{ "riederle.com", true },
- { "rienasemettre.fr", true },
+ { "riemer.ml", true },
{ "riesenweber.id.au", true },
{ "riesheating.com", true },
{ "riffreporter.de", true },
@@ -28174,6 +28481,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "righini.ch", true },
{ "rightbrain.training", true },
{ "rightcapital.com", true },
+ { "rightmovecanada.com", true },
{ "rightnetworks.com", true },
{ "rightstuff.link", true },
{ "righttobuy.gov.uk", true },
@@ -28181,6 +28489,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rigsalesaustralia.com", true },
{ "rijk-catering.nl", false },
{ "rijsinkunst.nl", true },
+ { "rik.onl", true },
+ { "riku.pw", true },
{ "rile5.com", true },
{ "rileyevans.co.uk", true },
{ "rimax.vn", true },
@@ -28190,7 +28500,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ring.com", true },
{ "ringingliberty.com", true },
{ "ringjewellery.co.uk", true },
- { "rinj.se", true },
{ "rinvex.com", true },
{ "rio-weimar.de", true },
{ "rioshop.com.br", true },
@@ -28198,8 +28507,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ripaton.fr", true },
{ "ripmixmake.org", true },
{ "ripple.com", true },
- { "riqy86.nl", true },
- { "ris.fi", true },
{ "risada.nl", true },
{ "risaphuketproperty.com", true },
{ "riscascape.net", true },
@@ -28211,7 +28518,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "risiinfo.com", true },
{ "riskmitigation.ch", true },
{ "risparmiare.info", true },
- { "rissato.com.br", true },
{ "ristioja.ee", true },
{ "ristoarea.it", true },
{ "ristorantefattoamano.it", true },
@@ -28226,6 +28532,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "riverbanktearooms.co.uk", true },
{ "riverford.co.uk", true },
{ "rivermist.com.au", true },
+ { "riversidebaptistchurch.net", true },
{ "riversideradio.nl", true },
{ "riverviewcourtapts.com", true },
{ "riverweb.gr", true },
@@ -28234,12 +28541,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rivy.org", true },
{ "rix.ninja", true },
{ "rixter.com", true },
+ { "rixzz.ovh", true },
{ "riyono.com", true },
{ "rizalpalawan.gov.ph", true },
{ "rizospastis.gr", true },
{ "rj-onderneemt.nl", true },
- { "rkc-hygrotherm.de", true },
{ "rkfp.cz", true },
+ { "rkkhok.hu", true },
{ "rkmedia.no", true },
{ "rlalique.com", true },
{ "rld.org", true },
@@ -28262,8 +28570,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rmsides.com", true },
{ "rmstudio.tw", true },
{ "rmsupply.nl", true },
+ { "rn29.me", true },
{ "rnag.ie", true },
{ "rnb-storenbau.ch", true },
+ { "rnbjunk.com", true },
{ "rngmeme.com", true },
{ "rnt.cl", true },
{ "ro.search.yahoo.com", false },
@@ -28279,13 +28589,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "robdavidson.network", true },
{ "robert-flynn.de", true },
{ "robertattfield.com", true },
- { "robertbln.com", true },
{ "robertg.me", true },
+ { "robertglastra.com", true },
{ "roberthurlbut.com", true },
{ "robertkrueger.de", true },
{ "robertlysik.com", true },
{ "robertnemec.com", true },
- { "robertocasares.no-ip.biz", true },
{ "robertoentringer.com", true },
{ "robertof.ovh", true },
{ "robertopazeller.ch", true },
@@ -28294,6 +28603,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "robertsmits.be", true },
{ "robhorstmanshof.nl", true },
{ "robicue.com", true },
+ { "robin-novotny.com", true },
{ "robin.co.kr", true },
{ "robin.info", true },
{ "robinadr.com", true },
@@ -28313,12 +28623,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "robotattack.org", true },
{ "roboth.am", true },
{ "robotham.org", true },
+ { "robotkvarnen.se", true },
{ "robototes.com", true },
{ "robots-ju.ch", true },
{ "robottip.com", true },
{ "robpol86.com", true },
{ "robspc.repair", true },
{ "robspeed.rocks", true },
+ { "robtatemusic.com", true },
{ "robu.in", true },
{ "robud.info", true },
{ "robustac.com", true },
@@ -28343,7 +28655,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rocssti.net", true },
{ "rodab.party", true },
{ "rodafe.sk", true },
- { "rodarion.pl", true },
{ "roddis.net", true },
{ "rodeobull.biz", true },
{ "rodeohire.com", true },
@@ -28370,7 +28681,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "roffe.nu", true },
{ "rofl.com.ua", true },
{ "roflcopter.fr", true },
- { "rofrank.space", true },
{ "rogagym.com", true },
{ "roger101.com", true },
{ "rogerhub.com", true },
@@ -28383,8 +28693,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rogue-e.xyz", true },
{ "roguefinancial.com", true },
{ "roguefortgame.com", true },
+ { "roguenation.space", true },
+ { "roguenetworks.me", true },
+ { "roguesignal.net", true },
{ "roguetechhub.org", true },
- { "rohankrishnadev.in", true },
+ { "rohanbassett.com", true },
{ "rohedaten.de", true },
{ "rohitagr.com", true },
{ "rointe.online", true },
@@ -28395,6 +28708,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "roksolana.be", true },
{ "rokudenashi.de", true },
{ "roland.io", true },
+ { "rolandreed.cn", true },
+ { "rolandszabo.com", true },
{ "roligprylar.se", true },
{ "rollatorweb.nl", true },
{ "rollercoasteritalia.it", true },
@@ -28412,12 +28727,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "romantelychko.com", true },
{ "romantic-quotes.co.uk", true },
{ "romantica-hotel.de", true },
+ { "romanticfirstdance.com", true },
{ "romanticschemer.com", true },
{ "romanticsexshopguatemala.com", true },
+ { "romanticvillas.com.au", false },
{ "romapa.com", true },
{ "romar-bos.nl", true },
{ "romarin.es", true },
{ "romaservicegroup.it", true },
+ { "romatrip.it", true },
{ "rome.dating", true },
{ "rommelwood.de", true },
{ "roms.fun", true },
@@ -28427,6 +28745,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rondreis-amerika.be", true },
{ "rondreis-schotland.nl", true },
{ "roninf.ch", true },
+ { "ronniegane.kiwi", true },
{ "ronnylindner.de", true },
{ "ronomon.com", true },
{ "roodfruit.studio", true },
@@ -28444,7 +28763,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rooneytours.nl", true },
{ "roopakv.com", true },
{ "roosabels.nl", false },
- { "roosteroriginals.com", false },
{ "roosterpgplus.nl", true },
{ "root-space.eu", true },
{ "root.bg", true },
@@ -28460,13 +28778,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "roots.io", true },
{ "rootsandrain.com", true },
{ "rootsbar.fr", true },
- { "rootscope.co.uk", true },
+ { "rootscope.co.uk", false },
{ "rootspersona.com", true },
{ "rootswitch.com", true },
{ "rootusers.com", true },
{ "ropd.info", true },
{ "roryneville.com", true },
{ "rosabellas.co.uk", true },
+ { "rosalindturner.co.uk", true },
{ "rosbass.ru", true },
{ "rose-prism.org", true },
{ "rosehosting.reviews", true },
@@ -28484,12 +28803,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rosesciences.com", true },
{ "rosetiger.life", true },
{ "rosevillefacialplasticsurgery.com", true },
- { "rosewoodranch.com", true },
{ "roslynpad.net", true },
{ "rosset.me", true },
{ "rosset.net", true },
{ "rossfrancis.co.uk", true },
{ "rosslug.org.uk", true },
+ { "rossmacphee.com", true },
{ "rostov-avia.ru", true },
{ "rot47.net", true },
{ "rotek.at", true },
@@ -28501,19 +28820,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rotol.me", true },
{ "rottweil-hilft.de", true },
{ "rotunneling.net", true },
- { "rotzonline.com", true },
{ "rougechocolat.fr", true },
{ "roughcopy.com.au", true },
{ "roughgrain.com", true },
{ "roulinfo.ch", true },
{ "roulons-autrement.com", true },
{ "rounda.it", true },
- { "roundaboutweb.info", true },
{ "roundcube.mayfirst.org", false },
+ { "roundrock-locksmith.com", true },
{ "roussos.cc", true },
{ "rout0r.org", true },
{ "route-wird-berechnet.de", true },
{ "routeragency.com", true },
+ { "routerclub.ru", true },
{ "routercncperu.com", true },
{ "routetracker.co", true },
{ "rove3d.com", true },
@@ -28558,9 +28877,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rrwolfe.com", true },
{ "rsap.ca", true },
{ "rsauget.fr", true },
+ { "rsblake.net", true },
{ "rsgcard.com", true },
{ "rsingermd.com", true },
{ "rsl.gd", true },
+ { "rsldb.com", true },
{ "rsm-intern.de", true },
{ "rsm-liga.de", true },
{ "rsmmail.com", true },
@@ -28570,6 +28891,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rssr.se", true },
{ "rsttraining.co.uk", true },
{ "rsync.eu", false },
+ { "rt22.ch", true },
{ "rtate.ca", true },
{ "rtate.se", true },
{ "rtcx.net", true },
@@ -28590,6 +28912,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rtsr.ch", true },
{ "rtwcourse.com", true },
{ "rtzoeller.com", true },
+ { "ru-music.com", true },
{ "ru-sprachstudio.ch", true },
{ "ru.search.yahoo.com", false },
{ "ruaneattorneys.com", true },
@@ -28597,12 +28920,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rubberfurs.org", true },
{ "rubberlegscastles.co.uk", true },
{ "rubbermaidoutlet.com", true },
- { "rubbleremovalsbenoni.co.za", true },
{ "rubenbarbero.com", true },
{ "rubenkruisselbrink.nl", true },
- { "rubens.cloud", true },
{ "rublacklist.net", true },
- { "ruby-auf-schienen.de", true },
{ "rubyist.today", true },
{ "rubymartin.com.au", true },
{ "rubyquincunx.com", true },
@@ -28610,7 +28930,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rubytune.com", true },
{ "rucksack-rauf-und-weg.de", true },
{ "ruckzuck-privatpatient.de", true },
- { "rucnerobene.eu", true },
{ "ruconsole.com", true },
{ "rud.is", true },
{ "rudd-o.com", true },
@@ -28618,6 +28937,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ruderverein-gelsenkirchen.de", true },
{ "rudewiki.com", true },
{ "rudloff.pro", true },
+ { "rudnikas.com", true },
{ "rudolph.life", true },
{ "rudolphmarketing.com", true },
{ "rudrastyh.com", true },
@@ -28646,13 +28966,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rulutv.com", true },
{ "rumlager.de", true },
{ "rummage4property.co.uk", true },
- { "rummel-platz.de", true },
{ "rumplesinflatables.co.uk", true },
{ "rumtaste.com", true },
{ "rumtaste.de", true },
{ "run-it-direct.co.uk", true },
{ "runagain.ch", true },
{ "runebet.com", true },
+ { "runefake.com", true },
{ "runklesecurity.com", true },
{ "runnergrapher.com", true },
{ "runreport.fr", true },
@@ -28668,6 +28988,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rushpoppershop.co.uk", true },
{ "rushyo.com", true },
{ "rusi-ns.ca", true },
+ { "ruska-modra.cz", true },
+ { "ruskamodra.cz", true },
{ "ruskod.net", true },
{ "rusl.net", true },
{ "russellupevents.co.uk", true },
@@ -28677,6 +28999,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "russt.me", true },
{ "rust.mn", true },
{ "rustable.com", true },
+ { "rustikalwallis.ch", true },
+ { "rustralasia.net", true },
{ "rustyrambles.com", true },
{ "rusxakep.com", true },
{ "rutgerschimmel.nl", true },
@@ -28684,6 +29008,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ruudkoot.nl", true },
{ "ruwhof.net", true },
{ "ruyatabirleri.com", true },
+ { "rv-jpshop.com", true },
{ "rva-asbestgroep.nl", true },
{ "rvender.cz", true },
{ "rvnoel.net", true },
@@ -28703,6 +29028,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rxcheck.com", true },
{ "rxgroup.io", true },
{ "rxight.com", true },
+ { "ryan-design.com", true },
{ "ryan-goldstein.com", true },
{ "ryanbritton.com", true },
{ "ryancarter.co.uk", true },
@@ -28712,9 +29038,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ryanroberts.co.uk", true },
{ "ryansmithphotography.com", true },
{ "ryazan-region.ru", true },
- { "rybox.info", true },
{ "rychlikoderi.cz", true },
- { "ryejuice.sytes.net", true },
{ "rynekpierwotny.pl", true },
{ "ryois.me", true },
{ "ryu22e.org", true },
@@ -28732,13 +29056,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "s-pegasus.com", true },
{ "s-s-paint.com", true },
{ "s007.co", true },
- { "s0laris.co.uk", true },
{ "s10y.eu", true },
{ "s13d.fr", true },
{ "s16e.no", true },
- { "s1mplescripts.de", true },
{ "s2member.com", true },
- { "s3cases.com", true },
{ "s3cur3.it", true },
{ "s3gfault.com", true },
{ "s3robertomarini.it", true },
@@ -28747,6 +29068,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "s4db.net", true },
{ "s4tips.com", true },
{ "s4ur0n.com", true },
+ { "s5118.com", true },
{ "s8a.us", true },
{ "s95.de", true },
{ "sa-blog.net", true },
@@ -28754,6 +29076,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sa.net", true },
{ "saabpartsdistribution.com", true },
{ "saamhorigheidsfonds.nl", false },
+ { "saastopankki.fi", true },
{ "saba-piserver.info", true },
{ "sabahattin-gucukoglu.com", true },
{ "sabe.cz", true },
@@ -28767,6 +29090,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "saclier.at", true },
{ "sacprincesse.com", true },
{ "sacred-knights.net", true },
+ { "sacrome.com", true },
{ "sadbox.es", true },
{ "sadbox.org", true },
{ "sadbox.xyz", true },
@@ -28774,11 +29098,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sadhawkict.org", true },
{ "sadmansh.com", true },
{ "sadou.kyoto.jp", true },
+ { "sadsu.com", true },
{ "saenforcement.agency", true },
{ "saengsook.com", true },
{ "saengsuk.com", true },
{ "safar.sk", true },
- { "safari-afrique.com", true },
{ "safaritenten.nl", true },
{ "safcstore.com", true },
{ "safe.space", true },
@@ -28795,13 +29119,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "safematix.com", true },
{ "safeme.ga", true },
{ "safeocs.gov", true },
- { "safepay.io", true },
{ "safer-networking.org", true },
{ "saferpost.com", true },
{ "safescan.com", true },
{ "safestore.io", true },
{ "safetext.me", true },
{ "safetycloud.me", true },
+ { "safetynames.com", true },
{ "safeui.com", true },
{ "safezone.cc", false },
{ "safire.ac.za", true },
@@ -28815,6 +29139,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sahar.io", true },
{ "saharmassachi.com", true },
{ "sahb.dk", true },
+ { "sahibinden.com", true },
{ "sahkotyot.eu", true },
{ "said.id", true },
{ "said.my.id", true },
@@ -28834,20 +29159,26 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "saintanthonyscorner.com", true },
{ "sainth.de", true },
{ "saintsrobotics.com", true },
- { "saintw.com", true },
{ "saipariwar.com", true },
{ "saiputra.com", true },
- { "saitrance.com", true },
{ "saiyasu-search.com", true },
{ "sajamstudija.info", true },
{ "sajdowski.de", true },
{ "sakaki.anime.my", false },
{ "sakostacloud.de", true },
+ { "sakura-paris.org", true },
{ "sakuraflores.com.br", true },
+ { "sakuraplay.com", true },
{ "salamon-it.de", false },
{ "salde.net", true },
{ "sale4ru.ru", true },
{ "saleaks.org", true },
+ { "saleduck.co.id", true },
+ { "saleduck.co.th", true },
+ { "saleduck.com.my", true },
+ { "saleduck.com.ph", true },
+ { "saleduck.com.sg", true },
+ { "saleduck.com.vn", true },
{ "salensmotors-usedcars.be", true },
{ "salesflare.com", true },
{ "salesmachine.io", true },
@@ -28864,6 +29195,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "salmonvision.com.tw", true },
{ "salmos91.com", true },
{ "salmotierra-salvatierra.com", true },
+ { "salon-claudia.ch", true },
{ "salon-minipli.de", true },
{ "salon.io", false },
{ "salon1.ee", true },
@@ -28879,7 +29211,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "saludsexualmasculina.org", true },
{ "saludsis.mil.co", true },
{ "salutethepig.com", true },
- { "salvaalocombia.com", true },
{ "salvagedfurnitureparlour.com", true },
{ "sam-football.fr", true },
{ "samanthasgeckos.com", true },
@@ -28904,13 +29235,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "samifar.in", true },
{ "samip.fi", true },
{ "samizdat.cz", true },
- { "samkelleher.com", true },
{ "saml-gateway.org", true },
{ "sammenlignakasser.dk", true },
{ "sammyservers.com", true },
{ "samnya.cn", true },
{ "samsungmobile.it", true },
{ "samsungphonegenerator.xyz", true },
+ { "samtalen.nl", true },
{ "samuel-dumont.be", true },
{ "samuelkeeley.com", true },
{ "samuellaulhau.fr", true },
@@ -28924,6 +29255,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sana-store.com", true },
{ "sana-store.cz", true },
{ "sana-store.sk", true },
+ { "sanalbayrak.com", true },
{ "sanandreasstories.com", true },
{ "sanantoniolocksmithinc.com", true },
{ "sanasport.cz", true },
@@ -28931,7 +29263,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sanatorii-sverdlovskoy-oblasti.ru", true },
{ "sanatorionosti.com.ar", true },
{ "sanchez.adv.br", true },
- { "sand-islets.de", true },
{ "sandalj.com", true },
{ "sandbagexpress.com", true },
{ "sandbox.mydigipass.com", false },
@@ -28953,18 +29284,23 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sandrocorapi.com", true },
{ "sandrolittke.de", true },
{ "sandtears.com", true },
+ { "sandtonescorts.com", true },
+ { "sandtonplumber24-7.co.za", true },
+ { "sandtonvipcompanions.com", true },
{ "sandyrobsonhypnotherapy.co.uk", true },
{ "sanepsychologen.nl", true },
{ "sanex.ca", false },
- { "sanglierhurlant.fr", true },
{ "sangwon.io", true },
{ "sanilodge.com", true },
{ "sanipousse.com", true },
+ { "sanissimo.com.mx", false },
{ "sanitairwinkel.be", true },
{ "sanitairwinkel.com", true },
{ "sanitairwinkel.nl", true },
+ { "sanitrak.cz", true },
+ { "sanmuding.com", true },
+ { "sannesfotklinikk.no", true },
{ "sanpham-balea.org", true },
- { "sanradon.by", true },
{ "sanskritiyoga.com", true },
{ "sansonehowell.com", true },
{ "santafemacas.com.br", true },
@@ -28975,6 +29311,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "santojuken.co.jp", true },
{ "santoshpandit.com", true },
{ "sanvitolocapobus.com", true },
+ { "saol.eu", true },
{ "saoneth.pl", true },
{ "saorsat.com", true },
{ "saorsat.ie", true },
@@ -28984,6 +29321,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sap-inc.co.jp", true },
{ "sapac.es", true },
{ "sapien-ci.com", true },
+ { "sapience.com", true },
{ "sapindus.pl", true },
{ "sapk.fr", true },
{ "saposute-s.jp", true },
@@ -28997,12 +29335,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sarahplusdrei.de", true },
{ "sarahvictor.co.uk", true },
{ "sarahwikeley.co.uk", true },
+ { "saraleebread.com", false },
{ "sarariman.com", true },
{ "sarasturdivant.com", true },
{ "sardegnatirocini.it", true },
- { "sarink.eu", true },
{ "sarkarikhoj.com", true },
- { "saro.me", true },
{ "saronno5stelle.it", true },
{ "sarpsb.org", true },
{ "sarumtechnologies.com", true },
@@ -29011,6 +29348,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sash.pw", true },
{ "sashaokun.com", true },
{ "sashascollections.com", true },
+ { "sasioglu.co.uk", true },
{ "saskpension.com", true },
{ "sasrobotics.xyz", true },
{ "sastd.com", true },
@@ -29024,6 +29362,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "satinn.pl", true },
{ "satmd.de", true },
{ "satoshinumbers.com", true },
+ { "sattamatkachart.in", true },
+ { "sattamatkadpboss.mobi", true },
+ { "sattamatkamobi.mobi", true },
{ "saturn.pl", true },
{ "satyanarayana.xyz", true },
{ "saudavel.com.vc", true },
@@ -29036,7 +29377,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "saulchristie.com", true },
{ "saumon-de-france.com", true },
{ "saumon-france.com", true },
- { "saumon.io", true },
{ "saumondefrance.fr", true },
{ "saumonfrance.fr", true },
{ "saunahats.eu", true },
@@ -29069,6 +29409,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "saxwereld.nl", true },
{ "sayori.pw", true },
{ "sayprepay.com", true },
+ { "sayrodigital.com", true },
{ "sayura.net", true },
{ "saz.sh", true },
{ "sazuz.cz", true },
@@ -29084,7 +29425,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sbf888.com", true },
{ "sbiewald.de", true },
{ "sbir.gov", true },
- { "sbirecruitment.co.in", true },
{ "sbit.com.br", true },
{ "sblum.de", true },
{ "sbo-dresden.de", true },
@@ -29100,8 +29440,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "scaarus.com", true },
{ "scaffalature.roma.it", true },
{ "scaffoldhireeastrand.co.za", true },
- { "scaffoldhirefourways.co.za", true },
- { "scaffoldhirerandburg.co.za", true },
{ "scaffoldhiresandton.co.za", true },
{ "scalacollege.nl", true },
{ "scalaire.com", true },
@@ -29124,7 +29462,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "scenicbyways.info", true },
{ "scepticism.com", true },
{ "sceptique.eu", true },
- { "sch44r0n.de", true },
{ "schadevergoedingen.eu", true },
{ "schaefer-reifen.de", true },
{ "schamlosharmlos.de", true },
@@ -29134,14 +29471,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "schawe.me", true },
{ "scheduleme.io", true },
{ "scheemadigital.com", true },
- { "schefczyk.com", true },
- { "schefczyk.de", true },
- { "schefczyk.eu", true },
{ "schefczyk.net", true },
{ "scheidtweiler.de", true },
{ "scheinlichter.de", true },
{ "schelberts.de", true },
{ "schellevis.net", true },
+ { "schemingmind.com", true },
{ "schenkes.de", true },
{ "scherfke.de", true },
{ "scheuchenstuel.at", true },
@@ -29176,7 +29511,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "schnapke.name", true },
{ "schneeketten-ratgeber.de", true },
{ "schnegg.name", true },
- { "schneider-electric.tg", true },
{ "schneids.me", true },
{ "schnellno.de", true },
{ "schnellsuche.de", true },
@@ -29194,14 +29528,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "schollbox.de", false },
{ "scholz-kallies.de", true },
{ "schont.org", true },
+ { "school-b.us", true },
{ "school-register.co.za", true },
{ "school.in.th", true },
{ "schoolbus.at", true },
{ "schoolotzyv.ru", true },
{ "schoolsonice.nl", true },
- { "schoolze.com", false },
{ "schopenhauer-institut.de", true },
- { "schorel.ovh", true },
{ "schorelweb.nl", true },
{ "schorers.org", true },
{ "schoring.com", true },
@@ -29246,6 +29579,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "schutznetze24.de", false },
{ "schutzwerk.com", true },
{ "schwabenhaus-ka.de", true },
+ { "schwalliers.com", true },
{ "schwanke.in", true },
{ "schwarzegar.de", true },
{ "schwarzer.it", true },
@@ -29253,20 +29587,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "schwarzhenri.ch", true },
{ "schwarztrade.cz", true },
{ "schwarzwald-flirt.de", true },
- { "schwarzwaldcon.de", true },
{ "schwedenhaus.ag", true },
{ "schwerkraftlabor.de", true },
{ "schwinabart.com", true },
{ "schwinger.me", true },
{ "schwinnbike.ru", true },
{ "schwuppengrillen.de", true },
- { "sci-internet.tk", true },
{ "scicomm.xyz", true },
- { "science-anatomie.com", true },
{ "science-network.ch", true },
{ "science-questions.org", true },
{ "science-texts.de", true },
{ "science360.gov", true },
+ { "sciencebase.gov", true },
{ "scienceexploits.com", true },
{ "scienceminnesota.com", true },
{ "sciencesolutions.eu", true },
@@ -29298,7 +29630,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "scottseditaacting.com", true },
{ "scottstorey.co.uk", true },
{ "scottynordstrom.org", false },
- { "scoutdb.ch", true },
{ "scoutingridderkerk.nl", true },
{ "scoutingtungelroy.nl", true },
{ "scoutnet.de", true },
@@ -29327,7 +29658,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "scriptum.gr", true },
{ "scrisulfacebine.ro", true },
{ "scrod.me", true },
- { "scrumbleship.com", true },
+ { "scroll.in", true },
{ "scrumplex.net", true },
{ "scrumstack.co.uk", true },
{ "scryfall.com", true },
@@ -29360,16 +29691,21 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sdvx.net", true },
{ "sdxcentral.com", true },
{ "se-theories.org", true },
+ { "se.com", true },
{ "se.search.yahoo.com", false },
- { "sea-godzilla.com", true },
+ { "sea-godzilla.com", false },
+ { "seac.me", true },
{ "seacam-store.com", true },
{ "seafood.co.nz", true },
{ "seaholmwines.com", true },
+ { "sealaw.com", true },
+ { "sealbaker.com", true },
{ "sealoffantasy.de", true },
{ "sealtitebasement.com", true },
{ "seamless.no", true },
{ "sean-wright.com", true },
{ "seanholcroft.co.uk", true },
+ { "seankilgarriff.com", true },
{ "seaplayhomes.com", true },
{ "search-job-in.com", true },
{ "search-one.de", true },
@@ -29423,6 +29759,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sec.gov", true },
{ "sec.red", true },
{ "sec3ure.co.uk", true },
+ { "sec44.com", true },
+ { "sec44.net", true },
+ { "sec44.org", true },
{ "sec455.com", true },
{ "sec530.com", true },
{ "sec555.com", true },
@@ -29441,7 +29780,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "seconfig.sytes.net", true },
{ "secpatrol.de", true },
{ "secretar.is", true },
- { "secretsanta.fr", true },
+ { "secretpanties.com", true },
+ { "secretsdujeu.com", true },
{ "secretserveronline.com", true },
{ "secretum.tech", true },
{ "secteer.com", true },
@@ -29473,6 +29813,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "secureonline.co", false },
{ "securethe.news", true },
{ "securetheorem.com", true },
+ { "securetronic.ch", true },
{ "securi-tay.co.uk", true },
{ "securify.nl", true },
{ "securipy.com", true },
@@ -29488,8 +29829,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "securitybrief.co.nz", true },
{ "securitybrief.com.au", true },
{ "securitybrief.eu", true },
+ { "securitycamerasaustin.net", true },
{ "securityfest.com", true },
{ "securityheaders.com", true },
+ { "securityheaders.io", true },
{ "securityinet.com", false },
{ "securitykey.co", true },
{ "securitypluspro.com", true },
@@ -29547,16 +29890,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "seitai-taiyou.com", true },
{ "seitenwaelzer.de", true },
{ "sekisonn.com", true },
+ { "sekoya.org", true },
{ "selbys.net.au", true },
{ "selcusters.nl", true },
{ "selea.se", true },
{ "selected-properties.com", true },
+ { "selectel.com", false },
{ "selectel.ru", true },
{ "selectorders.com", true },
{ "selegiline.com", true },
{ "selent.me", true },
{ "self-evident.org", true },
- { "self-injury.net", false },
+ { "self-signed.com", true },
{ "self-xss.info", true },
{ "self.nu", true },
{ "selfassess.govt.nz", true },
@@ -29566,7 +29911,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "selfishness.com", true },
{ "selfloath.in", true },
{ "selfoutlet.com", true },
- { "selitysvideot.fi", true },
{ "selkiemckatrick.com", true },
{ "sellajoch.com", true },
{ "sellguard.pl", true },
@@ -29578,6 +29922,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "semaf.at", true },
{ "semaflex.it", true },
{ "semaphore-studios.com", true },
+ { "semenov.su", false },
{ "semianalog.com", true },
{ "seminariruum.ee", true },
{ "semiocast.com", true },
@@ -29588,6 +29933,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "semps-threema.de", true },
{ "semps.de", true },
{ "semrush.com", true },
+ { "semsec.net", true },
{ "semyonov.su", true },
{ "semyonov.us", true },
{ "senarius.de", true },
@@ -29605,14 +29951,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "seniorem.eu", true },
{ "seniors.singles", true },
{ "senmendai-reform.com", true },
- { "senmonsyoku.top", true },
{ "senorcontento.com", true },
{ "sensebridge.com", true },
{ "sensebridge.net", true },
{ "sensepixel.com", true },
- { "senseye.io", true },
{ "senshudo.tv", true },
{ "sensoft-int.net", true },
+ { "sensualism.com", true },
{ "sentandsecure.com", true },
{ "sentic.info", true },
{ "sentidosdelatierra.org", true },
@@ -29629,30 +29974,27 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "seo.london", true },
{ "seo.tl", true },
{ "seoagentur2go.de", true },
- { "seoarchive.org", true },
{ "seobutler.com", true },
{ "seocomposer.com", true },
{ "seoenmexico.com.mx", true },
{ "seoexperte.berlin", true },
{ "seogeek.nl", true },
{ "seohackers.fr", true },
- { "seohochschule.de", true },
{ "seoinc.com", true },
{ "seoium.com", true },
{ "seokay.com", true },
{ "seolaba.io", true },
{ "seolib.org", true },
+ { "seomarketing.bg", true },
{ "seon.me", true },
{ "seoprovider.nl", true },
{ "seoquake.com", true },
{ "seosof.com", true },
{ "seostepbysteplab.com", true },
- { "seotronix.net", false },
{ "seoul.dating", true },
{ "seouniversity.org", true },
{ "sepalandseed.com", true },
{ "seppelec.com", true },
- { "seproco.com", true },
{ "septakkordeon.de", true },
{ "septfinance.ch", true },
{ "septicrepairspecialists.com", true },
@@ -29672,7 +30014,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sergije-stanic.me", true },
{ "sergiosantoro.it", true },
{ "sergiozygmunt.com", true },
+ { "sergivb01.me", true },
{ "sergos.de", true },
+ { "serialexperiments.co.uk", true },
{ "serienstream.to", true },
{ "serigraphs.co.uk", true },
{ "seriousclimbing.com", true },
@@ -29688,12 +30032,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "servemnaction.org", true },
{ "servepublic.com", true },
{ "servepublic.org", true },
- { "server-bg.net", true },
{ "server-daten.de", true },
{ "server-datenrettung.de", true },
{ "server-essentials.com", false },
{ "server-eye.com", true },
{ "server-eye.de", true },
+ { "serveradium.com", true },
{ "serveradminz.com", true },
{ "serverco.com", true },
{ "serverd.de", true },
@@ -29719,11 +30063,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "servious.org", true },
{ "servitek.de", true },
{ "serviziourgente.it", true },
- { "servpanel.de", false },
+ { "servpanel.de", true },
{ "servx.org", true },
- { "servx.ru", true },
{ "serw.org", true },
+ { "serwis-wroclaw.pl", true },
{ "seryox.com", true },
+ { "sesam-biotech.com", true },
{ "sessionslogning.dk", true },
{ "sesslerimmo.ch", true },
{ "sestra.in", true },
@@ -29731,7 +30076,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "setfix.de", true },
{ "sethcaplan.com", true },
{ "sethvargo.com", true },
- { "setkit.net", true },
{ "setphaserstostun.org", true },
{ "setsailanddive.com", true },
{ "settberg.de", true },
@@ -29743,27 +30087,33 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "seven-purple.com", true },
{ "sevencooks.com", true },
{ "sevenet.pl", true },
- { "sevenhearts.online", true },
{ "sevenhillsapartments.com.au", true },
{ "sevenicealimentos.com.br", true },
{ "sevenmatches.com", true },
{ "severine-trousselard.com", true },
{ "severntrentinsuranceportal.com", true },
{ "sevinci.ch", true },
+ { "sevsey.ru", true },
{ "sevsopr.ru", true },
{ "sewafineseam.com", true },
{ "sewinginsight.com", true },
{ "sewoo.co.uk", true },
+ { "sex-education.com", true },
{ "sexaki.com", true },
{ "sexdocka.nu", true },
+ { "sexgarage.de", true },
{ "sexmobil.de", true },
+ { "sexocomgravidas.com", true },
+ { "sexoyrelax.com", true },
+ { "sexpay.net", true },
{ "sexplicit.co.uk", true },
{ "sexservice.io", true },
{ "sexshopnet.com.br", true },
+ { "sexwork.net", true },
{ "sexy-store.nl", true },
{ "seyfarth.de", true },
- { "seyr.me", true },
{ "sfa.sk", true },
+ { "sfaturiit.ro", true },
{ "sfcomercio.com.br", true },
{ "sfdev.ovh", true },
{ "sfg-nordholz.de", true },
@@ -29779,6 +30129,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sglibellen.de", true },
{ "sgroup-hitoduma.com", true },
{ "sgroup-rec.com", true },
+ { "sgsp.nl", true },
{ "sgtcodfish.com", true },
{ "sgtsnookums.net", true },
{ "sgtt.ch", true },
@@ -29788,7 +30139,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sh0rt.zone", true },
{ "sh0shin.org", true },
{ "shaaaaaaaaaaaaa.com", true },
- { "shaamrelief.org", true },
{ "shad.waw.pl", true },
{ "shadesofgrayadr.com", true },
{ "shadesofgraylaw.com", true },
@@ -29805,6 +30155,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "shadowsocks.fr", false },
{ "shadowsocks.la", true },
{ "shadowsocks.to", true },
+ { "shadowstack.de", true },
{ "shadwe.com", true },
{ "shadynook.net", true },
{ "shafou.com", true },
@@ -29858,6 +30209,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sharperedge.pw", true },
{ "sharperedgecomputers.com", true },
{ "sharu.me", true },
+ { "sharvey.ca", true },
{ "shasso.com", true },
{ "shaun.net", true },
{ "shaunandamyswedding.com", true },
@@ -29868,7 +30220,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "shavegazette.com", true },
{ "shawnhogan.com", true },
{ "shawnwilkerson.com", true },
- { "shawnwilson.info", true },
{ "shazbots.org", true },
{ "shazzlemd.com", true },
{ "shazzlepro.com", true },
@@ -29886,8 +30237,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "shelleystoybox.com", true },
{ "shellfire.de", true },
{ "shellgame.io", true },
- { "shellj.me", true },
- { "shelljuggler.com", true },
+ { "shelljuggler.com", false },
{ "shellshock.eu", true },
{ "shellvatore.us", true },
{ "shemissed.me", true },
@@ -29895,14 +30245,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "shena.co.uk", true },
{ "shenghaiautoparts.com", true },
{ "shenghaiautoparts.net", true },
- { "shengrenyu.com", true },
{ "shenyuqi.com", false },
{ "sherbers.de", true },
{ "sherrikehoetherapy.com", true },
- { "shethbox.com", true },
{ "shft.cl", true },
{ "shgt.jp", true },
{ "shh-listen.com", true },
+ { "shh.sh", true },
{ "shiawasedo.co.jp", true },
{ "shichibukai.net", true },
{ "shico.org", true },
@@ -29913,6 +30262,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "shiftdevices.com", true },
{ "shiftj.is", true },
{ "shiftleft.org", true },
+ { "shiftpsych.com", true },
{ "shiga1.jp", true },
{ "shihadwiki.com", true },
{ "shijing.me", true },
@@ -29946,6 +30296,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "shivammaheshwari.com", true },
{ "shlmail.info", true },
{ "shmibbles.me", true },
+ { "shmunky.co.uk", true },
{ "shobhanayogsadan.com", true },
{ "shock.ee", true },
{ "shockercityservices.com", true },
@@ -29956,6 +30307,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "shome.de", true },
{ "shooter.dog", true },
{ "shop-s.net", true },
+ { "shop.fr", true },
{ "shopadvies.nl", true },
{ "shopalike.cz", true },
{ "shopalike.dk", true },
@@ -29969,7 +30321,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "shopalike.se", true },
{ "shopalike.sk", true },
{ "shopapi.cz", true },
- { "shopatkei.com", true },
{ "shopbakersnook.com", true },
{ "shopcoupon.co.za", true },
{ "shopcoupons.co.id", true },
@@ -29990,10 +30341,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "short-biography.com", true },
{ "short-term-plans.com", true },
{ "shortdiary.me", true },
- { "shorten.ninja", true },
{ "shoshin-aikido.de", true },
+ { "shota.vip", true },
{ "shotbow.net", true },
- { "shotonwhat.com", true },
{ "shouldihookupwithmybarista.com", true },
{ "shouttag.com", true },
{ "show-saratov.ru", false },
@@ -30008,8 +30358,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "showroom.uk", true },
{ "showroom113.ru", true },
{ "showsonar.com", true },
- { "shoxmusic.net", true },
+ { "shoxmusic.net", false },
{ "shredriteservices.com", true },
+ { "shreyansh26.me", true },
{ "shrike.me", false },
{ "shrinidhiclinic.in", true },
{ "shrinkhub.com", true },
@@ -30018,7 +30369,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "shteiman.net", true },
{ "shu-fu.net", true },
{ "shuffleradio.nl", true },
+ { "shugo.net", true },
{ "shulan.moe", true },
+ { "shuletime.ml", true },
{ "shura.eu.org", true },
{ "shuro.de", true },
{ "shuset.dk", true },
@@ -30057,6 +30410,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sidpod.ru", true },
{ "siegemund-frankfurt.de", true },
{ "sieh.es", true },
+ { "siel.nl", true },
{ "sientemendoza.com.ar", true },
{ "sieulog.com", true },
{ "siewert-kau.de", true },
@@ -30076,18 +30430,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "signal.org", true },
{ "signalmaps.co.uk", true },
{ "signaltransmitter.de", true },
- { "signere.com", true },
- { "signere.no", true },
{ "significados.com", true },
{ "significados.com.br", true },
{ "significantbanter.com", true },
{ "signing-milter.org", true },
{ "signix.net", true },
{ "signtul.com", false },
- { "sigsegv.run", true },
{ "sigsrv.net", true },
+ { "sigterm.no", true },
{ "sigterm.sh", true },
{ "siirtutkusu.com", true },
+ { "sikayetvar.com", false },
{ "sikevux.se", true },
{ "sikko.biz", true },
{ "siku-shop.ch", true },
@@ -30113,7 +30466,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "silverartcollector.com", true },
{ "silverbowflyshop.com", true },
{ "silverdragonart.com", true },
- { "silvergoldbull.ba", true },
{ "silvergoldbull.be", true },
{ "silvergoldbull.bg", true },
{ "silvergoldbull.bj", true },
@@ -30142,6 +30494,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "silvergoldbull.ec", true },
{ "silvergoldbull.ee", true },
{ "silvergoldbull.es", true },
+ { "silvergoldbull.fi", true },
{ "silvergoldbull.gd", true },
{ "silvergoldbull.ge", true },
{ "silvergoldbull.gl", true },
@@ -30163,7 +30516,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "silvergoldbull.lt", true },
{ "silvergoldbull.lv", true },
{ "silvergoldbull.ma", true },
- { "silvergoldbull.md", true },
{ "silvergoldbull.mk", true },
{ "silvergoldbull.ml", true },
{ "silvergoldbull.mw", true },
@@ -30189,13 +30541,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "silvergoldbull.ws", true },
{ "silverlinkz.net", true },
{ "silverseen.com", true },
- { "silverstartup.sk", true },
{ "silverwind.io", true },
{ "silvine.xyz", true },
{ "silvobeat.com", true },
{ "sim-karten.net", true },
{ "sim-minaoshi.jp", true },
- { "sim-sim.appspot.com", true },
{ "sim4seed.org", true },
{ "simam.de", true },
{ "simark.ca", true },
@@ -30238,8 +30588,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "simonwoodside.com", true },
{ "simpbx.net", true },
{ "simpel.be", true },
- { "simpeo.fr", true },
- { "simpeo.org", true },
{ "simphony.cz", true },
{ "simpip.com", true },
{ "simple.com", false },
@@ -30250,6 +30598,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "simpleindianrecipes.com", true },
{ "simpleinout.com", true },
{ "simpleinvoices.io", true },
+ { "simplepress.uk", true },
{ "simpletax.ca", true },
{ "simplewire.de", true },
{ "simplexgame.net", true },
@@ -30273,7 +30622,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "simpul.nl", true },
{ "simsnieuws.nl", true },
{ "simukti.net", true },
- { "simumiehet.com", true },
{ "sin-nombre-alleria.de", true },
{ "sin.swiss", true },
{ "sinaryuda.web.id", true },
@@ -30282,12 +30630,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sinclairinat0r.com", true },
{ "sinde.ru", true },
{ "sinergy.ch", true },
+ { "sinfulforums.net", true },
{ "singaporemint.com", true },
{ "singapurfirma.com", true },
- { "singee.site", true },
{ "singel.ch", true },
+ { "singerwang.com", true },
{ "single-in-stuttgart.de", true },
{ "singles-aus-hamburg.de", true },
+ { "singles-berlin.de", true },
{ "singleuse.link", true },
{ "singlu10.org", false },
{ "sinktank.de", true },
@@ -30299,15 +30649,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sinonimosonline.com", true },
{ "sinonimosonline.com.br", true },
{ "sinquin.eu", true },
+ { "sinsojb.me", true },
{ "sint-joris.nl", true },
+ { "sintaxis.org", true },
{ "sinterama.biz", true },
{ "sinuelovirtual.com.br", true },
+ { "sioeckes.hu", true },
{ "sipc.org", true },
- { "sipsik.net", true },
{ "siraweb.org", true },
{ "sirbouncealotcastles.co.uk", true },
{ "sirbouncelot.co.uk", true },
- { "sirburton.com", true },
{ "sirchuk.net", true },
{ "sircon.no", true },
{ "sirena.co.jp", true },
@@ -30327,19 +30678,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sistimiki-anaparastasi.gr", true },
{ "sistov.it", true },
{ "sisv.eu", true },
+ { "sisver.host", true },
+ { "sisver.mx", true },
{ "sit-brn.ru", true },
{ "sit.ec", true },
{ "sitc.sk", true },
{ "sitebuilderreport.com", true },
- { "sitecuatui.com", true },
{ "sitedrive.fi", true },
- { "sitehome.eu", false },
{ "sitehoster.org", true },
{ "sitenv.org", true },
{ "siterencontre.me", true },
{ "sites.google.com", true },
- { "sitesko.de", true },
- { "sitesource101.com", true },
{ "sitesuccessful.com", true },
{ "sitevandaag.nl", true },
{ "sitischu.com", true },
@@ -30354,13 +30703,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sjaakgilsingfashion.nl", true },
{ "sjatsh.com", true },
{ "sjd.is", true },
- { "sjdaws.com", true },
{ "sjdtaxi.com", true },
{ "sjis.me", true },
{ "sjleisure.co.uk", true },
{ "sjoorm.com", true },
+ { "sjsmith.id.au", true },
{ "sjv4u.ch", true },
{ "sk-net.cz", true },
+ { "skala.io", true },
{ "skalarwelle.eu", true },
{ "skanvordoff.ru", true },
{ "skanword.info", true },
@@ -30390,16 +30740,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "skigebiete-test.de", true },
{ "skilletfood.com", true },
{ "skillled.com", true },
+ { "skills2serve.org", true },
{ "skills2services.com", true },
{ "skillseo.com", true },
{ "skimming.net", true },
{ "skin-cosmetic.eu", true },
- { "skinbet.co", true },
{ "skincases.co", true },
{ "skincontracts.co", true },
{ "sking.io", true },
{ "skingame.co", true },
{ "skingames.co", true },
+ { "skinmodo.com", true },
{ "skinpwrd.com", true },
{ "skins.net", true },
{ "skipfault.com", true },
@@ -30422,7 +30773,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "skontorp-enterprise.no", true },
{ "skortekaas.nl", false },
{ "skory.us", true },
+ { "skou.dk", false },
{ "skram.de", true },
+ { "skrimix.tk", true },
{ "skryptersi.pl", true },
{ "sksdrivingschool.com.au", true },
{ "sktan.com", true },
@@ -30439,12 +30792,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "skydrive.live.com", false },
{ "skylgenet.nl", true },
{ "skylightcreative.com.au", true },
+ { "skylinertech.com", true },
{ "skylineservers.com", true },
{ "skylocker.nl", true },
{ "skyloisirs.ch", true },
{ "skyminds.net", true },
{ "skynet233.ch", true },
- { "skynethk.com", false },
+ { "skynethk.com", true },
{ "skynetnetwork.eu.org", true },
{ "skynetz.tk", true },
{ "skype.com", true },
@@ -30452,10 +30806,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "skyris.co", true },
{ "skys-entertainment.com", true },
{ "skysuite.nl", true },
+ { "skytec.host", true },
{ "skyzimba.com.br", true },
{ "sl-bildermacher.de", true },
{ "sl0.us", true },
- { "slab.com", true },
+ { "sl899.com", true },
+ { "sl998.com", true },
{ "slack-files.com", true },
{ "slack.com", true },
{ "sladic.si", false },
@@ -30468,6 +30824,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "slapen17.nl", true },
{ "slash32.co.uk", true },
{ "slashcrypto.org", true },
+ { "slate.to", true },
{ "slatemc.fun", true },
{ "slatop.org", false },
{ "slaughter.com", true },
@@ -30475,11 +30832,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "slavasveta.info", true },
{ "slaws.io", true },
{ "sld08.com", true },
+ { "sleeping.town", true },
{ "sleeplessbeastie.eu", true },
{ "sleepmap.de", true },
{ "sleepstar.co.uk", true },
{ "sleepstar.de", true },
{ "sleepstar.fr", true },
+ { "sleestak.net", true },
{ "sleio.com", true },
{ "slever.cz", true },
{ "slevermann.de", true },
@@ -30490,7 +30849,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "slides.zone", true },
{ "slik.ai", true },
{ "slimk1nd.nl", true },
- { "slimmerbouwen.be", true },
{ "slimspots.com", true },
{ "slingo-sta.com", true },
{ "slingo.com", true },
@@ -30501,9 +30859,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "slneighbors.org", true },
{ "slo-net.net", true },
{ "slo-tech.com", true },
- { "sloancom.com", false },
+ { "sloancom.com", true },
{ "slonep.net", true },
{ "slopeedge.com", true },
+ { "slotarazzi.com", true },
{ "slotboss.co.uk", true },
{ "slotcar.com", false },
{ "slotfara.com", true },
@@ -30513,10 +30872,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "slovenskycestovatel.sk", true },
{ "slow.zone", true },
{ "slowb.ro", true },
- { "slowfood.es", true },
{ "slowgames.xyz", true },
{ "slpower.com", true },
{ "slrd-isperih.com", true },
+ { "sluciaconstruccion.com", true },
{ "sluimann.de", true },
{ "sluitkampzeist.nl", false },
{ "slusham.com", true },
@@ -30531,6 +30890,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "smablo.com", true },
{ "smackhappy.com", true },
{ "smadav.ml", true },
+ { "smallcloudsolutions.co.za", true },
{ "smalldogbreeds.net", true },
{ "smalle-voet.de", true },
{ "smallhadroncollider.com", true },
@@ -30539,6 +30899,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "smaltimento-rifiuti.org", true },
{ "smaltimento.caserta.it", true },
{ "smaltimento.napoli.it", true },
+ { "smaltimento.roma.it", true },
{ "smaltimentoamianto.frosinone.it", true },
{ "smaltimentoamianto.latina.it", true },
{ "smaltimentorifiuti.firenze.it", true },
@@ -30546,16 +30907,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "smares.de", true },
{ "smart-cp.jp", true },
{ "smart-informatics.com", true },
+ { "smart-media-gmbh.de", true },
{ "smart-shapes.co.uk", true },
{ "smart-wohnen.net", true },
{ "smart.gov", true },
{ "smartairkey.com", true },
{ "smartandcom.ch", true },
{ "smartandhappychild.ro", true },
- { "smartboleta.com", true },
{ "smartcheck.gov", true },
{ "smartcleaningcenter.nl", true },
{ "smartcpa.ca", true },
+ { "smartedg.io", true },
{ "smartest-trading.com", true },
{ "smartfit.cz", true },
{ "smartftp.com", true },
@@ -30582,8 +30944,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "smartvideo.io", true },
{ "smartviewing.com", true },
{ "smartwelve.com", true },
+ { "smartwoodczech.cz", true },
{ "smartwritingservice.com", true },
- { "smartwurk.nl", true },
+ { "smartwurk.nl", false },
{ "smash-gg.club", true },
{ "smatch.com", true },
{ "smb445.com", true },
@@ -30604,6 +30967,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "smipty.com", true },
{ "smit.com.ua", true },
{ "smit.ee", true },
+ { "smith.co", true },
{ "smithandcanova.co.uk", false },
{ "smithchow.com", true },
{ "smithfieldbaptist.org", true },
@@ -30611,6 +30975,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "smmcab.website", true },
{ "smmlaba.io", true },
{ "smokeandmirrors.agency", true },
+ { "smokinghunks.com", true },
{ "smol.cat", true },
{ "smoo.st", true },
{ "smoothcomp.com", true },
@@ -30624,8 +30989,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "smorgasblog.ie", true },
{ "smow.com", true },
{ "smow.de", true },
- { "smries.com", false },
- { "sms1.ro", true },
+ { "smplr.uk", true },
+ { "sms.storage", true },
{ "smsappointment.com", true },
{ "smsben.net", true },
{ "smsbrana.cz", true },
@@ -30638,7 +31003,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "smuncensored.com", true },
{ "smutba.se", true },
{ "smutek.net", true },
- { "smx.net.br", true },
{ "snackbesteld.nl", true },
{ "snafu.cz", true },
{ "snakafya.com", true },
@@ -30672,11 +31036,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "snelxboxlivegold.nl", true },
{ "snerith.com", true },
{ "snfdata.com", false },
- { "snic.website", true },
{ "sniderman.eu.org", true },
{ "sniderman.pro", true },
{ "sniderman.us", true },
- { "sniderman.xyz", true },
{ "sniep.net", true },
{ "snight.co", true },
{ "snille.com", true },
@@ -30687,7 +31049,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "snopyta.com", true },
{ "snote.io", true },
{ "snoupon.com", true },
- { "snovey.com", true },
{ "snow-online.com", true },
{ "snow-online.de", true },
{ "snow.dog", true },
@@ -30701,6 +31062,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "snowpak.com", true },
{ "snowplane.net", true },
{ "snowraven.de", true },
+ { "snowyluma.me", true },
{ "snrat.com", true },
{ "snrub.co", true },
{ "snuff.porn", true },
@@ -30719,16 +31081,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sobotkama.eu", true },
{ "sobreporcentagem.com", true },
{ "soc.net", true },
+ { "socal-babes.com", true },
{ "soccersavings.com", true },
{ "soccorso-stradale.org", true },
{ "sochi-sochno.ru", true },
+ { "sociability.dk", true },
{ "social-events.net", false },
{ "social-media-strategies.it", true },
- { "socialdj.de", true },
- { "socialfacecook.com", true },
{ "socialhams.net", true },
{ "socializam.com", true },
{ "socialmedia.ro", true },
+ { "socialnitro.com", true },
{ "socialnous.co", true },
{ "socialrank.com", true },
{ "socialsecurity.gov", false },
@@ -30774,7 +31137,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sogola.com", true },
{ "sogravatas.com.br", true },
{ "sogutma.com.tr", true },
- { "soia.ca", true },
+ { "sohamroy.me", true },
{ "soinvett.com", true },
{ "soju.fi", true },
{ "sokche.com", true },
@@ -30799,11 +31162,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sole-software.de", true },
{ "sole.gmbh", true },
{ "soledadpenades.com", true },
+ { "solentbasketball.co.uk", true },
{ "solentbubblesandbounce.co.uk", true },
{ "soleria.eu", true },
{ "solesoftware.de", true },
{ "soleus.nu", false },
{ "solfegiator.ch", true },
+ { "soli.cafe", true },
+ { "solicafe.at", true },
{ "solidshield.com", true },
{ "solidtuesday.com", true },
{ "solihullcarnival.co.uk", true },
@@ -30816,24 +31182,25 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "solomisael.com", true },
{ "solomo.pt", true },
{ "solonotizie24.it", true },
- { "solos.im", true },
{ "solsocog.de", true },
{ "soluphant.de", true },
{ "solus-project.com", true },
{ "solutionhoisthire.com.au", true },
{ "solvation.de", true },
- { "solve-it.se", true },
{ "solved.tips", true },
{ "solvemethod.com", true },
{ "solvingproblems.com.au", true },
{ "solvops.com", true },
{ "somaini.li", true },
+ { "somali-derp.com", true },
{ "somaliagenda.com", true },
{ "somaliaonline.com", true },
{ "somanao.com", true },
{ "somcase.com.br", true },
{ "somecrazy.com", true },
+ { "somersetscr.nhs.uk", true },
{ "somersetwellbeing.nhs.uk", true },
+ { "somewherein.jp", true },
{ "sommefeldt.com", true },
{ "somosnoticia.com.br", true },
{ "sompani.com", true },
@@ -30844,6 +31211,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sonarqube.com", false },
{ "sonavankova.cz", true },
{ "sondergaard.de", true },
+ { "sondersobk.dk", true },
{ "songluck.com", true },
{ "songsmp3.co", true },
{ "songsmp3.com", true },
@@ -30853,8 +31221,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "songsmp3.net", true },
{ "songsthatsavedyourlife.com", true },
{ "songtianyi.com", true },
+ { "songzhuolun.com", true },
{ "soniafauville.com", true },
- { "sonialive.com", true },
{ "sonic.studio", true },
{ "sonicdoe.com", true },
{ "sonixonline.com", true },
@@ -30864,7 +31232,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "soohealthy.nl", true },
{ "soomee.be", true },
{ "soomee1.be", true },
- { "soontm.de", true },
{ "soopure.nl", true },
{ "soph.jp", true },
{ "soph.us", true },
@@ -30873,6 +31240,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sophiakligys.com", true },
{ "sophieandtrey.com", true },
{ "soprabalao.com.br", true },
+ { "soquee.net", true },
{ "sor.so", true },
{ "soraharu.com", true },
{ "soraiaschneider.com.br", true },
@@ -30888,7 +31256,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sorz.org", true },
{ "sos-falegname.it", true },
{ "sos-idraulico.it", true },
- { "sos.de", true },
{ "sosoftplay.co.uk", true },
{ "sospromotions.com.au", true },
{ "sostacancun.com", true },
@@ -30902,7 +31269,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sou-co.jp", true },
{ "soubriquet.org", true },
{ "soufastnet.com.br", true },
- { "sougi-review.top", true },
{ "souki.cz", true },
{ "soukodou.jp", true },
{ "soul-source.co.uk", true },
@@ -30913,14 +31279,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "soumikghosh.com", true },
{ "soumya92.me", true },
{ "soundabout.nl", true },
+ { "soundbytemedia.com", true },
{ "soundedj.com.br", true },
{ "soundeo.com", true },
{ "soundeo.net", true },
{ "soundgasm.net", true },
{ "soundhunter.xyz", false },
- { "soundsecurity.io", true },
- { "souqtajmeel.com", true },
+ { "soundscrate.com", true },
{ "sour.is", true },
+ { "souravsaha.com", true },
{ "sourcebox.be", true },
{ "sourcely.net", true },
{ "sourceway.de", true },
@@ -30946,7 +31313,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sowlutions.com", true },
{ "soybase.org", true },
{ "sozai-good.com", true },
- { "sozialy.com", false },
+ { "sozialy.com", true },
{ "sozon.ca", true },
{ "sp-sephiroth.jp", true },
{ "sp.com.pl", true },
@@ -30956,27 +31323,29 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "spacedirectory.org", true },
{ "spacedots.net", true },
{ "spacehighway.ms", true },
- { "spacehost.de", false },
+ { "spacehost.de", true },
{ "spacestation13.com", true },
+ { "spacinov.com", true },
+ { "spacivox.com", true },
{ "spackova.cz", true },
{ "spaconnection.com", true },
{ "spahireleeds.co.uk", true },
{ "spaid.xyz", false },
{ "spakurort.eu", true },
- { "spaldingwall.com", true },
{ "spamdrain.com", true },
{ "spamwc.de", true },
{ "spanda.io", true },
{ "spanjeflydrive.nl", true },
{ "spanyolul.hu", true },
{ "spar-ni.co.uk", true },
- { "spar.co.uk", false },
{ "sparanoid.com", true },
{ "sparendirekt.at", true },
{ "sparkasse.de", true },
{ "sparkforautism.org", true },
{ "sparklatvia.lv", true },
{ "sparklebastard.com", true },
+ { "sparkresearch.net", true },
+ { "sparkreviewcenter.com", true },
{ "sparprofi.at", true },
{ "sparta-en.org", true },
{ "sparta-solutions.de", true },
@@ -30989,15 +31358,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "spaziopervoi.com.br", true },
{ "spazturtle.co.uk", true },
{ "spazzacamino.roma.it", true },
+ { "spd-pulheim-mitte.de", true },
{ "spdepartamentos.com.br", true },
{ "spdf.net", true },
+ { "spdillini.com", true },
{ "speak-polish.com", true },
{ "spearfishingmx.com", true },
{ "speargames.net", true },
{ "specialtyalloys.ca", true },
{ "speciesism.com", true },
+ { "spectreattack.com", true },
{ "spectrosoftware.de", true },
- { "spedplus.com.br", false },
+ { "spedition-transport-umzug.de", true },
{ "speech-balloon.com", true },
{ "speechdrop.net", true },
{ "speechmate.com", true },
@@ -31009,14 +31381,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "speedsportofhull.co.uk", true },
{ "speedtailors.com", true },
{ "speedtest-russia.com", true },
+ { "speedychat.it", true },
{ "speeltoneel.nl", true },
{ "speerpunt.info", true },
{ "speets.ca", true },
{ "speich.net", true },
{ "spek.tech", true },
+ { "speletrodomesticos.com.br", true },
{ "spellcheck24.net", true },
+ { "spellcheckci.com", true },
{ "spellchecker.net", true },
- { "spendwise.com.au", true },
{ "spenglerei-shop.de", true },
{ "sperohub.com", true },
{ "sperrstun.de", true },
@@ -31026,19 +31400,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sphido.org", true },
{ "spicydog.org", true },
{ "spicymatch.com", true },
- { "spidermail.tk", true },
- { "spidernet.tk", true },
{ "spideroak.com", true },
{ "spiders.org.ua", true },
{ "spielezar.ch", true },
{ "spielland.ch", true },
{ "spiellawine.de", true },
- { "spiet.nl", true },
{ "spiff.eu", true },
{ "spiga.ch", true },
{ "spillersfamily.net", true },
+ { "spillmaker.no", false },
{ "spilogkoder.dk", true },
{ "spinalien.net", true },
+ { "spindle.com.ph", true },
{ "spindrift.com", true },
{ "spingenie.com", true },
{ "spinner.dnshome.de", true },
@@ -31046,7 +31419,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "spinspin.wtf", true },
{ "spiralschneiderkaufen.de", true },
{ "spirella-shop.ch", true },
- { "spirit-hunters-germany.de", true },
+ { "spirit55555.dk", true },
{ "spiritual.dating", true },
{ "spiritualife.net", true },
{ "spiritualregression.com.au", true },
@@ -31076,8 +31449,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "spoofhaus.com", true },
{ "spookbook.net", true },
{ "spookquest.com", true },
+ { "spookyinternet.com", true },
{ "spoopy.link", true },
- { "sporara.com", true },
{ "sporcard.com", true },
{ "spornkuller.de", true },
{ "sport-in-sundern.de", true },
@@ -31085,7 +31458,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sport-potreby.sk", true },
{ "sport-socken.net", true },
{ "sport247.bet", true },
- { "sportakrobatik.at", true },
{ "sportbetuwe.nl", true },
{ "sporter.com", true },
{ "sportflash.info", true },
@@ -31096,7 +31468,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sportressofblogitude.com", true },
{ "sports.dating", true },
{ "sportsjaw.com", true },
- { "sportsmanadvisor.com", false },
{ "sportsmansblog.com", true },
{ "sportstraineradvisor.com", true },
{ "sporttown.it", true },
@@ -31108,6 +31479,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "spottedpenguin.co.uk", true },
{ "spotteredu.com", true },
{ "spotupload.com", true },
+ { "sppin.fr", true },
{ "spr.id.au", true },
{ "sprachfreudehoch3.de", true },
{ "sprayforce.com", true },
@@ -31117,14 +31489,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "spree.co.za", true },
{ "spreed.me", true },
{ "spricknet.de", true },
- { "sprigings.com", true },
{ "springerundpartner.de", true },
{ "springfieldbricks.com", true },
+ { "springreizen.nl", true },
{ "sprinklermanohio.com", true },
{ "spritmonitor.de", true },
{ "spritsail.io", true },
- { "sproing.ca", true },
- { "spron.in", true },
{ "sprucecreekclubs.com", true },
{ "sprucecreekgcc.com", true },
{ "sps-lehrgang.de", true },
@@ -31145,13 +31515,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sqlapius.net", true },
{ "sqlfeatures.com", true },
{ "sqr-training.com", true },
- { "sqroot.eu", true },
- { "squaddraft.com", true },
{ "squadlinx.com", true },
{ "square-gaming.org", true },
{ "square-src.de", false },
{ "square.com", false },
- { "squarelab.it", true },
{ "squareonebgc.com.ph", true },
{ "squareup.com", false },
{ "squawk.cc", true },
@@ -31174,8 +31541,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "srroddy.com", true },
{ "srun.in", true },
{ "srv.so", true },
+ { "srv.solutions", true },
{ "srvc.io", true },
{ "ss.com", true },
+ { "ss.lazio.it", true },
{ "ss.lt", true },
{ "ss.lv", true },
{ "ss.ua", true },
@@ -31189,9 +31558,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ssc8689.com", true },
{ "ssc8689.net", true },
{ "sscd.no", true },
- { "ssco.xyz", true },
- { "ssconn.com", true },
- { "ssdax.com", false },
+ { "ssdax.com", true },
{ "ssdservers.co.uk", true },
{ "ssenberg.nl", true },
{ "ssh-keys.online", true },
@@ -31206,6 +31573,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ssl247.com.mx", true },
{ "ssl247.de", true },
{ "ssl247.dk", true },
+ { "ssl888.com", true },
{ "sslbrain.com", true },
{ "sslcertificaten.nl", true },
{ "sslcertificateshop.com", true },
@@ -31231,6 +31599,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "st-antonius-kuenzell.de", true },
{ "st-kilian-markt-erlbach.de", true },
{ "st-news.de", true },
+ { "st-shakyo.jp", true },
{ "st-steuern.de", true },
{ "staatschutz.at", true },
{ "staatsschutz.at", true },
@@ -31244,7 +31613,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "stadm.com", true },
{ "stadsbygd.info", true },
{ "stadt-apotheke-muensingen.de", true },
- { "stadtbuecherei-bad-wurzach.de", true },
{ "stadterneuerung-hwb.de", true },
{ "stadtpapa.de", true },
{ "stadtplan-ilmenau.de", true },
@@ -31254,7 +31622,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "stageirites.com", true },
{ "stageirites.fr", true },
{ "stageirites.org", true },
- { "stahlfors.com", true },
+ { "stahlfors.com", false },
{ "stainedglass.net.au", true },
{ "stair.ch", true },
{ "stairfallgames.com", true },
@@ -31274,7 +31642,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "stamonicatourandtravel.com", true },
{ "stamparmakarije.me", true },
{ "stampederadon.com", true },
- { "stanandjerre.org", true },
{ "standagainstspying.org", true },
{ "standard.co.uk", true },
{ "standardequipment.com", true },
@@ -31287,23 +31654,25 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "starcomproj.com", true },
{ "stardanceacademy.net", true },
{ "stardust-entertainments.co.uk", true },
+ { "stareplanymiast.pl", true },
{ "starflix.uk", true },
{ "starfm.de", true },
{ "stargarder-jungs.de", true },
+ { "stargatelrp.co.uk", true },
{ "stargazer.de", true },
+ { "starinvestors.in", true },
{ "starka.st", true },
{ "starkbim.com", true },
+ { "starking.net.cn", true },
{ "starlightentertainmentdevon.co.uk", true },
{ "starlim.co.in", true },
{ "starlim.org", true },
{ "starmtech.fr", true },
{ "starpeak.org", true },
{ "starphotoboothsni.co.uk", true },
- { "starsam80.net", true },
{ "starskim.cn", true },
{ "starstreak.net", true },
{ "startaninflatablebusiness.com", true },
- { "starteesforsale.co.za", true },
{ "startergen.com", true },
{ "startlab.sk", true },
{ "startle.cloud", true },
@@ -31320,7 +31689,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "stat.ink", true },
{ "statebuildinggroup.com", true },
{ "statecollegemortgages.com", true },
- { "static-692b8c32.de", true },
{ "static-myfxee-808795.c.cdn77.org", true },
{ "static-myfxoau-808795.c.cdn77.org", true },
{ "static-myfxouk-808795.c.cdn77.org", true },
@@ -31342,24 +31710,25 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "stay.black", true },
{ "stayme.cz", true },
{ "stayschemingco.com", true },
- { "stb-schefczyk.de", true },
{ "stb-strzyzewski.de", true },
{ "stbennett.org", true },
{ "stcu.org", false },
{ "std-home-test.com", true },
{ "stderr.cc", true },
{ "stdev.org", true },
+ { "steakhaus-zumdorfbrunnen.de", true },
{ "steakovercooked.com", true },
+ { "stealingheather.com", true },
{ "stealsaga.net", true },
{ "steamdb.info", true },
{ "steamerrors.com", true },
{ "steamgifts.com", true },
- { "steamhours.com", true },
{ "steampress.io", true },
{ "steamscore.info", true },
{ "steamstat.us", true },
{ "steamtrades.com", true },
{ "steamwhale.com", true },
+ { "stebet.net", true },
{ "steborio.pw", true },
{ "steckel.cc", true },
{ "stedb.eu", true },
@@ -31369,7 +31738,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "steelephys.com.au", true },
{ "steelmounta.in", true },
{ "steemit.com", true },
- { "steenackers.be", true },
{ "steerty.com", true },
{ "stefan-bayer.eu", true },
{ "stefan-rothe.ch", true },
@@ -31378,10 +31746,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "stefanbayer.de", true },
{ "stefancosma.xyz", true },
{ "stefanorossi.it", true },
- { "stefanovski.io", false },
+ { "stefanovski.io", true },
{ "stefanvanburen.xyz", true },
{ "stefany.eu", true },
{ "steffentreeservice.com", true },
+ { "stegmaier-immobilien.de", true },
{ "steidlewirt.de", true },
{ "steigerlegal.ch", true },
{ "steigerplank.com", false },
@@ -31466,6 +31835,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "steyaert.be", false },
{ "stforex.com", true },
{ "stfw.info", true },
+ { "stge.uk", true },
{ "stichtingliab.nl", true },
{ "stichtingscholierenvervoerzeeland.nl", true },
{ "stichtingsticky.nl", true },
@@ -31473,16 +31843,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "stickandpoketattookit.com", true },
{ "stickeramoi.com", true },
{ "stickergiant.com", true },
- { "stickertuningfetzt.de", true },
+ { "stickertuningfetzt.de", false },
{ "stickies.io", true },
{ "stickmanventures.com", true },
{ "stickswag.eu", true },
{ "stiffordacademy.org.uk", true },
{ "stift-kremsmuenster.at", true },
- { "stig.io", false },
+ { "stiftemaskinen.no", true },
{ "stigharder.com", true },
{ "stigviewer.com", true },
- { "stijnbelmans.be", true },
+ { "stijncrevits.be", true },
{ "stijnodink.nl", true },
{ "stikic.me", true },
{ "stikkie.me", true },
@@ -31502,12 +31872,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "stitchfiddle.com", true },
{ "stivesbouncycastlehire.co.uk", true },
{ "stjohnin.com", true },
- { "stjohnmiami.org", true },
- { "stjohnsc.com", true },
{ "stln.ml", true },
{ "stlu.de", true },
{ "stlukesbrandon.org", true },
{ "stm-net.de", true },
+ { "stmaryextra.uk", true },
{ "stmlearning.com", true },
{ "stmsolutions.pl", true },
{ "stneotsbouncycastlehire.co.uk", true },
@@ -31518,6 +31887,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "stodieck.com", true },
{ "stoebermehl.at", true },
{ "stoffelnet.de", true },
+ { "stogiesandmash.com", true },
+ { "stoinov.com", true },
{ "stokvistrading.nl", true },
{ "stolin.info", true },
{ "stolina.de", false },
@@ -31532,13 +31903,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "stonewuu.com", true },
{ "stony.com", true },
{ "stonystratford.org", true },
- { "stopbreakupnow.org", true },
{ "stopbullying.gov", true },
{ "stopfraud.gov", false },
{ "stopthethyroidmadness.com", true },
+ { "storageideas.uk", true },
{ "stordbatlag.no", true },
{ "storedsafe.com", true },
{ "storillo.com", true },
+ { "storm-family.com", true },
{ "stormi.io", true },
{ "storvann.net", true },
{ "storvann.no", true },
@@ -31552,6 +31924,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "stouter.nl", true },
{ "stoxford.com", true },
{ "straatderzotten.nl", true },
+ { "strafensau.de", true },
{ "strahlende-augen.info", true },
{ "straightedgebarbers.ca", true },
{ "strajnar.si", true },
@@ -31563,7 +31936,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "strategiccapital.com", true },
{ "strategiclivingblog.com", true },
{ "strategie-zone.de", true },
- { "strathewerd.de", true },
{ "stratmann-b.de", true },
{ "stratuscloud.co.za", true },
{ "stratuscloudconsulting.cn", true },
@@ -31579,10 +31951,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "stravers.shoes", true },
{ "streamchan.org", true },
{ "streamlineautogroup.com", true },
- { "streampanel.net", true },
{ "streampleasure.xyz", true },
{ "streams.dyndns.org", true },
- { "streamthemeeting.com", true },
{ "street-smart-home.de", true },
{ "street-tek.com", true },
{ "streetdancecenter.com", true },
@@ -31603,18 +31973,20 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "stringtoolbox.com", true },
{ "stringvox.com", true },
{ "stripe.com", true },
- { "striptizer.tk", true },
{ "strivephysmed.com", false },
{ "strm.hu", true },
+ { "strming.com", true },
{ "strobeltobias.de", true },
{ "strobeto.de", true },
{ "strobotti.com", true },
+ { "stroeerdigital.de", true },
{ "stroginohelp.ru", true },
{ "strom.family", true },
{ "stromberger.org", true },
{ "strommenhome.com", true },
{ "strongpassword.club", true },
{ "strongrandom.com", false },
+ { "strongsalpinesucculents.com", true },
{ "strongtowerpc.com", true },
{ "stroomacties.nl", true },
{ "strozik.de", true },
@@ -31644,7 +32016,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "studentrightsadvocate.org", true },
{ "studentse.fr", true },
{ "studenttenant.com", true },
- { "studer.su", true },
+ { "studiebegeleiding-haegeman.be", true },
{ "studiemeter.nl", true },
{ "studienportal.eu", true },
{ "studienservice.de", true },
@@ -31661,6 +32033,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "studiolegalepaternostro.it", true },
{ "studiomarcella.com", true },
{ "studionowystyl.pl", true },
+ { "studiopop.com.br", true },
{ "studioproapp.com", true },
{ "studioriehl.com", true },
{ "studioscherp.nl", true },
@@ -31672,9 +32045,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "studipro-marketing.fr", true },
{ "studium.cz", true },
{ "studlan.no", true },
- { "studport.rv.ua", true },
{ "studyin.jp", true },
- { "studying-neet.com", true },
{ "studytactics.com", true },
{ "stuermer.me", true },
{ "stuetzredli.ch", true },
@@ -31684,7 +32055,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "stuka-art.de", true },
{ "stulda.cz", false },
{ "stumeta.de", true },
- { "stumeta2018.de", true },
+ { "stumeta2019.de", true },
{ "stumf.si", true },
{ "stuntmen.xyz", true },
{ "stupendous.net", false },
@@ -31731,28 +32102,29 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "subterfuge.io", true },
{ "suburban-landscape.net", true },
{ "suburbaninfinitioftroyparts.com", true },
+ { "subversive-tech.com", true },
{ "succ.in", true },
{ "succesprojekter.dk", true },
- { "successwithflora.com", true },
- { "suche.org", true },
+ { "succubus.xxx", true },
{ "suchmaschinen-werkstatt.de", true },
{ "suckmyan.us", false },
{ "sucretown.net", true },
{ "sud66.com", true },
{ "sudaraka.org", true },
{ "sudmotor-occasions.be", true },
+ { "sudo-i.net", true },
{ "sudo.org.au", true },
{ "sudo.ws", true },
- { "sudokian.io", true },
{ "sudoschool.com", true },
{ "suelyonjones.com", true },
{ "suessdeko.de", true },
{ "suevia-ka.de", true },
+ { "suffa.ac", true },
{ "suffix.ru", true },
- { "suffts.de", true },
{ "sufix.cz", true },
{ "sugarandcloth.com", true },
{ "sugarbrother.com", true },
+ { "sugarfactory.cz", true },
{ "sugarshin.net", true },
{ "suggea.com", true },
{ "suggestim.ch", true },
@@ -31761,6 +32133,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sujatadev.in", true },
{ "sujoydhar.in", true },
{ "suki.moe", true },
+ { "suko.pe", true },
{ "sukrie.net", true },
{ "suksit.com", true },
{ "sulek.eu", true },
@@ -31770,10 +32143,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "summa-prefis.com", true },
{ "summa.eu", false },
{ "summercampthailand.com", true },
+ { "summershomes.com", true },
{ "sumoatm.com", false },
{ "sumthing.com", true },
{ "sun-leo.co.jp", true },
- { "sun.re", true },
+ { "sun-wellness-online.com.vn", true },
{ "sunboxstore.jp", true },
{ "sunbritetv.com", true },
{ "sunchasercats.com", true },
@@ -31785,7 +32159,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sunfulong.blog", true },
{ "sunfulong.me", true },
{ "sunjaydhama.com", true },
+ { "sunjiutuo.com", true },
+ { "sunlit.cloud", true },
{ "sunn.ie", true },
+ { "sunoikisis.org", true },
{ "sunsetwx.com", true },
{ "sunshinesf.org", true },
{ "sunsmartresorts.com", true },
@@ -31795,13 +32172,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "suool.net", true },
{ "supa.sexy", true },
{ "supastuds.com", true },
- { "super-demarche.com", true },
- { "super-o-blog.com", true },
+ { "super-erotica.ru", true },
{ "superaficionados.com", true },
{ "superbart.nl", true },
{ "superbdistribute.com", true },
{ "superbouncebouncycastles.com", true },
{ "superbowlkneel.com", true },
+ { "superbshare.com", true },
{ "supercalorias.com", true },
{ "supercastlesadelaide.com.au", true },
{ "supercastlesbrisbane.com.au", true },
@@ -31816,6 +32193,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "superhome.com.au", true },
{ "supermarx.nl", true },
{ "supermercadosdia.com.ar", true },
+ { "supermercato24.it", true },
{ "supermil.ch", true },
{ "supern0va.net", true },
{ "supernaut.info", true },
@@ -31826,6 +32204,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "supersonnig-festival.de", true },
{ "supersonnigfestival.de", true },
{ "supersteosbouncycastles.com", true },
+ { "superstropdas.nl", true },
{ "supersu.kr", true },
{ "superswingtrainer.com", true },
{ "supertasker.org", true },
@@ -31858,6 +32237,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "surpreem.com", true },
{ "survature.com", true },
{ "surveyhealthcare.com", true },
+ { "surveyinstrumentsales.com", true },
{ "surveymill.co.uk", true },
{ "survivalmonkey.com", true },
{ "survivebox.fr", true },
@@ -31871,20 +32251,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sushibesteld.nl", true },
{ "sushifrick.de", true },
{ "sushikatze.de", true },
- { "sushiwereld.be", true },
{ "susosudon.com", true },
{ "suspension-shop.com", true },
- { "sussexwebsites.info", false },
{ "sustainabilityknowledgegroup.com", true },
{ "sustainoss.org", true },
{ "sustsol.com", true },
{ "sutas.market", true },
- { "suttonbouncycastles.co.uk", true },
{ "suurhelsinki.cf", true },
{ "suuria.de", true },
{ "suwalls.com", true },
{ "suzi3d.com", true },
- { "suzukikazuki.com", true },
{ "suzukimarinepress.com", true },
{ "sv-1966-medenbach.de", true },
{ "sv-turm-hohenlimburg.de", true },
@@ -31905,6 +32281,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "svendubbeld.nl", true },
{ "sveneckelmann.de", true },
{ "svenjaundchristian.de", true },
+ { "svenmuller.nl", true },
{ "svennd.be", true },
{ "svetandroida.cz", true },
{ "svetlilo.com", true },
@@ -31915,15 +32292,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "svm-it.eu", true },
{ "sw-servers.net", true },
{ "sw33tp34.com", true },
- { "swallsoft.co.uk", true },
- { "swallsoft.com", true },
+ { "swagsocial.net", true },
{ "swankism.com", true },
{ "swansdoor.org", true },
{ "swap.gg", true },
{ "swapadoodle.com", true },
{ "swarfarm.com", true },
{ "swarlys-server.de", true },
- { "swarmation.com", true },
{ "swat4stats.com", true },
{ "swattransport.ae", true },
{ "sway-cdn.com", true },
@@ -31939,12 +32314,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sweetgood.de", true },
{ "sweets-mimatsu.com", true },
{ "swehack.org", true },
- { "swerve-media-testbed-03.co.uk", true },
{ "swetrust.com", true },
{ "swfmax.com", true },
+ { "swiftpk.net", true },
{ "swiftqueue.com", true },
{ "swilly.org", true },
{ "swimbee.nl", true },
+ { "swimready.net", true },
{ "swimwear365.co.uk", true },
{ "swineson.me", true },
{ "swing-belleville.de", true },
@@ -31960,17 +32336,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "swissfreshaircan.com", true },
{ "swissid.ch", true },
{ "swisslinux.org", true },
+ { "swisstechassociation.ch", true },
{ "swisstechtalks.ch", true },
- { "swissxperts.ch", true },
+ { "switch-trader.com", true },
{ "switch.moe", true },
{ "switcheo.exchange", true },
{ "switcheo.rocks", true },
{ "switzerland-family-office.com", true },
{ "swordfeng.xyz", true },
- { "swordfighting.net", true },
- { "swuosa.org", false },
{ "swvaux.com", true },
{ "swyn.net", true },
+ { "sx8.ovh", true },
{ "sxistolithos.gr", true },
{ "sy-anduril.de", true },
{ "sy24.ru", true },
@@ -31989,7 +32365,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sykepleien.no", false },
{ "sylaps.com", true },
{ "syleam.in", true },
+ { "sylfie.net", true },
{ "syllogi.xyz", true },
+ { "sylvaincombe.net", true },
{ "sylvaindurand.fr", true },
{ "sylvaindurand.org", true },
{ "sylvaloir.fr", true },
@@ -32013,8 +32391,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "synaptickz.me", true },
{ "synatra.co", true },
{ "sync-it.no", true },
+ { "synccentre.com", true },
{ "syncflare.com", true },
{ "synchrocube.com", true },
+ { "synchrolarity.com", true },
{ "synchronyse.com", true },
{ "synchtu.be", true },
{ "syncrise.co.jp", true },
@@ -32024,6 +32404,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "synergyworkingdogclub.com", true },
{ "synerionagile.com", true },
{ "synfin.org", true },
+ { "synicalsyntax.com", true },
{ "synony.me", true },
{ "synotna.eu", true },
{ "syntaxnightmare.com", true },
@@ -32034,10 +32415,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "syriatalk.org", true },
{ "sysadm.guru", true },
{ "sysadmin.xyz", true },
- { "sysadmins.ro", true },
{ "syscoon.com", true },
{ "sysctl.se", true },
{ "sysdb.io", true },
+ { "sysdot.blog", true },
{ "syslogic.io", true },
{ "sysmike.de", true },
{ "systea.fr", true },
@@ -32059,17 +32440,21 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "systemspace.link", true },
{ "systemweb.no", true },
{ "systemzeit.info", true },
+ { "systoolbox.net", true },
{ "sysystems.cz", true },
{ "syt3.net", true },
{ "sytk.me", true },
{ "syy.im", true },
{ "syzygy-tables.info", true },
+ { "szafkirtv.pl", true },
{ "szagun.net", true },
{ "szamitogepdepo.com", true },
{ "szaydon.me", false },
+ { "szczot3k.pl", true },
{ "szechenyi2020.hu", true },
{ "szentistvanpt.sk", true },
{ "szerelem.love", true },
+ { "szunia.com", true },
{ "szybkiebieganie.pl", true },
{ "szyndler.ch", true },
{ "t-hawk.com", true },
@@ -32085,16 +32470,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "t47.io", true },
{ "t4c.link", true },
{ "t4cc0.re", true },
+ { "t5118.com", true },
{ "t7e.de", false },
{ "ta-65.com", true },
{ "ta-sports.net", true },
{ "ta65.com", true },
{ "taabe.net", true },
{ "taartbesteld.nl", true },
- { "taartenfeesies.nl", true },
{ "tabarnak.ga", true },
{ "tabernadovinho.com.br", true },
- { "tabino.top", true },
+ { "tabhui.com", true },
{ "tabithawebb.co.uk", true },
{ "tabledusud.be", true },
{ "tabledusud.nl", true },
@@ -32104,7 +32489,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tablotv.com", false },
{ "taborsky.cz", true },
{ "tac-volley.com", true },
- { "tachyonapp.com", true },
+ { "tachi.uk", true },
{ "tacklinglife.com", true },
{ "tacklog.com", true },
{ "tacomafia.net", false },
@@ -32115,6 +32500,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tadeo.ca", true },
{ "tadluedtke.com", true },
{ "tadtadya.com", true },
+ { "tadu.de", true },
{ "tagabrand.co.uk", true },
{ "tagdocumentary.com", true },
{ "taggedpdf.com", false },
@@ -32127,7 +32513,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tai-in.com", true },
{ "tai-in.net", true },
{ "tailandfur.com", true },
- { "tailpuff.net", true },
{ "tails.boum.org", true },
{ "taimane.com", true },
{ "taishon.nagoya", true },
@@ -32135,11 +32520,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "taiwan.dating", true },
{ "taiwantour.info", true },
{ "taiyouko-hatuden.net", true },
+ { "taizegroep.nl", true },
{ "tajper.pl", true },
{ "take1give1.com", false },
- { "takebackyourstate.com", true },
- { "takebackyourstate.net", true },
- { "takebackyourstate.org", true },
{ "takeitoffline.co.uk", true },
{ "takemoto-ped.com", true },
{ "taken.pl", true },
@@ -32158,40 +32541,41 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "taler.net", true },
{ "talideon.com", false },
{ "talk.google.com", true },
- { "talk.xyz", true },
{ "talkgadget.google.com", true },
{ "talking12.com", true },
{ "talkingmoose.net", true },
{ "talkreal.net", true },
{ "talktech.com", true },
+ { "talktobot.com", true },
{ "talktodarcy.com", true },
{ "talktwincities.com", true },
{ "talkwithyourbaby.org", true },
{ "tallcraft.com", true },
{ "talldude.net", true },
{ "talltreeskv.com.au", true },
+ { "tallyfy.com", true },
{ "talon.rip", true },
+ { "talroo.com", true },
{ "talsi.eu", true },
{ "talun.de", true },
{ "tamashimx.net", true },
- { "tamasszabo.net", true },
+ { "tambre.ee", true },
{ "tamchunho.com", true },
{ "tamindir.com", true },
{ "tammy.pro", true },
{ "tampabaybusinesslistings.com", true },
- { "tanak3n.xyz", false },
+ { "tamposign.fr", true },
+ { "tamriel-rebuilt.org", true },
+ { "tanak3n.xyz", true },
{ "tancredi.nl", true },
- { "tandem-trade.ru", true },
+ { "tandem-trade.ru", false },
{ "tandempartnerships.com", true },
- { "tandk.com.vn", true },
{ "tandzorg.link", true },
{ "tangel.me", true },
{ "tangemann.org", true },
- { "tangiblesecurity.com", true },
{ "tango-cats.de", true },
{ "tango-ouest.com", true },
{ "tangoalpha.co.uk", true },
- { "tangsisi.com", true },
{ "tanhit.com", true },
{ "taniafitness.co.uk", true },
{ "taniafitness.com", true },
@@ -32200,15 +32584,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tankpassen-vergelijken.nl", true },
{ "tankski.co.uk", true },
{ "tannenhof-moelln.de", true },
+ { "tannerryan.ca", true },
{ "tantalos.nl", true },
{ "tantei100.net", true },
- { "tantetilli.de", true },
{ "tanto259.name", false },
{ "tanyanama.com", true },
{ "tanz.info", true },
{ "tanzhijun.com", true },
{ "tanzo.io", true },
{ "taoburee.com", true },
+ { "taoways.com", true },
{ "tapakgram.com", true },
{ "taplemon.at", true },
{ "taplemon.com", true },
@@ -32216,7 +32601,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "taqsim.jp", true },
{ "taquilla.com", true },
{ "taqun.club", true },
- { "taranis.re", true },
+ { "tarantul.org.ua", true },
{ "tarasecurity.co.uk", true },
{ "tarasecurity.com", true },
{ "tarasevich.by", true },
@@ -32226,6 +32611,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "targimieszkaniowe.net", true },
{ "tariff.cc", true },
{ "tarik.io", true },
+ { "tarmexico.com", true },
{ "tarsan.cz", true },
{ "tartaneagle.org.uk", true },
{ "tartanhamedshop.com.br", true },
@@ -32234,6 +32620,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "taskin.me", true },
{ "taskotron.fedoraproject.org", true },
{ "taskotron.stg.fedoraproject.org", true },
+ { "tasks.org", true },
{ "taskstream.com", true },
{ "taskulu.com", true },
{ "taskulu.ir", true },
@@ -32243,7 +32630,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tastic.com", true },
{ "tastycake.net", false },
{ "tastystakes.com", true },
- { "tasyacherry-anal.com", true },
{ "tat2grl85.com", true },
{ "tatara.ne.jp", true },
{ "tateesq.com", true },
@@ -32251,6 +32637,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tatiloley.com", true },
{ "tatsidou.gr", true },
{ "tattoo.dating", true },
+ { "tattvaayoga.com", true },
{ "taunhanh.us", true },
{ "tavolaquadrada.com.br", true },
{ "tavsys.net", true },
@@ -32267,8 +32654,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "taxisafmatosinhos.pt", true },
{ "taxiscollectifs.ch", true },
{ "taxlab.co.nz", true },
- { "taxmadras.com", true },
- { "taxspeaker.com", true },
{ "taxsquirrel.com", true },
{ "taylorpearson.me", false },
{ "taylors-castles.co.uk", true },
@@ -32282,12 +32667,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tbonejs.org", true },
{ "tbpixel.com", true },
{ "tbrindus.ca", true },
- { "tbrss.com", true },
{ "tbs-certificates.co.uk", true },
{ "tbspace.de", true },
{ "tbtech.cz", true },
{ "tbuchloh.de", true },
- { "tbys.us", true },
{ "tc-st-leonard.ch", true },
{ "tc.nz", true },
{ "tcacademy.co.uk", true },
@@ -32297,7 +32680,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tcf.org", true },
{ "tcgforum.pl", true },
{ "tcgrepublic.com", true },
- { "tchaka.top", true },
{ "tchannels.tv", true },
{ "tchebb.me", true },
{ "tchebotarev.com", true },
@@ -32310,7 +32692,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tcspartner.net", true },
{ "tdchrom.com", true },
{ "tdfbfoundation.org", true },
- { "tdpblog.site", true },
{ "tdrcartuchos.com.br", true },
{ "tdrs.info", true },
{ "tdsf.io", true },
@@ -32333,7 +32714,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "team-bbd.com", true },
{ "team.house", true },
{ "team3482.com", true },
- { "teamassists.com", true },
{ "teambeam.at", true },
{ "teambeam.ch", true },
{ "teambeam.com", true },
@@ -32355,6 +32735,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "teamupturn.com", true },
{ "teamupturn.org", true },
{ "teamusec.de", true },
+ { "tearoomlints.be", true },
+ { "teasenetwork.com", true },
{ "teaser-trailer.com", true },
{ "teatrarium.com", true },
{ "teb-akademia.pl", true },
@@ -32396,11 +32778,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "techmajesty.com", true },
{ "techmasters.io", true },
{ "techmunchies.net", false },
+ { "technicabv.nl", true },
{ "technicalbrothers.cf", true },
{ "technicallyeasy.net", true },
{ "technicalsystemsprocessing.com", true },
- { "techniclab.net", false },
+ { "techniclab.net", true },
+ { "techniclab.org", true },
+ { "techniclab.ru", true },
{ "technifocal.com", true },
+ { "technik-boeckmann.de", true },
+ { "technikblase.fm", true },
{ "technoinfogroup.it", true },
{ "technologie-innovation.fr", true },
{ "technologyand.me", true },
@@ -32408,7 +32795,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "technoparcepsilon.fr", true },
{ "technoscoots.com", true },
{ "technosorcery.net", true },
- { "technosuport.com", true },
{ "technoswag.ca", true },
{ "technotonic.co.uk", true },
{ "techold.ru", true },
@@ -32424,6 +32810,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "techtalks.no", true },
{ "techtuts.info", true },
{ "techvalue.gr", true },
+ { "techview.link", true },
{ "techviewforum.com", true },
{ "techwayz.com", true },
{ "techwithcromulent.com", true },
@@ -32432,12 +32819,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tecmarkdig.com", true },
{ "tecne.ws", true },
{ "tecnicoelettrodomestici.roma.it", true },
- { "tecnidev.com", true },
{ "tecnoarea.com.ar", true },
{ "tecnobrasilloja.com.br", true },
{ "tecnodritte.it", true },
{ "tecnogazzetta.it", true },
{ "tecnologiasurbanas.com", true },
+ { "tecnologino.com", true },
{ "tecon.co.at", true },
{ "tecyt.com", true },
{ "tedb.us", true },
@@ -32452,12 +32839,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "teemperor.de", true },
{ "teemulintula.fi", true },
{ "teencounseling.com", true },
+ { "teenerotic.net", true },
+ { "teengirl.pub", true },
+ { "teensexgo.com", true },
{ "teesypeesy.com", true },
{ "teeworlds-friends.de", true },
{ "tefek.cz", true },
{ "tege-elektronik.hu", true },
{ "tehcrayz.com", true },
{ "tehrabbitt.com", false },
+ { "tehrankey.ir", true },
{ "tehranperfume.com", true },
{ "teixobactin.com", true },
{ "tejarat98.com", true },
@@ -32465,11 +32856,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "teknik.io", true },
{ "tekniskakustik.se", true },
{ "tekno.de", true },
+ { "teknoforums.com", true },
{ "teknolit.com", true },
{ "tekstschrijvers.net", true },
{ "teksuperior.com", true },
{ "tektuts.com", true },
{ "tekuteku.jp", true },
+ { "telamon.eu", true },
{ "telamon.fr", true },
{ "tele-alarme.ch", true },
{ "tele-assistance.ch", true },
@@ -32481,6 +32874,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "teledivi.com", true },
{ "telefon.report", true },
{ "telefonabonnement.dk", true },
+ { "telefoncek.si", true },
{ "telefonkonferenz.ch", true },
{ "telefonni-ustredna.cz", true },
{ "telefonseelsorge-paderborn.de", true },
@@ -32501,6 +32895,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tellygames.com", true },
{ "teloo.pl", true },
{ "telos-analytics.com", true },
+ { "teltonica.com", true },
{ "teltru.com", true },
{ "telugu4u.net", true },
{ "tem.li", true },
@@ -32510,9 +32905,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "temp.pm", true },
{ "tempa.com.ua", true },
{ "tempdomain.ml", true },
- { "tempflix.com", true },
{ "template-parks.com", true },
{ "templateinvaders.com", true },
+ { "templum.com.br", true },
{ "tempus-aquilae.de", true },
{ "tenable.com.au", true },
{ "tenbos.ch", true },
@@ -32539,7 +32934,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tenthpin.com", true },
{ "tenyx.de", true },
{ "tenzer.dk", true },
- { "tepid.org", true },
{ "tepitus.de", true },
{ "teplofom.ru", true },
{ "teplomash24.ru", true },
@@ -32554,6 +32948,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "terlindung.com", true },
{ "termax.me", true },
{ "termino.eu", true },
+ { "termitemounds.org", true },
+ { "termitinitus.org", true },
{ "termografiranje.si", true },
{ "terra.fitness", true },
{ "terrab.de", false },
@@ -32584,10 +32980,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "test-textbooks.com", true },
{ "test.de", true },
{ "testadren.com", true },
- { "testdomain.ovh", true },
{ "testgeomed.ro", true },
{ "testi.info", true },
- { "testnode.xyz", false },
{ "testomato.com", true },
{ "testosterone-complex.com", true },
{ "testosteronedetective.com", true },
@@ -32643,7 +33037,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tfxstartup.com.br", true },
{ "tgamobility.co.uk", true },
{ "tgb.org.uk", true },
- { "tgbyte.com", true },
{ "tgbyte.de", true },
{ "tgexport.eu", true },
{ "tgmkanis.com", true },
@@ -32663,6 +33056,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "thajskyraj.com", true },
{ "thala.fr", true },
{ "thalan.fr", true },
+ { "thalgott.net", true },
{ "thalhammer.it", true },
{ "thalia.nu", true },
{ "thallinger.me", true },
@@ -32676,11 +33070,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "thcpbees.co.uk", true },
{ "the-body-shop.hu", false },
{ "the-fermenter.com", true },
+ { "the-gdn.net", true },
{ "the-hemingway-code.de", true },
{ "the-mystery.org", true },
{ "the-nash-education-program.com", true },
{ "the-pcca.org", true },
{ "the-webmaster.com", true },
+ { "the-zenti.de", true },
{ "the2f.de", true },
{ "the3musketeers.biz", true },
{ "theactuary.ninja", true },
@@ -32688,6 +33084,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "thealexandertechnique.co.uk", true },
{ "theankhlife.com", true },
{ "theanticellulitediet.com", true },
+ { "theastrocoach.com", true },
{ "thebakers.com.br", true },
{ "thebakery2go.de", true },
{ "thebannerstore.com", true },
@@ -32714,6 +33111,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "thebrightons.co.uk", true },
{ "thebrightons.uk", true },
{ "thebusinessofgoodfilm.com", true },
+ { "thecamels.org", true },
+ { "thecameradivision.com", true },
+ { "thecandidforum.com", true },
{ "thecarolingconnection.com", true },
{ "thecellulitediet.com", true },
{ "thecherryship.ch", true },
@@ -32721,9 +33121,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "theciderlink.com.au", true },
{ "thecitizens.com", true },
{ "thecitywarehouse.clothing", true },
- { "thecloudmigrator.com", true },
{ "thecloudshelter.com", true },
- { "thecoffeepod.co.uk", true },
+ { "thecoffeecamp.com", true },
{ "thecoffeesuperstore.com", true },
{ "thecolumnist.net", true },
{ "thecompany.pl", true },
@@ -32733,33 +33132,29 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "thecrazytravel.com", true },
{ "thecrew-exchange.com", true },
{ "thecrochetcottage.net", true },
- { "thecskr.in", true },
- { "thecsw.com", true },
{ "thecuppacakery.co.uk", true },
{ "thecuriouscat.net", true },
{ "thecuriousdev.com", true },
{ "thecurvyfashionista.com", true },
{ "thecustomdroid.com", true },
+ { "thecustomizewindows.com", true },
{ "thedark1337.com", true },
- { "thedarkartsandcrafts.com", true },
{ "thedebug.life", true },
{ "thederminstitute.com", true },
- { "thedevilwearswibra.nl", true },
{ "thediaryofadam.com", true },
{ "thedisc.nl", true },
{ "thediscovine.com", true },
{ "thedocumentrefinery.com", true },
- { "thedominatorsclan.com", true },
{ "thedreamtravelgroup.co.uk", true },
{ "thedronechart.com", true },
{ "thedutchmarketers.com", true },
{ "theebookkeepers.co.za", true },
+ { "theeducationchannel.info", true },
{ "theeducationdirectory.org", true },
{ "theeighthbit.com", true },
+ { "theel0ja.info", true },
{ "theel0ja.ovh", true },
{ "theemasphere.com", true },
- { "theevergreen.me", true },
- { "theexpatriate.de", true },
{ "thefanimatrix.net", true },
{ "thefasterweb.com", true },
{ "thefbstalker.com", true },
@@ -32771,6 +33166,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "thefox.com.fr", true },
{ "thefrk.pw", true },
{ "thefunfirm.co.uk", true },
+ { "thefurnitureco.uk", true },
{ "thegarrowcompany.com", true },
{ "thegcccoin.com", true },
{ "thegeekdiary.com", true },
@@ -32782,16 +33178,20 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "thegreenmanpottery.com", true },
{ "thegreenpark.co.uk", true },
{ "thegreens.us", true },
+ { "theguitarcompany.nl", true },
{ "thegvoffice.net", true },
{ "thegym.org", true },
{ "thehackerblog.com", true },
+ { "thehairrepublic.net", true },
{ "thehairstandard.com", true },
{ "thehaxbys.co.uk", true },
{ "thehiddenbay.fi", true },
{ "thehiddenbay.info", true },
+ { "thehiddenbay.ws", true },
{ "thehivedesign.org", true },
{ "thehomeicreate.com", true },
{ "thehookup.be", true },
+ { "thehotfix.net", true },
{ "thehotness.tech", true },
{ "thehouseofgod.org.nz", true },
{ "thehowtohome.com", true },
@@ -32803,26 +33203,27 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "theinitium.com", true },
{ "theintercept.com", true },
{ "theinternationalgeekconspiracy.eu", true },
+ { "thej0lt.com", true },
{ "thejacksoninstitute.com.au", true },
{ "thekev.in", true },
+ { "thekeytobusiness.co.uk", true },
{ "thekindplate.ca", true },
{ "thekingofhate.com", true },
- { "thekrewserver.com", true },
{ "thelaimlife.com", true },
{ "thelanscape.com", true },
{ "thelastsurprise.com", true },
+ { "thelegionshirley.co.uk", true },
{ "thelinuxtree.net", true },
{ "thelittlecraft.com", true },
{ "thelocals.ru", true },
{ "thelonelyones.co.uk", true },
{ "thelonious.nl", true },
{ "themacoaching.nl", true },
+ { "themallards.info", true },
{ "themarshallproject.org", true },
- { "themaster.site", true },
{ "themeaudit.com", true },
{ "themecraft.studio", true },
{ "themefoxx.com", true },
- { "themesurgeons.net", true },
{ "themetacity.com", true },
{ "themilanlife.com", true },
{ "themillerslive.com", true },
@@ -32843,22 +33244,20 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "thenocman.com", true },
{ "thenovaclinic.com", true },
{ "thenowheremen.com", true },
+ { "theo.me", true },
{ "theobromos.fr", true },
{ "theocharis.org", true },
{ "theodorahome.co", true },
{ "theodorahome.com.br", true },
{ "theofleck.com", true },
- { "theojones.name", true },
{ "theokouzelis.com", true },
{ "theoldbrewhouse.info", true },
{ "theonethaimassage.de", true },
{ "theoriginalbit.com", true },
{ "theory-test-online.co.uk", true },
{ "theory.org", true },
- { "theosblog.de", true },
{ "theoscure.eu", true },
{ "theoutline.com", true },
- { "thepaffy.de", true },
{ "thepartner.co.uk", true },
{ "thepartydoctors.co.uk", true },
{ "thepasteb.in", true },
@@ -32866,7 +33265,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "thepaulagcompany.com", true },
{ "thepaymentscompany.com", true },
{ "thepb.in", true },
- { "thepeninsulaires.com", true },
{ "thephonecaseplace.com", true },
{ "thephp.cc", true },
{ "thepiabo.ovh", true },
@@ -32877,7 +33275,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "theplaydaysbus.co.uk", true },
{ "theplayspot.co.uk", true },
{ "theploughharborne.co.uk", true },
- { "theposhfudgecompany.co.uk", true },
{ "thepostoffice.ro", true },
{ "thepriorybandbsyresham.co.uk", true },
{ "thepromisemusic.com", true },
@@ -32918,6 +33315,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "thesharedbrain.ch", true },
{ "thesharedbrain.com", true },
{ "thesharepointfarm.com", true },
+ { "theshield.in", true },
{ "theshine.pl", true },
{ "thesignacademy.co.uk", true },
{ "thesignalco.com.au", true },
@@ -32931,7 +33329,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "thesplashlab.com", true },
{ "thestationatwillowgrove.com", true },
{ "thesteins.org", false },
- { "thestonegroup.de", true },
+ { "thestoneage.de", true },
{ "thestoritplace.com", true },
{ "thestory.ie", true },
{ "thestoryshack.com", true },
@@ -32945,6 +33343,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "thetechnical.me", true },
{ "thetenscrolls.com", true },
{ "thetomharling.com", true },
+ { "thetradinghall.com", true },
{ "thetree.ro", true },
{ "thetrendspotter.net", true },
{ "thetuxkeeper.de", false },
@@ -32952,10 +33351,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "thevacweb.com", true },
{ "thevalentineconstitution.com", true },
{ "thevgg.com", false },
+ { "thewagesroom.co.uk", true },
{ "thewarrencenter.org", true },
{ "thewaxhouse.academy", true },
{ "thewaxhouse.de", true },
{ "thewaxhouse.shop", true },
+ { "thewebdexter.com", true },
{ "thewebflash.com", true },
{ "thewebsitedoctors.co.uk", true },
{ "thewebsitemarketingagency.com", true },
@@ -32973,6 +33374,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "theyear199x.org", true },
{ "theyearinpictures.co.uk", true },
{ "theyosh.nl", true },
+ { "thezero.org", true },
{ "thezillersathenshotel.com", true },
{ "thiagohersan.com", true },
{ "thibaultwalle.com", true },
@@ -32982,13 +33384,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "thiepxinh.net", true },
{ "thierry-daellenbach.com", true },
{ "thierrybasset.ch", true },
- { "thierryhayoz.ch", true },
{ "thijsalders.nl", false },
{ "thijsbekke.nl", true },
{ "thijsslop.nl", true },
{ "thijsvanderveen.net", true },
{ "thinegen.de", true },
{ "thingies.site", true },
+ { "thingsimplied.com", true },
{ "think-asia.org", true },
{ "think-positive-watches.de", true },
{ "thinkheaddesign.com", true },
@@ -33002,7 +33404,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "thinkrealty.com", true },
{ "thinktux.net", true },
{ "thirdbearsolutions.com", true },
- { "thirdworld.moe", true },
{ "thiry-automobiles.net", true },
{ "thisbrownman.com", true },
{ "thiscloudiscrap.com", false },
@@ -33022,18 +33423,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "thomalaudan.de", true },
{ "thomas-bertran.com", true },
{ "thomas-fahle.de", true },
- { "thomas-prior.com", true },
{ "thomas-sammut.com", true },
{ "thomas-suchon.fr", true },
{ "thomas.love", false },
{ "thomasbeckers.be", true },
+ { "thomasbreads.com", false },
+ { "thomasduerlund.dk", true },
{ "thomaseyck.com", true },
{ "thomasfoster.co", true },
{ "thomasgriffin.io", true },
{ "thomashunter.name", false },
{ "thomasmcfly.com", true },
- { "thomasscholz.com", true },
- { "thomassen.sh", true },
+ { "thomassen.sh", false },
{ "thomasstevensmusic.com", true },
{ "thomastimepieces.com.au", true },
{ "thomasverhelst.be", true },
@@ -33070,6 +33471,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "threelions.ch", true },
{ "threema.ch", true },
{ "threexxx.ch", true },
+ { "threv.net", true },
{ "thriftdiving.com", true },
{ "thrivesummit.com", true },
{ "thriveta.com", true },
@@ -33082,7 +33484,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "thuisverpleging-meerdael.be", true },
{ "thullbery.com", true },
{ "thummer.net", true },
- { "thunderfield-boat.co.uk", true },
{ "thunderkeys.net", true },
{ "thundr.eu", true },
{ "thunraz.com", true },
@@ -33097,7 +33498,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "thyngster.com", true },
{ "thynx.io", true },
{ "thzone.net", true },
- { "ti-js.com", true },
{ "ti-pla.net", true },
{ "ti-planet.org", true },
{ "tiacollection.com", true },
@@ -33123,13 +33523,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tickit.ca", true },
{ "tid.jp", true },
{ "tidycustoms.net", true },
- { "tie-online.org", true },
{ "tielectric.ch", true },
+ { "tiendafetichista.com", true },
{ "tiendavertigo.com", true },
{ "tiens-ib.cz", true },
{ "tier-1-entrepreneur.com", true },
{ "tierarztpraxis-bogenhausen.de", true },
- { "tierarztpraxis-illerwinkel.de", true },
{ "tierarztpraxis-weinert.de", true },
{ "tiernanx.com", true },
{ "ties.com", true },
@@ -33138,6 +33537,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tiffnix.com", true },
{ "tigerchef.com", true },
{ "tigerdile.com", true },
+ { "tigernode.com", true },
+ { "tigernode.net", true },
{ "tiggeriffic.com", true },
{ "tiggi.pw", true },
{ "tiglitub.com", true },
@@ -33157,6 +33558,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tiliaze.eu", true },
{ "tiliaze.info", true },
{ "tiliaze.net", true },
+ { "tilikum.io", true },
{ "till.im", true },
{ "tillberg.us", true },
{ "tilleysbouncycastles.co.uk", true },
@@ -33166,7 +33568,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "timberkel.com", true },
{ "timbishopartist.com", true },
{ "timbrust.de", true },
- { "timco.cloud", true },
{ "timdebruijn.nl", true },
{ "timdeneau.com", true },
{ "timdoug.com", true },
@@ -33178,6 +33579,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "timeauction.hk", true },
{ "timebox.tk", true },
{ "timeglass.de", true },
+ { "timeless-photostudio.com", true },
{ "timetab.org", true },
{ "timetech.io", true },
{ "timetotrade.com", true },
@@ -33185,9 +33587,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "timfiedler.net", true },
{ "timing.com.br", true },
{ "timjk.de", true },
- { "timklefisch.de", true },
{ "timmersgems.com", true },
- { "timmy.ws", true },
+ { "timmy.im", true },
{ "timmyrs.de", true },
{ "timnash.co.uk", true },
{ "timonengelke.de", true },
@@ -33232,13 +33633,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tipsacademicos.com", true },
{ "tir-mauperthuis.fr", true },
{ "tir-pistolet-chexbres.ch", true },
+ { "tiratuki.games", true },
{ "tircentrale.net", true },
{ "tirionnetwork.de", true },
{ "tirlins.com", true },
{ "tiroler-kupferschmiede.com", true },
{ "tirs4ne.ch", true },
{ "tischlerei-klettke.de", true },
- { "tism.in", true },
{ "tissot-mayenfisch.com", true },
{ "tit-cdn.de", true },
{ "tit-dns.de", true },
@@ -33256,6 +33657,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "titusetcompagnies.net", true },
{ "tivido.nl", true },
{ "tiwag.at", true },
+ { "tixeconsulting.com", true },
{ "tjampoer.com", true },
{ "tjandpals.com", true },
{ "tjenestetorvet.dk", true },
@@ -33268,6 +33670,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tkat.ch", true },
{ "tkeycoin.com", true },
{ "tkgpm.com", true },
+ { "tkirch.de", true },
{ "tkjg.fi", true },
{ "tkn.me", true },
{ "tkn.tokyo", true },
@@ -33317,6 +33720,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "to2mbn.org", true },
{ "toad.ga", true },
{ "toast.al", false },
+ { "tob-rulez.de", true },
{ "tobacco.gov", true },
{ "tobedo.net", true },
{ "tober-cpag.de", true },
@@ -33329,11 +33733,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tobias-picha.de", true },
{ "tobias-weidhase.de", true },
{ "tobias.gr", true },
+ { "tobias4.ddns.net", true },
{ "tobiasbrunner.net", true },
{ "tobiasconradi.com", true },
{ "tobiashorvath.com", true },
{ "tobiashorvath.de", true },
- { "tobiassachs.de", true },
+ { "tobiaskorf.de", true },
+ { "tobiaspahlings.de", true },
{ "tobiassattler.com", true },
{ "tobiemilford.com", true },
{ "tobis-rundfluege.de", true },
@@ -33370,10 +33776,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tofu.cf", true },
{ "togech.jp", true },
{ "togetter.com", true },
- { "toheb.de", true },
+ { "toheb.de", false },
{ "tohokinemakan.tk", true },
{ "tohokufd.com", true },
- { "tojeto.eu", true },
{ "tokaido-kun.jp", true },
{ "tokaido.com", true },
{ "tokainafb.net", true },
@@ -33407,7 +33812,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tom-maxwell.com", true },
{ "tom.horse", true },
{ "tomabrafix.de", true },
- { "tomandshirley.com", true },
{ "tomarns.nl", true },
{ "tomasjacik.cz", true },
{ "tomaskavalek.cz", true },
@@ -33446,6 +33850,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tomo.gr", false },
{ "tomochun.net", true },
{ "tomosm.net", true },
+ { "tomoyaf.com", true },
{ "tomravinmd.com", true },
{ "tomrei.com", true },
{ "tomrichards.net", true },
@@ -33461,6 +33866,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tomwassenberg.nl", true },
{ "tomwiggers.nl", false },
{ "tomwilson.io", true },
+ { "tomy.icu", true },
{ "tomyork.net", true },
{ "tonabor.ru", true },
{ "tonage.de", true },
@@ -33483,6 +33889,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tonermonster.de", true },
{ "tonex.de", true },
{ "tonex.nl", true },
+ { "tonguetechnology.com", true },
{ "tonkayagran.com", true },
{ "tonkayagran.ru", true },
{ "tonkinson.com", true },
@@ -33505,27 +33912,26 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "toolkits.design", true },
{ "toolroomrecords.com", true },
{ "tools.pro", true },
+ { "toolsense.io", true },
{ "toom.io", true },
{ "toonpool.com", true },
{ "toonsburgh.com", true },
{ "toool.nl", true },
{ "toool.org", true },
- { "tooolroc.org", false },
{ "toothdoc.ca", true },
{ "tooti.biz", true },
{ "top-esb.com", true },
{ "top-obaly.cz", true },
{ "top-opakowania.pl", true },
+ { "top-solar-info.de", true },
{ "top9.fr", true },
{ "topaxi.ch", true },
{ "topaxi.codes", true },
- { "topbilan.com", true },
{ "topbounce.com", true },
{ "topbouncycastles.co.uk", true },
{ "topbrakes.com", true },
{ "topclassfun.ie", true },
{ "topdesk.net", true },
- { "topdevbox.net", true },
{ "topdogsinflatables.co.uk", true },
{ "topekafoundationpros.com", true },
{ "topeng-emas.com", true },
@@ -33541,19 +33947,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "topodin.com", true },
{ "toponlinecasinosites.co.uk", true },
{ "topprice.ua", true },
- { "topservercccam.com", true },
{ "topservercccam.tv", true },
{ "topshelfcommercial.com", true },
{ "topshoptools.com", true },
+ { "topsteaks-daun.de", true },
{ "toptec.net.br", true },
{ "toptexture.com", true },
{ "toptheto.com", true },
{ "topvertimai.lt", true },
- { "topwin.la", true },
{ "topwindowcleaners.co.uk", true },
{ "topworktops.co.uk", true },
{ "toracon.org", true },
{ "torahanytime.com", true },
+ { "torbe.es", true },
{ "torchantifa.org", true },
{ "toreni.us", true },
{ "toretame.jp", true },
@@ -33583,6 +33989,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tosainu.com.br", true },
{ "toscer.me", false },
{ "toschool.com.br", true },
+ { "toshen.com", true },
{ "toshkov.com", true },
{ "toskana-appartement.de", true },
{ "tosostav.cz", true },
@@ -33614,7 +34021,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "touchwoodtrees.com.au", true },
{ "tougetu.com", true },
{ "touhou.ac.cn", true },
- { "touhou.cc", true },
{ "touhou.fm", true },
{ "touhouwiki.net", true },
{ "toujours-actif.com", true },
@@ -33639,24 +34045,23 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tovare.com", true },
{ "toverland-tickets.nl", true },
{ "tovp.org", true },
+ { "towandalibrary.org", true },
{ "townandcountryus.com", true },
{ "townhousedevelopments.com.au", true },
{ "townhouseregister.com.au", true },
{ "townofbridgewater.ca", true },
{ "towsonroofers.com", true },
{ "towywebdesigns.uk", true },
- { "tox.im", true },
{ "tox21.gov", false },
{ "toymagazine.com.br", true },
- { "toymania.de", true },
{ "toyota-kinenkan.com", true },
{ "toysperiod.com", true },
{ "tp-iryuubun.com", true },
{ "tp-kabushiki.com", true },
{ "tp-kyouyufudousan.com", true },
{ "tp-law.jp", true },
+ { "tpansino.com", true },
{ "tpbproxy.co", true },
- { "tpbunblocked.org", true },
{ "tpci.biz", true },
{ "tpidg.us", true },
{ "tpolemis.com", true },
@@ -33667,7 +34072,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tr.search.yahoo.com", false },
{ "tr0n.net", true },
{ "traas.org", true },
- { "trabajarenperu.com", true },
{ "trabajarenremoto.com", true },
{ "trabbel.org", true },
{ "tracalada.cl", true },
@@ -33679,15 +34083,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "traceroute.link", true },
{ "traceroute.network", true },
{ "traces.ml", true },
+ { "tracewind.top", true },
{ "tracfinancialservices.com", true },
{ "tracinsurance.com", true },
- { "track.plus", true },
{ "trackchair.com", true },
{ "trackdomains.com", true },
{ "trackersimulator.org", true },
{ "trackeye.dk", true },
{ "trackmeet.io", true },
{ "trackrecordpro.co.uk", true },
+ { "tracksa.com.ar", true },
{ "trackyourlogs.com", true },
{ "tractorpumps.com", true },
{ "trad-n-vo.com", true },
@@ -33699,13 +34104,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tradeinvent.co.uk", true },
{ "trademan.ky", true },
{ "traderjoe-cloud.de", true },
+ { "tradik.com", true },
{ "tradinews.com", true },
{ "tradinews.fr", true },
{ "traditions.nl", true },
{ "traditionskapperscollege.nl", true },
{ "traditionsvivantesenimages.ch", true },
- { "tradiz.org", false },
- { "traeningsprojekt.dk", false },
{ "trafarm.ro", true },
{ "trafas.nl", true },
{ "traffic.az", true },
@@ -33722,26 +34126,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "trainhornforums.com", true },
{ "trainiac.com.au", true },
{ "trainings-handschuhe-test.de", true },
- { "trainline.at", true },
- { "trainline.cn", true },
- { "trainline.com.br", true },
- { "trainline.com.pt", true },
- { "trainline.cz", true },
{ "trainline.de", true },
- { "trainline.dk", true },
{ "trainline.es", true },
{ "trainline.eu", true },
{ "trainline.fr", true },
{ "trainline.it", true },
- { "trainline.nl", true },
- { "trainline.no", true },
- { "trainline.pl", true },
- { "trainline.se", true },
{ "trainsgoodplanesbad.com", true },
{ "traista.ru", true },
{ "traiteurpapillonevents.be", true },
{ "trajano.net", true },
- { "tran.pw", true },
{ "trance-heal.com", true },
{ "trance-heal.de", true },
{ "trance-heal.me", true },
@@ -33752,7 +34145,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "trangcongnghe.com", true },
{ "trangell.com", true },
{ "tranglenull.xyz", true },
- { "tranhsondau.net", true },
+ { "tranhsondau.net", false },
{ "transacid.de", true },
{ "transappealrights.com", true },
{ "transcend.org", true },
@@ -33798,6 +34191,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "trashwagon.club", true },
{ "traslocare.roma.it", true },
{ "traslochi-trasporti-facchinaggio.it", true },
+ { "trasloco.milano.it", true },
{ "tratamentoparacelulite.biz", true },
{ "tratamentoparacelulite.net", true },
{ "trattamenti.biz", true },
@@ -33809,12 +34203,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "travel-dealz.de", true },
{ "travel-to-nature.ch", true },
{ "travel.co.za", true },
- { "travel1x1.com", true },
{ "travel365.it", true },
{ "travelarmenia.org", true },
{ "traveling-thailand.info", true },
{ "travellers.dating", true },
- { "travelling.expert", true },
{ "travellovers.fr", true },
{ "travelmyth.ie", true },
{ "travelogue.jp", true },
@@ -33822,6 +34214,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "travelpricecheck.com", true },
{ "travelshack.com", true },
{ "travi.org", true },
+ { "travis.nl", true },
{ "travisf.net", true },
{ "travisforte.io", true },
{ "travisfranck.com", true },
@@ -33853,7 +34246,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tresorsecurity.com", true },
{ "tretail.net", true },
{ "tretkowski.de", true },
- { "trewe.eu", true },
{ "trezy.me", true },
{ "trezy.net", true },
{ "trhastane.com", true },
@@ -33898,7 +34290,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "triple-mmm.de", true },
{ "triplekeys.net", true },
{ "tripolistars.com", true },
- { "tripp.xyz", true },
{ "tripseats.com", true },
{ "tripsinc.com", true },
{ "trisect.eu", true },
@@ -33913,11 +34304,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "troisdorf-gestalten.de", true },
{ "trollingeffects.org", true },
{ "trollmoa.se", true },
- { "trollscave.xyz", true },
+ { "trollope-apollo.com", true },
{ "trommelwirbel.com", true },
{ "tronatic-studio.com", true },
{ "trondelan.no", true },
{ "troomcafe.com", true },
+ { "troopaid.info", true },
{ "trophee-discount.com", true },
{ "tropicalserver.com", true },
{ "trotec.com", true },
@@ -33932,16 +34324,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "trtltravel.com", true },
{ "trtruijens.com", true },
{ "tru.ltd", true },
+ { "trucchibellezza.it", true },
{ "truckersmp.com", true },
{ "truckerswereld.nl", false },
{ "truckstop-magazin.de", false },
{ "true-itk.de", true },
{ "trueblueessentials.com", true },
{ "trueinstincts.ca", true },
- { "truejob.com", true },
{ "truekey.com", true },
{ "truentumvet.it", true },
{ "truerizm.ru", true },
+ { "truessl.shop", true },
{ "truestaradvisors.com", true },
{ "truesteamachievements.com", true },
{ "truestor.com", true },
@@ -33952,15 +34345,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "trulance.com", true },
{ "truly-madly-happiness.de", true },
{ "trumanlibrary.org", true },
- { "trumeet.top", true },
{ "trunk-show.net", true },
+ { "truong.fi", true },
{ "truqu.com", true },
{ "truserve.org", true },
{ "trusitio.com", true },
{ "trustcase.com", true },
{ "trustednetworks.nl", true },
{ "trustfield.ch", true },
+ { "trustocean.com", true },
{ "trustserv.de", true },
+ { "truthmessages.pw", true },
{ "truvisory.com", true },
{ "trw-reseller.com", true },
{ "try2admin.pw", true },
@@ -33981,7 +34376,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "trzepak.pl", true },
{ "ts-publishers.com", true },
{ "ts3-dns.com", true },
- { "ts3-dns.me", false },
{ "ts3-dns.net", false },
{ "tsa-sucks.com", true },
{ "tsab.moe", true },
@@ -33992,13 +34386,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tsicons.com", true },
{ "tsironis-olivenoel.de", true },
{ "tslcontractors.co.uk", true },
+ { "tsng-stg.tk", true },
{ "tsng.co.jp", true },
{ "tss.am", true },
- { "tstrubberstamp.com", true },
+ { "tstrubberstamp.com", false },
{ "tsugi.fr", true },
{ "tsukhani.com", true },
{ "tsuki.moe", true },
- { "tsukuba.style", true },
{ "tsumegumi.com", true },
{ "tsumi.it", true },
{ "tsundere.moe", true },
@@ -34006,7 +34400,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tsurai.work", true },
{ "tsuyuzakihiroyuki.com", true },
{ "tsv-1894.de", true },
- { "ttb.gov", true },
+ { "tt.dog", true },
{ "ttbonline.gov", true },
{ "ttc-birkenfeld.de", true },
{ "ttcaarberg.ch", true },
@@ -34015,12 +34409,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ttdsevaonline.com", true },
{ "ttll.de", true },
{ "ttsoft.pl", true },
+ { "ttspttsp.com", true },
{ "ttsweb.org", true },
{ "ttt.tt", true },
{ "ttuwiki.ee", true },
{ "ttuwiki.org", true },
+ { "ttwt.com", true },
{ "tty1.net", true },
{ "ttyystudio.com", true },
+ { "tu-immoprojekt.at", true },
{ "tu6.pm", true },
{ "tuang-tuang.com", true },
{ "tubanten.nl", true },
@@ -34037,8 +34434,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tudorproject.org", true },
{ "tufashionista.com", true },
{ "tufilo.com", true },
+ { "tugers.com", true },
{ "tuincentersnaet.be", true },
{ "tuitle.com", true },
+ { "tulenceria.es", true },
{ "tumagiri.net", true },
{ "tumblenfun.com", true },
{ "tumedico.es", true },
@@ -34050,6 +34449,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tuner.cloud", true },
{ "tuning-werkstatt-nuernberg.de", true },
{ "tuningblog.eu", false },
+ { "tunity.be", true },
+ { "tunnelbear.com", true },
{ "tunnelblick.net", true },
{ "tunnelventilation.pro", true },
{ "tunnelwatch.com", true },
@@ -34062,7 +34463,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "turdnagel.com", true },
{ "turigum.com", true },
{ "turkish.dating", true },
- { "turkrock.com", true },
{ "turnaroundforum.de", true },
{ "turncircles.com", true },
{ "turnoffthelights.com", true },
@@ -34074,10 +34474,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "turtlepwr.com", true },
{ "turunculevye.com", true },
{ "tuscanyleather.it", true },
+ { "tusksol.com", true },
{ "tutanota.com", true },
{ "tutiendaroja.com", true },
{ "tutiendarosa.com", true },
{ "tuto-craft.com", true },
+ { "tutoragency.org", true },
{ "tutorat-tect.org", true },
{ "tutorialinux.com", true },
{ "tutorme.com", true },
@@ -34092,7 +34494,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tuxie.com", true },
{ "tuxlife.net", true },
{ "tuxpeliculas.com", true },
- { "tuxplace.nl", true },
{ "tuxtimo.me", true },
{ "tuxz.net", true },
{ "tuza.com.au", true },
@@ -34100,15 +34501,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tv-programme.be", true },
{ "tv-programme.com", true },
{ "tvbeugels.nl", false },
- { "tvc.red", true },
{ "tvcal.net", true },
{ "tvcmarketing.com", true },
{ "tver-msk.ru", true },
- { "tverdohleb.com", true },
{ "tverskaya-outlet.ru", true },
{ "tvhshop.be", true },
+ { "tvipper.com", true },
{ "tvleaks.se", true },
{ "tvlplus.net", true },
+ { "tvqc.com", true },
{ "tvs-virtual.cz", true },
{ "tvseries.info", true },
{ "tvsheerenhoek.nl", true },
@@ -34128,6 +34529,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "twentymilliseconds.com", true },
{ "twilleys.com", true },
{ "twincitynissantxparts.com", true },
+ { "twinztech.com", true },
{ "twisata.com", true },
{ "twistapp.com", true },
{ "twistdevelopment.co.uk", true },
@@ -34163,8 +34565,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tyl.io", true },
{ "tylerdavies.net", true },
{ "tylerfreedman.com", true },
- { "tylerharcourt.org", true },
- { "tylerjharcourt.com", true },
+ { "tylerharcourt.net", true },
{ "tylerschmidtke.com", true },
{ "typcn.com", true },
{ "type1joe.com", true },
@@ -34187,11 +34588,21 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tyroremotes.eu", true },
{ "tyroremotes.fr", true },
{ "tyroremotes.nl", true },
+ { "tyroremotes.no", true },
{ "tysox.de", true },
+ { "tysye.ca", true },
{ "tyuo-keibi.co.jp", true },
{ "tzifas.com", true },
{ "u-metals.com", true },
+ { "u-tokyo.club", true },
{ "u.nu", true },
+ { "u0010.com", true },
+ { "u0020.com", true },
+ { "u0050.com", true },
+ { "u0060.com", true },
+ { "u0070.com", true },
+ { "u0080.com", true },
+ { "u0090.com", true },
{ "u03.fr", true },
{ "u1100.com", true },
{ "u1144.com", true },
@@ -34207,6 +34618,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "uangteman.com", true },
{ "uasmi.com", true },
{ "uat-activesg.com", true },
+ { "uatgootax.ru", false },
{ "ub3rk1tten.com", false },
{ "ubanquity.com", true },
{ "uberbkk.com", true },
@@ -34223,6 +34635,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ubis.group", true },
{ "ublaboo.org", true },
{ "uborcare.com", true },
+ { "ubun.net", true },
{ "uc.ac.id", true },
{ "ucac.nz", false },
{ "ucangiller.com", true },
@@ -34231,7 +34644,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "uchargeapp.com", true },
{ "uclanmasterplan.co.uk", true },
{ "uclip.club", true },
- { "ucppe.org", false },
+ { "ucppe.org", true },
{ "ucrdatatool.gov", true },
{ "uctarna.online", true },
{ "udbhav.me", true },
@@ -34239,7 +34652,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "udo-luetkemeier.de", true },
{ "udomain.net", true },
{ "udp.sh", false },
- { "udruga-point.hr", true },
{ "udvoukocek.eu", true },
{ "ueberdosis.io", true },
{ "ueberwachungspaket.at", true },
@@ -34255,14 +34667,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ufplanets.com", true },
{ "uggedal.com", true },
{ "ugx-mods.com", true },
+ { "uhappy30.com", true },
{ "uhasseltodin.be", true },
{ "uhc.gg", true },
- { "uhlhosting.ch", true },
{ "uhrenlux.de", true },
+ { "uhurl.net", true },
{ "ui8.net", true },
{ "uiberlay.cz", true },
{ "uicchy.com", true },
{ "uiop.link", true },
+ { "uiterwijk.org", true },
{ "uitgeverij-deviant.nl", true },
{ "ujob.com.cn", true },
{ "uk.dating", true },
@@ -34285,6 +34699,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ukunlocks.com", true },
{ "ukwct.org.uk", true },
{ "ulabox.com", true },
+ { "uldsh.de", true },
{ "ulen.me", true },
{ "uli-eckhardt.de", true },
{ "ullah.se", true },
@@ -34298,8 +34713,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ultimatemafia.net", true },
{ "ultraseopro.com", true },
{ "ultrasite.tk", true },
+ { "ultrasteam.net", true },
{ "ultratech.software", true },
{ "ultratechlp.com", true },
+ { "umanityracing.com", true },
{ "umassfive.coop", true },
{ "umbricht.li", true },
{ "umbriel.fr", true },
@@ -34329,10 +34746,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "unblocked.pl", true },
{ "unblocked.pro", true },
{ "unblocked.pub", true },
+ { "unblocked.sh", true },
{ "unblocked.uno", true },
+ { "unblocked.vc", true },
{ "unblocked.vet", true },
{ "unblocked.vip", true },
- { "unblockedbay.info", true },
{ "unblockweb.co", true },
{ "unboundmoney.com", true },
{ "unboxforteams.work", true },
@@ -34340,13 +34758,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "unccelearn.org", true },
{ "uncensoreddns.dk", true },
{ "uncensoreddns.org", true },
+ { "undeadbrains.de", true },
{ "undecidable.de", true },
{ "undeductive.media", true },
{ "underbridgeleisure.co.uk", true },
{ "undercovercondoms.co.uk", true },
+ { "undercovercondoms.com", true },
{ "underfloorheating-uk.co.uk", true },
{ "underlined.fr", true },
{ "undernet.uy", false },
+ { "underwearoffer.com", true },
{ "undo.co.il", true },
{ "undone.me", true },
{ "unece-deta.eu", true },
@@ -34371,7 +34792,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "unicefkaarten.nl", true },
{ "unicefkartkidlafirm.pl", true },
{ "unicefkepeslapok.hu", true },
- { "unicefkort.dk", true },
{ "unicefvoscilnice.si", true },
{ "unicolabo.jp", true },
{ "unicorn.melbourne", true },
@@ -34385,13 +34805,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "unieducar.org.br", true },
{ "uniekglas.nl", true },
{ "unifei.edu.br", true },
- { "unifiednetwork.me", true },
{ "uniform-agri.com", true },
{ "uniformebateriasheliar.com.br", true },
{ "unikoingold.com", true },
{ "unila.edu.br", true },
+ { "uninet.cf", true },
+ { "uniojeda.ml", true },
{ "unionplat.ru", true },
- { "unipig.de", true },
{ "uniprimebr.com.br", false },
{ "uniq.site", true },
{ "unique-bouncy-castles.co.uk", true },
@@ -34416,6 +34836,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "universalcarremote.com", true },
{ "universalpaymentgateway.com", true },
{ "universeinform.com", true },
+ { "universogay.com", true },
{ "univitale.fr", true },
{ "unix.se", true },
{ "unixadm.org", true },
@@ -34424,6 +34845,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "unixforum.org", true },
{ "unixfox.eu", true },
{ "unixtime.date", true },
+ { "unknownbreakup.com", true },
{ "unkrn.com", true },
{ "unlax.com", true },
{ "unleash.pw", true },
@@ -34431,7 +34853,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "unlocken.nl", true },
{ "unlocktalent.gov", true },
{ "unlogis.ch", true },
- { "unmanaged.space", true },
{ "unmarkdocs.co", true },
{ "unmonito.red", true },
{ "unn-edu.info", true },
@@ -34439,6 +34860,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "uno.fi", true },
{ "unobrindes.com.br", true },
{ "unoccupyabq.org", true },
+ { "unp.me", true },
{ "unpkg.com", true },
{ "unpossible.xyz", true },
{ "unpr.dk", true },
@@ -34447,7 +34869,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "unrelated.net.au", true },
{ "unripple.com", true },
{ "unruh.fr", true },
- { "uns.vn", true },
{ "unsacsurledos.com", true },
{ "unsee.cc", true },
{ "unseen.is", true },
@@ -34460,7 +34881,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "unsuspicious.click", true },
{ "unterfrankenclan.de", true },
{ "unterhaltungsbox.com", true },
- { "unterkunft.guru", true },
{ "unternehmer-radio.de", true },
{ "unterschicht.tv", true },
{ "untethereddog.com", true },
@@ -34472,14 +34892,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "unxicdellum.cat", true },
{ "upandclear.org", true },
{ "upay.ru", true },
- { "upbad.com", true },
{ "upbeatrobot.com", true },
{ "upbeatrobot.eu", true },
{ "upd.jp", true },
{ "upgamerengine.com", true },
{ "upgamerengine.com.br", true },
{ "upgamerengine.net", true },
- { "upgauged.com", true },
{ "upitnik.rs", true },
{ "uplaqui.com.br", true },
{ "uplinklabs.net", true },
@@ -34494,6 +34912,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "upr-info.org", true },
{ "upr.com.ua", true },
{ "uprouteyou.com", true },
+ { "upsettunnel.com", true },
{ "upsiteseo.com", true },
{ "uptimed.com", true },
{ "uptimenotguaranteed.com", true },
@@ -34524,6 +34943,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "urbannewsservice.com", true },
{ "urbansparrow.in", true },
{ "urbanstylestaging.com", true },
+ { "urbansurvival.com", true },
{ "urbanwaters.gov", false },
{ "urbanwildlifealliance.org", false },
{ "urbexdk.nl", true },
@@ -34547,7 +34967,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "urltodomain.com", true },
{ "urown.net", true },
{ "ursa-minor-beta.org", true },
- { "ursae.co", true },
{ "urspringer.de", true },
{ "ursuslibris.hu", true },
{ "urth.org", true },
@@ -34556,6 +34975,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "usaa.com", false },
{ "usabackground.com", true },
{ "usability.gov", true },
+ { "usadba.net.ru", true },
{ "usaestaonline.com", true },
{ "usage.be", true },
{ "usagexchange.com", true },
@@ -34565,7 +34985,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "usakitchensandflooring.com", true },
{ "usalearning.gov", true },
{ "usastaffing.gov", true },
- { "usatomotori.com", true },
{ "usbcraft.com", true },
{ "usbevents.co.uk", true },
{ "usbr.gov", true },
@@ -34577,19 +34996,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "usebean.com", true },
{ "usedoor.jp", true },
{ "usedu.us", true },
+ { "user-re.com", true },
{ "usetypo3.com", true },
{ "useyourloaf.com", true },
{ "usgande.com", true },
{ "ushandbookapp.com", true },
{ "ushare.ch", true },
- { "usimmigration.us", true },
{ "usipvd.ch", true },
{ "usitcolours.bg", true },
{ "usleep.net", true },
{ "usmint.gov", true },
{ "usninosnikrcni.eu", true },
{ "usnti.com", true },
- { "usparklodging.com", true },
{ "uspsoig.gov", true },
{ "ussm.gov", true },
{ "ussuka.com", true },
@@ -34634,15 +35052,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "uvocorp.com", true },
{ "uvolejniku.cz", true },
{ "uw2333.com", true },
+ { "uwac.co.uk", false },
{ "uwekoetter.com", true },
{ "uwelilienthal.de", true },
{ "uwimonacs.org.jm", true },
- { "uwsoftware.be", true },
{ "uwvloereruit.nl", true },
{ "uxtechnologist.com", true },
{ "uy.search.yahoo.com", false },
{ "uz.search.yahoo.com", false },
{ "uzaymedya.com.tr", true },
+ { "uzsvm.cz", true },
+ { "v-d-p.net", true },
{ "v-spin.cz", true },
{ "v-tek.fi", true },
{ "v-u-z.ru", true },
@@ -34652,7 +35072,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "v2cn.win", true },
{ "v2ex.com", true },
{ "va-reitartikel.com", true },
- { "va.gov", true },
+ { "va.gov", false },
{ "vacationsbyvip.com", true },
{ "vaccines.gov", true },
{ "vacuumpump.co.id", true },
@@ -34665,6 +35085,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vagaerg.net", true },
{ "vagmour.eu", true },
{ "vagpartsdb.com", true },
+ { "vagrantbits.com", true },
{ "vagrantcloud.com", true },
{ "vagrantup.com", true },
{ "vaincreladyslexie.com", false },
@@ -34674,7 +35095,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vakantienet.nl", true },
{ "vakuutuskanava.fi", true },
{ "val-sec.com", true },
- { "valasi.eu", true },
{ "valbonne-consulting.com", true },
{ "valcano-krd.ru", true },
{ "valcano.ru", true },
@@ -34690,6 +35110,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "valeriansaliou.name", true },
{ "vales.io", true },
{ "valesdigital.com", true },
+ { "valiant.finance", true },
{ "validatis.com", true },
{ "validator.nu", true },
{ "validbrands.com", true },
@@ -34699,6 +35120,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "valkor.pro", true },
{ "vallei-veluwe.nl", true },
{ "valleyautofair.com", true },
+ { "valleyautoloan.com", true },
{ "valleycode.net", true },
{ "valleyshop.ca", true },
{ "vallutaja.eu", true },
@@ -34715,6 +35137,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "valudo.st", true },
{ "valueng.com", true },
{ "valueseed.net", true },
+ { "vampyrium.net", false },
{ "van11y.net", true },
{ "vanbinnenuit.nl", true },
{ "vancityconcerts.com", true },
@@ -34727,10 +35150,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vanderkrieken.org", true },
{ "vanderkroon.nl", true },
{ "vandermeer.frl", true },
+ { "vanderrijt.nl", false },
{ "vanderziel.org", true },
{ "vaneigenkweek.be", true },
- { "vanetv.com", true },
- { "vangeluwedeberlaere.be", true },
{ "vanhaos.com", true },
{ "vanhoudt-usedcars.be", true },
{ "vanhoutte.be", false },
@@ -34741,9 +35163,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vanohaker.ru", true },
{ "vanouwerkerk.net", true },
{ "vantagepointpreneed.com", true },
- { "vante.me", true },
{ "vantien.com", true },
- { "vantru.is", true },
{ "vanvoro.us", false },
{ "vanwunnik.com", true },
{ "vapecom-shop.com", true },
@@ -34760,18 +35180,21 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vareillefoundation.fr", true },
{ "vareillefoundation.org", true },
{ "varghese.de", true },
+ { "variable.agency", false },
{ "variag-group.ru", true },
{ "variag-montazh.ru", true },
{ "varicoseveinssolution.com", true },
{ "varimedoma.com", true },
{ "varshathacker.com", true },
- { "varunagw.com", false },
+ { "varunagw.com", true },
{ "varunpriolkar.com", true },
{ "varvy.com", true },
{ "varztupasaulis.com", true },
{ "varztupasaulis.eu", true },
{ "varztupasaulis.lt", true },
{ "varztupasaulis.net", true },
+ { "vascomm.co.id", true },
+ { "vase-eroticke-povidky.cz", true },
{ "vasel.de", true },
{ "vasel.eu", true },
{ "vashel.us", true },
@@ -34782,6 +35205,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vastgoedcultuurfonds.nl", true },
{ "vasyharan.com", true },
{ "vat-eu.com", true },
+ { "vat.direct", true },
{ "vatelecom.dk", true },
{ "vati.pw", true },
{ "vats.im", true },
@@ -34798,6 +35222,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vavouchers.com", true },
{ "vawebsite.co", true },
{ "vawlt.io", true },
+ { "vawltstorage.com", true },
{ "vaygren.com", true },
{ "vazue.com", true },
{ "vb-oa.co.uk", true },
@@ -34829,7 +35254,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vdesc.com", true },
{ "vdisk24.de", true },
{ "vdmeij.com", true },
- { "vdrpro.com", true },
+ { "vdownloader.com", true },
{ "vdzwan.net", true },
{ "ve.search.yahoo.com", false },
{ "ve3oat.ca", true },
@@ -34840,8 +35265,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vecozo.nl", true },
{ "vectortrack.com.au", true },
{ "vectorwish.com", true },
+ { "vedma-praktik.com", true },
{ "veg-leiden.nl", true },
- { "vegalayer.com", true },
{ "vegalitarian.org", true },
{ "vegane-proteine.com", true },
{ "veganforum.org", true },
@@ -34850,6 +35275,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "veganism.com", true },
{ "vegasdocs.com", true },
{ "vegepa.com", true },
+ { "vegetariantokyo.net", true },
{ "veggie-treff.de", true },
{ "vegguide.org", true },
{ "veii.de", true },
@@ -34864,9 +35290,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vendserve.eu", true },
{ "venenum.org", true },
{ "venev.name", true },
- { "venirextra.com", true },
- { "venirideal.com", true },
{ "venje.pro", true },
+ { "ventajasdesventajas.com", true },
{ "ventesprivees-fr.com", true },
{ "ventilateurs-plafond.com", true },
{ "ventizo.com", true },
@@ -34874,20 +35299,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "venturavwparts.com", true },
{ "venturebanners.co.uk", true },
{ "venturedisplay.co.uk", true },
- { "venturum.com", true },
- { "venturum.de", true },
- { "venturum.eu", true },
- { "venturum.net", true },
- { "ver-ooginoog.nl", true },
+ { "ventzke.com", true },
{ "ver.ma", true },
{ "vera.bg", true },
- { "veraandsteve.date", true },
{ "veramagazine.jp", true },
{ "verasani.ch", true },
{ "verberne.nu", true },
{ "verbier-lechable.com", true },
{ "verbierfestival.com", true },
- { "verdict.gg", true },
{ "verduccies.com", true },
{ "verein-kiekin.de", true },
{ "vereinlandwege.de", true },
@@ -34903,10 +35322,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "veriomed.com", true },
{ "veritafineviolins.com", true },
{ "veritas-data.de", true },
- { "verizonconnect.com", true },
+ { "verizonconnect.com", false },
{ "verizonguidelines.com", true },
{ "verliebt-in-bw.de", true },
{ "verliebt-in-niedersachsen.de", true },
+ { "verliefde-jongens.nl", true },
{ "vermeerdealers.com", true },
{ "vermiliontaxiservice.com", true },
{ "vermogeninkaart.nl", true },
@@ -34930,7 +35350,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "versbeton.nl", true },
{ "versicherungen-werner-hahn.de", true },
{ "versicherungskontor.net", true },
- { "versolslapeyre.fr", true },
{ "verspai.de", true },
{ "verstraetenusedcars.be", true },
{ "vertebrates.com", true },
@@ -34942,6 +35361,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "very-kids.fr", true },
{ "veryapt.com", true },
{ "verymelon.de", true },
+ { "verymetal.nl", true },
{ "verzekeringsacties.nl", true },
{ "verzick.com", true },
{ "vescudero.net", true },
@@ -34949,6 +35369,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vespacascadia.com", true },
{ "vestingbar.nl", true },
{ "veterinario.roma.it", true },
+ { "veterinarioaltea.com", true },
{ "vetforum.co", true },
{ "vetinte.eu", true },
{ "vetofish.com", true },
@@ -34968,8 +35389,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "viacdn.org", true },
{ "viafinance.cz", false },
{ "viaggio-in-cina.it", true },
+ { "viagraonlinebestellen.org", true },
{ "viajandoporelmundo.com.ar", true },
{ "viaje-a-china.com", true },
+ { "vialibido.com.br", true },
{ "vialorran.com", true },
{ "viaprinto.de", true },
{ "viato.fr", true },
@@ -34978,6 +35401,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vichiya.com", true },
{ "vician.cz", false },
{ "vicicode.com", true },
+ { "viciousflora.com", true },
{ "vicjuwelen-annelore.be", true },
{ "victorcanera.com", true },
{ "victordiaz.me", true },
@@ -35001,16 +35425,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "victornet.de", true },
{ "victornilsson.pw", true },
{ "victoroilpress.com", true },
+ { "victory.radio", true },
{ "victorzambrano.com", true },
{ "vicyu.com", true },
{ "vid-immobilien.de", true },
{ "vida-it.com", true },
{ "vida.es", true },
- { "vidadu.com", true },
{ "vidbooster.com", true },
{ "vide-greniers.org", false },
{ "videogamesartwork.com", true },
- { "videoload.co", true },
+ { "videokaufmann.at", true },
{ "videomail.io", true },
{ "videosdiversosdatv.com", true },
{ "videoseyredin.net", true },
@@ -35019,12 +35443,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "videov.tk", true },
{ "vidister.de", true },
{ "vidkovaomara.si", true },
- { "vidlyoficial.com", true },
+ { "vieaw.com", true },
{ "vieclam24h.vn", false },
{ "viekelis.lt", false },
{ "viemeister.com", true },
{ "viemontante.be", true },
- { "vientos.coop", true },
{ "viepixel.at", true },
{ "vierdaagsehotel.nl", true },
{ "vierna.ga", true },
@@ -35061,9 +35484,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vikodek.com", true },
{ "viktorprevaric.eu", true },
{ "vilabiamodas.com.br", true },
+ { "viljatori.fi", true },
{ "villa-anna-cilento.de", true },
{ "villa-bellarte.de", true },
{ "villa-gockel.de", true },
+ { "villa-romantica-zillertal.at", true },
{ "villafiore.com.br", true },
{ "villageunique.com.br", true },
{ "villagockel.de", true },
@@ -35071,9 +35496,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "villamariaamalfi.it", true },
{ "villasfinistere.fr", true },
{ "villasforsale-bali.com", true },
+ { "villasoasissanur.com", true },
{ "villehardouin.fr", true },
{ "villek.fi", true },
- { "villekaaria.eu", true },
{ "villenavedornon.fr", true },
{ "villenvinkit.com", true },
{ "villerez.fr", true },
@@ -35081,7 +35506,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "viltsu.net", true },
{ "vima.ch", true },
{ "vimeo.com", true },
- { "vinagro.sk", true },
{ "vinarstvimodryhrozen.cz", true },
{ "vincentcox.com", false },
{ "vincentpancol.com", true },
@@ -35090,7 +35514,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vinilosdecorativos.net", true },
{ "vinner.com.au", true },
{ "vinnie.gq", true },
- { "vinogradovka.com", true },
{ "vinolli.de", true },
{ "vinovum.net", true },
{ "vinsetchampagne.fr", true },
@@ -35105,30 +35528,27 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vintock.com", true },
{ "vinyculture.com", true },
{ "vinzite.com", true },
- { "violet-letter.delivery", true },
{ "violetraven.co.uk", true },
{ "violin4fun.nl", true },
{ "vionicbeach.com", true },
{ "vionicshoes.com", true },
- { "vioye.com", true },
{ "vip4553.com", true },
{ "vip8522.com", true },
{ "vipesball.cc", true },
{ "vipesball.info", true },
{ "vipesball.me", true },
+ { "vipi.es", true },
{ "viptamin.eu", true },
{ "viptamol.com", true },
{ "vir-tec.eu", true },
+ { "vir2.me", true },
{ "viral32111.com", true },
{ "viralboombox.xyz", true },
{ "viralpop.it", true },
{ "viralsouls.in", true },
{ "virgopolymer.com", true },
- { "virial.de", true },
{ "viridis-milites.cz", true },
{ "virtit.fr", true },
- { "virtualcloud.ddns.net", true },
- { "virtualhealth.com", true },
{ "virtuality4d.com", true },
{ "virtuallifestyle.nl", true },
{ "virtualmt2.pl", true },
@@ -35149,8 +35569,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "visibox.nl", true },
{ "visikom.de", true },
{ "visioflux-premium.com", true },
+ { "visionarymedia.nl", true },
{ "visiondigitalsog.com", true },
+ { "visionexpress.com", true },
+ { "visionexpress.ie", true },
+ { "visionexpresscareers.com", true },
{ "visionless.me", false },
+ { "visionnissancanandaiguaparts.com", true },
{ "visistruct.com", true },
{ "visit-montenegro.com", true },
{ "visitcambridgeshirefens.org", true },
@@ -35161,11 +35586,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vistastylebuilder.com", false },
{ "vistb.me", true },
{ "vistec-support.de", true },
+ { "vistodeturista.com.br", true },
{ "visual-cockpit.com", true },
{ "visualdrone.co", true },
{ "visualgrafix.com.mx", true },
{ "visualideas.org", true },
{ "visualizing.info", true },
+ { "visualmasters.nl", true },
{ "visudira.com", true },
{ "vitahook.pw", true },
{ "vital-tel.co.uk", true },
@@ -35173,15 +35600,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vitalamin.de", true },
{ "vitalismaatjes.nl", true },
{ "vitalityscience.com", true },
+ { "vitalthrills.com", true },
{ "vitalware.com", true },
{ "vitalyzhukphoto.com", true },
{ "vitamaxxi.com.br", true },
+ { "vitamineproteine.com", true },
{ "vitaminler.com", true },
{ "vitastic.nl", true },
{ "viteoscrm.ch", true },
{ "vitkausk.as", true },
{ "vitkutny.cz", true },
{ "vitoye.com", true },
+ { "vitpeyr.com", true },
{ "vitra-vcare.co.uk", true },
{ "vitrado.de", true },
{ "vitsoft.by", true },
@@ -35189,7 +35619,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vivaldi.club", true },
{ "vivaldi.com", true },
{ "vivamusic.es", true },
- { "vivanosports.com.br", true },
{ "vivatv.com.tw", true },
{ "vivendi.de", true },
{ "vivianmaier.cn", true },
@@ -35200,8 +35629,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vivirenelmundo.com", true },
{ "vivo.sx", true },
{ "vivoitaliankitchen.com", true },
- { "vivoregularizafacil.com.br", true },
- { "vivoseg.com", true },
+ { "vixrapedia.org", true },
{ "viyf.org", true },
{ "viza.io", true },
{ "vizards.cc", true },
@@ -35226,6 +35654,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vleesbesteld.nl", true },
{ "vleij.com", true },
{ "vleij.se", true },
+ { "vliegensvlug.online", true },
+ { "vliegensvlug.services", true },
{ "vlndc.org", true },
{ "vloeck.de", true },
{ "vlora.city", true },
@@ -35242,23 +35672,28 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vmhydro.ru", false },
{ "vmis.nl", true },
{ "vmoagents.com", false },
+ { "vmoe.info", true },
{ "vmug.pl", true },
{ "vmzone.de", true },
{ "vn.search.yahoo.com", false },
+ { "vncg.org", true },
{ "vnd.cloud", true },
+ { "vndb.org", true },
{ "vnfs-team.com", true },
{ "vnvisa.center", true },
{ "vnvisa.ru", true },
{ "vocaloid.my", true },
{ "vocalsynth.space", true },
{ "vocalviews.com", true },
+ { "vocus.aero", true },
{ "vocustest.aero", true },
+ { "vodb.me", true },
+ { "vodb.org", true },
{ "vodpay.com", true },
{ "vodpay.net", true },
{ "vodpay.org", true },
{ "vogler.name", true },
{ "voicu.ch", true },
- { "void-it.nl", true },
{ "void-zero.com", true },
{ "voidcore.org", true },
{ "voidpay.com", true },
@@ -35268,11 +35703,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "voids.org", true },
{ "voidshift.com", true },
{ "voidzehn.com", true },
- { "voilo.club", true },
- { "voilodaisuki.club", true },
{ "voipsun.com", true },
- { "voiro.club", true },
- { "voirodaisuki.club", true },
+ { "vojtechpavelka.cz", true },
{ "vokalsystem.com", true },
{ "vokativy.cz", false },
{ "vokeapp.com", true },
@@ -35289,12 +35721,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "volkergropp.de", true },
{ "volkerwesselstransfer.nl", false },
{ "volkerwesselswave.nl", false },
- { "volkswurst.de", true },
+ { "volksvorschlagpmar.ch", true },
{ "vollans.id.au", true },
{ "voloevents.com", true },
{ "volta.io", true },
{ "volto.io", true },
{ "volunteeringmatters.org.uk", true },
+ { "volvipress.gr", true },
{ "vomitb.in", true },
{ "von-lien-aluprofile.de", true },
{ "von-lien-dachrinnen.de", true },
@@ -35320,6 +35753,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vosky.fr", true },
{ "vosn.de", true },
{ "vosselaer.com", true },
+ { "vossenack.nrw", true },
{ "vosser.de", true },
{ "vostronet.com", true },
{ "voter-info.uk", true },
@@ -35329,6 +35763,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "votockova.cz", true },
{ "votoot.com", true },
{ "votre-site-internet.ch", true },
+ { "vovladikavkaze.ru", true },
{ "voxfilmeonline.net", true },
{ "voxml.com", true },
{ "voxographe.com", false },
@@ -35338,6 +35773,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "voyagesaufildespages.be", true },
{ "voyageschine.com", true },
{ "voyagesdetective.fr", true },
+ { "vozami.com", true },
{ "vpc-display.com", true },
{ "vpn.black", true },
{ "vpn.ht", true },
@@ -35354,7 +35790,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vriesdonkow.be", true },
{ "vrijgezellen-feest.com", true },
{ "vrijgezellenfeestzwolle.com", true },
+ { "vrlaid.com", false },
{ "vroedvrouwella.be", true },
+ { "vrsgames.com.mx", true },
{ "vrsystem.com.br", true },
{ "vrtak-cz.net", true },
{ "vrtouring.org", true },
@@ -35363,6 +35801,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vsean.net", true },
{ "vserver-preis-vergleich.de", true },
{ "vsesrazu-raiffeisen.ru", true },
+ { "vsestiralnie.com", true },
{ "vsl-defi.ch", true },
{ "vssnederland.nl", true },
{ "vstehn.ru", true },
@@ -35370,20 +35809,21 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vsx.ch", true },
{ "vtaxi.se", true },
{ "vtipe-vylez.cz", true },
+ { "vtuber-schedule.info", true },
{ "vuakhuyenmai.vn", true },
{ "vubey.yt", true },
{ "vuilelakens.be", true },
{ "vuljespaarpot.nl", true },
{ "vullriede-multimedia.de", true },
{ "vulndetect.com", true },
- { "vulnerabilities.io", true },
+ { "vulndetect.org", true },
{ "vulnerability.ch", true },
{ "vulners.com", true },
{ "vulns.sexy", true },
{ "vulnscan.org", true },
{ "vulpine.club", true },
- { "vumetric.com", true },
{ "vuojolahti.fi", true },
+ { "vuotila.eu", true },
{ "vuvanhon.com", true },
{ "vux.li", true },
{ "vuzi.fr", true },
@@ -35420,7 +35860,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "w2n.me", true },
{ "w3ctag.org", true },
{ "w3n.org", true },
- { "w4.no", true },
+ { "w4b.in", true },
{ "w4eg.de", true },
{ "w4nvu.org", true },
{ "w50.co.uk", true },
@@ -35436,22 +35876,25 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wadsworth.gallery", true },
{ "wadvisor.com", true },
{ "waelisch.de", true },
+ { "waelti.xxx", true },
{ "waf.ninja", true },
{ "waf.sexy", true },
{ "wafa4hw.com", true },
{ "wafelland.be", true },
{ "waffle.at", false },
+ { "wafuton.com", true },
{ "wagyu-bader.de", true },
{ "wahidhasan.com", true },
{ "wahlman.org", true },
{ "wahrnehmungswelt.de", true },
{ "wahrnehmungswelten.de", true },
- { "wai-in.com", true },
{ "wai-in.net", true },
{ "waidfrau.de", true },
+ { "waidu.de", true },
{ "waifu-technologies.com", true },
{ "waifu-technologies.moe", true },
{ "waigel.org", true },
+ { "waikatowebdesigners.com", true },
{ "wail.net", true },
{ "wains.be", true },
{ "wait.jp", true },
@@ -35469,6 +35912,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wakatime.com", true },
{ "wakiminblog.com", true },
{ "wala-floor.de", true },
+ { "waldvogel.family", true },
{ "walent.in", true },
{ "walentin.co", true },
{ "walk.onl", true },
@@ -35503,18 +35947,21 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "walter.lc", true },
{ "waltzmanplasticsurgery.com", true },
{ "walvi.nl", true },
- { "wan.pp.ua", false },
+ { "wanda.ch", true },
+ { "wandelreizen.eu", true },
{ "wander.al", true },
{ "wandercue.com", true },
{ "wandervoll.ch", true },
{ "wanderzoom.co", true },
{ "wane.co", true },
- { "wangqiliang.cn", true },
- { "wangqiliang.com", true },
+ { "wangjun.me", true },
+ { "wangqiliang.cn", false },
+ { "wangqiliang.com", false },
{ "wangqiliang.org", true },
{ "wangql.net", true },
{ "wangqr.tk", true },
{ "wangtanzhang.com", true },
+ { "wangyubao.cn", true },
{ "wangyue.blog", true },
{ "wangzuan168.cc", true },
{ "wannaridecostarica.com", true },
@@ -35526,10 +35973,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "warebouncycastles.co.uk", true },
{ "warekit.io", true },
{ "warenits.at", false },
+ { "warenmedia.com", true },
{ "wargameexclusive.com", true },
{ "warhaggis.com", true },
{ "warmestwishes.ca", true },
{ "warmservers.com", true },
+ { "warnings.xyz", true },
{ "warofelements.de", true },
{ "warp-radio.com", true },
{ "warp-radio.net", true },
@@ -35538,11 +35987,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "warringtonkidsbouncycastles.co.uk", true },
{ "warschild.org", true },
{ "warsh.moe", true },
+ { "warsonco.com", true },
{ "wartorngalaxy.com", true },
{ "waschpark-hantschel.de", true },
{ "wasema.com", true },
{ "wasfestes.de", true },
- { "wasfuereintheater.com", true },
{ "washingtonregisteredagent.io", true },
{ "washingtonviews.com", true },
{ "wasi-net.de", true },
@@ -35557,6 +36006,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "watchface.watch", true },
{ "watchfreeonline.co.uk", true },
{ "watchinventory.com", true },
+ { "watchonline.al", true },
{ "watchparts-and-tools-okayama.co.jp", true },
{ "watchpci.com", true },
{ "watchstyle.com", true },
@@ -35569,6 +36019,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "watersb.org", true },
{ "waterschaplimburg.nl", true },
{ "waterside-residents.org.uk", true },
+ { "waterslide-austria.at", true },
{ "watertrails.io", true },
{ "waterworkscondos.com", true },
{ "watfordjc.uk", true },
@@ -35579,11 +36030,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wave-ola.es", true },
{ "wave.is", true },
{ "wavesboardshop.com", true },
- { "wavesoftime.com", true },
{ "waveum.com", true },
{ "wawak.pl", true },
{ "waxdramatic.com", true },
- { "waxlrs.com", true },
{ "wayfair.de", true },
{ "wayohoo.com", true },
{ "wayohoo.net", true },
@@ -35604,14 +36053,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wd976.com", true },
{ "wdbflowersevents.co.uk", true },
{ "wdbgroup.co.uk", true },
- { "wdesk.com", true },
{ "wdic.org", true },
- { "wdmg.com.ua", true },
{ "wdodelta.nl", true },
{ "wdol.gov", true },
{ "wdrl.info", true },
{ "wdt.cz", false },
- { "wdt.io", true },
+ { "we-bb.com", true },
{ "we-run-linux.de", true },
{ "we-use-linux.de", true },
{ "weacceptbitcoin.gr", true },
@@ -35621,6 +36068,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wealthreport.com.au", true },
{ "wearandcare.net", true },
{ "weare1inspirit.com", true },
+ { "wearebfi.co.uk", true },
{ "wearegenki.com", true },
{ "wearehackerone.com", true },
{ "wearepapermill.co", true },
@@ -35635,7 +36083,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "web-dl.cc", true },
{ "web-hotel.gr", true },
{ "web-kouza.com", true },
- { "web-mail.info", true },
{ "web-redacteuren.nl", true },
{ "web-wave.jp", true },
{ "web.bzh", true },
@@ -35648,9 +36095,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "webaeon.org", true },
{ "webaholic.co.in", true },
{ "webais.ru", true },
+ { "webalert.cz", true },
{ "webambacht.nl", true },
{ "webandmore.de", false },
- { "webapky.cz", true },
{ "webappky.cz", true },
{ "webartex.ru", true },
{ "webbiz.co.uk", true },
@@ -35671,13 +36118,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "webdesignlabor.ch", true },
{ "webdesignplay.com", true },
{ "webdesignplayground.io", true },
- { "webdesignsandiego.com", true },
{ "webdevops.io", true },
{ "webdevxp.com", true },
{ "webdl.org", true },
{ "webduck.nl", false },
{ "webeast.eu", true },
{ "webeau.com", true },
+ { "webeditors.com", true },
{ "webergrillrestaurant.com", true },
{ "webev.ru", true },
{ "webexample.win", true },
@@ -35690,7 +36137,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "webfox.com.br", true },
{ "webgarten.ch", true },
{ "webgears.com", true },
- { "webgreat.de", true },
{ "webharvest.gov", true },
{ "webhooks.stream", true },
{ "webhostingshop.ca", true },
@@ -35699,6 +36145,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "webinnovation.ie", true },
{ "webjobposting.com", true },
{ "webkef.com", true },
+ { "webkeks.org", true },
{ "weblagring.se", true },
{ "weblate.org", true },
{ "webliberty.ru", true },
@@ -35718,21 +36165,23 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "webministeriet.net", true },
{ "webmotelli.fi", true },
{ "webnames.ca", true },
- { "webnoob.net", true },
{ "webogram.org", false },
{ "webpinoytambayan.net", true },
{ "webpinoytv.info", true },
{ "webpostingmart.com", true },
{ "webpostingpro.com", true },
{ "webpostingreviews.com", true },
+ { "webproject.rocks", true },
{ "webproxy.pw", true },
{ "webpubsub.com", true },
{ "webqualitat.com.br", true },
+ { "webqueens.com", true },
{ "webrebels.org", false },
{ "webrentcars.com", true },
{ "webreport.fr", true },
{ "webreslist.com", true },
{ "webscale.nl", false },
+ { "websec.nl", true },
{ "websectools.com", true },
{ "websecurity.is", true },
{ "webseitendesigner.com", false },
@@ -35749,7 +36198,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "websitesdallas.com", true },
{ "websiteservice.pro", true },
{ "webslake.com", true },
- { "websmartmedia.co.uk", true },
{ "webspiral.jp", true },
{ "webspire.tech", true },
{ "webstijlen.nl", true },
@@ -35760,7 +36208,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "websvetaines.lt", true },
{ "webtalis.nl", true },
{ "webtasarim.pw", true },
- { "webtek.nu", true },
{ "webtheapp.com", true },
{ "webtobesocial.de", true },
{ "webtorrent.io", true },
@@ -35775,11 +36222,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "webworkshop.ltd", true },
{ "webyazilimankara.com", true },
{ "webz.one", true },
- { "webzanem.com", true },
+ { "wecanvisit.com", true },
{ "wechatify.com", true },
{ "wecleanbins.com", true },
{ "wecobble.com", true },
- { "wedding-m.jp", true },
{ "weddingalbumsdesign.com", true },
{ "weddingfantasy.ru", true },
{ "weddingsbynoon.co.uk", true },
@@ -35788,12 +36234,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "weeblr.com", true },
{ "weeblrpress.com", true },
{ "weedcircles.com", true },
+ { "weedlandia.org", true },
{ "weedlife.com", true },
{ "weednews.co", true },
{ "weedupdate.com", true },
{ "weedworthy.com", true },
{ "weedypedia.de", true },
- { "week.report", true },
{ "weekdone.com", true },
{ "weekendinitaly.com", true },
{ "weekly-residence.com", true },
@@ -35807,6 +36253,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "weerstatistieken.nl", true },
{ "wefinanceinc.com", true },
{ "wefitboilers.com", true },
+ { "weforgood.org.tw", true },
{ "wegethitched.co.uk", true },
{ "weggeweest.nl", true },
{ "wegner.no", true },
@@ -35824,7 +36271,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "weils.net", true },
{ "weiltoast.de", true },
{ "weimaraner.com.br", true },
- { "weiming.ddns.net", true },
{ "weimz.com", true },
{ "wein.cc", true },
{ "wein.co.kr", true },
@@ -35856,13 +36302,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wellmarts.com", true },
{ "wellness-gutschein.de", true },
{ "wellnesscheck.net", true },
- { "wellopp.com", true },
- { "wellsplasticsurgery.com", true },
- { "wellspringcamps.com", true },
{ "welovecatsandkittens.com", true },
- { "welovemail.com", true },
{ "welpo.me", true },
{ "welsh.com.br", true },
+ { "welshccf.org.uk", true },
{ "welteneroberer.de", true },
{ "weltengilde.de", true },
{ "weltenhueter.de", true },
@@ -35887,13 +36330,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wepay.vn", true },
{ "weplaynaked.dk", true },
{ "wer-kommt-her.de", true },
- { "wer.sh", true },
{ "werally.com", true },
+ { "werbe-sonnenbrillen.de", true },
+ { "werbeagentur.de", true },
{ "werbedesign-tauber.de", true },
{ "werbefotograf-leitner.de", true },
{ "werbefotografie-leitner.de", true },
{ "werbewelt-tv.de", true },
{ "werbezentrum-stiebler.de", true },
+ { "werbik.at", true },
{ "werehub.org", true },
{ "wereldkoffie.eu", true },
{ "werepairit.com.au", true },
@@ -35918,10 +36363,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wertheimer-burgrock.de", true },
{ "wertpapiertreuhand.de", true },
{ "werwolf-live.de", true },
+ { "wes-dev.com", true },
{ "wesecom.com", true },
{ "wesell.asia", true },
{ "weserv.nl", true },
{ "wesleycabus.be", true },
+ { "wesleywarnell.com", true },
{ "wesoco.de", true },
{ "wesreportportal.com", true },
{ "wessner.co", true },
@@ -35929,12 +36376,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "west-contemporary.com", true },
{ "west-trans.com.au", true },
{ "west-wind.net", true },
- { "westcanal.net", true },
{ "westcarrollton.org", true },
{ "westcentenaryscouts.org.au", true },
{ "westcentralaor.org", true },
- { "westcoastaggregate.com", true },
{ "westcoastcastles.com", true },
+ { "westcoastmarineadvisor.com", true },
{ "westcode.de", true },
{ "westcountrystalking.com", true },
{ "westendwifi.net", true },
@@ -35958,14 +36404,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "westwood.no", true },
{ "wetofu.top", true },
{ "wevenues.com", true },
- { "wevg.org", true },
{ "wewitro.de", true },
{ "wewitro.net", true },
{ "wexfordbouncycastles.ie", true },
{ "wexilapp.com", true },
{ "weyland-yutani.org", true },
{ "weyland.tech", true },
- { "wezl.net", true },
{ "wf-bigsky-master.appspot.com", true },
{ "wf-demo-eu.appspot.com", true },
{ "wf-demo-hrd.appspot.com", true },
@@ -35984,6 +36428,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wgom.org", true },
{ "wgplatform.co.uk", true },
{ "wgraphics.ru", true },
+ { "wgsi-friesland.nl", true },
{ "wh-guide.de", true },
{ "whanau.org", true },
{ "what-wood.servehttp.com", true },
@@ -35998,7 +36443,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "whatclinic.ru", true },
{ "whateveraspidercan.com", true },
{ "whatismycountry.com", true },
+ { "whatismyip.net", true },
{ "whatismyipaddress.ca", true },
+ { "whatisthe.cloud", true },
{ "whatnext.limited", true },
{ "whatsahoy.com", true },
{ "whatsapp.com", true },
@@ -36051,13 +36498,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "whitelabelcashback.nl", true },
{ "whitelabeltickets.com", false },
{ "whitepharmacy.co.uk", true },
+ { "whiteready.it", true },
{ "whiterose.goip.de", true },
- { "whiteshadowimperium.com", true },
{ "whitewebhosting.co.za", true },
{ "whitewebhosting.com", true },
{ "whitewinterwolf.com", true },
{ "whitkirkartsguild.com", true },
{ "whitkirkchurch.org.uk", true },
+ { "whittome.com", true },
{ "whitworth.nyc", true },
{ "whizzzbang.co.uk", true },
{ "whmcs.hosting", true },
@@ -36074,10 +36522,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "whoiswp.com", true },
{ "wholelotofbounce.co.uk", false },
{ "wholesalecbd.com", true },
+ { "wholesomeharvestbread.com", false },
{ "whonix.org", true },
{ "whosyourdaddy.ml", true },
{ "whoturgled.com", true },
{ "whqtravel.org", false },
+ { "whs-music.org", true },
{ "whta.se", true },
{ "whub.io", true },
{ "why-brexit.uk", true },
@@ -36091,7 +36541,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wiberg.nu", true },
{ "wichitafoundationpros.com", true },
{ "wickrath.net", true },
- { "widdleguy.com", true },
{ "wideboxmacau.com", false },
{ "widegab.com", true },
{ "widemann.de", true },
@@ -36105,6 +36554,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wiedu.net", true },
{ "wiegedaten.de", true },
{ "wiehenkrug.de", true },
+ { "wiek.net", true },
{ "wien52.at", true },
{ "wieneck-bauelemente.de", true },
{ "wienergyjobs.com", true },
@@ -36118,6 +36568,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wigggle.it", true },
{ "wigle.net", true },
{ "wiimotion.de", true },
+ { "wijaya.net", true },
{ "wijnbesteld.nl", true },
{ "wijnservices.nl", false },
{ "wijzijnwolf.nl", true },
@@ -36145,16 +36596,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wilcodeboer.me", true },
{ "wild-turtles.com", false },
{ "wildboaratvparts.com", true },
- { "wildcard.hu", true },
{ "wilddogdesign.co.uk", true },
- { "wildewood.ca", true },
{ "wildlifeadaptationstrategy.gov", true },
{ "wildnisfamilie.net", true },
{ "wildtrip.blog", true },
{ "wildwildtravel.com", true },
{ "wildzoopark.co.uk", true },
{ "wildzoopark.com", true },
- { "wilfrid-calixte.fr", true },
{ "wili.li", true },
{ "wiliquet.net", true },
{ "wilkushka.com", true },
@@ -36167,11 +36615,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "willi-graf-gymnasium.de", true },
{ "willi-graf-os.de", true },
{ "william.gg", true },
- { "williamboundsltd.com", true },
+ { "williamboulton.co.uk", true },
{ "williamfeely.info", true },
{ "williamjohngauthier.net", true },
{ "williamsonshore.com", true },
{ "williamsportmortgages.com", true },
+ { "williamsroom.com", true },
{ "williamtm.com", true },
{ "willnorris.com", true },
{ "willow.technology", true },
@@ -36180,6 +36629,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wills.co.tt", true },
{ "willstamper.name", true },
{ "willstocks.co.uk", true },
+ { "willvision.com", true },
{ "willywangstory.com", true },
{ "willywangstory.com.tw", true },
{ "willywangstory.org", true },
@@ -36190,7 +36640,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wimpernforyou.de", true },
{ "win7stylebuilder.com", false },
{ "winbignow.click", true },
+ { "winbuzzer.com", true },
{ "wincasinowin.click", true },
+ { "wind.moe", true },
{ "winddan.nz", true },
{ "windelnkaufen24.de", true },
{ "windowcleaningexperts.net", true },
@@ -36201,11 +36653,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "windrunner.se", true },
{ "windscribe.com", true },
{ "windsock-app.com", true },
+ { "windsorite.ca", true },
+ { "windsorspi.com", true },
{ "windycitydubfest.com", true },
{ "wine-tapa.com", true },
{ "wineonthewall.com", true },
{ "winepress.org", true },
- { "winfieldchen.me", true },
{ "winghill.com", true },
{ "wingify.com", true },
{ "wingmin.net", true },
@@ -36223,7 +36676,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wintercam.nl", true },
{ "winterfeldt.de", true },
{ "winterhillbank.com", true },
- { "wintermeyer-consulting.de", true },
{ "wintermeyer.de", true },
{ "winterschoen.nl", true },
{ "wintodoor.com", true },
@@ -36247,6 +36699,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wisak.me", true },
{ "wisal.org", true },
{ "wiseflat.com", true },
+ { "wispapp.com", false },
{ "wisper.net.au", true },
{ "wispsuperfoods.com", true },
{ "wisv.ch", true },
@@ -36254,6 +36707,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wit.ai", true },
{ "with-environment.com", true },
{ "with-planning.co.jp", true },
+ { "withextraveg.net", true },
{ "withgoogle.com", true },
{ "withinsecurity.com", true },
{ "withlocals.com", true },
@@ -36270,6 +36724,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wizzley.com", true },
{ "wizzr.nl", true },
{ "wj0666.com", true },
+ { "wjbolles.com", true },
{ "wjci.com", true },
{ "wje-online.de", true },
{ "wjg.ca", true },
@@ -36278,7 +36733,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wjm2038.me", true },
{ "wjr.io", true },
{ "wjwieland.dvrdns.org", false },
- { "wk.is", true },
{ "wkennington.com", true },
{ "wkv.com", true },
{ "wkz.io", true },
@@ -36297,6 +36751,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wmfusercontent.org", true },
{ "wmkowa.de", true },
{ "wmustore.com", true },
+ { "wnmed.com.au", true },
{ "wnu.com", true },
{ "wo-ist-elvira.net", true },
{ "wo2forum.nl", true },
@@ -36313,22 +36768,22 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wogo.org", true },
{ "woheni.de", true },
{ "wohlgemuth.rocks", true },
+ { "wohlpa.de", true },
{ "wohnbegleitung.ch", true },
{ "wohnsitz-ausland.com", true },
{ "woi.vision", true },
{ "wokinghammotorhomes.com", true },
- { "woktoss.com", true },
{ "wolfachtal-alpaka.de", true },
{ "wolfarth.info", true },
{ "wolfermann.org", true },
+ { "wolferstetterkeller.de", true },
{ "wolfgang-braun.info", true },
{ "wolfgang-kerschbaumer.at", true },
{ "wolfgang-kerschbaumer.com", true },
{ "wolfgang-kerschbaumer.net", true },
{ "wolfgang-kloke.de", true },
{ "wolfgang-ziegler.com", true },
- { "wolfie.ovh", true },
- { "wolfram.io", true },
+ { "wolfie.ovh", false },
{ "wolfsden.cz", true },
{ "wolfwings.us", true },
{ "wolfy1339.com", false },
@@ -36338,6 +36793,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wollongongbaptist.hopto.org", true },
{ "wollwerk.org", true },
{ "wolszon.me", true },
+ { "woltlab-demo.com", true },
{ "womb.city", true },
{ "wombatalla.com.au", true },
{ "wombats.net", true },
@@ -36345,6 +36801,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "womensalespros.com", true },
{ "womenshairlossproject.com", true },
{ "wonabo.com", true },
+ { "wonder.com.mx", false },
{ "wonderbill.com", true },
{ "wonderfuleducation.eu", true },
{ "wonderfuleducation.nl", true },
@@ -36353,6 +36810,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wonderlandmovies.de", true },
{ "wondermags.com", true },
{ "wonghome.net", true },
+ { "wood-crafted.co.uk", true },
+ { "wood-crafted.uk", true },
{ "woodbury.io", true },
{ "woodcoin.org", true },
{ "woodev.us", true },
@@ -36363,7 +36822,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "woodomat.com", true },
{ "woodsidepottery.ca", true },
{ "woof.gq", true },
+ { "woofsbakery.com", true },
{ "woohooyeah.nl", true },
+ { "woomai.net", true },
{ "woonboulevardvolendam.nl", true },
{ "woontegelwinkel.nl", true },
{ "wooplagaming.com", true },
@@ -36378,7 +36839,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wordher.com", true },
{ "wordlessecho.com", true },
{ "wordpress.com", false },
- { "wordpresspro.cl", true },
{ "wordsmart.it", true },
{ "wordspy.com", true },
{ "wordxtra.net", true },
@@ -36387,11 +36847,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "workcelerator.com", true },
{ "workcheck.bz", true },
{ "workcloud.jp", true },
+ { "workforce.co.tz", true },
{ "workgrouptech.org", true },
{ "workingclassmedia.com", true },
{ "workinginsync.co.uk", true },
{ "workingmachine.info", true },
{ "workissime.com", true },
+ { "workmart.mx", true },
+ { "workoptions.com", true },
{ "workplaces.online", true },
{ "workraw.com", true },
{ "works-ginan.jp", true },
@@ -36400,12 +36863,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "worksitevr.com", true },
{ "world-in-my-eyes.com", true },
{ "worldcareers.dk", true },
- { "worldchess.london", true },
{ "worldcigars.com.br", true },
{ "worldcrafts.org", true },
{ "worldcubeassociation.org", true },
{ "worldessays.com", true },
{ "worldeventscalendars.com", true },
+ { "worldmeteo.info", true },
+ { "worldnettps.com", true },
+ { "worldofarganoil.com", true },
{ "worldofbelia.de", true },
{ "worldofparties.co.uk", true },
{ "worldofterra.net", true },
@@ -36417,6 +36882,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "worldstone777.com", true },
{ "worldtalk.de", true },
{ "wormbytes.ca", true },
+ { "wormdisk.net", true },
{ "worst.horse", false },
{ "wort-suchen.de", true },
{ "woshiluo.site", true },
@@ -36450,8 +36916,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wpac.de", true },
{ "wpandup.org", true },
{ "wpcanban.com", true },
- { "wpcdn.bid", true },
{ "wpcharged.nz", true },
+ { "wpdesigner.ir", true },
{ "wpdirecto.com", true },
{ "wpdublin.com", true },
{ "wpenhance.com", true },
@@ -36470,6 +36936,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wpsec.nl", true },
{ "wpserp.com", true },
{ "wpsharks.com", true },
+ { "wpsitemovers.com", true },
+ { "wpsmackdown.com", true },
{ "wpsnelheid.nl", true },
{ "wpsono.com", true },
{ "wpthaiuser.com", true },
@@ -36479,8 +36947,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wpvulndb.com", true },
{ "wq.ro", true },
{ "wr.su", true },
- { "wrapit.hu", true },
- { "wrapitup.co.uk", true },
{ "wrara.org", true },
{ "wrc-results.com", true },
{ "wrdcfiles.ca", true },
@@ -36507,6 +36973,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "writtit.com", true },
{ "wrksheet.com", true },
{ "wrmea.org", true },
+ { "wrn.sh", true },
{ "wromeapp.com", true },
{ "wrongware.cz", true },
{ "wrp-timber-mouldings.co.uk", true },
@@ -36532,8 +36999,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wtfismyip.com", true },
{ "wtfnope.org", true },
{ "wth.in", true },
+ { "wtpdive.jp", true },
{ "wtpmj.com", true },
- { "wtw.io", false },
+ { "wtw.io", true },
{ "wuerfel.wf", true },
{ "wuerfelmail.de", true },
{ "wufu.org", false },
@@ -36541,6 +37009,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wug.news", true },
{ "wuifan.com", true },
{ "wuji.cz", true },
+ { "wumai-p.cn", true },
+ { "wumai.cloud", true },
{ "wumbo.cf", true },
{ "wumbo.co.nz", true },
{ "wumbo.ga", true },
@@ -36549,8 +37019,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wumbo.tk", true },
{ "wunderkarten.de", true },
{ "wunderlist.com", true },
+ { "wundernas.ch", true },
{ "wundi.net", true },
- { "wutianxian.com", true },
+ { "wuppertal-2018.de", true },
+ { "wuppertaler-kurrende.com", true },
+ { "wuppertaler-kurrende.de", true },
{ "wutianyi.com", true },
{ "wuxiaobai.win", true },
{ "wuxiaohen.com", true },
@@ -36565,19 +37038,21 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wweforums.net", true },
{ "wweichen.com.cn", true },
{ "wwgc2011.se", true },
+ { "wwjd.dynu.net", true },
{ "wwv-8522.com", true },
{ "wwv-8722.com", true },
{ "www-33445.com", true },
{ "www-49889.com", true },
{ "www-8522.am", true },
{ "www-8522.com", true },
+ { "www-86499.com", true },
{ "www-8722.com", true },
{ "www-9822.com", true },
{ "www.aclu.org", false },
{ "www.airbnb.com", true },
{ "www.amazon.cn", true },
{ "www.amazon.es", true },
- { "www.apollo-auto.com", false },
+ { "www.apollo-auto.com", true },
{ "www.banking.co.at", false },
{ "www.braintreepayments.com", false },
{ "www.calyxinstitute.org", false },
@@ -36609,18 +37084,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "www.lastpass.com", false },
{ "www.linode.com", false },
{ "www.lookout.com", false },
- { "www.makeyourlaws.org", true },
{ "www.messenger.com", true },
{ "www.mydigipass.com", false },
{ "www.mylookout.com", false },
{ "www.noisebridge.net", true },
{ "www.opsmate.com", true },
+ { "www.org.gg", true },
{ "www.paypal.com", false },
{ "www.python.org", true },
{ "www.re", true },
{ "www.rememberthemilk.com", true },
{ "www.sb", true },
{ "www.simple.com", false },
+ { "www.techrepublic.com", true },
{ "www.theguardian.com", true },
{ "www.therapynotes.com", true },
{ "www.tinfoilsecurity.com", false },
@@ -36632,6 +37108,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "www.vino75.com", false },
{ "www.wepay.com", false },
{ "www.wordpress.com", false },
+ { "www.zdnet.com", true },
{ "www68277.com", true },
{ "wxcafe.net", true },
{ "wxh.jp", true },
@@ -36648,7 +37125,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wyrihaximus.net", true },
{ "wyrimaps.net", true },
{ "wyssmuller.ch", true },
- { "wzfetish.com.br", true },
{ "wzfou.com", true },
{ "wzrd.in", true },
{ "wzyboy.org", true },
@@ -36659,16 +37135,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "x.st", true },
{ "x0r.be", true },
{ "x13.com", true },
- { "x1616.tk", true },
{ "x1be.win", true },
{ "x2d2.de", true },
{ "x378.ch", true },
{ "x509.io", true },
+ { "x69.biz", true },
+ { "x69x.net", true },
{ "x7plus.com", true },
{ "xa.search.yahoo.com", false },
{ "xa1.uk", true },
{ "xanadu-taxi.cz", true },
- { "xanax.pro", true },
+ { "xants.de", true },
{ "xatr0z.org", false },
{ "xavier.is", true },
{ "xawen.net", true },
@@ -36685,7 +37162,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "xbtce.com", true },
{ "xbtmusic.org", false },
{ "xcentricmold.com", true },
- { "xchangeinfo.com", true },
{ "xcler8.com", true },
{ "xclirion-support.de", true },
{ "xcorpsolutions.com", true },
@@ -36693,12 +37169,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "xd.cm", true },
{ "xd.fi", true },
{ "xdavidhu.me", true },
+ { "xdawn.cn", true },
{ "xdeftor.com", true },
+ { "xecure.zone", true },
{ "xecureit.com", true },
{ "xeedbeam.me", true },
{ "xega.org", true },
{ "xehost.com", true },
{ "xelesante.jp", true },
+ { "xendo.net", true },
{ "xenomedia.nl", true },
{ "xenon.cloud", true },
{ "xenoncloud.net", true },
@@ -36708,54 +37187,58 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "xentox.com", true },
{ "xerblade.com", true },
{ "xerhost.de", true },
+ { "xerownia.eu", true },
{ "xetown.com", true },
{ "xf-liam.com", true },
{ "xfce.space", true },
{ "xfd3.de", true },
{ "xferion.com", true },
{ "xfix.pw", true },
+ { "xfrag-networks.com", true },
{ "xgame.com.tr", true },
{ "xgclan.com", true },
{ "xgn.es", true },
+ { "xhadius.de", true },
{ "xhmikosr.io", true },
{ "xho.me", true },
{ "xia.de", true },
+ { "xiamenshipbuilding.com", true },
{ "xiamuzi.com", true },
{ "xiangblog.com", true },
{ "xiangweiqing.co.uk", true },
{ "xiangwenquan.me", true },
{ "xianjianruishiyouyiyuan.com", true },
{ "xiaobude.cn", true },
+ { "xiaocg.xyz", true },
{ "xiaofengsky.com", true },
{ "xiaoguo.net", false },
- { "xiaolan.me", true },
{ "xiaolanglang.net", true },
{ "xiaomi.eu", true },
{ "xiaoniaoyou.com", true },
{ "xiaoyu.net", true },
{ "xiaoyy.org", true },
- { "xiaxuejin.cn", true },
+ { "xiazhanjian.com", true },
{ "xice.cf", true },
{ "xichtsbuch.de", true },
{ "xicreative.net", true },
+ { "xiecongan.org", true },
{ "xif.at", true },
{ "xight.org", true },
{ "xilef.org", true },
- { "xilegames.com", true },
{ "xilkoi.net", true },
{ "xilou.org", true },
{ "ximbo.net", true },
{ "xin-in.com", true },
{ "xin-in.net", true },
- { "xinex.cz", true },
{ "xing-in.net", true },
- { "xingiahanvisa.net", true },
{ "xinnixdeuren-shop.be", true },
+ { "xinuspeed.com", true },
+ { "xinuspeedtest.com", true },
+ { "xinuurl.com", true },
{ "xiongx.cn", true },
{ "xj8876.com", true },
{ "xjd.vision", true },
{ "xjjeeps.com", true },
- { "xjoin.de", true },
{ "xjpvictor.info", true },
{ "xkblog.xyz", true },
{ "xkcd.pw", true },
@@ -36775,21 +37258,25 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "xmr.to", true },
{ "xmtpro.com", true },
{ "xmusic.live", true },
+ { "xmv.cz", false },
{ "xn-----8kcgbo2bmdgkdacthvjf.xn--p1ai", true },
{ "xn----7sbfl2alf8a.xn--p1ai", true },
{ "xn----8hcdn2ankm1bfq.com", true },
+ { "xn----zmcaltpp1mdh16i.com", true },
{ "xn--0iv967ab7w.xn--rhqv96g", true },
{ "xn--0kq33cz5c8wmwrqqw1d.com", true },
{ "xn--24-6kch4bfqee.xn--p1ai", true },
{ "xn--24-glcia8dc.xn--p1ai", true },
{ "xn--3lqp21gwna.cn", true },
{ "xn--4pv80kkz8auzf.jp", true },
+ { "xn--5dbkjqb0d.com", true },
+ { "xn--5dbkjqb0d.net", true },
{ "xn--6o8h.cf", true },
+ { "xn--6x6a.life", true },
{ "xn--79q87uvkclvgd56ahq5a.net", true },
{ "xn--7ca.co", true },
{ "xn--7xa.google.com", true },
{ "xn--80aaagmgvmvmcuoq7r.xn--p1ai", true },
- { "xn--80ac0aqlt.xn--p1ai", true },
{ "xn--80adb4aeode.xn--p1ai", true },
{ "xn--80aejljbfwxn.xn--p1ai", true },
{ "xn--80anogxed.xn--p1ai", true },
@@ -36806,7 +37293,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "xn--cck4ax91r.com", true },
{ "xn--cck7f515h.com", true },
{ "xn--cckdrt0kwb4g3cnh.com", true },
- { "xn--cckvb1cwa0c5br5e2d2711k.net", true },
{ "xn--cctsgy36bnvprwpekc.com", true },
{ "xn--cfa.site", true },
{ "xn--d1acj9c.xn--90ais", true },
@@ -36819,9 +37305,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "xn--dmonenjger-q5ag.net", true },
{ "xn--dragni-g1a.de", true },
{ "xn--dtursfest-72a.dk", true },
- { "xn--e--0g4aiy1b8rmfg3o.jp", true },
- { "xn--e--4h4axau6ld4lna0g.com", true },
- { "xn--e--ig4a4c3f6bvc5et632i.com", true },
{ "xn--e1aoahhqgn.xn--p1ai", true },
{ "xn--ecki0cd0bu9a4nsjb.com", true },
{ "xn--eckle6c0exa0b0modc7054g7h8ajw6f.com", true },
@@ -36833,7 +37316,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "xn--fischereiverein-mnsterhausen-i7c.de", true },
{ "xn--fp8h58f.ws", true },
{ "xn--frankierknig-djb.de", true },
+ { "xn--fs5ak3f.com", true },
+ { "xn--gfrr-7qa.li", true },
+ { "xn--gfrrli-yxa.ch", true },
{ "xn--hfk-allgu-schwaben-stb.de", true },
+ { "xn--hgbk4a00a.com", true },
{ "xn--hllrigl-90a.at", true },
{ "xn--i2ru8q2qg.com", true },
{ "xn--imker-in-nrnberg-szb.de", true },
@@ -36841,6 +37328,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "xn--jbs-tna.de", true },
{ "xn--jda.tk", true },
{ "xn--jp8hx8f.ws", true },
+ { "xn--kckd0bd4a8tp27yee2e.com", true },
{ "xn--kda.tk", true },
{ "xn--knstler-n2a.tips", false },
{ "xn--ktha-kamrater-pfba.se", true },
@@ -36849,12 +37337,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "xn--lsaupp-iua.se", true },
{ "xn--lsupp-mra.net", true },
{ "xn--manuela-stsser-psb.de", true },
+ { "xn--martnvillalba-zib.com", true },
+ { "xn--martnvillalba-zib.net", true },
{ "xn--mein-kchenhelfer-ozb.de", true },
- { "xn--mensenges-o1a8c.gq", true },
{ "xn--mensengesss-t8a.gq", true },
{ "xn--mentaltraining-fr-musiker-uwc.ch", true },
{ "xn--mgbbh2a9fub.xn--ngbc5azd", false },
{ "xn--mgbmmp7eub.com", true },
+ { "xn--mgbpkc7fz3awhe.com", true },
{ "xn--mhsv04avtt1xi.com", false },
{ "xn--mllers-wxa.info", true },
{ "xn--myrepubic-wub.net", true },
@@ -36862,6 +37352,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "xn--n8j7dygrbu0c31a5861bq8qb.com", true },
{ "xn--n8jp5083dnzs.net", true },
{ "xn--n8jtcugp92n4wc738f.net", true },
+ { "xn--nf1a578axkh.xn--fiqs8s", true },
+ { "xn--nrrdetval-v2ab.se", true },
{ "xn--o38h.tk", true },
{ "xn--pbt947am3ab71g.com", true },
{ "xn--pe-bka.ee", true },
@@ -36870,8 +37362,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "xn--qckss0j.tk", true },
{ "xn--qfun83b.ga", true },
{ "xn--r8jzaf7977b09e.com", true },
+ { "xn--rdiger-kuhlmann-zvb.de", true },
{ "xn--reisebro-herrsching-bbc.de", true },
- { "xn--rlcus7b3d.xn--xkc2dl3a5ee0h", true },
{ "xn--roselire-60a.ch", true },
{ "xn--roselire-60a.com", true },
{ "xn--rt-cja.ie", true },
@@ -36896,6 +37388,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "xn--y-5ga.com", true },
{ "xn--y8j148r.xn--q9jyb4c", true },
{ "xn--y8ja6lb.xn--q9jyb4c", true },
+ { "xn--y8jarb5hca.jp", true },
{ "xn--zettlmeil-n1a.de", true },
{ "xn--zr9h.cf", true },
{ "xn--zr9h.ga", true },
@@ -36910,14 +37403,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "xnu.kr", true },
{ "xo.tc", true },
{ "xo7.ovh", true },
+ { "xoda.pw", true },
{ "xolphin.nl", true },
{ "xombitgames.com", true },
{ "xombitmusic.com", true },
{ "xone.cz", true },
{ "xonn.de", true },
+ { "xotika.tv", true },
{ "xp2.de", true },
+ { "xpbytes.com", true },
{ "xpd.se", true },
- { "xpenology-fr.net", true },
{ "xperidia.com", true },
{ "xpj.bet", true },
{ "xpjcunkuan.com", true },
@@ -36927,23 +37422,25 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "xposedornot.com", true },
{ "xps2pdf.co.uk", true },
{ "xps2pdf.info", true },
- { "xq55.com", true },
- { "xqin.net", true },
{ "xqk7.com", true },
{ "xr.cx", true },
{ "xrippedhd.com", true },
{ "xrockx.de", true },
{ "xroot.org", false },
+ { "xrwracing-france.com", true },
{ "xs2a.no", true },
{ "xscancun.com", true },
{ "xsec.me", true },
+ { "xserownia.com.pl", true },
+ { "xserownia.eu", true },
{ "xserownia.net", true },
+ { "xserownia.pl", true },
{ "xsmobile.de", true },
{ "xss.ht", true },
{ "xss.sk", true },
- { "xsstime.nl", true },
{ "xsz.jp", true },
{ "xtarget.ru", true },
+ { "xtips.us", true },
{ "xtom.chat", true },
{ "xtom.com", true },
{ "xtom.com.hk", true },
@@ -36959,31 +37456,33 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "xuab.net", true },
{ "xuan-li88.com", true },
{ "xuan-li88.net", true },
+ { "xuanmeishe.net", true },
{ "xubo666.com", true },
{ "xuc.me", true },
{ "xuedianshang.com", true },
+ { "xujan.com", true },
{ "xuming.studio", true },
{ "xunn.io", true },
{ "xuntier.ch", true },
{ "xviimusic.com", true },
{ "xvt-blog.tk", true },
- { "xwalck.se", true },
{ "xwaretech.info", true },
{ "xx0r.eu", true },
{ "xxffo.com", true },
{ "xxiz.com", true },
+ { "xxx3dbdsm.com", true },
+ { "xxxladyboysporn.com", true },
{ "xxxlbox.com", true },
{ "xyfun.net", true },
{ "xyngular-health.com", true },
- { "xynta.ch", true },
{ "xywing.com", true },
{ "xyyp.mn", true },
{ "xyzulu.hosting", true },
- { "xza.fr", true },
{ "xzclip.cn", true },
{ "xzoneadventure.com", true },
+ { "xzy.es", true },
+ { "xzy.one", true },
{ "y11n.net", true },
- { "yaay.com.br", true },
{ "yabrt.cn", true },
{ "yabuisha.jp", true },
{ "yachigoya.com", true },
@@ -37019,6 +37518,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "yannick.cloud", true },
{ "yannik-buerkle.de", true },
{ "yannikbloscheck.com", true },
+ { "yannikhenke.de", true },
{ "yanovich.net", true },
{ "yanqiyu.info", true },
{ "yantrasthal.com", true },
@@ -37026,8 +37526,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "yao-in.net", true },
{ "yapbreak.fr", true },
{ "yarcom.ru", false },
+ { "yarogneva.ru", true },
{ "yarravilletownhouses.com.au", true },
{ "yaru.one", true },
+ { "yassine-ayari.com", true },
{ "yatesun.com", true },
{ "yatorie.net", true },
{ "yatsuenpoon.com", true },
@@ -37037,7 +37539,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "yaxim.org", true },
{ "yazaral.com", true },
{ "ybin.me", true },
- { "ybresson.com", true },
{ "ybsul.com", true },
{ "ybti.net", true },
{ "ybzhao.com", true },
@@ -37091,7 +37592,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "yephy.com", true },
{ "yeshu.org", true },
{ "yesiammaisey.me", true },
- { "yeswecan.co.bw", true },
{ "yeswehack.com", true },
{ "yetanalytics.io", true },
{ "yetii.net", true },
@@ -37100,7 +37600,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "yex.nz", true },
{ "yex.trade", true },
{ "yfengs.moe", true },
- { "ygcdyf.com", true },
+ { "ygobbs.com", true },
{ "yh35.net", true },
{ "yh599.cc", true },
{ "yhaupenthal.org", true },
@@ -37122,13 +37622,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "yingatech.com", true },
{ "yinglinda.love", true },
{ "yinlei.org", true },
+ { "yipingguo.com", true },
{ "yiyuanzhong.com", true },
{ "yiyueread.com", true },
{ "yiz96.com", true },
- { "yjsoft.me", true },
{ "yjsw.sh.cn", true },
{ "yksityisyydensuoja.fi", true },
{ "ylde.de", true },
+ { "ylilauta.org", true },
{ "ylinternal.com", true },
{ "ymarion.de", true },
{ "ymblaw.com", true },
@@ -37141,20 +37642,20 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "yoga-alliance-teacher-training.com", true },
{ "yoga-bad-toelz.de", true },
{ "yoga-in-aying.de", true },
- { "yoga-prive.de", true },
{ "yoga-school.xyz", true },
{ "yoga-sky.de", true },
{ "yoga-zentrum-narayani.de", true },
{ "yogabhawnamission.com", true },
+ { "yogacentric.co.uk", true },
{ "yogananda-roma.org", true },
{ "yogaschoolrishikesh.com", true },
- { "yogatrainingrishikesh.com", true },
{ "yoibyoin.info", true },
{ "yoitoko.city", true },
{ "yoitsu.moe", true },
{ "yokohama-legaloffice.jp", true },
{ "yolo.jetzt", true },
{ "yolobert.de", true },
+ { "yoloboatrentals.com", false },
{ "yolops.net", true },
{ "yombo.net", true },
{ "yongbin.org", true },
@@ -37166,8 +37667,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "yorcool.nl", true },
{ "yorkshiredalesinflatables.co.uk", true },
{ "yorkshireinflatables.co.uk", true },
- { "yorkshireterrier.com.br", true },
- { "yorname.ml", true },
{ "yosbeda.com", true },
{ "yosemo.de", true },
{ "yosheenetwork.fr", true },
@@ -37180,7 +37679,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "you.com.br", true },
{ "youareme.ca", true },
{ "youc.ir", true },
- { "youcanfuckoff.xyz", true },
{ "youcanmakeit.at", true },
{ "youcruit.com", true },
{ "youdowell.com", true },
@@ -37190,19 +37688,21 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "youhacked.me", true },
{ "youhavewords.com", true },
{ "youhua.ru", true },
+ { "youjizz.bz", true },
{ "youkaryote.com", true },
{ "youkaryote.org", true },
{ "youked.com", true },
{ "youkok2.com", true },
- { "youlend.com", true },
{ "youlovehers.com", true },
{ "youmonit.me", true },
{ "youms.de", true },
{ "young-sheldon.com", true },
{ "youngdogs.org", true },
{ "youngfree.cn", true },
+ { "youngpeopleunited.co.uk", true },
{ "youngsook.com", true },
{ "youngsook.org", true },
+ { "youpark.no", true },
{ "your-erotic-stories.com", true },
{ "your-out.com", true },
{ "youran.me", true },
@@ -37214,8 +37714,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "yourfuturestrategy.com.au", true },
{ "yourgames.tv", true },
{ "yourhair.net", true },
- { "yourlovesong.com.mx", true },
- { "yourname.xyz", true },
+ { "yourneighborhub.com", true },
{ "yourskin.nl", true },
{ "yourticketbooking.com", true },
{ "yousei.ne.jp", true },
@@ -37225,17 +37724,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "youtsuu-raku.com", true },
{ "youtube.com", true },
{ "youtubedownloader.com", true },
+ { "youtuberis.lt", true },
+ { "youwatchporn.com", true },
{ "yoxall.me.uk", true },
{ "yoyoost.duckdns.org", true },
{ "ypart.eu", true },
{ "ypid.de", true },
+ { "ypiresia.fr", false },
{ "yplanapp.com", true },
{ "yqjf68.com", true },
{ "yr166166.com", true },
{ "ys-shop.biz", true },
{ "ysicing.net", true },
{ "ysicorp.com", true },
- { "yslbeauty.com", true },
{ "ysun.xyz", true },
{ "ysx.me.uk", true },
{ "ytb.zone", true },
@@ -37247,6 +37748,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ytreza.fr", true },
{ "ytuquelees.net", true },
{ "yu.gg", false },
+ { "yu.vc", true },
{ "yuan.ga", true },
{ "yuanben.io", true },
{ "yuanbenlian.com", true },
@@ -37306,28 +37808,24 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "yubikeyservices.eu", true },
{ "yubiking.com", true },
{ "yue.la", true },
- { "yuema.net.cn", true },
- { "yui.cat", true },
{ "yuka.one", true },
{ "yukari.cafe", true },
{ "yuki-nagato.com", true },
{ "yuki.xyz", true },
- { "yukijinji.moe", true },
{ "yukimochi.com", true },
- { "yukimochi.io", true },
{ "yukimochi.jp", true },
{ "yukonconnector.com", true },
{ "yukonlip.com", true },
{ "yukontec.com", true },
+ { "yum0.cn", true },
{ "yumeconcert.com", true },
- { "yumli.net", true },
- { "yummylooks.com", true },
{ "yunity.org", true },
{ "yunjishou.pro", true },
{ "yunzhu.li", true },
{ "yuqi.me", true },
{ "yuricarlenzoli.it", true },
{ "yurikirin.me", true },
+ { "yurimoens.be", true },
{ "yurisviridov.com", true },
{ "yusa.me", true },
{ "yushi.moe", true },
@@ -37374,11 +37872,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "zabbix.tips", true },
{ "zabszk.net", true },
{ "zabukovnik.net", true },
+ { "zacadam.com", true },
{ "zacarias.com.ar", true },
{ "zacavi.com.br", true },
{ "zach.codes", true },
- { "zacharopoulos.eu", false },
- { "zacharopoulos.me", false },
+ { "zacharopoulos.eu", true },
{ "zacharopoulos.org", false },
{ "zacharydubois.me", true },
{ "zacharyschneider.com", true },
@@ -37387,7 +37885,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "zachgibbens.org", true },
{ "zachpeters.org", true },
{ "zachschneider.ca", true },
- { "zaclys.com", true },
+ { "zaclys.com", false },
{ "zadroweb.com", true },
{ "zafirus.name", true },
{ "zaghyr.org", true },
@@ -37411,9 +37909,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "zakspartiesandevents.com", true },
{ "zalamea.ph", true },
{ "zaloghaz.ro", true },
+ { "zamalektoday.com", true },
{ "zamocosmeticos.com.br", true },
{ "zamow.co", true },
{ "zandcell.com", true },
+ { "zander.dk", true },
{ "zanellidesigns.co.uk", true },
{ "zanthra.com", true },
{ "zanzabar.it", true },
@@ -37439,9 +37939,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "zayna.eu", true },
{ "zberger.com", true },
{ "zbetcheck.in", true },
- { "zbp.at", false },
{ "zbrane-doplnky.cz", true },
- { "zby.io", true },
{ "zbyga.cz", true },
{ "zbyte.it", true },
{ "zcarot.com", true },
@@ -37476,12 +37974,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "zekinteractive.com", true },
{ "zelfoverstappen.nl", true },
{ "zelfrijdendeautos.com", true },
- { "zellari.ru", true },
{ "zemlova.cz", true },
{ "zen-diez.de", true },
{ "zen-ume.com", true },
+ { "zenchain.com", true },
{ "zenevents.ro", true },
{ "zenfusion.fr", true },
+ { "zengdong.ren", true },
{ "zenics.co.uk", true },
{ "zenithmedia.ca", true },
{ "zenk-security.com", true },
@@ -37489,8 +37988,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "zenmate.com.tr", true },
{ "zenofa.co.id", true },
{ "zentask.io", true },
+ { "zenti.cloud", true },
+ { "zentiweb.nl", true },
{ "zenvideocloud.com", true },
- { "zenycosta.com", true },
{ "zephyrbk.com", true },
{ "zephyrbookkeeping.com", true },
{ "zeplin.io", true },
@@ -37516,7 +38016,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "zettaplan.ru", true },
{ "zettlmeissl.de", true },
{ "zevelev.net", true },
- { "zewtie.com", true },
{ "zfast.com.br", true },
{ "zfg.li", true },
{ "zfly.me", true },
@@ -37527,7 +38026,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "zh.search.yahoo.com", false },
{ "zhang-hao.com", true },
{ "zhang.nz", true },
- { "zhangcheng.org", true },
{ "zhangfangzhou.com", true },
{ "zhangge.net", true },
{ "zhanghao.me", true },
@@ -37548,11 +38046,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "zhoushuo.me", true },
{ "zhoutiancai.cn", true },
{ "zhovner.com", true },
+ { "zhthings.com", true },
{ "zhuihoude.com", true },
- { "zhuji.com", true },
- { "zhuji.com.cn", true },
- { "zhuji5.com", true },
- { "zhuweiyou.com", true },
{ "zi.is", true },
{ "ziegler-family.com", true },
{ "ziegler-heizung-frankfurt.de", true },
@@ -37564,6 +38059,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "zigottos.fr", true },
{ "zigzagmart.com", true },
{ "zihao.me", false },
+ { "zii.bz", true },
{ "zijung.me", true },
{ "zikinf.com", true },
{ "ziktime.com", true },
@@ -37591,24 +38087,32 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "zittingskalender.be", true },
{ "zivava.ge", true },
{ "zivmergers.com", true },
- { "zivver.com", true },
{ "zivyruzenec.cz", false },
{ "zixiao.wang", true },
- { "zixo.sk", true },
- { "ziz.exchange", true },
{ "zk.gd", true },
{ "zk9.nl", true },
{ "zkrypt.cc", true },
{ "zkzone.net", true },
{ "zlatakus.cz", true },
{ "zlatosnadno.cz", true },
+ { "zlaty-tyden.cz", true },
+ { "zlatytyden.cz", true },
{ "zlavomat.sk", true },
- { "zlc1994.com", true },
{ "zlima12.com", true },
{ "zlypi.com", true },
{ "zmala.com", true },
- { "zmscable.com", true },
+ { "zmarta.de", true },
+ { "zmarta.dk", true },
+ { "zmarta.fi", true },
+ { "zmarta.no", true },
+ { "zmarta.org", true },
+ { "zmarta.se", true },
+ { "zmartagroup.com", true },
+ { "zmartagroup.fi", true },
+ { "zmartagroup.no", true },
+ { "zmartagroup.se", true },
{ "znation.nl", true },
+ { "zny.pw", true },
{ "zobraz.cz", true },
{ "zobworks.com", true },
{ "zoccarato.ovh", true },
@@ -37621,10 +38125,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "zoigl.club", true },
{ "zojadravai.com", true },
{ "zoki.art", true },
+ { "zollihood.ch", true },
{ "zolokar.xyz", true },
- { "zombiesecured.com", true },
{ "zomerschoen.nl", true },
- { "zonadigital.co", true },
{ "zone-produkte.de", false },
{ "zone39.com", true },
{ "zonecb.com", true },
@@ -37636,8 +38139,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "zonglovani.info", true },
{ "zonky.cz", true },
{ "zonkysetkani.cz", true },
- { "zoo.city", true },
- { "zoofit.com.au", true },
+ { "zoo.city", false },
{ "zooish.net", true },
{ "zook.systems", true },
{ "zoola.io", true },
@@ -37656,16 +38158,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "zopy.com.br", true },
{ "zopyx.com", true },
{ "zor.com", true },
+ { "zorasvobodova.cz", true },
{ "zorgclustertool.nl", true },
{ "zorig.ch", true },
{ "zorium.org", true },
{ "zorki.nl", true },
{ "zorntt.fr", true },
+ { "zotero.org", true },
{ "zouk.info", true },
{ "zouyaoji.top", true },
{ "zozzle.co.uk", true },
{ "zqwqz.com", true },
{ "zravypapir.cz", true },
+ { "zrhdwz.cn", true },
{ "zrniecka-pre-sny.sk", true },
{ "zrnieckapresny.sk", true },
{ "zrt.io", true },
@@ -37679,7 +38184,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "zsrbcs.com", true },
{ "zten.org", true },
{ "ztjuh.tk", true },
- { "zuan-in.com", true },
{ "zuan-in.net", true },
{ "zubel.it", false },
{ "zubora.co", true },
@@ -37689,6 +38193,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "zug.fr", true },
{ "zug.io", true },
{ "zughilfen-test.de", true },
+ { "zuiacg.cc", true },
{ "zuiacg.com", true },
{ "zula.africa", true },
{ "zulu.ro", true },
@@ -37706,11 +38211,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "zurickrelogios.com.br", true },
{ "zurret.de", true },
{ "zusjesvandenbos.nl", true },
- { "zutsu-raku.com", true },
{ "zuzumba.es", true },
{ "zvps.uk", true },
{ "zvxr.net", true },
- { "zvz.im", true },
{ "zwalcz-cellulit.com", true },
{ "zwartendijkstalling.nl", true },
{ "zwb3.de", true },
@@ -37719,13 +38222,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "zwollemag.nl", true },
{ "zwollemagazine.nl", true },
{ "zwy.ch", true },
- { "zx1168.com", true },
- { "zx2268.com", true },
{ "zx6rninja.de", true },
{ "zx7r.de", true },
{ "zxavier.com", true },
{ "zxe.com.br", true },
{ "zxtcode.com", true },
+ { "zy.md", true },
{ "zybbo.com", true },
{ "zyciedlazwierzat.pl", true },
{ "zyciedogorynogami.pl", true },
diff --git a/services/sync/modules/service.js b/services/sync/modules/service.js
index f8c64b0fa..32e047f53 100644
--- a/services/sync/modules/service.js
+++ b/services/sync/modules/service.js
@@ -1338,9 +1338,10 @@ Sync11Service.prototype = {
// We successfully synchronized.
// Check if the identity wants to pre-fetch a migration sentinel from
// the server.
+ // Only supported by Sync server API level 2+
// If we have no clusterURL, we are probably doing a node reassignment
// so don't attempt to get it in that case.
- if (this.clusterURL) {
+ if (Svc.Prefs.get("APILevel") >= 2 && this.clusterURL) {
this.identity.prefetchMigrationSentinel(this);
}
diff --git a/services/sync/services-sync.js b/services/sync/services-sync.js
index ebac4412b..9473d9a9d 100644
--- a/services/sync/services-sync.js
+++ b/services/sync/services-sync.js
@@ -81,7 +81,7 @@ pref("services.sync.fxa.privacyURL", "https://accounts.firefox.com/legal/privacy
pref("services.sync.telemetry.submissionInterval", 43200); // 12 hours in seconds
pref("services.sync.telemetry.maxPayloadCount", 500);
-// Note that services.sync.validation.enabled is located in browser/app/profile/firefox.js
+// Note that services.sync.validation.enabled is located in application/[application name]/app/profile/[application name].js
// We consider validation this frequently. After considering validation, even
// if we don't end up validating, we won't try again unless this much time has passed.
diff --git a/testing/mozharness/requirements.txt b/testing/mozharness/requirements.txt
index 632355c54..9314abfee 100644
--- a/testing/mozharness/requirements.txt
+++ b/testing/mozharness/requirements.txt
@@ -8,12 +8,12 @@ dulwich==0.8.7
hg-git==0.4.0
logilab-astng==0.24.2
logilab-common==0.59.0
-mercurial==3.7.3
+mercurial ~> 4.1.3
mock==1.0.1
nose==1.2.1
ordereddict==1.1
-paramiko==1.10.0
-pycrypto==2.6
+paramiko ~> 1.17.6
+pycrypto > 2.6.1
pyflakes==0.6.1
pylint==0.27.0
simplejson==2.1.1
diff --git a/testing/web-platform/meta/html/dom/interfaces.html.ini b/testing/web-platform/meta/html/dom/interfaces.html.ini
index 8dbbe4969..59e445a3e 100644
--- a/testing/web-platform/meta/html/dom/interfaces.html.ini
+++ b/testing/web-platform/meta/html/dom/interfaces.html.ini
@@ -1594,9 +1594,6 @@
[Path2D interface: operation addPathByStrokingText(DOMString,CanvasDrawingStyles,SVGMatrix,Path2D,unrestricted double)]
expected: FAIL
- [DataTransfer interface object length]
- expected: FAIL
-
[Window interface: operation showModalDialog(DOMString,any)]
disabled:
if e10s: https://bugzilla.mozilla.org/show_bug.cgi?id=981796
diff --git a/toolkit/components/startup/nsAppStartup.cpp b/toolkit/components/startup/nsAppStartup.cpp
index fde00d1db..391389605 100644
--- a/toolkit/components/startup/nsAppStartup.cpp
+++ b/toolkit/components/startup/nsAppStartup.cpp
@@ -1020,8 +1020,13 @@ nsAppStartup::CreateInstanceWithProfile(nsIToolkitProfile* aProfile)
return rv;
}
+#if defined(XP_WIN)
+ const char *args[] = { "-no-remote", "-P", profileName.get() };
+ rv = process->Run(false, args, 3);
+#else
const char *args[] = { "-P", profileName.get() };
rv = process->Run(false, args, 2);
+#endif
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}
diff --git a/toolkit/components/thumbnails/BackgroundPageThumbs.jsm b/toolkit/components/thumbnails/BackgroundPageThumbs.jsm
index bd52e77e9..7b86fa07c 100644
--- a/toolkit/components/thumbnails/BackgroundPageThumbs.jsm
+++ b/toolkit/components/thumbnails/BackgroundPageThumbs.jsm
@@ -368,9 +368,12 @@ Capture.prototype = {
tel("CAPTURE_QUEUE_TIME_MS", this.startDate - this.creationDate);
// timeout timer
- let timeout = typeof(this.options.timeout) == "number" ?
- this.options.timeout :
- DEFAULT_CAPTURE_TIMEOUT;
+ let timeout;
+ if (this.options && typeof(this.options.timeout) == "number") {
+ timeout = this.options.timeout;
+ } else {
+ timeout = DEFAULT_CAPTURE_TIMEOUT;
+ }
this._timeoutTimer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
this._timeoutTimer.initWithCallback(this, timeout,
Ci.nsITimer.TYPE_ONE_SHOT);
@@ -468,11 +471,9 @@ Capture.prototype = {
};
if (!data) {
- // If this background attempt failed, cause a dummy file to be saved, so
+ // If this background attempt failed, cause a placeholder file to be saved, so
// that gets loaded instead of attempting again (and again).
- // XXX: Perhaps we can create a placeholder image to use instead of "null"
- // here, so it has something to show to the user?
- PageThumbs._store(this.url, this.url, null, true)
+ PageThumbs._store(this.url, this.url, atob(BLANKTHUMB), true)
.then(done, done);
return;
}
diff --git a/toolkit/components/thumbnails/PageThumbs.jsm b/toolkit/components/thumbnails/PageThumbs.jsm
index 9bd3ae4b3..5c7754b31 100644
--- a/toolkit/components/thumbnails/PageThumbs.jsm
+++ b/toolkit/components/thumbnails/PageThumbs.jsm
@@ -28,6 +28,9 @@ const MAX_THUMBNAIL_AGE_SECS = 172800; // 2 days == 60*60*24*2 == 172800 secs.
*/
const THUMBNAIL_DIRECTORY = "thumbnails";
+// contains base64 version of a placeholder thumbnail
+#include blankthumb.inc
+
Cu.import("resource://gre/modules/XPCOMUtils.jsm", this);
Cu.import("resource://gre/modules/PromiseWorker.jsm", this);
Cu.import("resource://gre/modules/Promise.jsm", this);
@@ -609,7 +612,15 @@ this.PageThumbsStorage = {
writeData: function Storage_writeData(aURL, aData, aNoOverwrite) {
let path = this.getFilePathForURL(aURL);
this.ensurePath();
- aData = new Uint8Array(aData);
+
+ // XXX: We try/catch here since 'null' isn't accepted until we implement
+ // ES2017's new Uint8Array(); allowance.
+ try {
+ aData = new Uint8Array(aData);
+ } catch(e) {
+ aData = new Uint8Array(0);
+ }
+
let msg = [
path,
aData,
diff --git a/toolkit/components/thumbnails/blankthumb.inc b/toolkit/components/thumbnails/blankthumb.inc
new file mode 100644
index 000000000..06577c19c
--- /dev/null
+++ b/toolkit/components/thumbnails/blankthumb.inc
@@ -0,0 +1,87 @@
+const BLANKTHUMB =
+"iVBORw0KGgoAAAANSUhEUgAAASwAAADsCAAAAADricSpAAASn0lEQVR4XuzQQREAAAwCoPWvaolV" +
+"8O1BBC41RrNkyZIlC1myZMmSJQtZsmTJkiULWbJkyZIlC1myZMmSJQtZsmTJkiULWbJkyZIliyfv" +
+"7HYbV5Ik/EUWScl2zwL7svvSc7MXp9uWyKrY2W0iUShI/tmLM6I7SJMpCrrw1xFZCZMNTTyQbNum" +
+"QSlGVEkSD6MHgWVaq81uNAT8eDL4v9eQFCVC6E+HlX6qW22GolkRAr3MBr+sdnPdTJmKQn86LLda" +
+"t4piKaVk6jgFwH+ul2a7uW3bVSVK0R8Mq9W1birLXEpIpHYoCgpgt8W1trqF5n+nv/TPf6Op1mtj" +
+"+pcKOykhCXQqALS3igEDdq3NrWqJ+INgpamulHkuRYAQIQlkxbTjuLZcIQ3QtuZWPZXQnwTL67qq" +
+"zEuEAP0WCChlR8W2CedI0YDfa2aFufwxsLy9Vc3zHBKgkIR2VDOpWsG5u9n7imA3Tf8Gd5X/4u+W" +
+"69ubl/N5DoEiIpJVzBMpooHETlLa0UYBUZG+/2pYrxfmZSoCpJBA+8YsegkALMAIyc2IuWy1eC1F" +
+"3zuGbb20aV5CAikEInlpphetgcEYzL41Y6hbo/E3ZzH4W1V/vXJ6Opc9UDulnRWjYtpDKJFbBIKy" +
+"zJK26m/rLF8vbZ7nAoKQROcqECUYVNNX3daMoW3VUMp3dJZpr798Oi8BoJAAAULS70NjFPub/UYI" +
+"sOY58Lb5G8Ji+3mZzqeiHUCSIktpTFUD0LgRIQRlLlLd/O1gef25zeelKJ0E9BkEQRtZST2t5Eso" +
+"R422tm8Gy5dfXs6zoG9UiC6L3JRET0kAiB33tAiv9VvBam+vLOcpf31BYiKxjcCI/WqyTGxIAkQs" +
+"AVv9RrDa25tOpwLc+rUh0ziKRJRezGuSAGIusG720WElq4tOS5AZpM9fl8ZRBqlzYU8ur2oqZqv6" +
+"HrDa60XnJRiIDMa6ZXQJRmulkqOmCbbNPj4s2uWi0yySjRIZQxWMEiBlyQAXhH7TWquOD8stYll0" +
+"iwLKWvdsLgEasdJHGpiKudbDw7Jj/o9TmuQmqvel0U8MJwxTiee5HfuGhXFjPr1V7ilK8fb/dLkB" +
+"Y4TiyY1mHRmWKpRTq51/RArHXD5hLXNTCsBIisBe23S1dNwYVlsnXVBywqSYTgXAAhx8Rv2SGMvT" +
+"/2oiMBSYDtyz3IClZOc1vdDe9wmDCp+Us9jeLpa2X68XBDGhsA8Ky7i5zFxFCmcSPU+5lpUSfF34" +
+"+vO6vjU2N0MUgoPCMq2hkzpDOU7PT4FHo4U+AT5h09mnvf2q2o+UIOwjwrLc4BQwGwDm5x8v52Ue" +
+"Wz2fBGWMx8tCgNfaMJoUavbxYNGaXSay7c5P8ySb07lgjILPaMQ0EgMQUQBrImgHc1aGcAETYEwR" +
+"BphoACzBF5XDxiizFANEgO2jwaIZpgCIZTk9Pb3MBjDXNxtrmfmcbHIrp2UanQZQFhDAJNn4WEOp" +
+"sYkZLDgLCWEBvjahcpr4lNxtLEo8uK/qOjWMYGpqFOtAsExt1iRSlgUmXKSYi6xPkcpjN9Xm9XyD" +
+"y8X2MkNEc5OO5axmogw8mtr1PJ0gZLA+vQpm8kYlroZpBijVcliHgWUqsLvHwrKs+mp4exGYj9WS" +
+"RdKihkDJzj1TPE0YSqlu0oEafHNzKYAh2azVpAz+iJVtcLLC17eLmeeREwDl/FwAKGE3fBRYphmV" +
+"HgmoXoXjjD+BimrbgI2dwKCu6PS0aAfFLADMcl52qBFy4zjOcjMRol/7qQ1YSmcs30W1OWVssm25" +
+"GmJ5kjFGp8kYOyY1AwCToMrHgGU1Q1LZDy6TmWd6T/n+7L8L9h877WUQCKC1RQDTKTLbVrHbcWK4" +
+"QShJGQDi6fn5SYYuiDY3lFcTVzYuZozt+XySwS2ens/z03lKmqAivB1jNTQbpggsLIzAsqLkuCXy" +
+"nZtyX+Hc8QQGzfLp1QCTi3e8FnvXqmB0CGc1EwLnjgFs08l3kxh79npjYWwc+TnmE1ZhfV27uBtA" +
+"Ac34CA/gtgqlIPVPQCKRLxnuQY91a+p5duPWOXMMhXaa6l91NepQ2VBBgR7eWabZxOAdZ6DSfODU" +
+"0L2is5WdPR4LdwxPLzMgLq+mH/ORcPURGryrkQz97wruNuqvi+22vr5u6YYupWVWUux7vAPb6bd6" +
+"+XVZh6hjMCWvPHSDN24Q2W4RgGUBe+Xt1WHqtUpNBQRGYEAARRcDozMRHYH2q7KBYZGBznuSvZ4O" +
+"4KyahsX2+HD2/mCbJq6vVdDW5GGT2VQxIZPmssGIjK+5VsDE8rT0McRYgkM0+BXHhCQQjA9ng9+u" +
+"6FzeVgTAdPOefNE0xwaGPDjmvhXWBp6eT1OAjeltWCUCPXQMTcMEYISRtWeQbDRVzPy0sDDNWACG" +
+"3g8TVmzCGW80q2PlebpcNAnj3lYAhEx7/BhWg8i4gH8jula3Zq+vG2Z7bblAbsbO2DqxG6boBq6y" +
+"nCdwN05omS0bgw0ZQmOE8YP/pwHz1tAcICRrD+B1s6SXaOuKyIACIp6V+RvFdUOhQhgEHsb67XrG" +
+"AG1nZAO2WSuay2PHkIbVhc7C8luVsN9iy1Syn612WXIqE4OmoshF1ePy6Dh1Q0mfQ4Qx1uPGMDNg" +
+"cA5ZXDdso/Wav1OXUl9fK3bmsE+io8hOuwDYkGFDGMYI2rbAfvSe1Qy9s4DtgrMLkxx3tkD9dYUe" +
+"0q5Ek+ds78nIbrbdv9UABDQ/+OhQK5RIYBJcGuq23AV7xaZy956+xzJZtVrX9fqvbasNkcsi7KSK" +
+"0COPDg2ERU7rWjewchMWRgYQBkAXzQOau8yyO7XXLUNtlangvmvBo8fQDaMuJvhqcss+Ru5g47bZ" +
+"3NOQ0Z0J25awoV1f32oGGxCmPTYs7L7CbNU9K8Bg5+4dADhJdjLuSNF/sO7kbbw/rJXvGhk/NCyT" +
+"axVGGNpqOloMzsp5MrqM9SJBjZ+F3q7G+PViZ1Dh0Z1lgwDWaoPZNkhaNhh7QGU7Jj6Q3X8C23Np" +
+"Nv3GZcu+JaD5sWFhMN4urxuGtifDzrPNXueP4xy2/Q4o08PF2HqacecuDBfDQR5mS+PXK1xW8KV1" +
+"tkqUtntbEU9TQklm3YXBWUnr/H+4csjFrhcAm/TzI48OYHBtgmtVa6IbHACQkfczBuGia4tZ95d8" +
+"d4fcDVNchyBeveRwgg2PC8uNTpVdOynthSx+nxEY1tXIpx3mgEnueI20mC/0rNDa5rBAAI8LK2Ux" +
+"aEfDzko5lBoEDWT7tq+cpAZaYFjWiunnq1qFibI1lceHJSjbAMz0MSSL5GXplrFg8JUM7ry11rRV" +
+"ykCt1dTT48Iy2MhynK5560/5prAMyMLIpN+S6N2G1YUvS4v6lrbq4YJA4Ie+yXo1FERQEYxeEQhl" +
+"SQqZafyA7/V3dkJb29bBVlnZWMsEetAYprNEyHlNQ+dKUyGMMMhc4wQg8N0Y9qjw62oZPCRwrB8W" +
+"lrIR95AgM5mrW56zvsxC+F4Kxzv51NUebDUUB4CFRb0CVmcqelx9c+8iNKC6ay6DYfNe3UB0CFhp" +
+"AStNMTb67O/JCwNeZEAjp5EUxkBb39q92BmwHx6WLUxvllu4cn7vvVVm80EMnUHk+tYMvofqIDG0" +
+"TCdrqHtcdOf5KT6ModNjtGqZD1ipgB4UlkyADfZoqLH2jnZHqNMpLL+b7Cww2O+vfD5Gz8JGhju4" +
+"UJYkMJ0XGindXNzu/13PN0oDioeGVQAsu0eEBXfsJQPlubxnjzGJWOv6PitjC+mhYcnCFlh4oHXz" +
+"lYHyErj3lN9LIYb1tX1oK7AeOoYKLAwK31gK77ySvfOT3+vvea63WY2EKQ8NC6IZW4VttBAMhsrX" +
+"tjHj3MA9x1jXqpHUyNNgBeiRYxhVGBPRLEYLjQwEOJbomXRQfW/eeh9VnqZHdxaWLSgY3+ztY1ae" +
+"Jsuj7XoNeMxSq0aUQ2EePYayCmALmKBVj/Fj5EV7RfOsDGZiQTvgIV7YUQ0fjaQU6ZEfZjPXn4Yp" +
+"AARsDUBG0UimjOJp6XsWbJdqlqebXd6XKx+hcgXOPwI98u37CKA5u0YYcCz/UjKyGdVwu7y+bfnU" +
+"9ma4VvJ+WPe59gGrrCY9es+KCgYsjFTc0FwExesYspQbbK9I5RwAbgIC3+reK518v1QR4pGdpQDc" +
+"vBOzpjItBbPvKWyTatfLBeF92tSCcUQaq7Okt9uuMinTgFJ4aGfJTFdD97yBZrBwa9WkhnavbUMC" +
+"tF3OgM7zddWCRy5GWxtIpQaGJR7+0e5JTmcZgw3G6+r3nvfIhWttgJmeXl6KBxva0K4eWY2+cras" +
+"B+9ZRKkGC/LJZCPbSisNch4Rcg0AU24377Xqzrg6DBgxgx76VpjAK4AEaN9BNCcmfUCbUSbVLtZ7" +
+"rJw+m54lPXIM0/3uH8MCrH5pM+/IY0ztvgb7ZgDHa7MeP4bEfBG2wXlrQiOCdwwWBkAeCfZhpd0A" +
+"i5OViRPo0WGJ+WrRBFhG+PcO1khMd43lWhtYUaJngUqNk8R1Fb7d/GQDU4FHd5bMVDbLFuBEhQEj" +
+"PuRloG21GgDiST0JplBgcQcVxgY4Sw8PCyjThmmF/i4hupM/M/T91bTWQACmXU49DVQwuLTmWzHN" +
+"9j4f4atkjNe/GjDJglwSayWF+IKW+eati9oNbu5PzcDzi6SHH0oFcwFo4O7OqIYl7PPaavrGeTSi" +
+"y11P0kAs0iG+WE1oBSyliRDYYpT4hLxtlnogBup1DOCuBrC8IPHwzkIwT0C/urv5polt86Hstr5t" +
+"wxPe19W+z0rn43xln7RagKA7prW+aDABOHooeDMaW1lvLB0khghtDbAgmWWb4SvEnEVJNgakmNRu" +
+"sbKwfkziKD0LsRqhACUImay/rqIejBVyy9fDyvH0LKGDfC2DWGYwrXUdGSkXs68L9U0rPTayagjK" +
+"WSCOEkMU6w4IlBftfPFFWdOQOaPmm+uFzk+SOAgsEOEtI5m8hJPTF5lNcWPpayOrBjD/IzgQLCHK" +
+"3uPHb6wy4su8zKSBlLH2esjkj1kSB3JWjg+WoMeF7zAS95dDl3LrFn4CpOuG5+cQR4IForRqhAN6" +
+"XPbXM+iYhAcL5eyWrBrA9GNC4kiwBIqtJaU8uPH1EGoKek8lNomBlV5OEseCBUJlNWBEAmzta9O7" +
+"AZUSJBISlAGFFOr+Fc4/ktWRYpgrYk+r8ZUh3iDFFEpwowxCktywYPpHSDrcNzrJcK4XgIaUGRL3" +
+"ZQYpJL37KFa+CAPxo0hwOFgI4qVuAC3E1xWSkH2D6IjKzUjoZZHQAWGBiJe/6u4tEDRjxKeUjSo1" +
+"1j0rAJ3OgIBj9axsW7F265b9hXXQBt0Kp1GaqmfF6YckcUhYCJh2Wk48n+fVjBjl0Vo5jSw/QuKo" +
+"sEAwsXZwrC8A04gYj0Wy2hdCxFFhCcEUqxG2pYHWh9zsGJM4lm4GwfSjSIiDwkpa2kAChNxRkbLk" +
+"kwg9VLYNgvKPSUIcE9ZIiyGEcoQQ+gBZDJhutXYxdawON2elZMFT/GzkCJHOcHqhmbvy3Qumue/t" +
+"cGRYSevMTstW4rKcfd/ipizfS6G8o0I7K8GhY5hJnOpOyyQXZdUQt2SkkdO4CqKnl2R1cGeBLLzE" +
+"zysAuIYYexgGxCC/k8NmwIJ4OufMcHBnpbdiZoM+i5+6eXFn0GoNMEjl+SwF4tiwRlpTVCu90edG" +
+"mDuSelCJaq/F/DTnnyYOH8N+eD/Fr95c+sxDNQIjkzJ2omJZAiHg8M4aeTGpmqFhCewvfd1ygoxl" +
+"joiQ9L1gCRkTkWCUTd1G9+GQ0QV3qIh5Ljur7wQrZRThW44SNyVjAEZSaJpLKCJCgfhGPQuQZQUO" +
+"xVbbyEt+lzAeoqqYQlJm8Ls5K6UIPMzohvei2AZUZZpDUuy0vp2zkEUA2IpWN/c3TGlKYBpvERpl" +
+"rd1VSNLA6uiwRinADYpK25qlZGJQTwiylAyJqpT8a8Xe3PUNYyi0HyWkKIVPSV0V01y0eyoiFOI7" +
+"wkpnsEcIaSrxBVgqZZ6LFFLsuJLV94MlEGiHJYSilAjQR6wUMS+l7F09dmPpb2WF/snfKYNxChtj" +
+"XFuzLTOKvZGrgBAZYoWEBOJbwkpcJlntsPpvrSUloZAU6hKctpQQiG8MC7PjoveWAZMFJB4QjLYS" +
+"Uj9mfM/RAYQRIGyTuMAC32l0CSv3pPitnZXuwtBba98Z5nnte26CzlXf11mju0CMrDzYqo9jnhLV" +
+"93fW+E2+N1BZPa/OTAmZPwXWyAvTH0Zv6Ub1J8FKeeA2agQkgD8V1sjIDNJQ/tGwUuYdiQfQxMNI" +
+"N6CJh9L/tEPHBAAAMAiA1r+qJVbBzwcikBrzLFmykCVLlixZspAlS5YsWbKQJUuWLFmykCVLlixZ" +
+"spAlS5YsWbKQJUuWLFmyeEoXbr5fYDBbAAAAAElFTkSuQmCC";
+
diff --git a/toolkit/components/thumbnails/moz.build b/toolkit/components/thumbnails/moz.build
index 9bc218b6a..d4003c635 100644
--- a/toolkit/components/thumbnails/moz.build
+++ b/toolkit/components/thumbnails/moz.build
@@ -14,9 +14,13 @@ EXTRA_COMPONENTS += [
EXTRA_JS_MODULES += [
'BackgroundPageThumbs.jsm',
- 'PageThumbs.jsm',
'PageThumbsWorker.js',
'PageThumbUtils.jsm',
]
+EXTRA_PP_JS_MODULES += [
+ 'PageThumbs.jsm',
+]
+
+
JAR_MANIFESTS += ['jar.mn']
diff --git a/toolkit/content/aboutSupport.js b/toolkit/content/aboutSupport.js
index 4e42a5687..b1d7ab5f6 100644
--- a/toolkit/content/aboutSupport.js
+++ b/toolkit/content/aboutSupport.js
@@ -180,9 +180,12 @@ var snapshotFormatters = {
title = key;
}
}
+ let td = $.new("td", value);
+ td.style["white-space"] = "pre-wrap";
+
return $.new("tr", [
$.new("th", title, "column"),
- $.new("td", value),
+ td,
]);
}
@@ -306,8 +309,16 @@ var snapshotFormatters = {
apzInfo.length
? apzInfo.join("; ")
: localizedMsg(["apzNone"]));
- addRowFromKey("features", "webglRenderer");
+ addRowFromKey("features", "webgl1WSIInfo");
+ addRowFromKey("features", "webgl1Renderer");
+ addRowFromKey("features", "webgl1Version");
+ addRowFromKey("features", "webgl1DriverExtensions");
+ addRowFromKey("features", "webgl1Extensions");
+ addRowFromKey("features", "webgl2WSIInfo");
addRowFromKey("features", "webgl2Renderer");
+ addRowFromKey("features", "webgl2Version");
+ addRowFromKey("features", "webgl2DriverExtensions");
+ addRowFromKey("features", "webgl2Extensions");
addRowFromKey("features", "supportsHardwareH264", "hardwareH264");
addRowFromKey("features", "currentAudioBackend", "audioBackend");
addRowFromKey("features", "direct2DEnabled", "#Direct2D");
diff --git a/toolkit/content/tests/chrome/window_browser_drop.xul b/toolkit/content/tests/chrome/window_browser_drop.xul
index 8a22ccce9..2d9bcd2a1 100644
--- a/toolkit/content/tests/chrome/window_browser_drop.xul
+++ b/toolkit/content/tests/chrome/window_browser_drop.xul
@@ -31,7 +31,7 @@ function dropOnRemoteBrowserAsync(browser, data, shouldExpectStateChange) {
});
}
- let dataTransfer = new content.DataTransfer("dragstart", false);
+ let dataTransfer = new content.DataTransfer();
for (let i = 0; i < data.length; i++) {
let types = data[i];
for (let j = 0; j < types.length; j++) {
@@ -166,18 +166,6 @@ function* dropLinksOnBrowser(browser, type) {
data: "http://www.mozilla.org/\nMozilla.org\nhttp://www.example.com/\nExample.com" } ] ],
"text/x-moz-url with 2 URLs drop on browser " + type);
- // Dropping multiple items should open multiple pages.
- yield* expectLink(browser,
- [ { url: "http://www.example.com/",
- name: "Example.com" },
- { url: "http://www.mozilla.org/",
- name: "http://www.mozilla.org/" }],
- [ [ { type: "text/x-moz-url",
- data: "http://www.example.com/\nExample.com" } ],
- [ { type: "text/plain",
- data: "http://www.mozilla.org/" } ] ],
- "text/x-moz-url and text/plain drop on browser " + type);
-
// Dropping single item with multiple types should open single page.
yield* expectLink(browser,
[ { url: "http://www.example.org/",
diff --git a/toolkit/locales/en-US/chrome/global/aboutRights.dtd b/toolkit/locales/en-US/chrome/global/aboutRights.dtd
index dfd5a1668..8ccbbb177 100644
--- a/toolkit/locales/en-US/chrome/global/aboutRights.dtd
+++ b/toolkit/locales/en-US/chrome/global/aboutRights.dtd
@@ -87,7 +87,7 @@
<!-- points 1-7 text for branded builds -->
<!ENTITY rights2.webservices-term1 "&vendorShortName; and its contributors, licensors and partners work to provide the most accurate and up-to-date Services. However, we cannot guarantee that this information is comprehensive and error-free. For example, for the Location Aware Service all locations returned by our service provider are estimates only and neither we nor our service provider guarantee the accuracy of the locations provided.">
<!ENTITY rights.webservices-term2 "&vendorShortName; may discontinue or change the Services at its discretion.">
-<!ENTITY rights2.webservices-term3 "You are welcome to use these Services with the accompanying version of &brandShortName;, and &vendorShortName; grants you its rights to do so. &vendorShortName; and its licensors reserve all other rights in the Services. These terms are not intended to limit any rights granted under open source licenses applicable to &brandShortName; and to corresponding source code versions of &brandShortName;, however these (optional) services are provided asa convenience to you, and in no way extend your software rights to the Services.">
+<!ENTITY rights2.webservices-term3 "You are welcome to use these Services with the accompanying version of &brandShortName;, and &vendorShortName; grants you its rights to do so. &vendorShortName; and its licensors reserve all other rights in the Services. These terms are not intended to limit any rights granted under open source licenses applicable to &brandShortName; and to corresponding source code versions of &brandShortName;, however these (optional) services are provided as a convenience to you, and in no way extend your software rights to the Services.">
<!ENTITY rights.webservices-term4 "The Services are provided &quot;as-is&quot; and &quot;as-available&quot;. &vendorShortName;, its contributors, licensors and distributors disclaim all warranties, whether express or implied, including without limitation warranties that the Services are merchantable and fit for your particular purposes. You bear the entire risk as to selecting the Services for your purposes and as to the quality and performance of the Services. If your jurisdiction does not allow disclaiming of warranties, then you should not use &brandShortName; or Services.">
<!ENTITY rights.webservices-term5 "Except as required by law, &vendorShortName;, its contributors, licensors, and distributors will not be liable for any indirect, special, incidental, consequential, punitive, or exemplary damages arising out of or in any way relating to the use of &brandShortName; and the Services. The collective liability under these terms will not exceed $500 (five hundred dollars). If your jurisdiction does not allow the exclusion or limitation of damages, then you should not use &brandShortName; or Services.">
<!ENTITY rights.webservices-term6 "&vendorShortName; may update these terms as necessary from time to time. These terms may not be modified or canceled without &vendorShortName;'s written agreement.">
diff --git a/toolkit/locales/en-US/chrome/global/aboutSupport.properties b/toolkit/locales/en-US/chrome/global/aboutSupport.properties
index 0bc612b79..564292e3d 100644
--- a/toolkit/locales/en-US/chrome/global/aboutSupport.properties
+++ b/toolkit/locales/en-US/chrome/global/aboutSupport.properties
@@ -71,8 +71,16 @@ gpuRAM = RAM
gpuDriverVersion = Driver Version
gpuDriverDate = Driver Date
gpuActive = Active
-webglRenderer = WebGL Renderer
-webgl2Renderer = WebGL2 Renderer
+webgl1WSIInfo = WebGL 1 Driver WSI Info
+webgl1Renderer = WebGL 1 Driver Renderer
+webgl1Version = WebGL 1 Driver Version
+webgl1DriverExtensions = WebGL 1 Driver Extensions
+webgl1Extensions = WebGL 1 Extensions
+webgl2WSIInfo = WebGL 2 Driver WSI Info
+webgl2Renderer = WebGL 2 Driver Renderer
+webgl2Version = WebGL 2 Driver Version
+webgl2DriverExtensions = WebGL 2 Driver Extensions
+webgl2Extensions = WebGL 2 Extensions
GPU1 = GPU #1
GPU2 = GPU #2
blocklistedBug = Blocklisted due to known issues
diff --git a/toolkit/modules/LightweightThemeConsumer.jsm b/toolkit/modules/LightweightThemeConsumer.jsm
index 1dd4c976a..cd456eac2 100644
--- a/toolkit/modules/LightweightThemeConsumer.jsm
+++ b/toolkit/modules/LightweightThemeConsumer.jsm
@@ -22,10 +22,12 @@ this.LightweightThemeConsumer =
this._win = aDocument.defaultView;
this._footerId = aDocument.documentElement.getAttribute("lightweightthemesfooter");
+/* XXX: If we want to disable LWTs for PB mode, this would be needed.
+ * Perhaps make this pref-controlled in the future if people want it?
if (PrivateBrowsingUtils.isWindowPrivate(this._win) &&
!PrivateBrowsingUtils.permanentPrivateBrowsing) {
return;
- }
+ } */
let screen = this._win.screen;
this._lastScreenWidth = screen.width;
@@ -87,12 +89,16 @@ LightweightThemeConsumer.prototype = {
},
destroy: function () {
+/* XXX: If we want to disable LWTs for PB mode, this would be needed.
if (!PrivateBrowsingUtils.isWindowPrivate(this._win) ||
PrivateBrowsingUtils.permanentPrivateBrowsing) {
Services.obs.removeObserver(this, "lightweight-theme-styling-update");
this._win.removeEventListener("resize", this);
- }
+ } */
+
+ Services.obs.removeObserver(this, "lightweight-theme-styling-update");
+ this._win.removeEventListener("resize", this);
this._win = this._doc = null;
},
diff --git a/toolkit/modules/Troubleshoot.jsm b/toolkit/modules/Troubleshoot.jsm
index cea7c8f29..8d84eec8c 100644
--- a/toolkit/modules/Troubleshoot.jsm
+++ b/toolkit/modules/Troubleshoot.jsm
@@ -419,7 +419,13 @@ var dataProviders = {
.createInstance(Ci.nsIDOMParser)
.parseFromString("<html/>", "text/html");
- function GetWebGLInfo(contextType) {
+ function GetWebGLInfo(data, keyPrefix, contextType) {
+ data[keyPrefix + "Renderer"] = "-";
+ data[keyPrefix + "Version"] = "-";
+ data[keyPrefix + "DriverExtensions"] = "-";
+ data[keyPrefix + "Extensions"] = "-";
+ data[keyPrefix + "WSIInfo"] = "-";
+
let canvas = doc.createElement("canvas");
canvas.width = 1;
canvas.height = 1;
@@ -446,16 +452,22 @@ var dataProviders = {
creationError = e.toString();
}
}
- if (!gl)
- return creationError || "(no info)";
+ if (!gl) {
+ data[keyPrefix + "Renderer"] = creationError || "(no creation error info)";
+ return;
+ }
+ data[keyPrefix + "Extensions"] = gl.getSupportedExtensions().join(" ");
- let infoExt = gl.getExtension("WEBGL_debug_renderer_info");
+ let ext = gl.getExtension("MOZ_debug_get");
// This extension is unconditionally available to chrome. No need to check.
- let vendor = gl.getParameter(infoExt.UNMASKED_VENDOR_WEBGL);
- let renderer = gl.getParameter(infoExt.UNMASKED_RENDERER_WEBGL);
+ let vendor = ext.getParameter(gl.VENDOR);
+ let renderer = ext.getParameter(gl.RENDERER);
- let contextInfo = vendor + " -- " + renderer;
+ data[keyPrefix + "Renderer"] = vendor + " -- " + renderer;
+ data[keyPrefix + "Version"] = ext.getParameter(gl.VERSION);
+ data[keyPrefix + "DriverExtensions"] = ext.getParameter(ext.EXTENSIONS);
+ data[keyPrefix + "WSIInfo"] = ext.getParameter(ext.WSI_INFO);
// Eagerly free resources.
@@ -463,14 +475,11 @@ var dataProviders = {
if (loseExt) {
loseExt.loseContext();
}
-
-
- return contextInfo;
}
- data.webglRenderer = GetWebGLInfo("webgl");
- data.webgl2Renderer = GetWebGLInfo("webgl2");
+ GetWebGLInfo(data, "webgl1", "webgl");
+ GetWebGLInfo(data, "webgl2", "webgl2");
let infoInfo = gfxInfo.getInfo();
diff --git a/toolkit/modules/tests/browser/browser_Troubleshoot.js b/toolkit/modules/tests/browser/browser_Troubleshoot.js
index 7f0069dc9..4124be1fb 100644
--- a/toolkit/modules/tests/browser/browser_Troubleshoot.js
+++ b/toolkit/modules/tests/browser/browser_Troubleshoot.js
@@ -298,12 +298,36 @@ const SNAPSHOT_SCHEMA = {
clearTypeParameters: {
type: "string",
},
- webglRenderer: {
+ webgl1Renderer: {
+ type: "string",
+ },
+ webgl1Version: {
+ type: "string",
+ },
+ webgl1DriverExtensions: {
+ type: "string",
+ },
+ webgl1Extensions: {
+ type: "string",
+ },
+ webgl1WSIInfo: {
type: "string",
},
webgl2Renderer: {
type: "string",
},
+ webgl2Version: {
+ type: "string",
+ },
+ webgl2DriverExtensions: {
+ type: "string",
+ },
+ webgl2Extensions: {
+ type: "string",
+ },
+ webgl2WSIInfo: {
+ type: "string",
+ },
info: {
type: "object",
},
diff --git a/toolkit/mozapps/downloads/content/downloads.js b/toolkit/mozapps/downloads/content/downloads.js
index 92a9f7593..2fdb19a74 100644
--- a/toolkit/mozapps/downloads/content/downloads.js
+++ b/toolkit/mozapps/downloads/content/downloads.js
@@ -7,7 +7,7 @@
// Globals
const PREF_BDM_CLOSEWHENDONE = "browser.download.manager.closeWhenDone";
-const PREF_BDM_ALERTONEXEOPEN = "browser.download.manager.alertOnEXEOpen";
+const PREF_BDM_CONFIRMOPENEXE = "browser.download.confirmOpenExecutable";
const PREF_BDM_SCANWHENDONE = "browser.download.manager.scanWhenDone";
const nsLocalFile = Components.Constructor("@mozilla.org/file/local;1",
@@ -78,7 +78,6 @@ var gStr = {
downloadsTitleFiles: "downloadsTitleFiles",
downloadsTitlePercent: "downloadsTitlePercent",
fileExecutableSecurityWarningTitle: "fileExecutableSecurityWarningTitle",
- fileExecutableSecurityWarningDontAsk: "fileExecutableSecurityWarningDontAsk"
};
// The statement to query for downloads that are active or match the search
@@ -251,7 +250,7 @@ function openDownload(aDownload)
var pref = Cc["@mozilla.org/preferences-service;1"].
getService(Ci.nsIPrefBranch);
try {
- dontAsk = !pref.getBoolPref(PREF_BDM_ALERTONEXEOPEN);
+ dontAsk = !pref.getBoolPref(PREF_BDM_CONFIRMOPENEXE);
} catch (e) { }
if (AppConstants.platform == "win") {
@@ -273,16 +272,13 @@ function openDownload(aDownload)
var message = strings.getFormattedString("fileExecutableSecurityWarning", [name, name]);
let title = gStr.fileExecutableSecurityWarningTitle;
- let dontAsk = gStr.fileExecutableSecurityWarningDontAsk;
var promptSvc = Cc["@mozilla.org/embedcomp/prompt-service;1"].
getService(Ci.nsIPromptService);
- var checkbox = { value: false };
- var open = promptSvc.confirmCheck(window, title, message, dontAsk, checkbox);
+ var open = promptSvc.confirm(window, title, message);
if (!open)
return;
- pref.setBoolPref(PREF_BDM_ALERTONEXEOPEN, !checkbox.value);
}
}
try {
diff --git a/toolkit/mozapps/extensions/content/newaddon.js b/toolkit/mozapps/extensions/content/newaddon.js
index b1ad5631b..79978a698 100644
--- a/toolkit/mozapps/extensions/content/newaddon.js
+++ b/toolkit/mozapps/extensions/content/newaddon.js
@@ -42,7 +42,10 @@ function initialize() {
// If the add-on doesn't exist or it is already enabled or it has already
// been seen or it cannot be enabled then this UI is useless, just close it.
// This shouldn't normally happen unless session restore restores the tab.
- if (!aAddon || !aAddon.userDisabled || aAddon.seen ||
+ if (!aAddon || !aAddon.userDisabled ||
+#ifdef MOZ_WEBEXTENSIONS
+ aAddon.seen ||
+#endif
!(aAddon.permissions & AddonManager.PERM_CAN_ENABLE)) {
window.close();
return;
@@ -79,6 +82,7 @@ function initialize() {
document.getElementById("location").hidden = true;
}
+#ifdef MOZ_WEBEXTENSIONS
// Only mark the add-on as seen if the page actually gets focus
if (document.hasFocus()) {
aAddon.markAsSeen();
@@ -86,6 +90,7 @@ function initialize() {
else {
document.addEventListener("focus", () => aAddon.markAsSeen(), false);
}
+#endif
var event = document.createEvent("Events");
event.initEvent("AddonDisplayed", true, true);
diff --git a/toolkit/mozapps/extensions/jar.mn b/toolkit/mozapps/extensions/jar.mn
index e95d93ca0..c4d8874c9 100644
--- a/toolkit/mozapps/extensions/jar.mn
+++ b/toolkit/mozapps/extensions/jar.mn
@@ -26,7 +26,7 @@ toolkit.jar:
content/mozapps/extensions/eula.xul (content/eula.xul)
content/mozapps/extensions/eula.js (content/eula.js)
content/mozapps/extensions/newaddon.xul (content/newaddon.xul)
- content/mozapps/extensions/newaddon.js (content/newaddon.js)
+* content/mozapps/extensions/newaddon.js (content/newaddon.js)
content/mozapps/extensions/setting.xml (content/setting.xml)
content/mozapps/extensions/pluginPrefs.xul (content/pluginPrefs.xul)
content/mozapps/extensions/gmpPrefs.xul (content/gmpPrefs.xul)
diff --git a/toolkit/mozapps/handling/content/dialog.xul b/toolkit/mozapps/handling/content/dialog.xul
index f73ce6d7f..2e2dab4e4 100644
--- a/toolkit/mozapps/handling/content/dialog.xul
+++ b/toolkit/mozapps/handling/content/dialog.xul
@@ -45,8 +45,13 @@
<description id="remember-text"/>
<hbox class="dialog-button-box" pack="end">
+#ifdef XP_WIN
+ <button dlgtype="accept" label="&accept;" icon="open" class="dialog-button"/>
+ <button dlgtype="cancel" icon="cancel" class="dialog-button"/>
+#else
<button dlgtype="cancel" icon="cancel" class="dialog-button"/>
<button dlgtype="accept" label="&accept;" icon="open" class="dialog-button"/>
+#endif
</hbox>
</dialog>
diff --git a/toolkit/mozapps/handling/jar.mn b/toolkit/mozapps/handling/jar.mn
index d6225ecca..8c338a0db 100644
--- a/toolkit/mozapps/handling/jar.mn
+++ b/toolkit/mozapps/handling/jar.mn
@@ -6,5 +6,5 @@ toolkit.jar:
% content mozapps %content/mozapps/
content/mozapps/handling/handler.css (content/handler.css)
content/mozapps/handling/handler.xml (content/handler.xml)
- content/mozapps/handling/dialog.xul (content/dialog.xul)
+* content/mozapps/handling/dialog.xul (content/dialog.xul)
content/mozapps/handling/dialog.js (content/dialog.js)
diff --git a/toolkit/mozapps/webextensions/jar.mn b/toolkit/mozapps/webextensions/jar.mn
index ad3c45710..0c63396cc 100644
--- a/toolkit/mozapps/webextensions/jar.mn
+++ b/toolkit/mozapps/webextensions/jar.mn
@@ -23,7 +23,7 @@ toolkit.jar:
content/mozapps/extensions/eula.xul (../extensions/content/eula.xul)
content/mozapps/extensions/eula.js (content/eula.js)
content/mozapps/extensions/newaddon.xul (content/newaddon.xul)
- content/mozapps/extensions/newaddon.js (../extensions/content/newaddon.js)
+* content/mozapps/extensions/newaddon.js (../extensions/content/newaddon.js)
content/mozapps/extensions/pluginPrefs.xul (../extensions/content/pluginPrefs.xul)
content/mozapps/extensions/gmpPrefs.xul (../extensions/content/gmpPrefs.xul)
content/mozapps/extensions/OpenH264-license.txt (../extensions/content/OpenH264-license.txt)
diff --git a/toolkit/themes/shared/jar.inc.mn b/toolkit/themes/shared/jar.inc.mn
index e361e744f..375568827 100644
--- a/toolkit/themes/shared/jar.inc.mn
+++ b/toolkit/themes/shared/jar.inc.mn
@@ -9,7 +9,6 @@
toolkit.jar:
% skin global classic/1.0 %skin/classic/global/
-% skin help classic/1.0 %skin/classic/help/
% skin mozapps classic/1.0 %skin/classic/mozapps/
skin/classic/global/about.css (../../shared/about.css)
skin/classic/global/aboutCache.css (../../shared/aboutCache.css)
diff --git a/widget/windows/nsNativeThemeWin.cpp b/widget/windows/nsNativeThemeWin.cpp
index 8950dcf90..475ebce94 100644
--- a/widget/windows/nsNativeThemeWin.cpp
+++ b/widget/windows/nsNativeThemeWin.cpp
@@ -1360,7 +1360,10 @@ nsNativeThemeWin::GetThemePartAndState(nsIFrame* aFrame, uint8_t aWidgetType,
static bool
AssumeThemePartAndStateAreTransparent(int32_t aPart, int32_t aState)
{
- if (aPart == MENU_POPUPITEM && aState == MBI_NORMAL) {
+ // When using a high contrast theme on Windows 8 or later, we can't
+ // use this optimization.
+ if (!(IsWin8OrLater() && nsUXThemeData::IsHighContrastOn()) &&
+ aPart == MENU_POPUPITEM && aState == MBI_NORMAL) {
return true;
}
return false;