@@ -403,6 +403,7 @@ angle::Result TextureVk::copySubImageImpl(const gl::Context *context,
403403
404404 const vk::ImageView *readImageView = nullptr ;
405405 ANGLE_TRY (colorReadRT->getImageView (contextVk, &readImageView));
406+ colorReadRT->onImageViewGraphAccess (contextVk);
406407
407408 return copySubImageImplWithDraw (contextVk, offsetImageIndex, modifiedDestOffset, destFormat,
408409 0 , clippedSourceArea, isViewportFlipY, false , false , false ,
@@ -452,10 +453,10 @@ angle::Result TextureVk::copySubTextureImpl(ContextVk *contextVk,
452453 // If it's possible to perform the copy with a draw call, do that.
453454 if (CanCopyWithDraw (renderer, sourceVkFormat, destVkFormat) && !forceCPUPath)
454455 {
455- return copySubImageImplWithDraw (contextVk, offsetImageIndex, destOffset, destVkFormat,
456- sourceLevel, sourceArea, false , unpackFlipY ,
457- unpackPremultiplyAlpha, unpackUnmultiplyAlpha,
458- &source->getImage (), &source-> getFetchImageView ( ));
456+ return copySubImageImplWithDraw (
457+ contextVk, offsetImageIndex, destOffset, destVkFormat, sourceLevel, sourceArea, false ,
458+ unpackFlipY, unpackPremultiplyAlpha, unpackUnmultiplyAlpha, &source-> getImage () ,
459+ &source->getFetchImageViewAndRecordUse (contextVk ));
459460 }
460461
461462 if (sourceLevel != 0 )
@@ -1362,7 +1363,7 @@ angle::Result TextureVk::syncState(const gl::Context *context,
13621363 uint32_t layerCount =
13631364 mState .getType () == gl::TextureType::_2D ? 1 : mImage ->getLayerCount ();
13641365
1365- mImageViews .release (contextVk);
1366+ mImageViews .release (contextVk-> getRenderer () );
13661367 const gl::ImageDesc &baseLevelDesc = mState .getBaseLevelDesc ();
13671368
13681369 ANGLE_TRY (initImageViews (contextVk, mImage ->getFormat (),
@@ -1457,30 +1458,33 @@ void TextureVk::releaseOwnershipOfImage(const gl::Context *context)
14571458 releaseAndDeleteImage (contextVk);
14581459}
14591460
1460- const vk::ImageView &TextureVk::getReadImageView ( ) const
1461+ const vk::ImageView &TextureVk::getReadImageViewAndRecordUse (ContextVk *contextVk ) const
14611462{
14621463 ASSERT (mImage ->valid ());
14631464
1464- if (mState .isStencilMode () && mImageViews .getStencilReadImageView ().valid ())
1465+ mImageViews .onGraphAccess (contextVk->getCommandGraph ());
1466+
1467+ if (mState .isStencilMode () && mImageViews .hasStencilReadImageView ())
14651468 {
14661469 return mImageViews .getStencilReadImageView ();
14671470 }
14681471
14691472 return mImageViews .getReadImageView ();
14701473}
14711474
1472- const vk::ImageView &TextureVk::getFetchImageView ( ) const
1475+ const vk::ImageView &TextureVk::getFetchImageViewAndRecordUse (ContextVk *contextVk ) const
14731476{
14741477 ASSERT (mImage ->valid ());
14751478
1479+ mImageViews .onGraphAccess (contextVk->getCommandGraph ());
1480+
14761481 // We don't currently support fetch for depth/stencil cube map textures.
1477- ASSERT (!mImageViews .getStencilReadImageView ().valid () ||
1478- !mImageViews .getFetchImageView ().valid ());
1479- return (mImageViews .getFetchImageView ().valid () ? mImageViews .getFetchImageView ()
1480- : mImageViews .getReadImageView ());
1482+ ASSERT (!mImageViews .hasStencilReadImageView () || !mImageViews .hasFetchImageView ());
1483+ return (mImageViews .hasFetchImageView () ? mImageViews .getFetchImageView ()
1484+ : mImageViews .getReadImageView ());
14811485}
14821486
1483- angle::Result TextureVk::getLevelLayerImageView (vk::Context *context ,
1487+ angle::Result TextureVk::getLevelLayerImageView (ContextVk *contextVk ,
14841488 size_t level,
14851489 size_t layer,
14861490 const vk::ImageView **imageViewOut)
@@ -1490,7 +1494,7 @@ angle::Result TextureVk::getLevelLayerImageView(vk::Context *context,
14901494 uint32_t nativeLevel = getNativeImageLevel (static_cast <uint32_t >(level));
14911495 uint32_t nativeLayer = getNativeImageLayer (static_cast <uint32_t >(layer));
14921496
1493- return mImageViews .getLevelLayerDrawImageView (context , *mImage , nativeLevel, nativeLayer,
1497+ return mImageViews .getLevelLayerDrawImageView (contextVk , *mImage , nativeLevel, nativeLayer,
14941498 imageViewOut);
14951499}
14961500
@@ -1602,19 +1606,21 @@ angle::Result TextureVk::initImageViews(ContextVk *contextVk,
16021606
16031607void TextureVk::releaseImage (ContextVk *contextVk)
16041608{
1609+ RendererVk *renderer = contextVk->getRenderer ();
1610+
16051611 if (mImage )
16061612 {
16071613 if (mOwnsImage )
16081614 {
1609- mImage ->releaseImage (contextVk-> getRenderer () );
1615+ mImage ->releaseImage (renderer );
16101616 }
16111617 else
16121618 {
16131619 mImage = nullptr ;
16141620 }
16151621 }
16161622
1617- mImageViews .release (contextVk );
1623+ mImageViews .release (renderer );
16181624
16191625 for (RenderTargetVector &renderTargetLevels : mRenderTargets )
16201626 {
0 commit comments