From 8b1435ca88db32692cceb920c3f4ac0372ed144b Mon Sep 17 00:00:00 2001 From: Bill Hollings Date: Wed, 4 Aug 2021 13:16:25 -0400 Subject: [PATCH] Pass MVKArrayRef by reference to functions. Per cdavis5e observation: Since an MVKArrayRef is just a pointer and a size, passing it around by reference doesn't buy much. It might actually hurt performance, since cache lines might be evicted to make room for the MVKArrayRef in memory. For this reason, LLVM passes its ArrayRefs by value. Unrelatedly, update runcts to log errors by default. --- .../MoltenVK/Commands/MVKCommandEncoderState.h | 4 ++-- .../MoltenVK/Commands/MVKCommandEncoderState.mm | 14 +++++++------- MoltenVK/MoltenVK/GPUObjects/MVKQueryPool.h | 4 ++-- MoltenVK/MoltenVK/GPUObjects/MVKQueryPool.mm | 4 ++-- MoltenVK/MoltenVK/GPUObjects/MVKRenderPass.h | 10 +++++----- MoltenVK/MoltenVK/GPUObjects/MVKRenderPass.mm | 10 +++++----- Scripts/runcts | 2 +- 7 files changed, 24 insertions(+), 24 deletions(-) diff --git a/MoltenVK/MoltenVK/Commands/MVKCommandEncoderState.h b/MoltenVK/MoltenVK/Commands/MVKCommandEncoderState.h index 572a732d..6150faec 100644 --- a/MoltenVK/MoltenVK/Commands/MVKCommandEncoderState.h +++ b/MoltenVK/MoltenVK/Commands/MVKCommandEncoderState.h @@ -428,7 +428,7 @@ protected: contents[index] = value; } - void assertMissingSwizzles(bool needsSwizzle, const char* stageName, const MVKArrayRef& texBindings); + void assertMissingSwizzles(bool needsSwizzle, const char* stageName, const MVKArrayRef texBindings); void encodeMetalArgumentBuffer(MVKShaderStage stage); virtual void bindMetalArgumentBuffer(MVKShaderStage stage, MVKMTLBufferBinding& buffBind) = 0; @@ -518,7 +518,7 @@ public: const char* pStageName, bool fullImageViewSwizzle, std::function bindBuffer, - std::function&)> bindImplicitBuffer, + std::function)> bindImplicitBuffer, std::function bindTexture, std::function bindSampler); diff --git a/MoltenVK/MoltenVK/Commands/MVKCommandEncoderState.mm b/MoltenVK/MoltenVK/Commands/MVKCommandEncoderState.mm index e2ba3b88..ccc13b57 100644 --- a/MoltenVK/MoltenVK/Commands/MVKCommandEncoderState.mm +++ b/MoltenVK/MoltenVK/Commands/MVKCommandEncoderState.mm @@ -580,7 +580,7 @@ void MVKResourcesCommandEncoderState::markDirty() { } // If a swizzle is needed for this stage, iterates all the bindings and logs errors for those that need texture swizzling. -void MVKResourcesCommandEncoderState::assertMissingSwizzles(bool needsSwizzle, const char* stageName, const MVKArrayRef& texBindings) { +void MVKResourcesCommandEncoderState::assertMissingSwizzles(bool needsSwizzle, const char* stageName, const MVKArrayRef texBindings) { if (needsSwizzle) { for (auto& tb : texBindings) { VkComponentMapping vkcm = mvkUnpackSwizzle(tb.swizzle); @@ -670,7 +670,7 @@ void MVKGraphicsResourcesCommandEncoderState::encodeBindings(MVKShaderStage stag const char* pStageName, bool fullImageViewSwizzle, std::function bindBuffer, - std::function&)> bindImplicitBuffer, + std::function)> bindImplicitBuffer, std::function bindTexture, std::function bindSampler) { @@ -767,7 +767,7 @@ void MVKGraphicsResourcesCommandEncoderState::encodeImpl(uint32_t stage) { offset: b.offset atIndex: b.index]; }, - [](MVKCommandEncoder* cmdEncoder, MVKMTLBufferBinding& b, const MVKArrayRef& s)->void { + [](MVKCommandEncoder* cmdEncoder, MVKMTLBufferBinding& b, const MVKArrayRef s)->void { cmdEncoder->setComputeBytes(cmdEncoder->getMTLComputeEncoder(kMVKCommandUseTessellationVertexTessCtl), s.data, s.size * sizeof(uint32_t), @@ -806,7 +806,7 @@ void MVKGraphicsResourcesCommandEncoderState::encodeImpl(uint32_t stage) { } } }, - [](MVKCommandEncoder* cmdEncoder, MVKMTLBufferBinding& b, const MVKArrayRef& s)->void { + [](MVKCommandEncoder* cmdEncoder, MVKMTLBufferBinding& b, const MVKArrayRef s)->void { cmdEncoder->setVertexBytes(cmdEncoder->_mtlRenderEncoder, s.data, s.size * sizeof(uint32_t), @@ -836,7 +836,7 @@ void MVKGraphicsResourcesCommandEncoderState::encodeImpl(uint32_t stage) { offset: b.offset atIndex: b.index]; }, - [](MVKCommandEncoder* cmdEncoder, MVKMTLBufferBinding& b, const MVKArrayRef& s)->void { + [](MVKCommandEncoder* cmdEncoder, MVKMTLBufferBinding& b, const MVKArrayRef s)->void { cmdEncoder->setComputeBytes(cmdEncoder->getMTLComputeEncoder(kMVKCommandUseTessellationVertexTessCtl), s.data, s.size * sizeof(uint32_t), @@ -866,7 +866,7 @@ void MVKGraphicsResourcesCommandEncoderState::encodeImpl(uint32_t stage) { offset: b.offset atIndex: b.index]; }, - [](MVKCommandEncoder* cmdEncoder, MVKMTLBufferBinding& b, const MVKArrayRef& s)->void { + [](MVKCommandEncoder* cmdEncoder, MVKMTLBufferBinding& b, const MVKArrayRef s)->void { cmdEncoder->setVertexBytes(cmdEncoder->_mtlRenderEncoder, s.data, s.size * sizeof(uint32_t), @@ -896,7 +896,7 @@ void MVKGraphicsResourcesCommandEncoderState::encodeImpl(uint32_t stage) { offset: b.offset atIndex: b.index]; }, - [](MVKCommandEncoder* cmdEncoder, MVKMTLBufferBinding& b, const MVKArrayRef& s)->void { + [](MVKCommandEncoder* cmdEncoder, MVKMTLBufferBinding& b, const MVKArrayRef s)->void { cmdEncoder->setFragmentBytes(cmdEncoder->_mtlRenderEncoder, s.data, s.size * sizeof(uint32_t), diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKQueryPool.h b/MoltenVK/MoltenVK/GPUObjects/MVKQueryPool.h index 79b6eedf..9ab62f46 100644 --- a/MoltenVK/MoltenVK/GPUObjects/MVKQueryPool.h +++ b/MoltenVK/MoltenVK/GPUObjects/MVKQueryPool.h @@ -56,7 +56,7 @@ public: virtual void endQuery(uint32_t query, MVKCommandEncoder* cmdEncoder); /** Finishes the specified queries and marks them as available. */ - virtual void finishQueries(const MVKArrayRef& queries); + virtual void finishQueries(const MVKArrayRef queries); /** Resets the results and availability status of the specified queries. */ virtual void resetResults(uint32_t firstQuery, uint32_t queryCount, MVKCommandEncoder* cmdEncoder); @@ -209,7 +209,7 @@ class MVKTimestampQueryPool : public MVKGPUCounterQueryPool { public: void endQuery(uint32_t query, MVKCommandEncoder* cmdEncoder) override; - void finishQueries(const MVKArrayRef& queries) override; + void finishQueries(const MVKArrayRef queries) override; #pragma mark Construction diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKQueryPool.mm b/MoltenVK/MoltenVK/GPUObjects/MVKQueryPool.mm index b2e2cd70..4df2aa3b 100644 --- a/MoltenVK/MoltenVK/GPUObjects/MVKQueryPool.mm +++ b/MoltenVK/MoltenVK/GPUObjects/MVKQueryPool.mm @@ -52,7 +52,7 @@ void MVKQueryPool::endQuery(uint32_t query, MVKCommandEncoder* cmdEncoder) { } // Mark queries as available -void MVKQueryPool::finishQueries(const MVKArrayRef& queries) { +void MVKQueryPool::finishQueries(const MVKArrayRef queries) { lock_guard lock(_availabilityLock); for (uint32_t qry : queries) { if (_availability[qry] == DeviceAvailable) { @@ -367,7 +367,7 @@ void MVKTimestampQueryPool::endQuery(uint32_t query, MVKCommandEncoder* cmdEncod } // If not using MTLCounterSampleBuffer, update timestamp values, then mark queries as available -void MVKTimestampQueryPool::finishQueries(const MVKArrayRef& queries) { +void MVKTimestampQueryPool::finishQueries(const MVKArrayRef queries) { if ( !_mtlCounterBuffer ) { uint64_t ts = mvkGetTimestamp(); for (uint32_t qry : queries) { _timestamps[qry] = ts; } diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKRenderPass.h b/MoltenVK/MoltenVK/GPUObjects/MVKRenderPass.h index 0119d2a8..ff115912 100644 --- a/MoltenVK/MoltenVK/GPUObjects/MVKRenderPass.h +++ b/MoltenVK/MoltenVK/GPUObjects/MVKRenderPass.h @@ -103,8 +103,8 @@ public: uint32_t passIdx, VkExtent2D framebufferExtent, uint32_t framebufferLayerCount, - const MVKArrayRef& attachments, - const MVKArrayRef& clearValues, + const MVKArrayRef attachments, + const MVKArrayRef clearValues, bool isRenderingEntireAttachment, bool loadOverride = false); @@ -113,7 +113,7 @@ public: * when the render area is smaller than the full framebuffer size. */ void populateClearAttachments(MVKClearAttachments& clearAtts, - const MVKArrayRef& clearValues); + const MVKArrayRef clearValues); /** * Populates the specified vector with VkClearRects for clearing views of a specified multiview @@ -127,11 +127,11 @@ public: /** If a render encoder is active, sets the store actions for all attachments to it. */ void encodeStoreActions(MVKCommandEncoder* cmdEncoder, bool isRenderingEntireAttachment, - const MVKArrayRef& attachments, + const MVKArrayRef attachments, bool storeOverride = false); /** Resolves any resolve attachments that cannot be handled by native Metal subpass resolve behavior. */ - void resolveUnresolvableAttachments(MVKCommandEncoder* cmdEncoder, const MVKArrayRef& attachments); + void resolveUnresolvableAttachments(MVKCommandEncoder* cmdEncoder, const MVKArrayRef attachments); MVKRenderSubpass(MVKRenderPass* renderPass, const VkSubpassDescription* pCreateInfo, const VkRenderPassInputAttachmentAspectCreateInfo* pInputAspects, diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKRenderPass.mm b/MoltenVK/MoltenVK/GPUObjects/MVKRenderPass.mm index 870dfc77..774b1eb9 100644 --- a/MoltenVK/MoltenVK/GPUObjects/MVKRenderPass.mm +++ b/MoltenVK/MoltenVK/GPUObjects/MVKRenderPass.mm @@ -185,8 +185,8 @@ void MVKRenderSubpass::populateMTLRenderPassDescriptor(MTLRenderPassDescriptor* uint32_t passIdx, VkExtent2D framebufferExtent, uint32_t framebufferLayerCount, - const MVKArrayRef& attachments, - const MVKArrayRef& clearValues, + const MVKArrayRef attachments, + const MVKArrayRef clearValues, bool isRenderingEntireAttachment, bool loadOverride) { MVKPixelFormats* pixFmts = _renderPass->getPixelFormats(); @@ -381,7 +381,7 @@ void MVKRenderSubpass::populateMTLRenderPassDescriptor(MTLRenderPassDescriptor* void MVKRenderSubpass::encodeStoreActions(MVKCommandEncoder* cmdEncoder, bool isRenderingEntireAttachment, - const MVKArrayRef& attachments, + const MVKArrayRef attachments, bool storeOverride) { if (!cmdEncoder->_mtlRenderEncoder) { return; } if (!_renderPass->getDevice()->_pMetalFeatures->deferredStoreActions) { return; } @@ -417,7 +417,7 @@ void MVKRenderSubpass::encodeStoreActions(MVKCommandEncoder* cmdEncoder, } void MVKRenderSubpass::populateClearAttachments(MVKClearAttachments& clearAtts, - const MVKArrayRef& clearValues) { + const MVKArrayRef clearValues) { VkClearAttachment cAtt; uint32_t attIdx; @@ -498,7 +498,7 @@ MVKMTLFmtCaps MVKRenderSubpass::getRequiredFormatCapabilitiesForAttachmentAt(uin return caps; } -void MVKRenderSubpass::resolveUnresolvableAttachments(MVKCommandEncoder* cmdEncoder, const MVKArrayRef& attachments) { +void MVKRenderSubpass::resolveUnresolvableAttachments(MVKCommandEncoder* cmdEncoder, const MVKArrayRef attachments) { MVKPixelFormats* pixFmts = cmdEncoder->getPixelFormats(); size_t raCnt = _resolveAttachments.size(); for (uint32_t raIdx = 0; raIdx < raCnt; raIdx++) { diff --git a/Scripts/runcts b/Scripts/runcts index b088fcf6..df894777 100755 --- a/Scripts/runcts +++ b/Scripts/runcts @@ -99,7 +99,7 @@ export METAL_ERROR_MODE=3 export METAL_DEBUG_ERROR_MODE=3 # ----- MoltenVK config settings ------ -export MVK_CONFIG_LOG_LEVEL=0 +export MVK_CONFIG_LOG_LEVEL=1 export MVK_DEBUG=0 # Additional MoltenVK configuration can be set here by