Commit 9d812d35 by Jamie Madill Committed by Commit Bot

Vulkan: Remove public FramebufferVk::getFramebuffer.

Goal: enable rendering feedback loop detection for Manhattan. Making getFramebuffer private prevents direct access to the Framebuffer internals. Hiding access lets the FramebufferVk class switch up its implementation to support different VkFramebuffers for feedback loop cases. Also this is a general code cleanup. Bug: angleproject:4490 Change-Id: Ib4f5e34d476ccd8fc43a1adb031933ab347ca7b7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2109333Reviewed-by: 's avatarCody Northrop <cnorthrop@google.com> Reviewed-by: 's avatarCourtney Goeltzenleuchter <courtneygo@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
parent bff3b200
...@@ -1221,7 +1221,6 @@ angle::Result ContextVk::handleDirtyComputePipeline(const gl::Context *context, ...@@ -1221,7 +1221,6 @@ angle::Result ContextVk::handleDirtyComputePipeline(const gl::Context *context,
ANGLE_INLINE angle::Result ContextVk::handleDirtyTexturesImpl( ANGLE_INLINE angle::Result ContextVk::handleDirtyTexturesImpl(
const gl::Context *context, const gl::Context *context,
vk::CommandBuffer *commandBuffer, vk::CommandBuffer *commandBuffer,
vk::Resource *recorder,
CommandBufferHelper *commandBufferHelper) CommandBufferHelper *commandBufferHelper)
{ {
const gl::ActiveTextureMask &activeTextures = mProgram->getState().getActiveSamplersMask(); const gl::ActiveTextureMask &activeTextures = mProgram->getState().getActiveSamplersMask();
...@@ -1277,15 +1276,13 @@ ANGLE_INLINE angle::Result ContextVk::handleDirtyTexturesImpl( ...@@ -1277,15 +1276,13 @@ ANGLE_INLINE angle::Result ContextVk::handleDirtyTexturesImpl(
angle::Result ContextVk::handleDirtyGraphicsTextures(const gl::Context *context, angle::Result ContextVk::handleDirtyGraphicsTextures(const gl::Context *context,
vk::CommandBuffer *commandBuffer) vk::CommandBuffer *commandBuffer)
{ {
return handleDirtyTexturesImpl(context, commandBuffer, mDrawFramebuffer->getFramebuffer(), return handleDirtyTexturesImpl(context, commandBuffer, &mRenderPassCommands);
&mRenderPassCommands);
} }
angle::Result ContextVk::handleDirtyComputeTextures(const gl::Context *context, angle::Result ContextVk::handleDirtyComputeTextures(const gl::Context *context,
vk::CommandBuffer *commandBuffer) vk::CommandBuffer *commandBuffer)
{ {
return handleDirtyTexturesImpl(context, commandBuffer, &mDispatcher, return handleDirtyTexturesImpl(context, commandBuffer, &mOutsideRenderPassCommands);
&mOutsideRenderPassCommands);
} }
angle::Result ContextVk::handleDirtyGraphicsVertexBuffers(const gl::Context *context, angle::Result ContextVk::handleDirtyGraphicsVertexBuffers(const gl::Context *context,
...@@ -1334,19 +1331,18 @@ angle::Result ContextVk::handleDirtyGraphicsIndexBuffer(const gl::Context *conte ...@@ -1334,19 +1331,18 @@ angle::Result ContextVk::handleDirtyGraphicsIndexBuffer(const gl::Context *conte
ANGLE_INLINE angle::Result ContextVk::handleDirtyShaderResourcesImpl( ANGLE_INLINE angle::Result ContextVk::handleDirtyShaderResourcesImpl(
const gl::Context *context, const gl::Context *context,
vk::CommandBuffer *commandBuffer, vk::CommandBuffer *commandBuffer,
vk::Resource *recorder,
CommandBufferHelper *commandBufferHelper) CommandBufferHelper *commandBufferHelper)
{ {
if (mProgram->hasImages()) if (mProgram->hasImages())
{ {
ANGLE_TRY(updateActiveImages(context, recorder, commandBufferHelper)); ANGLE_TRY(updateActiveImages(context, commandBufferHelper));
} }
if (mProgram->hasUniformBuffers() || mProgram->hasStorageBuffers() || if (mProgram->hasUniformBuffers() || mProgram->hasStorageBuffers() ||
mProgram->hasAtomicCounterBuffers() || mProgram->hasImages()) mProgram->hasAtomicCounterBuffers() || mProgram->hasImages())
{ {
ANGLE_TRY(mProgram->updateShaderResourcesDescriptorSet(this, &mResourceUseList, ANGLE_TRY(mProgram->updateShaderResourcesDescriptorSet(this, &mResourceUseList,
commandBufferHelper, recorder)); commandBufferHelper));
} }
return angle::Result::Continue; return angle::Result::Continue;
} }
...@@ -1354,15 +1350,13 @@ ANGLE_INLINE angle::Result ContextVk::handleDirtyShaderResourcesImpl( ...@@ -1354,15 +1350,13 @@ ANGLE_INLINE angle::Result ContextVk::handleDirtyShaderResourcesImpl(
angle::Result ContextVk::handleDirtyGraphicsShaderResources(const gl::Context *context, angle::Result ContextVk::handleDirtyGraphicsShaderResources(const gl::Context *context,
vk::CommandBuffer *commandBuffer) vk::CommandBuffer *commandBuffer)
{ {
return handleDirtyShaderResourcesImpl(context, commandBuffer, return handleDirtyShaderResourcesImpl(context, commandBuffer, &mRenderPassCommands);
mDrawFramebuffer->getFramebuffer(), &mRenderPassCommands);
} }
angle::Result ContextVk::handleDirtyComputeShaderResources(const gl::Context *context, angle::Result ContextVk::handleDirtyComputeShaderResources(const gl::Context *context,
vk::CommandBuffer *commandBuffer) vk::CommandBuffer *commandBuffer)
{ {
return handleDirtyShaderResourcesImpl(context, commandBuffer, &mDispatcher, return handleDirtyShaderResourcesImpl(context, commandBuffer, &mOutsideRenderPassCommands);
&mOutsideRenderPassCommands);
} }
angle::Result ContextVk::handleDirtyGraphicsTransformFeedbackBuffersEmulation( angle::Result ContextVk::handleDirtyGraphicsTransformFeedbackBuffersEmulation(
...@@ -1387,8 +1381,7 @@ angle::Result ContextVk::handleDirtyGraphicsTransformFeedbackBuffersEmulation( ...@@ -1387,8 +1381,7 @@ angle::Result ContextVk::handleDirtyGraphicsTransformFeedbackBuffersEmulation(
&mResourceUseList, VK_ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT, &bufferHelper); &mResourceUseList, VK_ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT, &bufferHelper);
} }
ANGLE_TRY(mProgram->updateTransformFeedbackDescriptorSet( ANGLE_TRY(mProgram->updateTransformFeedbackDescriptorSet(this));
this, mDrawFramebuffer->getFramebuffer()));
} }
return angle::Result::Continue; return angle::Result::Continue;
} }
...@@ -3568,7 +3561,6 @@ angle::Result ContextVk::updateActiveTextures(const gl::Context *context) ...@@ -3568,7 +3561,6 @@ angle::Result ContextVk::updateActiveTextures(const gl::Context *context)
} }
angle::Result ContextVk::updateActiveImages(const gl::Context *context, angle::Result ContextVk::updateActiveImages(const gl::Context *context,
vk::Resource *recorder,
CommandBufferHelper *commandBufferHelper) CommandBufferHelper *commandBufferHelper)
{ {
const gl::State &glState = mState; const gl::State &glState = mState;
......
...@@ -808,7 +808,6 @@ class ContextVk : public ContextImpl, public vk::Context ...@@ -808,7 +808,6 @@ class ContextVk : public ContextImpl, public vk::Context
angle::Result updateActiveTextures(const gl::Context *context); angle::Result updateActiveTextures(const gl::Context *context);
angle::Result updateActiveImages(const gl::Context *context, angle::Result updateActiveImages(const gl::Context *context,
vk::Resource *recorder,
CommandBufferHelper *commandBufferHelper); CommandBufferHelper *commandBufferHelper);
angle::Result updateDefaultAttribute(size_t attribIndex); angle::Result updateDefaultAttribute(size_t attribIndex);
...@@ -869,11 +868,9 @@ class ContextVk : public ContextImpl, public vk::Context ...@@ -869,11 +868,9 @@ class ContextVk : public ContextImpl, public vk::Context
// Common parts of the common dirty bit handlers. // Common parts of the common dirty bit handlers.
angle::Result handleDirtyTexturesImpl(const gl::Context *context, angle::Result handleDirtyTexturesImpl(const gl::Context *context,
vk::CommandBuffer *commandBuffer, vk::CommandBuffer *commandBuffer,
vk::Resource *recorder,
CommandBufferHelper *commandBufferHelper); CommandBufferHelper *commandBufferHelper);
angle::Result handleDirtyShaderResourcesImpl(const gl::Context *context, angle::Result handleDirtyShaderResourcesImpl(const gl::Context *context,
vk::CommandBuffer *commandBuffer, vk::CommandBuffer *commandBuffer,
vk::Resource *recorder,
CommandBufferHelper *commandBufferHelper); CommandBufferHelper *commandBufferHelper);
void handleDirtyDriverUniformsBindingImpl(vk::CommandBuffer *commandBuffer, void handleDirtyDriverUniformsBindingImpl(vk::CommandBuffer *commandBuffer,
VkPipelineBindPoint bindPoint, VkPipelineBindPoint bindPoint,
......
...@@ -109,8 +109,6 @@ class FramebufferVk : public FramebufferImpl ...@@ -109,8 +109,6 @@ class FramebufferVk : public FramebufferImpl
RenderTargetVk *getColorDrawRenderTarget(size_t colorIndex) const; RenderTargetVk *getColorDrawRenderTarget(size_t colorIndex) const;
RenderTargetVk *getColorReadRenderTarget() const; RenderTargetVk *getColorReadRenderTarget() const;
vk::FramebufferHelper *getFramebuffer() { return mFramebuffer; }
angle::Result startNewRenderPass(ContextVk *context, angle::Result startNewRenderPass(ContextVk *context,
const gl::Rectangle &renderArea, const gl::Rectangle &renderArea,
vk::CommandBuffer **commandBufferOut); vk::CommandBuffer **commandBufferOut);
......
...@@ -1326,7 +1326,6 @@ void ProgramVk::updateDefaultUniformsDescriptorSet(ContextVk *contextVk) ...@@ -1326,7 +1326,6 @@ void ProgramVk::updateDefaultUniformsDescriptorSet(ContextVk *contextVk)
void ProgramVk::updateBuffersDescriptorSet(ContextVk *contextVk, void ProgramVk::updateBuffersDescriptorSet(ContextVk *contextVk,
vk::ResourceUseList *resourceUseList, vk::ResourceUseList *resourceUseList,
CommandBufferHelper *commandBufferHelper, CommandBufferHelper *commandBufferHelper,
vk::Resource *recorder,
const std::vector<gl::InterfaceBlock> &blocks, const std::vector<gl::InterfaceBlock> &blocks,
VkDescriptorType descriptorType) VkDescriptorType descriptorType)
{ {
...@@ -1411,8 +1410,7 @@ void ProgramVk::updateBuffersDescriptorSet(ContextVk *contextVk, ...@@ -1411,8 +1410,7 @@ void ProgramVk::updateBuffersDescriptorSet(ContextVk *contextVk,
void ProgramVk::updateAtomicCounterBuffersDescriptorSet(ContextVk *contextVk, void ProgramVk::updateAtomicCounterBuffersDescriptorSet(ContextVk *contextVk,
vk::ResourceUseList *resourceUseList, vk::ResourceUseList *resourceUseList,
CommandBufferHelper *commandBufferHelper, CommandBufferHelper *commandBufferHelper)
vk::Resource *recorder)
{ {
const gl::State &glState = contextVk->getState(); const gl::State &glState = contextVk->getState();
const std::vector<gl::AtomicCounterBuffer> &atomicCounterBuffers = const std::vector<gl::AtomicCounterBuffer> &atomicCounterBuffers =
...@@ -1494,7 +1492,7 @@ void ProgramVk::updateAtomicCounterBuffersDescriptorSet(ContextVk *contextVk, ...@@ -1494,7 +1492,7 @@ void ProgramVk::updateAtomicCounterBuffersDescriptorSet(ContextVk *contextVk,
writeDescriptorInfo.data(), 0, nullptr); writeDescriptorInfo.data(), 0, nullptr);
} }
angle::Result ProgramVk::updateImagesDescriptorSet(ContextVk *contextVk, vk::Resource *recorder) angle::Result ProgramVk::updateImagesDescriptorSet(ContextVk *contextVk)
{ {
const gl::State &glState = contextVk->getState(); const gl::State &glState = contextVk->getState();
const std::vector<gl::ImageBinding> &imageBindings = mState.getImageBindings(); const std::vector<gl::ImageBinding> &imageBindings = mState.getImageBindings();
...@@ -1571,22 +1569,19 @@ angle::Result ProgramVk::updateImagesDescriptorSet(ContextVk *contextVk, vk::Res ...@@ -1571,22 +1569,19 @@ angle::Result ProgramVk::updateImagesDescriptorSet(ContextVk *contextVk, vk::Res
angle::Result ProgramVk::updateShaderResourcesDescriptorSet( angle::Result ProgramVk::updateShaderResourcesDescriptorSet(
ContextVk *contextVk, ContextVk *contextVk,
vk::ResourceUseList *resourceUseList, vk::ResourceUseList *resourceUseList,
CommandBufferHelper *commandBufferHelper, CommandBufferHelper *commandBufferHelper)
vk::Resource *recorder)
{ {
ANGLE_TRY(allocateDescriptorSet(contextVk, kShaderResourceDescriptorSetIndex)); ANGLE_TRY(allocateDescriptorSet(contextVk, kShaderResourceDescriptorSetIndex));
updateBuffersDescriptorSet(contextVk, resourceUseList, commandBufferHelper, recorder, updateBuffersDescriptorSet(contextVk, resourceUseList, commandBufferHelper,
mState.getUniformBlocks(), VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER); mState.getUniformBlocks(), VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER);
updateBuffersDescriptorSet(contextVk, resourceUseList, commandBufferHelper, recorder, updateBuffersDescriptorSet(contextVk, resourceUseList, commandBufferHelper,
mState.getShaderStorageBlocks(), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER); mState.getShaderStorageBlocks(), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER);
updateAtomicCounterBuffersDescriptorSet(contextVk, resourceUseList, commandBufferHelper, updateAtomicCounterBuffersDescriptorSet(contextVk, resourceUseList, commandBufferHelper);
recorder); return updateImagesDescriptorSet(contextVk);
return updateImagesDescriptorSet(contextVk, recorder);
} }
angle::Result ProgramVk::updateTransformFeedbackDescriptorSet(ContextVk *contextVk, angle::Result ProgramVk::updateTransformFeedbackDescriptorSet(ContextVk *contextVk)
vk::FramebufferHelper *framebuffer)
{ {
ASSERT(hasTransformFeedbackOutput()); ASSERT(hasTransformFeedbackOutput());
......
...@@ -110,10 +110,8 @@ class ProgramVk : public ProgramImpl ...@@ -110,10 +110,8 @@ class ProgramVk : public ProgramImpl
angle::Result updateTexturesDescriptorSet(ContextVk *contextVk); angle::Result updateTexturesDescriptorSet(ContextVk *contextVk);
angle::Result updateShaderResourcesDescriptorSet(ContextVk *contextVk, angle::Result updateShaderResourcesDescriptorSet(ContextVk *contextVk,
vk::ResourceUseList *resourceUseList, vk::ResourceUseList *resourceUseList,
CommandBufferHelper *commandBufferHelper, CommandBufferHelper *commandBufferHelper);
vk::Resource *recorder); angle::Result updateTransformFeedbackDescriptorSet(ContextVk *contextVk);
angle::Result updateTransformFeedbackDescriptorSet(ContextVk *contextVk,
vk::FramebufferHelper *framebuffer);
angle::Result updateDescriptorSets(ContextVk *contextVk, vk::CommandBuffer *commandBuffer); angle::Result updateDescriptorSets(ContextVk *contextVk, vk::CommandBuffer *commandBuffer);
...@@ -192,14 +190,12 @@ class ProgramVk : public ProgramImpl ...@@ -192,14 +190,12 @@ class ProgramVk : public ProgramImpl
void updateBuffersDescriptorSet(ContextVk *contextVk, void updateBuffersDescriptorSet(ContextVk *contextVk,
vk::ResourceUseList *resourceUseList, vk::ResourceUseList *resourceUseList,
CommandBufferHelper *commandBufferHelper, CommandBufferHelper *commandBufferHelper,
vk::Resource *recorder,
const std::vector<gl::InterfaceBlock> &blocks, const std::vector<gl::InterfaceBlock> &blocks,
VkDescriptorType descriptorType); VkDescriptorType descriptorType);
void updateAtomicCounterBuffersDescriptorSet(ContextVk *contextVk, void updateAtomicCounterBuffersDescriptorSet(ContextVk *contextVk,
vk::ResourceUseList *resourceUseList, vk::ResourceUseList *resourceUseList,
CommandBufferHelper *commandBufferHelper, CommandBufferHelper *commandBufferHelper);
vk::Resource *recorder); angle::Result updateImagesDescriptorSet(ContextVk *contextVk);
angle::Result updateImagesDescriptorSet(ContextVk *contextVk, vk::Resource *recorder);
template <class T> template <class T>
void getUniformImpl(GLint location, T *v, GLenum entryPointType) const; void getUniformImpl(GLint location, T *v, GLenum entryPointType) const;
......
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