13c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*-------------------------------------------------------------------------
23c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * drawElements Quality Program Tester Core
33c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * ----------------------------------------
43c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
53c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Copyright 2014 The Android Open Source Project
63c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
73c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Licensed under the Apache License, Version 2.0 (the "License");
83c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * you may not use this file except in compliance with the License.
93c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * You may obtain a copy of the License at
103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *      http://www.apache.org/licenses/LICENSE-2.0
123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Unless required by applicable law or agreed to in writing, software
143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * distributed under the License is distributed on an "AS IS" BASIS,
153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * See the License for the specific language governing permissions and
173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * limitations under the License.
183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*!
203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \file
213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief RGBA8888 color type.
223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuRGBA.hpp"
253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuVector.hpp"
26fb4796914bfb9f7bef4d75312b9bce592e169b4bJarkko Pöyry#include "tcuTextureUtil.hpp"
273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
283c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace tcu
293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
313c827367444ee418f129b2c238299f49d3264554Jarkko PoyryRGBA::RGBA (const Vec4& v)
323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
33fb4796914bfb9f7bef4d75312b9bce592e169b4bJarkko Pöyry	const deUint32 r = (deUint32)floatToU8(v.x());
34fb4796914bfb9f7bef4d75312b9bce592e169b4bJarkko Pöyry	const deUint32 g = (deUint32)floatToU8(v.y());
35fb4796914bfb9f7bef4d75312b9bce592e169b4bJarkko Pöyry	const deUint32 b = (deUint32)floatToU8(v.z());
36fb4796914bfb9f7bef4d75312b9bce592e169b4bJarkko Pöyry	const deUint32 a = (deUint32)floatToU8(v.w());
373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	m_value = (a << ALPHA_SHIFT) | (r << RED_SHIFT) | (g << GREEN_SHIFT) | (b << BLUE_SHIFT);
383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
403c827367444ee418f129b2c238299f49d3264554Jarkko PoyryVec4 RGBA::toVec (void) const
413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	return Vec4(float(getRed())		/ 255.0f,
433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				float(getGreen())	/ 255.0f,
443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				float(getBlue())	/ 255.0f,
453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				float(getAlpha())	/ 255.0f);
463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
483c827367444ee418f129b2c238299f49d3264554Jarkko PoyryIVec4 RGBA::toIVec (void) const
493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	return IVec4(getRed(), getGreen(), getBlue(), getAlpha());
513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
533c827367444ee418f129b2c238299f49d3264554Jarkko PoyryRGBA computeAbsDiffMasked (RGBA a, RGBA b, deUint32 cmpMask)
543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	deUint32	aPacked = a.getPacked();
563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	deUint32	bPacked = b.getPacked();
573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	deUint8		rDiff	= 0;
583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	deUint8		gDiff	= 0;
593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	deUint8		bDiff	= 0;
603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	deUint8		aDiff	= 0;
613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	if (cmpMask & RGBA::RED_MASK)
633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		int ra = (aPacked >> RGBA::RED_SHIFT) & 0xFF;
653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		int rb = (bPacked >> RGBA::RED_SHIFT) & 0xFF;
663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		rDiff = (deUint8)deAbs32(ra - rb);
683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	if (cmpMask & RGBA::GREEN_MASK)
713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		int ga = (aPacked >> RGBA::GREEN_SHIFT) & 0xFF;
733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		int gb = (bPacked >> RGBA::GREEN_SHIFT) & 0xFF;
743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		gDiff = (deUint8)deAbs32(ga - gb);
763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	if (cmpMask & RGBA::BLUE_MASK)
793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		int ba = (aPacked >> RGBA::BLUE_SHIFT) & 0xFF;
813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		int bb = (bPacked >> RGBA::BLUE_SHIFT) & 0xFF;
823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		bDiff = (deUint8)deAbs32(ba - bb);
843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	if (cmpMask & RGBA::ALPHA_MASK)
873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		int aa = (aPacked >> RGBA::ALPHA_SHIFT) & 0xFF;
893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		int ab = (bPacked >> RGBA::ALPHA_SHIFT) & 0xFF;
903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		aDiff = (deUint8)deAbs32(aa - ab);
923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	return RGBA(rDiff,gDiff,bDiff,aDiff);
953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
973c827367444ee418f129b2c238299f49d3264554Jarkko Poyrybool compareThresholdMasked	(RGBA a, RGBA b, RGBA threshold, deUint32 cmpMask)
983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	return computeAbsDiffMasked(a, b, cmpMask).isBelowThreshold(threshold);
1003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
1013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // tcu
103