Skip to content

Commit 153e022

Browse files
austinEngCommit Bot
authored andcommitted
Add gl_DrawID emulation for ESSL3 with ANGLE_multi_draw
Bug: chromium:890539 Change-Id: I3d9a9429608afb454f076013f3ed844e115c56cc Reviewed-on: https://chromium-review.googlesource.com/c/1368784 Reviewed-by: Kai Ninomiya <kainino@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Austin Eng <enga@chromium.org>
1 parent 19f2f9e commit 153e022

File tree

8 files changed

+102
-39
lines changed

8 files changed

+102
-39
lines changed

scripts/run_code_generation_hashes.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
"ESSL static builtins:src/compiler/translator/builtin_function_declarations.txt":
3939
"e5e567406476306ea06984d885be028d",
4040
"ESSL static builtins:src/compiler/translator/builtin_variables.json":
41-
"2be179f5b2f04d68367d023bec7209e3",
41+
"d07ec4348b35d0db1eeab3c99a5e91f9",
4242
"ESSL static builtins:src/compiler/translator/gen_builtin_symbols.py":
4343
"9a5226ee6573650897bdc21e1bb0bfd0",
4444
"Emulated HLSL functions:src/compiler/translator/emulated_builtin_function_data_hlsl.json":

src/compiler/translator/SymbolTable_autogen.cpp

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -971,6 +971,7 @@ constexpr const TSymbolUniqueId BuiltInId::gl_VertexID;
971971
constexpr const TSymbolUniqueId BuiltInId::gl_ViewportIndex;
972972
constexpr const TSymbolUniqueId BuiltInId::gl_LayerVS;
973973
constexpr const TSymbolUniqueId BuiltInId::gl_DrawID;
974+
constexpr const TSymbolUniqueId BuiltInId::gl_DrawIDESSL1;
974975
constexpr const TSymbolUniqueId BuiltInId::gl_NumWorkGroups;
975976
constexpr const TSymbolUniqueId BuiltInId::gl_WorkGroupSize;
976977
constexpr const TSymbolUniqueId BuiltInId::gl_WorkGroupID;
@@ -988,7 +989,7 @@ constexpr const TSymbolUniqueId BuiltInId::gl_PositionGS;
988989
constexpr const TSymbolUniqueId BuiltInId::gl_ViewID_OVR;
989990
constexpr const TSymbolUniqueId BuiltInId::gl_ViewID_OVRESSL1;
990991

991-
const int TSymbolTable::kLastBuiltInId = 1024;
992+
const int TSymbolTable::kLastBuiltInId = 1025;
992993

993994
namespace BuiltInName
994995
{
@@ -1460,6 +1461,11 @@ constexpr const TVariable kVar_gl_DrawID(BuiltInId::gl_DrawID,
14601461
SymbolType::BuiltIn,
14611462
TExtension::ANGLE_multi_draw,
14621463
StaticType::Get<EbtInt, EbpHigh, EvqDrawID, 1, 1>());
1464+
constexpr const TVariable kVar_gl_DrawIDESSL1(BuiltInId::gl_DrawIDESSL1,
1465+
BuiltInName::gl_DrawID,
1466+
SymbolType::BuiltIn,
1467+
TExtension::ANGLE_multi_draw,
1468+
StaticType::Get<EbtInt, EbpHigh, EvqDrawID, 1, 1>());
14631469
constexpr const TVariable kVar_gl_FragColor(
14641470
BuiltInId::gl_FragColor,
14651471
BuiltInName::gl_FragColor,
@@ -2043,6 +2049,11 @@ const TVariable *gl_DrawID()
20432049
return &kVar_gl_DrawID;
20442050
}
20452051

2052+
const TVariable *gl_DrawIDESSL1()
2053+
{
2054+
return &kVar_gl_DrawIDESSL1;
2055+
}
2056+
20462057
const TVariable *gl_FragColor()
20472058
{
20482059
return &kVar_gl_FragColor;
@@ -7336,7 +7347,7 @@ constexpr const TFunction kFunction_texture_0Y2B(
73367347
BuiltInId::texture_USamplerCube1_Float3,
73377348
BuiltInName::texture,
73387349
TExtension::UNDEFINED,
7339-
BuiltInParameters::p0Y2B0B,
7350+
BuiltInParameters::p0Y2B2B2B,
73407351
2,
73417352
StaticType::Get<EbtUInt, EbpUndefined, EvqGlobal, 4, 1>(),
73427353
EOpCallBuiltInFunction,
@@ -9613,7 +9624,7 @@ constexpr const TFunction kFunction_textureGather_0Y2B(
96139624
BuiltInId::textureGather_USamplerCube1_Float3,
96149625
BuiltInName::textureGather,
96159626
TExtension::UNDEFINED,
9616-
BuiltInParameters::p0Y2B0B,
9627+
BuiltInParameters::p0Y2B2B2B,
96179628
2,
96189629
StaticType::Get<EbtUInt, EbpUndefined, EvqGlobal, 4, 1>(),
96199630
EOpCallBuiltInFunction,
@@ -16781,6 +16792,20 @@ const TSymbol *TSymbolTable::findBuiltIn(const ImmutableString &name, int shader
1678116792
}
1678216793
}
1678316794
}
16795+
if ((mShaderType == GL_VERTEX_SHADER) && (mResources.ANGLE_multi_draw))
16796+
{
16797+
switch (nameHash)
16798+
{
16799+
case 0x7e4c3c42u:
16800+
{
16801+
if (name == BuiltInName::gl_DrawID)
16802+
{
16803+
return &BuiltInVariable::kVar_gl_DrawID;
16804+
}
16805+
break;
16806+
}
16807+
}
16808+
}
1678416809
if (mResources.OVR_multiview && mShaderType != GL_COMPUTE_SHADER)
1678516810
{
1678616811
switch (nameHash)
@@ -17265,7 +17290,7 @@ const TSymbol *TSymbolTable::findBuiltIn(const ImmutableString &name, int shader
1726517290
{
1726617291
if (name == BuiltInName::gl_DrawID)
1726717292
{
17268-
return &BuiltInVariable::kVar_gl_DrawID;
17293+
return &BuiltInVariable::kVar_gl_DrawIDESSL1;
1726917294
}
1727017295
break;
1727117296
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
14be2ba8753af7df7955d25bff00e0f5
1+
87bb6e2c1015c9e9aaf2a89e1595cd30

src/compiler/translator/builtin_variables.json

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -675,17 +675,36 @@
675675
"subgroups":{
676676
"ANGLEMultiDraw":{
677677
"condition": "mResources.ANGLE_multi_draw",
678-
"variables":{
679-
"gl_DrawID":{
680-
"level":"ESSL1_BUILTINS",
681-
"extension":"ANGLE_multi_draw",
682-
"type":{
683-
"basic":"Int",
684-
"precision":"High",
685-
"qualifier":"DrawID"
678+
"subgroups":{
679+
"ESSL3":{
680+
"variables":{
681+
"gl_DrawID":{
682+
"level":"ESSL3_BUILTINS",
683+
"extension":"ANGLE_multi_draw",
684+
"type":{
685+
"basic":"Int",
686+
"precision":"High",
687+
"qualifier":"DrawID"
688+
}
689+
}
690+
}
691+
},
692+
"ESSL1":{
693+
"variables":{
694+
"gl_DrawID":{
695+
"suffix":"ESSL1",
696+
"level":"ESSL1_BUILTINS",
697+
"extension":"ANGLE_multi_draw",
698+
"type":{
699+
"basic":"Int",
700+
"precision":"High",
701+
"qualifier":"DrawID"
702+
}
703+
}
686704
}
687705
}
688706
}
707+
689708
}
690709
}
691710
},

src/compiler/translator/tree_ops/EmulateGLDrawID.cpp

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,21 +29,22 @@ constexpr const ImmutableString kEmulatedGLDrawIDName("angle_DrawID");
2929
class FindGLDrawIDTraverser : public TIntermTraverser
3030
{
3131
public:
32-
FindGLDrawIDTraverser() : TIntermTraverser(true, false, false), mFound(false) {}
32+
FindGLDrawIDTraverser() : TIntermTraverser(true, false, false), mVariable(nullptr) {}
3333

34-
bool isGLDrawIDUsed() const { return mFound; }
34+
const TVariable *getGLDrawIDBuiltinVariable() { return mVariable; }
3535

3636
protected:
3737
void visitSymbol(TIntermSymbol *node) override
3838
{
39-
if (&node->variable() == BuiltInVariable::gl_DrawID())
39+
if (&node->variable() == BuiltInVariable::gl_DrawID() ||
40+
&node->variable() == BuiltInVariable::gl_DrawIDESSL1())
4041
{
41-
mFound = true;
42+
mVariable = &node->variable();
4243
}
4344
}
4445

4546
private:
46-
bool mFound;
47+
const TVariable *mVariable;
4748
};
4849

4950
} // namespace
@@ -55,7 +56,8 @@ void EmulateGLDrawID(TIntermBlock *root,
5556
{
5657
FindGLDrawIDTraverser traverser;
5758
root->traverse(&traverser);
58-
if (traverser.isGLDrawIDUsed())
59+
const TVariable *builtInVariable = traverser.getGLDrawIDBuiltinVariable();
60+
if (builtInVariable)
5961
{
6062
const TType *type = StaticType::Get<EbtInt, EbpHigh, EvqUniform, 1, 1>();
6163
const TVariable *drawID =
@@ -69,7 +71,7 @@ void EmulateGLDrawID(TIntermBlock *root,
6971
uniform.mappedName = kEmulatedGLDrawIDName.data();
7072
uniform.type = GLVariableType(*type);
7173
uniform.precision = GLVariablePrecision(*type);
72-
uniform.staticUse = symbolTable->isStaticallyUsed(*BuiltInVariable::gl_DrawID());
74+
uniform.staticUse = symbolTable->isStaticallyUsed(*builtInVariable);
7375
uniform.active = true;
7476
uniform.binding = type->getLayoutQualifier().binding;
7577
uniform.location = type->getLayoutQualifier().location;
@@ -80,7 +82,7 @@ void EmulateGLDrawID(TIntermBlock *root,
8082
}
8183

8284
DeclareGlobalVariable(root, drawID);
83-
ReplaceVariable(root, BuiltInVariable::gl_DrawID(), drawID);
85+
ReplaceVariable(root, builtInVariable, drawID);
8486
}
8587
}
8688

src/compiler/translator/tree_util/BuiltIn_autogen.h

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1298,29 +1298,31 @@ class BuiltInId
12981298
static constexpr const TSymbolUniqueId gl_ViewportIndex = TSymbolUniqueId(1006);
12991299
static constexpr const TSymbolUniqueId gl_LayerVS = TSymbolUniqueId(1007);
13001300
static constexpr const TSymbolUniqueId gl_DrawID = TSymbolUniqueId(1008);
1301-
static constexpr const TSymbolUniqueId gl_NumWorkGroups = TSymbolUniqueId(1009);
1302-
static constexpr const TSymbolUniqueId gl_WorkGroupSize = TSymbolUniqueId(1010);
1303-
static constexpr const TSymbolUniqueId gl_WorkGroupID = TSymbolUniqueId(1011);
1304-
static constexpr const TSymbolUniqueId gl_LocalInvocationID = TSymbolUniqueId(1012);
1305-
static constexpr const TSymbolUniqueId gl_GlobalInvocationID = TSymbolUniqueId(1013);
1306-
static constexpr const TSymbolUniqueId gl_LocalInvocationIndex = TSymbolUniqueId(1014);
1307-
static constexpr const TSymbolUniqueId gl_PrimitiveIDIn = TSymbolUniqueId(1015);
1308-
static constexpr const TSymbolUniqueId gl_InvocationID = TSymbolUniqueId(1016);
1309-
static constexpr const TSymbolUniqueId gl_PrimitiveIDGS = TSymbolUniqueId(1017);
1310-
static constexpr const TSymbolUniqueId gl_LayerGS = TSymbolUniqueId(1018);
1311-
static constexpr const TSymbolUniqueId gl_PerVertex = TSymbolUniqueId(1019);
1312-
static constexpr const TSymbolUniqueId gl_in = TSymbolUniqueId(1020);
1313-
static constexpr const TSymbolUniqueId gl_PerVertexOutBlock = TSymbolUniqueId(1021);
1314-
static constexpr const TSymbolUniqueId gl_PositionGS = TSymbolUniqueId(1022);
1315-
static constexpr const TSymbolUniqueId gl_ViewID_OVR = TSymbolUniqueId(1023);
1316-
static constexpr const TSymbolUniqueId gl_ViewID_OVRESSL1 = TSymbolUniqueId(1024);
1301+
static constexpr const TSymbolUniqueId gl_DrawIDESSL1 = TSymbolUniqueId(1009);
1302+
static constexpr const TSymbolUniqueId gl_NumWorkGroups = TSymbolUniqueId(1010);
1303+
static constexpr const TSymbolUniqueId gl_WorkGroupSize = TSymbolUniqueId(1011);
1304+
static constexpr const TSymbolUniqueId gl_WorkGroupID = TSymbolUniqueId(1012);
1305+
static constexpr const TSymbolUniqueId gl_LocalInvocationID = TSymbolUniqueId(1013);
1306+
static constexpr const TSymbolUniqueId gl_GlobalInvocationID = TSymbolUniqueId(1014);
1307+
static constexpr const TSymbolUniqueId gl_LocalInvocationIndex = TSymbolUniqueId(1015);
1308+
static constexpr const TSymbolUniqueId gl_PrimitiveIDIn = TSymbolUniqueId(1016);
1309+
static constexpr const TSymbolUniqueId gl_InvocationID = TSymbolUniqueId(1017);
1310+
static constexpr const TSymbolUniqueId gl_PrimitiveIDGS = TSymbolUniqueId(1018);
1311+
static constexpr const TSymbolUniqueId gl_LayerGS = TSymbolUniqueId(1019);
1312+
static constexpr const TSymbolUniqueId gl_PerVertex = TSymbolUniqueId(1020);
1313+
static constexpr const TSymbolUniqueId gl_in = TSymbolUniqueId(1021);
1314+
static constexpr const TSymbolUniqueId gl_PerVertexOutBlock = TSymbolUniqueId(1022);
1315+
static constexpr const TSymbolUniqueId gl_PositionGS = TSymbolUniqueId(1023);
1316+
static constexpr const TSymbolUniqueId gl_ViewID_OVR = TSymbolUniqueId(1024);
1317+
static constexpr const TSymbolUniqueId gl_ViewID_OVRESSL1 = TSymbolUniqueId(1025);
13171318

13181319
}; // class BuiltInId
13191320

13201321
namespace BuiltInVariable
13211322
{
13221323

13231324
const TVariable *gl_DrawID();
1325+
const TVariable *gl_DrawIDESSL1();
13241326
const TVariable *gl_FragColor();
13251327
const TVariable *gl_FragCoord();
13261328
const TVariable *gl_FragDepth();

src/tests/compiler_tests/EmulateGLDrawID_test.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,21 @@ TEST_F(EmulateGLDrawIDTest, RequiresEmulation)
5252
"extension is not supported");
5353
}
5454

55+
// Check that compiling with emulation with gl_DrawID works with different shader versions
56+
TEST_F(EmulateGLDrawIDTest, CheckCompile)
57+
{
58+
const std::string shaderString =
59+
"#extension GL_ANGLE_multi_draw : require\n"
60+
"void main() {\n"
61+
" gl_Position = vec4(float(gl_DrawID), 0.0, 0.0, 1.0);\n"
62+
"}\n";
63+
64+
compile(shaderString, SH_OBJECT_CODE | SH_VARIABLES | SH_EMULATE_GL_DRAW_ID);
65+
compile("#version 100\n" + shaderString, SH_OBJECT_CODE | SH_VARIABLES | SH_EMULATE_GL_DRAW_ID);
66+
compile("#version 300 es\n" + shaderString,
67+
SH_OBJECT_CODE | SH_VARIABLES | SH_EMULATE_GL_DRAW_ID);
68+
}
69+
5570
// Check that gl_DrawID is properly emulated
5671
TEST_F(EmulateGLDrawIDTest, EmulatesUniform)
5772
{

src/tests/compiler_tests/ImmutableString_test_autogen.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1062,6 +1062,7 @@ TEST(ImmutableStringTest, ScriptGeneratedHashesMatch)
10621062
ASSERT_EQ(0x7e645c89u, ImmutableString("gl_FragDepth").mangledNameHash());
10631063
ASSERT_EQ(0x7e6be47fu, ImmutableString("gl_InstanceID").mangledNameHash());
10641064
ASSERT_EQ(0x7e5f8987u, ImmutableString("gl_VertexID").mangledNameHash());
1065+
ASSERT_EQ(0x7e4c3c42u, ImmutableString("gl_DrawID").mangledNameHash());
10651066
ASSERT_EQ(0x7e6f6de9u, ImmutableString("gl_ViewID_OVR").mangledNameHash());
10661067
ASSERT_EQ(0x7ea6cdf6u, ImmutableString("gl_MaxVaryingVectors").mangledNameHash());
10671068
ASSERT_EQ(0x7e5a0c08u, ImmutableString("gl_FragData").mangledNameHash());
@@ -1072,7 +1073,6 @@ TEST(ImmutableStringTest, ScriptGeneratedHashesMatch)
10721073
ASSERT_EQ(0x7e7970c2u, ImmutableString("gl_LastFragData").mangledNameHash());
10731074
ASSERT_EQ(0x7e802016u, ImmutableString("gl_LastFragColor").mangledNameHash());
10741075
ASSERT_EQ(0x7e9f0a88u, ImmutableString("gl_LastFragColorARM").mangledNameHash());
1075-
ASSERT_EQ(0x7e4c3c42u, ImmutableString("gl_DrawID").mangledNameHash());
10761076
ASSERT_EQ(0x7ebeff64u, ImmutableString("gl_DepthRangeParameters").mangledNameHash());
10771077
ASSERT_EQ(0x7e6af03cu, ImmutableString("gl_DepthRange").mangledNameHash());
10781078
ASSERT_EQ(0x7e9ad799u, ImmutableString("gl_MaxVertexAttribs").mangledNameHash());

0 commit comments

Comments
 (0)