Commit 23dc90b8 by Lingfeng Yang Committed by Commit Bot

GLES1: Enable/disable for texture targets

BUG=angleproject:2306 Change-Id: I08ac9ef91753112f8185d16423925cf265f0384e Reviewed-on: https://chromium-review.googlesource.com/1023987 Commit-Queue: Lingfeng Yang <lfy@google.com> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent f827123d
...@@ -227,7 +227,8 @@ Extensions::Extensions() ...@@ -227,7 +227,8 @@ Extensions::Extensions()
programCacheControl(false), programCacheControl(false),
textureRectangle(false), textureRectangle(false),
geometryShader(false), geometryShader(false),
pointSizeArray(false) pointSizeArray(false),
textureCubeMap(false)
{ {
} }
...@@ -701,6 +702,7 @@ const ExtensionInfoMap &GetExtensionInfoMap() ...@@ -701,6 +702,7 @@ const ExtensionInfoMap &GetExtensionInfoMap()
map["GL_EXT_geometry_shader"] = enableableExtension(&Extensions::geometryShader); map["GL_EXT_geometry_shader"] = enableableExtension(&Extensions::geometryShader);
// GLES1 extensinos // GLES1 extensinos
map["GL_OES_point_size_array"] = enableableExtension(&Extensions::pointSizeArray); map["GL_OES_point_size_array"] = enableableExtension(&Extensions::pointSizeArray);
map["GL_OES_texture_cube_map"] = enableableExtension(&Extensions::textureCubeMap);
// clang-format on // clang-format on
return map; return map;
......
...@@ -376,7 +376,10 @@ struct Extensions ...@@ -376,7 +376,10 @@ struct Extensions
bool geometryShader; bool geometryShader;
// GLES1 emulation: GLES1 extensions // GLES1 emulation: GLES1 extensions
// GL_OES_point_size_array
bool pointSizeArray; bool pointSizeArray;
// GL_OES_texture_cube_map
bool textureCubeMap;
}; };
struct ExtensionInfo struct ExtensionInfo
......
...@@ -3011,6 +3011,7 @@ Extensions Context::generateSupportedExtensions(const egl::DisplayExtensions &di ...@@ -3011,6 +3011,7 @@ Extensions Context::generateSupportedExtensions(const egl::DisplayExtensions &di
{ {
// Default extensions for GLES1 // Default extensions for GLES1
supportedExtensions.pointSizeArray = true; supportedExtensions.pointSizeArray = true;
supportedExtensions.textureCubeMap = true;
} }
if (getClientVersion() < ES_3_0) if (getClientVersion() < ES_3_0)
......
...@@ -69,8 +69,7 @@ void GLES1State::initialize(const Context *context, const State *state) ...@@ -69,8 +69,7 @@ void GLES1State::initialize(const Context *context, const State *state)
mTexUnitEnables.resize(caps.maxMultitextureUnits); mTexUnitEnables.resize(caps.maxMultitextureUnits);
for (auto &enables : mTexUnitEnables) for (auto &enables : mTexUnitEnables)
{ {
enables.enable2D = false; enables.reset();
enables.enableCubeMap = false;
} }
mVertexArrayEnabled = false; mVertexArrayEnabled = false;
...@@ -313,4 +312,9 @@ bool GLES1State::isClientStateEnabled(ClientVertexArrayType clientState) const ...@@ -313,4 +312,9 @@ bool GLES1State::isClientStateEnabled(ClientVertexArrayType clientState) const
} }
} }
bool GLES1State::isTextureTargetEnabled(unsigned int unit, const TextureType type) const
{
return mTexUnitEnables[unit].test(type);
}
} // namespace gl } // namespace gl
...@@ -152,6 +152,7 @@ class GLES1State final : angle::NonCopyable ...@@ -152,6 +152,7 @@ class GLES1State final : angle::NonCopyable
void setClientStateEnabled(ClientVertexArrayType clientState, bool enable); void setClientStateEnabled(ClientVertexArrayType clientState, bool enable);
bool isClientStateEnabled(ClientVertexArrayType clientState) const; bool isClientStateEnabled(ClientVertexArrayType clientState) const;
bool isTextureTargetEnabled(unsigned int unit, const TextureType type) const;
private: private:
friend class State; friend class State;
...@@ -161,12 +162,7 @@ class GLES1State final : angle::NonCopyable ...@@ -161,12 +162,7 @@ class GLES1State final : angle::NonCopyable
// All initial state values come from the // All initial state values come from the
// OpenGL ES 1.1 spec. // OpenGL ES 1.1 spec.
struct TextureEnables std::vector<angle::PackedEnumBitSet<TextureType>> mTexUnitEnables;
{
bool enable2D = false;
bool enableCubeMap = false;
};
std::vector<TextureEnables> mTexUnitEnables;
// Table 6.4, 6.5 (IsEnabled) // Table 6.4, 6.5 (IsEnabled)
bool mVertexArrayEnabled; bool mVertexArrayEnabled;
......
...@@ -772,6 +772,12 @@ void State::setEnableFeature(GLenum feature, bool enabled) ...@@ -772,6 +772,12 @@ void State::setEnableFeature(GLenum feature, bool enabled)
case GL_ALPHA_TEST: case GL_ALPHA_TEST:
mGLES1State.mAlphaTestEnabled = enabled; mGLES1State.mAlphaTestEnabled = enabled;
break; break;
case GL_TEXTURE_2D:
mGLES1State.mTexUnitEnables[mActiveSampler].set(TextureType::_2D, enabled);
break;
case GL_TEXTURE_CUBE_MAP:
mGLES1State.mTexUnitEnables[mActiveSampler].set(TextureType::CubeMap, enabled);
break;
default: default:
UNREACHABLE(); UNREACHABLE();
...@@ -838,7 +844,10 @@ bool State::getEnableFeature(GLenum feature) const ...@@ -838,7 +844,10 @@ bool State::getEnableFeature(GLenum feature) const
return mGLES1State.mPointSizeArrayEnabled; return mGLES1State.mPointSizeArrayEnabled;
case GL_TEXTURE_COORD_ARRAY: case GL_TEXTURE_COORD_ARRAY:
return mGLES1State.mTexCoordArrayEnabled[mGLES1State.mClientActiveTexture]; return mGLES1State.mTexCoordArrayEnabled[mGLES1State.mClientActiveTexture];
case GL_TEXTURE_2D:
return mGLES1State.mTexUnitEnables[mActiveSampler].test(TextureType::_2D);
case GL_TEXTURE_CUBE_MAP:
return mGLES1State.mTexUnitEnables[mActiveSampler].test(TextureType::CubeMap);
default: default:
UNREACHABLE(); UNREACHABLE();
return false; return false;
......
...@@ -798,10 +798,14 @@ bool ValidCap(const Context *context, GLenum cap, bool queryOnly) ...@@ -798,10 +798,14 @@ bool ValidCap(const Context *context, GLenum cap, bool queryOnly)
case GL_NORMAL_ARRAY: case GL_NORMAL_ARRAY:
case GL_COLOR_ARRAY: case GL_COLOR_ARRAY:
case GL_TEXTURE_COORD_ARRAY: case GL_TEXTURE_COORD_ARRAY:
case GL_TEXTURE_2D:
return context->getClientVersion() < Version(2, 0); return context->getClientVersion() < Version(2, 0);
case GL_POINT_SIZE_ARRAY_OES: case GL_POINT_SIZE_ARRAY_OES:
return context->getClientVersion() < Version(2, 0) && return context->getClientVersion() < Version(2, 0) &&
context->getExtensions().pointSizeArray; context->getExtensions().pointSizeArray;
case GL_TEXTURE_CUBE_MAP:
return context->getClientVersion() < Version(2, 0) &&
context->getExtensions().textureCubeMap;
default: default:
return false; return false;
......
...@@ -58,6 +58,7 @@ ...@@ -58,6 +58,7 @@
'<(angle_path)/src/tests/gl_tests/gles1/MatrixModeTest.cpp', '<(angle_path)/src/tests/gl_tests/gles1/MatrixModeTest.cpp',
'<(angle_path)/src/tests/gl_tests/gles1/MatrixMultTest.cpp', '<(angle_path)/src/tests/gl_tests/gles1/MatrixMultTest.cpp',
'<(angle_path)/src/tests/gl_tests/gles1/MatrixStackTest.cpp', '<(angle_path)/src/tests/gl_tests/gles1/MatrixStackTest.cpp',
'<(angle_path)/src/tests/gl_tests/gles1/TextureTargetEnableTest.cpp',
'<(angle_path)/src/tests/gl_tests/gles1/VertexPointerTest.cpp', '<(angle_path)/src/tests/gl_tests/gles1/VertexPointerTest.cpp',
'<(angle_path)/src/tests/gl_tests/GLSLTest.cpp', '<(angle_path)/src/tests/gl_tests/GLSLTest.cpp',
'<(angle_path)/src/tests/gl_tests/ImageTest.cpp', '<(angle_path)/src/tests/gl_tests/ImageTest.cpp',
......
//
// Copyright 2018 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.
//
// TextureTargetEnableTest.cpp: Tests basic usage of built-in vertex attributes of GLES1.
#include "test_utils/ANGLETest.h"
#include "test_utils/gl_raii.h"
using namespace angle;
class TextureTargetEnableTest : public ANGLETest
{
protected:
TextureTargetEnableTest()
{
setWindowWidth(32);
setWindowHeight(32);
setConfigRedBits(8);
setConfigGreenBits(8);
setConfigBlueBits(8);
setConfigAlphaBits(8);
setConfigDepthBits(24);
}
};
// Checks that 2D/Cube targets are disabled initially.
TEST_P(TextureTargetEnableTest, InitialState)
{
EXPECT_GL_FALSE(glIsEnabled(GL_TEXTURE_2D));
EXPECT_GL_NO_ERROR();
EXPECT_GL_FALSE(glIsEnabled(GL_TEXTURE_CUBE_MAP));
EXPECT_GL_NO_ERROR();
}
// Checks that 2D/cube targets can be set to enabled or disabled.
TEST_P(TextureTargetEnableTest, Set)
{
glEnable(GL_TEXTURE_2D);
EXPECT_GL_NO_ERROR();
EXPECT_GL_TRUE(glIsEnabled(GL_TEXTURE_2D));
glEnable(GL_TEXTURE_CUBE_MAP);
EXPECT_GL_NO_ERROR();
EXPECT_GL_TRUE(glIsEnabled(GL_TEXTURE_CUBE_MAP));
}
// Checks that targets can be set to enabled or disabled and it does not affect the setting of
// other texture units.
TEST_P(TextureTargetEnableTest, SetSeparateUnits)
{
GLint units;
glGetIntegerv(GL_MAX_TEXTURE_UNITS, &units);
for (int i = 0; i < units; i++)
{
glActiveTexture(GL_TEXTURE0 + i);
EXPECT_GL_NO_ERROR();
EXPECT_GL_FALSE(glIsEnabled(GL_TEXTURE_2D));
EXPECT_GL_NO_ERROR();
EXPECT_GL_FALSE(glIsEnabled(GL_TEXTURE_CUBE_MAP));
EXPECT_GL_NO_ERROR();
glEnable(GL_TEXTURE_2D);
EXPECT_GL_NO_ERROR();
EXPECT_GL_TRUE(glIsEnabled(GL_TEXTURE_2D));
glEnable(GL_TEXTURE_CUBE_MAP);
EXPECT_GL_NO_ERROR();
EXPECT_GL_TRUE(glIsEnabled(GL_TEXTURE_CUBE_MAP));
}
}
ANGLE_INSTANTIATE_TEST(TextureTargetEnableTest, ES1_D3D11(), ES1_OPENGL(), ES1_OPENGLES());
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