summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/angle/src/libGLESv2/Texture.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/angle/src/libGLESv2/Texture.h')
-rw-r--r--src/3rdparty/angle/src/libGLESv2/Texture.h242
1 files changed, 42 insertions, 200 deletions
diff --git a/src/3rdparty/angle/src/libGLESv2/Texture.h b/src/3rdparty/angle/src/libGLESv2/Texture.h
index 7d7378f88b..4f5fab28d0 100644
--- a/src/3rdparty/angle/src/libGLESv2/Texture.h
+++ b/src/3rdparty/angle/src/libGLESv2/Texture.h
@@ -1,5 +1,5 @@
//
-// Copyright (c) 2002-2012 The ANGLE Project Authors. All rights reserved.
+// Copyright (c) 2002-2013 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
@@ -15,22 +15,30 @@
#define GL_APICALL
#include <GLES2/gl2.h>
-#include <d3d9.h>
#include "common/debug.h"
#include "common/RefCountObject.h"
-#include "libGLESv2/Renderbuffer.h"
-#include "libGLESv2/utilities.h"
+#include "libGLESv2/angletypes.h"
namespace egl
{
class Surface;
}
+namespace rx
+{
+class Renderer;
+class TextureStorageInterface;
+class TextureStorageInterface2D;
+class TextureStorageInterfaceCube;
+class RenderTarget;
+class Image;
+}
+
namespace gl
{
-class Blit;
class Framebuffer;
+class Renderbuffer;
enum
{
@@ -43,132 +51,10 @@ enum
IMPLEMENTATION_MAX_TEXTURE_LEVELS = 15 // 1+log2 of MAX_TEXTURE_SIZE
};
-class Image
-{
- public:
- Image();
- ~Image();
-
- bool redefine(GLint internalformat, GLsizei width, GLsizei height, bool forceRelease);
- void markDirty() {mDirty = true;}
- void markClean() {mDirty = false;}
-
- bool isRenderableFormat() const;
- D3DFORMAT getD3DFormat() const;
-
- GLsizei getWidth() const {return mWidth;}
- GLsizei getHeight() const {return mHeight;}
- GLenum getInternalFormat() const {return mInternalFormat;}
- bool isDirty() const {return mSurface && mDirty;}
- IDirect3DSurface9 *getSurface();
-
- void setManagedSurface(IDirect3DSurface9 *surface);
- void updateSurface(IDirect3DSurface9 *dest, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height);
-
- void loadData(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
- GLint unpackAlignment, const void *input);
-
- void loadAlphaData(GLsizei width, GLsizei height,
- int inputPitch, const void *input, size_t outputPitch, void *output) const;
- void loadAlphaDataSSE2(GLsizei width, GLsizei height,
- int inputPitch, const void *input, size_t outputPitch, void *output) const;
- void loadAlphaFloatData(GLsizei width, GLsizei height,
- int inputPitch, const void *input, size_t outputPitch, void *output) const;
- void loadAlphaHalfFloatData(GLsizei width, GLsizei height,
- int inputPitch, const void *input, size_t outputPitch, void *output) const;
- void loadLuminanceData(GLsizei width, GLsizei height,
- int inputPitch, const void *input, size_t outputPitch, void *output, bool native) const;
- void loadLuminanceFloatData(GLsizei width, GLsizei height,
- int inputPitch, const void *input, size_t outputPitch, void *output) const;
- void loadLuminanceHalfFloatData(GLsizei width, GLsizei height,
- int inputPitch, const void *input, size_t outputPitch, void *output) const;
- void loadLuminanceAlphaData(GLsizei width, GLsizei height,
- int inputPitch, const void *input, size_t outputPitch, void *output, bool native) const;
- void loadLuminanceAlphaFloatData(GLsizei width, GLsizei height,
- int inputPitch, const void *input, size_t outputPitch, void *output) const;
- void loadLuminanceAlphaHalfFloatData(GLsizei width, GLsizei height,
- int inputPitch, const void *input, size_t outputPitch, void *output) const;
- void loadRGBUByteData(GLsizei width, GLsizei height,
- int inputPitch, const void *input, size_t outputPitch, void *output) const;
- void loadRGB565Data(GLsizei width, GLsizei height,
- int inputPitch, const void *input, size_t outputPitch, void *output) const;
- void loadRGBFloatData(GLsizei width, GLsizei height,
- int inputPitch, const void *input, size_t outputPitch, void *output) const;
- void loadRGBHalfFloatData(GLsizei width, GLsizei height,
- int inputPitch, const void *input, size_t outputPitch, void *output) const;
- void loadRGBAUByteDataSSE2(GLsizei width, GLsizei height,
- int inputPitch, const void *input, size_t outputPitch, void *output) const;
- void loadRGBAUByteData(GLsizei width, GLsizei height,
- int inputPitch, const void *input, size_t outputPitch, void *output) const;
- void loadRGBA4444Data(GLsizei width, GLsizei height,
- int inputPitch, const void *input, size_t outputPitch, void *output) const;
- void loadRGBA5551Data(GLsizei width, GLsizei height,
- int inputPitch, const void *input, size_t outputPitch, void *output) const;
- void loadRGBAFloatData(GLsizei width, GLsizei height,
- int inputPitch, const void *input, size_t outputPitch, void *output) const;
- void loadRGBAHalfFloatData(GLsizei width, GLsizei height,
- int inputPitch, const void *input, size_t outputPitch, void *output) const;
- void loadBGRAData(GLsizei width, GLsizei height,
- int inputPitch, const void *input, size_t outputPitch, void *output) const;
- void loadCompressedData(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
- const void *input);
-
- void copy(GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height, IDirect3DSurface9 *renderTarget);
-
- private:
- DISALLOW_COPY_AND_ASSIGN(Image);
-
- void createSurface();
-
- HRESULT lock(D3DLOCKED_RECT *lockedRect, const RECT *rect);
- void unlock();
-
- GLsizei mWidth;
- GLsizei mHeight;
- GLint mInternalFormat;
-
- bool mDirty;
-
- D3DPOOL mD3DPool; // can only be D3DPOOL_SYSTEMMEM or D3DPOOL_MANAGED since it needs to be lockable.
- D3DFORMAT mD3DFormat;
-
- IDirect3DSurface9 *mSurface;
-};
-
-class TextureStorage
-{
- public:
- explicit TextureStorage(DWORD usage);
-
- virtual ~TextureStorage();
-
- bool isRenderTarget() const;
- bool isManaged() const;
- D3DPOOL getPool() const;
- DWORD getUsage() const;
- unsigned int getTextureSerial() const;
- virtual unsigned int getRenderTargetSerial(GLenum target) const = 0;
- int getLodOffset() const;
-
- protected:
- int mLodOffset;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(TextureStorage);
-
- const DWORD mD3DUsage;
- const D3DPOOL mD3DPool;
-
- const unsigned int mTextureSerial;
- static unsigned int issueTextureSerial();
-
- static unsigned int mCurrentTextureSerial;
-};
-
class Texture : public RefCountObject
{
public:
- explicit Texture(GLuint id);
+ Texture(rx::Renderer *renderer, GLuint id);
virtual ~Texture();
@@ -189,11 +75,14 @@ class Texture : public RefCountObject
GLenum getWrapS() const;
GLenum getWrapT() const;
float getMaxAnisotropy() const;
+ int getLodOffset();
+ void getSamplerState(SamplerState *sampler);
GLenum getUsage() const;
+ bool isMipmapFiltered() const;
virtual bool isSamplerComplete() const = 0;
- IDirect3DBaseTexture9 *getTexture();
+ rx::TextureStorageInterface *getNativeTexture();
virtual Renderbuffer *getRenderbuffer(GLenum target) = 0;
virtual void generateMipmaps() = 0;
@@ -206,36 +95,28 @@ class Texture : public RefCountObject
unsigned int getRenderTargetSerial(GLenum target);
bool isImmutable() const;
- int getLodOffset();
static const GLuint INCOMPLETE_TEXTURE_ID = static_cast<GLuint>(-1); // Every texture takes an id at creation time. The value is arbitrary because it is never registered with the resource manager.
protected:
- void setImage(GLint unpackAlignment, const void *pixels, Image *image);
- bool subImage(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint unpackAlignment, const void *pixels, Image *image);
- void setCompressedImage(GLsizei imageSize, const void *pixels, Image *image);
- bool subImageCompressed(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *pixels, Image *image);
+ void setImage(GLint unpackAlignment, const void *pixels, rx::Image *image);
+ bool subImage(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint unpackAlignment, const void *pixels, rx::Image *image);
+ void setCompressedImage(GLsizei imageSize, const void *pixels, rx::Image *image);
+ bool subImageCompressed(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *pixels, rx::Image *image);
GLint creationLevels(GLsizei width, GLsizei height) const;
GLint creationLevels(GLsizei size) const;
- virtual IDirect3DBaseTexture9 *getBaseTexture() const = 0;
virtual void createTexture() = 0;
virtual void updateTexture() = 0;
virtual void convertToRenderTarget() = 0;
- virtual IDirect3DSurface9 *getRenderTarget(GLenum target) = 0;
+ virtual rx::RenderTarget *getRenderTarget(GLenum target) = 0;
- int levelCount();
+ virtual int levelCount() = 0;
- static Blit *getBlitter();
- static bool copyToRenderTarget(IDirect3DSurface9 *dest, IDirect3DSurface9 *source, bool fromManaged);
+ rx::Renderer *mRenderer;
- GLenum mMinFilter;
- GLenum mMagFilter;
- GLenum mWrapS;
- GLenum mWrapT;
- float mMaxAnisotropy;
- bool mDirtyParameters;
+ SamplerState mSamplerState;
GLenum mUsage;
bool mDirtyImages;
@@ -245,33 +126,13 @@ class Texture : public RefCountObject
private:
DISALLOW_COPY_AND_ASSIGN(Texture);
- virtual TextureStorage *getStorage(bool renderTarget) = 0;
-};
-
-class TextureStorage2D : public TextureStorage
-{
- public:
- explicit TextureStorage2D(IDirect3DTexture9 *surfaceTexture);
- TextureStorage2D(int levels, D3DFORMAT format, DWORD usage, int width, int height);
-
- virtual ~TextureStorage2D();
-
- IDirect3DSurface9 *getSurfaceLevel(int level, bool dirty);
- IDirect3DBaseTexture9 *getBaseTexture() const;
-
- virtual unsigned int getRenderTargetSerial(GLenum target) const;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(TextureStorage2D);
-
- IDirect3DTexture9 *mTexture;
- const unsigned int mRenderTargetSerial;
+ virtual rx::TextureStorageInterface *getStorage(bool renderTarget) = 0;
};
class Texture2D : public Texture
{
public:
- explicit Texture2D(GLuint id);
+ Texture2D(rx::Renderer *renderer, GLuint id);
~Texture2D();
@@ -283,7 +144,7 @@ class Texture2D : public Texture
GLsizei getWidth(GLint level) const;
GLsizei getHeight(GLint level) const;
GLenum getInternalFormat(GLint level) const;
- D3DFORMAT getD3DFormat(GLint level) const;
+ GLenum getActualFormat(GLint level) const;
bool isCompressed(GLint level) const;
bool isDepth(GLint level) const;
@@ -305,26 +166,26 @@ class Texture2D : public Texture
protected:
friend class RenderbufferTexture2D;
- virtual IDirect3DSurface9 *getRenderTarget(GLenum target);
- virtual IDirect3DSurface9 *getDepthStencil(GLenum target);
+ virtual rx::RenderTarget *getRenderTarget(GLenum target);
+ virtual rx::RenderTarget *getDepthStencil(GLenum target);
+ virtual int levelCount();
private:
DISALLOW_COPY_AND_ASSIGN(Texture2D);
- virtual IDirect3DBaseTexture9 *getBaseTexture() const;
virtual void createTexture();
virtual void updateTexture();
virtual void convertToRenderTarget();
- virtual TextureStorage *getStorage(bool renderTarget);
+ virtual rx::TextureStorageInterface *getStorage(bool renderTarget);
bool isMipmapComplete() const;
void redefineImage(GLint level, GLint internalformat, GLsizei width, GLsizei height);
void commitRect(GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height);
- Image mImageArray[IMPLEMENTATION_MAX_TEXTURE_LEVELS];
+ rx::Image *mImageArray[IMPLEMENTATION_MAX_TEXTURE_LEVELS];
- TextureStorage2D *mTexStorage;
+ rx::TextureStorageInterface2D *mTexStorage;
egl::Surface *mSurface;
// A specific internal reference count is kept for colorbuffer proxy references,
@@ -336,29 +197,10 @@ class Texture2D : public Texture
unsigned int mProxyRefs;
};
-class TextureStorageCubeMap : public TextureStorage
-{
- public:
- TextureStorageCubeMap(int levels, D3DFORMAT format, DWORD usage, int size);
-
- virtual ~TextureStorageCubeMap();
-
- IDirect3DSurface9 *getCubeMapSurface(GLenum faceTarget, int level, bool dirty);
- IDirect3DBaseTexture9 *getBaseTexture() const;
-
- virtual unsigned int getRenderTargetSerial(GLenum target) const;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(TextureStorageCubeMap);
-
- IDirect3DCubeTexture9 *mTexture;
- const unsigned int mFirstRenderTargetSerial;
-};
-
class TextureCubeMap : public Texture
{
public:
- explicit TextureCubeMap(GLuint id);
+ TextureCubeMap(rx::Renderer *renderer, GLuint id);
~TextureCubeMap();
@@ -370,7 +212,7 @@ class TextureCubeMap : public Texture
GLsizei getWidth(GLenum target, GLint level) const;
GLsizei getHeight(GLenum target, GLint level) const;
GLenum getInternalFormat(GLenum target, GLint level) const;
- D3DFORMAT getD3DFormat(GLenum target, GLint level) const;
+ GLenum getActualFormat(GLenum target, GLint level) const;
bool isCompressed(GLenum target, GLint level) const;
void setImagePosX(GLint level, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint unpackAlignment, const void *pixels);
@@ -398,16 +240,16 @@ class TextureCubeMap : public Texture
protected:
friend class RenderbufferTextureCubeMap;
- virtual IDirect3DSurface9 *getRenderTarget(GLenum target);
+ virtual rx::RenderTarget *getRenderTarget(GLenum target);
+ virtual int levelCount();
private:
DISALLOW_COPY_AND_ASSIGN(TextureCubeMap);
- virtual IDirect3DBaseTexture9 *getBaseTexture() const;
virtual void createTexture();
virtual void updateTexture();
virtual void convertToRenderTarget();
- virtual TextureStorage *getStorage(bool renderTarget);
+ virtual rx::TextureStorageInterface *getStorage(bool renderTarget);
bool isCubeComplete() const;
bool isMipmapCubeComplete() const;
@@ -416,9 +258,9 @@ class TextureCubeMap : public Texture
void commitRect(int faceIndex, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height);
void redefineImage(int faceIndex, GLint level, GLint internalformat, GLsizei width, GLsizei height);
- Image mImageArray[6][IMPLEMENTATION_MAX_TEXTURE_LEVELS];
+ rx::Image *mImageArray[6][IMPLEMENTATION_MAX_TEXTURE_LEVELS];
- TextureStorageCubeMap *mTexStorage;
+ rx::TextureStorageInterfaceCube *mTexStorage;
// A specific internal reference count is kept for colorbuffer proxy references,
// because, as the renderbuffer acting as proxy will maintain a binding pointer