diff options
| author | Ellie Hermaszewska <ellieh@nvidia.com> | 2024-03-01 01:50:19 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-03-01 01:50:19 +0800 |
| commit | d979b5048009c3909cfc13476a78a12ae5f4d61b (patch) | |
| tree | 550815d37916be845fb0aa1dcc6131960c2bf517 /source/slang/slang-ir-autodiff.cpp | |
| parent | 21f86773771c26da8bf3c458642e51b1728d419c (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.cpp | 36 |
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 )); |
