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.
142 lines
3.9 KiB
142 lines
3.9 KiB
#ifndef _ES31FMULTISAMPLESHADERRENDERCASE_HPP
|
|
#define _ES31FMULTISAMPLESHADERRENDERCASE_HPP
|
|
/*-------------------------------------------------------------------------
|
|
* drawElements Quality Program OpenGL ES 3.1 Module
|
|
* -------------------------------------------------
|
|
*
|
|
* Copyright 2014 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 Multisample shader render case
|
|
*//*--------------------------------------------------------------------*/
|
|
|
|
#include "tcuDefs.hpp"
|
|
#include "tes31TestCase.hpp"
|
|
|
|
#include <map>
|
|
|
|
namespace tcu
|
|
{
|
|
class Surface;
|
|
} // tcu
|
|
|
|
namespace glu
|
|
{
|
|
class ShaderProgram;
|
|
} // glu
|
|
|
|
|
|
namespace deqp
|
|
{
|
|
namespace gles31
|
|
{
|
|
namespace Functional
|
|
{
|
|
namespace MultisampleShaderRenderUtil
|
|
{
|
|
|
|
class QualityWarning : public tcu::Exception
|
|
{
|
|
public:
|
|
QualityWarning (const std::string& message);
|
|
};
|
|
|
|
class MultisampleRenderCase : public TestCase
|
|
{
|
|
public:
|
|
enum RenderTarget
|
|
{
|
|
TARGET_DEFAULT = 0,
|
|
TARGET_TEXTURE,
|
|
TARGET_RENDERBUFFER,
|
|
|
|
TARGET_LAST
|
|
};
|
|
enum Flags
|
|
{
|
|
FLAG_PER_ITERATION_SHADER = 1,
|
|
FLAG_VERIFY_MSAA_TEXTURE_SAMPLE_BUFFERS = 2, // !< flag set: each sample layer is verified by verifySampleBuffer
|
|
};
|
|
|
|
MultisampleRenderCase (Context& context, const char* name, const char* desc, int numSamples, RenderTarget target, int renderSize, int flags = 0);
|
|
virtual ~MultisampleRenderCase (void);
|
|
|
|
virtual void init (void);
|
|
virtual void deinit (void);
|
|
IterateResult iterate (void);
|
|
|
|
private:
|
|
virtual void preDraw (void);
|
|
virtual void postDraw (void);
|
|
virtual void preTest (void);
|
|
virtual void postTest (void);
|
|
virtual std::string getIterationDescription (int iteration) const;
|
|
|
|
void drawOneIteration (void);
|
|
void verifyResultImageAndSetResult (const tcu::Surface& resultImage);
|
|
void verifyResultBuffersAndSetResult (const std::vector<tcu::Surface>& resultBuffers);
|
|
virtual std::string genVertexSource (int numTargetSamples) const;
|
|
virtual std::string genFragmentSource (int numTargetSamples) const = 0;
|
|
std::string genMSSamplerSource (int numTargetSamples) const;
|
|
std::string genMSTextureResolverSource (int numTargetSamples) const;
|
|
std::string genMSTextureLayerFetchSource (int numTargetSamples) const;
|
|
virtual bool verifyImage (const tcu::Surface& resultImage) = 0;
|
|
virtual bool verifySampleBuffers (const std::vector<tcu::Surface>& resultBuffers);
|
|
virtual void setupRenderData (void);
|
|
|
|
glw::GLint getMaxConformantSampleCount (glw::GLenum target, glw::GLenum internalFormat);
|
|
|
|
protected:
|
|
struct Attrib
|
|
{
|
|
int offset;
|
|
int stride;
|
|
};
|
|
|
|
const int m_numRequestedSamples;
|
|
const RenderTarget m_renderTarget;
|
|
const int m_renderSize;
|
|
const bool m_perIterationShader;
|
|
const bool m_verifyTextureSampleBuffers;
|
|
deInt32 m_numTargetSamples;
|
|
|
|
deUint32 m_buffer;
|
|
deUint32 m_resolveBuffer;
|
|
glu::ShaderProgram* m_program;
|
|
deUint32 m_fbo;
|
|
deUint32 m_fboTexture;
|
|
glu::ShaderProgram* m_textureSamplerProgram;
|
|
deUint32 m_fboRbo;
|
|
deUint32 m_resolveFbo;
|
|
deUint32 m_resolveFboTexture;
|
|
int m_iteration;
|
|
int m_numIterations;
|
|
deUint32 m_renderMode;
|
|
deInt32 m_renderCount;
|
|
deUint32 m_renderVao;
|
|
deUint32 m_resolveVao;
|
|
|
|
std::string m_renderSceneDescription;
|
|
std::map<std::string, Attrib> m_renderAttribs;
|
|
};
|
|
|
|
} // MultisampleShaderRenderUtil
|
|
} // Functional
|
|
} // gles31
|
|
} // deqp
|
|
|
|
#endif // _ES31FMULTISAMPLESHADERRENDERCASE_HPP
|