1fbdc982ce9e1fec5d00064e33238956574c4db05scygan/*------------------------------------------------------------------------ 26677da425e555d9f2dce2a47f1b866c0e80f74d1Pyry Haulos * Vulkan Conformance Tests 36677da425e555d9f2dce2a47f1b866c0e80f74d1Pyry Haulos * ------------------------ 46677da425e555d9f2dce2a47f1b866c0e80f74d1Pyry Haulos * 56677da425e555d9f2dce2a47f1b866c0e80f74d1Pyry Haulos * Copyright (c) 2015 The Khronos Group Inc. 66677da425e555d9f2dce2a47f1b866c0e80f74d1Pyry Haulos * Copyright (c) 2015 Intel Corporation 76677da425e555d9f2dce2a47f1b866c0e80f74d1Pyry Haulos * 8d471a12fca5d3077a4ca28eebf83685f4208c3b6Pyry Haulos * Licensed under the Apache License, Version 2.0 (the "License"); 9d471a12fca5d3077a4ca28eebf83685f4208c3b6Pyry Haulos * you may not use this file except in compliance with the License. 10d471a12fca5d3077a4ca28eebf83685f4208c3b6Pyry Haulos * You may obtain a copy of the License at 116677da425e555d9f2dce2a47f1b866c0e80f74d1Pyry Haulos * 12d471a12fca5d3077a4ca28eebf83685f4208c3b6Pyry Haulos * http://www.apache.org/licenses/LICENSE-2.0 136677da425e555d9f2dce2a47f1b866c0e80f74d1Pyry Haulos * 14d471a12fca5d3077a4ca28eebf83685f4208c3b6Pyry Haulos * Unless required by applicable law or agreed to in writing, software 15d471a12fca5d3077a4ca28eebf83685f4208c3b6Pyry Haulos * distributed under the License is distributed on an "AS IS" BASIS, 16d471a12fca5d3077a4ca28eebf83685f4208c3b6Pyry Haulos * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17d471a12fca5d3077a4ca28eebf83685f4208c3b6Pyry Haulos * See the License for the specific language governing permissions and 18d471a12fca5d3077a4ca28eebf83685f4208c3b6Pyry Haulos * limitations under the License. 196677da425e555d9f2dce2a47f1b866c0e80f74d1Pyry Haulos * 206677da425e555d9f2dce2a47f1b866c0e80f74d1Pyry Haulos *//*! 216677da425e555d9f2dce2a47f1b866c0e80f74d1Pyry Haulos * \file 226677da425e555d9f2dce2a47f1b866c0e80f74d1Pyry Haulos * \brief Command draw Tests - Base Class 236677da425e555d9f2dce2a47f1b866c0e80f74d1Pyry Haulos *//*--------------------------------------------------------------------*/ 24fbdc982ce9e1fec5d00064e33238956574c4db05scygan 25fbdc982ce9e1fec5d00064e33238956574c4db05scygan#include "vktDrawBaseClass.hpp" 26fbdc982ce9e1fec5d00064e33238956574c4db05scygan 27fbdc982ce9e1fec5d00064e33238956574c4db05scygannamespace vkt 28fbdc982ce9e1fec5d00064e33238956574c4db05scygan{ 29fbdc982ce9e1fec5d00064e33238956574c4db05scygannamespace Draw 30fbdc982ce9e1fec5d00064e33238956574c4db05scygan{ 31fbdc982ce9e1fec5d00064e33238956574c4db05scygan 3239714d40c5e5b37a11b290a677cd471c0abea100Slawomir CyganDrawTestsBaseClass::DrawTestsBaseClass (Context& context, const char* vertexShaderName, const char* fragmentShaderName, vk::VkPrimitiveTopology topology) 33fbdc982ce9e1fec5d00064e33238956574c4db05scygan : TestInstance (context) 34fbdc982ce9e1fec5d00064e33238956574c4db05scygan , m_colorAttachmentFormat (vk::VK_FORMAT_R8G8B8A8_UNORM) 3539714d40c5e5b37a11b290a677cd471c0abea100Slawomir Cygan , m_topology (topology) 360073b4fb3cf78fa797b0d92168a0fddf89d45732Pyry Haulos , m_vk (context.getDeviceInterface()) 37fbdc982ce9e1fec5d00064e33238956574c4db05scygan , m_vertexShaderName (vertexShaderName) 38fbdc982ce9e1fec5d00064e33238956574c4db05scygan , m_fragmentShaderName (fragmentShaderName) 39fbdc982ce9e1fec5d00064e33238956574c4db05scygan{ 40fbdc982ce9e1fec5d00064e33238956574c4db05scygan} 41fbdc982ce9e1fec5d00064e33238956574c4db05scygan 42fbdc982ce9e1fec5d00064e33238956574c4db05scyganvoid DrawTestsBaseClass::initialize (void) 43fbdc982ce9e1fec5d00064e33238956574c4db05scygan{ 44fbdc982ce9e1fec5d00064e33238956574c4db05scygan const vk::VkDevice device = m_context.getDevice(); 45fbdc982ce9e1fec5d00064e33238956574c4db05scygan const deUint32 queueFamilyIndex = m_context.getUniversalQueueFamilyIndex(); 46fbdc982ce9e1fec5d00064e33238956574c4db05scygan 47fbdc982ce9e1fec5d00064e33238956574c4db05scygan const PipelineLayoutCreateInfo pipelineLayoutCreateInfo; 48fbdc982ce9e1fec5d00064e33238956574c4db05scygan m_pipelineLayout = vk::createPipelineLayout(m_vk, device, &pipelineLayoutCreateInfo); 49fbdc982ce9e1fec5d00064e33238956574c4db05scygan 50fbdc982ce9e1fec5d00064e33238956574c4db05scygan const vk::VkExtent3D targetImageExtent = { WIDTH, HEIGHT, 1 }; 51fbdc982ce9e1fec5d00064e33238956574c4db05scygan const ImageCreateInfo targetImageCreateInfo(vk::VK_IMAGE_TYPE_2D, m_colorAttachmentFormat, targetImageExtent, 1, 1, vk::VK_SAMPLE_COUNT_1_BIT, 52728de5fcad4836207be3027a2eba6c33b672c9b0Piotrowski, Piotr vk::VK_IMAGE_TILING_OPTIMAL, vk::VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | vk::VK_IMAGE_USAGE_TRANSFER_SRC_BIT | vk::VK_IMAGE_USAGE_TRANSFER_DST_BIT); 53fbdc982ce9e1fec5d00064e33238956574c4db05scygan 54fbdc982ce9e1fec5d00064e33238956574c4db05scygan m_colorTargetImage = Image::createAndAlloc(m_vk, device, targetImageCreateInfo, m_context.getDefaultAllocator()); 55fbdc982ce9e1fec5d00064e33238956574c4db05scygan 56fbdc982ce9e1fec5d00064e33238956574c4db05scygan const ImageViewCreateInfo colorTargetViewInfo(m_colorTargetImage->object(), vk::VK_IMAGE_VIEW_TYPE_2D, m_colorAttachmentFormat); 57fbdc982ce9e1fec5d00064e33238956574c4db05scygan m_colorTargetView = vk::createImageView(m_vk, device, &colorTargetViewInfo); 58fbdc982ce9e1fec5d00064e33238956574c4db05scygan 59fbdc982ce9e1fec5d00064e33238956574c4db05scygan RenderPassCreateInfo renderPassCreateInfo; 60fbdc982ce9e1fec5d00064e33238956574c4db05scygan renderPassCreateInfo.addAttachment(AttachmentDescription(m_colorAttachmentFormat, 61fbdc982ce9e1fec5d00064e33238956574c4db05scygan vk::VK_SAMPLE_COUNT_1_BIT, 62fbdc982ce9e1fec5d00064e33238956574c4db05scygan vk::VK_ATTACHMENT_LOAD_OP_LOAD, 63fbdc982ce9e1fec5d00064e33238956574c4db05scygan vk::VK_ATTACHMENT_STORE_OP_STORE, 64fbdc982ce9e1fec5d00064e33238956574c4db05scygan vk::VK_ATTACHMENT_LOAD_OP_DONT_CARE, 65fbdc982ce9e1fec5d00064e33238956574c4db05scygan vk::VK_ATTACHMENT_STORE_OP_STORE, 66fbdc982ce9e1fec5d00064e33238956574c4db05scygan vk::VK_IMAGE_LAYOUT_GENERAL, 67fbdc982ce9e1fec5d00064e33238956574c4db05scygan vk::VK_IMAGE_LAYOUT_GENERAL)); 68f8d853935f32ee0ca8b1b8c49add166e411f86f9scygan 69fbdc982ce9e1fec5d00064e33238956574c4db05scygan 70fbdc982ce9e1fec5d00064e33238956574c4db05scygan const vk::VkAttachmentReference colorAttachmentReference = 71fbdc982ce9e1fec5d00064e33238956574c4db05scygan { 72fbdc982ce9e1fec5d00064e33238956574c4db05scygan 0, 73fbdc982ce9e1fec5d00064e33238956574c4db05scygan vk::VK_IMAGE_LAYOUT_GENERAL 74fbdc982ce9e1fec5d00064e33238956574c4db05scygan }; 75fbdc982ce9e1fec5d00064e33238956574c4db05scygan 76fbdc982ce9e1fec5d00064e33238956574c4db05scygan renderPassCreateInfo.addSubpass(SubpassDescription(vk::VK_PIPELINE_BIND_POINT_GRAPHICS, 77fbdc982ce9e1fec5d00064e33238956574c4db05scygan 0, 78fbdc982ce9e1fec5d00064e33238956574c4db05scygan 0, 79fbdc982ce9e1fec5d00064e33238956574c4db05scygan DE_NULL, 80fbdc982ce9e1fec5d00064e33238956574c4db05scygan 1, 81fbdc982ce9e1fec5d00064e33238956574c4db05scygan &colorAttachmentReference, 82fbdc982ce9e1fec5d00064e33238956574c4db05scygan DE_NULL, 83fbdc982ce9e1fec5d00064e33238956574c4db05scygan AttachmentReference(), 84fbdc982ce9e1fec5d00064e33238956574c4db05scygan 0, 85fbdc982ce9e1fec5d00064e33238956574c4db05scygan DE_NULL)); 86fbdc982ce9e1fec5d00064e33238956574c4db05scygan 87fbdc982ce9e1fec5d00064e33238956574c4db05scygan m_renderPass = vk::createRenderPass(m_vk, device, &renderPassCreateInfo); 88fbdc982ce9e1fec5d00064e33238956574c4db05scygan 89fbdc982ce9e1fec5d00064e33238956574c4db05scygan std::vector<vk::VkImageView> colorAttachments(1); 90fbdc982ce9e1fec5d00064e33238956574c4db05scygan colorAttachments[0] = *m_colorTargetView; 91fbdc982ce9e1fec5d00064e33238956574c4db05scygan 92fbdc982ce9e1fec5d00064e33238956574c4db05scygan const FramebufferCreateInfo framebufferCreateInfo(*m_renderPass, colorAttachments, WIDTH, HEIGHT, 1); 93fbdc982ce9e1fec5d00064e33238956574c4db05scygan 94fbdc982ce9e1fec5d00064e33238956574c4db05scygan m_framebuffer = vk::createFramebuffer(m_vk, device, &framebufferCreateInfo); 95fbdc982ce9e1fec5d00064e33238956574c4db05scygan 96fbdc982ce9e1fec5d00064e33238956574c4db05scygan const vk::VkVertexInputBindingDescription vertexInputBindingDescription = 97fbdc982ce9e1fec5d00064e33238956574c4db05scygan { 98fbdc982ce9e1fec5d00064e33238956574c4db05scygan 0, 9939714d40c5e5b37a11b290a677cd471c0abea100Slawomir Cygan sizeof(VertexElementData), 100fbdc982ce9e1fec5d00064e33238956574c4db05scygan vk::VK_VERTEX_INPUT_RATE_VERTEX, 101fbdc982ce9e1fec5d00064e33238956574c4db05scygan }; 102fbdc982ce9e1fec5d00064e33238956574c4db05scygan 10339714d40c5e5b37a11b290a677cd471c0abea100Slawomir Cygan const vk::VkVertexInputAttributeDescription vertexInputAttributeDescriptions[] = 104fbdc982ce9e1fec5d00064e33238956574c4db05scygan { 105fbdc982ce9e1fec5d00064e33238956574c4db05scygan { 106fbdc982ce9e1fec5d00064e33238956574c4db05scygan 0u, 107fbdc982ce9e1fec5d00064e33238956574c4db05scygan 0u, 108fbdc982ce9e1fec5d00064e33238956574c4db05scygan vk::VK_FORMAT_R32G32B32A32_SFLOAT, 109fbdc982ce9e1fec5d00064e33238956574c4db05scygan 0u 11039714d40c5e5b37a11b290a677cd471c0abea100Slawomir Cygan }, // VertexElementData::position 111fbdc982ce9e1fec5d00064e33238956574c4db05scygan { 112fbdc982ce9e1fec5d00064e33238956574c4db05scygan 1u, 113fbdc982ce9e1fec5d00064e33238956574c4db05scygan 0u, 114fbdc982ce9e1fec5d00064e33238956574c4db05scygan vk::VK_FORMAT_R32G32B32A32_SFLOAT, 11539714d40c5e5b37a11b290a677cd471c0abea100Slawomir Cygan static_cast<deUint32>(sizeof(tcu::Vec4)) 11639714d40c5e5b37a11b290a677cd471c0abea100Slawomir Cygan }, // VertexElementData::color 11739714d40c5e5b37a11b290a677cd471c0abea100Slawomir Cygan { 11839714d40c5e5b37a11b290a677cd471c0abea100Slawomir Cygan 2u, 11939714d40c5e5b37a11b290a677cd471c0abea100Slawomir Cygan 0u, 12039714d40c5e5b37a11b290a677cd471c0abea100Slawomir Cygan vk::VK_FORMAT_R32_SINT, 12139714d40c5e5b37a11b290a677cd471c0abea100Slawomir Cygan static_cast<deUint32>(sizeof(tcu::Vec4)) * 2 12239714d40c5e5b37a11b290a677cd471c0abea100Slawomir Cygan } // VertexElementData::refVertexIndex 123fbdc982ce9e1fec5d00064e33238956574c4db05scygan }; 124fbdc982ce9e1fec5d00064e33238956574c4db05scygan 125fbdc982ce9e1fec5d00064e33238956574c4db05scygan m_vertexInputState = PipelineCreateInfo::VertexInputState(1, 126fbdc982ce9e1fec5d00064e33238956574c4db05scygan &vertexInputBindingDescription, 12739714d40c5e5b37a11b290a677cd471c0abea100Slawomir Cygan DE_LENGTH_OF_ARRAY(vertexInputAttributeDescriptions), 128fbdc982ce9e1fec5d00064e33238956574c4db05scygan vertexInputAttributeDescriptions); 129fbdc982ce9e1fec5d00064e33238956574c4db05scygan 13039714d40c5e5b37a11b290a677cd471c0abea100Slawomir Cygan const vk::VkDeviceSize dataSize = m_data.size() * sizeof(VertexElementData); 131fbdc982ce9e1fec5d00064e33238956574c4db05scygan m_vertexBuffer = Buffer::createAndAlloc(m_vk, device, BufferCreateInfo(dataSize, 132fbdc982ce9e1fec5d00064e33238956574c4db05scygan vk::VK_BUFFER_USAGE_VERTEX_BUFFER_BIT), m_context.getDefaultAllocator(), vk::MemoryRequirement::HostVisible); 133fbdc982ce9e1fec5d00064e33238956574c4db05scygan 134f8d853935f32ee0ca8b1b8c49add166e411f86f9scygan deUint8* ptr = reinterpret_cast<deUint8*>(m_vertexBuffer->getBoundMemory().getHostPtr()); 135d3cfb7f158cb03f3734b7f9f24c5b3f97e18939dPyry Haulos deMemcpy(ptr, &m_data[0], static_cast<size_t>(dataSize)); 136fbdc982ce9e1fec5d00064e33238956574c4db05scygan 137f8d853935f32ee0ca8b1b8c49add166e411f86f9scygan vk::flushMappedMemoryRange(m_vk, 138fbdc982ce9e1fec5d00064e33238956574c4db05scygan device, 139fbdc982ce9e1fec5d00064e33238956574c4db05scygan m_vertexBuffer->getBoundMemory().getMemory(), 140fbdc982ce9e1fec5d00064e33238956574c4db05scygan m_vertexBuffer->getBoundMemory().getOffset(), 141fbdc982ce9e1fec5d00064e33238956574c4db05scygan dataSize); 142fbdc982ce9e1fec5d00064e33238956574c4db05scygan 143fbdc982ce9e1fec5d00064e33238956574c4db05scygan const CmdPoolCreateInfo cmdPoolCreateInfo(queueFamilyIndex); 144fbdc982ce9e1fec5d00064e33238956574c4db05scygan m_cmdPool = vk::createCommandPool(m_vk, device, &cmdPoolCreateInfo); 145fbdc982ce9e1fec5d00064e33238956574c4db05scygan 146fbdc982ce9e1fec5d00064e33238956574c4db05scygan const vk::VkCommandBufferAllocateInfo cmdBufferAllocateInfo = 147fbdc982ce9e1fec5d00064e33238956574c4db05scygan { 148fbdc982ce9e1fec5d00064e33238956574c4db05scygan vk::VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO, // VkStructureType sType; 149fbdc982ce9e1fec5d00064e33238956574c4db05scygan DE_NULL, // const void* pNext; 150fbdc982ce9e1fec5d00064e33238956574c4db05scygan *m_cmdPool, // VkCommandPool commandPool; 151fbdc982ce9e1fec5d00064e33238956574c4db05scygan vk::VK_COMMAND_BUFFER_LEVEL_PRIMARY, // VkCommandBufferLevel level; 152fbdc982ce9e1fec5d00064e33238956574c4db05scygan 1u, // deUint32 bufferCount; 153fbdc982ce9e1fec5d00064e33238956574c4db05scygan }; 154fbdc982ce9e1fec5d00064e33238956574c4db05scygan m_cmdBuffer = vk::allocateCommandBuffer(m_vk, device, &cmdBufferAllocateInfo); 155fbdc982ce9e1fec5d00064e33238956574c4db05scygan 156fbdc982ce9e1fec5d00064e33238956574c4db05scygan initPipeline(device); 157fbdc982ce9e1fec5d00064e33238956574c4db05scygan} 158fbdc982ce9e1fec5d00064e33238956574c4db05scygan 159fbdc982ce9e1fec5d00064e33238956574c4db05scyganvoid DrawTestsBaseClass::initPipeline (const vk::VkDevice device) 160fbdc982ce9e1fec5d00064e33238956574c4db05scygan{ 161fbdc982ce9e1fec5d00064e33238956574c4db05scygan const vk::Unique<vk::VkShaderModule> vs(createShaderModule(m_vk, device, m_context.getBinaryCollection().get(m_vertexShaderName), 0)); 162fbdc982ce9e1fec5d00064e33238956574c4db05scygan const vk::Unique<vk::VkShaderModule> fs(createShaderModule(m_vk, device, m_context.getBinaryCollection().get(m_fragmentShaderName), 0)); 163fbdc982ce9e1fec5d00064e33238956574c4db05scygan 164fbdc982ce9e1fec5d00064e33238956574c4db05scygan const PipelineCreateInfo::ColorBlendState::Attachment vkCbAttachmentState; 165fbdc982ce9e1fec5d00064e33238956574c4db05scygan 166fbdc982ce9e1fec5d00064e33238956574c4db05scygan vk::VkViewport viewport; 167fbdc982ce9e1fec5d00064e33238956574c4db05scygan viewport.x = 0; 168fbdc982ce9e1fec5d00064e33238956574c4db05scygan viewport.y = 0; 169fbdc982ce9e1fec5d00064e33238956574c4db05scygan viewport.width = static_cast<float>(WIDTH); 170fbdc982ce9e1fec5d00064e33238956574c4db05scygan viewport.height = static_cast<float>(HEIGHT); 171fbdc982ce9e1fec5d00064e33238956574c4db05scygan viewport.minDepth = 0.0f; 172fbdc982ce9e1fec5d00064e33238956574c4db05scygan viewport.maxDepth = 1.0f; 173fbdc982ce9e1fec5d00064e33238956574c4db05scygan 174fbdc982ce9e1fec5d00064e33238956574c4db05scygan vk::VkRect2D scissor; 175fbdc982ce9e1fec5d00064e33238956574c4db05scygan scissor.offset.x = 0; 176fbdc982ce9e1fec5d00064e33238956574c4db05scygan scissor.offset.y = 0; 177fbdc982ce9e1fec5d00064e33238956574c4db05scygan scissor.extent.width = WIDTH; 178fbdc982ce9e1fec5d00064e33238956574c4db05scygan scissor.extent.height = HEIGHT; 179fbdc982ce9e1fec5d00064e33238956574c4db05scygan 180fbdc982ce9e1fec5d00064e33238956574c4db05scygan PipelineCreateInfo pipelineCreateInfo(*m_pipelineLayout, *m_renderPass, 0, 0); 181fbdc982ce9e1fec5d00064e33238956574c4db05scygan pipelineCreateInfo.addShader(PipelineCreateInfo::PipelineShaderStage(*vs, "main", vk::VK_SHADER_STAGE_VERTEX_BIT)); 182fbdc982ce9e1fec5d00064e33238956574c4db05scygan pipelineCreateInfo.addShader(PipelineCreateInfo::PipelineShaderStage(*fs, "main", vk::VK_SHADER_STAGE_FRAGMENT_BIT)); 183fbdc982ce9e1fec5d00064e33238956574c4db05scygan pipelineCreateInfo.addState(PipelineCreateInfo::VertexInputState(m_vertexInputState)); 184fbdc982ce9e1fec5d00064e33238956574c4db05scygan pipelineCreateInfo.addState(PipelineCreateInfo::InputAssemblerState(m_topology)); 185fbdc982ce9e1fec5d00064e33238956574c4db05scygan pipelineCreateInfo.addState(PipelineCreateInfo::ColorBlendState(1, &vkCbAttachmentState)); 186fbdc982ce9e1fec5d00064e33238956574c4db05scygan pipelineCreateInfo.addState(PipelineCreateInfo::ViewportState(1, std::vector<vk::VkViewport>(1, viewport), std::vector<vk::VkRect2D>(1, scissor))); 187fbdc982ce9e1fec5d00064e33238956574c4db05scygan pipelineCreateInfo.addState(PipelineCreateInfo::DepthStencilState()); 188fbdc982ce9e1fec5d00064e33238956574c4db05scygan pipelineCreateInfo.addState(PipelineCreateInfo::RasterizerState()); 189fbdc982ce9e1fec5d00064e33238956574c4db05scygan pipelineCreateInfo.addState(PipelineCreateInfo::MultiSampleState()); 190f8d853935f32ee0ca8b1b8c49add166e411f86f9scygan 191fbdc982ce9e1fec5d00064e33238956574c4db05scygan m_pipeline = vk::createGraphicsPipeline(m_vk, device, DE_NULL, &pipelineCreateInfo); 192fbdc982ce9e1fec5d00064e33238956574c4db05scygan} 193fbdc982ce9e1fec5d00064e33238956574c4db05scygan 194fbdc982ce9e1fec5d00064e33238956574c4db05scyganvoid DrawTestsBaseClass::beginRenderPass (void) 195fbdc982ce9e1fec5d00064e33238956574c4db05scygan{ 196fbdc982ce9e1fec5d00064e33238956574c4db05scygan const vk::VkClearColorValue clearColor = { { 0.0f, 0.0f, 0.0f, 1.0f } }; 197fbdc982ce9e1fec5d00064e33238956574c4db05scygan const CmdBufferBeginInfo beginInfo; 198f8d853935f32ee0ca8b1b8c49add166e411f86f9scygan 199fbdc982ce9e1fec5d00064e33238956574c4db05scygan m_vk.beginCommandBuffer(*m_cmdBuffer, &beginInfo); 200fbdc982ce9e1fec5d00064e33238956574c4db05scygan 201fbdc982ce9e1fec5d00064e33238956574c4db05scygan initialTransitionColor2DImage(m_vk, *m_cmdBuffer, m_colorTargetImage->object(), vk::VK_IMAGE_LAYOUT_GENERAL); 202f8d853935f32ee0ca8b1b8c49add166e411f86f9scygan 203fbdc982ce9e1fec5d00064e33238956574c4db05scygan const ImageSubresourceRange subresourceRange(vk::VK_IMAGE_ASPECT_COLOR_BIT); 204fbdc982ce9e1fec5d00064e33238956574c4db05scygan m_vk.cmdClearColorImage(*m_cmdBuffer, m_colorTargetImage->object(), 205fbdc982ce9e1fec5d00064e33238956574c4db05scygan vk::VK_IMAGE_LAYOUT_GENERAL, &clearColor, 1, &subresourceRange); 206fbdc982ce9e1fec5d00064e33238956574c4db05scygan 20788a37fd1e3ccfe27b92fb694c5aecbfa73165b85zeppelin const vk::VkMemoryBarrier memBarrier = 20888a37fd1e3ccfe27b92fb694c5aecbfa73165b85zeppelin { 20988a37fd1e3ccfe27b92fb694c5aecbfa73165b85zeppelin vk::VK_STRUCTURE_TYPE_MEMORY_BARRIER, 21088a37fd1e3ccfe27b92fb694c5aecbfa73165b85zeppelin DE_NULL, 21188a37fd1e3ccfe27b92fb694c5aecbfa73165b85zeppelin vk::VK_ACCESS_TRANSFER_WRITE_BIT, 21288a37fd1e3ccfe27b92fb694c5aecbfa73165b85zeppelin vk::VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | vk::VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT 21388a37fd1e3ccfe27b92fb694c5aecbfa73165b85zeppelin }; 21488a37fd1e3ccfe27b92fb694c5aecbfa73165b85zeppelin 21588a37fd1e3ccfe27b92fb694c5aecbfa73165b85zeppelin m_vk.cmdPipelineBarrier(*m_cmdBuffer, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, 21688a37fd1e3ccfe27b92fb694c5aecbfa73165b85zeppelin vk::VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, 21788a37fd1e3ccfe27b92fb694c5aecbfa73165b85zeppelin 0, 1, &memBarrier, 0, DE_NULL, 0, DE_NULL); 21888a37fd1e3ccfe27b92fb694c5aecbfa73165b85zeppelin 219fbdc982ce9e1fec5d00064e33238956574c4db05scygan const vk::VkRect2D renderArea = { { 0, 0 }, { WIDTH, HEIGHT } }; 220fbdc982ce9e1fec5d00064e33238956574c4db05scygan const RenderPassBeginInfo renderPassBegin(*m_renderPass, *m_framebuffer, renderArea); 221fbdc982ce9e1fec5d00064e33238956574c4db05scygan 222fbdc982ce9e1fec5d00064e33238956574c4db05scygan m_vk.cmdBeginRenderPass(*m_cmdBuffer, &renderPassBegin, vk::VK_SUBPASS_CONTENTS_INLINE); 223fbdc982ce9e1fec5d00064e33238956574c4db05scygan} 224fbdc982ce9e1fec5d00064e33238956574c4db05scygan 225f8d853935f32ee0ca8b1b8c49add166e411f86f9scygan} // Draw 226f8d853935f32ee0ca8b1b8c49add166e411f86f9scygan} // vkt 227