Pass MVKArrayRef by reference to functions.
Per cdavis5e observation: Since an MVKArrayRef<T> 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.
This commit is contained in:
parent
12f0089d0c
commit
8b1435ca88
@ -428,7 +428,7 @@ protected:
|
|||||||
contents[index] = value;
|
contents[index] = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
void assertMissingSwizzles(bool needsSwizzle, const char* stageName, const MVKArrayRef<MVKMTLTextureBinding>& texBindings);
|
void assertMissingSwizzles(bool needsSwizzle, const char* stageName, const MVKArrayRef<MVKMTLTextureBinding> texBindings);
|
||||||
void encodeMetalArgumentBuffer(MVKShaderStage stage);
|
void encodeMetalArgumentBuffer(MVKShaderStage stage);
|
||||||
virtual void bindMetalArgumentBuffer(MVKShaderStage stage, MVKMTLBufferBinding& buffBind) = 0;
|
virtual void bindMetalArgumentBuffer(MVKShaderStage stage, MVKMTLBufferBinding& buffBind) = 0;
|
||||||
|
|
||||||
@ -518,7 +518,7 @@ public:
|
|||||||
const char* pStageName,
|
const char* pStageName,
|
||||||
bool fullImageViewSwizzle,
|
bool fullImageViewSwizzle,
|
||||||
std::function<void(MVKCommandEncoder*, MVKMTLBufferBinding&)> bindBuffer,
|
std::function<void(MVKCommandEncoder*, MVKMTLBufferBinding&)> bindBuffer,
|
||||||
std::function<void(MVKCommandEncoder*, MVKMTLBufferBinding&, const MVKArrayRef<uint32_t>&)> bindImplicitBuffer,
|
std::function<void(MVKCommandEncoder*, MVKMTLBufferBinding&, const MVKArrayRef<uint32_t>)> bindImplicitBuffer,
|
||||||
std::function<void(MVKCommandEncoder*, MVKMTLTextureBinding&)> bindTexture,
|
std::function<void(MVKCommandEncoder*, MVKMTLTextureBinding&)> bindTexture,
|
||||||
std::function<void(MVKCommandEncoder*, MVKMTLSamplerStateBinding&)> bindSampler);
|
std::function<void(MVKCommandEncoder*, MVKMTLSamplerStateBinding&)> bindSampler);
|
||||||
|
|
||||||
|
@ -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.
|
// 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<MVKMTLTextureBinding>& texBindings) {
|
void MVKResourcesCommandEncoderState::assertMissingSwizzles(bool needsSwizzle, const char* stageName, const MVKArrayRef<MVKMTLTextureBinding> texBindings) {
|
||||||
if (needsSwizzle) {
|
if (needsSwizzle) {
|
||||||
for (auto& tb : texBindings) {
|
for (auto& tb : texBindings) {
|
||||||
VkComponentMapping vkcm = mvkUnpackSwizzle(tb.swizzle);
|
VkComponentMapping vkcm = mvkUnpackSwizzle(tb.swizzle);
|
||||||
@ -670,7 +670,7 @@ void MVKGraphicsResourcesCommandEncoderState::encodeBindings(MVKShaderStage stag
|
|||||||
const char* pStageName,
|
const char* pStageName,
|
||||||
bool fullImageViewSwizzle,
|
bool fullImageViewSwizzle,
|
||||||
std::function<void(MVKCommandEncoder*, MVKMTLBufferBinding&)> bindBuffer,
|
std::function<void(MVKCommandEncoder*, MVKMTLBufferBinding&)> bindBuffer,
|
||||||
std::function<void(MVKCommandEncoder*, MVKMTLBufferBinding&, const MVKArrayRef<uint32_t>&)> bindImplicitBuffer,
|
std::function<void(MVKCommandEncoder*, MVKMTLBufferBinding&, const MVKArrayRef<uint32_t>)> bindImplicitBuffer,
|
||||||
std::function<void(MVKCommandEncoder*, MVKMTLTextureBinding&)> bindTexture,
|
std::function<void(MVKCommandEncoder*, MVKMTLTextureBinding&)> bindTexture,
|
||||||
std::function<void(MVKCommandEncoder*, MVKMTLSamplerStateBinding&)> bindSampler) {
|
std::function<void(MVKCommandEncoder*, MVKMTLSamplerStateBinding&)> bindSampler) {
|
||||||
|
|
||||||
@ -767,7 +767,7 @@ void MVKGraphicsResourcesCommandEncoderState::encodeImpl(uint32_t stage) {
|
|||||||
offset: b.offset
|
offset: b.offset
|
||||||
atIndex: b.index];
|
atIndex: b.index];
|
||||||
},
|
},
|
||||||
[](MVKCommandEncoder* cmdEncoder, MVKMTLBufferBinding& b, const MVKArrayRef<uint32_t>& s)->void {
|
[](MVKCommandEncoder* cmdEncoder, MVKMTLBufferBinding& b, const MVKArrayRef<uint32_t> s)->void {
|
||||||
cmdEncoder->setComputeBytes(cmdEncoder->getMTLComputeEncoder(kMVKCommandUseTessellationVertexTessCtl),
|
cmdEncoder->setComputeBytes(cmdEncoder->getMTLComputeEncoder(kMVKCommandUseTessellationVertexTessCtl),
|
||||||
s.data,
|
s.data,
|
||||||
s.size * sizeof(uint32_t),
|
s.size * sizeof(uint32_t),
|
||||||
@ -806,7 +806,7 @@ void MVKGraphicsResourcesCommandEncoderState::encodeImpl(uint32_t stage) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
[](MVKCommandEncoder* cmdEncoder, MVKMTLBufferBinding& b, const MVKArrayRef<uint32_t>& s)->void {
|
[](MVKCommandEncoder* cmdEncoder, MVKMTLBufferBinding& b, const MVKArrayRef<uint32_t> s)->void {
|
||||||
cmdEncoder->setVertexBytes(cmdEncoder->_mtlRenderEncoder,
|
cmdEncoder->setVertexBytes(cmdEncoder->_mtlRenderEncoder,
|
||||||
s.data,
|
s.data,
|
||||||
s.size * sizeof(uint32_t),
|
s.size * sizeof(uint32_t),
|
||||||
@ -836,7 +836,7 @@ void MVKGraphicsResourcesCommandEncoderState::encodeImpl(uint32_t stage) {
|
|||||||
offset: b.offset
|
offset: b.offset
|
||||||
atIndex: b.index];
|
atIndex: b.index];
|
||||||
},
|
},
|
||||||
[](MVKCommandEncoder* cmdEncoder, MVKMTLBufferBinding& b, const MVKArrayRef<uint32_t>& s)->void {
|
[](MVKCommandEncoder* cmdEncoder, MVKMTLBufferBinding& b, const MVKArrayRef<uint32_t> s)->void {
|
||||||
cmdEncoder->setComputeBytes(cmdEncoder->getMTLComputeEncoder(kMVKCommandUseTessellationVertexTessCtl),
|
cmdEncoder->setComputeBytes(cmdEncoder->getMTLComputeEncoder(kMVKCommandUseTessellationVertexTessCtl),
|
||||||
s.data,
|
s.data,
|
||||||
s.size * sizeof(uint32_t),
|
s.size * sizeof(uint32_t),
|
||||||
@ -866,7 +866,7 @@ void MVKGraphicsResourcesCommandEncoderState::encodeImpl(uint32_t stage) {
|
|||||||
offset: b.offset
|
offset: b.offset
|
||||||
atIndex: b.index];
|
atIndex: b.index];
|
||||||
},
|
},
|
||||||
[](MVKCommandEncoder* cmdEncoder, MVKMTLBufferBinding& b, const MVKArrayRef<uint32_t>& s)->void {
|
[](MVKCommandEncoder* cmdEncoder, MVKMTLBufferBinding& b, const MVKArrayRef<uint32_t> s)->void {
|
||||||
cmdEncoder->setVertexBytes(cmdEncoder->_mtlRenderEncoder,
|
cmdEncoder->setVertexBytes(cmdEncoder->_mtlRenderEncoder,
|
||||||
s.data,
|
s.data,
|
||||||
s.size * sizeof(uint32_t),
|
s.size * sizeof(uint32_t),
|
||||||
@ -896,7 +896,7 @@ void MVKGraphicsResourcesCommandEncoderState::encodeImpl(uint32_t stage) {
|
|||||||
offset: b.offset
|
offset: b.offset
|
||||||
atIndex: b.index];
|
atIndex: b.index];
|
||||||
},
|
},
|
||||||
[](MVKCommandEncoder* cmdEncoder, MVKMTLBufferBinding& b, const MVKArrayRef<uint32_t>& s)->void {
|
[](MVKCommandEncoder* cmdEncoder, MVKMTLBufferBinding& b, const MVKArrayRef<uint32_t> s)->void {
|
||||||
cmdEncoder->setFragmentBytes(cmdEncoder->_mtlRenderEncoder,
|
cmdEncoder->setFragmentBytes(cmdEncoder->_mtlRenderEncoder,
|
||||||
s.data,
|
s.data,
|
||||||
s.size * sizeof(uint32_t),
|
s.size * sizeof(uint32_t),
|
||||||
|
@ -56,7 +56,7 @@ public:
|
|||||||
virtual void endQuery(uint32_t query, MVKCommandEncoder* cmdEncoder);
|
virtual void endQuery(uint32_t query, MVKCommandEncoder* cmdEncoder);
|
||||||
|
|
||||||
/** Finishes the specified queries and marks them as available. */
|
/** Finishes the specified queries and marks them as available. */
|
||||||
virtual void finishQueries(const MVKArrayRef<uint32_t>& queries);
|
virtual void finishQueries(const MVKArrayRef<uint32_t> queries);
|
||||||
|
|
||||||
/** Resets the results and availability status of the specified queries. */
|
/** Resets the results and availability status of the specified queries. */
|
||||||
virtual void resetResults(uint32_t firstQuery, uint32_t queryCount, MVKCommandEncoder* cmdEncoder);
|
virtual void resetResults(uint32_t firstQuery, uint32_t queryCount, MVKCommandEncoder* cmdEncoder);
|
||||||
@ -209,7 +209,7 @@ class MVKTimestampQueryPool : public MVKGPUCounterQueryPool {
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
void endQuery(uint32_t query, MVKCommandEncoder* cmdEncoder) override;
|
void endQuery(uint32_t query, MVKCommandEncoder* cmdEncoder) override;
|
||||||
void finishQueries(const MVKArrayRef<uint32_t>& queries) override;
|
void finishQueries(const MVKArrayRef<uint32_t> queries) override;
|
||||||
|
|
||||||
#pragma mark Construction
|
#pragma mark Construction
|
||||||
|
|
||||||
|
@ -52,7 +52,7 @@ void MVKQueryPool::endQuery(uint32_t query, MVKCommandEncoder* cmdEncoder) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Mark queries as available
|
// Mark queries as available
|
||||||
void MVKQueryPool::finishQueries(const MVKArrayRef<uint32_t>& queries) {
|
void MVKQueryPool::finishQueries(const MVKArrayRef<uint32_t> queries) {
|
||||||
lock_guard<mutex> lock(_availabilityLock);
|
lock_guard<mutex> lock(_availabilityLock);
|
||||||
for (uint32_t qry : queries) {
|
for (uint32_t qry : queries) {
|
||||||
if (_availability[qry] == DeviceAvailable) {
|
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
|
// If not using MTLCounterSampleBuffer, update timestamp values, then mark queries as available
|
||||||
void MVKTimestampQueryPool::finishQueries(const MVKArrayRef<uint32_t>& queries) {
|
void MVKTimestampQueryPool::finishQueries(const MVKArrayRef<uint32_t> queries) {
|
||||||
if ( !_mtlCounterBuffer ) {
|
if ( !_mtlCounterBuffer ) {
|
||||||
uint64_t ts = mvkGetTimestamp();
|
uint64_t ts = mvkGetTimestamp();
|
||||||
for (uint32_t qry : queries) { _timestamps[qry] = ts; }
|
for (uint32_t qry : queries) { _timestamps[qry] = ts; }
|
||||||
|
@ -103,8 +103,8 @@ public:
|
|||||||
uint32_t passIdx,
|
uint32_t passIdx,
|
||||||
VkExtent2D framebufferExtent,
|
VkExtent2D framebufferExtent,
|
||||||
uint32_t framebufferLayerCount,
|
uint32_t framebufferLayerCount,
|
||||||
const MVKArrayRef<MVKImageView*>& attachments,
|
const MVKArrayRef<MVKImageView*> attachments,
|
||||||
const MVKArrayRef<VkClearValue>& clearValues,
|
const MVKArrayRef<VkClearValue> clearValues,
|
||||||
bool isRenderingEntireAttachment,
|
bool isRenderingEntireAttachment,
|
||||||
bool loadOverride = false);
|
bool loadOverride = false);
|
||||||
|
|
||||||
@ -113,7 +113,7 @@ public:
|
|||||||
* when the render area is smaller than the full framebuffer size.
|
* when the render area is smaller than the full framebuffer size.
|
||||||
*/
|
*/
|
||||||
void populateClearAttachments(MVKClearAttachments& clearAtts,
|
void populateClearAttachments(MVKClearAttachments& clearAtts,
|
||||||
const MVKArrayRef<VkClearValue>& clearValues);
|
const MVKArrayRef<VkClearValue> clearValues);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Populates the specified vector with VkClearRects for clearing views of a specified multiview
|
* 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. */
|
/** If a render encoder is active, sets the store actions for all attachments to it. */
|
||||||
void encodeStoreActions(MVKCommandEncoder* cmdEncoder,
|
void encodeStoreActions(MVKCommandEncoder* cmdEncoder,
|
||||||
bool isRenderingEntireAttachment,
|
bool isRenderingEntireAttachment,
|
||||||
const MVKArrayRef<MVKImageView*>& attachments,
|
const MVKArrayRef<MVKImageView*> attachments,
|
||||||
bool storeOverride = false);
|
bool storeOverride = false);
|
||||||
|
|
||||||
/** Resolves any resolve attachments that cannot be handled by native Metal subpass resolve behavior. */
|
/** Resolves any resolve attachments that cannot be handled by native Metal subpass resolve behavior. */
|
||||||
void resolveUnresolvableAttachments(MVKCommandEncoder* cmdEncoder, const MVKArrayRef<MVKImageView*>& attachments);
|
void resolveUnresolvableAttachments(MVKCommandEncoder* cmdEncoder, const MVKArrayRef<MVKImageView*> attachments);
|
||||||
|
|
||||||
MVKRenderSubpass(MVKRenderPass* renderPass, const VkSubpassDescription* pCreateInfo,
|
MVKRenderSubpass(MVKRenderPass* renderPass, const VkSubpassDescription* pCreateInfo,
|
||||||
const VkRenderPassInputAttachmentAspectCreateInfo* pInputAspects,
|
const VkRenderPassInputAttachmentAspectCreateInfo* pInputAspects,
|
||||||
|
@ -185,8 +185,8 @@ void MVKRenderSubpass::populateMTLRenderPassDescriptor(MTLRenderPassDescriptor*
|
|||||||
uint32_t passIdx,
|
uint32_t passIdx,
|
||||||
VkExtent2D framebufferExtent,
|
VkExtent2D framebufferExtent,
|
||||||
uint32_t framebufferLayerCount,
|
uint32_t framebufferLayerCount,
|
||||||
const MVKArrayRef<MVKImageView*>& attachments,
|
const MVKArrayRef<MVKImageView*> attachments,
|
||||||
const MVKArrayRef<VkClearValue>& clearValues,
|
const MVKArrayRef<VkClearValue> clearValues,
|
||||||
bool isRenderingEntireAttachment,
|
bool isRenderingEntireAttachment,
|
||||||
bool loadOverride) {
|
bool loadOverride) {
|
||||||
MVKPixelFormats* pixFmts = _renderPass->getPixelFormats();
|
MVKPixelFormats* pixFmts = _renderPass->getPixelFormats();
|
||||||
@ -381,7 +381,7 @@ void MVKRenderSubpass::populateMTLRenderPassDescriptor(MTLRenderPassDescriptor*
|
|||||||
|
|
||||||
void MVKRenderSubpass::encodeStoreActions(MVKCommandEncoder* cmdEncoder,
|
void MVKRenderSubpass::encodeStoreActions(MVKCommandEncoder* cmdEncoder,
|
||||||
bool isRenderingEntireAttachment,
|
bool isRenderingEntireAttachment,
|
||||||
const MVKArrayRef<MVKImageView*>& attachments,
|
const MVKArrayRef<MVKImageView*> attachments,
|
||||||
bool storeOverride) {
|
bool storeOverride) {
|
||||||
if (!cmdEncoder->_mtlRenderEncoder) { return; }
|
if (!cmdEncoder->_mtlRenderEncoder) { return; }
|
||||||
if (!_renderPass->getDevice()->_pMetalFeatures->deferredStoreActions) { return; }
|
if (!_renderPass->getDevice()->_pMetalFeatures->deferredStoreActions) { return; }
|
||||||
@ -417,7 +417,7 @@ void MVKRenderSubpass::encodeStoreActions(MVKCommandEncoder* cmdEncoder,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void MVKRenderSubpass::populateClearAttachments(MVKClearAttachments& clearAtts,
|
void MVKRenderSubpass::populateClearAttachments(MVKClearAttachments& clearAtts,
|
||||||
const MVKArrayRef<VkClearValue>& clearValues) {
|
const MVKArrayRef<VkClearValue> clearValues) {
|
||||||
VkClearAttachment cAtt;
|
VkClearAttachment cAtt;
|
||||||
|
|
||||||
uint32_t attIdx;
|
uint32_t attIdx;
|
||||||
@ -498,7 +498,7 @@ MVKMTLFmtCaps MVKRenderSubpass::getRequiredFormatCapabilitiesForAttachmentAt(uin
|
|||||||
return caps;
|
return caps;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MVKRenderSubpass::resolveUnresolvableAttachments(MVKCommandEncoder* cmdEncoder, const MVKArrayRef<MVKImageView*>& attachments) {
|
void MVKRenderSubpass::resolveUnresolvableAttachments(MVKCommandEncoder* cmdEncoder, const MVKArrayRef<MVKImageView*> attachments) {
|
||||||
MVKPixelFormats* pixFmts = cmdEncoder->getPixelFormats();
|
MVKPixelFormats* pixFmts = cmdEncoder->getPixelFormats();
|
||||||
size_t raCnt = _resolveAttachments.size();
|
size_t raCnt = _resolveAttachments.size();
|
||||||
for (uint32_t raIdx = 0; raIdx < raCnt; raIdx++) {
|
for (uint32_t raIdx = 0; raIdx < raCnt; raIdx++) {
|
||||||
|
@ -99,7 +99,7 @@ export METAL_ERROR_MODE=3
|
|||||||
export METAL_DEBUG_ERROR_MODE=3
|
export METAL_DEBUG_ERROR_MODE=3
|
||||||
|
|
||||||
# ----- MoltenVK config settings ------
|
# ----- MoltenVK config settings ------
|
||||||
export MVK_CONFIG_LOG_LEVEL=0
|
export MVK_CONFIG_LOG_LEVEL=1
|
||||||
export MVK_DEBUG=0
|
export MVK_DEBUG=0
|
||||||
|
|
||||||
# Additional MoltenVK configuration can be set here by
|
# Additional MoltenVK configuration can be set here by
|
||||||
|
Loading…
x
Reference in New Issue
Block a user