vktPipelineReferenceRenderer.cpp revision c6e8b5a8389a64972259b357407b5e0f4edd5716
1c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim/*------------------------------------------------------------------------
2c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * Vulkan Conformance Tests
3c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * ------------------------
4c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim *
5c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * Copyright (c) 2015 The Khronos Group Inc.
6c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * Copyright (c) 2015 Imagination Technologies Ltd.
7c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim *
8c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * Permission is hereby granted, free of charge, to any person obtaining a
9c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * copy of this software and/or associated documentation files (the
10c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * "Materials"), to deal in the Materials without restriction, including
11c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * without limitation the rights to use, copy, modify, merge, publish,
12c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * distribute, sublicense, and/or sell copies of the Materials, and to
13c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * permit persons to whom the Materials are furnished to do so, subject to
14c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * the following conditions:
15c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim *
16c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * The above copyright notice(s) and this permission notice shall be included
17c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * in all copies or substantial portions of the Materials.
18c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim *
19c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * The Materials are Confidential Information as defined by the
20c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * Khronos Membership Agreement until designated non-confidential by Khronos,
21c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * at which point this condition clause shall be removed.
22c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim *
23c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
26c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
27c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
28c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
29c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
30c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim *
31c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim *//*!
32c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * \file
33c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * \brief Reference renderer.
34c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim *//*--------------------------------------------------------------------*/
35c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim
36c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim#include "vktPipelineReferenceRenderer.hpp"
37c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim#include "vktPipelineClearUtil.hpp"
38c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim#include "rrShadingContext.hpp"
39c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim#include "rrVertexAttrib.hpp"
40c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim
41c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kimnamespace vkt
42c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim{
43c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kimnamespace pipeline
44c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim{
45c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim
46c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kimusing namespace vk;
47c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim
48c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kimrr::TestFunc mapVkCompareOp (VkCompareOp compareFunc)
49c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim{
50c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	switch (compareFunc)
51c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	{
52c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim		case VK_COMPARE_OP_NEVER:			return rr::TESTFUNC_NEVER;
53c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim		case VK_COMPARE_OP_LESS:			return rr::TESTFUNC_LESS;
54c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim		case VK_COMPARE_OP_EQUAL:			return rr::TESTFUNC_EQUAL;
55c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim		case VK_COMPARE_OP_LESS_EQUAL:		return rr::TESTFUNC_LEQUAL;
56c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim		case VK_COMPARE_OP_GREATER:			return rr::TESTFUNC_GREATER;
57c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim		case VK_COMPARE_OP_NOT_EQUAL:		return rr::TESTFUNC_NOTEQUAL;
58c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim		case VK_COMPARE_OP_GREATER_EQUAL:	return rr::TESTFUNC_GEQUAL;
59c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim		case VK_COMPARE_OP_ALWAYS:			return rr::TESTFUNC_ALWAYS;
60c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim		default:
61c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim			DE_ASSERT(false);
62c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	}
63c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	return rr::TESTFUNC_LAST;
64c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim}
65c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim
66c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kimrr::PrimitiveType mapVkPrimitiveTopology (VkPrimitiveTopology primitiveTopology)
67c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim{
68c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	switch (primitiveTopology)
69c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	{
70c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim		case VK_PRIMITIVE_TOPOLOGY_POINT_LIST:				return rr::PRIMITIVETYPE_POINTS;
71c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim		case VK_PRIMITIVE_TOPOLOGY_LINE_LIST:				return rr::PRIMITIVETYPE_LINES;
72c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim		case VK_PRIMITIVE_TOPOLOGY_LINE_STRIP:				return rr::PRIMITIVETYPE_LINE_STRIP;
73c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim		case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST:			return rr::PRIMITIVETYPE_TRIANGLES;
74c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim		case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN:			return rr::PRIMITIVETYPE_TRIANGLE_FAN;
75c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim		case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP:			return rr::PRIMITIVETYPE_TRIANGLE_STRIP;
76c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim		case VK_PRIMITIVE_TOPOLOGY_LINE_LIST_ADJ:			return rr::PRIMITIVETYPE_LINES_ADJACENCY;
77c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim		case VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_ADJ:			return rr::PRIMITIVETYPE_LINE_STRIP_ADJACENCY;
78c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim		case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_ADJ:		return rr::PRIMITIVETYPE_TRIANGLES_ADJACENCY;
79c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim		case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_ADJ:		return rr::PRIMITIVETYPE_TRIANGLE_STRIP_ADJACENCY;
80c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim		default:
81c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim			DE_ASSERT(false);
82c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	}
83c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	return rr::PRIMITIVETYPE_LAST;
84c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim}
85c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim
86c6e8b5a8389a64972259b357407b5e0f4edd5716Dae KimReferenceRenderer::ReferenceRenderer(int						surfaceWidth,
87c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim									 int						surfaceHeight,
88c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim									 int						numSamples,
89c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim									 const tcu::TextureFormat&	colorFormat,
90c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim									 const tcu::TextureFormat&	depthStencilFormat,
91c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim									 const rr::Program* const	program)
92c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	: m_surfaceWidth		(surfaceWidth)
93c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	, m_surfaceHeight		(surfaceHeight)
94c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	, m_numSamples			(numSamples)
95c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	, m_colorFormat			(colorFormat)
96c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	, m_depthStencilFormat	(depthStencilFormat)
97c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	, m_program				(program)
98c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim{
99c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	const tcu::TextureChannelClass	formatClass				= tcu::getTextureChannelClass(colorFormat.type);
100c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	const bool						hasDepthStencil			= (m_depthStencilFormat.order != tcu::TextureFormat::CHANNELORDER_LAST);
101c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	const bool						hasDepthBufferOnly		= (m_depthStencilFormat.order == tcu::TextureFormat::D);
102c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	const bool						hasStencilBufferOnly	= (m_depthStencilFormat.order == tcu::TextureFormat::S);
103c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	const int						actualSamples			= (formatClass == tcu::TEXTURECHANNELCLASS_SIGNED_INTEGER || formatClass == tcu::TEXTURECHANNELCLASS_UNSIGNED_INTEGER)? 1: m_numSamples;
104c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim
105c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	m_colorBuffer.setStorage(m_colorFormat, actualSamples, m_surfaceWidth, m_surfaceHeight);
106c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	m_resolveColorBuffer.setStorage(m_colorFormat, m_surfaceWidth, m_surfaceHeight);
107c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim
108c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	if (formatClass == tcu::TEXTURECHANNELCLASS_SIGNED_INTEGER)
109c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	{
110c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim		tcu::clear(m_colorBuffer.getAccess(), defaultClearColorInt(m_colorFormat));
111c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim		tcu::clear(m_resolveColorBuffer.getAccess(), defaultClearColorInt(m_colorFormat));
112c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	}
113c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	else if (formatClass == tcu::TEXTURECHANNELCLASS_UNSIGNED_INTEGER)
114c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	{
115c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim		tcu::clear(m_colorBuffer.getAccess(), defaultClearColorUint(m_colorFormat));
116c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim		tcu::clear(m_resolveColorBuffer.getAccess(), defaultClearColorUint(m_colorFormat));
117c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	}
118c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	else
119c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	{
120c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim		tcu::clear(m_colorBuffer.getAccess(), defaultClearColorFloat(m_colorFormat));
121c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim		tcu::clear(m_resolveColorBuffer.getAccess(), defaultClearColorFloat(m_colorFormat));
122c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	}
123c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim
124c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	if (hasDepthStencil)
125c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	{
126c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim		if (hasDepthBufferOnly)
127c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim		{
128c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim			m_depthStencilBuffer.setStorage(m_depthStencilFormat, actualSamples, surfaceWidth, surfaceHeight);
129c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim			tcu::clearDepth(m_depthStencilBuffer.getAccess(), defaultClearDepth());
130c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim
131c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim			m_renderTarget = new rr::RenderTarget(rr::MultisamplePixelBufferAccess::fromMultisampleAccess(m_colorBuffer.getAccess()),
132c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim												  rr::MultisamplePixelBufferAccess::fromMultisampleAccess(m_depthStencilBuffer.getAccess()));
133c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim		}
134c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim		else if (hasStencilBufferOnly)
135c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim		{
136c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim			m_depthStencilBuffer.setStorage(m_depthStencilFormat, actualSamples, surfaceWidth, surfaceHeight);
137c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim			tcu::clearStencil(m_depthStencilBuffer.getAccess(), defaultClearStencil());
138c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim
139c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim			m_renderTarget = new rr::RenderTarget(rr::MultisamplePixelBufferAccess::fromMultisampleAccess(m_colorBuffer.getAccess()),
140c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim												  rr::MultisamplePixelBufferAccess(),
141c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim												  rr::MultisamplePixelBufferAccess::fromMultisampleAccess(m_depthStencilBuffer.getAccess()));
142c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim		}
143c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim		else
144c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim		{
145c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim			m_depthStencilBuffer.setStorage(m_depthStencilFormat, actualSamples, surfaceWidth, surfaceHeight);
146c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim
147c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim			tcu::clearDepth(m_depthStencilBuffer.getAccess(), defaultClearDepth());
148c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim			tcu::clearStencil(m_depthStencilBuffer.getAccess(), defaultClearStencil());
149c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim
150c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim			m_renderTarget = new rr::RenderTarget(rr::MultisamplePixelBufferAccess::fromMultisampleAccess(m_colorBuffer.getAccess()),
151c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim												  rr::MultisamplePixelBufferAccess::fromMultisampleAccess(m_depthStencilBuffer.getAccess()),
152c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim												  rr::MultisamplePixelBufferAccess::fromMultisampleAccess(m_depthStencilBuffer.getAccess()));
153c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim		}
154c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	}
155c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	else
156c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	{
157c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim		m_renderTarget = new rr::RenderTarget(rr::MultisamplePixelBufferAccess::fromMultisampleAccess(m_colorBuffer.getAccess()));
158c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	}
159c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim}
160c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim
161c6e8b5a8389a64972259b357407b5e0f4edd5716Dae KimReferenceRenderer::~ReferenceRenderer (void)
162c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim{
163c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	delete m_renderTarget;
164c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim}
165c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim
166c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kimvoid ReferenceRenderer::draw (const rr::RenderState&			renderState,
167c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim							  const rr::PrimitiveType			primitive,
168c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim							  const std::vector<Vertex4RGBA>&	vertexBuffer)
169c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim{
170c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	const rr::PrimitiveList primitives(primitive, (int)vertexBuffer.size(), 0);
171c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim
172c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	std::vector<tcu::Vec4> positions;
173c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	std::vector<tcu::Vec4> colors;
174c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim
175c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	for (size_t vertexNdx = 0; vertexNdx < vertexBuffer.size(); vertexNdx++)
176c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	{
177c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim		const Vertex4RGBA& v = vertexBuffer[vertexNdx];
178c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim		positions.push_back(v.position);
179c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim		colors.push_back(v.color);
180c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	}
181c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim
182c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	rr::VertexAttrib vertexAttribs[2];
183c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim
184c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	// Position attribute
185c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	vertexAttribs[0].type		= rr::VERTEXATTRIBTYPE_FLOAT;
186c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	vertexAttribs[0].size		= 4;
187c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	vertexAttribs[0].pointer	= positions.data();
188c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	// UV attribute
189c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	vertexAttribs[1].type		= rr::VERTEXATTRIBTYPE_FLOAT;
190c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	vertexAttribs[1].size		= 4;
191c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	vertexAttribs[1].pointer	= colors.data();
192c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim
193c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	rr::DrawCommand drawQuadCommand(renderState, *m_renderTarget, *m_program, 2, vertexAttribs, primitives);
194c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim
195c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	m_renderer.draw(drawQuadCommand);
196c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim}
197c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim
198c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kimtcu::PixelBufferAccess ReferenceRenderer::getAccess (void)
199c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim{
200c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	rr::MultisampleConstPixelBufferAccess multiSampleAccess = rr::MultisampleConstPixelBufferAccess::fromMultisampleAccess(m_colorBuffer.getAccess());
201c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	rr::resolveMultisampleColorBuffer(m_resolveColorBuffer.getAccess(), multiSampleAccess);
202c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim
203c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	return m_resolveColorBuffer.getAccess();
204c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim}
205c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim
206c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kimconst rr::ViewportState ReferenceRenderer::getViewportState (void) const
207c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim{
208c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim	return rr::ViewportState(rr::WindowRectangle(0, 0, m_surfaceWidth, m_surfaceHeight));
209c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim}
210c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim
211c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim} // pipeline
212c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim} // vkt
213