Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit eb85c02

Browse files
null77Commit Bot
authored andcommitted
Vulkan: Refactor Context CommandBuffer query.
getOutsideRenderPassCommandBuffer returns the command buffer directly since it's now stateless and cannot throw an error. All the RenderPass begin/end and flushing are done by the dependency functions (buffer/ image read/write). Bug: angleproject:4911 Change-Id: I5e7806be9d0e1b5e358524bd485298d660fac942 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2339544 Commit-Queue: Jamie Madill <[email protected]> Reviewed-by: Courtney Goeltzenleuchter <[email protected]>
1 parent d201ed8 commit eb85c02

File tree

13 files changed

+138
-184
lines changed

13 files changed

+138
-184
lines changed

src/libANGLE/renderer/vulkan/BufferVk.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -274,8 +274,6 @@ angle::Result BufferVk::copySubData(const gl::Context *context,
274274
sourceBuffer.unmap(contextVk->getRenderer());
275275
}
276276

277-
vk::CommandBuffer *commandBuffer = nullptr;
278-
279277
// Check for self-dependency.
280278
if (sourceBuffer.getBufferSerial() == mBuffer->getBufferSerial())
281279
{
@@ -286,14 +284,15 @@ angle::Result BufferVk::copySubData(const gl::Context *context,
286284
ANGLE_TRY(contextVk->onBufferTransferRead(&sourceBuffer));
287285
ANGLE_TRY(contextVk->onBufferTransferWrite(mBuffer));
288286
}
289-
ANGLE_TRY(contextVk->getOutsideRenderPassCommandBuffer(&commandBuffer));
287+
288+
vk::CommandBuffer &commandBuffer = contextVk->getOutsideRenderPassCommandBuffer();
290289

291290
// Enqueue a copy command on the GPU.
292291
const VkBufferCopy copyRegion = {static_cast<VkDeviceSize>(sourceOffset),
293292
static_cast<VkDeviceSize>(destOffset),
294293
static_cast<VkDeviceSize>(size)};
295294

296-
commandBuffer->copyBuffer(sourceBuffer.getBuffer(), mBuffer->getBuffer(), 1, &copyRegion);
295+
commandBuffer.copyBuffer(sourceBuffer.getBuffer(), mBuffer->getBuffer(), 1, &copyRegion);
297296

298297
// The new destination buffer data may require a conversion for the next draw, so mark it dirty.
299298
onDataChanged();
@@ -598,12 +597,13 @@ angle::Result BufferVk::copyToBufferImpl(ContextVk *contextVk,
598597
uint32_t copyCount,
599598
const VkBufferCopy *copies)
600599
{
601-
vk::CommandBuffer *commandBuffer;
600+
602601
ANGLE_TRY(contextVk->onBufferTransferWrite(destBuffer));
603602
ANGLE_TRY(contextVk->onBufferTransferRead(mBuffer));
604-
ANGLE_TRY(contextVk->getOutsideRenderPassCommandBuffer(&commandBuffer));
605603

606-
commandBuffer->copyBuffer(mBuffer->getBuffer(), destBuffer->getBuffer(), copyCount, copies);
604+
vk::CommandBuffer &commandBuffer = contextVk->getOutsideRenderPassCommandBuffer();
605+
606+
commandBuffer.copyBuffer(mBuffer->getBuffer(), destBuffer->getBuffer(), copyCount, copies);
607607

608608
return angle::Result::Continue;
609609
}

src/libANGLE/renderer/vulkan/ContextVk.cpp

Lines changed: 10 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2481,12 +2481,9 @@ angle::Result ContextVk::insertEventMarker(GLsizei length, const char *marker)
24812481
if (!mRenderer->enableDebugUtils())
24822482
return angle::Result::Continue;
24832483

2484-
vk::CommandBuffer *outsideRenderPassCommandBuffer;
2485-
ANGLE_TRY(getOutsideRenderPassCommandBuffer(&outsideRenderPassCommandBuffer));
2486-
24872484
VkDebugUtilsLabelEXT label;
24882485
vk::MakeDebugUtilsLabel(GL_DEBUG_SOURCE_APPLICATION, marker, &label);
2489-
outsideRenderPassCommandBuffer->insertDebugUtilsLabelEXT(label);
2486+
mOutsideRenderPassCommands->getCommandBuffer().insertDebugUtilsLabelEXT(label);
24902487

24912488
return angle::Result::Continue;
24922489
}
@@ -2496,12 +2493,9 @@ angle::Result ContextVk::pushGroupMarker(GLsizei length, const char *marker)
24962493
if (!mRenderer->enableDebugUtils())
24972494
return angle::Result::Continue;
24982495

2499-
vk::CommandBuffer *outsideRenderPassCommandBuffer;
2500-
ANGLE_TRY(getOutsideRenderPassCommandBuffer(&outsideRenderPassCommandBuffer));
2501-
25022496
VkDebugUtilsLabelEXT label;
25032497
vk::MakeDebugUtilsLabel(GL_DEBUG_SOURCE_APPLICATION, marker, &label);
2504-
outsideRenderPassCommandBuffer->beginDebugUtilsLabelEXT(label);
2498+
mOutsideRenderPassCommands->getCommandBuffer().beginDebugUtilsLabelEXT(label);
25052499

25062500
return angle::Result::Continue;
25072501
}
@@ -2511,9 +2505,7 @@ angle::Result ContextVk::popGroupMarker()
25112505
if (!mRenderer->enableDebugUtils())
25122506
return angle::Result::Continue;
25132507

2514-
vk::CommandBuffer *outsideRenderPassCommandBuffer;
2515-
ANGLE_TRY(getOutsideRenderPassCommandBuffer(&outsideRenderPassCommandBuffer));
2516-
outsideRenderPassCommandBuffer->endDebugUtilsLabelEXT();
2508+
mOutsideRenderPassCommands->getCommandBuffer().endDebugUtilsLabelEXT();
25172509

25182510
return angle::Result::Continue;
25192511
}
@@ -2526,12 +2518,9 @@ angle::Result ContextVk::pushDebugGroup(const gl::Context *context,
25262518
if (!mRenderer->enableDebugUtils())
25272519
return angle::Result::Continue;
25282520

2529-
vk::CommandBuffer *outsideRenderPassCommandBuffer;
2530-
ANGLE_TRY(getOutsideRenderPassCommandBuffer(&outsideRenderPassCommandBuffer));
2531-
25322521
VkDebugUtilsLabelEXT label;
25332522
vk::MakeDebugUtilsLabel(source, message.c_str(), &label);
2534-
outsideRenderPassCommandBuffer->beginDebugUtilsLabelEXT(label);
2523+
mOutsideRenderPassCommands->getCommandBuffer().beginDebugUtilsLabelEXT(label);
25352524

25362525
return angle::Result::Continue;
25372526
}
@@ -2541,9 +2530,7 @@ angle::Result ContextVk::popDebugGroup(const gl::Context *context)
25412530
if (!mRenderer->enableDebugUtils())
25422531
return angle::Result::Continue;
25432532

2544-
vk::CommandBuffer *outsideRenderPassCommandBuffer;
2545-
ANGLE_TRY(getOutsideRenderPassCommandBuffer(&outsideRenderPassCommandBuffer));
2546-
outsideRenderPassCommandBuffer->endDebugUtilsLabelEXT();
2533+
mOutsideRenderPassCommands->getCommandBuffer().endDebugUtilsLabelEXT();
25472534

25482535
return angle::Result::Continue;
25492536
}
@@ -4379,9 +4366,8 @@ angle::Result ContextVk::onImageRead(VkImageAspectFlags aspectFlags,
43794366

43804367
if (image->isLayoutChangeNecessary(imageLayout))
43814368
{
4382-
vk::CommandBuffer *commandBuffer;
4383-
ANGLE_TRY(getOutsideRenderPassCommandBuffer(&commandBuffer));
4384-
image->changeLayout(aspectFlags, imageLayout, commandBuffer);
4369+
image->changeLayout(aspectFlags, imageLayout,
4370+
&mOutsideRenderPassCommands->getCommandBuffer());
43854371
}
43864372
image->retain(&mResourceUseList);
43874373
return angle::Result::Continue;
@@ -4399,10 +4385,7 @@ angle::Result ContextVk::onImageWrite(VkImageAspectFlags aspectFlags,
43994385

44004386
ANGLE_TRY(endRenderPassIfImageUsed(*image));
44014387

4402-
vk::CommandBuffer *commandBuffer;
4403-
ANGLE_TRY(getOutsideRenderPassCommandBuffer(&commandBuffer));
4404-
4405-
image->changeLayout(aspectFlags, imageLayout, commandBuffer);
4388+
image->changeLayout(aspectFlags, imageLayout, &mOutsideRenderPassCommands->getCommandBuffer());
44064389
image->retain(&mResourceUseList);
44074390
image->onWrite();
44084391

@@ -4564,16 +4547,13 @@ void ContextVk::recycleCommandBuffer(vk::CommandBufferHelper *commandBuffer)
45644547

45654548
angle::Result ContextVk::syncExternalMemory()
45664549
{
4567-
vk::CommandBuffer *commandBuffer;
4568-
ANGLE_TRY(getOutsideRenderPassCommandBuffer(&commandBuffer));
4569-
45704550
VkMemoryBarrier memoryBarrier = {};
45714551
memoryBarrier.sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER;
45724552
memoryBarrier.srcAccessMask = VK_ACCESS_MEMORY_WRITE_BIT;
45734553
memoryBarrier.dstAccessMask = VK_ACCESS_MEMORY_READ_BIT | VK_ACCESS_MEMORY_WRITE_BIT;
45744554

4575-
commandBuffer->memoryBarrier(VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,
4576-
VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, &memoryBarrier);
4555+
mOutsideRenderPassCommands->getCommandBuffer().memoryBarrier(
4556+
VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, &memoryBarrier);
45774557
return angle::Result::Continue;
45784558
}
45794559

src/libANGLE/renderer/vulkan/ContextVk.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -537,10 +537,9 @@ class ContextVk : public ContextImpl, public vk::Context
537537
vk::AliasingMode::Allowed, image);
538538
}
539539

540-
angle::Result getOutsideRenderPassCommandBuffer(vk::CommandBuffer **commandBufferOut)
540+
vk::CommandBuffer &getOutsideRenderPassCommandBuffer()
541541
{
542-
*commandBufferOut = &mOutsideRenderPassCommands->getCommandBuffer();
543-
return angle::Result::Continue;
542+
return mOutsideRenderPassCommands->getCommandBuffer();
544543
}
545544

546545
angle::Result beginNewRenderPass(const vk::Framebuffer &framebuffer,

src/libANGLE/renderer/vulkan/FramebufferVk.cpp

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -418,9 +418,8 @@ angle::Result FramebufferVk::clearImpl(const gl::Context *context,
418418
RenderTargetVk *depthStencilRT = mRenderTargetCache.getDepthStencil(true);
419419
vk::ImageHelper *image = &depthStencilRT->getImageForWrite();
420420

421-
vk::CommandBuffer *commandBuffer;
422421
ANGLE_TRY(contextVk->onImageTransferWrite(image->getAspectFlags(), image));
423-
ANGLE_TRY(contextVk->getOutsideRenderPassCommandBuffer(&commandBuffer));
422+
vk::CommandBuffer &commandBuffer = contextVk->getOutsideRenderPassCommandBuffer();
424423

425424
VkImageSubresourceRange range;
426425
range.aspectMask = image->getAspectFlags();
@@ -429,9 +428,9 @@ angle::Result FramebufferVk::clearImpl(const gl::Context *context,
429428
range.baseArrayLayer = depthStencilRT->getLayerIndex();
430429
range.layerCount = 1;
431430

432-
commandBuffer->clearDepthStencilImage(image->getImage(),
433-
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
434-
clearDepthStencilValue, 1, &range);
431+
commandBuffer.clearDepthStencilImage(image->getImage(),
432+
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
433+
clearDepthStencilValue, 1, &range);
435434
clearDepth = false;
436435
clearStencil = false;
437436
}
@@ -784,10 +783,9 @@ angle::Result FramebufferVk::blitWithCommand(ContextVk *contextVk,
784783
blitAspectMask &= ~VK_IMAGE_ASPECT_STENCIL_BIT;
785784
}
786785

787-
vk::CommandBuffer *commandBuffer = nullptr;
788786
ANGLE_TRY(contextVk->onImageTransferRead(imageAspectMask, srcImage));
789787
ANGLE_TRY(contextVk->onImageTransferWrite(imageAspectMask, dstImage));
790-
ANGLE_TRY(contextVk->getOutsideRenderPassCommandBuffer(&commandBuffer));
788+
vk::CommandBuffer &commandBuffer = contextVk->getOutsideRenderPassCommandBuffer();
791789

792790
VkImageBlit blit = {};
793791
blit.srcSubresource.aspectMask = blitAspectMask;
@@ -803,9 +801,9 @@ angle::Result FramebufferVk::blitWithCommand(ContextVk *contextVk,
803801
blit.dstOffsets[0] = {destArea.x0(), destArea.y0(), 0};
804802
blit.dstOffsets[1] = {destArea.x1(), destArea.y1(), 1};
805803

806-
commandBuffer->blitImage(srcImage->getImage(), VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
807-
dstImage->getImage(), VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &blit,
808-
gl_vk::GetFilter(filter));
804+
commandBuffer.blitImage(srcImage->getImage(), VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
805+
dstImage->getImage(), VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &blit,
806+
gl_vk::GetFilter(filter));
809807

810808
return angle::Result::Continue;
811809
}
@@ -1192,7 +1190,6 @@ angle::Result FramebufferVk::resolveColorWithCommand(ContextVk *contextVk,
11921190
const UtilsVk::BlitResolveParameters &params,
11931191
vk::ImageHelper *srcImage)
11941192
{
1195-
vk::CommandBuffer *commandBuffer = nullptr;
11961193
ANGLE_TRY(contextVk->onImageTransferRead(VK_IMAGE_ASPECT_COLOR_BIT, srcImage));
11971194

11981195
VkImageResolve resolveRegion = {};
@@ -1217,14 +1214,15 @@ angle::Result FramebufferVk::resolveColorWithCommand(ContextVk *contextVk,
12171214
RenderTargetVk *drawRenderTarget = mRenderTargetCache.getColors()[colorIndexGL];
12181215
ANGLE_TRY(contextVk->onImageTransferWrite(VK_IMAGE_ASPECT_COLOR_BIT,
12191216
&drawRenderTarget->getImageForWrite()));
1220-
ANGLE_TRY(contextVk->getOutsideRenderPassCommandBuffer(&commandBuffer));
1217+
1218+
vk::CommandBuffer &commandBuffer = contextVk->getOutsideRenderPassCommandBuffer();
12211219

12221220
vk::ImageHelper &dstImage = drawRenderTarget->getImageForWrite();
12231221
uint32_t levelVK = drawRenderTarget->getLevelIndex() - dstImage.getBaseLevel();
12241222
resolveRegion.dstSubresource.mipLevel = levelVK;
12251223
resolveRegion.dstSubresource.baseArrayLayer = drawRenderTarget->getLayerIndex();
12261224

1227-
srcImage->resolve(&dstImage, resolveRegion, commandBuffer);
1225+
srcImage->resolve(&dstImage, resolveRegion, &commandBuffer);
12281226
}
12291227

12301228
return angle::Result::Continue;

src/libANGLE/renderer/vulkan/OverlayVk.cpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -121,10 +121,9 @@ angle::Result OverlayVk::createFont(ContextVk *contextVk)
121121
&mFontImageView, 0, 1));
122122

123123
// Copy font data from staging buffer.
124-
vk::CommandBuffer *fontDataUpload;
125124
ANGLE_TRY(contextVk->onBufferTransferRead(&fontDataBuffer.get()));
126125
ANGLE_TRY(contextVk->onImageTransferWrite(VK_IMAGE_ASPECT_COLOR_BIT, &mFontImage));
127-
ANGLE_TRY(contextVk->getOutsideRenderPassCommandBuffer(&fontDataUpload));
126+
vk::CommandBuffer &fontDataUpload = contextVk->getOutsideRenderPassCommandBuffer();
128127

129128
VkBufferImageCopy copy = {};
130129
copy.bufferRowLength = gl::overlay::kFontImageWidth;
@@ -135,9 +134,9 @@ angle::Result OverlayVk::createFont(ContextVk *contextVk)
135134
copy.imageExtent.height = gl::overlay::kFontImageHeight;
136135
copy.imageExtent.depth = 1;
137136

138-
fontDataUpload->copyBufferToImage(fontDataBuffer.get().getBuffer().getHandle(),
139-
mFontImage.getImage(), VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
140-
1, &copy);
137+
fontDataUpload.copyBufferToImage(fontDataBuffer.get().getBuffer().getHandle(),
138+
mFontImage.getImage(), VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1,
139+
&copy);
141140

142141
return angle::Result::Continue;
143142
}

src/libANGLE/renderer/vulkan/RenderTargetVk.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -277,10 +277,9 @@ angle::Result RenderTargetVk::flushStagedUpdates(ContextVk *contextVk,
277277
return angle::Result::Continue;
278278
}
279279

280-
vk::CommandBuffer *commandBuffer;
281-
ANGLE_TRY(contextVk->getOutsideRenderPassCommandBuffer(&commandBuffer));
280+
vk::CommandBuffer &commandBuffer = contextVk->getOutsideRenderPassCommandBuffer();
282281
return image->flushSingleSubresourceStagedUpdates(
283-
contextVk, mLevelIndexGL, layerIndex, commandBuffer, deferredClears, deferredClearIndex);
282+
contextVk, mLevelIndexGL, layerIndex, &commandBuffer, deferredClears, deferredClearIndex);
284283
}
285284

286285
void RenderTargetVk::retainImageViews(ContextVk *contextVk) const

src/libANGLE/renderer/vulkan/RenderbufferVk.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -139,10 +139,9 @@ angle::Result RenderbufferVk::setStorageEGLImageTarget(const gl::Context *contex
139139
uint32_t rendererQueueFamilyIndex = contextVk->getRenderer()->getQueueFamilyIndex();
140140
if (mImage->isQueueChangeNeccesary(rendererQueueFamilyIndex))
141141
{
142-
vk::CommandBuffer *commandBuffer = nullptr;
143-
ANGLE_TRY(contextVk->getOutsideRenderPassCommandBuffer(&commandBuffer));
142+
vk::CommandBuffer &commandBuffer = contextVk->getOutsideRenderPassCommandBuffer();
144143
mImage->changeLayoutAndQueue(aspect, vk::ImageLayout::ColorAttachment,
145-
rendererQueueFamilyIndex, commandBuffer);
144+
rendererQueueFamilyIndex, &commandBuffer);
146145
}
147146

148147
gl::TextureType viewType = imageVk->getImageTextureType();

src/libANGLE/renderer/vulkan/SemaphoreVk.cpp

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -117,12 +117,11 @@ angle::Result SemaphoreVk::wait(gl::Context *context,
117117
BufferVk *bufferVk = vk::GetImpl(buffer);
118118
vk::BufferHelper &bufferHelper = bufferVk->getBuffer();
119119

120-
vk::CommandBuffer *commandBuffer;
121-
ANGLE_TRY(contextVk->getOutsideRenderPassCommandBuffer(&commandBuffer));
120+
vk::CommandBuffer &commandBuffer = contextVk->getOutsideRenderPassCommandBuffer();
122121

123122
// Queue ownership transfer.
124123
bufferHelper.acquireFromExternal(contextVk, VK_QUEUE_FAMILY_EXTERNAL,
125-
rendererQueueFamilyIndex, commandBuffer);
124+
rendererQueueFamilyIndex, &commandBuffer);
126125
}
127126
}
128127

@@ -137,15 +136,14 @@ angle::Result SemaphoreVk::wait(gl::Context *context,
137136
vk::ImageHelper &image = textureVk->getImage();
138137
vk::ImageLayout layout = GetVulkanImageLayout(textureAndLayout.layout);
139138

140-
vk::CommandBuffer *commandBuffer;
141-
ANGLE_TRY(contextVk->getOutsideRenderPassCommandBuffer(&commandBuffer));
139+
vk::CommandBuffer &commandBuffer = contextVk->getOutsideRenderPassCommandBuffer();
142140

143141
// Image should not be accessed while unowned.
144142
ASSERT(!textureVk->getImage().hasStagedUpdates());
145143

146144
// Queue ownership transfer and layout transition.
147145
image.acquireFromExternal(contextVk, VK_QUEUE_FAMILY_EXTERNAL, rendererQueueFamilyIndex,
148-
layout, commandBuffer);
146+
layout, &commandBuffer);
149147
}
150148
}
151149

@@ -169,12 +167,11 @@ angle::Result SemaphoreVk::signal(gl::Context *context,
169167
BufferVk *bufferVk = vk::GetImpl(buffer);
170168
vk::BufferHelper &bufferHelper = bufferVk->getBuffer();
171169

172-
vk::CommandBuffer *commandBuffer;
173-
ANGLE_TRY(contextVk->getOutsideRenderPassCommandBuffer(&commandBuffer));
170+
vk::CommandBuffer &commandBuffer = contextVk->getOutsideRenderPassCommandBuffer();
174171

175172
// Queue ownership transfer.
176173
bufferHelper.releaseToExternal(contextVk, rendererQueueFamilyIndex,
177-
VK_QUEUE_FAMILY_EXTERNAL, commandBuffer);
174+
VK_QUEUE_FAMILY_EXTERNAL, &commandBuffer);
178175
}
179176
}
180177

@@ -198,12 +195,11 @@ angle::Result SemaphoreVk::signal(gl::Context *context,
198195

199196
ANGLE_TRY(textureVk->ensureImageInitialized(contextVk, ImageMipLevels::EnabledLevels));
200197

201-
vk::CommandBuffer *commandBuffer;
202-
ANGLE_TRY(contextVk->getOutsideRenderPassCommandBuffer(&commandBuffer));
198+
vk::CommandBuffer &commandBuffer = contextVk->getOutsideRenderPassCommandBuffer();
203199

204200
// Queue ownership transfer and layout transition.
205201
image.releaseToExternal(contextVk, rendererQueueFamilyIndex, VK_QUEUE_FAMILY_EXTERNAL,
206-
layout, commandBuffer);
202+
layout, &commandBuffer);
207203
}
208204
}
209205

src/libANGLE/renderer/vulkan/SurfaceVk.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1167,15 +1167,14 @@ angle::Result WindowSurfaceVk::present(ContextVk *contextVk,
11671167
contextVk->optimizeRenderPassForPresent(currentFramebuffer.getHandle());
11681168
}
11691169

1170-
vk::CommandBuffer *commandBuffer = nullptr;
1171-
ANGLE_TRY(contextVk->getOutsideRenderPassCommandBuffer(&commandBuffer));
1170+
vk::CommandBuffer *commandBuffer = &contextVk->getOutsideRenderPassCommandBuffer();
11721171

11731172
if (mColorImageMS.valid())
11741173
{
11751174
// Transition the multisampled image to TRANSFER_SRC for resolve.
11761175
ANGLE_TRY(contextVk->onImageTransferRead(VK_IMAGE_ASPECT_COLOR_BIT, &mColorImageMS));
11771176
ANGLE_TRY(contextVk->onImageTransferWrite(VK_IMAGE_ASPECT_COLOR_BIT, &image.image));
1178-
ANGLE_TRY(contextVk->getOutsideRenderPassCommandBuffer(&commandBuffer));
1177+
commandBuffer = &contextVk->getOutsideRenderPassCommandBuffer();
11791178

11801179
VkImageResolve resolveRegion = {};
11811180
resolveRegion.srcSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;

src/libANGLE/renderer/vulkan/SyncVk.cpp

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,8 @@ angle::Result SyncHelper::initialize(ContextVk *contextVk)
5252

5353
mEvent = event.release();
5454

55-
vk::CommandBuffer *outsideRenderPassCommandBuffer;
56-
ANGLE_TRY(contextVk->getOutsideRenderPassCommandBuffer(&outsideRenderPassCommandBuffer));
57-
outsideRenderPassCommandBuffer->setEvent(mEvent.getHandle(),
58-
VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT);
55+
vk::CommandBuffer &commandBuffer = contextVk->getOutsideRenderPassCommandBuffer();
56+
commandBuffer.setEvent(mEvent.getHandle(), VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT);
5957
retain(&contextVk->getResourceUseList());
6058

6159
return angle::Result::Continue;
@@ -107,11 +105,10 @@ angle::Result SyncHelper::clientWait(Context *context,
107105

108106
angle::Result SyncHelper::serverWait(ContextVk *contextVk)
109107
{
110-
vk::CommandBuffer *outsideRenderPassCommandBuffer;
111-
ANGLE_TRY(contextVk->getOutsideRenderPassCommandBuffer(&outsideRenderPassCommandBuffer));
112-
outsideRenderPassCommandBuffer->waitEvents(
113-
1, mEvent.ptr(), VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,
114-
0, nullptr, 0, nullptr, 0, nullptr);
108+
vk::CommandBuffer &commandBuffer = contextVk->getOutsideRenderPassCommandBuffer();
109+
commandBuffer.waitEvents(1, mEvent.ptr(), VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,
110+
VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, 0, nullptr, 0, nullptr, 0,
111+
nullptr);
115112
retain(&contextVk->getResourceUseList());
116113
return angle::Result::Continue;
117114
}

0 commit comments

Comments
 (0)