diff options
author | David Neto <dneto@google.com> | 2023-01-16 16:35:49 -0500 |
---|---|---|
committer | David Neto <dneto@google.com> | 2023-01-16 18:39:12 -0500 |
commit | 3413ac75f77bea1fb8cc7f04fd83a62384e1d34e (patch) | |
tree | eb7973ea8406bd6e91a6e1ecc1e3119fc66b0887 /glslang/MachineIndependent/linkValidate.cpp | |
parent | 7e8734f89a7a56ec1326e9ea9bfbc847f38e2f32 (diff) | |
parent | 1fb2f1d7896627d62a289439a2c3e750e551a7ab (diff) | |
download | glslang-3413ac75f77bea1fb8cc7f04fd83a62384e1d34e.tar.gz |
Merge remote-tracking branch 'aosp/upstream-master' into update-shaderc
Includes:
1fb2f1d7 Merge pull request #3108 from greg-lunarg/i3105
9b67d41b Fix crash on bad structure member reference
06a7078c build: Remove AMD_EXTENSIONS / NV_EXTENSIONS defines
1d978158 Merge pull request #3100 from daniel-story/fix-dual-src-draw-buffers
d1fc064e Merge pull request #3102 from jeremy-lunarg/hayes-fix-debuginfo-disassembly
d38d06c0 Fix debuginfo disassembly
68935bc2 Merge pull request #3099 from jeremy-lunarg/hayes-fix-issue-3095
bec8359b Fix const parameter debug types
a88f6741 Fix issues with MaxDualSourceDrawBuffersEXT
dcae1873 Remove languages from cmake project statement
f9b760e6 [glslang] Refine implicit array size interfaces. (#3074)
c6b3f279 Merge pull request #3087 from dneto0/remove-unused
4fe00178 Remove the name of unused formal paramters
6d8b00b1 Add support for GL_NV_shader_invocation_reorder. (#3054)
4fc43cd3 Add support for GL_NV_shader_invocation_reorder. (#3054)
19d816c8 Merge pull request #3086 from jeremy-lunarg/hayes-fix-3073
586baa35 Guard AppleClang linker options
ed257e2b Merge pull request #3066 from ShchchowAMD/shaochi/bindless
16526fd9 [glslang][EXT] Support extension ARB_bindless_texture.
77551c42 Merge pull request #3081 from jeremy-lunarg/hayes-update-changes
5f6fa4e7 Merge pull request #3080 from jeremy-lunarg/hayes-update-known-good
683c0f34 Update CHANGES for release 11.13.0
08cf7bd2 Update known_good.json
e3e8baf8 Merge pull request #3079 from gby/GL_ARM_shader_core_builtins
0464ff45 GL_ARM_shader_core_builtins support
a7603c13 Use nullptr where possible instead of NULL or 0
728c6895 Include: PoolAlloc: do not rely on CMake define
12bb8602 Merge pull request #3077 from greg-lunarg/edos3
7f047b98 Add EliminateDeadOutputStores to API.
0cd93a0e Merge pull request #3076 from greg-lunarg/kg124
1ddba01a Update known goods
88fd417b Fix locations of cmake files in side compat shims
2b2523fb Merge pull request #3061 from ShabbyX/remove-angle-build-flag
6b2493a4 Remove GLSLANG_ANGLE
f4cba22d Merge pull request #3060 from greg-lunarg/limit3
cc4c7330 Fix include in resource_limits_c.h
5e08deae Merge pull request #3057 from ShabbyX/fix-gn-build
1813a14a Fix gn build
8da64950 Merge pull request #3055 from greg-lunarg/limit2
90c52143 Improve ResourceLimits interface to be more forward compatible
1a8869e4 Merge pull request #3050 from Try/mesh-shader-ibo-fixup
11409249 update failing test-cases
980ac508 Merge pull request #3047 from akien-mga/spirv.hpp-dos2unix
0c3c37de Merge pull request #3046 from amdrexu/bugfix
a0ad0d70 Merge pull request #3043 from gnl21/helper-invocation
a21b8d8d mesh shader: fix implicit index-array size calculation for lines and triangles
5c352476 Test for spv1.6 + memory model HelperInvocation
d570b2b0 Change Volatile generation for HelperInvocation
5755de46 Merge pull request #3049 from jeremy-lunarg/hayes-update-changes
78221d61 Update CHANGES for release 11.12.0
ef6c9714 Merge pull request #3048 from jeremy-lunarg/hayes-update-known-good
a77d26f0 Update known_good.json
568e233e Merge pull request #3037 from mbechard/master
15bd5048 Merge pull request #3045 from James2022-rgb/feature/c_interface_preamble_support
7541f398 Convert spirv.hpp line endings to LF (Unix style)
17b0a218 Fix incorrect parse message of mesh shader
573e9849 CInterface: Add preamble support.
d11c3ff3 only use dead input elimination on vertex shaders
Testing: checkbuild.py on Linux
Change-Id: Ie3eacf3d18a88f7e160487515296cc82edef0ad8
Diffstat (limited to 'glslang/MachineIndependent/linkValidate.cpp')
-rw-r--r-- | glslang/MachineIndependent/linkValidate.cpp | 55 |
1 files changed, 49 insertions, 6 deletions
diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp index acc512fd..3a4cb567 100644 --- a/glslang/MachineIndependent/linkValidate.cpp +++ b/glslang/MachineIndependent/linkValidate.cpp @@ -89,7 +89,7 @@ void TIntermediate::warn(TInfoSink& infoSink, const char* message, EShLanguage u // void TIntermediate::merge(TInfoSink& infoSink, TIntermediate& unit) { -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) +#if !defined(GLSLANG_WEB) mergeCallGraphs(infoSink, unit); mergeModes(infoSink, unit); mergeTrees(infoSink, unit); @@ -161,7 +161,7 @@ void TIntermediate::mergeCallGraphs(TInfoSink& infoSink, TIntermediate& unit) callGraph.insert(callGraph.end(), unit.callGraph.begin(), unit.callGraph.end()); } -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) +#if !defined(GLSLANG_WEB) #define MERGE_MAX(member) member = std::max(member, unit.member) #define MERGE_TRUE(member) if (unit.member) member = unit.member; @@ -750,6 +750,21 @@ void TIntermediate::mergeLinkerObjects(TInfoSink& infoSink, TIntermSequence& lin } // Update implicit array sizes + if (symbol->getWritableType().isImplicitlySizedArray() && unitSymbol->getType().isImplicitlySizedArray()) { + if (unitSymbol->getType().getImplicitArraySize() > symbol->getType().getImplicitArraySize()){ + symbol->getWritableType().updateImplicitArraySize(unitSymbol->getType().getImplicitArraySize()); + } + } + else if (symbol->getWritableType().isImplicitlySizedArray() && unitSymbol->getType().isSizedArray()) { + if (symbol->getWritableType().getImplicitArraySize() > unitSymbol->getType().getOuterArraySize()) + error(infoSink, "Implicit size of unsized array doesn't match same symbol among multiple shaders."); + } + else if (unitSymbol->getType().isImplicitlySizedArray() && symbol->getWritableType().isSizedArray()) { + if (unitSymbol->getType().getImplicitArraySize() > symbol->getWritableType().getOuterArraySize()) + error(infoSink, "Implicit size of unsized array doesn't match same symbol among multiple shaders."); + } + + // Update implicit array sizes mergeImplicitArraySizes(symbol->getWritableType(), unitSymbol->getType()); // Check for consistent types/qualification/initializers etc. @@ -759,6 +774,19 @@ void TIntermediate::mergeLinkerObjects(TInfoSink& infoSink, TIntermSequence& lin else if (symbol->getQualifier().isPushConstant() && unitSymbol->getQualifier().isPushConstant() && getStage() == unitStage) error(infoSink, "Only one push_constant block is allowed per stage"); } + + // Check conflicts between preset primitives and sizes of I/O variables among multiple geometry shaders + if (language == EShLangGeometry && unitStage == EShLangGeometry) + { + TIntermSymbol* unitSymbol = unitLinkerObjects[unitLinkObj]->getAsSymbolNode(); + if (unitSymbol->isArray() && unitSymbol->getQualifier().storage == EvqVaryingIn && unitSymbol->getQualifier().builtIn == EbvNone) + if ((unitSymbol->getArraySizes()->isImplicitlySized() && + unitSymbol->getArraySizes()->getImplicitSize() != TQualifier::mapGeometryToSize(getInputPrimitive())) || + (! unitSymbol->getArraySizes()->isImplicitlySized() && + unitSymbol->getArraySizes()->getDimSize(0) != TQualifier::mapGeometryToSize(getInputPrimitive()))) + error(infoSink, "Not all array sizes match across all geometry shaders in the program"); + } + if (merge) { linkerObjects.push_back(unitLinkerObjects[unitLinkObj]); @@ -828,7 +856,7 @@ void TIntermediate::mergeImplicitArraySizes(TType& type, const TType& unitType) // void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& symbol, const TIntermSymbol& unitSymbol, EShLanguage unitStage) { -#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) +#if !defined(GLSLANG_WEB) bool crossStage = getStage() != unitStage; bool writeTypeComparison = false; bool errorReported = false; @@ -863,7 +891,8 @@ void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& sy else { arraysMatch = symbol.getType().sameArrayness(unitSymbol.getType()) || (symbol.getType().isArray() && unitSymbol.getType().isArray() && - (symbol.getType().isUnsizedArray() || unitSymbol.getType().isUnsizedArray())); + (symbol.getType().isImplicitlySizedArray() || unitSymbol.getType().isImplicitlySizedArray() || + symbol.getType().isUnsizedArray() || unitSymbol.getType().isUnsizedArray())); } int lpidx = -1; @@ -1383,7 +1412,7 @@ void TIntermediate::checkCallGraphCycles(TInfoSink& infoSink) TCall* newRoot; do { // See if we have unvisited parts of the graph. - newRoot = 0; + newRoot = nullptr; for (TGraph::iterator call = callGraph.begin(); call != callGraph.end(); ++call) { if (! call->visited) { newRoot = &(*call); @@ -1517,7 +1546,10 @@ void TIntermediate::checkCallGraphBodies(TInfoSink& infoSink, bool keepUncalled) if (! keepUncalled) { for (int f = 0; f < (int)functionSequence.size(); ++f) { if (! reachable[f]) + { + resetTopLevelUncalledStatus(functionSequence[f]->getAsAggregate()->getName()); functionSequence[f] = nullptr; + } } functionSequence.erase(std::remove(functionSequence.begin(), functionSequence.end(), nullptr), functionSequence.end()); } @@ -1611,6 +1643,8 @@ int TIntermediate::addUsedLocation(const TQualifier& qualifier, const TType& typ setRT = 0; else if (qualifier.isAnyCallable()) setRT = 1; + else if (qualifier.isHitObjectAttrNV()) + setRT = 2; else return -1; @@ -1650,7 +1684,7 @@ int TIntermediate::addUsedLocation(const TQualifier& qualifier, const TType& typ // slot irrespective of type. int collision = -1; // no collision #ifndef GLSLANG_WEB - if (qualifier.isAnyPayload() || qualifier.isAnyCallable()) { + if (qualifier.isAnyPayload() || qualifier.isAnyCallable() || qualifier.isHitObjectAttrNV()) { TRange range(qualifier.layoutLocation, qualifier.layoutLocation); collision = checkLocationRT(setRT, qualifier.layoutLocation); if (collision < 0) @@ -2012,6 +2046,15 @@ int TIntermediate::getBaseAlignmentScalar(const TType& type, int& size) case EbtInt16: case EbtUint16: size = 2; return 2; case EbtReference: size = 8; return 8; + case EbtSampler: + { + if (type.isBindlessImage() || type.isBindlessTexture()) { + size = 8; return 8; + } + else { + size = 4; return 4; + } + } default: size = 4; return 4; } } |