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