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;