1 #ifndef _ESEXTCFRAGMENTSHADINGRATECOMBINEDTESTS_HPP 2 #define _ESEXTCFRAGMENTSHADINGRATECOMBINEDTESTS_HPP 3 /*------------------------------------------------------------------------- 4 * OpenGL Conformance Test Suite 5 * ----------------------------- 6 * 7 * Copyright (c) 2022-2022 The Khronos Group Inc. 8 * 9 * Licensed under the Apache License, Version 2.0 (the "License"); 10 * you may not use this file except in compliance with the License. 11 * You may obtain a copy of the License at 12 * 13 * http://www.apache.org/licenses/LICENSE-2.0 14 * 15 * Unless required by applicable law or agreed to in writing, software 16 * distributed under the License is distributed on an "AS IS" BASIS, 17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18 * See the License for the specific language governing permissions and 19 * limitations under the License. 20 */ 21 22 /*! 23 * \file esextcesextcFragmentShadingRateCombinedTests.hpp 24 * \brief FragmentShadingRateEXT tests for combination of conditions 25 */ /*-------------------------------------------------------------------*/ 26 27 #include "../esextcTestCaseBase.hpp" 28 #include "gluShaderUtil.hpp" 29 #include "tcuDefs.hpp" 30 31 #include <vector> 32 33 namespace glu 34 { 35 class ShaderProgram; 36 } 37 38 namespace glcts 39 { 40 class FragmentShadingRateCombined : public TestCaseBase 41 { 42 public: 43 struct TestcaseParam 44 { 45 bool useShadingRateAPI; 46 bool useShadingRatePrimitive; 47 bool useShadingRateAttachment; 48 glw::GLenum combinerOp0; 49 glw::GLenum combinerOp1; 50 bool msaa; 51 int32_t framebufferSize; 52 }; 53 54 struct Extent2D 55 { 56 uint32_t width; 57 uint32_t height; 58 }; 59 60 public: 61 FragmentShadingRateCombined(Context &context, const ExtParameters &extParams, 62 const FragmentShadingRateCombined::TestcaseParam &testcaseParam, const char *name, 63 const char *description); 64 ~FragmentShadingRateCombined()65 virtual ~FragmentShadingRateCombined() 66 { 67 } 68 69 void init(void) override; 70 void deinit(void) override; 71 IterateResult iterate(void) override; 72 73 private: 74 std::string genVS(); 75 std::string genFS(); 76 std::string genCS(); 77 glw::GLenum translateDrawIDToShadingRate(uint32_t drawID) const; 78 glw::GLenum translatePrimIDToShadingRate(uint32_t primID) const; 79 glw::GLenum translateCoordsToShadingRate(uint32_t srx, uint32_t sry) const; 80 uint32_t getPrimitiveID(uint32_t drawID) const; 81 uint32_t simulate(uint32_t drawID, uint32_t primID, uint32_t x, uint32_t y); 82 Extent2D packedShadingRateToExtent(uint32_t packedRate) const; 83 uint32_t shadingRateExtentToClampedMask(Extent2D ext, bool allowSwap) const; 84 85 void setupTest(void); 86 Extent2D combine(Extent2D extent0, Extent2D extent1, glw::GLenum combineOp) const; 87 88 private: 89 TestcaseParam m_tcParam; 90 glu::ShaderProgram *m_renderProgram; 91 glu::ShaderProgram *m_computeProgram; 92 glw::GLuint m_to_id; 93 glw::GLuint m_sr_to_id; 94 glw::GLuint m_fbo_id; 95 glw::GLuint m_vbo_id; 96 std::vector<glw::GLenum> m_availableShadingRates; 97 glw::GLint m_srTexelWidth; 98 glw::GLint m_srTexelHeight; 99 std::vector<uint32_t> m_simulationCache; 100 }; 101 102 } // namespace glcts 103 104 #endif // _ESEXTCFRAGMENTSHADINGRATECOMBINEDTESTS_HPP 105