| #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); |
| |
| 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 |