Commit eb66a6e2 by Geoff Lang Committed by Commit Bot

Replace the GLVersion class with gl::Version.

Update code to use gl::Version in as many places as possible to ease ES 3.1 support. BUG=angleproject:1588 Change-Id: I3490b53a81027cf849dac551a9cc66ce04506144 Reviewed-on: https://chromium-review.googlesource.com/404946Reviewed-by: 's avatarCorentin Wallez <cwallez@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
parent cfe7b2c4
...@@ -149,6 +149,11 @@ EGLint GetClientMinorVersion(const egl::AttributeMap &attribs) ...@@ -149,6 +149,11 @@ EGLint GetClientMinorVersion(const egl::AttributeMap &attribs)
return static_cast<EGLint>(attribs.get(EGL_CONTEXT_MINOR_VERSION, 0)); return static_cast<EGLint>(attribs.get(EGL_CONTEXT_MINOR_VERSION, 0));
} }
gl::Version GetClientVersion(const egl::AttributeMap &attribs)
{
return gl::Version(GetClientMajorVersion(attribs), GetClientMinorVersion(attribs));
}
GLenum GetResetStrategy(const egl::AttributeMap &attribs) GLenum GetResetStrategy(const egl::AttributeMap &attribs)
{ {
EGLAttrib attrib = attribs.get(EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_EXT, EGLAttrib attrib = attribs.get(EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_EXT,
...@@ -230,8 +235,7 @@ Context::Context(rx::EGLImplFactory *implFactory, ...@@ -230,8 +235,7 @@ Context::Context(rx::EGLImplFactory *implFactory,
const Context *shareContext, const Context *shareContext,
const egl::AttributeMap &attribs) const egl::AttributeMap &attribs)
: ValidationContext(GetClientMajorVersion(attribs), : ValidationContext(GetClientVersion(attribs),
GetClientMinorVersion(attribs),
&mGLState, &mGLState,
mCaps, mCaps,
mTextureCaps, mTextureCaps,
...@@ -241,8 +245,6 @@ Context::Context(rx::EGLImplFactory *implFactory, ...@@ -241,8 +245,6 @@ Context::Context(rx::EGLImplFactory *implFactory,
GetNoError(attribs)), GetNoError(attribs)),
mImplementation(implFactory->createContext(mState)), mImplementation(implFactory->createContext(mState)),
mCompiler(nullptr), mCompiler(nullptr),
mClientMajorVersion(GetClientMajorVersion(attribs)),
mClientMinorVersion(GetClientMinorVersion(attribs)),
mConfig(config), mConfig(config),
mClientType(EGL_OPENGL_ES_API), mClientType(EGL_OPENGL_ES_API),
mHasBeenCurrent(false), mHasBeenCurrent(false),
...@@ -259,7 +261,7 @@ Context::Context(rx::EGLImplFactory *implFactory, ...@@ -259,7 +261,7 @@ Context::Context(rx::EGLImplFactory *implFactory,
initCaps(GetWebGLContext(attribs)); initCaps(GetWebGLContext(attribs));
initWorkarounds(); initWorkarounds();
mGLState.initialize(mCaps, mExtensions, mClientMajorVersion, GetDebug(attribs), mGLState.initialize(mCaps, mExtensions, getClientVersion(), GetDebug(attribs),
GetBindGeneratesResource(attribs)); GetBindGeneratesResource(attribs));
mFenceNVHandleAllocator.setBaseHandle(0); mFenceNVHandleAllocator.setBaseHandle(0);
...@@ -288,7 +290,7 @@ Context::Context(rx::EGLImplFactory *implFactory, ...@@ -288,7 +290,7 @@ Context::Context(rx::EGLImplFactory *implFactory,
Texture *zeroTextureCube = new Texture(mImplementation.get(), 0, GL_TEXTURE_CUBE_MAP); Texture *zeroTextureCube = new Texture(mImplementation.get(), 0, GL_TEXTURE_CUBE_MAP);
mZeroTextures[GL_TEXTURE_CUBE_MAP].set(zeroTextureCube); mZeroTextures[GL_TEXTURE_CUBE_MAP].set(zeroTextureCube);
if (mClientMajorVersion >= 3) if (getClientVersion() >= Version(3, 0))
{ {
// TODO: These could also be enabled via extension // TODO: These could also be enabled via extension
Texture *zeroTexture3D = new Texture(mImplementation.get(), 0, GL_TEXTURE_3D); Texture *zeroTexture3D = new Texture(mImplementation.get(), 0, GL_TEXTURE_3D);
...@@ -324,7 +326,7 @@ Context::Context(rx::EGLImplFactory *implFactory, ...@@ -324,7 +326,7 @@ Context::Context(rx::EGLImplFactory *implFactory,
bindPixelPackBuffer(0); bindPixelPackBuffer(0);
bindPixelUnpackBuffer(0); bindPixelUnpackBuffer(0);
if (mClientMajorVersion >= 3) if (getClientVersion() >= Version(3, 0))
{ {
// [OpenGL ES 3.0.2] section 2.14.1 pg 85: // [OpenGL ES 3.0.2] section 2.14.1 pg 85:
// In the initial state, a default transform feedback object is bound and treated as // In the initial state, a default transform feedback object is bound and treated as
...@@ -1299,10 +1301,10 @@ void Context::getIntegerv(GLenum pname, GLint *params) ...@@ -1299,10 +1301,10 @@ void Context::getIntegerv(GLenum pname, GLint *params)
case GL_MIN_PROGRAM_TEXEL_OFFSET: *params = mCaps.minProgramTexelOffset; break; case GL_MIN_PROGRAM_TEXEL_OFFSET: *params = mCaps.minProgramTexelOffset; break;
case GL_MAX_PROGRAM_TEXEL_OFFSET: *params = mCaps.maxProgramTexelOffset; break; case GL_MAX_PROGRAM_TEXEL_OFFSET: *params = mCaps.maxProgramTexelOffset; break;
case GL_MAJOR_VERSION: case GL_MAJOR_VERSION:
*params = mClientMajorVersion; *params = getClientVersion().major;
break; break;
case GL_MINOR_VERSION: case GL_MINOR_VERSION:
*params = mClientMinorVersion; *params = getClientVersion().minor;
break; break;
case GL_MAX_ELEMENTS_INDICES: *params = mCaps.maxElementsIndices; break; case GL_MAX_ELEMENTS_INDICES: *params = mCaps.maxElementsIndices; break;
case GL_MAX_ELEMENTS_VERTICES: *params = mCaps.maxElementsVertices; break; case GL_MAX_ELEMENTS_VERTICES: *params = mCaps.maxElementsVertices; break;
...@@ -2332,7 +2334,7 @@ void Context::initCaps(bool webGLContext) ...@@ -2332,7 +2334,7 @@ void Context::initCaps(bool webGLContext)
mLimitations = mImplementation->getNativeLimitations(); mLimitations = mImplementation->getNativeLimitations();
if (mClientMajorVersion < 3) if (getClientVersion() < Version(3, 0))
{ {
// Disable ES3+ extensions // Disable ES3+ extensions
mExtensions.colorBufferFloat = false; mExtensions.colorBufferFloat = false;
...@@ -2340,7 +2342,7 @@ void Context::initCaps(bool webGLContext) ...@@ -2340,7 +2342,7 @@ void Context::initCaps(bool webGLContext)
mExtensions.textureNorm16 = false; mExtensions.textureNorm16 = false;
} }
if (mClientMajorVersion > 2) if (getClientVersion() > Version(2, 0))
{ {
// FIXME(geofflang): Don't support EXT_sRGB in non-ES2 contexts // FIXME(geofflang): Don't support EXT_sRGB in non-ES2 contexts
//mExtensions.sRGB = false; //mExtensions.sRGB = false;
...@@ -2403,11 +2405,11 @@ void Context::updateCaps() ...@@ -2403,11 +2405,11 @@ void Context::updateCaps()
// Caps are AND'd with the renderer caps because some core formats are still unsupported in // Caps are AND'd with the renderer caps because some core formats are still unsupported in
// ES3. // ES3.
formatCaps.texturable = formatCaps.texturable =
formatCaps.texturable && formatInfo.textureSupport(mClientMajorVersion, mExtensions); formatCaps.texturable && formatInfo.textureSupport(getClientVersion(), mExtensions);
formatCaps.renderable = formatCaps.renderable =
formatCaps.renderable && formatInfo.renderSupport(mClientMajorVersion, mExtensions); formatCaps.renderable && formatInfo.renderSupport(getClientVersion(), mExtensions);
formatCaps.filterable = formatCaps.filterable =
formatCaps.filterable && formatInfo.filterSupport(mClientMajorVersion, mExtensions); formatCaps.filterable && formatInfo.filterSupport(getClientVersion(), mExtensions);
// OpenGL ES does not support multisampling with integer formats // OpenGL ES does not support multisampling with integer formats
if (!formatInfo.renderSupport || formatInfo.componentType == GL_INT || formatInfo.componentType == GL_UNSIGNED_INT) if (!formatInfo.renderSupport || formatInfo.componentType == GL_INT || formatInfo.componentType == GL_UNSIGNED_INT)
......
...@@ -643,9 +643,6 @@ class Context final : public ValidationContext ...@@ -643,9 +643,6 @@ class Context final : public ValidationContext
State mGLState; State mGLState;
int mClientMajorVersion;
int mClientMinorVersion;
const egl::Config *mConfig; const egl::Config *mConfig;
EGLenum mClientType; EGLenum mClientType;
......
...@@ -15,15 +15,14 @@ namespace gl ...@@ -15,15 +15,14 @@ namespace gl
{ {
ContextState::ContextState(uintptr_t contextIn, ContextState::ContextState(uintptr_t contextIn,
GLint clientMajorVersionIn, const Version &clientVersion,
GLint clientMinorVersionIn,
State *stateIn, State *stateIn,
const Caps &capsIn, const Caps &capsIn,
const TextureCapsMap &textureCapsIn, const TextureCapsMap &textureCapsIn,
const Extensions &extensionsIn, const Extensions &extensionsIn,
const ResourceManager *resourceManagerIn, const ResourceManager *resourceManagerIn,
const Limitations &limitationsIn) const Limitations &limitationsIn)
: mGLVersion(clientMajorVersionIn, clientMinorVersionIn), : mClientVersion(clientVersion),
mContext(contextIn), mContext(contextIn),
mState(stateIn), mState(stateIn),
mCaps(capsIn), mCaps(capsIn),
...@@ -43,8 +42,7 @@ const TextureCaps &ContextState::getTextureCap(GLenum internalFormat) const ...@@ -43,8 +42,7 @@ const TextureCaps &ContextState::getTextureCap(GLenum internalFormat) const
return mTextureCaps.get(internalFormat); return mTextureCaps.get(internalFormat);
} }
ValidationContext::ValidationContext(GLint clientMajorVersion, ValidationContext::ValidationContext(const Version &clientVersion,
GLint clientMinorVersion,
State *state, State *state,
const Caps &caps, const Caps &caps,
const TextureCapsMap &textureCaps, const TextureCapsMap &textureCaps,
...@@ -53,8 +51,7 @@ ValidationContext::ValidationContext(GLint clientMajorVersion, ...@@ -53,8 +51,7 @@ ValidationContext::ValidationContext(GLint clientMajorVersion,
const Limitations &limitations, const Limitations &limitations,
bool skipValidation) bool skipValidation)
: mState(reinterpret_cast<uintptr_t>(this), : mState(reinterpret_cast<uintptr_t>(this),
clientMajorVersion, clientVersion,
clientMinorVersion,
state, state,
caps, caps,
textureCaps, textureCaps,
...@@ -399,9 +396,7 @@ bool ValidationContext::getQueryParameterInfo(GLenum pname, GLenum *type, unsign ...@@ -399,9 +396,7 @@ bool ValidationContext::getQueryParameterInfo(GLenum pname, GLenum *type, unsign
return true; return true;
} }
const GLVersion &glVersion = mState.getGLVersion(); if (getClientVersion() < Version(3, 0))
if (!glVersion.isES3OrGreater())
{ {
return false; return false;
} }
...@@ -477,7 +472,7 @@ bool ValidationContext::getQueryParameterInfo(GLenum pname, GLenum *type, unsign ...@@ -477,7 +472,7 @@ bool ValidationContext::getQueryParameterInfo(GLenum pname, GLenum *type, unsign
} }
} }
if (!glVersion.isES31()) if (getClientVersion() < Version(3, 1))
{ {
return false; return false;
} }
...@@ -541,9 +536,7 @@ bool ValidationContext::getIndexedQueryParameterInfo(GLenum target, ...@@ -541,9 +536,7 @@ bool ValidationContext::getIndexedQueryParameterInfo(GLenum target,
GLenum *type, GLenum *type,
unsigned int *numParams) unsigned int *numParams)
{ {
if (getClientVersion() < Version(3, 0))
const GLVersion &glVersion = mState.getGLVersion();
if (!glVersion.isES3OrGreater())
{ {
return false; return false;
} }
...@@ -568,7 +561,7 @@ bool ValidationContext::getIndexedQueryParameterInfo(GLenum target, ...@@ -568,7 +561,7 @@ bool ValidationContext::getIndexedQueryParameterInfo(GLenum target,
} }
} }
if (!glVersion.isES31()) if (getClientVersion() < Version(3, 1))
{ {
return false; return false;
} }
......
...@@ -11,39 +11,22 @@ ...@@ -11,39 +11,22 @@
#include "common/angleutils.h" #include "common/angleutils.h"
#include "libANGLE/State.h" #include "libANGLE/State.h"
#include "libANGLE/Version.h"
namespace gl namespace gl
{ {
class ValidationContext; class ValidationContext;
class ContextState; class ContextState;
class GLVersion final : angle::NonCopyable static constexpr Version ES_2_0 = Version(2, 0);
{ static constexpr Version ES_3_0 = Version(3, 0);
public: static constexpr Version ES_3_1 = Version(3, 1);
GLVersion(GLint clientMajorVersion, GLint clientMinorVersion)
: mClientMajorVersion(clientMajorVersion), mClientMinorVersion(clientMinorVersion)
{
}
GLint getClientMajorVersion() const { return mClientMajorVersion; }
GLint getClientMinorVersion() const { return mClientMinorVersion; }
bool isES2() const { return mClientMajorVersion == 2; }
bool isES3() const { return mClientMajorVersion == 3 && mClientMinorVersion == 0; }
bool isES31() const { return mClientMajorVersion == 3 && mClientMinorVersion == 1; }
bool isES3OrGreater() const { return mClientMajorVersion >= 3; }
private:
GLint mClientMajorVersion;
GLint mClientMinorVersion;
};
class ContextState final : public angle::NonCopyable class ContextState final : public angle::NonCopyable
{ {
public: public:
ContextState(uintptr_t context, ContextState(uintptr_t context,
GLint clientMajorVersion, const Version &clientVersion,
GLint clientMinorVersion,
State *state, State *state,
const Caps &caps, const Caps &caps,
const TextureCapsMap &textureCaps, const TextureCapsMap &textureCaps,
...@@ -53,9 +36,9 @@ class ContextState final : public angle::NonCopyable ...@@ -53,9 +36,9 @@ class ContextState final : public angle::NonCopyable
~ContextState(); ~ContextState();
uintptr_t getContext() const { return mContext; } uintptr_t getContext() const { return mContext; }
GLint getClientMajorVersion() const { return mGLVersion.getClientMajorVersion(); } GLint getClientMajorVersion() const { return mClientVersion.major; }
GLint getClientMinorVersion() const { return mGLVersion.getClientMinorVersion(); } GLint getClientMinorVersion() const { return mClientVersion.minor; }
const GLVersion &getGLVersion() const { return mGLVersion; } const Version &getClientVersion() const { return mClientVersion; }
const State &getState() const { return *mState; } const State &getState() const { return *mState; }
const Caps &getCaps() const { return mCaps; } const Caps &getCaps() const { return mCaps; }
const TextureCapsMap &getTextureCaps() const { return mTextureCaps; } const TextureCapsMap &getTextureCaps() const { return mTextureCaps; }
...@@ -69,7 +52,7 @@ class ContextState final : public angle::NonCopyable ...@@ -69,7 +52,7 @@ class ContextState final : public angle::NonCopyable
friend class Context; friend class Context;
friend class ValidationContext; friend class ValidationContext;
GLVersion mGLVersion; Version mClientVersion;
uintptr_t mContext; uintptr_t mContext;
State *mState; State *mState;
const Caps &mCaps; const Caps &mCaps;
...@@ -82,8 +65,7 @@ class ContextState final : public angle::NonCopyable ...@@ -82,8 +65,7 @@ class ContextState final : public angle::NonCopyable
class ValidationContext : angle::NonCopyable class ValidationContext : angle::NonCopyable
{ {
public: public:
ValidationContext(GLint clientMajorVersion, ValidationContext(const Version &clientVersion,
GLint clientMinorVersion,
State *state, State *state,
const Caps &caps, const Caps &caps,
const TextureCapsMap &textureCaps, const TextureCapsMap &textureCaps,
...@@ -96,9 +78,9 @@ class ValidationContext : angle::NonCopyable ...@@ -96,9 +78,9 @@ class ValidationContext : angle::NonCopyable
virtual void handleError(const Error &error) = 0; virtual void handleError(const Error &error) = 0;
const ContextState &getContextState() const { return mState; } const ContextState &getContextState() const { return mState; }
int getClientMajorVersion() const { return mState.getClientMajorVersion(); } GLint getClientMajorVersion() const { return mState.getClientMajorVersion(); }
int getClientMinorVersion() const { return mState.getClientMinorVersion(); } GLint getClientMinorVersion() const { return mState.getClientMinorVersion(); }
const GLVersion &getGLVersion() const { return mState.mGLVersion; } const Version &getClientVersion() const { return mState.getClientVersion(); }
const State &getGLState() const { return mState.getState(); } const State &getGLState() const { return mState.getState(); }
const Caps &getCaps() const { return mState.getCaps(); } const Caps &getCaps() const { return mState.getCaps(); }
const TextureCapsMap &getTextureCaps() const { return mState.getTextureCaps(); } const TextureCapsMap &getTextureCaps() const { return mState.getTextureCaps(); }
......
...@@ -72,7 +72,7 @@ State::~State() ...@@ -72,7 +72,7 @@ State::~State()
void State::initialize(const Caps &caps, void State::initialize(const Caps &caps,
const Extensions &extensions, const Extensions &extensions,
GLuint clientVersion, const Version &clientVersion,
bool debug, bool debug,
bool bindGeneratesResource) bool bindGeneratesResource)
{ {
...@@ -164,7 +164,7 @@ void State::initialize(const Caps &caps, ...@@ -164,7 +164,7 @@ void State::initialize(const Caps &caps,
mSamplerTextures[GL_TEXTURE_2D].resize(caps.maxCombinedTextureImageUnits); mSamplerTextures[GL_TEXTURE_2D].resize(caps.maxCombinedTextureImageUnits);
mSamplerTextures[GL_TEXTURE_CUBE_MAP].resize(caps.maxCombinedTextureImageUnits); mSamplerTextures[GL_TEXTURE_CUBE_MAP].resize(caps.maxCombinedTextureImageUnits);
if (clientVersion >= 3) if (clientVersion >= Version(3, 0))
{ {
// TODO: These could also be enabled via extension // TODO: These could also be enabled via extension
mSamplerTextures[GL_TEXTURE_2D_ARRAY].resize(caps.maxCombinedTextureImageUnits); mSamplerTextures[GL_TEXTURE_2D_ARRAY].resize(caps.maxCombinedTextureImageUnits);
......
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#include "libANGLE/Sampler.h" #include "libANGLE/Sampler.h"
#include "libANGLE/Texture.h" #include "libANGLE/Texture.h"
#include "libANGLE/TransformFeedback.h" #include "libANGLE/TransformFeedback.h"
#include "libANGLE/Version.h"
#include "libANGLE/VertexAttribute.h" #include "libANGLE/VertexAttribute.h"
#include "libANGLE/angletypes.h" #include "libANGLE/angletypes.h"
...@@ -41,7 +42,7 @@ class State : angle::NonCopyable ...@@ -41,7 +42,7 @@ class State : angle::NonCopyable
void initialize(const Caps &caps, void initialize(const Caps &caps,
const Extensions &extensions, const Extensions &extensions,
GLuint clientVersion, const Version &clientVersion,
bool debug, bool debug,
bool bindGeneratesResource); bool bindGeneratesResource);
void reset(); void reset();
......
...@@ -16,8 +16,8 @@ namespace gl ...@@ -16,8 +16,8 @@ namespace gl
struct Version struct Version
{ {
Version(); constexpr Version();
Version(GLuint major, GLuint minor); constexpr Version(GLuint major, GLuint minor);
GLuint major; GLuint major;
GLuint minor; GLuint minor;
...@@ -26,8 +26,9 @@ struct Version ...@@ -26,8 +26,9 @@ struct Version
bool operator==(const Version &a, const Version &b); bool operator==(const Version &a, const Version &b);
bool operator!=(const Version &a, const Version &b); bool operator!=(const Version &a, const Version &b);
bool operator>=(const Version &a, const Version &b); bool operator>=(const Version &a, const Version &b);
bool operator<=(const Version &a, const Version &b);
bool operator<(const Version &a, const Version &b); bool operator<(const Version &a, const Version &b);
bool operator>(const Version &a, const Version &b);
} }
#include "Version.inl" #include "Version.inl"
......
...@@ -6,38 +6,54 @@ ...@@ -6,38 +6,54 @@
// Version.inl: Encapsulation of a GL version. // Version.inl: Encapsulation of a GL version.
#include <tuple>
namespace gl namespace gl
{ {
inline Version::Version() constexpr Version::Version()
: Version(0, 0) : Version(0, 0)
{ {
} }
inline Version::Version(GLuint major_, GLuint minor_) // Avoid conflicts with linux system defines
#undef major
#undef minor
constexpr Version::Version(GLuint major_, GLuint minor_)
: major(major_),
minor(minor_)
{ {
major = major_;
minor = minor_;
} }
inline bool operator==(const Version &a, const Version &b) inline bool operator==(const Version &a, const Version &b)
{ {
return a.major == b.major && a.minor == b.minor; return std::tie(a.major, a.minor) == std::tie(b.major, b.minor);
} }
inline bool operator!=(const Version &a, const Version &b) inline bool operator!=(const Version &a, const Version &b)
{ {
return !(a == b); return std::tie(a.major, a.minor) != std::tie(b.major, b.minor);
} }
inline bool operator>=(const Version &a, const Version &b) inline bool operator>=(const Version &a, const Version &b)
{ {
return a.major > b.major || (a.major == b.major && a.minor >= b.minor); return std::tie(a.major, a.minor) >= std::tie(b.major, b.minor);
}
inline bool operator<=(const Version &a, const Version &b)
{
return std::tie(a.major, a.minor) <= std::tie(b.major, b.minor);
} }
inline bool operator<(const Version &a, const Version &b) inline bool operator<(const Version &a, const Version &b)
{ {
return !(a >= b); return std::tie(a.major, a.minor) < std::tie(b.major, b.minor);
}
inline bool operator>(const Version &a, const Version &b)
{
return std::tie(a.major, a.minor) > std::tie(b.major, b.minor);
} }
} }
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include "angle_gl.h" #include "angle_gl.h"
#include "libANGLE/Caps.h" #include "libANGLE/Caps.h"
#include "libANGLE/Error.h" #include "libANGLE/Error.h"
#include "libANGLE/Version.h"
#include "libANGLE/angletypes.h" #include "libANGLE/angletypes.h"
namespace gl namespace gl
...@@ -111,7 +112,7 @@ struct InternalFormat ...@@ -111,7 +112,7 @@ struct InternalFormat
GLenum componentType; GLenum componentType;
GLenum colorEncoding; GLenum colorEncoding;
typedef bool (*SupportCheckFunction)(GLuint, const Extensions &); typedef bool (*SupportCheckFunction)(const Version &, const Extensions &);
SupportCheckFunction textureSupport; SupportCheckFunction textureSupport;
SupportCheckFunction renderSupport; SupportCheckFunction renderSupport;
SupportCheckFunction filterSupport; SupportCheckFunction filterSupport;
......
...@@ -2882,7 +2882,7 @@ bool ValidateCopyTexImageParametersBase(ValidationContext *context, ...@@ -2882,7 +2882,7 @@ bool ValidateCopyTexImageParametersBase(ValidationContext *context,
return false; return false;
} }
if (!formatInfo.textureSupport(context->getClientMajorVersion(), context->getExtensions())) if (!formatInfo.textureSupport(context->getClientVersion(), context->getExtensions()))
{ {
context->handleError(Error(GL_INVALID_ENUM)); context->handleError(Error(GL_INVALID_ENUM));
return false; return false;
......
...@@ -3413,13 +3413,18 @@ bool ValidateCreateShader(Context *context, GLenum type) ...@@ -3413,13 +3413,18 @@ bool ValidateCreateShader(Context *context, GLenum type)
case GL_VERTEX_SHADER: case GL_VERTEX_SHADER:
case GL_FRAGMENT_SHADER: case GL_FRAGMENT_SHADER:
break; break;
case GL_COMPUTE_SHADER: case GL_COMPUTE_SHADER:
if (context->getGLVersion().isES31()) if (context->getClientVersion() < Version(3, 1))
{ {
break; context->handleError(
Error(GL_INVALID_ENUM, "GL_COMPUTE_SHADER requires OpenGL ES 3.1."));
return false;
} }
break;
default: default:
context->handleError(Error(GL_INVALID_ENUM)); context->handleError(Error(GL_INVALID_ENUM, "Unknown shader type."));
return false; return false;
} }
......
...@@ -31,7 +31,7 @@ static bool ValidateTexImageFormatCombination(gl::Context *context, GLenum inter ...@@ -31,7 +31,7 @@ static bool ValidateTexImageFormatCombination(gl::Context *context, GLenum inter
// error instead of a GL_INVALID_ENUM error. As this validation function is only called in // error instead of a GL_INVALID_ENUM error. As this validation function is only called in
// the validation codepaths for glTexImage2D/3D, we record a GL_INVALID_VALUE error. // the validation codepaths for glTexImage2D/3D, we record a GL_INVALID_VALUE error.
const gl::InternalFormat &formatInfo = gl::GetInternalFormatInfo(internalFormat); const gl::InternalFormat &formatInfo = gl::GetInternalFormatInfo(internalFormat);
if (!formatInfo.textureSupport(context->getClientMajorVersion(), context->getExtensions())) if (!formatInfo.textureSupport(context->getClientVersion(), context->getExtensions()))
{ {
context->handleError(Error(GL_INVALID_VALUE)); context->handleError(Error(GL_INVALID_VALUE));
return false; return false;
...@@ -184,8 +184,7 @@ bool ValidateES3TexImageParametersBase(Context *context, ...@@ -184,8 +184,7 @@ bool ValidateES3TexImageParametersBase(Context *context,
return false; return false;
} }
if (!actualFormatInfo.textureSupport(context->getClientMajorVersion(), if (!actualFormatInfo.textureSupport(context->getClientVersion(), context->getExtensions()))
context->getExtensions()))
{ {
context->handleError(Error(GL_INVALID_ENUM)); context->handleError(Error(GL_INVALID_ENUM));
return false; return false;
...@@ -865,7 +864,7 @@ bool ValidateES3TexStorageParametersBase(Context *context, ...@@ -865,7 +864,7 @@ bool ValidateES3TexStorageParametersBase(Context *context,
} }
const gl::InternalFormat &formatInfo = gl::GetInternalFormatInfo(internalformat); const gl::InternalFormat &formatInfo = gl::GetInternalFormatInfo(internalformat);
if (!formatInfo.textureSupport(context->getClientMajorVersion(), context->getExtensions())) if (!formatInfo.textureSupport(context->getClientVersion(), context->getExtensions()))
{ {
context->handleError(Error(GL_INVALID_ENUM)); context->handleError(Error(GL_INVALID_ENUM));
return false; return false;
...@@ -1922,7 +1921,7 @@ bool ValidateIndexedStateQuery(ValidationContext *context, ...@@ -1922,7 +1921,7 @@ bool ValidateIndexedStateQuery(ValidationContext *context,
bool ValidateGetIntegeri_v(ValidationContext *context, GLenum target, GLuint index, GLint *data) bool ValidateGetIntegeri_v(ValidationContext *context, GLenum target, GLuint index, GLint *data)
{ {
if (!context->getGLVersion().isES3OrGreater()) if (context->getClientVersion() < ES_3_0)
{ {
context->handleError(Error(GL_INVALID_OPERATION, "Context does not support GLES3.0")); context->handleError(Error(GL_INVALID_OPERATION, "Context does not support GLES3.0"));
return false; return false;
...@@ -1937,7 +1936,7 @@ bool ValidateGetIntegeri_vRobustANGLE(ValidationContext *context, ...@@ -1937,7 +1936,7 @@ bool ValidateGetIntegeri_vRobustANGLE(ValidationContext *context,
GLsizei *length, GLsizei *length,
GLint *data) GLint *data)
{ {
if (!context->getGLVersion().isES3OrGreater()) if (context->getClientVersion() < ES_3_0)
{ {
context->handleError(Error(GL_INVALID_OPERATION, "Context does not support GLES3.0")); context->handleError(Error(GL_INVALID_OPERATION, "Context does not support GLES3.0"));
return false; return false;
...@@ -1963,7 +1962,7 @@ bool ValidateGetIntegeri_vRobustANGLE(ValidationContext *context, ...@@ -1963,7 +1962,7 @@ bool ValidateGetIntegeri_vRobustANGLE(ValidationContext *context,
bool ValidateGetInteger64i_v(ValidationContext *context, GLenum target, GLuint index, GLint64 *data) bool ValidateGetInteger64i_v(ValidationContext *context, GLenum target, GLuint index, GLint64 *data)
{ {
if (!context->getGLVersion().isES3OrGreater()) if (context->getClientVersion() < ES_3_0)
{ {
context->handleError(Error(GL_INVALID_OPERATION, "Context does not support GLES3.0")); context->handleError(Error(GL_INVALID_OPERATION, "Context does not support GLES3.0"));
return false; return false;
...@@ -1978,7 +1977,7 @@ bool ValidateGetInteger64i_vRobustANGLE(ValidationContext *context, ...@@ -1978,7 +1977,7 @@ bool ValidateGetInteger64i_vRobustANGLE(ValidationContext *context,
GLsizei *length, GLsizei *length,
GLint64 *data) GLint64 *data)
{ {
if (!context->getGLVersion().isES3OrGreater()) if (context->getClientVersion() < ES_3_0)
{ {
context->handleError(Error(GL_INVALID_OPERATION, "Context does not support GLES3.0")); context->handleError(Error(GL_INVALID_OPERATION, "Context does not support GLES3.0"));
return false; return false;
......
...@@ -19,7 +19,7 @@ namespace gl ...@@ -19,7 +19,7 @@ namespace gl
bool ValidateGetBooleani_v(Context *context, GLenum target, GLuint index, GLboolean *data) bool ValidateGetBooleani_v(Context *context, GLenum target, GLuint index, GLboolean *data)
{ {
if (!context->getGLVersion().isES31()) if (context->getClientVersion() < ES_3_1)
{ {
context->handleError(Error(GL_INVALID_OPERATION, "Context does not support GLES3.1")); context->handleError(Error(GL_INVALID_OPERATION, "Context does not support GLES3.1"));
return false; return false;
...@@ -40,7 +40,7 @@ bool ValidateGetBooleani_vRobustANGLE(Context *context, ...@@ -40,7 +40,7 @@ bool ValidateGetBooleani_vRobustANGLE(Context *context,
GLsizei *length, GLsizei *length,
GLboolean *data) GLboolean *data)
{ {
if (!context->getGLVersion().isES31()) if (context->getClientVersion() < ES_3_1)
{ {
context->handleError(Error(GL_INVALID_OPERATION, "Context does not support GLES3.1")); context->handleError(Error(GL_INVALID_OPERATION, "Context does not support GLES3.1"));
return false; return false;
......
...@@ -29,8 +29,7 @@ namespace ...@@ -29,8 +29,7 @@ namespace
class MockValidationContext : public ValidationContext class MockValidationContext : public ValidationContext
{ {
public: public:
MockValidationContext(GLint majorClientVersion, MockValidationContext(const Version &version,
GLint minorClientVersion,
State *state, State *state,
const Caps &caps, const Caps &caps,
const TextureCapsMap &textureCaps, const TextureCapsMap &textureCaps,
...@@ -42,8 +41,7 @@ class MockValidationContext : public ValidationContext ...@@ -42,8 +41,7 @@ class MockValidationContext : public ValidationContext
MOCK_METHOD1(handleError, void(const Error &)); MOCK_METHOD1(handleError, void(const Error &));
}; };
MockValidationContext::MockValidationContext(GLint majorClientVersion, MockValidationContext::MockValidationContext(const Version &version,
GLint minorClientVersion,
State *state, State *state,
const Caps &caps, const Caps &caps,
const TextureCapsMap &textureCaps, const TextureCapsMap &textureCaps,
...@@ -51,8 +49,7 @@ MockValidationContext::MockValidationContext(GLint majorClientVersion, ...@@ -51,8 +49,7 @@ MockValidationContext::MockValidationContext(GLint majorClientVersion,
const ResourceManager *resourceManager, const ResourceManager *resourceManager,
const Limitations &limitations, const Limitations &limitations,
bool skipValidation) bool skipValidation)
: ValidationContext(majorClientVersion, : ValidationContext(version,
minorClientVersion,
state, state,
caps, caps,
textureCaps, textureCaps,
...@@ -87,7 +84,7 @@ TEST(ValidationESTest, DrawElementsWithMaxIndexGivesError) ...@@ -87,7 +84,7 @@ TEST(ValidationESTest, DrawElementsWithMaxIndexGivesError)
caps.maxElementIndex = 100; caps.maxElementIndex = 100;
caps.maxDrawBuffers = 1; caps.maxDrawBuffers = 1;
caps.maxColorAttachments = 1; caps.maxColorAttachments = 1;
state.initialize(caps, extensions, 3, false, true); state.initialize(caps, extensions, Version(3, 0), false, true);
NiceMock<MockTextureImpl> *textureImpl = new NiceMock<MockTextureImpl>(); NiceMock<MockTextureImpl> *textureImpl = new NiceMock<MockTextureImpl>();
EXPECT_CALL(mockFactory, createTexture(_)).WillOnce(Return(textureImpl)); EXPECT_CALL(mockFactory, createTexture(_)).WillOnce(Return(textureImpl));
...@@ -108,8 +105,8 @@ TEST(ValidationESTest, DrawElementsWithMaxIndexGivesError) ...@@ -108,8 +105,8 @@ TEST(ValidationESTest, DrawElementsWithMaxIndexGivesError)
state.setDrawFramebufferBinding(framebuffer); state.setDrawFramebufferBinding(framebuffer);
state.setProgram(program); state.setProgram(program);
NiceMock<MockValidationContext> testContext(3, 0, &state, caps, textureCaps, extensions, NiceMock<MockValidationContext> testContext(Version(3, 0), &state, caps, textureCaps,
nullptr, limitations, false); extensions, nullptr, limitations, false);
// Set the expectation for the validation error here. // Set the expectation for the validation error here.
Error expectedError(GL_INVALID_OPERATION, g_ExceedsMaxElementErrorMessage); Error expectedError(GL_INVALID_OPERATION, g_ExceedsMaxElementErrorMessage);
......
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