diff --git a/MoltenVK/MoltenVK/Commands/MVKCmdPipeline.h b/MoltenVK/MoltenVK/Commands/MVKCmdPipeline.h index 5689133f..18f5bfa7 100644 --- a/MoltenVK/MoltenVK/Commands/MVKCmdPipeline.h +++ b/MoltenVK/MoltenVK/Commands/MVKCmdPipeline.h @@ -129,7 +129,7 @@ private: MVKPipelineLayout* _pipelineLayout; VkShaderStageFlags _stageFlags; uint32_t _offset; - MVKVector _pushConstants; + MVKVector128 _pushConstants; }; @@ -157,7 +157,7 @@ private: VkPipelineBindPoint _pipelineBindPoint; MVKPipelineLayout* _pipelineLayout; - std::vector _descriptorWrites; + MVKVector _descriptorWrites; uint32_t _set; }; diff --git a/MoltenVK/MoltenVK/Commands/MVKCommandEncoderState.h b/MoltenVK/MoltenVK/Commands/MVKCommandEncoderState.h index a87a7e0c..5bc29194 100644 --- a/MoltenVK/MoltenVK/Commands/MVKCommandEncoderState.h +++ b/MoltenVK/MoltenVK/Commands/MVKCommandEncoderState.h @@ -189,7 +189,7 @@ class MVKPushConstantsCommandEncoderState : public MVKCommandEncoderState { public: /** Sets the specified push constants. */ - void setPushConstants(uint32_t offset, MVKVector& pushConstants); + void setPushConstants(uint32_t offset, MVKVector128& pushConstants); /** Sets the index of the Metal buffer used to hold the push constants. */ void setMTLBufferIndex(uint32_t mtlBufferIndex); @@ -203,7 +203,7 @@ protected: void encodeImpl() override; void resetImpl() override; - MVKVector _pushConstants; + MVKVector128 _pushConstants; VkShaderStageFlagBits _shaderStage; uint32_t _mtlBufferIndex = 0; }; diff --git a/MoltenVK/MoltenVK/Commands/MVKCommandEncoderState.mm b/MoltenVK/MoltenVK/Commands/MVKCommandEncoderState.mm index f50843fb..89352723 100644 --- a/MoltenVK/MoltenVK/Commands/MVKCommandEncoderState.mm +++ b/MoltenVK/MoltenVK/Commands/MVKCommandEncoderState.mm @@ -136,7 +136,7 @@ void MVKScissorCommandEncoderState::resetImpl() { #pragma mark - #pragma mark MVKPushConstantsCommandEncoderState -void MVKPushConstantsCommandEncoderState:: setPushConstants(uint32_t offset, MVKVector& pushConstants) { +void MVKPushConstantsCommandEncoderState:: setPushConstants(uint32_t offset, MVKVector128& pushConstants) { uint32_t pcCnt = (uint32_t)pushConstants.size(); mvkEnsureSize(_pushConstants, offset + pcCnt); copy(pushConstants.begin(), pushConstants.end(), _pushConstants.begin() + offset); diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDescriptorSet.h b/MoltenVK/MoltenVK/GPUObjects/MVKDescriptorSet.h index 47ce94a8..80db477d 100644 --- a/MoltenVK/MoltenVK/GPUObjects/MVKDescriptorSet.h +++ b/MoltenVK/MoltenVK/GPUObjects/MVKDescriptorSet.h @@ -138,7 +138,7 @@ public: /** Encodes this descriptor set layout and the specified descriptor updates on the specified command encoder immediately. */ void pushDescriptorSet(MVKCommandEncoder* cmdEncoder, - std::vector& descriptorWrites, + MVKVector& descriptorWrites, MVKShaderResourceBinding& dslMTLRezIdxOffsets); diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDescriptorSet.mm b/MoltenVK/MoltenVK/GPUObjects/MVKDescriptorSet.mm index 0cd71f3d..412cdd73 100644 --- a/MoltenVK/MoltenVK/GPUObjects/MVKDescriptorSet.mm +++ b/MoltenVK/MoltenVK/GPUObjects/MVKDescriptorSet.mm @@ -542,7 +542,7 @@ static const void* getWriteParameters(VkDescriptorType type, const VkDescriptorI } void MVKDescriptorSetLayout::pushDescriptorSet(MVKCommandEncoder* cmdEncoder, - vector& descriptorWrites, + MVKVector& descriptorWrites, MVKShaderResourceBinding& dslMTLRezIdxOffsets) { if (!_isPushDescriptorLayout) return; diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKImage.h b/MoltenVK/MoltenVK/GPUObjects/MVKImage.h index 0a6b2e0d..4f45043c 100644 --- a/MoltenVK/MoltenVK/GPUObjects/MVKImage.h +++ b/MoltenVK/MoltenVK/GPUObjects/MVKImage.h @@ -20,8 +20,8 @@ #include "MVKResource.h" #include "MVKSync.h" +#include "MVKVector.h" #include -#include #import @@ -397,7 +397,7 @@ protected: uint32_t _swapchainIndex; id _mtlDrawable; std::mutex _availabilityLock; - std::list _availabilitySignalers; + MVKVector _availabilitySignalers; MVKSwapchainSignaler _preSignaled; MVKSwapchainImageAvailability _availability; }; diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKImage.mm b/MoltenVK/MoltenVK/GPUObjects/MVKImage.mm index 6c2db246..a5a9484e 100644 --- a/MoltenVK/MoltenVK/GPUObjects/MVKImage.mm +++ b/MoltenVK/MoltenVK/GPUObjects/MVKImage.mm @@ -1000,7 +1000,8 @@ void MVKSwapchainImage::makeAvailable() { // If this image is not yet available, extract and signal the first semaphore and fence. signaler = _availabilitySignalers.front(); - _availabilitySignalers.pop_front(); + _availabilitySignalers.erase( _availabilitySignalers.begin() ); + //_availabilitySignalers.pop_front(); } // Signal the semaphore and fence, and let them know they are no longer being tracked. diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKPipeline.h b/MoltenVK/MoltenVK/GPUObjects/MVKPipeline.h index 47618250..6391e0cf 100644 --- a/MoltenVK/MoltenVK/GPUObjects/MVKPipeline.h +++ b/MoltenVK/MoltenVK/GPUObjects/MVKPipeline.h @@ -25,7 +25,6 @@ #include "MVKVector.h" #include #include -#include #include #import @@ -63,7 +62,7 @@ public: /** Updates a descriptor set in a command encoder. */ void pushDescriptorSet(MVKCommandEncoder* cmdEncoder, - std::vector& descriptorWrites, + MVKVector& descriptorWrites, uint32_t set); /** Updates a descriptor set from a template in a command encoder. */ @@ -82,9 +81,9 @@ public: MVKPipelineLayout(MVKDevice* device, const VkPipelineLayoutCreateInfo* pCreateInfo); protected: - std::vector _descriptorSetLayouts; - std::vector _dslMTLResourceIndexOffsets; - std::vector _pushConstants; + MVKVector _descriptorSetLayouts; + MVKVector _dslMTLResourceIndexOffsets; + MVKVector _pushConstants; MVKShaderResourceBinding _pushConstantsMTLResourceIndexes; MVKShaderAuxBufferBinding _auxBufferIndex; }; diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKPipeline.mm b/MoltenVK/MoltenVK/GPUObjects/MVKPipeline.mm index 74c496bc..d1d6ec71 100644 --- a/MoltenVK/MoltenVK/GPUObjects/MVKPipeline.mm +++ b/MoltenVK/MoltenVK/GPUObjects/MVKPipeline.mm @@ -55,7 +55,7 @@ void MVKPipelineLayout::bindDescriptorSets(MVKCommandEncoder* cmdEncoder, } void MVKPipelineLayout::pushDescriptorSet(MVKCommandEncoder* cmdEncoder, - vector& descriptorWrites, + MVKVector& descriptorWrites, uint32_t set) { _descriptorSetLayouts[set].pushDescriptorSet(cmdEncoder, descriptorWrites, diff --git a/MoltenVK/MoltenVK/Utility/MVKVector.h b/MoltenVK/MoltenVK/Utility/MVKVector.h index df0b8a99..c990516e 100755 --- a/MoltenVK/MoltenVK/Utility/MVKVector.h +++ b/MoltenVK/MoltenVK/Utility/MVKVector.h @@ -456,7 +456,7 @@ public: { --alc.num_elements_used; - for( size_t i = it.GetIndex(); i < alc.num_elements_used; ++i ) + for( size_t i = it.get_position(); i < alc.num_elements_used; ++i ) { alc.ptr[i] = std::move( alc.ptr[i + 1] ); } @@ -524,5 +524,10 @@ public: } }; + +template +using MVKVector128 = MVKVector>; + + #endif