OSDN Git Service

Support GL_TEXTURE_2D targets in glEGLImageTargetTexture2DOES.
authorNicolas Capens <capn@google.com>
Mon, 10 Nov 2014 21:16:39 +0000 (16:16 -0500)
committerNicolas Capens <nicolascapens@google.com>
Mon, 10 Nov 2014 22:04:04 +0000 (22:04 +0000)
BUG=18316605

Change-Id: I46cf8b97fcb2d7606a94570ef1d742ce0f973dfb
Reviewed-on: https://swiftshader-review.googlesource.com/1356
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Tested-by: Nicolas Capens <nicolascapens@google.com>
src/OpenGL/libGLES_CM/Texture.cpp
src/OpenGL/libGLES_CM/Texture.h
src/OpenGL/libGLES_CM/libGLES_CM.cpp
src/OpenGL/libGLESv2/Texture.cpp
src/OpenGL/libGLESv2/Texture.h
src/OpenGL/libGLESv2/libGLESv2.cpp

index 7f12933..19ea8ab 100644 (file)
@@ -536,6 +536,18 @@ void Texture2D::copySubImage(GLenum target, GLint level, GLint xoffset, GLint yo
        renderTarget->release();\r
 }\r
 \r
+void Texture2D::setImage(egl::Image *sharedImage)\r
+{\r
+       sharedImage->addRef();\r
+\r
+    if(image[0])\r
+    {\r
+        image[0]->unbind();\r
+    }\r
+\r
+    image[0] = sharedImage;\r
+}\r
+\r
 // Tests for 2D texture sampling completeness. [OpenGL ES 2.0.24] section 3.8.2 page 85.\r
 bool Texture2D::isSamplerComplete() const\r
 {\r
@@ -707,23 +719,12 @@ GLenum TextureExternal::getTarget() const
     return GL_TEXTURE_EXTERNAL_OES;\r
 }\r
 \r
-void TextureExternal::setImage(Image *sharedImage)\r
-{\r
-    if(image[0])\r
-    {\r
-        image[0]->release();\r
-    }\r
-\r
-    sharedImage->addRef();\r
-    image[0] = sharedImage;\r
-}\r
-\r
 }\r
 \r
 // Exported functions for use by EGL\r
 extern "C"\r
 {\r
-       es1::Image *createBackBuffer(int width, int height, const egl::Config *config)\r
+       egl::Image *createBackBuffer(int width, int height, const egl::Config *config)\r
        {\r
                if(config)\r
                {\r
@@ -733,7 +734,7 @@ extern "C"
                return 0;\r
        }\r
 \r
-       es1::Image *createDepthStencil(unsigned int width, unsigned int height, sw::Format format, int multiSampleDepth, bool discard)\r
+       egl::Image *createDepthStencil(unsigned int width, unsigned int height, sw::Format format, int multiSampleDepth, bool discard)\r
        {\r
                if(width == 0 || height == 0 || height > OUTLINE_RESOLUTION)\r
                {\r
index 553a00c..d5f75d2 100644 (file)
@@ -136,6 +136,8 @@ public:
     void copyImage(GLint level, GLenum format, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source);\r
     void copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source);\r
 \r
+       void setImage(egl::Image *image);\r
+\r
     virtual bool isSamplerComplete() const;\r
     virtual bool isCompressed(GLenum target, GLint level) const;\r
        virtual bool isDepth(GLenum target, GLint level) const;\r
@@ -174,8 +176,6 @@ public:
     virtual ~TextureExternal();\r
 \r
     virtual GLenum getTarget() const;\r
-\r
-    void setImage(Image *image);\r
 };\r
 }\r
 \r
index cb725c9..7efba35 100644 (file)
@@ -4196,6 +4196,7 @@ void GL_APIENTRY glEGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image
     {\r
         switch(target)\r
         {\r
+               case GL_TEXTURE_2D:\r
         case GL_TEXTURE_EXTERNAL_OES:\r
             break;\r
         default:\r
@@ -4211,14 +4212,21 @@ void GL_APIENTRY glEGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image
 \r
         if(context)\r
         {\r
-            es1::TextureExternal *texture = context->getTextureExternal();\r
+            es1::Texture2D *texture = 0;\r
+                       \r
+                       switch(target)\r
+                       {\r
+                       case GL_TEXTURE_2D:           texture = context->getTexture2D();       break;\r
+                       case GL_TEXTURE_EXTERNAL_OES: texture = context->getTextureExternal(); break;\r
+                       default:                      UNREACHABLE();\r
+                       }\r
 \r
             if(!texture)\r
             {\r
                 return error(GL_INVALID_OPERATION);\r
             }\r
 \r
-            es1::Image *glImage = static_cast<es1::Image*>(image);\r
+            egl::Image *glImage = static_cast<egl::Image*>(image);\r
 \r
             texture->setImage(glImage);\r
         }\r
index 318ccaf..7d2386e 100644 (file)
@@ -536,6 +536,18 @@ void Texture2D::copySubImage(GLenum target, GLint level, GLint xoffset, GLint yo
        renderTarget->release();\r
 }\r
 \r
+void Texture2D::setImage(egl::Image *sharedImage)\r
+{\r
+       sharedImage->addRef();\r
+\r
+    if(image[0])\r
+    {\r
+        image[0]->unbind();\r
+    }\r
+\r
+    image[0] = sharedImage;\r
+}\r
+\r
 // Tests for 2D texture sampling completeness. [OpenGL ES 2.0.24] section 3.8.2 page 85.\r
 bool Texture2D::isSamplerComplete() const\r
 {\r
@@ -1140,23 +1152,12 @@ GLenum TextureExternal::getTarget() const
     return GL_TEXTURE_EXTERNAL_OES;\r
 }\r
 \r
-void TextureExternal::setImage(Image *sharedImage)\r
-{\r
-    if(image[0])\r
-    {\r
-        image[0]->release();\r
-    }\r
-\r
-    sharedImage->addRef();\r
-    image[0] = sharedImage;\r
-}\r
-\r
 }\r
 \r
 // Exported functions for use by EGL\r
 extern "C"\r
 {\r
-       es2::Image *createBackBuffer(int width, int height, const egl::Config *config)\r
+       egl::Image *createBackBuffer(int width, int height, const egl::Config *config)\r
        {\r
                if(config)\r
                {\r
@@ -1166,7 +1167,7 @@ extern "C"
                return 0;\r
        }\r
 \r
-       es2::Image *createDepthStencil(unsigned int width, unsigned int height, sw::Format format, int multiSampleDepth, bool discard)\r
+       egl::Image *createDepthStencil(unsigned int width, unsigned int height, sw::Format format, int multiSampleDepth, bool discard)\r
        {\r
                if(width == 0 || height == 0 || height > OUTLINE_RESOLUTION)\r
                {\r
index 2d1e2fe..841c01f 100644 (file)
@@ -136,6 +136,8 @@ public:
     void copyImage(GLint level, GLenum format, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source);\r
     void copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source);\r
 \r
+       void setImage(egl::Image *image);\r
+\r
     virtual bool isSamplerComplete() const;\r
     virtual bool isCompressed(GLenum target, GLint level) const;\r
        virtual bool isDepth(GLenum target, GLint level) const;\r
@@ -231,8 +233,6 @@ public:
     virtual ~TextureExternal();\r
 \r
     virtual GLenum getTarget() const;\r
-\r
-    void setImage(Image *image);\r
 };\r
 }\r
 \r
index cf263dc..e03d6da 100644 (file)
@@ -6110,6 +6110,7 @@ void GL_APIENTRY glEGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image
     {\r
         switch(target)\r
         {\r
+               case GL_TEXTURE_2D:\r
         case GL_TEXTURE_EXTERNAL_OES:\r
             break;\r
         default:\r
@@ -6125,14 +6126,21 @@ void GL_APIENTRY glEGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image
 \r
         if(context)\r
         {\r
-            es2::TextureExternal *texture = context->getTextureExternal();\r
+            es2::Texture2D *texture = 0;\r
+                       \r
+                       switch(target)\r
+                       {\r
+                       case GL_TEXTURE_2D:           texture = context->getTexture2D();       break;\r
+                       case GL_TEXTURE_EXTERNAL_OES: texture = context->getTextureExternal(); break;\r
+                       default:                      UNREACHABLE();\r
+                       }\r
 \r
             if(!texture)\r
             {\r
                 return error(GL_INVALID_OPERATION);\r
             }\r
 \r
-            es2::Image *glImage = static_cast<es2::Image*>(image);\r
+            egl::Image *glImage = static_cast<egl::Image*>(image);\r
 \r
             texture->setImage(glImage);\r
         }\r