Return newly-created value from SpirvRoutine::createIntermediate All the callers needed to fetch this immediately afterward; save some effort. Bug: b/126475489 Change-Id: I622d30aa955c27df8e12fdf87762c0db96133666 Reviewed-on: https://swiftshader-review.googlesource.com/c/25648 Tested-by: Chris Forbes <chrisforbes@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Reviewed-by: Ben Clayton <bclayton@google.com> Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/Pipeline/SpirvShader.cpp b/src/Pipeline/SpirvShader.cpp index 78b6657..18d71b6 100644 --- a/src/Pipeline/SpirvShader.cpp +++ b/src/Pipeline/SpirvShader.cpp
@@ -790,7 +790,6 @@ auto &objectTy = getType(object.type); auto &pointer = getObject(pointerId); auto &pointerTy = getType(pointer.type); - routine->createIntermediate(objectId, objectTy.sizeInComponents); auto &pointerBase = getObject(pointer.pointerBase); auto &pointerBaseTy = getType(pointerBase.type); @@ -805,7 +804,7 @@ } auto &ptrBase = routine->getValue(pointer.pointerBase); - auto &dst = routine->getIntermediate(objectId); + auto &dst = routine->createIntermediate(objectId, objectTy.sizeInComponents); if (pointer.kind == Object::Kind::Value) { @@ -840,7 +839,6 @@ auto &object = getObject(objectId); auto &type = getType(typeId); auto &base = getObject(baseId); - routine->createIntermediate(objectId, type.sizeInComponents); auto &pointerBase = getObject(object.pointerBase); auto &pointerBaseTy = getType(pointerBase.type); assert(type.sizeInComponents == 1); @@ -852,7 +850,7 @@ { UNIMPLEMENTED("Descriptor-backed OpAccessChain not yet implemented"); } - auto &dst = routine->getIntermediate(objectId); + auto &dst = routine->createIntermediate(objectId, type.sizeInComponents); dst.emplace(0, As<Float4>(WalkAccessChain(baseId, insn.wordCount() - 4, insn.wordPointer(4), routine))); break; }
diff --git a/src/Pipeline/SpirvShader.hpp b/src/Pipeline/SpirvShader.hpp index 3037654..22d75da 100644 --- a/src/Pipeline/SpirvShader.hpp +++ b/src/Pipeline/SpirvShader.hpp
@@ -367,11 +367,12 @@ lvalues.emplace(id, Value(size)); } - void createIntermediate(SpirvShader::ObjectID id, uint32_t size) + Intermediate& createIntermediate(SpirvShader::ObjectID id, uint32_t size) { - intermediates.emplace(std::piecewise_construct, + auto it = intermediates.emplace(std::piecewise_construct, std::forward_as_tuple(id), std::forward_as_tuple(size)); + return it.first->second; } Value& getValue(SpirvShader::ObjectID id)