aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/gpu/gl
diff options
context:
space:
mode:
authorGravatar csmartdalton <csmartdalton@google.com>2016-06-23 13:42:13 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-06-23 13:42:13 -0700
commitb593a76749c6c7e12bf86aeaa06e1e52708e9bdf (patch)
treef830d0739fe1710765fa019bf8335a8b01923317 /tools/gpu/gl
parent425c27fab9d82d19b0bce7c091533d546465bbae (diff)
Support GL_SAMPLES queries in null contexts
Diffstat (limited to 'tools/gpu/gl')
-rw-r--r--tools/gpu/gl/debug/DebugGLTestContext.cpp79
-rw-r--r--tools/gpu/gl/debug/GrFBBindableObj.h6
-rw-r--r--tools/gpu/gl/debug/GrRenderBufferObj.h5
3 files changed, 87 insertions, 3 deletions
diff --git a/tools/gpu/gl/debug/DebugGLTestContext.cpp b/tools/gpu/gl/debug/DebugGLTestContext.cpp
index 022d56a452..cf8a9e4240 100644
--- a/tools/gpu/gl/debug/DebugGLTestContext.cpp
+++ b/tools/gpu/gl/debug/DebugGLTestContext.cpp
@@ -373,6 +373,34 @@ public:
}
}
+ GrGLvoid renderbufferStorage(GrGLenum target, GrGLenum internalformat, GrGLsizei width,
+ GrGLsizei height) override {
+ GrAlwaysAssert(GR_GL_RENDERBUFFER == target);
+ GrRenderBufferObj* renderBuffer = this->getRenderBuffer();
+ GrAlwaysAssert(renderBuffer);
+ renderBuffer->setNumSamples(1);
+ }
+
+ GrGLvoid renderbufferStorageMultisample(GrGLenum target, GrGLsizei samples,
+ GrGLenum internalformat, GrGLsizei width,
+ GrGLsizei height) override {
+ GrAlwaysAssert(GR_GL_RENDERBUFFER == target);
+ GrRenderBufferObj* renderBuffer = this->getRenderBuffer();
+ GrAlwaysAssert(renderBuffer);
+ renderBuffer->setNumSamples(samples);
+ }
+
+ GrGLvoid namedRenderbufferStorage(GrGLuint renderbuffer, GrGLenum GrGLinternalformat,
+ GrGLsizei width, GrGLsizei height) override {
+ SK_ABORT("Not implemented");
+ }
+
+ GrGLvoid namedRenderbufferStorageMultisample(GrGLuint renderbuffer, GrGLsizei samples,
+ GrGLenum GrGLinternalformat, GrGLsizei width,
+ GrGLsizei height) override {
+ SK_ABORT("Not implemented");
+ }
+
GrGLvoid framebufferRenderbuffer(GrGLenum target,
GrGLenum attachment,
GrGLenum renderbuffertarget,
@@ -410,6 +438,12 @@ public:
}
+ GrGLvoid namedFramebufferRenderbuffer(GrGLuint framebuffer, GrGLenum attachment,
+ GrGLenum renderbuffertarget,
+ GrGLuint renderbuffer) override {
+ SK_ABORT("Not implemented");
+ }
+
////////////////////////////////////////////////////////////////////////////////
GrGLvoid framebufferTexture2D(GrGLenum target, GrGLenum attachment, GrGLenum textarget,
GrGLuint textureID, GrGLint level) override {
@@ -450,6 +484,30 @@ public:
};
}
+ GrGLvoid framebufferTexture2DMultisample(GrGLenum target, GrGLenum attachment,
+ GrGLenum textarget, GrGLuint texture, GrGLint level,
+ GrGLsizei samples) override {
+ SK_ABORT("Not implemented");
+ }
+
+ GrGLvoid namedFramebufferTexture1D(GrGLuint framebuffer, GrGLenum attachment,
+ GrGLenum textarget, GrGLuint texture,
+ GrGLint level) override {
+ SK_ABORT("Not implemented");
+ }
+
+ GrGLvoid namedFramebufferTexture2D(GrGLuint framebuffer, GrGLenum attachment,
+ GrGLenum textarget, GrGLuint texture,
+ GrGLint level) override {
+ SK_ABORT("Not implemented");
+ }
+
+ GrGLvoid namedFramebufferTexture3D(GrGLuint framebuffer, GrGLenum attachment,
+ GrGLenum textarget, GrGLuint texture, GrGLint level,
+ GrGLint zoffset) override {
+ SK_ABORT("Not implemented");
+ }
+
GrGLuint createProgram() override {
GrProgramObj *program = CREATE(GrProgramObj, kProgram_ObjTypes);
@@ -530,9 +588,26 @@ public:
case GR_GL_STENCIL_BITS:
*params = 8;
break;
- case GR_GL_SAMPLES:
- *params = 1;
+ case GR_GL_SAMPLES: {
+ GrFrameBufferObj* framebuffer = this->getFrameBuffer();
+ GrAlwaysAssert(framebuffer);
+ int numSamples = 0;
+
+ if (GrFBBindableObj* stencil = framebuffer->getStencil()) {
+ numSamples = stencil->numSamples();
+ }
+ if (GrFBBindableObj* depth = framebuffer->getDepth()) {
+ GrAlwaysAssert(!numSamples || numSamples == depth->numSamples());
+ numSamples = depth->numSamples();
+ }
+ if (GrFBBindableObj* color = framebuffer->getColor()) {
+ GrAlwaysAssert(!numSamples || numSamples == color->numSamples());
+ numSamples = color->numSamples();
+ }
+ GrAlwaysAssert(numSamples);
+ *params = numSamples;
break;
+ }
case GR_GL_FRAMEBUFFER_BINDING:
*params = 0;
break;
diff --git a/tools/gpu/gl/debug/GrFBBindableObj.h b/tools/gpu/gl/debug/GrFBBindableObj.h
index e2b43a6a1b..f5b46ab5d9 100644
--- a/tools/gpu/gl/debug/GrFBBindableObj.h
+++ b/tools/gpu/gl/debug/GrFBBindableObj.h
@@ -18,7 +18,8 @@ class GrFBBindableObj : public GrFakeRefObj {
public:
GrFBBindableObj()
- : GrFakeRefObj() {
+ : GrFakeRefObj()
+ , fNumSamples(1) {
}
virtual ~GrFBBindableObj() {
@@ -75,8 +76,11 @@ public:
return 0 != fStencilReferees.count();
}
+ int numSamples() { return fNumSamples; }
protected:
+ int fNumSamples;
+
private:
SkTDArray<GrFakeRefObj *> fColorReferees; // frame buffers that use this as a color buffer (via "glFramebufferRenderbuffer" or "glFramebufferTexture2D")
SkTDArray<GrFakeRefObj *> fDepthReferees; // frame buffers that use this as a depth buffer (via "glFramebufferRenderbuffer" or "glFramebufferTexture2D")
diff --git a/tools/gpu/gl/debug/GrRenderBufferObj.h b/tools/gpu/gl/debug/GrRenderBufferObj.h
index 8231ef58df..134b9ec763 100644
--- a/tools/gpu/gl/debug/GrRenderBufferObj.h
+++ b/tools/gpu/gl/debug/GrRenderBufferObj.h
@@ -30,6 +30,11 @@ public:
this->INHERITED::deleteAction();
}
+ void setNumSamples(int numSamples) {
+ GrAlwaysAssert(numSamples > 0);
+ fNumSamples = numSamples;
+ }
+
protected:
private:
bool fBound; // is this render buffer currently bound via "glBindRenderbuffer"?