Skip to content

Commit

Permalink
WIP: GL_APPLE_clip_distance
Browse files Browse the repository at this point in the history
Change-Id: I45fb15a1a14eac0a478f8386ba186545232cfba3
  • Loading branch information
kakashidinho committed Mar 3, 2020
1 parent a242d8b commit f1ea2b2
Show file tree
Hide file tree
Showing 54 changed files with 7,486 additions and 6,179 deletions.
4 changes: 4 additions & 0 deletions include/GLSLANG/ShaderLang.h
Original file line number Diff line number Diff line change
Expand Up @@ -363,6 +363,7 @@ struct ShBuiltInResources
int ANGLE_texture_multisample;
int ANGLE_multi_draw;
int ANGLE_base_vertex_base_instance;
int APPLE_clip_distance;

// Set to 1 to enable replacing GL_EXT_draw_buffers #extension directives
// with GL_NV_draw_buffers in ESSL output. This flag can be used to emulate
Expand Down Expand Up @@ -501,6 +502,9 @@ struct ShBuiltInResources
int MaxGeometryShaderStorageBlocks;
int MaxGeometryShaderInvocations;
int MaxGeometryImageUniforms;

// APPLE_clip_distance/EXT_clip_cull_distance constant
int MaxClipDistances;
};

//
Expand Down
1 change: 1 addition & 0 deletions samples/shader_translator/shader_translator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ void GenerateResources(ShBuiltInResources *resources)
resources->OES_EGL_image_external = 0;
resources->EXT_geometry_shader = 1;
resources->ANGLE_texture_multisample = 0;
resources->APPLE_clip_distance = 0;
}

int main(int argc, char *argv[])
Expand Down
24 changes: 12 additions & 12 deletions scripts/code_generation_hashes/Static_builtins.json
Original file line number Diff line number Diff line change
@@ -1,30 +1,30 @@
{
"src/compiler/translator/ImmutableString_ESSL_autogen.cpp":
"7a3f3014d9607087478ab62bb7380c41",
"40da073ab3fe95970a5b38b73a8fe9a9",
"src/compiler/translator/ImmutableString_autogen.cpp":
"f263dab8a3de5424902d50fd9c171377",
"0a208b1131de05729c09041f2bd4d17b",
"src/compiler/translator/ParseContext_ESSL_autogen.h":
"1edbc3eb12319018818147bccd3a226d",
"c6b1b035ef501958ec93c99771ff4749",
"src/compiler/translator/ParseContext_complete_autogen.h":
"a4209c68899e9cf3bcce81be2cb5f39f",
"67d381cd06a918bec4a3250908eb626a",
"src/compiler/translator/SymbolTable_ESSL_autogen.cpp":
"7714226af3c98c0ebce9e71ef181c3ea",
"a773f1b38d499d1e365b6d14480748b4",
"src/compiler/translator/SymbolTable_autogen.cpp":
"b0454c7771bda83e0ff0b39338bd3f66",
"ca4172975c8a9404f88f6ac506e02a94",
"src/compiler/translator/SymbolTable_autogen.h":
"3ce7740b6ad93a86d198c3937b70c17e",
"2d8bed6ff5debc6546199a2add316a66",
"src/compiler/translator/builtin_function_declarations.txt":
"fc9b0b050448d015482c9f13cab1df67",
"src/compiler/translator/builtin_variables.json":
"e0155915c71991dee1c46358fdb7dd8b",
"c9ba7898a789f1caa3a05f22027f4f10",
"src/compiler/translator/gen_builtin_symbols.py":
"1034aa779dc2f10458779b28863ec6e2",
"src/compiler/translator/tree_util/BuiltIn_ESSL_autogen.h":
"3c7cdcb39ac0bd262a7d2c8edf8650c0",
"cb01aa72e92185ad5eb71f0f04c74e40",
"src/compiler/translator/tree_util/BuiltIn_complete_autogen.h":
"b840c72eb7184799469740e91f8715ab",
"12fe88faa8a69af3115754ed03a92385",
"src/tests/compiler_tests/ImmutableString_test_ESSL_autogen.cpp":
"760243f6505f48d9f72b6dd5ffbe8f23",
"e5f2c8bd2bd30ebacbe22cdcb746ce84",
"src/tests/compiler_tests/ImmutableString_test_autogen.cpp":
"3329875ef3e29005aad2839c96f3ec31"
"0f79bed9a10329b514ca2717020cf0d4"
}
2 changes: 2 additions & 0 deletions src/compiler/fuzz/translator_fuzzer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,9 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
resources.NV_shader_framebuffer_fetch = 1;
resources.ARM_shader_framebuffer_fetch = 1;
resources.EXT_YUV_target = 1;
resources.APPLE_clip_distance = 1;
resources.MaxDualSourceDrawBuffers = 1;
resources.MaxClipDistances = 1;

if (!translator->Init(resources))
{
Expand Down
3 changes: 3 additions & 0 deletions src/compiler/translator/BaseTypes.h
Original file line number Diff line number Diff line change
Expand Up @@ -957,6 +957,8 @@ enum TQualifier
EvqViewIDOVR, // OVR_multiview
EvqViewportIndex, // gl_ViewportIndex

EvqClipDistance, // APPLE_clip_distance/EXT_clip_cull_distance

// built-ins written by the shader_framebuffer_fetch extension(s)
EvqLastFragColor,
EvqLastFragData,
Expand Down Expand Up @@ -1267,6 +1269,7 @@ inline const char *getQualifierString(TQualifier q)
case EvqGeometryIn: return "in";
case EvqGeometryOut: return "out";
case EvqPerVertexIn: return "gl_in";
case EvqClipDistance: return "ClipDistance";
default: UNREACHABLE(); return "unknown qualifier";
}
// clang-format on
Expand Down
7 changes: 6 additions & 1 deletion src/compiler/translator/CollectVariables.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ void MarkActive(ShaderVariable *variable)
}
}
variable->staticUse = true;
variable->active = true;
variable->active = true;
}
}

Expand Down Expand Up @@ -178,6 +178,7 @@ class CollectVariablesTraverser : public TIntermTraverser

// Vertex Shader and Geometry Shader builtins
bool mPositionAdded;
bool mClipDistanceAdded;

// Fragment Shader builtins
bool mPointCoordAdded;
Expand Down Expand Up @@ -236,6 +237,7 @@ CollectVariablesTraverser::CollectVariablesTraverser(
mBaseVertexAdded(false),
mBaseInstanceAdded(false),
mPositionAdded(false),
mClipDistanceAdded(false),
mPointCoordAdded(false),
mFrontFacingAdded(false),
mFragCoordAdded(false),
Expand Down Expand Up @@ -566,6 +568,9 @@ void CollectVariablesTraverser::visitSymbol(TIntermSymbol *symbol)
IsExtensionEnabled(mExtensionBehavior, TExtension::OVR_multiview)));
}
break;
case EvqClipDistance:
recordBuiltInVaryingUsed(symbol->variable(), &mClipDistanceAdded, mOutputVaryings);
return;
default:
break;
}
Expand Down
4 changes: 3 additions & 1 deletion src/compiler/translator/Compiler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1037,6 +1037,7 @@ void TCompiler::setResourceString()
<< ":WEBGL_debug_shader_precision:" << mResources.WEBGL_debug_shader_precision
<< ":ANGLE_multi_draw:" << mResources.ANGLE_multi_draw
<< ":ANGLE_base_vertex_base_instance:" << mResources.ANGLE_base_vertex_base_instance
<< ":APPLE_clip_distance:" << mResources.APPLE_clip_distance
<< ":MinProgramTextureGatherOffset:" << mResources.MinProgramTextureGatherOffset
<< ":MaxProgramTextureGatherOffset:" << mResources.MaxProgramTextureGatherOffset
<< ":MaxImageUnits:" << mResources.MaxImageUnits
Expand Down Expand Up @@ -1074,7 +1075,8 @@ void TCompiler::setResourceString()
<< ":MaxGeometryAtomicCounters:" << mResources.MaxGeometryAtomicCounters
<< ":MaxGeometryShaderStorageBlocks:" << mResources.MaxGeometryShaderStorageBlocks
<< ":MaxGeometryShaderInvocations:" << mResources.MaxGeometryShaderInvocations
<< ":MaxGeometryImageUniforms:" << mResources.MaxGeometryImageUniforms;
<< ":MaxGeometryImageUniforms:" << mResources.MaxGeometryImageUniforms
<< ":MaxClipDistances" << mResources.MaxClipDistances;
// clang-format on

mBuiltInResourcesString = strstream.str();
Expand Down
3 changes: 2 additions & 1 deletion src/compiler/translator/ExtensionBehavior.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,8 @@
OP(OVR_multiview) \
OP(OVR_multiview2) \
OP(ANGLE_multi_draw) \
OP(ANGLE_base_vertex_base_instance)
OP(ANGLE_base_vertex_base_instance) \
OP(APPLE_clip_distance)

namespace sh
{
Expand Down
3 changes: 2 additions & 1 deletion src/compiler/translator/ExtensionBehavior.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@ enum class TExtension
OVR_multiview,
OVR_multiview2,
ANGLE_multi_draw,
ANGLE_base_vertex_base_instance
ANGLE_base_vertex_base_instance,
APPLE_clip_distance,
};

enum TBehavior
Expand Down
5 changes: 5 additions & 0 deletions src/compiler/translator/HashNames.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,11 @@ ImmutableString HashName(const ImmutableString &name,
// have as long names and could conflict.
return name;
}
if (name == "gl_ClipDistance")
{
// gl_ClipDistance can be re-declared. If so, use the original name instead of prefix it
return name;
}
ImmutableStringBuilder prefixedName(kUnhashedNamePrefix.length() + name.length());
prefixedName << kUnhashedNamePrefix << name;
return prefixedName;
Expand Down
Loading

0 comments on commit f1ea2b2

Please sign in to comment.