Commit e2bfe2cd by Geoff Lang

Revert "Implement gl_FragDepth for GLES SL 3.0"

assertion failures in WebGL2 CTS. This reverts commit 54480961. Change-Id: I2e0c7045c5b6ef9031a6e6c5916504fe68f51077 Reviewed-on: https://chromium-review.googlesource.com/287910Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Tested-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent eec431c7
...@@ -165,9 +165,6 @@ int main(int argc, char *argv[]) ...@@ -165,9 +165,6 @@ int main(int argc, char *argv[])
case 'i': resources.OES_EGL_image_external = 1; break; case 'i': resources.OES_EGL_image_external = 1; break;
case 'd': resources.OES_standard_derivatives = 1; break; case 'd': resources.OES_standard_derivatives = 1; break;
case 'r': resources.ARB_texture_rectangle = 1; break; case 'r': resources.ARB_texture_rectangle = 1; break;
case 'g':
resources.EXT_frag_depth = 1;
break;
case 'l': resources.EXT_shader_texture_lod = 1; break; case 'l': resources.EXT_shader_texture_lod = 1; break;
case 'f': resources.EXT_shader_framebuffer_fetch = 1; break; case 'f': resources.EXT_shader_framebuffer_fetch = 1; break;
case 'n': resources.NV_shader_framebuffer_fetch = 1; break; case 'n': resources.NV_shader_framebuffer_fetch = 1; break;
...@@ -286,7 +283,6 @@ void usage() ...@@ -286,7 +283,6 @@ void usage()
" -x=i : enable GL_OES_EGL_image_external\n" " -x=i : enable GL_OES_EGL_image_external\n"
" -x=d : enable GL_OES_EGL_standard_derivatives\n" " -x=d : enable GL_OES_EGL_standard_derivatives\n"
" -x=r : enable ARB_texture_rectangle\n" " -x=r : enable ARB_texture_rectangle\n"
" -x=g : enable EXT_frag_depth\n"
" -x=l : enable EXT_shader_texture_lod\n" " -x=l : enable EXT_shader_texture_lod\n"
" -x=f : enable EXT_shader_framebuffer_fetch\n" " -x=f : enable EXT_shader_framebuffer_fetch\n"
" -x=n : enable NV_shader_framebuffer_fetch\n" " -x=n : enable NV_shader_framebuffer_fetch\n"
......
...@@ -324,8 +324,7 @@ enum TQualifier ...@@ -324,8 +324,7 @@ enum TQualifier
// built-ins written by fragment shader // built-ins written by fragment shader
EvqFragColor, EvqFragColor,
EvqFragData, EvqFragData,
EvqFragDepthEXT, // gl_FragDepthEXT for ESSL100, EXT_frag_depth. EvqFragDepth,
EvqFragDepth, // gl_FragDepth for ESSL300.
// built-ins written by the shader_framebuffer_fetch extension(s) // built-ins written by the shader_framebuffer_fetch extension(s)
EvqLastFragColor, EvqLastFragColor,
...@@ -389,7 +388,7 @@ struct TLayoutQualifier ...@@ -389,7 +388,7 @@ struct TLayoutQualifier
inline const char* getQualifierString(TQualifier q) inline const char* getQualifierString(TQualifier q)
{ {
switch(q) switch(q)
{ // clang-format off {
case EvqTemporary: return "Temporary"; break; case EvqTemporary: return "Temporary"; break;
case EvqGlobal: return "Global"; break; case EvqGlobal: return "Global"; break;
case EvqConst: return "const"; break; case EvqConst: return "const"; break;
...@@ -413,7 +412,6 @@ inline const char* getQualifierString(TQualifier q) ...@@ -413,7 +412,6 @@ inline const char* getQualifierString(TQualifier q)
case EvqPointCoord: return "PointCoord"; break; case EvqPointCoord: return "PointCoord"; break;
case EvqFragColor: return "FragColor"; break; case EvqFragColor: return "FragColor"; break;
case EvqFragData: return "FragData"; break; case EvqFragData: return "FragData"; break;
case EvqFragDepthEXT: return "FragDepth"; break;
case EvqFragDepth: return "FragDepth"; break; case EvqFragDepth: return "FragDepth"; break;
case EvqLastFragColor: return "LastFragColor"; break; case EvqLastFragColor: return "LastFragColor"; break;
case EvqLastFragData: return "LastFragData"; break; case EvqLastFragData: return "LastFragData"; break;
...@@ -424,7 +422,7 @@ inline const char* getQualifierString(TQualifier q) ...@@ -424,7 +422,7 @@ inline const char* getQualifierString(TQualifier q)
case EvqFlatIn: return "flat in"; break; case EvqFlatIn: return "flat in"; break;
case EvqCentroidIn: return "centroid in"; break; case EvqCentroidIn: return "centroid in"; break;
default: UNREACHABLE(); return "unknown qualifier"; default: UNREACHABLE(); return "unknown qualifier";
} // clang-format on }
} }
inline const char* getMatrixPackingString(TLayoutMatrixPacking mpq) inline const char* getMatrixPackingString(TLayoutMatrixPacking mpq)
......
...@@ -504,18 +504,10 @@ void IdentifyBuiltIns(sh::GLenum type, ShShaderSpec spec, ...@@ -504,18 +504,10 @@ void IdentifyBuiltIns(sh::GLenum type, ShShaderSpec spec,
if (resources.EXT_frag_depth) if (resources.EXT_frag_depth)
{ {
symbolTable.insert( symbolTable.insert(ESSL1_BUILTINS, "GL_EXT_frag_depth", new TVariable(NewPoolTString("gl_FragDepthEXT"),
ESSL1_BUILTINS, "GL_EXT_frag_depth", TType(EbtFloat, resources.FragmentPrecisionHigh ? EbpHigh : EbpMedium, EvqFragDepth, 1)));
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) if (resources.EXT_shader_framebuffer_fetch || resources.NV_shader_framebuffer_fetch)
{ {
TType lastFragData(EbtFloat, EbpMedium, EvqLastFragData, 4, 1, true); TType lastFragData(EbtFloat, EbpMedium, EvqLastFragData, 4, 1, true);
......
...@@ -1386,7 +1386,7 @@ void OutputHLSL::visitSymbol(TIntermSymbol *node) ...@@ -1386,7 +1386,7 @@ void OutputHLSL::visitSymbol(TIntermSymbol *node)
mUsesInstanceID = true; mUsesInstanceID = true;
out << name; out << name;
} }
else if (name == "gl_FragDepthEXT" || name == "gl_FragDepth") else if (name == "gl_FragDepthEXT")
{ {
mUsesFragDepth = true; mUsesFragDepth = true;
out << "gl_Depth"; out << "gl_Depth";
......
...@@ -150,7 +150,6 @@ CollectVariables::CollectVariables(std::vector<sh::Attribute> *attribs, ...@@ -150,7 +150,6 @@ CollectVariables::CollectVariables(std::vector<sh::Attribute> *attribs,
mLastFragDataAdded(false), mLastFragDataAdded(false),
mFragColorAdded(false), mFragColorAdded(false),
mFragDataAdded(false), mFragDataAdded(false),
mFragDepthEXTAdded(false),
mFragDepthAdded(false), mFragDepthAdded(false),
mHashFunction(hashFunction), mHashFunction(hashFunction),
mSymbolTable(symbolTable) mSymbolTable(symbolTable)
...@@ -403,8 +402,8 @@ void CollectVariables::visitSymbol(TIntermSymbol *symbol) ...@@ -403,8 +402,8 @@ void CollectVariables::visitSymbol(TIntermSymbol *symbol)
mFragDataAdded = true; mFragDataAdded = true;
} }
return; return;
case EvqFragDepthEXT: case EvqFragDepth:
if (!mFragDepthEXTAdded) if (!mFragDepthAdded)
{ {
Attribute info; Attribute info;
const char kName[] = "gl_FragDepthEXT"; const char kName[] = "gl_FragDepthEXT";
...@@ -418,25 +417,9 @@ void CollectVariables::visitSymbol(TIntermSymbol *symbol) ...@@ -418,25 +417,9 @@ void CollectVariables::visitSymbol(TIntermSymbol *symbol)
->getType()); ->getType());
info.staticUse = true; info.staticUse = true;
mOutputVariables->push_back(info); mOutputVariables->push_back(info);
mFragDepthEXTAdded = true;
}
return;
case EvqFragDepth:
if (!mFragDepthAdded)
{
Attribute info;
const char kName[] = "gl_FragDepth";
info.name = kName;
info.mappedName = kName;
info.type = GL_FLOAT;
info.arraySize = 0;
info.precision = GL_HIGH_FLOAT;
info.staticUse = true;
mOutputVariables->push_back(info);
mFragDepthAdded = true; mFragDepthAdded = true;
} }
return; return;
default: default:
break; break;
} }
......
...@@ -58,7 +58,6 @@ class CollectVariables : public TIntermTraverser ...@@ -58,7 +58,6 @@ class CollectVariables : public TIntermTraverser
bool mLastFragDataAdded; bool mLastFragDataAdded;
bool mFragColorAdded; bool mFragColorAdded;
bool mFragDataAdded; bool mFragDataAdded;
bool mFragDepthEXTAdded;
bool mFragDepthAdded; bool mFragDepthAdded;
ShHashFunction64 mHashFunction; ShHashFunction64 mHashFunction;
......
...@@ -39,7 +39,6 @@ ...@@ -39,7 +39,6 @@
'<(angle_path)/src/tests/compiler_tests/ConstantFolding_test.cpp', '<(angle_path)/src/tests/compiler_tests/ConstantFolding_test.cpp',
'<(angle_path)/src/tests/compiler_tests/DebugShaderPrecision_test.cpp', '<(angle_path)/src/tests/compiler_tests/DebugShaderPrecision_test.cpp',
'<(angle_path)/src/tests/compiler_tests/ExpressionLimit_test.cpp', '<(angle_path)/src/tests/compiler_tests/ExpressionLimit_test.cpp',
'<(angle_path)/src/tests/compiler_tests/FragDepth_test.cpp',
'<(angle_path)/src/tests/compiler_tests/MalformedShader_test.cpp', '<(angle_path)/src/tests/compiler_tests/MalformedShader_test.cpp',
'<(angle_path)/src/tests/compiler_tests/NV_draw_buffers_test.cpp', '<(angle_path)/src/tests/compiler_tests/NV_draw_buffers_test.cpp',
'<(angle_path)/src/tests/compiler_tests/Pack_Unpack_test.cpp', '<(angle_path)/src/tests/compiler_tests/Pack_Unpack_test.cpp',
......
...@@ -556,26 +556,3 @@ TEST_F(CollectFragmentVariablesTest, OutputVarESSL1FragDepthHighp) ...@@ -556,26 +556,3 @@ TEST_F(CollectFragmentVariablesTest, OutputVarESSL1FragDepthHighp)
EXPECT_GLENUM_EQ(GL_FLOAT, outputVariable->type); EXPECT_GLENUM_EQ(GL_FLOAT, outputVariable->type);
EXPECT_GLENUM_EQ(GL_HIGH_FLOAT, outputVariable->precision); EXPECT_GLENUM_EQ(GL_HIGH_FLOAT, outputVariable->precision);
} }
// Test that gl_FragData built-in usage in ESSL3 fragment shader is reflected in the output
// variables list. Also test that the precision is highp.
TEST_F(CollectFragmentVariablesTest, OutputVarESSL3FragDepthHighp)
{
const std::string &fragDepthHighShader =
"#version 300 es\n"
"precision mediump float;\n"
"void main() {\n"
" gl_FragDepth = 0.7;"
"}\n";
ShBuiltInResources resources = mTranslator->getResources();
resources.EXT_frag_depth = 1;
initTranslator(resources);
const sh::Attribute *outputVariable = nullptr;
validateOutputVariableForShader(fragDepthHighShader, "gl_FragDepth", &outputVariable);
ASSERT_NE(outputVariable, nullptr);
EXPECT_EQ(0u, outputVariable->arraySize);
EXPECT_GLENUM_EQ(GL_FLOAT, outputVariable->type);
EXPECT_GLENUM_EQ(GL_HIGH_FLOAT, outputVariable->precision);
}
//
// 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.
//
// FragDepth_test.cpp:
// Test for GLES SL 3.0 gl_FragDepth variable implementation.
//
#include "angle_gl.h"
#include "gtest/gtest.h"
#include "GLSLANG/ShaderLang.h"
namespace
{
const char ESSLVersion100[] = "#version 100\n";
const char ESSLVersion300[] = "#version 300 es\n";
const char EXTFDPragma[] = "#extension GL_EXT_frag_depth : require\n";
} // namespace
class FragDepthTest : public testing::TestWithParam<int>
{
protected:
void SetUp() override
{
ShInitBuiltInResources(&mResources);
mCompiler = nullptr;
mResources.EXT_frag_depth = GetParam();
}
void TearDown() override { DestroyCompiler(); }
void DestroyCompiler()
{
if (mCompiler)
{
ShDestruct(mCompiler);
mCompiler = nullptr;
}
}
void InitializeCompiler()
{
DestroyCompiler();
mCompiler =
ShConstructCompiler(GL_FRAGMENT_SHADER, SH_GLES3_SPEC, SH_GLSL_OUTPUT, &mResources);
ASSERT_TRUE(mCompiler != nullptr) << "Compiler could not be constructed.";
}
testing::AssertionResult TestShaderCompile(const char *version,
const char *pragma,
const char *shader)
{
const char *shaderStrings[] = {version, pragma, shader};
bool success = ShCompile(mCompiler, shaderStrings, 3, 0);
if (success)
{
return ::testing::AssertionSuccess() << "Compilation success";
}
return ::testing::AssertionFailure() << ShGetInfoLog(mCompiler);
}
protected:
ShBuiltInResources mResources;
ShHandle mCompiler;
};
// The GLES SL 3.0 built-in variable gl_FragDepth fails to compile with GLES SL 1.0.
TEST_P(FragDepthTest, CompileFailsESSL100)
{
static const char shaderString[] =
"precision mediump float;\n"
"void main() { \n"
" gl_FragDepth = 1.0;\n"
"}\n";
InitializeCompiler();
EXPECT_FALSE(TestShaderCompile(ESSLVersion100, "", shaderString));
EXPECT_FALSE(TestShaderCompile("", "", shaderString));
EXPECT_FALSE(TestShaderCompile("", EXTFDPragma, shaderString));
}
// The GLES SL 3.0 built-in variable gl_FragDepth compiles with GLES SL 3.0.
TEST_P(FragDepthTest, CompileSucceedsESSL300)
{
static const char shaderString[] =
"precision mediump float;\n"
"void main() { \n"
" gl_FragDepth = 1.0;\n"
"}\n";
InitializeCompiler();
EXPECT_TRUE(TestShaderCompile(ESSLVersion300, "", shaderString));
}
// Using #extension GL_EXT_frag_depth in GLSL ES 3.0 shader fails to compile.
TEST_P(FragDepthTest, ExtensionFDFailsESSL300)
{
static const char shaderString[] =
"precision mediump float;\n"
"out vec4 fragColor;\n"
"void main() { \n"
" fragColor = vec4(1.0);\n"
"}\n";
InitializeCompiler();
if (mResources.EXT_frag_depth == 1)
{
// TODO(kkinnunen): this should fail. Extensions need to have similar level system to
// SymbolTable. The biggest task is to implement version-aware preprocessor, so that the
// extension defines can be defined depending on the version that the preprocessor saw or
// did not see.
EXPECT_TRUE(TestShaderCompile(ESSLVersion300, EXTFDPragma, shaderString));
}
else
{
EXPECT_FALSE(TestShaderCompile(ESSLVersion300, EXTFDPragma, shaderString));
}
}
// The tests should pass regardless whether the EXT_frag_depth is on or not.
INSTANTIATE_TEST_CASE_P(FragDepthTests, FragDepthTest, testing::Values(0, 1));
...@@ -11,7 +11,6 @@ ...@@ -11,7 +11,6 @@
'ConstantFolding_test.cpp', 'ConstantFolding_test.cpp',
'DebugShaderPrecision_test.cpp', 'DebugShaderPrecision_test.cpp',
'ExpressionLimit_test.cpp', 'ExpressionLimit_test.cpp',
'FragDepth_test.cpp',
'MalformedShader_test.cpp', 'MalformedShader_test.cpp',
'NV_draw_buffers_test.cpp', 'NV_draw_buffers_test.cpp',
'Pack_Unpack_test.cpp', 'Pack_Unpack_test.cpp',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment