1 /*-------------------------------------------------------------------------
2 * OpenGL Conformance Test Suite
3 * -----------------------------
4 *
5 * Copyright (c) 2022-2022 The Khronos Group Inc.
6 *
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 */
19
20 /*!
21 * \file esextFragmentShadingRateTests.cpp
22 * \brief Base test group for fragment shading rate tests
23 */ /*-------------------------------------------------------------------*/
24
25 #include "esextcFragmentShadingRateTests.hpp"
26 #include "esextcFragmentShadingRateAPI.hpp"
27 #include "esextcFragmentShadingRateComplex.hpp"
28 #include "esextcFragmentShadingRateRenderTarget.hpp"
29 #include "glwEnums.hpp"
30
31 namespace glcts
32 {
33
34 /// Constructor
35 ///
36 /// @param context Test context
37 /// @param extParams extra parameters
FragmentShadingRateTests(glcts::Context & context,const ExtParameters & extParams)38 FragmentShadingRateTests::FragmentShadingRateTests(glcts::Context& context, const ExtParameters& extParams)
39 : TestCaseGroupBase(context, extParams, "fragment_shading_rate", "Fragment Shading Rate")
40 {
41 }
42
43 /// Initializes test cases for fragment shading rate tests
init(void)44 void FragmentShadingRateTests::init(void)
45 {
46 // Initialize base class
47 TestCaseGroupBase::init();
48
49 // Case 1 - via basic shading rate function
50 addChild(new FragmentShadingRateAPI(m_context, m_extParams));
51
52 // Case 2 - fragment shading rate combination cases
53 addChild(new FragmentShadingRateComplex(m_context, m_extParams));
54
55 // Case 3 - fragment shading rate attachment cases
56 addChild(new FragmentShadingRateRenderTarget(m_context, m_extParams));
57 }
58
59 namespace fsrutils
60 {
61
62 /// Tranlate Primitive ID to packed size of shading rate
63 ///
64 /// @param shadingRate shading rate enumeration to pack integer
65 ///
66 /// @return packed shading rate which is combined log of width and height
packShadingRate(glw::GLenum shadingRate)67 deUint32 packShadingRate(glw::GLenum shadingRate)
68 {
69 deUint32 width_shift; // 0, 1, 2
70 deUint32 height_shift; // 0, 1, 2
71
72 switch (shadingRate)
73 {
74 case GL_SHADING_RATE_1X1_PIXELS_EXT:
75 width_shift = 0;
76 height_shift = 0;
77 break;
78 case GL_SHADING_RATE_1X2_PIXELS_EXT:
79 width_shift = 0;
80 height_shift = 1;
81 break;
82 case GL_SHADING_RATE_1X4_PIXELS_EXT:
83 width_shift = 0;
84 height_shift = 2;
85 break;
86 case GL_SHADING_RATE_2X1_PIXELS_EXT:
87 width_shift = 1;
88 height_shift = 0;
89 break;
90 case GL_SHADING_RATE_2X2_PIXELS_EXT:
91 width_shift = 1;
92 height_shift = 1;
93 break;
94 case GL_SHADING_RATE_2X4_PIXELS_EXT:
95 width_shift = 1;
96 height_shift = 2;
97 break;
98 case GL_SHADING_RATE_4X1_PIXELS_EXT:
99 width_shift = 2;
100 height_shift = 0;
101 break;
102 case GL_SHADING_RATE_4X2_PIXELS_EXT:
103 width_shift = 2;
104 height_shift = 1;
105 break;
106 case GL_SHADING_RATE_4X4_PIXELS_EXT:
107 width_shift = 2;
108 height_shift = 2;
109 break;
110 default:
111 width_shift = 0;
112 height_shift = 0;
113 DE_ASSERT(0);
114 break;
115 }
116
117 const deUint32 packedShadingRate = ((width_shift << 2) | height_shift);
118 return packedShadingRate;
119 }
120
121 } // namespace fsrutils
122 } // namespace glcts
123