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)