Hash :
dfde6abf
Author :
Date :
2016-06-09T07:07:18
Context: Remove mutable gl::State getter. This will preserve layering - the API layer doesn't mutate the state directly, it passes the API call through to the Context. Is also removes the possiblity of any shenanigans of the Validation layer changing the GL state. Also, this CL refactors a few validation entry points to take ValidationContext instead of Context. ValidationContext will be the correct way to interact with the gl::Context in the Validation code. Finally, additional refactorings make ContextState a proper class with private data. This allows the ContextState itself to keep a mutable pointer to the gl::State, so ValidationContext can modify it if necessary (and it will be necessary for Framebuffer completeness caching). BUG=angleproject:1388 Change-Id: I86ab3561573caa9535c8d1b8aad4ab3d0e7cd470 Reviewed-on: https://chromium-review.googlesource.com/348954 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Corentin Wallez <cwallez@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
//
// Copyright 2016 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.
//
// ContextImpl:
// Implementation-specific functionality associated with a GL Context.
//
#ifndef LIBANGLE_RENDERER_CONTEXTIMPL_H_
#define LIBANGLE_RENDERER_CONTEXTIMPL_H_
#include "common/angleutils.h"
#include "libANGLE/ContextState.h"
#include "libANGLE/renderer/GLImplFactory.h"
namespace rx
{
class ContextImpl : public GLImplFactory
{
public:
ContextImpl(const gl::ContextState &state);
virtual ~ContextImpl();
virtual gl::Error initialize() = 0;
// Flush and finish.
virtual gl::Error flush() = 0;
virtual gl::Error finish() = 0;
// Drawing methods.
virtual gl::Error drawArrays(GLenum mode, GLint first, GLsizei count) = 0;
virtual gl::Error drawArraysInstanced(GLenum mode,
GLint first,
GLsizei count,
GLsizei instanceCount) = 0;
virtual gl::Error drawElements(GLenum mode,
GLsizei count,
GLenum type,
const GLvoid *indices,
const gl::IndexRange &indexRange) = 0;
virtual gl::Error drawElementsInstanced(GLenum mode,
GLsizei count,
GLenum type,
const GLvoid *indices,
GLsizei instances,
const gl::IndexRange &indexRange) = 0;
virtual gl::Error drawRangeElements(GLenum mode,
GLuint start,
GLuint end,
GLsizei count,
GLenum type,
const GLvoid *indices,
const gl::IndexRange &indexRange) = 0;
// TODO(jmadill): Investigate proper impl methods for this.
virtual void notifyDeviceLost() = 0;
virtual bool isDeviceLost() const = 0;
virtual bool testDeviceLost() = 0;
virtual bool testDeviceResettable() = 0;
// Vendor and description strings.
virtual std::string getVendorString() const = 0;
virtual std::string getRendererDescription() const = 0;
// Debug markers.
virtual void insertEventMarker(GLsizei length, const char *marker) = 0;
virtual void pushGroupMarker(GLsizei length, const char *marker) = 0;
virtual void popGroupMarker() = 0;
// State sync with dirty bits.
virtual void syncState(const gl::State &state, const gl::State::DirtyBits &dirtyBits) = 0;
// Disjoint timer queries
virtual GLint getGPUDisjoint() = 0;
virtual GLint64 getTimestamp() = 0;
// Context switching
virtual void onMakeCurrent(const gl::ContextState &data) = 0;
// Native capabilities, unmodified by gl::Context.
virtual const gl::Caps &getNativeCaps() const = 0;
virtual const gl::TextureCapsMap &getNativeTextureCaps() const = 0;
virtual const gl::Extensions &getNativeExtensions() const = 0;
virtual const gl::Limitations &getNativeLimitations() const = 0;
const gl::ContextState &getContextState() { return mState; }
int getClientVersion() const { return mState.getClientVersion(); }
const gl::State &getGLState() const { return mState.getState(); }
const gl::Caps &getCaps() const { return mState.getCaps(); }
const gl::TextureCapsMap &getTextureCaps() const { return mState.getTextureCaps(); }
const gl::Extensions &getExtensions() const { return mState.getExtensions(); }
const gl::Limitations &getLimitations() const { return mState.getLimitations(); }
protected:
const gl::ContextState &mState;
};
} // namespace rx
#endif // LIBANGLE_RENDERER_CONTEXTIMPL_H_