Refactor texture method overrides.

This also removes binding an EGL surface to a 3D texture image, which
is not supported by the API and which is unreachable.

Change-Id: I4a6cd17d731c28769e976b21ac46fe855d1c7b1c
Reviewed-on: https://swiftshader-review.googlesource.com/8351
Tested-by: Nicolas Capens <capn@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
diff --git a/src/OpenGL/libGLES_CM/Texture.h b/src/OpenGL/libGLES_CM/Texture.h
index 82e4b33..3e0fa8a 100644
--- a/src/OpenGL/libGLES_CM/Texture.h
+++ b/src/OpenGL/libGLES_CM/Texture.h
@@ -88,7 +88,7 @@
 
 	virtual Renderbuffer *getRenderbuffer(GLenum target) = 0;
 	virtual egl::Image *getRenderTarget(GLenum target, unsigned int level) = 0;
-	virtual egl::Image *createSharedImage(GLenum target, unsigned int level);
+	egl::Image *createSharedImage(GLenum target, unsigned int level);
 	virtual bool isShared(GLenum target, unsigned int level) const = 0;
 
 	virtual void generateMipmaps() = 0;
@@ -97,7 +97,7 @@
 	virtual void copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source) = 0;
 
 protected:
-	virtual ~Texture();
+	~Texture() override;
 
 	void setImage(GLenum format, GLenum type, GLint unpackAlignment, const void *pixels, egl::Image *image);
 	void subImage(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint unpackAlignment, const void *pixels, egl::Image *image);
@@ -131,14 +131,14 @@
 	void releaseProxy(const Renderbuffer *proxy) override;
 	void sweep() override;
 
-	virtual GLenum getTarget() const;
+	GLenum getTarget() const override;
 
-	virtual GLsizei getWidth(GLenum target, GLint level) const;
-	virtual GLsizei getHeight(GLenum target, GLint level) const;
-	virtual GLenum getFormat(GLenum target, GLint level) const;
-	virtual GLenum getType(GLenum target, GLint level) const;
-	virtual sw::Format getInternalFormat(GLenum target, GLint level) const;
-	virtual int getLevelCount() const;
+	GLsizei getWidth(GLenum target, GLint level) const override;
+	GLsizei getHeight(GLenum target, GLint level) const override;
+	GLenum getFormat(GLenum target, GLint level) const override;
+	GLenum getType(GLenum target, GLint level) const override;
+	sw::Format getInternalFormat(GLenum target, GLint level) const override;
+	int getLevelCount() const override;
 
 	void setImage(GLint level, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint unpackAlignment, const void *pixels);
 	void setCompressedImage(GLint level, GLenum format, GLsizei width, GLsizei height, GLsizei imageSize, const void *pixels);
@@ -149,23 +149,23 @@
 
 	void setSharedImage(egl::Image *image);
 
-	virtual bool isSamplerComplete() const;
-	virtual bool isCompressed(GLenum target, GLint level) const;
-	virtual bool isDepth(GLenum target, GLint level) const;
-	virtual void bindTexImage(gl::Surface *surface);
-	virtual void releaseTexImage();
+	bool isSamplerComplete() const override;
+	bool isCompressed(GLenum target, GLint level) const override;
+	bool isDepth(GLenum target, GLint level) const override;
+	void bindTexImage(gl::Surface *surface);
+	void releaseTexImage() override;
 
-	virtual void generateMipmaps();
-	virtual void autoGenerateMipmaps();
+	void generateMipmaps() override;
+	void autoGenerateMipmaps() override;
 
-	virtual Renderbuffer *getRenderbuffer(GLenum target);
-	virtual egl::Image *getRenderTarget(GLenum target, unsigned int level);
-	virtual bool isShared(GLenum target, unsigned int level) const;
+	Renderbuffer *getRenderbuffer(GLenum target) override;
+	egl::Image *getRenderTarget(GLenum target, unsigned int level) override;
+	bool isShared(GLenum target, unsigned int level) const override;
 
 	egl::Image *getImage(unsigned int level);
 
 protected:
-	virtual ~Texture2D();
+	~Texture2D() override;
 
 	bool isMipmapComplete() const;
 
@@ -187,10 +187,10 @@
 public:
 	explicit TextureExternal(GLuint name);
 
-	virtual GLenum getTarget() const;
+	GLenum getTarget() const override;
 
 protected:
-	virtual ~TextureExternal();
+	~TextureExternal() override;
 };
 }
 
diff --git a/src/OpenGL/libGLESv2/Texture.cpp b/src/OpenGL/libGLESv2/Texture.cpp
index e7d894d..2407b8a 100644
--- a/src/OpenGL/libGLESv2/Texture.cpp
+++ b/src/OpenGL/libGLESv2/Texture.cpp
@@ -1611,48 +1611,9 @@
 	Texture::setImage(format, type, unpackInfo, pixels, image[level]);
 }
 
-void Texture3D::bindTexImage(gl::Surface *surface)
-{
-	GLenum format;
-
-	switch(surface->getInternalFormat())
-	{
-	case sw::FORMAT_A8R8G8B8:
-		format = GL_RGBA;
-		break;
-	case sw::FORMAT_X8R8G8B8:
-		format = GL_RGB;
-		break;
-	default:
-		UNIMPLEMENTED();
-		return;
-	}
-
-	for(int level = 0; level < IMPLEMENTATION_MAX_TEXTURE_LEVELS; level++)
-	{
-		if(image[level])
-		{
-			image[level]->release();
-			image[level] = nullptr;
-		}
-	}
-
-	image[0] = surface->getRenderTarget();
-
-	mSurface = surface;
-	mSurface->setBoundTexture(this);
-}
-
 void Texture3D::releaseTexImage()
 {
-	for(int level = 0; level < IMPLEMENTATION_MAX_TEXTURE_LEVELS; level++)
-	{
-		if(image[level])
-		{
-			image[level]->release();
-			image[level] = nullptr;
-		}
-	}
+	UNREACHABLE(0);   // 3D textures cannot have an EGL surface bound as an image
 }
 
 void Texture3D::setCompressedImage(GLint level, GLenum format, GLsizei width, GLsizei height, GLsizei depth, GLsizei imageSize, const void *pixels)
diff --git a/src/OpenGL/libGLESv2/Texture.h b/src/OpenGL/libGLESv2/Texture.h
index f01e0f2..4ab2462 100644
--- a/src/OpenGL/libGLESv2/Texture.h
+++ b/src/OpenGL/libGLESv2/Texture.h
@@ -49,7 +49,7 @@
 public:
 	explicit Texture(GLuint name);
 
-	virtual sw::Resource *getResource() const;
+	sw::Resource *getResource() const override;
 
 	virtual void addProxyRef(const Renderbuffer *proxy) = 0;
 	virtual void releaseProxy(const Renderbuffer *proxy) = 0;
@@ -107,14 +107,14 @@
 
 	virtual Renderbuffer *getRenderbuffer(GLenum target, GLint level, GLint layer) = 0;
 	virtual egl::Image *getRenderTarget(GLenum target, unsigned int level) = 0;
-	virtual egl::Image *createSharedImage(GLenum target, unsigned int level);
+	egl::Image *createSharedImage(GLenum target, unsigned int level);
 	virtual bool isShared(GLenum target, unsigned int level) const = 0;
 
 	virtual void generateMipmaps() = 0;
 	virtual void copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source) = 0;
 
 protected:
-	virtual ~Texture();
+	~Texture() override;
 
 	void setImage(GLenum format, GLenum type, const egl::Image::UnpackInfo& unpackInfo, const void *pixels, egl::Image *image);
 	void subImage(GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const egl::Image::UnpackInfo& unpackInfo, const void *pixels, egl::Image *image);
@@ -156,40 +156,40 @@
 	void releaseProxy(const Renderbuffer *proxy) override;
 	void sweep() override;
 
-	virtual GLenum getTarget() const;
+	GLenum getTarget() const override;
 
-	virtual GLsizei getWidth(GLenum target, GLint level) const;
-	virtual GLsizei getHeight(GLenum target, GLint level) const;
-	virtual GLenum getFormat(GLenum target, GLint level) const;
-	virtual GLenum getType(GLenum target, GLint level) const;
-	virtual sw::Format getInternalFormat(GLenum target, GLint level) const;
-	virtual int getLevelCount() const;
+	GLsizei getWidth(GLenum target, GLint level) const override;
+	GLsizei getHeight(GLenum target, GLint level) const override;
+	GLenum getFormat(GLenum target, GLint level) const override;
+	GLenum getType(GLenum target, GLint level) const override;
+	sw::Format getInternalFormat(GLenum target, GLint level) const override;
+	int getLevelCount() const override;
 
 	void setImage(GLint level, GLsizei width, GLsizei height, GLenum format, GLenum type, const egl::Image::UnpackInfo& unpackInfo, const void *pixels);
 	void setCompressedImage(GLint level, GLenum format, GLsizei width, GLsizei height, GLsizei imageSize, const void *pixels);
 	void subImage(GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const egl::Image::UnpackInfo& unpackInfo, const void *pixels);
 	void subImageCompressed(GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *pixels);
 	void copyImage(GLint level, GLenum format, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source);
-	virtual void copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source);
+	void copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source) override;
 
 	void setSharedImage(egl::Image *image);
 
-	virtual bool isSamplerComplete() const;
-	virtual bool isCompressed(GLenum target, GLint level) const;
-	virtual bool isDepth(GLenum target, GLint level) const;
-	virtual void bindTexImage(gl::Surface *surface);
-	virtual void releaseTexImage();
+	bool isSamplerComplete() const override;
+	bool isCompressed(GLenum target, GLint level) const override;
+	bool isDepth(GLenum target, GLint level) const override;
+	void bindTexImage(gl::Surface *surface);
+	void releaseTexImage() override;
 
-	virtual void generateMipmaps();
+	void generateMipmaps() override;
 
-	virtual Renderbuffer *getRenderbuffer(GLenum target, GLint level, GLint layer);
-	virtual egl::Image *getRenderTarget(GLenum target, unsigned int level);
-	virtual bool isShared(GLenum target, unsigned int level) const;
+	Renderbuffer *getRenderbuffer(GLenum target, GLint level, GLint layer) override;
+	egl::Image *getRenderTarget(GLenum target, unsigned int level) override;
+	bool isShared(GLenum target, unsigned int level) const override;
 
 	egl::Image *getImage(unsigned int level);
 
 protected:
-	virtual ~Texture2D();
+	~Texture2D() override;
 
 	bool isMipmapComplete() const;
 
@@ -215,14 +215,14 @@
 	void releaseProxy(const Renderbuffer *proxy) override;
 	void sweep() override;
 
-	virtual GLenum getTarget() const;
+	GLenum getTarget() const override;
 
-	virtual GLsizei getWidth(GLenum target, GLint level) const;
-	virtual GLsizei getHeight(GLenum target, GLint level) const;
-	virtual GLenum getFormat(GLenum target, GLint level) const;
-	virtual GLenum getType(GLenum target, GLint level) const;
-	virtual sw::Format getInternalFormat(GLenum target, GLint level) const;
-	virtual int getLevelCount() const;
+	GLsizei getWidth(GLenum target, GLint level) const override;
+	GLsizei getHeight(GLenum target, GLint level) const override;
+	GLenum getFormat(GLenum target, GLint level) const override;
+	GLenum getType(GLenum target, GLint level) const override;
+	sw::Format getInternalFormat(GLenum target, GLint level) const override;
+	int getLevelCount() const override;
 
 	void setImage(GLenum target, GLint level, GLsizei width, GLsizei height, GLenum format, GLenum type, const egl::Image::UnpackInfo& unpackInfo, const void *pixels);
 	void setCompressedImage(GLenum target, GLint level, GLenum format, GLsizei width, GLsizei height, GLsizei imageSize, const void *pixels);
@@ -230,23 +230,23 @@
 	void subImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const egl::Image::UnpackInfo& unpackInfo, const void *pixels);
 	void subImageCompressed(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *pixels);
 	void copyImage(GLenum target, GLint level, GLenum format, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source);
-	virtual void copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source);
+	void copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source) override;
 
-	virtual bool isSamplerComplete() const;
-	virtual bool isCompressed(GLenum target, GLint level) const;
-	virtual bool isDepth(GLenum target, GLint level) const;
-	virtual void releaseTexImage();
+	bool isSamplerComplete() const override;
+	bool isCompressed(GLenum target, GLint level) const override;
+	bool isDepth(GLenum target, GLint level) const override;
+	void releaseTexImage() override;
 
-	virtual void generateMipmaps();
+	void generateMipmaps() override;
 
-	virtual Renderbuffer *getRenderbuffer(GLenum target, GLint level, GLint layer);
-	virtual egl::Image *getRenderTarget(GLenum target, unsigned int level);
-	virtual bool isShared(GLenum target, unsigned int level) const;
+	Renderbuffer *getRenderbuffer(GLenum target, GLint level, GLint layer) override;
+	egl::Image *getRenderTarget(GLenum target, unsigned int level) override;
+	bool isShared(GLenum target, unsigned int level) const override;
 
 	egl::Image *getImage(int face, unsigned int level);
 
 protected:
-	virtual ~TextureCubeMap();
+	~TextureCubeMap() override;
 
 private:
 	bool isCubeComplete() const;
@@ -275,15 +275,15 @@
 	void releaseProxy(const Renderbuffer *proxy) override;
 	void sweep() override;
 
-	virtual GLenum getTarget() const;
+	GLenum getTarget() const override;
 
-	virtual GLsizei getWidth(GLenum target, GLint level) const;
-	virtual GLsizei getHeight(GLenum target, GLint level) const;
-	virtual GLsizei getDepth(GLenum target, GLint level) const;
-	virtual GLenum getFormat(GLenum target, GLint level) const;
-	virtual GLenum getType(GLenum target, GLint level) const;
-	virtual sw::Format getInternalFormat(GLenum target, GLint level) const;
-	virtual int getLevelCount() const;
+	GLsizei getWidth(GLenum target, GLint level) const override;
+	GLsizei getHeight(GLenum target, GLint level) const override;
+	GLsizei getDepth(GLenum target, GLint level) const override;
+	GLenum getFormat(GLenum target, GLint level) const override;
+	GLenum getType(GLenum target, GLint level) const override;
+	sw::Format getInternalFormat(GLenum target, GLint level) const override;
+	int getLevelCount() const override;
 
 	void setImage(GLint level, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const egl::Image::UnpackInfo& unpackInfo, const void *pixels);
 	void setCompressedImage(GLint level, GLenum format, GLsizei width, GLsizei height, GLsizei depth, GLsizei imageSize, const void *pixels);
@@ -294,22 +294,21 @@
 
 	void setSharedImage(egl::Image *image);
 
-	virtual bool isSamplerComplete() const;
-	virtual bool isCompressed(GLenum target, GLint level) const;
-	virtual bool isDepth(GLenum target, GLint level) const;
-	virtual void bindTexImage(gl::Surface *surface);
-	virtual void releaseTexImage();
+	bool isSamplerComplete() const override;
+	bool isCompressed(GLenum target, GLint level) const override;
+	bool isDepth(GLenum target, GLint level) const override;
+	void releaseTexImage() override;
 
-	virtual void generateMipmaps();
+	void generateMipmaps() override;
 
-	virtual Renderbuffer *getRenderbuffer(GLenum target, GLint level, GLint layer);
-	virtual egl::Image *getRenderTarget(GLenum target, unsigned int level);
-	virtual bool isShared(GLenum target, unsigned int level) const;
+	Renderbuffer *getRenderbuffer(GLenum target, GLint level, GLint layer) override;
+	egl::Image *getRenderTarget(GLenum target, unsigned int level) override;
+	bool isShared(GLenum target, unsigned int level) const override;
 
 	egl::Image *getImage(unsigned int level);
 
 protected:
-	virtual ~Texture3D();
+	~Texture3D() override;
 
 	bool isMipmapComplete() const;
 
@@ -331,11 +330,11 @@
 public:
 	explicit Texture2DArray(GLuint name);
 
-	virtual GLenum getTarget() const;
-	virtual void generateMipmaps();
+	GLenum getTarget() const override;
+	void generateMipmaps() override;
 
 protected:
-	virtual ~Texture2DArray();
+	~Texture2DArray() override;
 };
 
 class TextureExternal : public Texture2D
@@ -343,10 +342,10 @@
 public:
 	explicit TextureExternal(GLuint name);
 
-	virtual GLenum getTarget() const;
+	GLenum getTarget() const override;
 
 protected:
-	virtual ~TextureExternal();
+	~TextureExternal() override;
 };
 }