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)