OSDN Git Service

Refactor texture method overrides.
authorNicolas Capens <capn@google.com>
Tue, 27 Jun 2017 21:03:24 +0000 (17:03 -0400)
committerNicolas Capens <capn@google.com>
Wed, 28 Jun 2017 14:58:13 +0000 (14:58 +0000)
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>
src/OpenGL/libGLES_CM/Texture.h
src/OpenGL/libGLESv2/Texture.cpp
src/OpenGL/libGLESv2/Texture.h

index 82e4b33..3e0fa8a 100644 (file)
@@ -88,7 +88,7 @@ public:
 
        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 @@ public:
        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 @@ public:
        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 @@ public:
 
        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 @@ class TextureExternal : public Texture2D
 public:
        explicit TextureExternal(GLuint name);
 
-       virtual GLenum getTarget() const;
+       GLenum getTarget() const override;
 
 protected:
-       virtual ~TextureExternal();
+       ~TextureExternal() override;
 };
 }
 
index e7d894d..2407b8a 100644 (file)
@@ -1611,48 +1611,9 @@ void Texture3D::setImage(GLint level, GLsizei width, GLsizei height, GLsizei dep
        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)
index f01e0f2..4ab2462 100644 (file)
@@ -49,7 +49,7 @@ class Texture : public egl::Texture
 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 @@ public:
 
        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 @@ public:
        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 @@ public:
        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 @@ public:
        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 @@ public:
        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 @@ public:
 
        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 @@ class Texture2DArray : public Texture3D
 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 @@ class TextureExternal : public Texture2D
 public:
        explicit TextureExternal(GLuint name);
 
-       virtual GLenum getTarget() const;
+       GLenum getTarget() const override;
 
 protected:
-       virtual ~TextureExternal();
+       ~TextureExternal() override;
 };
 }