bool SupportedCombinationTest::tryCombination (const FormatCombination& comb) { glu::Framebuffer fbo(m_ctx.getRenderContext()); FboBuilder builder(*fbo, GL_FRAMEBUFFER, fboc::gl(*this)); attachTargetToNew(GL_COLOR_ATTACHMENT0, comb.colorKind, comb.colorFmt, 64, 64, builder); attachTargetToNew(GL_DEPTH_ATTACHMENT, comb.depthKind, comb.depthFmt, 64, 64, builder); attachTargetToNew(GL_STENCIL_ATTACHMENT, comb.stencilKind, comb.stencilFmt, 64, 64, builder); const GLenum glStatus = fboc::gl(*this).checkFramebufferStatus(GL_FRAMEBUFFER); return (glStatus == GL_FRAMEBUFFER_COMPLETE); }
IterateResult NumSamplesTest::build (FboBuilder& builder) { static const GLenum s_targets[] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_DEPTH_ATTACHMENT, }; // Non-integer formats for each attachment type. // \todo [2013-12-17 lauri] Add fixed/floating/integer metadata for formats so // we can pick one smartly or maybe try several. static const GLenum s_formats[] = { GL_RGBA8, GL_RGB565, GL_DEPTH_COMPONENT24, }; DE_STATIC_ASSERT(DE_LENGTH_OF_ARRAY(s_targets) == DE_LENGTH_OF_ARRAY(m_params.numSamples)); for (int i = 0; i < DE_LENGTH_OF_ARRAY(s_targets); i++) { const GLenum target = s_targets[i]; const ImageFormat fmt = { s_formats[i], GL_NONE }; const GLsizei ns = m_params.numSamples[i]; if (ns == -2) continue; if (ns == -1) { attachTargetToNew(target, GL_TEXTURE, fmt, 64, 64, builder); } else { Renderbuffer& rboCfg = builder.makeConfig<Renderbuffer>(); rboCfg.internalFormat = fmt; rboCfg.width = rboCfg.height = 64; rboCfg.numSamples = ns; const GLuint rbo = builder.glCreateRbo(rboCfg); // Implementations do not necessarily support sample sizes greater than 1. TCU_CHECK_AND_THROW(NotSupportedError, builder.getError() != GL_INVALID_OPERATION, "Unsupported number of samples"); RenderbufferAttachment& att = builder.makeConfig<RenderbufferAttachment>(); att.imageName = rbo; builder.glAttach(target, &att); } } return STOP; }