Hash :
1be913cf
Author :
Date :
2016-07-11T17:59:16
Add support for ES31 context creation The dEQP test for context creation passes. SH_WEBGL3_SPEC has been added, but it should be considered whether we should keep it, remove it or rename it. It was added so that there is a webgl mapping to es 310 shaders. Check Compiler.cpp. The bison file has been modified so that some tokens from es3 can be also used in es31 as well. A separate macro ES3_1_ONLY is added so that some tokens are limited only for es 310 shaders. BUG=angleproject:1442 TEST=angle_unittests Change-Id: I2e5ca227c96046c30dc796ab934f3fda9c533eba Reviewed-on: https://chromium-review.googlesource.com/360300 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
//
// Copyright (c) 2014 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.
//
// ContextState: Container class for all GL context state, caps and objects.
#ifndef LIBANGLE_CONTEXTSTATE_H_
#define LIBANGLE_CONTEXTSTATE_H_
#include "common/angleutils.h"
#include "libANGLE/State.h"
namespace gl
{
class ValidationContext;
class ContextState;
class GLVersion final : angle::NonCopyable
{
public:
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
{
public:
ContextState(uintptr_t context,
GLint clientMajorVersion,
GLint clientMinorVersion,
State *state,
const Caps &caps,
const TextureCapsMap &textureCaps,
const Extensions &extensions,
const ResourceManager *resourceManager,
const Limitations &limitations);
~ContextState();
uintptr_t getContext() const { return mContext; }
GLint getClientMajorVersion() const { return mGLVersion.getClientMajorVersion(); }
GLint getClientMinorVersion() const { return mGLVersion.getClientMinorVersion(); }
const GLVersion &getGLVersion() const { return mGLVersion; }
const State &getState() const { return *mState; }
const Caps &getCaps() const { return mCaps; }
const TextureCapsMap &getTextureCaps() const { return mTextureCaps; }
const Extensions &getExtensions() const { return mExtensions; }
const ResourceManager &getResourceManager() const { return *mResourceManager; }
const Limitations &getLimitations() const { return mLimitations; }
const TextureCaps &getTextureCap(GLenum internalFormat) const;
private:
friend class Context;
friend class ValidationContext;
GLVersion mGLVersion;
uintptr_t mContext;
State *mState;
const Caps &mCaps;
const TextureCapsMap &mTextureCaps;
const Extensions &mExtensions;
const ResourceManager *mResourceManager;
const Limitations &mLimitations;
};
class ValidationContext : angle::NonCopyable
{
public:
ValidationContext(GLint clientMajorVersion,
GLint clientMinorVersion,
State *state,
const Caps &caps,
const TextureCapsMap &textureCaps,
const Extensions &extensions,
const ResourceManager *resourceManager,
const Limitations &limitations,
bool skipValidation);
virtual ~ValidationContext() {}
virtual void handleError(const Error &error) = 0;
const ContextState &getContextState() const { return mState; }
int getClientMajorVersion() const { return mState.getClientMajorVersion(); }
int getClientMinorVersion() const { return mState.getClientMinorVersion(); }
const GLVersion &getGLVersion() const { return mState.mGLVersion; }
const State &getGLState() const { return mState.getState(); }
const Caps &getCaps() const { return mState.getCaps(); }
const TextureCapsMap &getTextureCaps() const { return mState.getTextureCaps(); }
const Extensions &getExtensions() const { return mState.getExtensions(); }
const Limitations &getLimitations() const { return mState.getLimitations(); }
bool skipValidation() const { return mSkipValidation; }
// Specific methods needed for validation.
bool getQueryParameterInfo(GLenum pname, GLenum *type, unsigned int *numParams);
bool getIndexedQueryParameterInfo(GLenum target, GLenum *type, unsigned int *numParams);
protected:
ContextState mState;
bool mSkipValidation;
};
} // namespace gl
#endif // LIBANGLE_CONTEXTSTATE_H_