/* find first RGB renderbuffer */
for (unsigned i = 0; i < BUFFER_COUNT; i++) {
if (fb->Attachment[i].Renderbuffer) {
- const struct gl_renderbuffer *rb = fb->Attachment[i].Renderbuffer;
+ const struct gl_renderbuffer_attachment *att = &fb->Attachment[i];
+ const struct gl_renderbuffer *rb = att->Renderbuffer;
const GLenum baseFormat = _mesa_get_format_base_format(rb->Format);
const mesa_format fmt = rb->Format;
/* Grab samples and sampleBuffers from any attachment point (assuming
* the framebuffer is complete, we'll get the same answer from all
- * attachments).
+ * attachments). If using EXT_multisampled_render_to_texture, the
+ * number of samples will be on fb->Attachment[i].NumSamples instead
+ * of the usual rb->NumSamples, but it's still guarantted to be the
+ * same for every attachment.
+ *
+ * From EXT_multisampled_render_to_texture:
+ *
+ * Also, FBOs cannot combine attachments that have associated
+ * multisample data specified by the mechanisms described in this
+ * extension with attachments allocated using the core OpenGL ES
+ * 3.1 mechanisms, such as TexStorage2DMultisample. Add to section
+ * 9.4.2 "Whole Framebuffer Completeness":
+ *
+ * "* If the value of RENDERBUFFER_SAMPLES is non-zero, all or
+ * none of the attached renderbuffers have been allocated
+ * using RenderbufferStorage- MultisampleEXT; if the value of
+ * TEXTURES_SAMPLES is non-zero, all or none of the attached
+ * textures have been attached using Framebuffer-
+ * Texture2DMultisampleEXT.
+ * { GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT }"
*/
- fb->Visual.samples = rb->NumSamples;
+ fb->Visual.samples =
+ att->NumSamples ? att->NumSamples : rb->NumSamples;
if (_mesa_is_legal_color_format(ctx, baseFormat)) {
fb->Visual.redBits = _mesa_get_format_bits(fmt, GL_RED_BITS);