Fix texture and renderbuffer leaks
authorJeannot Breton <jbreton@nvidia.com>
Fri, 2 Jun 2017 01:21:34 +0000 (20:21 -0500)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Tue, 6 Jun 2017 08:39:40 +0000 (04:39 -0400)
Some texture_swizzle tests allocate a source texture inside a loop,
but the texture is only deleted when we exit the loop. So multiple
textures are allocated but never deleted.

Some transform_feedback clean function delete framebuffer instead
of render buffer, some other tests doesn't delete frambuffer and
render buffer at all

Affects:

KHR-GL45.texture_swizzle.*
KHR-GL45.transform_feedback.*

Components: OpenGL

VK-GL-CTS issue: 461

Change-Id: Ib237bbb78209b5017ee9e454a94636df378c677f

external/openglcts/modules/gl/gl3cTextureSwizzleTests.cpp
external/openglcts/modules/gl/gl3cTransformFeedbackTests.cpp

index fa0fe2e..af2021e 100644 (file)
@@ -3819,6 +3819,7 @@ tcu::TestNode::IterateResult FunctionalTest::iterate()
                                /* Skip formats not supported by FBO */
                                if (false == fillSourceTexture(format_idx, tgt_idx))
                                {
+                                       deinitTextures();
                                        continue;
                                }
 
@@ -3826,14 +3827,19 @@ tcu::TestNode::IterateResult FunctionalTest::iterate()
 
                                for (size_t access_idx = 0; access_idx < n_texture_access; ++access_idx)
                                {
-
-#endif /* FUNCTIONAL_TEST_ALL_ACCESS_ROUTINES */
-
                                        /* Skip invalid cases */
                                        if (false == isTargetSuppByAccess(access_idx, tgt_idx))
                                        {
                                                continue;
                                        }
+#else /* FUNCTIONAL_TEST_ALL_ACCESS_ROUTINES */
+                                       /* Skip invalid cases */
+                                       if (false == isTargetSuppByAccess(access_idx, tgt_idx))
+                                       {
+                                               deinitTextures();
+                                               continue;
+                                       }
+#endif /* FUNCTIONAL_TEST_ALL_ACCESS_ROUTINES */
 
 #if FUNCTIONAL_TEST_ALL_SWIZZLE_COMBINATIONS
 
@@ -3896,7 +3902,7 @@ tcu::TestNode::IterateResult FunctionalTest::iterate()
                                } /* iteration over access routines - only when enabled */
 
 #endif /* FUNCTIONAL_TEST_ALL_ACCESS_ROUTINES */
-
+                               deinitTextures();
                        } /* try */
                        catch (wrongResults& exc)
                        {
@@ -3904,14 +3910,15 @@ tcu::TestNode::IterateResult FunctionalTest::iterate()
                                m_context.getTestContext().getLog() << tcu::TestLog::Message << exc.what() << tcu::TestLog::EndMessage;
 
                                test_result = false;
+                               deinitTextures();
                        }
                        catch (...)
                        {
+                               deinitTextures();
                                throw;
                        }
                } /* iteration over texture targets */
 
-               deinitTextures();
        } /* iteration over texture formats */
 
        /* Set result */
index ffdaaea..80331ac 100644 (file)
@@ -2781,7 +2781,7 @@ void gl3cts::TransformFeedback::CaptureVertexInterleaved::clean(void)
 
        if (m_renderbuffer)
        {
-               gl.deleteFramebuffers(1, &m_renderbuffer);
+               gl.deleteRenderbuffers(1, &m_renderbuffer);
 
                m_renderbuffer = 0;
        }
@@ -4588,6 +4588,20 @@ void gl3cts::TransformFeedback::DrawXFB::clean()
 
                m_vao_id = 0;
        }
+
+       if (m_fbo_id)
+       {
+               gl.deleteFramebuffers(1, &m_fbo_id);
+
+               m_fbo_id = 0;
+       }
+
+       if (m_rbo_id)
+       {
+               gl.deleteRenderbuffers(1, &m_rbo_id);
+
+               m_rbo_id = 0;
+       }
 }
 
 void gl3cts::TransformFeedback::DrawXFB::drawForCapture(bool begin_xfb, bool pause_xfb, bool resume_xfb, bool end_xfb)
@@ -5717,6 +5731,20 @@ void gl3cts::TransformFeedback::DrawXFBStream::clean()
 
                m_vao_id = 0;
        }
+
+       if (m_fbo_id)
+       {
+               gl.deleteFramebuffers(1, &m_fbo_id);
+
+               m_fbo_id = 0;
+       }
+
+       if (m_rbo_id)
+       {
+               gl.deleteRenderbuffers(1, &m_rbo_id);
+
+               m_rbo_id = 0;
+       }
 }
 
 const glw::GLchar* gl3cts::TransformFeedback::DrawXFBStream::s_vertex_shader_blank = "#version 130\n"
@@ -6098,6 +6126,20 @@ void gl3cts::TransformFeedback::DrawXFBInstanced::clean()
 
                m_vao_id = 0;
        }
+
+       if (m_fbo_id)
+       {
+               gl.deleteFramebuffers(1, &m_fbo_id);
+
+               m_fbo_id = 0;
+       }
+
+       if (m_rbo_id)
+       {
+               gl.deleteRenderbuffers(1, &m_rbo_id);
+
+               m_rbo_id = 0;
+       }
 }
 
 const glw::GLchar* gl3cts::TransformFeedback::DrawXFBInstanced::s_vertex_shader_generate =
@@ -6542,6 +6584,20 @@ void gl3cts::TransformFeedback::DrawXFBStreamInstanced::clean()
 
                m_vao_id = 0;
        }
+
+       if (m_fbo_id)
+       {
+               gl.deleteFramebuffers(1, &m_fbo_id);
+
+               m_fbo_id = 0;
+       }
+
+       if (m_rbo_id)
+       {
+               gl.deleteRenderbuffers(1, &m_rbo_id);
+
+               m_rbo_id = 0;
+       }
 }
 
 const glw::GLchar* gl3cts::TransformFeedback::DrawXFBStreamInstanced::s_vertex_shader_blank = "#version 140\n"