• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #ifndef _VKTSAMPLEVERIFIERUTIL_HPP
2 #define _VKTSAMPLEVERIFIERUTIL_HPP
3 /*-------------------------------------------------------------------------
4  * Vulkan Conformance Tests
5  * ------------------------
6  *
7  * Copyright (c) 2016 Google 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  * \file
23  * \brief GPU image sample verification
24  *//*--------------------------------------------------------------------*/
25 
26 #include "vktSampleVerifier.hpp"
27 
28 #include "deMath.h"
29 #include "tcuFloatFormat.hpp"
30 #include "tcuTexture.hpp"
31 #include "vkDefs.hpp"
32 
33 namespace vkt
34 {
35 namespace texture
36 {
37 namespace util
38 {
39 
40 float		addUlp						(float							num,
41 										 deInt32						ulp);
42 
43 deInt32		mod							(const deInt32					a,
44 										 const deInt32					n);
45 deInt32	    mirror						(const deInt32					n);
46 
47 tcu::Vec2	calcLodBounds				(const tcu::Vec3&				dPdx,
48 										 const tcu::Vec3&				dPdy,
49 										 const tcu::IVec3				size,
50 										 const float					lodBias,
51 										 const float					lodMin,
52 										 const float					lodMax);
53 tcu::UVec2	calcLevelBounds				(const tcu::Vec2&				lodBounds,
54 										 const int						levelCount,
55 										 vk::VkSamplerMipmapMode		mipmapFilter);
56 tcu::Vec2	calcLevelLodBounds			(const tcu::Vec2&				lodBounds,
57 										 int							level);
58 
59 void		wrapTexelGridCoordLinear	(tcu::IVec3&					baseTexel,
60 										 tcu::IVec3&					texelGridOffset,
61 										 const int						coordBits,
62 										 const ImgDim					dim);
63 void		calcTexelBaseOffset			(const tcu::IVec3&				gridCoord,
64 										 const int						coordBits,
65 										 tcu::IVec3&					baseTexel,
66 										 tcu::IVec3&					texelGridOffset);
67 void		calcTexelGridCoordRange		(const tcu::Vec3&				unnormalizedCoordMin,
68 										 const tcu::Vec3&				unnormalizedCoordMax,
69 										 const int						coordBits,
70 										 tcu::IVec3&					gridCoordMin,
71 										 tcu::IVec3&					gridCoordMax);
72 void		calcUnnormalizedCoordRange	(const tcu::Vec4&				coord,
73 										 const tcu::IVec3&				levelSize,
74 										 const tcu::FloatFormat&		internalFormat,
75 										 tcu::Vec3&						unnormalizedCoordMin,
76 										 tcu::Vec3&						unnormalizedCoordMax);
77 void		calcCubemapFaceCoords		(const tcu::Vec3&				r,
78 										 const tcu::Vec3&				drdx,
79 										 const tcu::Vec3&				drdy,
80 										 const int						faceNdx,
81 										 tcu::Vec2&						coordFace,
82 										 tcu::Vec2&						dPdxFace,
83 										 tcu::Vec2&						dPdyFace);
84 int			calcCandidateCubemapFaces	(const tcu::Vec3&				r);
85 deInt32		wrapTexelCoord				(const deInt32					coord,
86 										 const int						size,
87 										 const vk::VkSamplerAddressMode wrap);
88 void		wrapCubemapEdge				(const tcu::IVec2&				coord,
89 										 const tcu::IVec2&				size,
90 										 const int						faceNdx,
91 										 tcu::IVec2&					newCoord,
92 										 int&							newFaceNdx);
93 void		wrapCubemapCorner			(const tcu::IVec2&				coord,
94 										 const tcu::IVec2&				size,
95 										 const int						faceNdx,
96 										 int&							adjacentFace1,
97 										 int&							adjacentFace2,
98 										 tcu::IVec2&					cornerCoord0,
99 										 tcu::IVec2&					cornerCoord1,
100 										 tcu::IVec2&					cornerCoord2);
101 
102 void		convertFormat				(const void*											pixelPtr,
103 										 tcu::TextureFormat										texFormat,
104 										 const std::vector<de::SharedPtr<tcu::FloatFormat>>&	internalFormat,
105 										 tcu::Vec4&												resultMin,
106 										 tcu::Vec4&												resultMax);
107 
108 template <int Size>
isEqualRelEpsilon(const tcu::Vector<float,Size> & a,const tcu::Vector<float,Size> & b,const float epsilon)109 bool isEqualRelEpsilon (const tcu::Vector<float, Size>& a, const tcu::Vector<float, Size>& b, const float epsilon)
110 {
111 	for (int compNdx = 0; compNdx < Size; ++compNdx)
112 	{
113 		if (!isEqualRelEpsilon(a[compNdx], b[compNdx], epsilon))
114 		{
115 			return false;
116 		}
117 	}
118 
119 	return true;
120 }
121 
122 template <int Size>
isInRange(const tcu::Vector<float,Size> & v,const tcu::Vector<float,Size> & min,const tcu::Vector<float,Size> & max)123 bool isInRange (const tcu::Vector<float, Size>& v, const tcu::Vector<float, Size>& min, const tcu::Vector<float, Size>& max)
124 {
125 	for (int compNdx = 0; compNdx < Size; ++compNdx)
126 	{
127 		if (v[compNdx] < min[compNdx] || v[compNdx] > max[compNdx])
128 		{
129 			return false;
130 		}
131 	}
132 
133 	return true;
134 }
135 
136 template <int Size>
floor(const tcu::Vector<float,Size> & v)137 tcu::Vector<float, Size> floor (const tcu::Vector<float, Size>& v)
138 {
139 	tcu::Vector<float, Size> result;
140 
141 	for (int compNdx = 0; compNdx < Size; ++compNdx)
142 	{
143 		result[compNdx] = (float)deFloor(v[compNdx]);
144 	}
145 
146 	return result;
147 }
148 
149 template <int Size>
ceil(const tcu::Vector<float,Size> & v)150 tcu::Vector<float, Size> ceil (const tcu::Vector<float, Size>& v)
151 {
152 	tcu::Vector<float, Size> result;
153 
154 	for (int compNdx = 0; compNdx < Size; ++compNdx)
155 	{
156 		result[compNdx] = (float)deCeil(v[compNdx]);
157 	}
158 
159 	return result;
160 }
161 
162 template <int Size>
abs(const tcu::Vector<float,Size> & v)163 tcu::Vector<float, Size> abs (const tcu::Vector<float, Size>& v)
164 {
165 	tcu::Vector<float, Size> result;
166 
167 	for (int compNdx = 0; compNdx < Size; ++compNdx)
168 	{
169 		result[compNdx] = de::abs(v[compNdx]);
170 	}
171 
172 	return result;
173 }
174 
175 } // util
176 } // texture
177 } // vkt
178 
179 #endif // _VKTSAMPLEVERIFIERUTIL_HPP
180