You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
231 lines
8.3 KiB
231 lines
8.3 KiB
/*-------------------------------------------------------------------------
|
|
* drawElements Quality Program OpenGL ES 3.1 Module
|
|
* -------------------------------------------------
|
|
*
|
|
* Copyright 2015 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*
|
|
*//*!
|
|
* \file
|
|
* \brief Framebuffer Default State Query tests.
|
|
*//*--------------------------------------------------------------------*/
|
|
|
|
#include "es31fFramebufferDefaultStateQueryTests.hpp"
|
|
#include "glsStateQueryUtil.hpp"
|
|
#include "gluRenderContext.hpp"
|
|
#include "gluCallLogWrapper.hpp"
|
|
#include "gluObjectWrapper.hpp"
|
|
#include "glwFunctions.hpp"
|
|
#include "glwEnums.hpp"
|
|
|
|
namespace deqp
|
|
{
|
|
namespace gles31
|
|
{
|
|
namespace Functional
|
|
{
|
|
namespace
|
|
{
|
|
|
|
using namespace gls::StateQueryUtil;
|
|
|
|
static const char* getVerifierSuffix (QueryType type)
|
|
{
|
|
switch (type)
|
|
{
|
|
case QUERY_FRAMEBUFFER_INTEGER: return "get_framebuffer_parameteriv";
|
|
default:
|
|
DE_ASSERT(DE_FALSE);
|
|
return DE_NULL;
|
|
}
|
|
}
|
|
|
|
class FramebufferTest : public TestCase
|
|
{
|
|
public:
|
|
FramebufferTest (Context& context, QueryType verifier, const char* name, const char* desc);
|
|
IterateResult iterate (void);
|
|
|
|
protected:
|
|
virtual void checkInitial (tcu::ResultCollector& result, glu::CallLogWrapper& gl) = 0;
|
|
virtual void checkSet (tcu::ResultCollector& result, glu::CallLogWrapper& gl) = 0;
|
|
|
|
const QueryType m_verifier;
|
|
};
|
|
|
|
FramebufferTest::FramebufferTest (Context& context, QueryType verifier, const char* name, const char* desc)
|
|
: TestCase (context, name, desc)
|
|
, m_verifier (verifier)
|
|
{
|
|
}
|
|
|
|
FramebufferTest::IterateResult FramebufferTest::iterate (void)
|
|
{
|
|
glu::Framebuffer fbo (m_context.getRenderContext());
|
|
glu::CallLogWrapper gl (m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
|
|
tcu::ResultCollector result (m_testCtx.getLog(), " // ERROR: ");
|
|
|
|
gl.enableLogging(true);
|
|
|
|
gl.glBindFramebuffer(GL_DRAW_FRAMEBUFFER, *fbo);
|
|
GLU_EXPECT_NO_ERROR(gl.glGetError(), "bind");
|
|
|
|
{
|
|
const tcu::ScopedLogSection section(m_testCtx.getLog(), "Initial", "Initial");
|
|
checkInitial(result, gl);
|
|
}
|
|
|
|
{
|
|
const tcu::ScopedLogSection section(m_testCtx.getLog(), "Set", "Set");
|
|
checkSet(result, gl);
|
|
}
|
|
|
|
result.setTestContextResult(m_testCtx);
|
|
return STOP;
|
|
}
|
|
|
|
class FramebufferDimensionTest : public FramebufferTest
|
|
{
|
|
public:
|
|
enum DimensionType
|
|
{
|
|
DIMENSION_WIDTH = 0,
|
|
DIMENSION_HEIGHT,
|
|
|
|
DIMENSION_LAST
|
|
};
|
|
|
|
FramebufferDimensionTest (Context& context, QueryType verifier, DimensionType dimension, const char* name, const char* desc);
|
|
void checkInitial (tcu::ResultCollector& result, glu::CallLogWrapper& gl);
|
|
void checkSet (tcu::ResultCollector& result, glu::CallLogWrapper& gl);
|
|
|
|
private:
|
|
const DimensionType m_dimension;
|
|
};
|
|
|
|
FramebufferDimensionTest::FramebufferDimensionTest (Context& context, QueryType verifier, DimensionType dimension, const char* name, const char* desc)
|
|
: FramebufferTest (context, verifier, name, desc)
|
|
, m_dimension (dimension)
|
|
{
|
|
DE_ASSERT(dimension < DIMENSION_LAST);
|
|
}
|
|
|
|
void FramebufferDimensionTest::checkInitial (tcu::ResultCollector& result, glu::CallLogWrapper& gl)
|
|
{
|
|
const glw::GLenum pname = (m_dimension == DIMENSION_WIDTH) ? (GL_FRAMEBUFFER_DEFAULT_WIDTH) : (GL_FRAMEBUFFER_DEFAULT_HEIGHT);
|
|
verifyStateFramebufferInteger(result, gl, GL_DRAW_FRAMEBUFFER, pname, 0, m_verifier);
|
|
}
|
|
|
|
void FramebufferDimensionTest::checkSet (tcu::ResultCollector& result, glu::CallLogWrapper& gl)
|
|
{
|
|
const glw::GLenum pname = (m_dimension == DIMENSION_WIDTH) ? (GL_FRAMEBUFFER_DEFAULT_WIDTH) : (GL_FRAMEBUFFER_DEFAULT_HEIGHT);
|
|
|
|
gl.glFramebufferParameteri(GL_DRAW_FRAMEBUFFER, pname, 32);
|
|
GLU_EXPECT_NO_ERROR(gl.glGetError(), "set state");
|
|
|
|
verifyStateFramebufferInteger(result, gl, GL_DRAW_FRAMEBUFFER, pname, 32, m_verifier);
|
|
}
|
|
|
|
class FramebufferSamplesTest : public FramebufferTest
|
|
{
|
|
public:
|
|
FramebufferSamplesTest (Context& context, QueryType verifier, const char* name, const char* desc);
|
|
void checkInitial (tcu::ResultCollector& result, glu::CallLogWrapper& gl);
|
|
void checkSet (tcu::ResultCollector& result, glu::CallLogWrapper& gl);
|
|
};
|
|
|
|
FramebufferSamplesTest::FramebufferSamplesTest (Context& context, QueryType verifier, const char* name, const char* desc)
|
|
: FramebufferTest(context, verifier, name, desc)
|
|
{
|
|
}
|
|
|
|
void FramebufferSamplesTest::checkInitial (tcu::ResultCollector& result, glu::CallLogWrapper& gl)
|
|
{
|
|
verifyStateFramebufferInteger(result, gl, GL_DRAW_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_SAMPLES, 0, m_verifier);
|
|
}
|
|
|
|
void FramebufferSamplesTest::checkSet (tcu::ResultCollector& result, glu::CallLogWrapper& gl)
|
|
{
|
|
gl.glFramebufferParameteri(GL_DRAW_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_SAMPLES, 1);
|
|
GLU_EXPECT_NO_ERROR(gl.glGetError(), "set state");
|
|
verifyStateFramebufferIntegerMin(result, gl, GL_DRAW_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_SAMPLES, 1, m_verifier);
|
|
|
|
gl.glFramebufferParameteri(GL_DRAW_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_SAMPLES, 0);
|
|
GLU_EXPECT_NO_ERROR(gl.glGetError(), "set state");
|
|
verifyStateFramebufferInteger(result, gl, GL_DRAW_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_SAMPLES, 0, m_verifier);
|
|
}
|
|
|
|
class FramebufferFixedSampleLocationsTest : public FramebufferTest
|
|
{
|
|
public:
|
|
FramebufferFixedSampleLocationsTest (Context& context, QueryType verifier, const char* name, const char* desc);
|
|
void checkInitial (tcu::ResultCollector& result, glu::CallLogWrapper& gl);
|
|
void checkSet (tcu::ResultCollector& result, glu::CallLogWrapper& gl);
|
|
};
|
|
|
|
FramebufferFixedSampleLocationsTest::FramebufferFixedSampleLocationsTest (Context& context, QueryType verifier, const char* name, const char* desc)
|
|
: FramebufferTest(context, verifier, name, desc)
|
|
{
|
|
}
|
|
|
|
void FramebufferFixedSampleLocationsTest::checkInitial (tcu::ResultCollector& result, glu::CallLogWrapper& gl)
|
|
{
|
|
verifyStateFramebufferInteger(result, gl, GL_DRAW_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS, 0, m_verifier);
|
|
}
|
|
|
|
void FramebufferFixedSampleLocationsTest::checkSet (tcu::ResultCollector& result, glu::CallLogWrapper& gl)
|
|
{
|
|
gl.glFramebufferParameteri(GL_DRAW_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS, GL_TRUE);
|
|
GLU_EXPECT_NO_ERROR(gl.glGetError(), "set state");
|
|
verifyStateFramebufferInteger(result, gl, GL_DRAW_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS, GL_TRUE, m_verifier);
|
|
}
|
|
|
|
} // anonymous
|
|
|
|
FramebufferDefaultStateQueryTests::FramebufferDefaultStateQueryTests (Context& context)
|
|
: TestCaseGroup(context, "framebuffer_default", "Framebuffer Default State Query tests")
|
|
{
|
|
}
|
|
|
|
FramebufferDefaultStateQueryTests::~FramebufferDefaultStateQueryTests (void)
|
|
{
|
|
}
|
|
|
|
void FramebufferDefaultStateQueryTests::init (void)
|
|
{
|
|
static const QueryType verifiers[] =
|
|
{
|
|
QUERY_FRAMEBUFFER_INTEGER,
|
|
};
|
|
|
|
#define FOR_EACH_VERIFIER(X) \
|
|
for (int verifierNdx = 0; verifierNdx < DE_LENGTH_OF_ARRAY(verifiers); ++verifierNdx) \
|
|
{ \
|
|
const char* verifierSuffix = getVerifierSuffix(verifiers[verifierNdx]); \
|
|
const QueryType verifier = verifiers[verifierNdx]; \
|
|
this->addChild(X); \
|
|
}
|
|
|
|
FOR_EACH_VERIFIER(new FramebufferDimensionTest (m_context, verifier, FramebufferDimensionTest::DIMENSION_WIDTH, (std::string("framebuffer_default_width_") + verifierSuffix).c_str(), "Test FRAMEBUFFER_DEFAULT_WIDTH"));
|
|
FOR_EACH_VERIFIER(new FramebufferDimensionTest (m_context, verifier, FramebufferDimensionTest::DIMENSION_HEIGHT, (std::string("framebuffer_default_height_") + verifierSuffix).c_str(), "Test FRAMEBUFFER_DEFAULT_HEIGHT"));
|
|
FOR_EACH_VERIFIER(new FramebufferSamplesTest (m_context, verifier, (std::string("framebuffer_default_samples_") + verifierSuffix).c_str(), "Test FRAMEBUFFER_DEFAULT_SAMPLES"));
|
|
FOR_EACH_VERIFIER(new FramebufferFixedSampleLocationsTest (m_context, verifier, (std::string("framebuffer_default_fixed_sample_locations_") + verifierSuffix).c_str(), "Test FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS"));
|
|
|
|
#undef FOR_EACH_VERIFIER
|
|
}
|
|
|
|
} // Functional
|
|
} // gles31
|
|
} // deqp
|