Hash :
e25b8006
Author :
Date :
2018-09-20T13:39:49
Move sampler sync out of syncProgramTextures. We only need to call the syncState for samplers when they are dirty. Also includes changes to refactor out the sampler sync in GL. Adds observer bindings so sampler sync is handled correctly in resource sharing scenarios. Bug: angleproject:2763 Change-Id: I762f0738ee7572ae29ce6bd5384a30aa9588c848 Reviewed-on: https://chromium-review.googlesource.com/1227797 Reviewed-by: Shahbaz Youssefi <syoussefi@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
//
// Copyright (c) 2013 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.
//
// Sampler.h : Defines the Sampler class, which represents a GLES 3
// sampler object. Sampler objects store some state needed to sample textures.
#ifndef LIBANGLE_SAMPLER_H_
#define LIBANGLE_SAMPLER_H_
#include "libANGLE/Debug.h"
#include "libANGLE/Observer.h"
#include "libANGLE/RefCountObject.h"
#include "libANGLE/angletypes.h"
namespace rx
{
class GLImplFactory;
class SamplerImpl;
}
namespace gl
{
class Sampler final : public RefCountObject, public LabeledObject, public angle::Subject
{
public:
Sampler(rx::GLImplFactory *factory, GLuint id);
~Sampler() override;
Error onDestroy(const Context *context) override;
void setLabel(const std::string &label) override;
const std::string &getLabel() const override;
void setMinFilter(GLenum minFilter);
GLenum getMinFilter() const;
void setMagFilter(GLenum magFilter);
GLenum getMagFilter() const;
void setWrapS(GLenum wrapS);
GLenum getWrapS() const;
void setWrapT(GLenum wrapT);
GLenum getWrapT() const;
void setWrapR(GLenum wrapR);
GLenum getWrapR() const;
void setMaxAnisotropy(float maxAnisotropy);
float getMaxAnisotropy() const;
void setMinLod(GLfloat minLod);
GLfloat getMinLod() const;
void setMaxLod(GLfloat maxLod);
GLfloat getMaxLod() const;
void setCompareMode(GLenum compareMode);
GLenum getCompareMode() const;
void setCompareFunc(GLenum compareFunc);
GLenum getCompareFunc() const;
void setSRGBDecode(GLenum sRGBDecode);
GLenum getSRGBDecode() const;
const SamplerState &getSamplerState() const;
rx::SamplerImpl *getImplementation() const;
void syncState(const Context *context);
private:
SamplerState mState;
rx::SamplerImpl *mImpl;
std::string mLabel;
};
} // namespace gl
#endif // LIBANGLE_SAMPLER_H_