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)
......
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