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)
angle::Result ContextVk::getCompatibleRenderPass(const vk::RenderPassDesc &desc,
vk::RenderPass **renderPassOut)
{
return mRenderPassCache.getCompatibleRenderPass(this, getCurrentQueueSerial(), desc,
renderPassOut);
return mRenderPassCache.getCompatibleRenderPass(this, desc, renderPassOut);
}
angle::Result ContextVk::getRenderPassWithOps(const vk::RenderPassDesc &desc,
const vk::AttachmentOpsArray &ops,
vk::RenderPass **renderPassOut)
{
return mRenderPassCache.getRenderPassWithOps(this, getCurrentQueueSerial(), desc, ops,
renderPassOut);
return mRenderPassCache.getRenderPassWithOps(this, desc, ops, renderPassOut);
}
angle::Result ContextVk::ensureSubmitFenceInitialized()
......
......@@ -662,9 +662,9 @@ angle::Result ProgramExecutableVk::getGraphicsPipeline(
ASSERT(shaderProgram);
ANGLE_TRY(renderer->getPipelineCache(&pipelineCache));
return shaderProgram->getGraphicsPipeline(
contextVk, &contextVk->getRenderPassCache(), *pipelineCache,
contextVk->getCurrentQueueSerial(), getPipelineLayout(), desc, activeAttribLocations,
glState.getProgramExecutable()->getAttributesTypeMask(), descPtrOut, pipelineOut);
contextVk, &contextVk->getRenderPassCache(), *pipelineCache, getPipelineLayout(), desc,
activeAttribLocations, glState.getProgramExecutable()->getAttributesTypeMask(), descPtrOut,
pipelineOut);
}
angle::Result ProgramExecutableVk::getComputePipeline(ContextVk *contextVk,
......
......@@ -985,10 +985,9 @@ angle::Result UtilsVk::setupProgram(ContextVk *contextVk,
vk::PipelineHelper *helper;
vk::PipelineCache *pipelineCache = nullptr;
ANGLE_TRY(renderer->getPipelineCache(&pipelineCache));
ANGLE_TRY(program->getGraphicsPipeline(contextVk, &contextVk->getRenderPassCache(),
*pipelineCache, serial, pipelineLayout.get(),
*pipelineDesc, gl::AttributesMask(),
gl::ComponentTypeMask(), &descPtr, &helper));
ANGLE_TRY(program->getGraphicsPipeline(
contextVk, &contextVk->getRenderPassCache(), *pipelineCache, pipelineLayout.get(),
*pipelineDesc, gl::AttributesMask(), gl::ComponentTypeMask(), &descPtr, &helper));
helper->updateSerial(serial);
commandBuffer->bindGraphicsPipeline(helper->getPipeline());
}
......
......@@ -1156,13 +1156,11 @@ angle::Result InitializeRenderPassFromDesc(ContextVk *contextVk,
return angle::Result::Continue;
}
void GetRenderPassAndUpdateSerial(ContextVk *contextVk,
Serial serial,
bool updatePerfCounters,
vk::RenderPassHelper *renderPassHelper,
vk::RenderPass **renderPassOut)
void GetRenderPassAndUpdateCounters(ContextVk *contextVk,
bool updatePerfCounters,
vk::RenderPassHelper *renderPassHelper,
vk::RenderPass **renderPassOut)
{
renderPassHelper->updateSerial(serial);
*renderPassOut = &renderPassHelper->getRenderPass();
if (updatePerfCounters)
{
......@@ -3096,7 +3094,6 @@ RenderPassHelper::RenderPassHelper(RenderPassHelper &&other)
RenderPassHelper &RenderPassHelper::operator=(RenderPassHelper &&other)
{
mRenderPass = std::move(other.mRenderPass);
mSerial = std::move(other.mSerial);
mPerfCounters = std::move(other.mPerfCounters);
return *this;
}
......@@ -3104,7 +3101,6 @@ RenderPassHelper &RenderPassHelper::operator=(RenderPassHelper &&other)
void RenderPassHelper::destroy(VkDevice device)
{
mRenderPass.destroy(device);
mSerial = Serial();
}
const RenderPass &RenderPassHelper::getRenderPass() const
......@@ -3117,11 +3113,6 @@ RenderPass &RenderPassHelper::getRenderPass()
return mRenderPass;
}
void RenderPassHelper::updateSerial(Serial serial)
{
mSerial = serial;
}
const RenderPassPerfCounters &RenderPassHelper::getPerfCounters() const
{
return mPerfCounters;
......@@ -3154,7 +3145,6 @@ void RenderPassCache::destroy(VkDevice device)
}
angle::Result RenderPassCache::addRenderPass(ContextVk *contextVk,
Serial serial,
const vk::RenderPassDesc &desc,
vk::RenderPass **renderPassOut)
{
......@@ -3190,20 +3180,18 @@ angle::Result RenderPassCache::addRenderPass(ContextVk *contextVk,
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,
Serial serial,
const vk::RenderPassDesc &desc,
const vk::AttachmentOpsArray &attachmentOps,
vk::RenderPass **renderPassOut)
{
return getRenderPassWithOpsImpl(contextVk, serial, desc, attachmentOps, true, renderPassOut);
return getRenderPassWithOpsImpl(contextVk, desc, attachmentOps, true, renderPassOut);
}
angle::Result RenderPassCache::getRenderPassWithOpsImpl(ContextVk *contextVk,
Serial serial,
const vk::RenderPassDesc &desc,
const vk::AttachmentOpsArray &attachmentOps,
bool updatePerfCounters,
......@@ -3217,10 +3205,9 @@ angle::Result RenderPassCache::getRenderPassWithOpsImpl(ContextVk *contextVk,
auto innerIt = innerCache.find(attachmentOps);
if (innerIt != innerCache.end())
{
// Update the serial before we return.
// TODO(jmadill): Could possibly use an MRU cache here.
vk::GetRenderPassAndUpdateSerial(contextVk, serial, updatePerfCounters,
&innerIt->second, renderPassOut);
vk::GetRenderPassAndUpdateCounters(contextVk, updatePerfCounters, &innerIt->second,
renderPassOut);
return angle::Result::Continue;
}
}
......@@ -3235,8 +3222,8 @@ angle::Result RenderPassCache::getRenderPassWithOpsImpl(ContextVk *contextVk,
InnerCache &innerCache = outerIt->second;
auto insertPos = innerCache.emplace(attachmentOps, std::move(newRenderPass));
vk::GetRenderPassAndUpdateSerial(contextVk, serial, updatePerfCounters,
&insertPos.first->second, renderPassOut);
vk::GetRenderPassAndUpdateCounters(contextVk, updatePerfCounters, &insertPos.first->second,
renderPassOut);
// TODO(jmadill): Trim cache, and pre-populate with the most common RPs on startup.
return angle::Result::Continue;
......
......@@ -1179,14 +1179,11 @@ class RenderPassHelper final : angle::NonCopyable
const RenderPass &getRenderPass() const;
RenderPass &getRenderPass();
void updateSerial(Serial serial);
const RenderPassPerfCounters &getPerfCounters() const;
RenderPassPerfCounters &getPerfCounters();
private:
RenderPass mRenderPass;
Serial mSerial;
RenderPassPerfCounters mPerfCounters;
};
} // namespace vk
......@@ -1273,7 +1270,6 @@ class RenderPassCache final : angle::NonCopyable
void destroy(VkDevice device);
ANGLE_INLINE angle::Result getCompatibleRenderPass(ContextVk *contextVk,
Serial serial,
const vk::RenderPassDesc &desc,
vk::RenderPass **renderPassOut)
{
......@@ -1284,30 +1280,26 @@ class RenderPassCache final : angle::NonCopyable
ASSERT(!innerCache.empty());
// Find the first element and return it.
innerCache.begin()->second.updateSerial(serial);
*renderPassOut = &innerCache.begin()->second.getRenderPass();
return angle::Result::Continue;
}
return addRenderPass(contextVk, serial, desc, renderPassOut);
return addRenderPass(contextVk, desc, renderPassOut);
}
angle::Result getRenderPassWithOps(ContextVk *contextVk,
Serial serial,
const vk::RenderPassDesc &desc,
const vk::AttachmentOpsArray &attachmentOps,
vk::RenderPass **renderPassOut);
private:
angle::Result getRenderPassWithOpsImpl(ContextVk *contextVk,
Serial serial,
const vk::RenderPassDesc &desc,
const vk::AttachmentOpsArray &attachmentOps,
bool updatePerfCounters,
vk::RenderPass **renderPassOut);
angle::Result addRenderPass(ContextVk *contextVk,
Serial serial,
const vk::RenderPassDesc &desc,
vk::RenderPass **renderPassOut);
......
......@@ -2145,7 +2145,6 @@ class ShaderProgramHelper : angle::NonCopyable
ContextVk *contextVk,
RenderPassCache *renderPassCache,
const PipelineCache &pipelineCache,
Serial currentQueueSerial,
const PipelineLayout &pipelineLayout,
const GraphicsPipelineDesc &pipelineDesc,
const gl::AttributesMask &activeAttribLocationsMask,
......@@ -2155,9 +2154,8 @@ class ShaderProgramHelper : angle::NonCopyable
{
// Pull in a compatible RenderPass.
RenderPass *compatibleRenderPass = nullptr;
ANGLE_TRY(renderPassCache->getCompatibleRenderPass(contextVk, currentQueueSerial,
pipelineDesc.getRenderPassDesc(),
&compatibleRenderPass));
ANGLE_TRY(renderPassCache->getCompatibleRenderPass(
contextVk, pipelineDesc.getRenderPassDesc(), &compatibleRenderPass));
ShaderModule *vertexShader = &mShaders[gl::ShaderType::Vertex].get().get();
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