Hash :
de09f8db
Author :
Date :
2021-09-02T18:21:37
Revert "GL: Update StateManagerGL binding funcs to use ANGLE_GL_TRY" This reverts commit 4b5a774e855af2493d64b0635f56053bd795c5c5. Reason for revert: broken on iOS and Skia Original change's description: > GL: Update StateManagerGL binding funcs to use ANGLE_GL_TRY > > Bug: angleproject:3020 > Change-Id: Iff460a1012d06e1c5feff84d91117de87e7c870a > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3123167 > Reviewed-by: Jamie Madill <jmadill@chromium.org> > Commit-Queue: Geoff Lang <geofflang@chromium.org> Bug: angleproject:3020 Change-Id: I54d81a7b734d007f65ff97990008f5e6eb8536f6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3140453 Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> 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
//
// Copyright 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.
//
// SamplerGL.cpp: Defines the rx::SamplerGL class, an implementation of SamplerImpl.
#include "libANGLE/renderer/gl/SamplerGL.h"
#include "libANGLE/renderer/gl/FunctionsGL.h"
#include "libANGLE/renderer/gl/StateManagerGL.h"
namespace
{
template <typename T>
inline void SetSamplerParameter(const rx::FunctionsGL *functions,
GLuint sampler,
GLenum name,
const T &value)
{
functions->samplerParameterf(sampler, name, static_cast<GLfloat>(value));
}
inline void SetSamplerParameter(const rx::FunctionsGL *functions,
GLuint sampler,
GLenum name,
const angle::ColorGeneric &value)
{
switch (value.type)
{
case angle::ColorGeneric::Type::Float:
functions->samplerParameterfv(sampler, name, &value.colorF.red);
break;
case angle::ColorGeneric::Type::Int:
functions->samplerParameterIiv(sampler, name, &value.colorI.red);
break;
case angle::ColorGeneric::Type::UInt:
functions->samplerParameterIuiv(sampler, name, &value.colorUI.red);
break;
default:
UNREACHABLE();
break;
}
}
template <typename Getter, typename Setter>
static inline void SyncSamplerStateMember(const rx::FunctionsGL *functions,
GLuint sampler,
const gl::SamplerState &newState,
gl::SamplerState &curState,
GLenum name,
Getter getter,
Setter setter)
{
if ((curState.*getter)() != (newState.*getter)())
{
(curState.*setter)((newState.*getter)());
SetSamplerParameter(functions, sampler, name, (newState.*getter)());
}
}
} // namespace
namespace rx
{
SamplerGL::SamplerGL(const gl::SamplerState &state,
const FunctionsGL *functions,
StateManagerGL *stateManager)
: SamplerImpl(state),
mFunctions(functions),
mStateManager(stateManager),
mAppliedSamplerState(),
mSamplerID(0)
{
mFunctions->genSamplers(1, &mSamplerID);
}
SamplerGL::~SamplerGL()
{
mStateManager->deleteSampler(mSamplerID);
mSamplerID = 0;
}
angle::Result SamplerGL::syncState(const gl::Context *context, const bool dirty)
{
if (!dirty)
{
return angle::Result::Continue;
}
// clang-format off
SyncSamplerStateMember(mFunctions, mSamplerID, mState, mAppliedSamplerState, GL_TEXTURE_MIN_FILTER, &gl::SamplerState::getMinFilter, &gl::SamplerState::setMinFilter);
SyncSamplerStateMember(mFunctions, mSamplerID, mState, mAppliedSamplerState, GL_TEXTURE_MAG_FILTER, &gl::SamplerState::getMagFilter, &gl::SamplerState::setMagFilter);
SyncSamplerStateMember(mFunctions, mSamplerID, mState, mAppliedSamplerState, GL_TEXTURE_WRAP_S, &gl::SamplerState::getWrapS, &gl::SamplerState::setWrapS);
SyncSamplerStateMember(mFunctions, mSamplerID, mState, mAppliedSamplerState, GL_TEXTURE_WRAP_T, &gl::SamplerState::getWrapT, &gl::SamplerState::setWrapT);
SyncSamplerStateMember(mFunctions, mSamplerID, mState, mAppliedSamplerState, GL_TEXTURE_WRAP_R, &gl::SamplerState::getWrapR, &gl::SamplerState::setWrapR);
SyncSamplerStateMember(mFunctions, mSamplerID, mState, mAppliedSamplerState, GL_TEXTURE_MAX_ANISOTROPY_EXT, &gl::SamplerState::getMaxAnisotropy, &gl::SamplerState::setMaxAnisotropy);
SyncSamplerStateMember(mFunctions, mSamplerID, mState, mAppliedSamplerState, GL_TEXTURE_MIN_LOD, &gl::SamplerState::getMinLod, &gl::SamplerState::setMinLod);
SyncSamplerStateMember(mFunctions, mSamplerID, mState, mAppliedSamplerState, GL_TEXTURE_MAX_LOD, &gl::SamplerState::getMaxLod, &gl::SamplerState::setMaxLod);
SyncSamplerStateMember(mFunctions, mSamplerID, mState, mAppliedSamplerState, GL_TEXTURE_COMPARE_MODE, &gl::SamplerState::getCompareMode, &gl::SamplerState::setCompareMode);
SyncSamplerStateMember(mFunctions, mSamplerID, mState, mAppliedSamplerState, GL_TEXTURE_COMPARE_FUNC, &gl::SamplerState::getCompareFunc, &gl::SamplerState::setCompareFunc);
SyncSamplerStateMember(mFunctions, mSamplerID, mState, mAppliedSamplerState, GL_TEXTURE_SRGB_DECODE_EXT, &gl::SamplerState::getSRGBDecode, &gl::SamplerState::setSRGBDecode);
SyncSamplerStateMember(mFunctions, mSamplerID, mState, mAppliedSamplerState, GL_TEXTURE_BORDER_COLOR, &gl::SamplerState::getBorderColor, &gl::SamplerState::setBorderColor);
// clang-format on
return angle::Result::Continue;
}
GLuint SamplerGL::getSamplerID() const
{
return mSamplerID;
}
} // namespace rx