summaryrefslogtreecommitdiff
path: root/source/slang/slang-ir-autodiff.cpp
diff options
context:
space:
mode:
authorEllie Hermaszewska <ellieh@nvidia.com>2024-03-01 01:50:19 +0800
committerGitHub <noreply@github.com>2024-03-01 01:50:19 +0800
commitd979b5048009c3909cfc13476a78a12ae5f4d61b (patch)
tree550815d37916be845fb0aa1dcc6131960c2bf517 /source/slang/slang-ir-autodiff.cpp
parent21f86773771c26da8bf3c458642e51b1728d419c (diff)
Add support for bitfields (#3639)
* Add support for bitfields Closes https://github.com/shader-slang/slang/issues/3559 * Set scopes for syntsized bitfield accessors * Simplify generated code for bitfield accessors * spelling * regenerate vs project * warnings
Diffstat (limited to 'source/slang/slang-ir-autodiff.cpp')
-rw-r--r--source/slang/slang-ir-autodiff.cpp36
1 files changed, 5 insertions, 31 deletions
diff --git a/source/slang/slang-ir-autodiff.cpp b/source/slang/slang-ir-autodiff.cpp
index 2cc4e3b57..14b53c0e0 100644
--- a/source/slang/slang-ir-autodiff.cpp
+++ b/source/slang/slang-ir-autodiff.cpp
@@ -96,32 +96,6 @@ IRInst* lookupForwardDerivativeReference(IRInst* primalFunction)
return nullptr;
}
-IRStructField* DifferentialPairTypeBuilder::findField(IRInst* type, IRStructKey* key)
-{
- if (auto irStructType = as<IRStructType>(type))
- {
- for (auto field : irStructType->getFields())
- {
- if (field->getKey() == key)
- {
- return field;
- }
- }
- }
- else if (auto irSpecialize = as<IRSpecialize>(type))
- {
- if (auto irGeneric = as<IRGeneric>(irSpecialize->getBase()))
- {
- if (auto irGenericStructType = as<IRStructType>(findInnerMostGenericReturnVal(irGeneric)))
- {
- return findField(irGenericStructType, key);
- }
- }
- }
-
- return nullptr;
-}
-
IRInst* DifferentialPairTypeBuilder::findSpecializationForParam(IRInst* specializeInst, IRInst* genericParam)
{
// Get base generic that's being specialized.
@@ -162,7 +136,7 @@ IRInst* DifferentialPairTypeBuilder::emitFieldAccessor(IRBuilder* builder, IRIns
if (auto basePairStructType = as<IRStructType>(pairType))
{
return as<IRFieldExtract>(builder->emitFieldExtract(
- findField(basePairStructType, key)->getFieldType(),
+ findStructField(basePairStructType, key)->getFieldType(),
baseInst,
key
));
@@ -178,7 +152,7 @@ IRInst* DifferentialPairTypeBuilder::emitFieldAccessor(IRBuilder* builder, IRIns
builder->getPtrType((IRType*)
findSpecializationForParam(
ptrInnerSpecializedType,
- findField(ptrInnerSpecializedType, key)->getFieldType())),
+ findStructField(ptrInnerSpecializedType, key)->getFieldType())),
baseInst,
key
));
@@ -188,7 +162,7 @@ IRInst* DifferentialPairTypeBuilder::emitFieldAccessor(IRBuilder* builder, IRIns
{
return as<IRFieldAddress>(builder->emitFieldAddress(
builder->getPtrType((IRType*)
- findField(ptrBaseStructType, key)->getFieldType()),
+ findStructField(ptrBaseStructType, key)->getFieldType()),
baseInst,
key));
}
@@ -204,7 +178,7 @@ IRInst* DifferentialPairTypeBuilder::emitFieldAccessor(IRBuilder* builder, IRIns
return as<IRFieldExtract>(builder->emitFieldExtract(
(IRType*)findSpecializationForParam(
specializedType,
- findField(genericBasePairStructType, key)->getFieldType()),
+ findStructField(genericBasePairStructType, key)->getFieldType()),
baseInst,
key
));
@@ -217,7 +191,7 @@ IRInst* DifferentialPairTypeBuilder::emitFieldAccessor(IRBuilder* builder, IRIns
builder->getPtrType((IRType*)
findSpecializationForParam(
specializedType,
- findField(genericPairStructType, key)->getFieldType())),
+ findStructField(genericPairStructType, key)->getFieldType())),
baseInst,
key
));