1c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim#ifndef _VKTPIPELINEREFERENCERENDERER_HPP 2c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim#define _VKTPIPELINEREFERENCERENDERER_HPP 3c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim/*------------------------------------------------------------------------ 4c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * Vulkan Conformance Tests 5c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * ------------------------ 6c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * 7c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * Copyright (c) 2015 The Khronos Group Inc. 8c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * Copyright (c) 2015 Imagination Technologies Ltd. 9c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * 10978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * Licensed under the Apache License, Version 2.0 (the "License"); 11978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * you may not use this file except in compliance with the License. 12978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * You may obtain a copy of the License at 13c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * 14978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * http://www.apache.org/licenses/LICENSE-2.0 15c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * 16978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * Unless required by applicable law or agreed to in writing, software 17978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * distributed under the License is distributed on an "AS IS" BASIS, 18978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 19978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * See the License for the specific language governing permissions and 20978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * limitations under the License. 21c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * 22c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim *//*! 23c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * \file 24c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim * \brief Reference renderer. 25c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim *//*--------------------------------------------------------------------*/ 26c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim 27c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim#include "vkDefs.hpp" 28c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim#include "vktPipelineVertexUtil.hpp" 29c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim#include "tcuVector.hpp" 30c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim#include "tcuVectorType.hpp" 31c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim#include "tcuTexture.hpp" 32c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim#include "tcuTextureUtil.hpp" 33c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim#include "rrRenderState.hpp" 34c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim#include "rrRenderer.hpp" 35c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim#include <cstring> 36c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim 37c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kimnamespace vkt 38c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim{ 39c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim 40c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kimnamespace pipeline 41c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim{ 42c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim 43e8849a85b21e64ece65abc17248f01a9591784fePyry Haulostcu::Vec4 swizzle (const tcu::Vec4& color, const tcu::UVec4& swizzle); 4483a6066224454de177655eb414dd3453c2059536Dae Kim 45c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kimclass ColorVertexShader : public rr::VertexShader 46c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim{ 47c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kimpublic: 48c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim ColorVertexShader (void) : rr::VertexShader(2, 2) 49c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim { 50c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim m_inputs[0].type = rr::GENERICVECTYPE_FLOAT; 51c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim m_inputs[1].type = rr::GENERICVECTYPE_FLOAT; 52c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim 53c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim m_outputs[0].type = rr::GENERICVECTYPE_FLOAT; 54c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim m_outputs[1].type = rr::GENERICVECTYPE_FLOAT; 55c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim } 56c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim 57c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim virtual ~ColorVertexShader (void) {} 58c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim 59c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim virtual void shadeVertices (const rr::VertexAttrib* inputs, 60c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim rr::VertexPacket* const* packets, 61c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim const int numPackets) const 62c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim { 63c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim tcu::Vec4 position; 64c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim tcu::Vec4 color; 65c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim 66c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim for (int packetNdx = 0; packetNdx < numPackets; packetNdx++) 67c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim { 68c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim rr::VertexPacket* const packet = packets[packetNdx]; 69c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim 70c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim readVertexAttrib(position, inputs[0], packet->instanceNdx, packet->vertexNdx); 71c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim readVertexAttrib(color, inputs[1], packet->instanceNdx, packet->vertexNdx); 72c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim 73c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim packet->outputs[0] = position; 74c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim packet->outputs[1] = color; 75c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim packet->position = position; 76c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim } 77c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim } 78c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim}; 79c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim 8083a6066224454de177655eb414dd3453c2059536Dae Kimclass TexCoordVertexShader : public rr::VertexShader 8183a6066224454de177655eb414dd3453c2059536Dae Kim{ 8283a6066224454de177655eb414dd3453c2059536Dae Kimpublic: 8383a6066224454de177655eb414dd3453c2059536Dae Kim TexCoordVertexShader (void) : rr::VertexShader(2, 2) 8483a6066224454de177655eb414dd3453c2059536Dae Kim { 8583a6066224454de177655eb414dd3453c2059536Dae Kim m_inputs[0].type = rr::GENERICVECTYPE_FLOAT; 8683a6066224454de177655eb414dd3453c2059536Dae Kim m_inputs[1].type = rr::GENERICVECTYPE_FLOAT; 8783a6066224454de177655eb414dd3453c2059536Dae Kim 8883a6066224454de177655eb414dd3453c2059536Dae Kim m_outputs[0].type = rr::GENERICVECTYPE_FLOAT; 8983a6066224454de177655eb414dd3453c2059536Dae Kim m_outputs[1].type = rr::GENERICVECTYPE_FLOAT; 9083a6066224454de177655eb414dd3453c2059536Dae Kim } 9183a6066224454de177655eb414dd3453c2059536Dae Kim 9283a6066224454de177655eb414dd3453c2059536Dae Kim virtual ~TexCoordVertexShader (void) {} 9383a6066224454de177655eb414dd3453c2059536Dae Kim 9483a6066224454de177655eb414dd3453c2059536Dae Kim virtual void shadeVertices (const rr::VertexAttrib* inputs, 9583a6066224454de177655eb414dd3453c2059536Dae Kim rr::VertexPacket* const* packets, 9683a6066224454de177655eb414dd3453c2059536Dae Kim const int numPackets) const 9783a6066224454de177655eb414dd3453c2059536Dae Kim { 9883a6066224454de177655eb414dd3453c2059536Dae Kim tcu::Vec4 position; 9983a6066224454de177655eb414dd3453c2059536Dae Kim tcu::Vec4 texCoord; 10083a6066224454de177655eb414dd3453c2059536Dae Kim 10183a6066224454de177655eb414dd3453c2059536Dae Kim for (int packetNdx = 0; packetNdx < numPackets; packetNdx++) 10283a6066224454de177655eb414dd3453c2059536Dae Kim { 10383a6066224454de177655eb414dd3453c2059536Dae Kim rr::VertexPacket* const packet = packets[packetNdx]; 10483a6066224454de177655eb414dd3453c2059536Dae Kim 10583a6066224454de177655eb414dd3453c2059536Dae Kim readVertexAttrib(position, inputs[0], packet->instanceNdx, packet->vertexNdx); 10683a6066224454de177655eb414dd3453c2059536Dae Kim readVertexAttrib(texCoord, inputs[1], packet->instanceNdx, packet->vertexNdx); 10783a6066224454de177655eb414dd3453c2059536Dae Kim 10883a6066224454de177655eb414dd3453c2059536Dae Kim packet->outputs[0] = position; 10983a6066224454de177655eb414dd3453c2059536Dae Kim packet->outputs[1] = texCoord; 11083a6066224454de177655eb414dd3453c2059536Dae Kim packet->position = position; 11183a6066224454de177655eb414dd3453c2059536Dae Kim } 11283a6066224454de177655eb414dd3453c2059536Dae Kim } 11383a6066224454de177655eb414dd3453c2059536Dae Kim}; 11483a6066224454de177655eb414dd3453c2059536Dae Kim 115c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kimclass ColorFragmentShader : public rr::FragmentShader 116c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim{ 117c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kimprivate: 118c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim const tcu::TextureFormat m_colorFormat; 119c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim const tcu::TextureFormat m_depthStencilFormat; 120c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim 121c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kimpublic: 122c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim ColorFragmentShader (const tcu::TextureFormat& colorFormat, 123c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim const tcu::TextureFormat& depthStencilFormat) 124c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim : rr::FragmentShader (2, 1) 125c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim , m_colorFormat (colorFormat) 126c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim , m_depthStencilFormat (depthStencilFormat) 127c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim { 128c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim const tcu::TextureChannelClass channelClass = tcu::getTextureChannelClass(m_colorFormat.type); 129c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim 130c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim m_inputs[0].type = rr::GENERICVECTYPE_FLOAT; 131c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim m_inputs[1].type = rr::GENERICVECTYPE_FLOAT; 132c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim m_outputs[0].type = (channelClass == tcu::TEXTURECHANNELCLASS_SIGNED_INTEGER)? rr::GENERICVECTYPE_INT32 : 133c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim (channelClass == tcu::TEXTURECHANNELCLASS_UNSIGNED_INTEGER)? rr::GENERICVECTYPE_UINT32 134c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim : rr::GENERICVECTYPE_FLOAT; 135c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim } 136c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim 137c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim virtual ~ColorFragmentShader (void) {} 138c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim 139c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim virtual void shadeFragments (rr::FragmentPacket* packets, 140c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim const int numPackets, 141c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim const rr::FragmentShadingContext& context) const 142c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim { 143c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim for (int packetNdx = 0; packetNdx < numPackets; packetNdx++) 144c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim { 145c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim const rr::FragmentPacket& packet = packets[packetNdx]; 146c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim 147c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim if (m_depthStencilFormat.order == tcu::TextureFormat::D || m_depthStencilFormat.order == tcu::TextureFormat::DS) 148c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim { 149c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim for (int fragNdx = 0; fragNdx < 4; fragNdx++) 150c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim { 151c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim const tcu::Vec4 vtxPosition = rr::readVarying<float>(packet, context, 0, fragNdx); 152c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim rr::writeFragmentDepth(context, packetNdx, fragNdx, 0, vtxPosition.z()); 153c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim } 154c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim } 155c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim 156c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim for (int fragNdx = 0; fragNdx < 4; fragNdx++) 157c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim { 158c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim const tcu::Vec4 vtxColor = rr::readVarying<float>(packet, context, 1, fragNdx); 1594698bb4451c7d984b7e070d524130deb5a775f1aDae Kim rr::writeFragmentOutput(context, packetNdx, fragNdx, 0, vtxColor); 160c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim } 161c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim } 162c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim } 163c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim}; 164c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim 165387999c58e55306e26ea6a8abd371174d35ee640Pyry Haulosclass CoordinateCaptureFragmentShader : public rr::FragmentShader 16683a6066224454de177655eb414dd3453c2059536Dae Kim{ 16783a6066224454de177655eb414dd3453c2059536Dae Kimpublic: 168387999c58e55306e26ea6a8abd371174d35ee640Pyry Haulos CoordinateCaptureFragmentShader (void) 169387999c58e55306e26ea6a8abd371174d35ee640Pyry Haulos : rr::FragmentShader(2, 1) 17083a6066224454de177655eb414dd3453c2059536Dae Kim { 17183a6066224454de177655eb414dd3453c2059536Dae Kim m_inputs[0].type = rr::GENERICVECTYPE_FLOAT; 17283a6066224454de177655eb414dd3453c2059536Dae Kim m_inputs[1].type = rr::GENERICVECTYPE_FLOAT; 173387999c58e55306e26ea6a8abd371174d35ee640Pyry Haulos m_outputs[0].type = rr::GENERICVECTYPE_FLOAT; 17483a6066224454de177655eb414dd3453c2059536Dae Kim } 17583a6066224454de177655eb414dd3453c2059536Dae Kim 176387999c58e55306e26ea6a8abd371174d35ee640Pyry Haulos virtual ~CoordinateCaptureFragmentShader (void) 17783a6066224454de177655eb414dd3453c2059536Dae Kim { 17883a6066224454de177655eb414dd3453c2059536Dae Kim } 17983a6066224454de177655eb414dd3453c2059536Dae Kim 18083a6066224454de177655eb414dd3453c2059536Dae Kim virtual void shadeFragments (rr::FragmentPacket* packets, 18183a6066224454de177655eb414dd3453c2059536Dae Kim const int numPackets, 18283a6066224454de177655eb414dd3453c2059536Dae Kim const rr::FragmentShadingContext& context) const 18383a6066224454de177655eb414dd3453c2059536Dae Kim { 18483a6066224454de177655eb414dd3453c2059536Dae Kim for (int packetNdx = 0; packetNdx < numPackets; packetNdx++) 18583a6066224454de177655eb414dd3453c2059536Dae Kim { 18683a6066224454de177655eb414dd3453c2059536Dae Kim const rr::FragmentPacket& packet = packets[packetNdx]; 18783a6066224454de177655eb414dd3453c2059536Dae Kim 18883a6066224454de177655eb414dd3453c2059536Dae Kim for (int fragNdx = 0; fragNdx < 4; fragNdx++) 18983a6066224454de177655eb414dd3453c2059536Dae Kim { 19083a6066224454de177655eb414dd3453c2059536Dae Kim const tcu::Vec4 vtxTexCoord = rr::readVarying<float>(packet, context, 1, fragNdx); 191387999c58e55306e26ea6a8abd371174d35ee640Pyry Haulos rr::writeFragmentOutput(context, packetNdx, fragNdx, 0, vtxTexCoord); 19283a6066224454de177655eb414dd3453c2059536Dae Kim } 19383a6066224454de177655eb414dd3453c2059536Dae Kim } 19483a6066224454de177655eb414dd3453c2059536Dae Kim } 19583a6066224454de177655eb414dd3453c2059536Dae Kim}; 19683a6066224454de177655eb414dd3453c2059536Dae Kim 19783a6066224454de177655eb414dd3453c2059536Dae Kimclass Program 19883a6066224454de177655eb414dd3453c2059536Dae Kim{ 19983a6066224454de177655eb414dd3453c2059536Dae Kimpublic: 20083a6066224454de177655eb414dd3453c2059536Dae Kim virtual ~Program (void) { } 20183a6066224454de177655eb414dd3453c2059536Dae Kim 20283a6066224454de177655eb414dd3453c2059536Dae Kim virtual rr::Program getReferenceProgram (void) const = 0; 20383a6066224454de177655eb414dd3453c2059536Dae Kim}; 20483a6066224454de177655eb414dd3453c2059536Dae Kim 205387999c58e55306e26ea6a8abd371174d35ee640Pyry Haulosclass CoordinateCaptureProgram : public Program 20683a6066224454de177655eb414dd3453c2059536Dae Kim{ 20783a6066224454de177655eb414dd3453c2059536Dae Kimprivate: 208387999c58e55306e26ea6a8abd371174d35ee640Pyry Haulos TexCoordVertexShader m_vertexShader; 209387999c58e55306e26ea6a8abd371174d35ee640Pyry Haulos CoordinateCaptureFragmentShader m_fragmentShader; 21083a6066224454de177655eb414dd3453c2059536Dae Kimpublic: 211387999c58e55306e26ea6a8abd371174d35ee640Pyry Haulos CoordinateCaptureProgram (void) 21283a6066224454de177655eb414dd3453c2059536Dae Kim { 21383a6066224454de177655eb414dd3453c2059536Dae Kim } 21483a6066224454de177655eb414dd3453c2059536Dae Kim 215387999c58e55306e26ea6a8abd371174d35ee640Pyry Haulos virtual ~CoordinateCaptureProgram (void) { } 21683a6066224454de177655eb414dd3453c2059536Dae Kim 21783a6066224454de177655eb414dd3453c2059536Dae Kim virtual rr::Program getReferenceProgram (void) const 21883a6066224454de177655eb414dd3453c2059536Dae Kim { 21983a6066224454de177655eb414dd3453c2059536Dae Kim return rr::Program(&m_vertexShader, &m_fragmentShader); 22083a6066224454de177655eb414dd3453c2059536Dae Kim } 22183a6066224454de177655eb414dd3453c2059536Dae Kim}; 22283a6066224454de177655eb414dd3453c2059536Dae Kim 223c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kimclass ReferenceRenderer 224c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim{ 225c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kimpublic: 226c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim ReferenceRenderer (int surfaceWidth, 227c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim int surfaceHeight, 228c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim int numSamples, 229c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim const tcu::TextureFormat& colorFormat, 230c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim const tcu::TextureFormat& depthStencilFormat, 231c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim const rr::Program* const program); 232c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim 233c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim virtual ~ReferenceRenderer (void); 234c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim 2359cdb2bb91b0c5404e6b27c5adac5017d3c767d03Dae Kim void colorClear (const tcu::Vec4& color); 2369cdb2bb91b0c5404e6b27c5adac5017d3c767d03Dae Kim 237c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim void draw (const rr::RenderState& renderState, 238c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim const rr::PrimitiveType primitive, 239c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim const std::vector<Vertex4RGBA>& vertexBuffer); 24083a6066224454de177655eb414dd3453c2059536Dae Kim 24183a6066224454de177655eb414dd3453c2059536Dae Kim void draw (const rr::RenderState& renderState, 24283a6066224454de177655eb414dd3453c2059536Dae Kim const rr::PrimitiveType primitive, 24383a6066224454de177655eb414dd3453c2059536Dae Kim const std::vector<Vertex4Tex4>& vertexBuffer); 24483a6066224454de177655eb414dd3453c2059536Dae Kim 245c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim tcu::PixelBufferAccess getAccess (void); 246c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim const rr::ViewportState getViewportState (void) const; 247c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim 248c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kimprivate: 249c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim rr::Renderer m_renderer; 250c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim 251c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim const int m_surfaceWidth; 252c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim const int m_surfaceHeight; 253c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim const int m_numSamples; 254c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim 255c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim const tcu::TextureFormat m_colorFormat; 256c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim const tcu::TextureFormat m_depthStencilFormat; 257c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim 258c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim tcu::TextureLevel m_colorBuffer; 259c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim tcu::TextureLevel m_resolveColorBuffer; 260c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim tcu::TextureLevel m_depthStencilBuffer; 261c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim 262c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim rr::RenderTarget* m_renderTarget; 263c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim const rr::Program* m_program; 264c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim}; 265c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim 266120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kimrr::TestFunc mapVkCompareOp (vk::VkCompareOp compareFunc); 267120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kimrr::PrimitiveType mapVkPrimitiveTopology (vk::VkPrimitiveTopology primitiveTopology); 268120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kimrr::BlendFunc mapVkBlendFactor (vk::VkBlendFactor blendFactor); 269120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kimrr::BlendEquation mapVkBlendOp (vk::VkBlendOp blendOp); 270120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kimtcu::BVec4 mapVkColorComponentFlags (vk::VkColorComponentFlags flags); 271120ed2c44030b05409d5b1164a0676389dfe87c3Dae Kimrr::StencilOp mapVkStencilOp (vk::VkStencilOp stencilOp); 272c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim 273c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim} // pipeline 274c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim} // vkt 275c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim 276c6e8b5a8389a64972259b357407b5e0f4edd5716Dae Kim#endif // _VKTPIPELINEREFERENCERENDERER_HPP 277