diff options
author | csmartdalton <csmartdalton@google.com> | 2016-06-21 14:27:16 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-06-21 14:27:17 -0700 |
commit | 64b92a59294a2f73448b3fa8f36f39079f032521 (patch) | |
tree | c7efe323473c634945e483ebff88929e0a212412 /tools/gpu/gl/debug | |
parent | e6939c15dc0c09f1348988dc56e50b6bea27b7ce (diff) |
Support GL_SAMPLES queries in null contexts
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2085043002
Review-Url: https://codereview.chromium.org/2085043002
Diffstat (limited to 'tools/gpu/gl/debug')
-rw-r--r-- | tools/gpu/gl/debug/DebugGLTestContext.cpp | 79 | ||||
-rw-r--r-- | tools/gpu/gl/debug/GrFBBindableObj.h | 6 | ||||
-rw-r--r-- | tools/gpu/gl/debug/GrRenderBufferObj.h | 5 |
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"? |