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;
|
||||
}
|
||||
|
||||
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);
|
||||
virtual void bindMetalArgumentBuffer(MVKShaderStage stage, MVKMTLBufferBinding& buffBind) = 0;
|
||||
|
||||
@ -518,7 +518,7 @@ public:
|
||||
const char* pStageName,
|
||||
bool fullImageViewSwizzle,
|
||||
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*, 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.
|
||||
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) {
|
||||
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<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*, MVKMTLSamplerStateBinding&)> bindSampler) {
|
||||
|
||||
@ -767,7 +767,7 @@ void MVKGraphicsResourcesCommandEncoderState::encodeImpl(uint32_t stage) {
|
||||
offset: b.offset
|
||||
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),
|
||||
s.data,
|
||||
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,
|
||||
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<uint32_t>& s)->void {
|
||||
[](MVKCommandEncoder* cmdEncoder, MVKMTLBufferBinding& b, const MVKArrayRef<uint32_t> 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<uint32_t>& s)->void {
|
||||
[](MVKCommandEncoder* cmdEncoder, MVKMTLBufferBinding& b, const MVKArrayRef<uint32_t> 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<uint32_t>& s)->void {
|
||||
[](MVKCommandEncoder* cmdEncoder, MVKMTLBufferBinding& b, const MVKArrayRef<uint32_t> s)->void {
|
||||
cmdEncoder->setFragmentBytes(cmdEncoder->_mtlRenderEncoder,
|
||||
s.data,
|
||||
s.size * sizeof(uint32_t),
|
||||
|
@ -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<uint32_t>& queries);
|
||||
virtual void finishQueries(const MVKArrayRef<uint32_t> 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<uint32_t>& queries) override;
|
||||
void finishQueries(const MVKArrayRef<uint32_t> queries) override;
|
||||
|
||||
#pragma mark Construction
|
||||
|
||||
|
@ -52,7 +52,7 @@ void MVKQueryPool::endQuery(uint32_t query, MVKCommandEncoder* cmdEncoder) {
|
||||
}
|
||||
|
||||
// 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);
|
||||
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<uint32_t>& queries) {
|
||||
void MVKTimestampQueryPool::finishQueries(const MVKArrayRef<uint32_t> queries) {
|
||||
if ( !_mtlCounterBuffer ) {
|
||||
uint64_t ts = mvkGetTimestamp();
|
||||
for (uint32_t qry : queries) { _timestamps[qry] = ts; }
|
||||
|
@ -103,8 +103,8 @@ public:
|
||||
uint32_t passIdx,
|
||||
VkExtent2D framebufferExtent,
|
||||
uint32_t framebufferLayerCount,
|
||||
const MVKArrayRef<MVKImageView*>& attachments,
|
||||
const MVKArrayRef<VkClearValue>& clearValues,
|
||||
const MVKArrayRef<MVKImageView*> attachments,
|
||||
const MVKArrayRef<VkClearValue> 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<VkClearValue>& clearValues);
|
||||
const MVKArrayRef<VkClearValue> 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<MVKImageView*>& attachments,
|
||||
const MVKArrayRef<MVKImageView*> attachments,
|
||||
bool storeOverride = false);
|
||||
|
||||
/** 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,
|
||||
const VkRenderPassInputAttachmentAspectCreateInfo* pInputAspects,
|
||||
|
@ -185,8 +185,8 @@ void MVKRenderSubpass::populateMTLRenderPassDescriptor(MTLRenderPassDescriptor*
|
||||
uint32_t passIdx,
|
||||
VkExtent2D framebufferExtent,
|
||||
uint32_t framebufferLayerCount,
|
||||
const MVKArrayRef<MVKImageView*>& attachments,
|
||||
const MVKArrayRef<VkClearValue>& clearValues,
|
||||
const MVKArrayRef<MVKImageView*> attachments,
|
||||
const MVKArrayRef<VkClearValue> 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<MVKImageView*>& attachments,
|
||||
const MVKArrayRef<MVKImageView*> 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<VkClearValue>& clearValues) {
|
||||
const MVKArrayRef<VkClearValue> clearValues) {
|
||||
VkClearAttachment cAtt;
|
||||
|
||||
uint32_t attIdx;
|
||||
@ -498,7 +498,7 @@ MVKMTLFmtCaps MVKRenderSubpass::getRequiredFormatCapabilitiesForAttachmentAt(uin
|
||||
return caps;
|
||||
}
|
||||
|
||||
void MVKRenderSubpass::resolveUnresolvableAttachments(MVKCommandEncoder* cmdEncoder, const MVKArrayRef<MVKImageView*>& attachments) {
|
||||
void MVKRenderSubpass::resolveUnresolvableAttachments(MVKCommandEncoder* cmdEncoder, const MVKArrayRef<MVKImageView*> attachments) {
|
||||
MVKPixelFormats* pixFmts = cmdEncoder->getPixelFormats();
|
||||
size_t raCnt = _resolveAttachments.size();
|
||||
for (uint32_t raIdx = 0; raIdx < raCnt; raIdx++) {
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user