Implement texture enable.

BUG=18110152

Change-Id: I47b38cb10ea0b73c522817f9dbe5a5d118f3c599
Reviewed-on: https://swiftshader-review.googlesource.com/1282
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Tested-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/GLES2/libGLES_CM/Context.cpp b/src/GLES2/libGLES_CM/Context.cpp
index 428ba7b..86f6be2 100644
--- a/src/GLES2/libGLES_CM/Context.cpp
+++ b/src/GLES2/libGLES_CM/Context.cpp
@@ -167,6 +167,7 @@
     markAllStateDirty();

 

     matrixMode = GL_MODELVIEW;

+    texture2D = false;

 }

 

 Context::~Context()

@@ -178,7 +179,7 @@
 	

     for(int type = 0; type < TEXTURE_TYPE_COUNT; type++)

     {

-        for(int sampler = 0; sampler < MAX_TEXTURE_IMAGE_UNITS; sampler++)

+        for(int sampler = 0; sampler < MAX_TEXTURE_UNITS; sampler++)

         {

             mState.samplerTexture[type][sampler].set(NULL);

         }

@@ -571,6 +572,11 @@
 	light[index].attenuation.quadratic = quadratic;

 }

 

+void Context::setTexture2D(bool enable)

+{

+    texture2D = enable;

+}

+

 void Context::setLineWidth(GLfloat width)

 {

     mState.lineWidth = width;

@@ -1135,7 +1141,7 @@
         break;

     case GL_TEXTURE_BINDING_2D:

         {

-            if(mState.activeSampler < 0 || mState.activeSampler > MAX_TEXTURE_IMAGE_UNITS - 1)

+            if(mState.activeSampler < 0 || mState.activeSampler > MAX_TEXTURE_UNITS - 1)

             {

                 error(GL_INVALID_OPERATION);

                 return false;

@@ -1146,7 +1152,7 @@
         break;

     case GL_TEXTURE_BINDING_CUBE_MAP_OES:

         {

-            if(mState.activeSampler < 0 || mState.activeSampler > MAX_TEXTURE_IMAGE_UNITS - 1)

+            if(mState.activeSampler < 0 || mState.activeSampler > MAX_TEXTURE_UNITS - 1)

             {

                 error(GL_INVALID_OPERATION);

                 return false;

@@ -1157,7 +1163,7 @@
         break;

     case GL_TEXTURE_BINDING_EXTERNAL_OES:

         {

-            if(mState.activeSampler < 0 || mState.activeSampler > MAX_TEXTURE_IMAGE_UNITS - 1)

+            if(mState.activeSampler < 0 || mState.activeSampler > MAX_TEXTURE_UNITS - 1)

             {

                 error(GL_INVALID_OPERATION);

                 return false;

@@ -1170,6 +1176,7 @@
     case GL_MAX_MODELVIEW_STACK_DEPTH:  *params = MAX_MODELVIEW_STACK_DEPTH;  break;

 	case GL_MAX_PROJECTION_STACK_DEPTH: *params = MAX_PROJECTION_STACK_DEPTH; break;

 	case GL_MAX_TEXTURE_STACK_DEPTH:    *params = MAX_TEXTURE_STACK_DEPTH;    break;

+	case GL_MAX_TEXTURE_UNITS:          *params = MAX_TEXTURE_UNITS;          break;

     default:

         return false;

     }

@@ -1232,7 +1239,6 @@
     case GL_TEXTURE_BINDING_2D:

     case GL_TEXTURE_BINDING_CUBE_MAP_OES:

     case GL_TEXTURE_BINDING_EXTERNAL_OES:

-	case GL_MAX_TEXTURE_UNITS:

         return 1;

     case GL_MAX_VIEWPORT_DIMS:

         return 2;

@@ -1270,6 +1276,7 @@
 	case GL_MAX_MODELVIEW_STACK_DEPTH:

 	case GL_MAX_PROJECTION_STACK_DEPTH:

 	case GL_MAX_TEXTURE_STACK_DEPTH:

+	case GL_MAX_TEXTURE_UNITS:

         return 1;

 	default:

 		UNREACHABLE();

@@ -1339,6 +1346,7 @@
 	case GL_MAX_MODELVIEW_STACK_DEPTH:

 	case GL_MAX_PROJECTION_STACK_DEPTH:

 	case GL_MAX_TEXTURE_STACK_DEPTH:

+	case GL_MAX_TEXTURE_UNITS:

         return true;

 	default:

 		ASSERT(isQueryParameterFloat(pname) || isQueryParameterBool(pname));

@@ -1711,7 +1719,7 @@
 

 void Context::applyTextures()

 {

-    for(int samplerIndex = 0; samplerIndex < MAX_TEXTURE_IMAGE_UNITS; samplerIndex++)

+    for(int samplerIndex = 0; samplerIndex < MAX_TEXTURE_UNITS; samplerIndex++)

     {

 		UNIMPLEMENTED();

         TextureType textureType = TEXTURE_2D;

@@ -2259,7 +2267,7 @@
 

     for(int type = 0; type < TEXTURE_TYPE_COUNT; type++)

     {

-        for(int sampler = 0; sampler < MAX_TEXTURE_IMAGE_UNITS; sampler++)

+        for(int sampler = 0; sampler < MAX_TEXTURE_UNITS; sampler++)

         {

             if(mState.samplerTexture[type][sampler].id() == texture)

             {

diff --git a/src/GLES2/libGLES_CM/Context.h b/src/GLES2/libGLES_CM/Context.h
index 24b621f..cbd91e5 100644
--- a/src/GLES2/libGLES_CM/Context.h
+++ b/src/GLES2/libGLES_CM/Context.h
@@ -63,7 +63,7 @@
 {

     MAX_VERTEX_ATTRIBS = 16,

     MAX_VARYING_VECTORS = 10,

-    MAX_TEXTURE_IMAGE_UNITS = 16,

+    MAX_TEXTURE_UNITS = 2,

     MAX_DRAW_BUFFERS = 1,

 	MAX_LIGHTS = 8,

 

@@ -247,7 +247,7 @@
     BindingPointer<Renderbuffer> renderbuffer;

 

     VertexAttribute vertexAttribute[MAX_VERTEX_ATTRIBS];

-    BindingPointer<Texture> samplerTexture[TEXTURE_TYPE_COUNT][MAX_TEXTURE_IMAGE_UNITS];

+    BindingPointer<Texture> samplerTexture[TEXTURE_TYPE_COUNT][MAX_TEXTURE_UNITS];

 

     GLint unpackAlignment;

     GLint packAlignment;

@@ -313,6 +313,8 @@
 	void setLightAttenuationLinear(int index, float linear);

 	void setLightAttenuationQuadratic(int index, float quadratic);

 

+    void setTexture2D(bool enabled);

+

     void setLineWidth(GLfloat width);

 

     void setGenerateMipmapHint(GLenum hint);

@@ -494,6 +496,8 @@
 	sw::MatrixStack textureStack0;

 	sw::MatrixStack textureStack1;

 

+	bool texture2D;

+

     ResourceManager *mResourceManager;

 

 	static Device *device;

diff --git a/src/GLES2/libGLES_CM/libGLES_CM.cpp b/src/GLES2/libGLES_CM/libGLES_CM.cpp
index 2b9ffe8..2e42229 100644
--- a/src/GLES2/libGLES_CM/libGLES_CM.cpp
+++ b/src/GLES2/libGLES_CM/libGLES_CM.cpp
@@ -351,7 +351,7 @@
 

         if(context)

         {

-            if(texture < GL_TEXTURE0 || texture > GL_TEXTURE0 + es1::MAX_TEXTURE_IMAGE_UNITS - 1)

+            if(texture < GL_TEXTURE0 || texture > GL_TEXTURE0 + es1::MAX_TEXTURE_UNITS - 1)

             {

                 return error(GL_INVALID_ENUM);

             }

@@ -1587,7 +1587,7 @@
 			case GL_LIGHT6:                   context->setLight(6, false);              break;

 			case GL_LIGHT7:                   context->setLight(7, false);              break;

 			case GL_FOG:                      UNIMPLEMENTED(); break;

-			case GL_TEXTURE_2D:               UNIMPLEMENTED(); break;

+			case GL_TEXTURE_2D:               context->setTexture2D(false);             break;

 			case GL_ALPHA_TEST:               UNIMPLEMENTED(); break;

 			case GL_COLOR_LOGIC_OP:           UNIMPLEMENTED(); break;

 			case GL_POINT_SMOOTH:             UNIMPLEMENTED(); break;

@@ -1707,7 +1707,7 @@
 			case GL_LIGHT6:                   context->setLight(6, true);              break;

 			case GL_LIGHT7:                   context->setLight(7, true);              break;

 			case GL_FOG:                      UNIMPLEMENTED(); break;

-			case GL_TEXTURE_2D:               UNIMPLEMENTED(); break;

+			case GL_TEXTURE_2D:               context->setTexture2D(true);             break;

 			case GL_ALPHA_TEST:               UNIMPLEMENTED(); break;

 			case GL_COLOR_LOGIC_OP:           UNIMPLEMENTED(); break;

 			case GL_POINT_SMOOTH:             UNIMPLEMENTED(); break;