From 83bbd6e384b257d8aa8bb6449a07d3d911c5f1d5 Mon Sep 17 00:00:00 2001 From: Bill Hollings Date: Sat, 13 Jun 2020 17:09:49 -0400 Subject: [PATCH] Fix use of needsHostReadSync(). MVKImageMemoryBinding::needsHostReadSync() use MVKPipelineBarrier. Removed obsolete MVKResource::needsHostReadSync(), which was no longer being used. --- MoltenVK/MoltenVK/GPUObjects/MVKBuffer.h | 1 - MoltenVK/MoltenVK/GPUObjects/MVKImage.h | 2 +- MoltenVK/MoltenVK/GPUObjects/MVKImage.mm | 7 +++---- MoltenVK/MoltenVK/GPUObjects/MVKResource.h | 4 ---- MoltenVK/MoltenVK/GPUObjects/MVKResource.mm | 15 --------------- 5 files changed, 4 insertions(+), 25 deletions(-) diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKBuffer.h b/MoltenVK/MoltenVK/GPUObjects/MVKBuffer.h index c00c5bc4..f980fd47 100644 --- a/MoltenVK/MoltenVK/GPUObjects/MVKBuffer.h +++ b/MoltenVK/MoltenVK/GPUObjects/MVKBuffer.h @@ -86,7 +86,6 @@ public: protected: friend class MVKDeviceMemory; - using MVKResource::needsHostReadSync; void propagateDebugName() override; bool needsHostReadSync(VkPipelineStageFlags srcStageMask, diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKImage.h b/MoltenVK/MoltenVK/GPUObjects/MVKImage.h index dd0ea131..d8a27521 100644 --- a/MoltenVK/MoltenVK/GPUObjects/MVKImage.h +++ b/MoltenVK/MoltenVK/GPUObjects/MVKImage.h @@ -119,7 +119,7 @@ protected: void propagateDebugName() override; bool needsHostReadSync(VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, - VkMemoryBarrier* pMemoryBarrier) override; + MVKPipelineBarrier& barrier); bool shouldFlushHostMemory(); VkResult flushToDevice(VkDeviceSize offset, VkDeviceSize size); VkResult pullFromDevice(VkDeviceSize offset, VkDeviceSize size); diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKImage.mm b/MoltenVK/MoltenVK/GPUObjects/MVKImage.mm index a2a8ac58..71524ef0 100644 --- a/MoltenVK/MoltenVK/GPUObjects/MVKImage.mm +++ b/MoltenVK/MoltenVK/GPUObjects/MVKImage.mm @@ -340,7 +340,7 @@ void MVKImageMemoryBinding::applyMemoryBarrier(VkPipelineStageFlags srcStageMask MVKCommandEncoder* cmdEncoder, MVKCommandUse cmdUse) { #if MVK_MACOS - if ( needsHostReadSync(srcStageMask, dstStageMask, (VkMemoryBarrier*)&barrier) ) { + if ( needsHostReadSync(srcStageMask, dstStageMask, barrier) ) { for(uint8_t planeIndex = beginPlaneIndex(); planeIndex < endPlaneIndex(); planeIndex++) { [cmdEncoder->getMTLBlitEncoder(cmdUse) synchronizeResource: _image->_planes[planeIndex]->_mtlTexture]; } @@ -358,9 +358,8 @@ void MVKImageMemoryBinding::propagateDebugName() { // texture and host memory for the purpose of the host reading texture memory. bool MVKImageMemoryBinding::needsHostReadSync(VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, - VkMemoryBarrier* pMemoryBarrier) { + MVKPipelineBarrier& barrier) { #if MVK_MACOS - MVKPipelineBarrier& barrier = *(MVKPipelineBarrier*)pMemoryBarrier; return ((barrier.newLayout == VK_IMAGE_LAYOUT_GENERAL) && mvkIsAnyFlagEnabled(barrier.dstAccessMask, (VK_ACCESS_HOST_READ_BIT | VK_ACCESS_MEMORY_READ_BIT)) && isMemoryHostAccessible() && !isMemoryHostCoherent()); @@ -522,7 +521,7 @@ void MVKImage::applyImageMemoryBarrier(VkPipelineStageFlags srcStageMask, MVKImageSubresource* pImgRez = _planes[planeIndex]->getSubresource(mipLvl, layer); if (pImgRez) { pImgRez->layoutState = barrier.newLayout; } #if MVK_MACOS - bool needsSync = _planes[planeIndex]->getMemoryBinding()->needsHostReadSync(srcStageMask, dstStageMask, (VkMemoryBarrier*)&barrier); + bool needsSync = _planes[planeIndex]->getMemoryBinding()->needsHostReadSync(srcStageMask, dstStageMask, barrier); id mtlBlitEncoder = needsSync ? cmdEncoder->getMTLBlitEncoder(cmdUse) : nil; if (needsSync) { [mtlBlitEncoder synchronizeTexture: _planes[planeIndex]->_mtlTexture slice: layer level: mipLvl]; } #endif diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKResource.h b/MoltenVK/MoltenVK/GPUObjects/MVKResource.h index ee691ded..38f3711d 100644 --- a/MoltenVK/MoltenVK/GPUObjects/MVKResource.h +++ b/MoltenVK/MoltenVK/GPUObjects/MVKResource.h @@ -72,10 +72,6 @@ public: MVKResource(MVKDevice* device) : MVKVulkanAPIDeviceObject(device) {} protected: - virtual bool needsHostReadSync(VkPipelineStageFlags srcStageMask, - VkPipelineStageFlags dstStageMask, - VkMemoryBarrier* pMemoryBarrier); - MVKDeviceMemory* _deviceMemory = nullptr; VkDeviceSize _deviceMemoryOffset = 0; VkDeviceSize _byteCount = 0; diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKResource.mm b/MoltenVK/MoltenVK/GPUObjects/MVKResource.mm index bf106f18..013fbed6 100644 --- a/MoltenVK/MoltenVK/GPUObjects/MVKResource.mm +++ b/MoltenVK/MoltenVK/GPUObjects/MVKResource.mm @@ -34,18 +34,3 @@ VkResult MVKResource::bindDeviceMemory(MVKDeviceMemory* mvkMem, VkDeviceSize mem return VK_SUCCESS; } -// Returns whether the specified global memory barrier requires a sync between this -// texture and host memory for the purpose of the host reading texture memory. -bool MVKResource::needsHostReadSync(VkPipelineStageFlags srcStageMask, - VkPipelineStageFlags dstStageMask, - VkMemoryBarrier* pMemoryBarrier) { -#if MVK_IOS - return false; -#endif -#if MVK_MACOS - return (mvkIsAnyFlagEnabled(dstStageMask, (VK_PIPELINE_STAGE_HOST_BIT)) && - mvkIsAnyFlagEnabled(pMemoryBarrier->dstAccessMask, (VK_ACCESS_HOST_READ_BIT)) && - isMemoryHostAccessible() && !isMemoryHostCoherent()); -#endif -} -