diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDescriptorSet.h b/MoltenVK/MoltenVK/GPUObjects/MVKDescriptorSet.h index 00ed01307..b197b1cc6 100644 --- a/MoltenVK/MoltenVK/GPUObjects/MVKDescriptorSet.h +++ b/MoltenVK/MoltenVK/GPUObjects/MVKDescriptorSet.h @@ -204,6 +204,8 @@ class MVKDescriptorSet : public MVKVulkanAPIDeviceObject { MVKDescriptorSet(MVKDescriptorPool* pool); + ~MVKDescriptorSet() override; + protected: friend class MVKDescriptorSetLayoutBinding; friend class MVKDescriptorPool; diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDescriptorSet.mm b/MoltenVK/MoltenVK/GPUObjects/MVKDescriptorSet.mm index 8474559af..54ba414a6 100644 --- a/MoltenVK/MoltenVK/GPUObjects/MVKDescriptorSet.mm +++ b/MoltenVK/MoltenVK/GPUObjects/MVKDescriptorSet.mm @@ -538,6 +538,7 @@ static void populateAuxBuffer(mvk::SPIRVToMSLConversionConfiguration& shaderConf NSUInteger mtlArgBufferOffset, id mtlArgEnc) { _layout = layout; + _layout->retain(); _variableDescriptorCount = variableDescriptorCount; _argumentBuffer.setArgumentBuffer(_pool->_metalArgumentBuffer, mtlArgBufferOffset, mtlArgEnc); @@ -574,6 +575,7 @@ static void populateAuxBuffer(mvk::SPIRVToMSLConversionConfiguration& shaderConf } void MVKDescriptorSet::free(bool isPoolReset) { + if(_layout) { _layout->release(); } _layout = nullptr; _dynamicOffsetDescriptorCount = 0; _variableDescriptorCount = 0; @@ -613,6 +615,10 @@ static void populateAuxBuffer(mvk::SPIRVToMSLConversionConfiguration& shaderConf free(true); } +MVKDescriptorSet::~MVKDescriptorSet() { + if(_layout) { _layout->release(); } +} + #pragma mark - #pragma mark MVKDescriptorTypePool