13c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#ifndef _RRRENDERSTATE_HPP
23c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define _RRRENDERSTATE_HPP
33c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*-------------------------------------------------------------------------
43c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * drawElements Quality Program Reference Renderer
53c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * -----------------------------------------------
63c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
73c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Copyright 2014 The Android Open Source Project
83c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
93c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Licensed under the Apache License, Version 2.0 (the "License");
103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * you may not use this file except in compliance with the License.
113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * You may obtain a copy of the License at
123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *      http://www.apache.org/licenses/LICENSE-2.0
143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Unless required by applicable law or agreed to in writing, software
163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * distributed under the License is distributed on an "AS IS" BASIS,
173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * See the License for the specific language governing permissions and
193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * limitations under the License.
203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*!
223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \file
233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Reference renderer render state.
243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "rrDefs.hpp"
273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "rrMultisamplePixelBufferAccess.hpp"
283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuTexture.hpp"
293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
303c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace rr
313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry//! Horizontal fill rule
343c827367444ee418f129b2c238299f49d3264554Jarkko Poyryenum HorizontalFill
353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	FILL_LEFT,
373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	FILL_RIGHT
383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry//! Vertical fill rule
413c827367444ee418f129b2c238299f49d3264554Jarkko Poyryenum VerticalFill
423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	FILL_TOP,
443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	FILL_BOTTOM,
453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry//! Winding mode
483c827367444ee418f129b2c238299f49d3264554Jarkko Poyryenum Winding
493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	WINDING_CCW = 0,	//!< Counter-clockwise winding
513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	WINDING_CW,			//!< Clockwise winding
523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	WINDING_LAST
543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry//! Triangle cull mode
573c827367444ee418f129b2c238299f49d3264554Jarkko Poyryenum CullMode
583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	CULLMODE_NONE,
603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	CULLMODE_BACK,
613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	CULLMODE_FRONT,
623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	CULLMODE_LAST
643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
663c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystruct RasterizationState
673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	RasterizationState (void)
693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		: winding			(WINDING_CCW)
703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		, horizontalFill	(FILL_LEFT)
713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		, verticalFill		(FILL_BOTTOM)
723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	Winding			winding;
763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	HorizontalFill	horizontalFill;
773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	VerticalFill	verticalFill;
783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
803c827367444ee418f129b2c238299f49d3264554Jarkko Poyryenum TestFunc
813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	TESTFUNC_NEVER = 0,
833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	TESTFUNC_ALWAYS,
843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	TESTFUNC_LESS,
853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	TESTFUNC_LEQUAL,
863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	TESTFUNC_GREATER,
873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	TESTFUNC_GEQUAL,
883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	TESTFUNC_EQUAL,
893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	TESTFUNC_NOTEQUAL,
903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	TESTFUNC_LAST
923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
943c827367444ee418f129b2c238299f49d3264554Jarkko Poyryenum StencilOp
953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	STENCILOP_KEEP = 0,
973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	STENCILOP_ZERO,
983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	STENCILOP_REPLACE,
993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	STENCILOP_INCR, //!< Increment with saturation.
1003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	STENCILOP_DECR, //!< Decrement with saturation.
1013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	STENCILOP_INCR_WRAP,
1023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	STENCILOP_DECR_WRAP,
1033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	STENCILOP_INVERT,
1043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	STENCILOP_LAST
1063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
1073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1083c827367444ee418f129b2c238299f49d3264554Jarkko Poyryenum BlendMode
1093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDMODE_NONE = 0,		//!< No blending.
1113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDMODE_STANDARD,		//!< Standard blending.
1123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDMODE_ADVANCED,		//!< Advanced blending mode, as defined in GL_KHR_blend_equation_advanced.
1133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDMODE_LAST
1153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
1163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1173c827367444ee418f129b2c238299f49d3264554Jarkko Poyryenum BlendEquation
1183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDEQUATION_ADD = 0,
1203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDEQUATION_SUBTRACT,
1213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDEQUATION_REVERSE_SUBTRACT,
1223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDEQUATION_MIN,
1233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDEQUATION_MAX,
1243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDEQUATION_LAST
1263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
1273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1283c827367444ee418f129b2c238299f49d3264554Jarkko Poyryenum BlendEquationAdvanced
1293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDEQUATION_ADVANCED_MULTIPLY = 0,
1313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDEQUATION_ADVANCED_SCREEN,
1323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDEQUATION_ADVANCED_OVERLAY,
1333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDEQUATION_ADVANCED_DARKEN,
1343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDEQUATION_ADVANCED_LIGHTEN,
1353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDEQUATION_ADVANCED_COLORDODGE,
1363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDEQUATION_ADVANCED_COLORBURN,
1373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDEQUATION_ADVANCED_HARDLIGHT,
1383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDEQUATION_ADVANCED_SOFTLIGHT,
1393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDEQUATION_ADVANCED_DIFFERENCE,
1403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDEQUATION_ADVANCED_EXCLUSION,
1413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDEQUATION_ADVANCED_HSL_HUE,
1423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDEQUATION_ADVANCED_HSL_SATURATION,
1433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDEQUATION_ADVANCED_HSL_COLOR,
1443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDEQUATION_ADVANCED_HSL_LUMINOSITY,
1453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDEQUATION_ADVANCED_LAST
1473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
1483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1493c827367444ee418f129b2c238299f49d3264554Jarkko Poyryenum BlendFunc
1503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDFUNC_ZERO = 0,
1523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDFUNC_ONE,
1533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDFUNC_SRC_COLOR,
1543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDFUNC_ONE_MINUS_SRC_COLOR,
1553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDFUNC_DST_COLOR,
1563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDFUNC_ONE_MINUS_DST_COLOR,
1573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDFUNC_SRC_ALPHA,
1583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDFUNC_ONE_MINUS_SRC_ALPHA,
1593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDFUNC_DST_ALPHA,
1603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDFUNC_ONE_MINUS_DST_ALPHA,
1613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDFUNC_CONSTANT_COLOR,
1623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDFUNC_ONE_MINUS_CONSTANT_COLOR,
1633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDFUNC_CONSTANT_ALPHA,
1643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDFUNC_ONE_MINUS_CONSTANT_ALPHA,
1653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDFUNC_SRC_ALPHA_SATURATE,
1663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDFUNC_SRC1_COLOR,
1673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDFUNC_ONE_MINUS_SRC1_COLOR,
1683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDFUNC_SRC1_ALPHA,
1693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDFUNC_ONE_MINUS_SRC1_ALPHA,
1703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BLENDFUNC_LAST
1723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
1733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1743c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystruct StencilState
1753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	TestFunc	func;
1773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	int			ref;
1783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	deUint32	compMask;
1793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	StencilOp	sFail;
1803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	StencilOp	dpFail;
1813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	StencilOp	dpPass;
1823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	deUint32	writeMask;
1833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	StencilState (void)
1853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		: func		(TESTFUNC_ALWAYS)
1863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		, ref		(0)
1873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		, compMask	(~0U)
1883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		, sFail		(STENCILOP_KEEP)
1893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		, dpFail	(STENCILOP_KEEP)
1903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		, dpPass	(STENCILOP_KEEP)
1913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		, writeMask	(~0U)
1923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
1933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
1943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
1953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1963c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystruct BlendState
1973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BlendEquation	equation;
1993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BlendFunc		srcFunc;
2003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BlendFunc		dstFunc;
2013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BlendState (void)
2033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		: equation	(BLENDEQUATION_ADD)
2043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		, srcFunc	(BLENDFUNC_ONE)
2053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		, dstFunc	(BLENDFUNC_ZERO)
2063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
2073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
2083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
2093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2103c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystruct WindowRectangle
2113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
2123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	int left;
2133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	int bottom;
2143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	int width;
2153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	int height;
2163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	WindowRectangle (int left_, int bottom_, int width_, int height_)
2183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		: left		(left_)
2193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		, bottom	(bottom_)
2203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		, width		(width_)
2213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		, height	(height_)
2223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
2233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
2243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
2253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2263c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystruct FragmentOperationState
2273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
2283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	// Variables corresponding to GL state variables.
2293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	bool						scissorTestEnabled;
2313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	WindowRectangle				scissorRectangle;
2323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	bool						stencilTestEnabled;
2343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	StencilState				stencilStates[2];	//!< Indexed with FACETYPE_FRONT and FACETYPE_BACK.
2353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	bool						depthTestEnabled;
2373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	TestFunc					depthFunc;
2383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	bool						depthMask;
2393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BlendMode					blendMode;
2413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	// Standard blending state
2433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BlendState					blendRGBState;
2443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BlendState					blendAState;
2453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	tcu::Vec4					blendColor;			//!< Components should be in range [0, 1].
2463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	BlendEquationAdvanced		blendEquationAdvaced;
2483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	bool						sRGBEnabled;
2503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	bool						depthClampEnabled;
2523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	bool						polygonOffsetEnabled;
2543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	float						polygonOffsetFactor;
2553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	float						polygonOffsetUnits;
2563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	tcu::BVec4					colorMask;
2583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	// Variables not corresponding to configurable GL state, but other GL variables.
2603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	int							numStencilBits;
2623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	FragmentOperationState (void)
2643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		: scissorTestEnabled	(false)
2653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		, scissorRectangle		(0, 0, 1, 1)
2663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		, stencilTestEnabled	(false)
2683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		// \note stencilStates[] members get default-constructed.
2693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		, depthTestEnabled		(false)
2713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		, depthFunc				(TESTFUNC_LESS)
2723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		, depthMask				(true)
2733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		, blendMode				(BLENDMODE_NONE)
2753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		, blendRGBState			()
2763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		, blendAState			()
2773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		, blendColor			(0.0f)
2783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		, blendEquationAdvaced	(BLENDEQUATION_ADVANCED_LAST)
2793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		, sRGBEnabled			(true)
2813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		, depthClampEnabled		(false)
2833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		, polygonOffsetEnabled	(false)
2853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		, polygonOffsetFactor	(0.0f)
2863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		, polygonOffsetUnits	(0.0f)
2873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		, colorMask				(true)
2893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		, numStencilBits		(8)
2913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
2923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
2933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
2943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2953c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystruct PointState
2963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
2973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	float	pointSize;
2983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	PointState (void)
3003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		: pointSize(1.0f)
3013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
3023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
3033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
3043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3053c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystruct LineState
3063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
3073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	float	lineWidth;
3083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	LineState (void)
3103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		: lineWidth(1.0f)
3113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
3123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
3133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
3143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3163c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystruct ViewportState
3173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
3183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	WindowRectangle	rect;
3193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	float			zn;
3203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	float			zf;
3213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	explicit ViewportState (const WindowRectangle& rect_)
3233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		: rect	(rect_)
3243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		, zn	(0.0f)
3253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		, zf	(1.0f)
3263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
3273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
3283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	explicit ViewportState (const rr::MultisampleConstPixelBufferAccess& multisampleBuffer)
3303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		: rect	(0, 0, multisampleBuffer.raw().getHeight(), multisampleBuffer.raw().getDepth())
3313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		, zn	(0.0f)
3323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		, zf	(1.0f)
3333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
3343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
3353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
3363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3373c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystruct RestartState
3383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
3393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	bool		enabled;
3403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	deUint32	restartIndex;
3413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	RestartState (void)
3433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		: enabled		(false)
3443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		, restartIndex	(0xFFFFFFFFul)
3453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
3463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
3473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
3483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3493c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystruct RenderState
3503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
3513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	explicit RenderState (const ViewportState& viewport_)
3523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		: cullMode					(CULLMODE_NONE)
3533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		, provokingVertexConvention	(PROVOKINGVERTEX_LAST)
3543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		, viewport					(viewport_)
3553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
3563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
3573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	CullMode					cullMode;
3593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ProvokingVertex				provokingVertexConvention;
3603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	RasterizationState			rasterization;
3613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	FragmentOperationState		fragOps;
3623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	PointState					point;
3633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ViewportState				viewport;
3643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	LineState					line;
3653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	RestartState				restart;
3663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
3673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // rr
3693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#endif // _RRRENDERSTATE_HPP
371