Commit 74a4504e by Nicolas Capens

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/8351Tested-by: 's avatarNicolas Capens <capn@google.com> Reviewed-by: 's avatarAlexis Hétu <sugoi@google.com> Reviewed-by: 's avatarNicolas Capens <capn@google.com>
parent c9d61ae2
...@@ -88,7 +88,7 @@ public: ...@@ -88,7 +88,7 @@ public:
virtual Renderbuffer *getRenderbuffer(GLenum target) = 0; virtual Renderbuffer *getRenderbuffer(GLenum target) = 0;
virtual egl::Image *getRenderTarget(GLenum target, unsigned int level) = 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 bool isShared(GLenum target, unsigned int level) const = 0;
virtual void generateMipmaps() = 0; virtual void generateMipmaps() = 0;
...@@ -97,7 +97,7 @@ public: ...@@ -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; virtual void copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source) = 0;
protected: protected:
virtual ~Texture(); ~Texture() override;
void setImage(GLenum format, GLenum type, GLint unpackAlignment, const void *pixels, egl::Image *image); 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); 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: ...@@ -131,14 +131,14 @@ public:
void releaseProxy(const Renderbuffer *proxy) override; void releaseProxy(const Renderbuffer *proxy) override;
void sweep() override; void sweep() override;
virtual GLenum getTarget() const; GLenum getTarget() const override;
virtual GLsizei getWidth(GLenum target, GLint level) const; GLsizei getWidth(GLenum target, GLint level) const override;
virtual GLsizei getHeight(GLenum target, GLint level) const; GLsizei getHeight(GLenum target, GLint level) const override;
virtual GLenum getFormat(GLenum target, GLint level) const; GLenum getFormat(GLenum target, GLint level) const override;
virtual GLenum getType(GLenum target, GLint level) const; GLenum getType(GLenum target, GLint level) const override;
virtual sw::Format getInternalFormat(GLenum target, GLint level) const; sw::Format getInternalFormat(GLenum target, GLint level) const override;
virtual int getLevelCount() const; int getLevelCount() const override;
void setImage(GLint level, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint unpackAlignment, const void *pixels); 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); void setCompressedImage(GLint level, GLenum format, GLsizei width, GLsizei height, GLsizei imageSize, const void *pixels);
...@@ -149,23 +149,23 @@ public: ...@@ -149,23 +149,23 @@ public:
void setSharedImage(egl::Image *image); void setSharedImage(egl::Image *image);
virtual bool isSamplerComplete() const; bool isSamplerComplete() const override;
virtual bool isCompressed(GLenum target, GLint level) const; bool isCompressed(GLenum target, GLint level) const override;
virtual bool isDepth(GLenum target, GLint level) const; bool isDepth(GLenum target, GLint level) const override;
virtual void bindTexImage(gl::Surface *surface); void bindTexImage(gl::Surface *surface);
virtual void releaseTexImage(); void releaseTexImage() override;
virtual void generateMipmaps(); void generateMipmaps() override;
virtual void autoGenerateMipmaps(); void autoGenerateMipmaps() override;
virtual Renderbuffer *getRenderbuffer(GLenum target); Renderbuffer *getRenderbuffer(GLenum target) override;
virtual egl::Image *getRenderTarget(GLenum target, unsigned int level); egl::Image *getRenderTarget(GLenum target, unsigned int level) override;
virtual bool isShared(GLenum target, unsigned int level) const; bool isShared(GLenum target, unsigned int level) const override;
egl::Image *getImage(unsigned int level); egl::Image *getImage(unsigned int level);
protected: protected:
virtual ~Texture2D(); ~Texture2D() override;
bool isMipmapComplete() const; bool isMipmapComplete() const;
...@@ -187,10 +187,10 @@ class TextureExternal : public Texture2D ...@@ -187,10 +187,10 @@ class TextureExternal : public Texture2D
public: public:
explicit TextureExternal(GLuint name); explicit TextureExternal(GLuint name);
virtual GLenum getTarget() const; GLenum getTarget() const override;
protected: protected:
virtual ~TextureExternal(); ~TextureExternal() override;
}; };
} }
......
...@@ -1611,48 +1611,9 @@ void Texture3D::setImage(GLint level, GLsizei width, GLsizei height, GLsizei dep ...@@ -1611,48 +1611,9 @@ void Texture3D::setImage(GLint level, GLsizei width, GLsizei height, GLsizei dep
Texture::setImage(format, type, unpackInfo, pixels, image[level]); 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() void Texture3D::releaseTexImage()
{ {
for(int level = 0; level < IMPLEMENTATION_MAX_TEXTURE_LEVELS; level++) UNREACHABLE(0); // 3D textures cannot have an EGL surface bound as an image
{
if(image[level])
{
image[level]->release();
image[level] = nullptr;
}
}
} }
void Texture3D::setCompressedImage(GLint level, GLenum format, GLsizei width, GLsizei height, GLsizei depth, GLsizei imageSize, const void *pixels) void Texture3D::setCompressedImage(GLint level, GLenum format, GLsizei width, GLsizei height, GLsizei depth, GLsizei imageSize, const void *pixels)
......
...@@ -49,7 +49,7 @@ class Texture : public egl::Texture ...@@ -49,7 +49,7 @@ class Texture : public egl::Texture
public: public:
explicit Texture(GLuint name); explicit Texture(GLuint name);
virtual sw::Resource *getResource() const; sw::Resource *getResource() const override;
virtual void addProxyRef(const Renderbuffer *proxy) = 0; virtual void addProxyRef(const Renderbuffer *proxy) = 0;
virtual void releaseProxy(const Renderbuffer *proxy) = 0; virtual void releaseProxy(const Renderbuffer *proxy) = 0;
...@@ -107,14 +107,14 @@ public: ...@@ -107,14 +107,14 @@ public:
virtual Renderbuffer *getRenderbuffer(GLenum target, GLint level, GLint layer) = 0; virtual Renderbuffer *getRenderbuffer(GLenum target, GLint level, GLint layer) = 0;
virtual egl::Image *getRenderTarget(GLenum target, unsigned int level) = 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 bool isShared(GLenum target, unsigned int level) const = 0;
virtual void generateMipmaps() = 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; 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: protected:
virtual ~Texture(); ~Texture() override;
void setImage(GLenum format, GLenum type, const egl::Image::UnpackInfo& unpackInfo, const void *pixels, egl::Image *image); 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); 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: ...@@ -156,40 +156,40 @@ public:
void releaseProxy(const Renderbuffer *proxy) override; void releaseProxy(const Renderbuffer *proxy) override;
void sweep() override; void sweep() override;
virtual GLenum getTarget() const; GLenum getTarget() const override;
virtual GLsizei getWidth(GLenum target, GLint level) const; GLsizei getWidth(GLenum target, GLint level) const override;
virtual GLsizei getHeight(GLenum target, GLint level) const; GLsizei getHeight(GLenum target, GLint level) const override;
virtual GLenum getFormat(GLenum target, GLint level) const; GLenum getFormat(GLenum target, GLint level) const override;
virtual GLenum getType(GLenum target, GLint level) const; GLenum getType(GLenum target, GLint level) const override;
virtual sw::Format getInternalFormat(GLenum target, GLint level) const; sw::Format getInternalFormat(GLenum target, GLint level) const override;
virtual int getLevelCount() const; 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 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 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 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 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); 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); void setSharedImage(egl::Image *image);
virtual bool isSamplerComplete() const; bool isSamplerComplete() const override;
virtual bool isCompressed(GLenum target, GLint level) const; bool isCompressed(GLenum target, GLint level) const override;
virtual bool isDepth(GLenum target, GLint level) const; bool isDepth(GLenum target, GLint level) const override;
virtual void bindTexImage(gl::Surface *surface); void bindTexImage(gl::Surface *surface);
virtual void releaseTexImage(); void releaseTexImage() override;
virtual void generateMipmaps(); void generateMipmaps() override;
virtual Renderbuffer *getRenderbuffer(GLenum target, GLint level, GLint layer); Renderbuffer *getRenderbuffer(GLenum target, GLint level, GLint layer) override;
virtual egl::Image *getRenderTarget(GLenum target, unsigned int level); egl::Image *getRenderTarget(GLenum target, unsigned int level) override;
virtual bool isShared(GLenum target, unsigned int level) const; bool isShared(GLenum target, unsigned int level) const override;
egl::Image *getImage(unsigned int level); egl::Image *getImage(unsigned int level);
protected: protected:
virtual ~Texture2D(); ~Texture2D() override;
bool isMipmapComplete() const; bool isMipmapComplete() const;
...@@ -215,14 +215,14 @@ public: ...@@ -215,14 +215,14 @@ public:
void releaseProxy(const Renderbuffer *proxy) override; void releaseProxy(const Renderbuffer *proxy) override;
void sweep() override; void sweep() override;
virtual GLenum getTarget() const; GLenum getTarget() const override;
virtual GLsizei getWidth(GLenum target, GLint level) const; GLsizei getWidth(GLenum target, GLint level) const override;
virtual GLsizei getHeight(GLenum target, GLint level) const; GLsizei getHeight(GLenum target, GLint level) const override;
virtual GLenum getFormat(GLenum target, GLint level) const; GLenum getFormat(GLenum target, GLint level) const override;
virtual GLenum getType(GLenum target, GLint level) const; GLenum getType(GLenum target, GLint level) const override;
virtual sw::Format getInternalFormat(GLenum target, GLint level) const; sw::Format getInternalFormat(GLenum target, GLint level) const override;
virtual int getLevelCount() const; 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 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); void setCompressedImage(GLenum target, GLint level, GLenum format, GLsizei width, GLsizei height, GLsizei imageSize, const void *pixels);
...@@ -230,23 +230,23 @@ public: ...@@ -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 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 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); 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; bool isSamplerComplete() const override;
virtual bool isCompressed(GLenum target, GLint level) const; bool isCompressed(GLenum target, GLint level) const override;
virtual bool isDepth(GLenum target, GLint level) const; bool isDepth(GLenum target, GLint level) const override;
virtual void releaseTexImage(); void releaseTexImage() override;
virtual void generateMipmaps(); void generateMipmaps() override;
virtual Renderbuffer *getRenderbuffer(GLenum target, GLint level, GLint layer); Renderbuffer *getRenderbuffer(GLenum target, GLint level, GLint layer) override;
virtual egl::Image *getRenderTarget(GLenum target, unsigned int level); egl::Image *getRenderTarget(GLenum target, unsigned int level) override;
virtual bool isShared(GLenum target, unsigned int level) const; bool isShared(GLenum target, unsigned int level) const override;
egl::Image *getImage(int face, unsigned int level); egl::Image *getImage(int face, unsigned int level);
protected: protected:
virtual ~TextureCubeMap(); ~TextureCubeMap() override;
private: private:
bool isCubeComplete() const; bool isCubeComplete() const;
...@@ -275,15 +275,15 @@ public: ...@@ -275,15 +275,15 @@ public:
void releaseProxy(const Renderbuffer *proxy) override; void releaseProxy(const Renderbuffer *proxy) override;
void sweep() override; void sweep() override;
virtual GLenum getTarget() const; GLenum getTarget() const override;
virtual GLsizei getWidth(GLenum target, GLint level) const; GLsizei getWidth(GLenum target, GLint level) const override;
virtual GLsizei getHeight(GLenum target, GLint level) const; GLsizei getHeight(GLenum target, GLint level) const override;
virtual GLsizei getDepth(GLenum target, GLint level) const; GLsizei getDepth(GLenum target, GLint level) const override;
virtual GLenum getFormat(GLenum target, GLint level) const; GLenum getFormat(GLenum target, GLint level) const override;
virtual GLenum getType(GLenum target, GLint level) const; GLenum getType(GLenum target, GLint level) const override;
virtual sw::Format getInternalFormat(GLenum target, GLint level) const; sw::Format getInternalFormat(GLenum target, GLint level) const override;
virtual int getLevelCount() const; 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 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); void setCompressedImage(GLint level, GLenum format, GLsizei width, GLsizei height, GLsizei depth, GLsizei imageSize, const void *pixels);
...@@ -294,22 +294,21 @@ public: ...@@ -294,22 +294,21 @@ public:
void setSharedImage(egl::Image *image); void setSharedImage(egl::Image *image);
virtual bool isSamplerComplete() const; bool isSamplerComplete() const override;
virtual bool isCompressed(GLenum target, GLint level) const; bool isCompressed(GLenum target, GLint level) const override;
virtual bool isDepth(GLenum target, GLint level) const; bool isDepth(GLenum target, GLint level) const override;
virtual void bindTexImage(gl::Surface *surface); void releaseTexImage() override;
virtual void releaseTexImage();
virtual void generateMipmaps(); void generateMipmaps() override;
virtual Renderbuffer *getRenderbuffer(GLenum target, GLint level, GLint layer); Renderbuffer *getRenderbuffer(GLenum target, GLint level, GLint layer) override;
virtual egl::Image *getRenderTarget(GLenum target, unsigned int level); egl::Image *getRenderTarget(GLenum target, unsigned int level) override;
virtual bool isShared(GLenum target, unsigned int level) const; bool isShared(GLenum target, unsigned int level) const override;
egl::Image *getImage(unsigned int level); egl::Image *getImage(unsigned int level);
protected: protected:
virtual ~Texture3D(); ~Texture3D() override;
bool isMipmapComplete() const; bool isMipmapComplete() const;
...@@ -331,11 +330,11 @@ class Texture2DArray : public Texture3D ...@@ -331,11 +330,11 @@ class Texture2DArray : public Texture3D
public: public:
explicit Texture2DArray(GLuint name); explicit Texture2DArray(GLuint name);
virtual GLenum getTarget() const; GLenum getTarget() const override;
virtual void generateMipmaps(); void generateMipmaps() override;
protected: protected:
virtual ~Texture2DArray(); ~Texture2DArray() override;
}; };
class TextureExternal : public Texture2D class TextureExternal : public Texture2D
...@@ -343,10 +342,10 @@ class TextureExternal : public Texture2D ...@@ -343,10 +342,10 @@ class TextureExternal : public Texture2D
public: public:
explicit TextureExternal(GLuint name); explicit TextureExternal(GLuint name);
virtual GLenum getTarget() const; GLenum getTarget() const override;
protected: protected:
virtual ~TextureExternal(); ~TextureExternal() override;
}; };
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment