Commit f51e99fb by Courtney Goeltzenleuchter Committed by Commit Bot

Vulkan: Remove serial from RenderPassHelper

We don't delete RenderPass's so no need to keep a serial. This simplifies things for coming threading code. Bug: b/169788986 Change-Id: I2577b17bc1f6af163725389589d7cd62d09eea13 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2468538Reviewed-by: 's avatarTim Van Patten <timvp@google.com> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Commit-Queue: Courtney Goeltzenleuchter <courtneygo@google.com>
parent 0e5e6078
...@@ -4370,16 +4370,14 @@ angle::Result ContextVk::finishToSerial(Serial serial) ...@@ -4370,16 +4370,14 @@ angle::Result ContextVk::finishToSerial(Serial serial)
angle::Result ContextVk::getCompatibleRenderPass(const vk::RenderPassDesc &desc, angle::Result ContextVk::getCompatibleRenderPass(const vk::RenderPassDesc &desc,
vk::RenderPass **renderPassOut) vk::RenderPass **renderPassOut)
{ {
return mRenderPassCache.getCompatibleRenderPass(this, getCurrentQueueSerial(), desc, return mRenderPassCache.getCompatibleRenderPass(this, desc, renderPassOut);
renderPassOut);
} }
angle::Result ContextVk::getRenderPassWithOps(const vk::RenderPassDesc &desc, angle::Result ContextVk::getRenderPassWithOps(const vk::RenderPassDesc &desc,
const vk::AttachmentOpsArray &ops, const vk::AttachmentOpsArray &ops,
vk::RenderPass **renderPassOut) vk::RenderPass **renderPassOut)
{ {
return mRenderPassCache.getRenderPassWithOps(this, getCurrentQueueSerial(), desc, ops, return mRenderPassCache.getRenderPassWithOps(this, desc, ops, renderPassOut);
renderPassOut);
} }
angle::Result ContextVk::ensureSubmitFenceInitialized() angle::Result ContextVk::ensureSubmitFenceInitialized()
......
...@@ -662,9 +662,9 @@ angle::Result ProgramExecutableVk::getGraphicsPipeline( ...@@ -662,9 +662,9 @@ angle::Result ProgramExecutableVk::getGraphicsPipeline(
ASSERT(shaderProgram); ASSERT(shaderProgram);
ANGLE_TRY(renderer->getPipelineCache(&pipelineCache)); ANGLE_TRY(renderer->getPipelineCache(&pipelineCache));
return shaderProgram->getGraphicsPipeline( return shaderProgram->getGraphicsPipeline(
contextVk, &contextVk->getRenderPassCache(), *pipelineCache, contextVk, &contextVk->getRenderPassCache(), *pipelineCache, getPipelineLayout(), desc,
contextVk->getCurrentQueueSerial(), getPipelineLayout(), desc, activeAttribLocations, activeAttribLocations, glState.getProgramExecutable()->getAttributesTypeMask(), descPtrOut,
glState.getProgramExecutable()->getAttributesTypeMask(), descPtrOut, pipelineOut); pipelineOut);
} }
angle::Result ProgramExecutableVk::getComputePipeline(ContextVk *contextVk, angle::Result ProgramExecutableVk::getComputePipeline(ContextVk *contextVk,
......
...@@ -985,10 +985,9 @@ angle::Result UtilsVk::setupProgram(ContextVk *contextVk, ...@@ -985,10 +985,9 @@ angle::Result UtilsVk::setupProgram(ContextVk *contextVk,
vk::PipelineHelper *helper; vk::PipelineHelper *helper;
vk::PipelineCache *pipelineCache = nullptr; vk::PipelineCache *pipelineCache = nullptr;
ANGLE_TRY(renderer->getPipelineCache(&pipelineCache)); ANGLE_TRY(renderer->getPipelineCache(&pipelineCache));
ANGLE_TRY(program->getGraphicsPipeline(contextVk, &contextVk->getRenderPassCache(), ANGLE_TRY(program->getGraphicsPipeline(
*pipelineCache, serial, pipelineLayout.get(), contextVk, &contextVk->getRenderPassCache(), *pipelineCache, pipelineLayout.get(),
*pipelineDesc, gl::AttributesMask(), *pipelineDesc, gl::AttributesMask(), gl::ComponentTypeMask(), &descPtr, &helper));
gl::ComponentTypeMask(), &descPtr, &helper));
helper->updateSerial(serial); helper->updateSerial(serial);
commandBuffer->bindGraphicsPipeline(helper->getPipeline()); commandBuffer->bindGraphicsPipeline(helper->getPipeline());
} }
......
...@@ -1156,13 +1156,11 @@ angle::Result InitializeRenderPassFromDesc(ContextVk *contextVk, ...@@ -1156,13 +1156,11 @@ angle::Result InitializeRenderPassFromDesc(ContextVk *contextVk,
return angle::Result::Continue; return angle::Result::Continue;
} }
void GetRenderPassAndUpdateSerial(ContextVk *contextVk, void GetRenderPassAndUpdateCounters(ContextVk *contextVk,
Serial serial, bool updatePerfCounters,
bool updatePerfCounters, vk::RenderPassHelper *renderPassHelper,
vk::RenderPassHelper *renderPassHelper, vk::RenderPass **renderPassOut)
vk::RenderPass **renderPassOut)
{ {
renderPassHelper->updateSerial(serial);
*renderPassOut = &renderPassHelper->getRenderPass(); *renderPassOut = &renderPassHelper->getRenderPass();
if (updatePerfCounters) if (updatePerfCounters)
{ {
...@@ -3096,7 +3094,6 @@ RenderPassHelper::RenderPassHelper(RenderPassHelper &&other) ...@@ -3096,7 +3094,6 @@ RenderPassHelper::RenderPassHelper(RenderPassHelper &&other)
RenderPassHelper &RenderPassHelper::operator=(RenderPassHelper &&other) RenderPassHelper &RenderPassHelper::operator=(RenderPassHelper &&other)
{ {
mRenderPass = std::move(other.mRenderPass); mRenderPass = std::move(other.mRenderPass);
mSerial = std::move(other.mSerial);
mPerfCounters = std::move(other.mPerfCounters); mPerfCounters = std::move(other.mPerfCounters);
return *this; return *this;
} }
...@@ -3104,7 +3101,6 @@ RenderPassHelper &RenderPassHelper::operator=(RenderPassHelper &&other) ...@@ -3104,7 +3101,6 @@ RenderPassHelper &RenderPassHelper::operator=(RenderPassHelper &&other)
void RenderPassHelper::destroy(VkDevice device) void RenderPassHelper::destroy(VkDevice device)
{ {
mRenderPass.destroy(device); mRenderPass.destroy(device);
mSerial = Serial();
} }
const RenderPass &RenderPassHelper::getRenderPass() const const RenderPass &RenderPassHelper::getRenderPass() const
...@@ -3117,11 +3113,6 @@ RenderPass &RenderPassHelper::getRenderPass() ...@@ -3117,11 +3113,6 @@ RenderPass &RenderPassHelper::getRenderPass()
return mRenderPass; return mRenderPass;
} }
void RenderPassHelper::updateSerial(Serial serial)
{
mSerial = serial;
}
const RenderPassPerfCounters &RenderPassHelper::getPerfCounters() const const RenderPassPerfCounters &RenderPassHelper::getPerfCounters() const
{ {
return mPerfCounters; return mPerfCounters;
...@@ -3154,7 +3145,6 @@ void RenderPassCache::destroy(VkDevice device) ...@@ -3154,7 +3145,6 @@ void RenderPassCache::destroy(VkDevice device)
} }
angle::Result RenderPassCache::addRenderPass(ContextVk *contextVk, angle::Result RenderPassCache::addRenderPass(ContextVk *contextVk,
Serial serial,
const vk::RenderPassDesc &desc, const vk::RenderPassDesc &desc,
vk::RenderPass **renderPassOut) vk::RenderPass **renderPassOut)
{ {
...@@ -3190,20 +3180,18 @@ angle::Result RenderPassCache::addRenderPass(ContextVk *contextVk, ...@@ -3190,20 +3180,18 @@ angle::Result RenderPassCache::addRenderPass(ContextVk *contextVk,
ops.initWithLoadStore(colorIndexVk, imageLayout, imageLayout); ops.initWithLoadStore(colorIndexVk, imageLayout, imageLayout);
} }
return getRenderPassWithOpsImpl(contextVk, serial, desc, ops, false, renderPassOut); return getRenderPassWithOpsImpl(contextVk, desc, ops, false, renderPassOut);
} }
angle::Result RenderPassCache::getRenderPassWithOps(ContextVk *contextVk, angle::Result RenderPassCache::getRenderPassWithOps(ContextVk *contextVk,
Serial serial,
const vk::RenderPassDesc &desc, const vk::RenderPassDesc &desc,
const vk::AttachmentOpsArray &attachmentOps, const vk::AttachmentOpsArray &attachmentOps,
vk::RenderPass **renderPassOut) vk::RenderPass **renderPassOut)
{ {
return getRenderPassWithOpsImpl(contextVk, serial, desc, attachmentOps, true, renderPassOut); return getRenderPassWithOpsImpl(contextVk, desc, attachmentOps, true, renderPassOut);
} }
angle::Result RenderPassCache::getRenderPassWithOpsImpl(ContextVk *contextVk, angle::Result RenderPassCache::getRenderPassWithOpsImpl(ContextVk *contextVk,
Serial serial,
const vk::RenderPassDesc &desc, const vk::RenderPassDesc &desc,
const vk::AttachmentOpsArray &attachmentOps, const vk::AttachmentOpsArray &attachmentOps,
bool updatePerfCounters, bool updatePerfCounters,
...@@ -3217,10 +3205,9 @@ angle::Result RenderPassCache::getRenderPassWithOpsImpl(ContextVk *contextVk, ...@@ -3217,10 +3205,9 @@ angle::Result RenderPassCache::getRenderPassWithOpsImpl(ContextVk *contextVk,
auto innerIt = innerCache.find(attachmentOps); auto innerIt = innerCache.find(attachmentOps);
if (innerIt != innerCache.end()) if (innerIt != innerCache.end())
{ {
// Update the serial before we return.
// TODO(jmadill): Could possibly use an MRU cache here. // TODO(jmadill): Could possibly use an MRU cache here.
vk::GetRenderPassAndUpdateSerial(contextVk, serial, updatePerfCounters, vk::GetRenderPassAndUpdateCounters(contextVk, updatePerfCounters, &innerIt->second,
&innerIt->second, renderPassOut); renderPassOut);
return angle::Result::Continue; return angle::Result::Continue;
} }
} }
...@@ -3235,8 +3222,8 @@ angle::Result RenderPassCache::getRenderPassWithOpsImpl(ContextVk *contextVk, ...@@ -3235,8 +3222,8 @@ angle::Result RenderPassCache::getRenderPassWithOpsImpl(ContextVk *contextVk,
InnerCache &innerCache = outerIt->second; InnerCache &innerCache = outerIt->second;
auto insertPos = innerCache.emplace(attachmentOps, std::move(newRenderPass)); auto insertPos = innerCache.emplace(attachmentOps, std::move(newRenderPass));
vk::GetRenderPassAndUpdateSerial(contextVk, serial, updatePerfCounters, vk::GetRenderPassAndUpdateCounters(contextVk, updatePerfCounters, &insertPos.first->second,
&insertPos.first->second, renderPassOut); renderPassOut);
// TODO(jmadill): Trim cache, and pre-populate with the most common RPs on startup. // TODO(jmadill): Trim cache, and pre-populate with the most common RPs on startup.
return angle::Result::Continue; return angle::Result::Continue;
......
...@@ -1179,14 +1179,11 @@ class RenderPassHelper final : angle::NonCopyable ...@@ -1179,14 +1179,11 @@ class RenderPassHelper final : angle::NonCopyable
const RenderPass &getRenderPass() const; const RenderPass &getRenderPass() const;
RenderPass &getRenderPass(); RenderPass &getRenderPass();
void updateSerial(Serial serial);
const RenderPassPerfCounters &getPerfCounters() const; const RenderPassPerfCounters &getPerfCounters() const;
RenderPassPerfCounters &getPerfCounters(); RenderPassPerfCounters &getPerfCounters();
private: private:
RenderPass mRenderPass; RenderPass mRenderPass;
Serial mSerial;
RenderPassPerfCounters mPerfCounters; RenderPassPerfCounters mPerfCounters;
}; };
} // namespace vk } // namespace vk
...@@ -1273,7 +1270,6 @@ class RenderPassCache final : angle::NonCopyable ...@@ -1273,7 +1270,6 @@ class RenderPassCache final : angle::NonCopyable
void destroy(VkDevice device); void destroy(VkDevice device);
ANGLE_INLINE angle::Result getCompatibleRenderPass(ContextVk *contextVk, ANGLE_INLINE angle::Result getCompatibleRenderPass(ContextVk *contextVk,
Serial serial,
const vk::RenderPassDesc &desc, const vk::RenderPassDesc &desc,
vk::RenderPass **renderPassOut) vk::RenderPass **renderPassOut)
{ {
...@@ -1284,30 +1280,26 @@ class RenderPassCache final : angle::NonCopyable ...@@ -1284,30 +1280,26 @@ class RenderPassCache final : angle::NonCopyable
ASSERT(!innerCache.empty()); ASSERT(!innerCache.empty());
// Find the first element and return it. // Find the first element and return it.
innerCache.begin()->second.updateSerial(serial);
*renderPassOut = &innerCache.begin()->second.getRenderPass(); *renderPassOut = &innerCache.begin()->second.getRenderPass();
return angle::Result::Continue; return angle::Result::Continue;
} }
return addRenderPass(contextVk, serial, desc, renderPassOut); return addRenderPass(contextVk, desc, renderPassOut);
} }
angle::Result getRenderPassWithOps(ContextVk *contextVk, angle::Result getRenderPassWithOps(ContextVk *contextVk,
Serial serial,
const vk::RenderPassDesc &desc, const vk::RenderPassDesc &desc,
const vk::AttachmentOpsArray &attachmentOps, const vk::AttachmentOpsArray &attachmentOps,
vk::RenderPass **renderPassOut); vk::RenderPass **renderPassOut);
private: private:
angle::Result getRenderPassWithOpsImpl(ContextVk *contextVk, angle::Result getRenderPassWithOpsImpl(ContextVk *contextVk,
Serial serial,
const vk::RenderPassDesc &desc, const vk::RenderPassDesc &desc,
const vk::AttachmentOpsArray &attachmentOps, const vk::AttachmentOpsArray &attachmentOps,
bool updatePerfCounters, bool updatePerfCounters,
vk::RenderPass **renderPassOut); vk::RenderPass **renderPassOut);
angle::Result addRenderPass(ContextVk *contextVk, angle::Result addRenderPass(ContextVk *contextVk,
Serial serial,
const vk::RenderPassDesc &desc, const vk::RenderPassDesc &desc,
vk::RenderPass **renderPassOut); vk::RenderPass **renderPassOut);
......
...@@ -2145,7 +2145,6 @@ class ShaderProgramHelper : angle::NonCopyable ...@@ -2145,7 +2145,6 @@ class ShaderProgramHelper : angle::NonCopyable
ContextVk *contextVk, ContextVk *contextVk,
RenderPassCache *renderPassCache, RenderPassCache *renderPassCache,
const PipelineCache &pipelineCache, const PipelineCache &pipelineCache,
Serial currentQueueSerial,
const PipelineLayout &pipelineLayout, const PipelineLayout &pipelineLayout,
const GraphicsPipelineDesc &pipelineDesc, const GraphicsPipelineDesc &pipelineDesc,
const gl::AttributesMask &activeAttribLocationsMask, const gl::AttributesMask &activeAttribLocationsMask,
...@@ -2155,9 +2154,8 @@ class ShaderProgramHelper : angle::NonCopyable ...@@ -2155,9 +2154,8 @@ class ShaderProgramHelper : angle::NonCopyable
{ {
// Pull in a compatible RenderPass. // Pull in a compatible RenderPass.
RenderPass *compatibleRenderPass = nullptr; RenderPass *compatibleRenderPass = nullptr;
ANGLE_TRY(renderPassCache->getCompatibleRenderPass(contextVk, currentQueueSerial, ANGLE_TRY(renderPassCache->getCompatibleRenderPass(
pipelineDesc.getRenderPassDesc(), contextVk, pipelineDesc.getRenderPassDesc(), &compatibleRenderPass));
&compatibleRenderPass));
ShaderModule *vertexShader = &mShaders[gl::ShaderType::Vertex].get().get(); ShaderModule *vertexShader = &mShaders[gl::ShaderType::Vertex].get().get();
ShaderModule *fragmentShader = mShaders[gl::ShaderType::Fragment].valid() ShaderModule *fragmentShader = mShaders[gl::ShaderType::Fragment].valid()
......
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