2
0
Эх сурвалжийг харах

metal fixes: memleaks and out of bounds index

attilaz 6 жил өмнө
parent
commit
a722db896a
1 өөрчлөгдсөн 8 нэмэгдсэн , 2 устгасан
  1. 8 2
      src/renderer_mtl.mm

+ 8 - 2
src/renderer_mtl.mm

@@ -450,16 +450,17 @@ namespace bgfx { namespace mtl
 			if (NULL != lib)
 			{
 				m_screenshotBlitProgramVsh.m_function = lib.newFunctionWithName(SHADER_FUNCTION_NAME);
+				release(lib);
 			}
 
 			lib = m_device.newLibraryWithSource(fshSource);
 			if (NULL != lib)
 			{
 				m_screenshotBlitProgramFsh.m_function = lib.newFunctionWithName(SHADER_FUNCTION_NAME);
+				release(lib);
 			}
 
 			m_screenshotBlitProgram.create(&m_screenshotBlitProgramVsh, &m_screenshotBlitProgramFsh);
-			release(lib);
 
 			reset(m_renderPipelineDescriptor);
 			m_renderPipelineDescriptor.colorAttachments[0].pixelFormat = m_mainFrameBuffer.m_swapChain->m_metalLayer.pixelFormat;
@@ -665,6 +666,9 @@ namespace bgfx { namespace mtl
 			m_pipelineStateCache.invalidate();
 			m_pipelineProgram.clear();
 
+			m_depthStencilStateCache.invalidate();
+			m_samplerStateCache.invalidate();
+
 			for (uint32_t ii = 0; ii < BX_COUNTOF(m_shaders); ++ii)
 			{
 				m_shaders[ii].destroy();
@@ -784,7 +788,7 @@ namespace bgfx { namespace mtl
 
 		void createProgram(ProgramHandle _handle, ShaderHandle _vsh, ShaderHandle _fsh) override
 		{
-			m_program[_handle.idx].create(&m_shaders[_vsh.idx], &m_shaders[_fsh.idx]);
+			m_program[_handle.idx].create(&m_shaders[_vsh.idx], isValid(_fsh) ? &m_shaders[_fsh.idx] : NULL);
 		}
 
 		void destroyProgram(ProgramHandle _handle) override
@@ -4611,6 +4615,8 @@ namespace bgfx { namespace mtl
 
 			rce =  m_commandBuffer.renderCommandEncoderWithDescriptor(renderPassDescriptor);
 
+			MTL_RELEASE(renderPassDescriptor);
+
 			rce.setCullMode(MTLCullModeNone);
 
 			rce.setRenderPipelineState(m_screenshotBlitRenderPipelineState);