diff options
30 files changed, 47 insertions, 59 deletions
diff --git a/src/compiler/translator/ParseContext.cpp b/src/compiler/translator/ParseContext.cpp index 37969b54..72e179fc 100644 --- a/src/compiler/translator/ParseContext.cpp +++ b/src/compiler/translator/ParseContext.cpp @@ -1375,7 +1375,7 @@ TIntermAggregate* TParseContext::parseInvariantDeclaration(const TSourceLoc &inv recover(); return NULL; } - symbolTable.addInvariantVarying(*identifier); + symbolTable.addInvariantVarying(std::string(identifier->c_str())); const TVariable *variable = getNamedVariable(identifierLoc, identifier, symbol); ASSERT(variable); const TType &type = variable->getType(); diff --git a/src/compiler/translator/SymbolTable.h b/src/compiler/translator/SymbolTable.h index 9cd74218..afb973ae 100644 --- a/src/compiler/translator/SymbolTable.h +++ b/src/compiler/translator/SymbolTable.h @@ -413,7 +413,7 @@ class TSymbolTable // This records invariant varyings declared through // "invariant varying_name;". - void addInvariantVarying(const TString &originalName) + void addInvariantVarying(const std::string &originalName) { mInvariantVaryings.insert(originalName); } @@ -421,7 +421,7 @@ class TSymbolTable // if it is set as invariant during the varying variable // declaration - this piece of information is stored in the // variable's type, not here. - bool isVaryingInvariant(const TString &originalName) const + bool isVaryingInvariant(const std::string &originalName) const { return (mGlobalInvariant || mInvariantVaryings.count(originalName) > 0); @@ -445,7 +445,7 @@ class TSymbolTable typedef TMap<TBasicType, TPrecision> PrecisionStackLevel; std::vector< PrecisionStackLevel *> precisionStack; - std::set<TString> mInvariantVaryings; + std::set<std::string> mInvariantVaryings; bool mGlobalInvariant; static int uniqueIdCounter; diff --git a/src/compiler/translator/util.cpp b/src/compiler/translator/util.cpp index 8cc06a65..42a995ee 100644 --- a/src/compiler/translator/util.cpp +++ b/src/compiler/translator/util.cpp @@ -307,7 +307,7 @@ void GetVariableTraverser::setTypeSpecificInfo( break; case EvqVaryingIn: case EvqVaryingOut: - if (mSymbolTable.isVaryingInvariant(name)) + if (mSymbolTable.isVaryingInvariant(std::string(name.c_str()))) { variable->isInvariant = true; } diff --git a/src/libGLESv2/Framebuffer.cpp b/src/libGLESv2/Framebuffer.cpp index 9cd9e25c..74fdd68a 100644 --- a/src/libGLESv2/Framebuffer.cpp +++ b/src/libGLESv2/Framebuffer.cpp @@ -644,12 +644,23 @@ DefaultFramebuffer::DefaultFramebuffer(rx::Renderer *renderer, Colorbuffer *colo Renderbuffer *colorRenderbuffer = new Renderbuffer(0, colorbuffer); mColorbuffers[0] = new RenderbufferAttachment(GL_BACK, colorRenderbuffer); - Renderbuffer *depthStencilBuffer = new Renderbuffer(0, depthStencil); + GLenum depthStencilActualFormat = depthStencil->getActualFormat(); + const gl::InternalFormat &depthStencilFormatInfo = GetInternalFormatInfo(depthStencilActualFormat); - // Make a new attachment objects to ensure we do not double-delete - // See angle issue 686 - mDepthbuffer = (depthStencilBuffer->getDepthSize() != 0 ? new RenderbufferAttachment(GL_DEPTH_ATTACHMENT, depthStencilBuffer) : NULL); - mStencilbuffer = (depthStencilBuffer->getStencilSize() != 0 ? new RenderbufferAttachment(GL_STENCIL_ATTACHMENT, depthStencilBuffer) : NULL); + if (depthStencilFormatInfo.depthBits != 0 || depthStencilFormatInfo.stencilBits != 0) + { + Renderbuffer *depthStencilBuffer = new Renderbuffer(0, depthStencil); + + // Make a new attachment objects to ensure we do not double-delete + // See angle issue 686 + mDepthbuffer = (depthStencilFormatInfo.depthBits != 0 ? new RenderbufferAttachment(GL_DEPTH_ATTACHMENT, depthStencilBuffer) : NULL); + mStencilbuffer = (depthStencilFormatInfo.stencilBits != 0 ? new RenderbufferAttachment(GL_STENCIL_ATTACHMENT, depthStencilBuffer) : NULL); + } + else + { + // This method transfers ownership, so delete the unused storage if we don't keep it. + SafeDelete(depthStencil); + } mDrawBufferStates[0] = GL_BACK; mReadBufferState = GL_BACK; diff --git a/src/libGLESv2/renderer/d3d/TextureD3D.cpp b/src/libGLESv2/renderer/d3d/TextureD3D.cpp index bdea186a..77e00f79 100644 --- a/src/libGLESv2/renderer/d3d/TextureD3D.cpp +++ b/src/libGLESv2/renderer/d3d/TextureD3D.cpp @@ -1423,7 +1423,7 @@ void TextureD3D_Cube::initMipmapsImages() unsigned int TextureD3D_Cube::getRenderTargetSerial(const gl::ImageIndex &index) { - return (ensureRenderTarget().isError() ? mTexStorage->getRenderTargetSerial(index) : 0); + return (!ensureRenderTarget().isError() ? mTexStorage->getRenderTargetSerial(index) : 0); } gl::Error TextureD3D_Cube::getRenderTarget(const gl::ImageIndex &index, RenderTarget **outRT) diff --git a/src/preprocessor.target.darwin-arm.mk b/src/preprocessor.target.darwin-arm.mk index f5256d83..efbbc78c 100644 --- a/src/preprocessor.target.darwin-arm.mk +++ b/src/preprocessor.target.darwin-arm.mk @@ -40,7 +40,6 @@ LOCAL_SRC_FILES := \ MY_CFLAGS_Debug := \ -fstack-protector \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ @@ -140,7 +139,6 @@ LOCAL_CPPFLAGS_Debug := \ MY_CFLAGS_Release := \ -fstack-protector \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ diff --git a/src/preprocessor.target.darwin-arm64.mk b/src/preprocessor.target.darwin-arm64.mk index 541c8e7f..b9df742e 100644 --- a/src/preprocessor.target.darwin-arm64.mk +++ b/src/preprocessor.target.darwin-arm64.mk @@ -39,7 +39,6 @@ LOCAL_SRC_FILES := \ # Flags passed to both C and C++ files. MY_CFLAGS_Debug := \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ @@ -127,7 +126,6 @@ LOCAL_CPPFLAGS_Debug := \ # Flags passed to both C and C++ files. MY_CFLAGS_Release := \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ diff --git a/src/preprocessor.target.darwin-x86.mk b/src/preprocessor.target.darwin-x86.mk index 78496dab..4be409e5 100644 --- a/src/preprocessor.target.darwin-x86.mk +++ b/src/preprocessor.target.darwin-x86.mk @@ -39,7 +39,6 @@ LOCAL_SRC_FILES := \ # Flags passed to both C and C++ files. MY_CFLAGS_Debug := \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ @@ -133,7 +132,6 @@ LOCAL_CPPFLAGS_Debug := \ # Flags passed to both C and C++ files. MY_CFLAGS_Release := \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ diff --git a/src/preprocessor.target.darwin-x86_64.mk b/src/preprocessor.target.darwin-x86_64.mk index 64ee0ae7..1fefd5d2 100644 --- a/src/preprocessor.target.darwin-x86_64.mk +++ b/src/preprocessor.target.darwin-x86_64.mk @@ -40,7 +40,6 @@ LOCAL_SRC_FILES := \ MY_CFLAGS_Debug := \ -fstack-protector \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ @@ -133,7 +132,6 @@ LOCAL_CPPFLAGS_Debug := \ MY_CFLAGS_Release := \ -fstack-protector \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ diff --git a/src/preprocessor.target.linux-arm.mk b/src/preprocessor.target.linux-arm.mk index f5256d83..efbbc78c 100644 --- a/src/preprocessor.target.linux-arm.mk +++ b/src/preprocessor.target.linux-arm.mk @@ -40,7 +40,6 @@ LOCAL_SRC_FILES := \ MY_CFLAGS_Debug := \ -fstack-protector \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ @@ -140,7 +139,6 @@ LOCAL_CPPFLAGS_Debug := \ MY_CFLAGS_Release := \ -fstack-protector \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ diff --git a/src/preprocessor.target.linux-arm64.mk b/src/preprocessor.target.linux-arm64.mk index 541c8e7f..b9df742e 100644 --- a/src/preprocessor.target.linux-arm64.mk +++ b/src/preprocessor.target.linux-arm64.mk @@ -39,7 +39,6 @@ LOCAL_SRC_FILES := \ # Flags passed to both C and C++ files. MY_CFLAGS_Debug := \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ @@ -127,7 +126,6 @@ LOCAL_CPPFLAGS_Debug := \ # Flags passed to both C and C++ files. MY_CFLAGS_Release := \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ diff --git a/src/preprocessor.target.linux-x86.mk b/src/preprocessor.target.linux-x86.mk index 78496dab..4be409e5 100644 --- a/src/preprocessor.target.linux-x86.mk +++ b/src/preprocessor.target.linux-x86.mk @@ -39,7 +39,6 @@ LOCAL_SRC_FILES := \ # Flags passed to both C and C++ files. MY_CFLAGS_Debug := \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ @@ -133,7 +132,6 @@ LOCAL_CPPFLAGS_Debug := \ # Flags passed to both C and C++ files. MY_CFLAGS_Release := \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ diff --git a/src/preprocessor.target.linux-x86_64.mk b/src/preprocessor.target.linux-x86_64.mk index 64ee0ae7..1fefd5d2 100644 --- a/src/preprocessor.target.linux-x86_64.mk +++ b/src/preprocessor.target.linux-x86_64.mk @@ -40,7 +40,6 @@ LOCAL_SRC_FILES := \ MY_CFLAGS_Debug := \ -fstack-protector \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ @@ -133,7 +132,6 @@ LOCAL_CPPFLAGS_Debug := \ MY_CFLAGS_Release := \ -fstack-protector \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ diff --git a/src/translator.target.darwin-arm.mk b/src/translator.target.darwin-arm.mk index 57eb73fb..15c9640f 100644 --- a/src/translator.target.darwin-arm.mk +++ b/src/translator.target.darwin-arm.mk @@ -31,7 +31,6 @@ LOCAL_SRC_FILES := \ MY_CFLAGS_Debug := \ -fstack-protector \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ @@ -134,7 +133,6 @@ LOCAL_CPPFLAGS_Debug := \ MY_CFLAGS_Release := \ -fstack-protector \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ diff --git a/src/translator.target.darwin-arm64.mk b/src/translator.target.darwin-arm64.mk index 3515ac22..89ecc72b 100644 --- a/src/translator.target.darwin-arm64.mk +++ b/src/translator.target.darwin-arm64.mk @@ -30,7 +30,6 @@ LOCAL_SRC_FILES := \ # Flags passed to both C and C++ files. MY_CFLAGS_Debug := \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ @@ -121,7 +120,6 @@ LOCAL_CPPFLAGS_Debug := \ # Flags passed to both C and C++ files. MY_CFLAGS_Release := \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ diff --git a/src/translator.target.darwin-x86.mk b/src/translator.target.darwin-x86.mk index a0850579..f09b63d5 100644 --- a/src/translator.target.darwin-x86.mk +++ b/src/translator.target.darwin-x86.mk @@ -30,7 +30,6 @@ LOCAL_SRC_FILES := \ # Flags passed to both C and C++ files. MY_CFLAGS_Debug := \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ @@ -127,7 +126,6 @@ LOCAL_CPPFLAGS_Debug := \ # Flags passed to both C and C++ files. MY_CFLAGS_Release := \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ diff --git a/src/translator.target.darwin-x86_64.mk b/src/translator.target.darwin-x86_64.mk index b9440a60..5e200bb0 100644 --- a/src/translator.target.darwin-x86_64.mk +++ b/src/translator.target.darwin-x86_64.mk @@ -31,7 +31,6 @@ LOCAL_SRC_FILES := \ MY_CFLAGS_Debug := \ -fstack-protector \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ @@ -127,7 +126,6 @@ LOCAL_CPPFLAGS_Debug := \ MY_CFLAGS_Release := \ -fstack-protector \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ diff --git a/src/translator.target.linux-arm.mk b/src/translator.target.linux-arm.mk index 57eb73fb..15c9640f 100644 --- a/src/translator.target.linux-arm.mk +++ b/src/translator.target.linux-arm.mk @@ -31,7 +31,6 @@ LOCAL_SRC_FILES := \ MY_CFLAGS_Debug := \ -fstack-protector \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ @@ -134,7 +133,6 @@ LOCAL_CPPFLAGS_Debug := \ MY_CFLAGS_Release := \ -fstack-protector \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ diff --git a/src/translator.target.linux-arm64.mk b/src/translator.target.linux-arm64.mk index 3515ac22..89ecc72b 100644 --- a/src/translator.target.linux-arm64.mk +++ b/src/translator.target.linux-arm64.mk @@ -30,7 +30,6 @@ LOCAL_SRC_FILES := \ # Flags passed to both C and C++ files. MY_CFLAGS_Debug := \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ @@ -121,7 +120,6 @@ LOCAL_CPPFLAGS_Debug := \ # Flags passed to both C and C++ files. MY_CFLAGS_Release := \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ diff --git a/src/translator.target.linux-x86.mk b/src/translator.target.linux-x86.mk index a0850579..f09b63d5 100644 --- a/src/translator.target.linux-x86.mk +++ b/src/translator.target.linux-x86.mk @@ -30,7 +30,6 @@ LOCAL_SRC_FILES := \ # Flags passed to both C and C++ files. MY_CFLAGS_Debug := \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ @@ -127,7 +126,6 @@ LOCAL_CPPFLAGS_Debug := \ # Flags passed to both C and C++ files. MY_CFLAGS_Release := \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ diff --git a/src/translator.target.linux-x86_64.mk b/src/translator.target.linux-x86_64.mk index b9440a60..5e200bb0 100644 --- a/src/translator.target.linux-x86_64.mk +++ b/src/translator.target.linux-x86_64.mk @@ -31,7 +31,6 @@ LOCAL_SRC_FILES := \ MY_CFLAGS_Debug := \ -fstack-protector \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ @@ -127,7 +126,6 @@ LOCAL_CPPFLAGS_Debug := \ MY_CFLAGS_Release := \ -fstack-protector \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ diff --git a/src/translator_lib.target.darwin-arm.mk b/src/translator_lib.target.darwin-arm.mk index e908b4c5..5f4ea7b1 100644 --- a/src/translator_lib.target.darwin-arm.mk +++ b/src/translator_lib.target.darwin-arm.mk @@ -95,7 +95,6 @@ LOCAL_SRC_FILES := \ MY_CFLAGS_Debug := \ -fstack-protector \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ @@ -198,7 +197,6 @@ LOCAL_CPPFLAGS_Debug := \ MY_CFLAGS_Release := \ -fstack-protector \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ diff --git a/src/translator_lib.target.darwin-arm64.mk b/src/translator_lib.target.darwin-arm64.mk index 4dc1a85a..20ccd1eb 100644 --- a/src/translator_lib.target.darwin-arm64.mk +++ b/src/translator_lib.target.darwin-arm64.mk @@ -94,7 +94,6 @@ LOCAL_SRC_FILES := \ # Flags passed to both C and C++ files. MY_CFLAGS_Debug := \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ @@ -185,7 +184,6 @@ LOCAL_CPPFLAGS_Debug := \ # Flags passed to both C and C++ files. MY_CFLAGS_Release := \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ diff --git a/src/translator_lib.target.darwin-x86.mk b/src/translator_lib.target.darwin-x86.mk index c04e2286..d3fc8b50 100644 --- a/src/translator_lib.target.darwin-x86.mk +++ b/src/translator_lib.target.darwin-x86.mk @@ -94,7 +94,6 @@ LOCAL_SRC_FILES := \ # Flags passed to both C and C++ files. MY_CFLAGS_Debug := \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ @@ -191,7 +190,6 @@ LOCAL_CPPFLAGS_Debug := \ # Flags passed to both C and C++ files. MY_CFLAGS_Release := \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ diff --git a/src/translator_lib.target.darwin-x86_64.mk b/src/translator_lib.target.darwin-x86_64.mk index d6ec9385..940fbd36 100644 --- a/src/translator_lib.target.darwin-x86_64.mk +++ b/src/translator_lib.target.darwin-x86_64.mk @@ -95,7 +95,6 @@ LOCAL_SRC_FILES := \ MY_CFLAGS_Debug := \ -fstack-protector \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ @@ -191,7 +190,6 @@ LOCAL_CPPFLAGS_Debug := \ MY_CFLAGS_Release := \ -fstack-protector \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ diff --git a/src/translator_lib.target.linux-arm.mk b/src/translator_lib.target.linux-arm.mk index e908b4c5..5f4ea7b1 100644 --- a/src/translator_lib.target.linux-arm.mk +++ b/src/translator_lib.target.linux-arm.mk @@ -95,7 +95,6 @@ LOCAL_SRC_FILES := \ MY_CFLAGS_Debug := \ -fstack-protector \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ @@ -198,7 +197,6 @@ LOCAL_CPPFLAGS_Debug := \ MY_CFLAGS_Release := \ -fstack-protector \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ diff --git a/src/translator_lib.target.linux-arm64.mk b/src/translator_lib.target.linux-arm64.mk index 4dc1a85a..20ccd1eb 100644 --- a/src/translator_lib.target.linux-arm64.mk +++ b/src/translator_lib.target.linux-arm64.mk @@ -94,7 +94,6 @@ LOCAL_SRC_FILES := \ # Flags passed to both C and C++ files. MY_CFLAGS_Debug := \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ @@ -185,7 +184,6 @@ LOCAL_CPPFLAGS_Debug := \ # Flags passed to both C and C++ files. MY_CFLAGS_Release := \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ diff --git a/src/translator_lib.target.linux-x86.mk b/src/translator_lib.target.linux-x86.mk index c04e2286..d3fc8b50 100644 --- a/src/translator_lib.target.linux-x86.mk +++ b/src/translator_lib.target.linux-x86.mk @@ -94,7 +94,6 @@ LOCAL_SRC_FILES := \ # Flags passed to both C and C++ files. MY_CFLAGS_Debug := \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ @@ -191,7 +190,6 @@ LOCAL_CPPFLAGS_Debug := \ # Flags passed to both C and C++ files. MY_CFLAGS_Release := \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ diff --git a/src/translator_lib.target.linux-x86_64.mk b/src/translator_lib.target.linux-x86_64.mk index d6ec9385..940fbd36 100644 --- a/src/translator_lib.target.linux-x86_64.mk +++ b/src/translator_lib.target.linux-x86_64.mk @@ -95,7 +95,6 @@ LOCAL_SRC_FILES := \ MY_CFLAGS_Debug := \ -fstack-protector \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ @@ -191,7 +190,6 @@ LOCAL_CPPFLAGS_Debug := \ MY_CFLAGS_Release := \ -fstack-protector \ --param=ssp-buffer-size=4 \ - \ -fno-strict-aliasing \ -Wno-unused-parameter \ -Wno-missing-field-initializers \ diff --git a/tests/compiler_tests/ShaderVariable_test.cpp b/tests/compiler_tests/ShaderVariable_test.cpp index b642260f..7fda29e7 100644 --- a/tests/compiler_tests/ShaderVariable_test.cpp +++ b/tests/compiler_tests/ShaderVariable_test.cpp @@ -218,4 +218,29 @@ TEST(ShaderVariableTest, IsSameVaryingWithDifferentInvariance) EXPECT_TRUE(vx.isSameVaryingAtLinkTime(fx)); } +// Test that using invariant varyings doesn't trigger a double delete. +TEST(ShaderVariableTest, InvariantDoubleDeleteBug) +{ + ShBuiltInResources resources; + ShInitBuiltInResources(&resources); + + ShHandle compiler = ShConstructCompiler(GL_VERTEX_SHADER, SH_GLES2_SPEC, SH_GLSL_OUTPUT, &resources); + EXPECT_NE(static_cast<ShHandle>(0), compiler); + + const char *program[] = + { + "attribute vec4 position;\n" + "varying float v;\n" + "invariant v;\n" + "void main() {\n" + " v = 1.0;\n" + " gl_Position = position;\n" + "}" + }; + + EXPECT_TRUE(ShCompile(compiler, program, 1, SH_OBJECT_CODE)); + EXPECT_TRUE(ShCompile(compiler, program, 1, SH_OBJECT_CODE)); + ShDestruct(compiler); +} + } // namespace sh |