Commit 928dfeed by Chris Forbes

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/25648Tested-by: 's avatarChris Forbes <chrisforbes@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Reviewed-by: 's avatarBen Clayton <bclayton@google.com> Reviewed-by: 's avatarNicolas Capens <nicolascapens@google.com>
parent baf7ad35
...@@ -790,7 +790,6 @@ namespace sw ...@@ -790,7 +790,6 @@ namespace sw
auto &objectTy = getType(object.type); auto &objectTy = getType(object.type);
auto &pointer = getObject(pointerId); auto &pointer = getObject(pointerId);
auto &pointerTy = getType(pointer.type); auto &pointerTy = getType(pointer.type);
routine->createIntermediate(objectId, objectTy.sizeInComponents);
auto &pointerBase = getObject(pointer.pointerBase); auto &pointerBase = getObject(pointer.pointerBase);
auto &pointerBaseTy = getType(pointerBase.type); auto &pointerBaseTy = getType(pointerBase.type);
...@@ -805,7 +804,7 @@ namespace sw ...@@ -805,7 +804,7 @@ namespace sw
} }
auto &ptrBase = routine->getValue(pointer.pointerBase); auto &ptrBase = routine->getValue(pointer.pointerBase);
auto &dst = routine->getIntermediate(objectId); auto &dst = routine->createIntermediate(objectId, objectTy.sizeInComponents);
if (pointer.kind == Object::Kind::Value) if (pointer.kind == Object::Kind::Value)
{ {
...@@ -840,7 +839,6 @@ namespace sw ...@@ -840,7 +839,6 @@ namespace sw
auto &object = getObject(objectId); auto &object = getObject(objectId);
auto &type = getType(typeId); auto &type = getType(typeId);
auto &base = getObject(baseId); auto &base = getObject(baseId);
routine->createIntermediate(objectId, type.sizeInComponents);
auto &pointerBase = getObject(object.pointerBase); auto &pointerBase = getObject(object.pointerBase);
auto &pointerBaseTy = getType(pointerBase.type); auto &pointerBaseTy = getType(pointerBase.type);
assert(type.sizeInComponents == 1); assert(type.sizeInComponents == 1);
...@@ -852,7 +850,7 @@ namespace sw ...@@ -852,7 +850,7 @@ namespace sw
{ {
UNIMPLEMENTED("Descriptor-backed OpAccessChain not yet implemented"); 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))); dst.emplace(0, As<Float4>(WalkAccessChain(baseId, insn.wordCount() - 4, insn.wordPointer(4), routine)));
break; break;
} }
......
...@@ -367,11 +367,12 @@ namespace sw ...@@ -367,11 +367,12 @@ namespace sw
lvalues.emplace(id, Value(size)); 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(id),
std::forward_as_tuple(size)); std::forward_as_tuple(size));
return it.first->second;
} }
Value& getValue(SpirvShader::ObjectID id) Value& getValue(SpirvShader::ObjectID id)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment