#ifndef _RRRENDERSTATE_HPP
#define _RRRENDERSTATE_HPP
/*-------------------------------------------------------------------------
 * drawElements Quality Program Reference Renderer
 * -----------------------------------------------
 *
 * Copyright 2014 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 *//*!
 * \file
 * \brief Reference renderer render state.
 *//*--------------------------------------------------------------------*/

#include "rrDefs.hpp"
#include "rrMultisamplePixelBufferAccess.hpp"
#include "tcuTexture.hpp"

namespace rr
{

//! Horizontal fill rule
enum HorizontalFill
{
	FILL_LEFT,
	FILL_RIGHT
};

//! Vertical fill rule
enum VerticalFill
{
	FILL_TOP,
	FILL_BOTTOM,
};

//! Winding mode
enum Winding
{
	WINDING_CCW = 0,	//!< Counter-clockwise winding
	WINDING_CW,			//!< Clockwise winding

	WINDING_LAST
};

//! Triangle cull mode
enum CullMode
{
	CULLMODE_NONE,
	CULLMODE_BACK,
	CULLMODE_FRONT,

	CULLMODE_LAST
};

//! Viewport Orientation of renderer this will be compared against
enum ViewportOrientation
{
	VIEWPORTORIENTATION_LOWER_LEFT = 0,	//<! Corresponds to GL
	VIEWPORTORIENTATION_UPPER_LEFT,		//<! Corresponds to Vulkan

	VIEWPORTORIENTATION_LAST
};

struct RasterizationState
{
	RasterizationState (void)
		: winding				(WINDING_CCW)
		, horizontalFill		(FILL_LEFT)
		, verticalFill			(FILL_BOTTOM)
		, viewportOrientation	(VIEWPORTORIENTATION_LAST)
	{
	}

	Winding					winding;
	HorizontalFill			horizontalFill;
	VerticalFill			verticalFill;
	ViewportOrientation		viewportOrientation;
};

enum TestFunc
{
	TESTFUNC_NEVER = 0,
	TESTFUNC_ALWAYS,
	TESTFUNC_LESS,
	TESTFUNC_LEQUAL,
	TESTFUNC_GREATER,
	TESTFUNC_GEQUAL,
	TESTFUNC_EQUAL,
	TESTFUNC_NOTEQUAL,

	TESTFUNC_LAST
};

enum StencilOp
{
	STENCILOP_KEEP = 0,
	STENCILOP_ZERO,
	STENCILOP_REPLACE,
	STENCILOP_INCR, //!< Increment with saturation.
	STENCILOP_DECR, //!< Decrement with saturation.
	STENCILOP_INCR_WRAP,
	STENCILOP_DECR_WRAP,
	STENCILOP_INVERT,

	STENCILOP_LAST
};

enum BlendMode
{
	BLENDMODE_NONE = 0,		//!< No blending.
	BLENDMODE_STANDARD,		//!< Standard blending.
	BLENDMODE_ADVANCED,		//!< Advanced blending mode, as defined in GL_KHR_blend_equation_advanced.

	BLENDMODE_LAST
};

enum BlendEquation
{
	BLENDEQUATION_ADD = 0,
	BLENDEQUATION_SUBTRACT,
	BLENDEQUATION_REVERSE_SUBTRACT,
	BLENDEQUATION_MIN,
	BLENDEQUATION_MAX,

	BLENDEQUATION_LAST
};

enum BlendEquationAdvanced
{
	BLENDEQUATION_ADVANCED_MULTIPLY = 0,
	BLENDEQUATION_ADVANCED_SCREEN,
	BLENDEQUATION_ADVANCED_OVERLAY,
	BLENDEQUATION_ADVANCED_DARKEN,
	BLENDEQUATION_ADVANCED_LIGHTEN,
	BLENDEQUATION_ADVANCED_COLORDODGE,
	BLENDEQUATION_ADVANCED_COLORBURN,
	BLENDEQUATION_ADVANCED_HARDLIGHT,
	BLENDEQUATION_ADVANCED_SOFTLIGHT,
	BLENDEQUATION_ADVANCED_DIFFERENCE,
	BLENDEQUATION_ADVANCED_EXCLUSION,
	BLENDEQUATION_ADVANCED_HSL_HUE,
	BLENDEQUATION_ADVANCED_HSL_SATURATION,
	BLENDEQUATION_ADVANCED_HSL_COLOR,
	BLENDEQUATION_ADVANCED_HSL_LUMINOSITY,

	BLENDEQUATION_ADVANCED_LAST
};

enum BlendFunc
{
	BLENDFUNC_ZERO = 0,
	BLENDFUNC_ONE,
	BLENDFUNC_SRC_COLOR,
	BLENDFUNC_ONE_MINUS_SRC_COLOR,
	BLENDFUNC_DST_COLOR,
	BLENDFUNC_ONE_MINUS_DST_COLOR,
	BLENDFUNC_SRC_ALPHA,
	BLENDFUNC_ONE_MINUS_SRC_ALPHA,
	BLENDFUNC_DST_ALPHA,
	BLENDFUNC_ONE_MINUS_DST_ALPHA,
	BLENDFUNC_CONSTANT_COLOR,
	BLENDFUNC_ONE_MINUS_CONSTANT_COLOR,
	BLENDFUNC_CONSTANT_ALPHA,
	BLENDFUNC_ONE_MINUS_CONSTANT_ALPHA,
	BLENDFUNC_SRC_ALPHA_SATURATE,
	BLENDFUNC_SRC1_COLOR,
	BLENDFUNC_ONE_MINUS_SRC1_COLOR,
	BLENDFUNC_SRC1_ALPHA,
	BLENDFUNC_ONE_MINUS_SRC1_ALPHA,

	BLENDFUNC_LAST
};

struct StencilState
{
	TestFunc	func;
	int			ref;
	deUint32	compMask;
	StencilOp	sFail;
	StencilOp	dpFail;
	StencilOp	dpPass;
	deUint32	writeMask;

	StencilState (void)
		: func		(TESTFUNC_ALWAYS)
		, ref		(0)
		, compMask	(~0U)
		, sFail		(STENCILOP_KEEP)
		, dpFail	(STENCILOP_KEEP)
		, dpPass	(STENCILOP_KEEP)
		, writeMask	(~0U)
	{
	}
};

struct BlendState
{
	BlendEquation	equation;
	BlendFunc		srcFunc;
	BlendFunc		dstFunc;

	BlendState (void)
		: equation	(BLENDEQUATION_ADD)
		, srcFunc	(BLENDFUNC_ONE)
		, dstFunc	(BLENDFUNC_ZERO)
	{
	}
};

struct WindowRectangle
{
	int left;
	int bottom;
	int width;
	int height;

	WindowRectangle (int left_, int bottom_, int width_, int height_)
		: left		(left_)
		, bottom	(bottom_)
		, width		(width_)
		, height	(height_)
	{
	}
};

struct FragmentOperationState
{
	// Variables corresponding to GL state variables.

	bool						scissorTestEnabled;
	WindowRectangle				scissorRectangle;

	bool						stencilTestEnabled;
	StencilState				stencilStates[2];	//!< Indexed with FACETYPE_FRONT and FACETYPE_BACK.

	bool						depthTestEnabled;
	TestFunc					depthFunc;
	bool						depthMask;

	bool						depthBoundsTestEnabled;
	float						minDepthBound;
	float						maxDepthBound;

	BlendMode					blendMode;

	// Standard blending state
	BlendState					blendRGBState;
	BlendState					blendAState;
	tcu::Vec4					blendColor;			//!< Components should be in range [0, 1].

	BlendEquationAdvanced		blendEquationAdvaced;

	bool						sRGBEnabled;

	bool						depthClampEnabled;

	bool						polygonOffsetEnabled;
	float						polygonOffsetFactor;
	float						polygonOffsetUnits;

	tcu::BVec4					colorMask;

	// Variables not corresponding to configurable GL state, but other GL variables.

	int							numStencilBits;

	FragmentOperationState (void)
		: scissorTestEnabled	(false)
		, scissorRectangle		(0, 0, 1, 1)

		, stencilTestEnabled	(false)
		// \note stencilStates[] members get default-constructed.

		, depthTestEnabled		(false)
		, depthFunc				(TESTFUNC_LESS)
		, depthMask				(true)

		, depthBoundsTestEnabled(false)
		, minDepthBound			(0.0f)
		, maxDepthBound			(1.0f)

		, blendMode				(BLENDMODE_NONE)
		, blendRGBState			()
		, blendAState			()
		, blendColor			(0.0f)
		, blendEquationAdvaced	(BLENDEQUATION_ADVANCED_LAST)

		, sRGBEnabled			(true)

		, depthClampEnabled		(false)

		, polygonOffsetEnabled	(false)
		, polygonOffsetFactor	(0.0f)
		, polygonOffsetUnits	(0.0f)

		, colorMask				(true)

		, numStencilBits		(8)
	{
	}
};

struct PointState
{
	float	pointSize;

	PointState (void)
		: pointSize(1.0f)
	{
	}
};

struct LineState
{
	float	lineWidth;

	LineState (void)
		: lineWidth(1.0f)
	{
	}
};


struct ViewportState
{
	WindowRectangle	rect;
	float			zn;
	float			zf;

	explicit ViewportState (const WindowRectangle& rect_)
		: rect	(rect_)
		, zn	(0.0f)
		, zf	(1.0f)
	{
	}

	explicit ViewportState (const rr::MultisampleConstPixelBufferAccess& multisampleBuffer)
		: rect	(0, 0, multisampleBuffer.raw().getHeight(), multisampleBuffer.raw().getDepth())
		, zn	(0.0f)
		, zf	(1.0f)
	{
	}
};

struct RestartState
{
	bool		enabled;
	deUint32	restartIndex;

	RestartState (void)
		: enabled		(false)
		, restartIndex	(0xFFFFFFFFul)
	{
	}
};

//! Rasterizer configuration
struct RenderState
{
	explicit RenderState (const ViewportState& viewport_, const int subpixelBits_, ViewportOrientation viewportOrientation_ = VIEWPORTORIENTATION_LOWER_LEFT)
		: cullMode					(CULLMODE_NONE)
		, provokingVertexConvention	(PROVOKINGVERTEX_LAST)
		, viewport					(viewport_)
		, viewportOrientation		(viewportOrientation_)
		, subpixelBits              (subpixelBits_)
	{
		rasterization.viewportOrientation = viewportOrientation;
	}

	enum
	{
		DEFAULT_SUBPIXEL_BITS = 8
	};

	CullMode					cullMode;
	ProvokingVertex				provokingVertexConvention;
	RasterizationState			rasterization;
	FragmentOperationState		fragOps;
	PointState					point;
	ViewportState				viewport;
	LineState					line;
	RestartState				restart;
	ViewportOrientation			viewportOrientation;
	const int					subpixelBits;
};

} // rr

#endif // _RRRENDERSTATE_HPP
