- sample count must be the same on all attachments - fixedsamplepositions must be the same on all attachments (renderbuffers have fixedsamplepositions=true implicitly; only multisample textures can choose to have it false)
Signed-off-by: Chris Forbes <chr...@ijw.co.nz> --- src/mesa/main/fbobject.c | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c index c541695..b1d2eb4 100644 --- a/src/mesa/main/fbobject.c +++ b/src/mesa/main/fbobject.c @@ -681,6 +681,7 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx, GLenum intFormat = GL_NONE; /* color buffers' internal format */ GLuint minWidth = ~0, minHeight = ~0, maxWidth = 0, maxHeight = 0; GLint numSamples = -1; + GLint fixedSampleLocations = -1; GLint i; GLuint j; @@ -756,6 +757,12 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx, fbo_incomplete("texture attachment incomplete", -1); return; } + + if (numSamples < 0) + numSamples = att->Texture->NumSamples; + + if (fixedSampleLocations < 0) + fixedSampleLocations = att->Texture->FixedSampleLocations; } else if (att->Type == GL_RENDERBUFFER_EXT) { minWidth = MIN2(minWidth, att->Renderbuffer->Width); @@ -765,21 +772,23 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx, f = att->Renderbuffer->InternalFormat; attFormat = att->Renderbuffer->Format; numImages++; + + if (numSamples < 0) + numSamples = att->Renderbuffer->NumSamples; + + /* RENDERBUFFER has fixedSampleLocations implicitly true */ + if (fixedSampleLocations < 0) + fixedSampleLocations = GL_TRUE; } else { assert(att->Type == GL_NONE); continue; } - if (att->Renderbuffer && numSamples < 0) { - /* first buffer */ - numSamples = att->Renderbuffer->NumSamples; - } - /* check if integer color */ fb->_IntegerColor = _mesa_is_format_integer_color(attFormat); - /* Error-check width, height, format, samples + /* Error-check width, height, format, samples, fixedSampleLocations */ if (numImages == 1) { /* save format, num samples */ @@ -802,10 +811,18 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx, return; } } - if (att->Renderbuffer && - att->Renderbuffer->NumSamples != numSamples) { + + if ((att->Type == GL_RENDERBUFFER && att->Renderbuffer->NumSamples != numSamples) || + (att->Type == GL_TEXTURE && att->Texture->NumSamples != numSamples)) { + fb->_Status = GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE; + fbo_incomplete("inconsistent number of samples", i); + return; + } + + if ((att->Type == GL_RENDERBUFFER && GL_TRUE != fixedSampleLocations) || + (att->Type == GL_TEXTURE && att->Texture->FixedSampleLocations != fixedSampleLocations)) { fb->_Status = GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE; - fbo_incomplete("inconsistant number of samples", i); + fbo_incomplete("inconsistent fixedsamplelocations", i); return; } } -- 1.8.0.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev