summaryrefslogtreecommitdiff
path: root/source/slang/slang-ast-val.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2023-11-16 14:32:33 -0800
committerGitHub <noreply@github.com>2023-11-16 14:32:33 -0800
commit4c78efd0c34442866f20e9d00bbb6908115c9a01 (patch)
tree03ca8584847f0937a926f6b27386dcd982ed7780 /source/slang/slang-ast-val.cpp
parent12f7237e4060388494c549623f4a640327b7ca08 (diff)
Unify stdlib `Texture` types into one generic type. (#3327)
* Unify Texture types in stdlib into 1 generic type. * Fixes. * Fix. * Fixes. * Fix reflection. * Fix binding reflection. * Add gather intrinsics. * Fix gather intrinsics. * Fix texture type toText. * Fix intrinsic. * fix cuda intrinsic. * Fix project files. * cleanup. * Fix. * Fix. * Fix sampler feedback test. * Fix getDimension intrinsics. * Fix spirv sample image intrinsics. * Fix test. * Fix GLSL intrinsic. * Cleanup. --------- Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'source/slang/slang-ast-val.cpp')
-rw-r--r--source/slang/slang-ast-val.cpp18
1 files changed, 16 insertions, 2 deletions
diff --git a/source/slang/slang-ast-val.cpp b/source/slang/slang-ast-val.cpp
index 8afc6e689..e860e1ec6 100644
--- a/source/slang/slang-ast-val.cpp
+++ b/source/slang/slang-ast-val.cpp
@@ -810,6 +810,7 @@ Val* PolynomialIntVal::_substituteImplOverride(ASTBuilder* astBuilder, Substitut
{
int diff = 0;
PolynomialIntValBuilder builder(astBuilder);
+ builder.constantTerm = getConstantTerm();
for (auto& term : getTerms())
{
IntegerLiteralValue evaluatedTermConstFactor;
@@ -835,6 +836,14 @@ Val* PolynomialIntVal::_substituteImplOverride(ASTBuilder* astBuilder, Substitut
}
else
{
+ if (evaluatedTermParamFactors.getCount() == 1 && evaluatedTermParamFactors[0]->getPower() == 1)
+ {
+ if (auto polyTerm = as<PolynomialIntVal>(evaluatedTermParamFactors[0]->getParam()))
+ {
+ builder.addToPolynomialTerm(polyTerm, evaluatedTermConstFactor);
+ continue;
+ }
+ }
auto newTerm = astBuilder->getOrCreate<PolynomialIntValTerm>(
evaluatedTermConstFactor, evaluatedTermParamFactors.getArrayView());
builder.terms.add(newTerm);
@@ -1335,14 +1344,19 @@ Val* WitnessLookupIntVal::_substituteImplOverride(ASTBuilder* astBuilder, Substi
{
int diff = 0;
auto newWitness = getWitness()->substituteImpl(astBuilder, subst, &diff);
- *ioDiff += diff;
if (diff)
{
+ *ioDiff += diff;
auto witnessEntry = tryFoldOrNull(astBuilder, as<SubtypeWitness>(newWitness), getKey());
if (witnessEntry)
+ {
return witnessEntry;
+ }
+ else
+ {
+ return astBuilder->getOrCreate<WitnessLookupIntVal>(getType(), newWitness, getKey());
+ }
}
- // Nothing found: don't substitute.
return this;
}