Fix memory leaks.
Change-Id: I668c4295fd13d028fa53f6aa75ac6c6d4c6de44f
Reviewed-on: https://swiftshader-review.googlesource.com/4531
Reviewed-by: Nicolas Capens <capn@google.com>
Tested-by: Nicolas Capens <capn@google.com>
diff --git a/src/OpenGL/libEGL/Surface.cpp b/src/OpenGL/libEGL/Surface.cpp
index f8d0ac8..7cae134 100644
--- a/src/OpenGL/libEGL/Surface.cpp
+++ b/src/OpenGL/libEGL/Surface.cpp
@@ -56,7 +56,7 @@
Surface::~Surface()
{
- deleteResources();
+ Surface::deleteResources();
}
bool Surface::initialize()
@@ -230,6 +230,11 @@
frameBuffer = nullptr;
}
+WindowSurface::~WindowSurface()
+{
+ WindowSurface::deleteResources();
+}
+
bool WindowSurface::initialize()
{
ASSERT(!frameBuffer && !backBuffer && !depthStencil);
@@ -343,6 +348,11 @@
this->largestPBuffer = largestPBuffer;
}
+PBufferSurface::~PBufferSurface()
+{
+ PBufferSurface::deleteResources();
+}
+
void PBufferSurface::swap()
{
// No effect
@@ -355,4 +365,8 @@
return 0;
}
+void PBufferSurface::deleteResources()
+{
+}
+
}
diff --git a/src/OpenGL/libEGL/Surface.h b/src/OpenGL/libEGL/Surface.h
index bb91a31..55589d2 100644
--- a/src/OpenGL/libEGL/Surface.h
+++ b/src/OpenGL/libEGL/Surface.h
@@ -33,7 +33,7 @@
public:
virtual bool initialize();
virtual void swap() = 0;
-
+
virtual egl::Image *getRenderTarget();
virtual egl::Image *getDepthStencil();
@@ -73,7 +73,7 @@
Texture *texture;
bool reset(int backbufferWidth, int backbufferHeight);
-
+
const Config *const config; // EGL config surface was created with
EGLint height; // Height of surface
EGLint width; // Width of surface
@@ -97,6 +97,7 @@
{
public:
WindowSurface(Display *display, const egl::Config *config, EGLNativeWindowType window);
+ ~WindowSurface() override;
bool initialize() override;
@@ -118,11 +119,15 @@
{
public:
PBufferSurface(Display *display, const egl::Config *config, EGLint width, EGLint height, EGLenum textureFormat, EGLenum textureTarget, EGLBoolean largestPBuffer);
+ ~PBufferSurface() override;
bool isPBufferSurface() const override { return true; }
void swap() override;
EGLNativeWindowType getWindowHandle() const override;
+
+private:
+ void deleteResources() override;
};
}
diff --git a/src/Renderer/QuadRasterizer.hpp b/src/Renderer/QuadRasterizer.hpp
index c1b05c0..a9359eb 100644
--- a/src/Renderer/QuadRasterizer.hpp
+++ b/src/Renderer/QuadRasterizer.hpp
@@ -30,6 +30,7 @@
struct Registers
{
Registers();
+ virtual ~Registers() {};
Pointer<Byte> constants;
diff --git a/src/Shader/ShaderCore.hpp b/src/Shader/ShaderCore.hpp
index 565d682..f307526 100644
--- a/src/Shader/ShaderCore.hpp
+++ b/src/Shader/ShaderCore.hpp
@@ -75,7 +75,7 @@
Float4 &operator[](int i);
Vector4f &operator=(const Vector4f &rhs);
-
+
Float4 x;
Float4 y;
Float4 z;
@@ -200,10 +200,20 @@
~RegisterArray()
{
- delete[] x;
- delete[] y;
- delete[] z;
- delete[] w;
+ if(dynamic)
+ {
+ delete x;
+ delete y;
+ delete z;
+ delete w;
+ }
+ else
+ {
+ delete[] x;
+ delete[] y;
+ delete[] z;
+ delete[] w;
+ }
}
Register operator[](int i)