From 2c06d5d63f58c4f0b689aad2446e1129fb66a673 Mon Sep 17 00:00:00 2001 From: plapins Date: Mon, 6 Jun 2016 14:08:17 +0200 Subject: [PATCH] Added code for tutorial 05 - Staging Resources --- Document/Images/05 - Staging Resources.png | Bin 0 -> 167383 bytes Project/CMakeLists.txt | 8 +- Project/Common/ListOfFunctions.inl | 3 + Project/Tutorial05/Data05/frag.spv | Bin 0 -> 372 bytes Project/Tutorial05/Data05/frag.spv.txt | 36 + Project/Tutorial05/Data05/shader.frag | 19 + Project/Tutorial05/Data05/shader.vert | 21 + Project/Tutorial05/Data05/vert.spv | Bin 0 -> 796 bytes Project/Tutorial05/Data05/vert.spv.txt | 59 ++ Project/Tutorial05/Tutorial05.cpp | 834 +++++++++++++++++++++ Project/Tutorial05/Tutorial05.h | 133 ++++ Project/Tutorial05/main.cpp | 53 ++ README.md | 9 + 13 files changed, 1174 insertions(+), 1 deletion(-) create mode 100644 Document/Images/05 - Staging Resources.png create mode 100644 Project/Tutorial05/Data05/frag.spv create mode 100644 Project/Tutorial05/Data05/frag.spv.txt create mode 100644 Project/Tutorial05/Data05/shader.frag create mode 100644 Project/Tutorial05/Data05/shader.vert create mode 100644 Project/Tutorial05/Data05/vert.spv create mode 100644 Project/Tutorial05/Data05/vert.spv.txt create mode 100644 Project/Tutorial05/Tutorial05.cpp create mode 100644 Project/Tutorial05/Tutorial05.h create mode 100644 Project/Tutorial05/main.cpp diff --git a/Document/Images/05 - Staging Resources.png b/Document/Images/05 - Staging Resources.png new file mode 100644 index 0000000000000000000000000000000000000000..9e0c845276731c8fbadd42ae8cf57627a03b4b2f GIT binary patch literal 167383 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

;bCcy>cF0&{ZRoXRjo#xx!ffBqW!|v}{tN!rAO3 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⪙ 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 Pz&~jT1@Tf*!+`$-KE(K@ literal 0 HcmV?d00001 diff --git a/Project/CMakeLists.txt b/Project/CMakeLists.txt index 7231169..513c617 100644 --- a/Project/CMakeLists.txt +++ b/Project/CMakeLists.txt @@ -127,4 +127,10 @@ add_executable( "04" "Vertex_Attributes" ${ALL_BASIC_AND_ADVANCED_SHARED_FILES} Tutorial04/Tutorial04.h Tutorial04/main.cpp - Tutorial04/Tutorial04.cpp ) \ No newline at end of file + Tutorial04/Tutorial04.cpp ) + +add_executable( "05" "Staging_Resources" + ${ALL_BASIC_AND_ADVANCED_SHARED_FILES} + Tutorial05/Tutorial05.h + Tutorial05/main.cpp + Tutorial05/Tutorial05.cpp ) \ No newline at end of file diff --git a/Project/Common/ListOfFunctions.inl b/Project/Common/ListOfFunctions.inl index a1a9bb3..46c7e35 100644 --- a/Project/Common/ListOfFunctions.inl +++ b/Project/Common/ListOfFunctions.inl @@ -157,4 +157,7 @@ VK_DEVICE_LEVEL_FUNCTION( vkFreeMemory ) VK_DEVICE_LEVEL_FUNCTION( vkDestroyBuffer ) VK_DEVICE_LEVEL_FUNCTION( vkDestroyFence ) +// Tutorial 05 +VK_DEVICE_LEVEL_FUNCTION( vkCmdCopyBuffer ) + #undef VK_DEVICE_LEVEL_FUNCTION \ No newline at end of file diff --git a/Project/Tutorial05/Data05/frag.spv b/Project/Tutorial05/Data05/frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..5601583b8727b39e66a5d46e5338fdfd6df6c5d5 GIT binary patch literal 372 zcmYk1O$z~06o!u(GsZV5b|U-90x7Yvu$i47AZ4R4h5RhP&qjIPJ45d6bng3cKCbVL zN@fLaWOd6<+dQyY)k2py$u@~^_d`6Hj^${W?~L*^tz<>A;=DgzB$SCN(ZVM_B7Ck# zeo_>`{`-YhlkV2(DZM&f^^Y8Ha=j0yBP{)kJ9Jj>p_^jv-Q^v^4Tv6oKIyRL4#3$? v=J-X9wS#^py+UTypDwJK;%029dFrL3niot!UczctjgWtZs=mT+s^`Q9n@JPv literal 0 HcmV?d00001 diff --git a/Project/Tutorial05/Data05/frag.spv.txt b/Project/Tutorial05/Data05/frag.spv.txt new file mode 100644 index 0000000..209e57a --- /dev/null +++ b/Project/Tutorial05/Data05/frag.spv.txt @@ -0,0 +1,36 @@ +shader.frag +Warning, version 430 is not yet complete; most version-specific features are present, but some are missing. + + +Linked fragment stage: + + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 13 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 9 11 + ExecutionMode 4 OriginLowerLeft + Source GLSL 430 + Name 4 "main" + Name 9 "o_Color" + Name 11 "v_Color" + Decorate 9(o_Color) Location 0 + Decorate 11(v_Color) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Output 7(fvec4) + 9(o_Color): 8(ptr) Variable Output + 10: TypePointer Input 7(fvec4) + 11(v_Color): 10(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 12: 7(fvec4) Load 11(v_Color) + Store 9(o_Color) 12 + Return + FunctionEnd diff --git a/Project/Tutorial05/Data05/shader.frag b/Project/Tutorial05/Data05/shader.frag new file mode 100644 index 0000000..3a86de5 --- /dev/null +++ b/Project/Tutorial05/Data05/shader.frag @@ -0,0 +1,19 @@ +// Copyright 2016 Intel Corporation All Rights Reserved +// +// Intel makes no representations about the suitability of this software for any purpose. +// THIS SOFTWARE IS PROVIDED ""AS IS."" INTEL SPECIFICALLY DISCLAIMS ALL WARRANTIES, +// EXPRESS OR IMPLIED, AND ALL LIABILITY, INCLUDING CONSEQUENTIAL AND OTHER INDIRECT DAMAGES, +// FOR THE USE OF THIS SOFTWARE, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PROPRIETARY +// RIGHTS, AND INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +// Intel does not assume any responsibility for any errors which may appear in this software +// nor any responsibility to update it. + +#version 430 + +layout(location = 0) in vec4 v_Color; + +layout(location = 0) out vec4 o_Color; + +void main() { + o_Color = v_Color; +} diff --git a/Project/Tutorial05/Data05/shader.vert b/Project/Tutorial05/Data05/shader.vert new file mode 100644 index 0000000..1030cb3 --- /dev/null +++ b/Project/Tutorial05/Data05/shader.vert @@ -0,0 +1,21 @@ +// Copyright 2016 Intel Corporation All Rights Reserved +// +// Intel makes no representations about the suitability of this software for any purpose. +// THIS SOFTWARE IS PROVIDED ""AS IS."" INTEL SPECIFICALLY DISCLAIMS ALL WARRANTIES, +// EXPRESS OR IMPLIED, AND ALL LIABILITY, INCLUDING CONSEQUENTIAL AND OTHER INDIRECT DAMAGES, +// FOR THE USE OF THIS SOFTWARE, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PROPRIETARY +// RIGHTS, AND INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +// Intel does not assume any responsibility for any errors which may appear in this software +// nor any responsibility to update it. + +#version 430 + +layout(location = 0) in vec4 i_Position; +layout(location = 1) in vec4 i_Color; + +layout(location = 0) out vec4 v_Color; + +void main() { + gl_Position = i_Position; + v_Color = i_Color; +} diff --git a/Project/Tutorial05/Data05/vert.spv b/Project/Tutorial05/Data05/vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..55be53cc4f70f2f734d3270a9411f9d33e85b42a GIT binary patch literal 796 zcmYk3PfG$p7{(`eS1n63Q#*ugbPS|JMGysHupK-ELRXPmV!(Do7l}SppRY^M^BZ@t z8Qy*7dEUP>8&pnf#%yWV&5>EJwyB641IEIJsXCsFC*$F=cpY9`o)g(L0pNTsv+d5I zzV9=eLH1;ASy$GR1=d_E?n@^w8#dEqS(oa#TYn?N`d}#}tXHsh} zo;jUvvtnYuQsTUiUh<9R_T#}Wi&^%Ps&C-tA}-QqKD#L^C3N$yrlWkGFC1rfTk=OK z%*pcTHD*Bry~Ye^yi}quXS76p=sl3J;Jnj+PG30nI?5vNL^Y_zxu;WA7|Z&~*N=3Z zckPPTg|UovR&xFl^^V1Ngyf?Q%6s`5_+rKE3hBq(Hznu4qS2!%jAhiM2fQU?k-sm* zM_uya+#3ylM@TL2hw~0-KAv|V{z@})Z|=t;=0{2-yp>9g0~z)2rBdrq#=OjQrwlkT RKEAIr_3_ac{;O`+vOg=gGkpL6 literal 0 HcmV?d00001 diff --git a/Project/Tutorial05/Data05/vert.spv.txt b/Project/Tutorial05/Data05/vert.spv.txt new file mode 100644 index 0000000..67ed30a --- /dev/null +++ b/Project/Tutorial05/Data05/vert.spv.txt @@ -0,0 +1,59 @@ +shader.vert +Warning, version 430 is not yet complete; most version-specific features are present, but some are missing. + + +Linked vertex stage: + + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 24 + + Capability Shader + Capability ClipDistance + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 13 17 21 22 + Source GLSL 430 + Name 4 "main" + Name 11 "gl_PerVertex" + MemberName 11(gl_PerVertex) 0 "gl_Position" + MemberName 11(gl_PerVertex) 1 "gl_PointSize" + MemberName 11(gl_PerVertex) 2 "gl_ClipDistance" + Name 13 "" + Name 17 "i_Position" + Name 21 "v_Color" + Name 22 "i_Color" + MemberDecorate 11(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 11(gl_PerVertex) 1 BuiltIn PointSize + MemberDecorate 11(gl_PerVertex) 2 BuiltIn ClipDistance + Decorate 11(gl_PerVertex) Block + Decorate 17(i_Position) Location 0 + Decorate 21(v_Color) Location 0 + Decorate 22(i_Color) Location 1 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypeInt 32 0 + 9: 8(int) Constant 1 + 10: TypeArray 6(float) 9 +11(gl_PerVertex): TypeStruct 7(fvec4) 6(float) 10 + 12: TypePointer Output 11(gl_PerVertex) + 13: 12(ptr) Variable Output + 14: TypeInt 32 1 + 15: 14(int) Constant 0 + 16: TypePointer Input 7(fvec4) + 17(i_Position): 16(ptr) Variable Input + 19: TypePointer Output 7(fvec4) + 21(v_Color): 19(ptr) Variable Output + 22(i_Color): 16(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 18: 7(fvec4) Load 17(i_Position) + 20: 19(ptr) AccessChain 13 15 + Store 20 18 + 23: 7(fvec4) Load 22(i_Color) + Store 21(v_Color) 23 + Return + FunctionEnd diff --git a/Project/Tutorial05/Tutorial05.cpp b/Project/Tutorial05/Tutorial05.cpp new file mode 100644 index 0000000..31f82b6 --- /dev/null +++ b/Project/Tutorial05/Tutorial05.cpp @@ -0,0 +1,834 @@ +// Copyright 2016 Intel Corporation All Rights Reserved +// +// Intel makes no representations about the suitability of this software for any purpose. +// THIS SOFTWARE IS PROVIDED ""AS IS."" INTEL SPECIFICALLY DISCLAIMS ALL WARRANTIES, +// EXPRESS OR IMPLIED, AND ALL LIABILITY, INCLUDING CONSEQUENTIAL AND OTHER INDIRECT DAMAGES, +// FOR THE USE OF THIS SOFTWARE, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PROPRIETARY +// RIGHTS, AND INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +// Intel does not assume any responsibility for any errors which may appear in this software +// nor any responsibility to update it. + +#include "Tutorial05.h" +#include "VulkanFunctions.h" + +namespace ApiWithoutSecrets { + + Tutorial05::Tutorial05() : + Vulkan() { + } + + bool Tutorial05::CreateRenderPass() { + VkAttachmentDescription attachment_descriptions[] = { + { + 0, // VkAttachmentDescriptionFlags flags + GetSwapChain().Format, // VkFormat format + VK_SAMPLE_COUNT_1_BIT, // VkSampleCountFlagBits samples + VK_ATTACHMENT_LOAD_OP_CLEAR, // VkAttachmentLoadOp loadOp + VK_ATTACHMENT_STORE_OP_STORE, // VkAttachmentStoreOp storeOp + VK_ATTACHMENT_LOAD_OP_DONT_CARE, // VkAttachmentLoadOp stencilLoadOp + VK_ATTACHMENT_STORE_OP_DONT_CARE, // VkAttachmentStoreOp stencilStoreOp + VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, // VkImageLayout initialLayout; + VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL // VkImageLayout finalLayout + } + }; + + VkAttachmentReference color_attachment_references[] = { + { + 0, // uint32_t attachment + VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL // VkImageLayout layout + } + }; + + VkSubpassDescription subpass_descriptions[] = { + { + 0, // VkSubpassDescriptionFlags flags + VK_PIPELINE_BIND_POINT_GRAPHICS, // VkPipelineBindPoint pipelineBindPoint + 0, // uint32_t inputAttachmentCount + nullptr, // const VkAttachmentReference *pInputAttachments + 1, // uint32_t colorAttachmentCount + color_attachment_references, // const VkAttachmentReference *pColorAttachments + nullptr, // const VkAttachmentReference *pResolveAttachments + nullptr, // const VkAttachmentReference *pDepthStencilAttachment + 0, // uint32_t preserveAttachmentCount + nullptr // const uint32_t* pPreserveAttachments + } + }; + + VkRenderPassCreateInfo render_pass_create_info = { + VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO, // VkStructureType sType + nullptr, // const void *pNext + 0, // VkRenderPassCreateFlags flags + 1, // uint32_t attachmentCount + attachment_descriptions, // const VkAttachmentDescription *pAttachments + 1, // uint32_t subpassCount + subpass_descriptions, // const VkSubpassDescription *pSubpasses + 0, // uint32_t dependencyCount + nullptr // const VkSubpassDependency *pDependencies + }; + + if( vkCreateRenderPass( GetDevice(), &render_pass_create_info, nullptr, &Vulkan.RenderPass ) != VK_SUCCESS ) { + std::cout << "Could not create render pass!" << std::endl; + return false; + } + + return true; + } + + Tools::AutoDeleter Tutorial05::CreateShaderModule( const char* filename ) { + const std::vector code = Tools::GetBinaryFileContents( filename ); + if( code.size() == 0 ) { + return Tools::AutoDeleter(); + } + + VkShaderModuleCreateInfo shader_module_create_info = { + VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO, // VkStructureType sType + nullptr, // const void *pNext + 0, // VkShaderModuleCreateFlags flags + code.size(), // size_t codeSize + reinterpret_cast(&code[0]) // const uint32_t *pCode + }; + + VkShaderModule shader_module; + if( vkCreateShaderModule( GetDevice(), &shader_module_create_info, nullptr, &shader_module ) != VK_SUCCESS ) { + std::cout << "Could not create shader module from a \"" << filename << "\" file!" << std::endl; + return Tools::AutoDeleter(); + } + + return Tools::AutoDeleter( shader_module, vkDestroyShaderModule, GetDevice() ); + } + + Tools::AutoDeleter Tutorial05::CreatePipelineLayout() { + VkPipelineLayoutCreateInfo layout_create_info = { + VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO, // VkStructureType sType + nullptr, // const void *pNext + 0, // VkPipelineLayoutCreateFlags flags + 0, // uint32_t setLayoutCount + nullptr, // const VkDescriptorSetLayout *pSetLayouts + 0, // uint32_t pushConstantRangeCount + nullptr // const VkPushConstantRange *pPushConstantRanges + }; + + VkPipelineLayout pipeline_layout; + if( vkCreatePipelineLayout( GetDevice(), &layout_create_info, nullptr, &pipeline_layout ) != VK_SUCCESS ) { + std::cout << "Could not create pipeline layout!" << std::endl; + return Tools::AutoDeleter(); + } + + return Tools::AutoDeleter( pipeline_layout, vkDestroyPipelineLayout, GetDevice() ); + } + + bool Tutorial05::CreatePipeline() { + Tools::AutoDeleter vertex_shader_module = CreateShaderModule( "Data05/vert.spv" ); + Tools::AutoDeleter fragment_shader_module = CreateShaderModule( "Data05/frag.spv" ); + + if( !vertex_shader_module || !fragment_shader_module ) { + return false; + } + + std::vector shader_stage_create_infos = { + // Vertex shader + { + VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, // VkStructureType sType + nullptr, // const void *pNext + 0, // VkPipelineShaderStageCreateFlags flags + VK_SHADER_STAGE_VERTEX_BIT, // VkShaderStageFlagBits stage + vertex_shader_module.Get(), // VkShaderModule module + "main", // const char *pName + nullptr // const VkSpecializationInfo *pSpecializationInfo + }, + // Fragment shader + { + VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, // VkStructureType sType + nullptr, // const void *pNext + 0, // VkPipelineShaderStageCreateFlags flags + VK_SHADER_STAGE_FRAGMENT_BIT, // VkShaderStageFlagBits stage + fragment_shader_module.Get(), // VkShaderModule module + "main", // const char *pName + nullptr // const VkSpecializationInfo *pSpecializationInfo + } + }; + + VkVertexInputBindingDescription vertex_binding_description = { + 0, // uint32_t binding + sizeof(VertexData), // uint32_t stride + VK_VERTEX_INPUT_RATE_VERTEX // VkVertexInputRate inputRate + }; + + VkVertexInputAttributeDescription vertex_attribute_descriptions[] = { + { + 0, // uint32_t location + vertex_binding_description.binding, // uint32_t binding + VK_FORMAT_R32G32B32A32_SFLOAT, // VkFormat format + 0 // uint32_t offset + }, + { + 1, // uint32_t location + vertex_binding_description.binding, // uint32_t binding + VK_FORMAT_R32G32B32A32_SFLOAT, // VkFormat format + 4 * sizeof(float) // uint32_t offset + } + }; + + VkPipelineVertexInputStateCreateInfo vertex_input_state_create_info = { + VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO, // VkStructureType sType + nullptr, // const void *pNext + 0, // VkPipelineVertexInputStateCreateFlags flags; + 1, // uint32_t vertexBindingDescriptionCount + &vertex_binding_description, // const VkVertexInputBindingDescription *pVertexBindingDescriptions + 2, // uint32_t vertexAttributeDescriptionCount + vertex_attribute_descriptions // const VkVertexInputAttributeDescription *pVertexAttributeDescriptions + }; + + VkPipelineInputAssemblyStateCreateInfo input_assembly_state_create_info = { + VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO, // VkStructureType sType + nullptr, // const void *pNext + 0, // VkPipelineInputAssemblyStateCreateFlags flags + VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP, // VkPrimitiveTopology topology + VK_FALSE // VkBool32 primitiveRestartEnable + }; + + VkPipelineViewportStateCreateInfo viewport_state_create_info = { + VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO, // VkStructureType sType + nullptr, // const void *pNext + 0, // VkPipelineViewportStateCreateFlags flags + 1, // uint32_t viewportCount + nullptr, // const VkViewport *pViewports + 1, // uint32_t scissorCount + nullptr // const VkRect2D *pScissors + }; + + VkPipelineRasterizationStateCreateInfo rasterization_state_create_info = { + VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO, // VkStructureType sType + nullptr, // const void *pNext + 0, // VkPipelineRasterizationStateCreateFlags flags + VK_FALSE, // VkBool32 depthClampEnable + VK_FALSE, // VkBool32 rasterizerDiscardEnable + VK_POLYGON_MODE_FILL, // VkPolygonMode polygonMode + VK_CULL_MODE_BACK_BIT, // VkCullModeFlags cullMode + VK_FRONT_FACE_COUNTER_CLOCKWISE, // VkFrontFace frontFace + VK_FALSE, // VkBool32 depthBiasEnable + 0.0f, // float depthBiasConstantFactor + 0.0f, // float depthBiasClamp + 0.0f, // float depthBiasSlopeFactor + 1.0f // float lineWidth + }; + + VkPipelineMultisampleStateCreateInfo multisample_state_create_info = { + VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO, // VkStructureType sType + nullptr, // const void *pNext + 0, // VkPipelineMultisampleStateCreateFlags flags + VK_SAMPLE_COUNT_1_BIT, // VkSampleCountFlagBits rasterizationSamples + VK_FALSE, // VkBool32 sampleShadingEnable + 1.0f, // float minSampleShading + nullptr, // const VkSampleMask *pSampleMask + VK_FALSE, // VkBool32 alphaToCoverageEnable + VK_FALSE // VkBool32 alphaToOneEnable + }; + + VkPipelineColorBlendAttachmentState color_blend_attachment_state = { + VK_FALSE, // VkBool32 blendEnable + VK_BLEND_FACTOR_ONE, // VkBlendFactor srcColorBlendFactor + VK_BLEND_FACTOR_ZERO, // VkBlendFactor dstColorBlendFactor + VK_BLEND_OP_ADD, // VkBlendOp colorBlendOp + VK_BLEND_FACTOR_ONE, // VkBlendFactor srcAlphaBlendFactor + VK_BLEND_FACTOR_ZERO, // VkBlendFactor dstAlphaBlendFactor + VK_BLEND_OP_ADD, // VkBlendOp alphaBlendOp + VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT | // VkColorComponentFlags colorWriteMask + VK_COLOR_COMPONENT_B_BIT | VK_COLOR_COMPONENT_A_BIT + }; + + VkPipelineColorBlendStateCreateInfo color_blend_state_create_info = { + VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO, // VkStructureType sType + nullptr, // const void *pNext + 0, // VkPipelineColorBlendStateCreateFlags flags + VK_FALSE, // VkBool32 logicOpEnable + VK_LOGIC_OP_COPY, // VkLogicOp logicOp + 1, // uint32_t attachmentCount + &color_blend_attachment_state, // const VkPipelineColorBlendAttachmentState *pAttachments + { 0.0f, 0.0f, 0.0f, 0.0f } // float blendConstants[4] + }; + + VkDynamicState dynamic_states[] = { + VK_DYNAMIC_STATE_VIEWPORT, + VK_DYNAMIC_STATE_SCISSOR, + }; + + VkPipelineDynamicStateCreateInfo dynamic_state_create_info = { + VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO, // VkStructureType sType + nullptr, // const void *pNext + 0, // VkPipelineDynamicStateCreateFlags flags + 2, // uint32_t dynamicStateCount + dynamic_states // const VkDynamicState *pDynamicStates + }; + + Tools::AutoDeleter pipeline_layout = CreatePipelineLayout(); + if( !pipeline_layout ) { + return false; + } + + VkGraphicsPipelineCreateInfo pipeline_create_info = { + VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO, // VkStructureType sType + nullptr, // const void *pNext + 0, // VkPipelineCreateFlags flags + static_cast(shader_stage_create_infos.size()), // uint32_t stageCount + &shader_stage_create_infos[0], // const VkPipelineShaderStageCreateInfo *pStages + &vertex_input_state_create_info, // const VkPipelineVertexInputStateCreateInfo *pVertexInputState; + &input_assembly_state_create_info, // const VkPipelineInputAssemblyStateCreateInfo *pInputAssemblyState + nullptr, // const VkPipelineTessellationStateCreateInfo *pTessellationState + &viewport_state_create_info, // const VkPipelineViewportStateCreateInfo *pViewportState + &rasterization_state_create_info, // const VkPipelineRasterizationStateCreateInfo *pRasterizationState + &multisample_state_create_info, // const VkPipelineMultisampleStateCreateInfo *pMultisampleState + nullptr, // const VkPipelineDepthStencilStateCreateInfo *pDepthStencilState + &color_blend_state_create_info, // const VkPipelineColorBlendStateCreateInfo *pColorBlendState + &dynamic_state_create_info, // const VkPipelineDynamicStateCreateInfo *pDynamicState + pipeline_layout.Get(), // VkPipelineLayout layout + Vulkan.RenderPass, // VkRenderPass renderPass + 0, // uint32_t subpass + VK_NULL_HANDLE, // VkPipeline basePipelineHandle + -1 // int32_t basePipelineIndex + }; + + if( vkCreateGraphicsPipelines( GetDevice(), VK_NULL_HANDLE, 1, &pipeline_create_info, nullptr, &Vulkan.GraphicsPipeline ) != VK_SUCCESS ) { + std::cout << "Could not create graphics pipeline!" << std::endl; + return false; + } + return true; + } + + bool Tutorial05::CreateRenderingResources() { + if( !CreateCommandBuffers() ) { + return false; + } + if( !CreateSemaphores() ) { + return false; + } + if( !CreateFences() ) { + return false; + } + return true; + } + + bool Tutorial05::CreateCommandBuffers() { + if( !CreateCommandPool( GetGraphicsQueue().FamilyIndex, &Vulkan.CommandPool ) ) { + std::cout << "Could not create command pool!" << std::endl; + return false; + } + for( size_t i = 0; i < Vulkan.RenderingResources.size(); ++i ) { + if( !AllocateCommandBuffers( Vulkan.CommandPool, 1, &Vulkan.RenderingResources[i].CommandBuffer ) ) { + std::cout << "Could not allocate command buffer!" << std::endl; + return false; + } + } + return true; + } + + bool Tutorial05::CreateCommandPool( uint32_t queue_family_index, VkCommandPool *pool ) { + VkCommandPoolCreateInfo cmd_pool_create_info = { + VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO, // VkStructureType sType + nullptr, // const void *pNext + VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT | // VkCommandPoolCreateFlags flags + VK_COMMAND_POOL_CREATE_TRANSIENT_BIT, + queue_family_index // uint32_t queueFamilyIndex + }; + + if( vkCreateCommandPool( GetDevice(), &cmd_pool_create_info, nullptr, pool ) != VK_SUCCESS ) { + return false; + } + return true; + } + + bool Tutorial05::AllocateCommandBuffers( VkCommandPool pool, uint32_t count, VkCommandBuffer *command_buffers ) { + VkCommandBufferAllocateInfo command_buffer_allocate_info = { + VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO, // VkStructureType sType + nullptr, // const void *pNext + pool, // VkCommandPool commandPool + VK_COMMAND_BUFFER_LEVEL_PRIMARY, // VkCommandBufferLevel level + count // uint32_t bufferCount + }; + + if( vkAllocateCommandBuffers( GetDevice(), &command_buffer_allocate_info, command_buffers ) != VK_SUCCESS ) { + return false; + } + return true; + } + + bool Tutorial05::CreateSemaphores() { + VkSemaphoreCreateInfo semaphore_create_info = { + VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO, // VkStructureType sType + nullptr, // const void* pNext + 0 // VkSemaphoreCreateFlags flags + }; + + for( size_t i = 0; i < Vulkan.RenderingResources.size(); ++i ) { + if( (vkCreateSemaphore( GetDevice(), &semaphore_create_info, nullptr, &Vulkan.RenderingResources[i].ImageAvailableSemaphore ) != VK_SUCCESS) || + (vkCreateSemaphore( GetDevice(), &semaphore_create_info, nullptr, &Vulkan.RenderingResources[i].FinishedRenderingSemaphore ) != VK_SUCCESS) ) { + std::cout << "Could not create semaphores!" << std::endl; + return false; + } + } + return true; + } + + bool Tutorial05::CreateFences() { + VkFenceCreateInfo fence_create_info = { + VK_STRUCTURE_TYPE_FENCE_CREATE_INFO, // VkStructureType sType + nullptr, // const void *pNext + VK_FENCE_CREATE_SIGNALED_BIT // VkFenceCreateFlags flags + }; + + for( size_t i = 0; i < Vulkan.RenderingResources.size(); ++i ) { + if( vkCreateFence( GetDevice(), &fence_create_info, nullptr, &Vulkan.RenderingResources[i].Fence ) != VK_SUCCESS ) { + std::cout << "Could not create a fence!" << std::endl; + return false; + } + } + return true; + } + + bool Tutorial05::CreateVertexBuffer() { + const std::vector& vertex_data = GetVertexData(); + + Vulkan.VertexBuffer.Size = static_cast(vertex_data.size() * sizeof(vertex_data[0])); + if( !CreateBuffer( VK_BUFFER_USAGE_VERTEX_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, Vulkan.VertexBuffer ) ) { + std::cout << "Could not create vertex buffer!" << std::endl; + } + + return true; + } + + bool Tutorial05::CreateStagingBuffer() { + Vulkan.StagingBuffer.Size = 4000; + if( !CreateBuffer( VK_BUFFER_USAGE_TRANSFER_SRC_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT, Vulkan.StagingBuffer ) ) { + std::cout << "Could not staging buffer!" << std::endl; + } + + return true; + } + + bool Tutorial05::CreateBuffer( VkBufferUsageFlags usage, VkMemoryPropertyFlagBits memoryProperty, BufferParameters &buffer ) { + VkBufferCreateInfo buffer_create_info = { + VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, // VkStructureType sType + nullptr, // const void *pNext + 0, // VkBufferCreateFlags flags + buffer.Size, // VkDeviceSize size + usage, // VkBufferUsageFlags usage + VK_SHARING_MODE_EXCLUSIVE, // VkSharingMode sharingMode + 0, // uint32_t queueFamilyIndexCount + nullptr // const uint32_t *pQueueFamilyIndices + }; + + if( vkCreateBuffer( GetDevice(), &buffer_create_info, nullptr, &buffer.Handle ) != VK_SUCCESS ) { + std::cout << "Could not create buffer!" << std::endl; + return false; + } + + if( !AllocateBufferMemory( buffer.Handle, memoryProperty, &buffer.Memory ) ) { + std::cout << "Could not allocate memory for a buffer!" << std::endl; + return false; + } + + if( vkBindBufferMemory( GetDevice(), buffer.Handle, buffer.Memory, 0 ) != VK_SUCCESS ) { + std::cout << "Could not bind memory to a buffer!" << std::endl; + return false; + } + + return true; + } + + bool Tutorial05::AllocateBufferMemory( VkBuffer buffer, VkMemoryPropertyFlagBits property, VkDeviceMemory *memory ) { + VkMemoryRequirements buffer_memory_requirements; + vkGetBufferMemoryRequirements( GetDevice(), Vulkan.VertexBuffer.Handle, &buffer_memory_requirements ); + + VkPhysicalDeviceMemoryProperties memory_properties; + vkGetPhysicalDeviceMemoryProperties( GetPhysicalDevice(), &memory_properties ); + + for( uint32_t i = 0; i < memory_properties.memoryTypeCount; ++i ) { + if( (buffer_memory_requirements.memoryTypeBits & (1 << i)) && + (memory_properties.memoryTypes[i].propertyFlags & property) ) { + + VkMemoryAllocateInfo memory_allocate_info = { + VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, // VkStructureType sType + nullptr, // const void *pNext + buffer_memory_requirements.size, // VkDeviceSize allocationSize + i // uint32_t memoryTypeIndex + }; + + if( vkAllocateMemory( GetDevice(), &memory_allocate_info, nullptr, memory ) == VK_SUCCESS ) { + return true; + } + } + } + return false; + } + + const std::vector& Tutorial05::GetVertexData() const { + static const std::vector vertex_data = { + -0.7f, -0.7f, 0.0f, 1.0f, + 1.0f, 0.0f, 0.0f, 0.0f, + // + -0.7f, 0.7f, 0.0f, 1.0f, + 0.0f, 1.0f, 0.0f, 0.0f, + // + 0.7f, -0.7f, 0.0f, 1.0f, + 0.0f, 0.0f, 1.0f, 0.0f, + // + 0.7f, 0.7f, 0.0f, 1.0f, + 0.3f, 0.3f, 0.3f, 0.0f + }; + + return vertex_data; + } + + bool Tutorial05::CopyVertexData() { + // Prepare data in staging buffer + const std::vector& vertex_data = GetVertexData(); + + void *staging_buffer_memory_pointer; + if( vkMapMemory( GetDevice(), Vulkan.StagingBuffer.Memory, 0, Vulkan.VertexBuffer.Size, 0, &staging_buffer_memory_pointer) != VK_SUCCESS ) { + std::cout << "Could not map memory and upload data to a staging buffer!" << std::endl; + return false; + } + + memcpy( staging_buffer_memory_pointer, &vertex_data[0], Vulkan.VertexBuffer.Size ); + + VkMappedMemoryRange flush_range = { + VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE, // VkStructureType sType + nullptr, // const void *pNext + Vulkan.StagingBuffer.Memory, // VkDeviceMemory memory + 0, // VkDeviceSize offset + Vulkan.VertexBuffer.Size // VkDeviceSize size + }; + vkFlushMappedMemoryRanges( GetDevice(), 1, &flush_range ); + + vkUnmapMemory( GetDevice(), Vulkan.StagingBuffer.Memory ); + + // Prepare command buffer to copy data from staging buffer to a vertex buffer + VkCommandBufferBeginInfo command_buffer_begin_info = { + VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO, // VkStructureType sType + nullptr, // const void *pNext + VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT, // VkCommandBufferUsageFlags flags + nullptr // const VkCommandBufferInheritanceInfo *pInheritanceInfo + }; + + VkCommandBuffer command_buffer = Vulkan.RenderingResources[0].CommandBuffer; + + vkBeginCommandBuffer( command_buffer, &command_buffer_begin_info); + + VkBufferCopy buffer_copy_info = { + 0, // VkDeviceSize srcOffset + 0, // VkDeviceSize dstOffset + Vulkan.VertexBuffer.Size // VkDeviceSize size + }; + vkCmdCopyBuffer(command_buffer, Vulkan.StagingBuffer.Handle, Vulkan.VertexBuffer.Handle, 1, &buffer_copy_info); + + VkBufferMemoryBarrier buffer_memory_barrier = { + VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER, // VkStructureType sType; + nullptr, // const void *pNext + VK_ACCESS_MEMORY_WRITE_BIT, // VkAccessFlags srcAccessMask + VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT, // VkAccessFlags dstAccessMask + VK_QUEUE_FAMILY_IGNORED, // uint32_t srcQueueFamilyIndex + VK_QUEUE_FAMILY_IGNORED, // uint32_t dstQueueFamilyIndex + Vulkan.VertexBuffer.Handle, // VkBuffer buffer + 0, // VkDeviceSize offset + VK_WHOLE_SIZE // VkDeviceSize size + }; + vkCmdPipelineBarrier( command_buffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_VERTEX_INPUT_BIT, 0, 0, nullptr, 1, &buffer_memory_barrier, 0, nullptr ); + + vkEndCommandBuffer( command_buffer ); + + // Submit command buffer and copy data from staging buffer to a vertex buffer + VkSubmitInfo submit_info = { + VK_STRUCTURE_TYPE_SUBMIT_INFO, // VkStructureType sType + nullptr, // const void *pNext + 0, // uint32_t waitSemaphoreCount + nullptr, // const VkSemaphore *pWaitSemaphores + nullptr, // const VkPipelineStageFlags *pWaitDstStageMask; + 1, // uint32_t commandBufferCount + &command_buffer, // const VkCommandBuffer *pCommandBuffers + 0, // uint32_t signalSemaphoreCount + nullptr // const VkSemaphore *pSignalSemaphores + }; + + if( vkQueueSubmit( GetGraphicsQueue().Handle, 1, &submit_info, VK_NULL_HANDLE ) != VK_SUCCESS ) { + return false; + } + + vkDeviceWaitIdle( GetDevice() ); + + return true; + } + + bool Tutorial05::PrepareFrame( VkCommandBuffer command_buffer, const ImageParameters &image_parameters, VkFramebuffer &framebuffer ) { + if( !CreateFramebuffer( framebuffer, image_parameters.ImageView ) ) { + return false; + } + + VkCommandBufferBeginInfo command_buffer_begin_info = { + VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO, // VkStructureType sType + nullptr, // const void *pNext + VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT, // VkCommandBufferUsageFlags flags + nullptr // const VkCommandBufferInheritanceInfo *pInheritanceInfo + }; + + vkBeginCommandBuffer( command_buffer, &command_buffer_begin_info ); + + VkImageSubresourceRange image_subresource_range = { + VK_IMAGE_ASPECT_COLOR_BIT, // VkImageAspectFlags aspectMask + 0, // uint32_t baseMipLevel + 1, // uint32_t levelCount + 0, // uint32_t baseArrayLayer + 1 // uint32_t layerCount + }; + + uint32_t present_queue_family_index = (GetPresentQueue().Handle != GetGraphicsQueue().Handle) ? GetPresentQueue().FamilyIndex : VK_QUEUE_FAMILY_IGNORED; + uint32_t graphics_queue_family_index = (GetPresentQueue().Handle != GetGraphicsQueue().Handle) ? GetGraphicsQueue().FamilyIndex : VK_QUEUE_FAMILY_IGNORED; + VkImageMemoryBarrier barrier_from_present_to_draw = { + VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // VkStructureType sType + nullptr, // const void *pNext + VK_ACCESS_MEMORY_READ_BIT, // VkAccessFlags srcAccessMask + VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, // VkAccessFlags dstAccessMask + VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, // VkImageLayout oldLayout + VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, // VkImageLayout newLayout + present_queue_family_index, // uint32_t srcQueueFamilyIndex + graphics_queue_family_index, // uint32_t dstQueueFamilyIndex + image_parameters.Handle, // VkImage image + image_subresource_range // VkImageSubresourceRange subresourceRange + }; + vkCmdPipelineBarrier( command_buffer, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, 0, 0, nullptr, 0, nullptr, 1, &barrier_from_present_to_draw ); + + VkClearValue clear_value = { + { 1.0f, 0.8f, 0.4f, 0.0f }, // VkClearColorValue color + }; + + VkRenderPassBeginInfo render_pass_begin_info = { + VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO, // VkStructureType sType + nullptr, // const void *pNext + Vulkan.RenderPass, // VkRenderPass renderPass + framebuffer, // VkFramebuffer framebuffer + { // VkRect2D renderArea + { // VkOffset2D offset + 0, // int32_t x + 0 // int32_t y + }, + GetSwapChain().Extent, // VkExtent2D extent; + }, + 1, // uint32_t clearValueCount + &clear_value // const VkClearValue *pClearValues + }; + + vkCmdBeginRenderPass( command_buffer, &render_pass_begin_info, VK_SUBPASS_CONTENTS_INLINE ); + + vkCmdBindPipeline( command_buffer, VK_PIPELINE_BIND_POINT_GRAPHICS, Vulkan.GraphicsPipeline ); + + VkViewport viewport = { + 0.0f, // float x + 0.0f, // float y + static_cast(GetSwapChain().Extent.width), // float width + static_cast(GetSwapChain().Extent.height), // float height + 0.0f, // float minDepth + 1.0f // float maxDepth + }; + + VkRect2D scissor = { + { // VkOffset2D offset + 0, // int32_t x + 0 // int32_t y + }, + { // VkExtent2D extent + GetSwapChain().Extent.width, // uint32_t width + GetSwapChain().Extent.height // uint32_t height + } + }; + + vkCmdSetViewport( command_buffer, 0, 1, &viewport ); + vkCmdSetScissor( command_buffer, 0, 1, &scissor ); + + VkDeviceSize offset = 0; + vkCmdBindVertexBuffers( command_buffer, 0, 1, &Vulkan.VertexBuffer.Handle, &offset ); + + vkCmdDraw( command_buffer, 4, 1, 0, 0 ); + + vkCmdEndRenderPass( command_buffer ); + + VkImageMemoryBarrier barrier_from_draw_to_present = { + VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // VkStructureType sType + nullptr, // const void *pNext + VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, // VkAccessFlags srcAccessMask + VK_ACCESS_MEMORY_READ_BIT, // VkAccessFlags dstAccessMask + VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, // VkImageLayout oldLayout + VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, // VkImageLayout newLayout + graphics_queue_family_index, // uint32_t srcQueueFamilyIndex + present_queue_family_index, // uint32_t dstQueueFamilyIndex + image_parameters.Handle, // VkImage image + image_subresource_range // VkImageSubresourceRange subresourceRange + }; + vkCmdPipelineBarrier( command_buffer, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, 0, 0, nullptr, 0, nullptr, 1, &barrier_from_draw_to_present ); + + if( vkEndCommandBuffer( command_buffer ) != VK_SUCCESS ) { + std::cout << "Could not record command buffer!" << std::endl; + return false; + } + return true; + } + + bool Tutorial05::CreateFramebuffer( VkFramebuffer &framebuffer, VkImageView image_view ) { + if( framebuffer != VK_NULL_HANDLE ) { + vkDestroyFramebuffer( GetDevice(), framebuffer, nullptr ); + } + + VkFramebufferCreateInfo framebuffer_create_info = { + VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO, // VkStructureType sType + nullptr, // const void *pNext + 0, // VkFramebufferCreateFlags flags + Vulkan.RenderPass, // VkRenderPass renderPass + 1, // uint32_t attachmentCount + &image_view, // const VkImageView *pAttachments + GetSwapChain().Extent.width, // uint32_t width + GetSwapChain().Extent.height, // uint32_t height + 1 // uint32_t layers + }; + + if( vkCreateFramebuffer( GetDevice(), &framebuffer_create_info, nullptr, &framebuffer ) != VK_SUCCESS ) { + std::cout << "Could not create a framebuffer!" << std::endl; + return false; + } + + return true; + } + + bool Tutorial05::ChildOnWindowSizeChanged() { + return true; + } + + bool Tutorial05::Draw() { + static size_t resource_index = 0; + RenderingResourcesData ¤t_rendering_resource = Vulkan.RenderingResources[resource_index]; + VkSwapchainKHR swap_chain = GetSwapChain().Handle; + uint32_t image_index; + + resource_index = (resource_index + 1) % VulkanTutorial05Parameters::ResourcesCount; + + if( vkWaitForFences( GetDevice(), 1, ¤t_rendering_resource.Fence, VK_FALSE, 1000000000 ) != VK_SUCCESS ) { + std::cout << "Waiting for fence takes too long!" << std::endl; + return false; + } + vkResetFences( GetDevice(), 1, ¤t_rendering_resource.Fence ); + + VkResult result = vkAcquireNextImageKHR( GetDevice(), swap_chain, UINT64_MAX, current_rendering_resource.ImageAvailableSemaphore, VK_NULL_HANDLE, &image_index ); + switch( result ) { + case VK_SUCCESS: + case VK_SUBOPTIMAL_KHR: + break; + case VK_ERROR_OUT_OF_DATE_KHR: + return OnWindowSizeChanged(); + default: + std::cout << "Problem occurred during swap chain image acquisition!" << std::endl; + return false; + } + + if( !PrepareFrame( current_rendering_resource.CommandBuffer, GetSwapChain( ).Images[image_index], current_rendering_resource.Framebuffer ) ) { + return false; + } + + VkPipelineStageFlags wait_dst_stage_mask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; + VkSubmitInfo submit_info = { + VK_STRUCTURE_TYPE_SUBMIT_INFO, // VkStructureType sType + nullptr, // const void *pNext + 1, // uint32_t waitSemaphoreCount + ¤t_rendering_resource.ImageAvailableSemaphore, // const VkSemaphore *pWaitSemaphores + &wait_dst_stage_mask, // const VkPipelineStageFlags *pWaitDstStageMask; + 1, // uint32_t commandBufferCount + ¤t_rendering_resource.CommandBuffer, // const VkCommandBuffer *pCommandBuffers + 1, // uint32_t signalSemaphoreCount + ¤t_rendering_resource.FinishedRenderingSemaphore // const VkSemaphore *pSignalSemaphores + }; + + if( vkQueueSubmit( GetGraphicsQueue().Handle, 1, &submit_info, current_rendering_resource.Fence ) != VK_SUCCESS ) { + return false; + } + + VkPresentInfoKHR present_info = { + VK_STRUCTURE_TYPE_PRESENT_INFO_KHR, // VkStructureType sType + nullptr, // const void *pNext + 1, // uint32_t waitSemaphoreCount + ¤t_rendering_resource.FinishedRenderingSemaphore, // const VkSemaphore *pWaitSemaphores + 1, // uint32_t swapchainCount + &swap_chain, // const VkSwapchainKHR *pSwapchains + &image_index, // const uint32_t *pImageIndices + nullptr // VkResult *pResults + }; + result = vkQueuePresentKHR( GetPresentQueue().Handle, &present_info ); + + switch( result ) { + case VK_SUCCESS: + break; + case VK_ERROR_OUT_OF_DATE_KHR: + case VK_SUBOPTIMAL_KHR: + return OnWindowSizeChanged(); + default: + std::cout << "Problem occurred during image presentation!" << std::endl; + return false; + } + + return true; + } + + void Tutorial05::ChildClear() { + } + + Tutorial05::~Tutorial05() { + if( GetDevice() != VK_NULL_HANDLE ) { + vkDeviceWaitIdle( GetDevice() ); + + for( size_t i = 0; i < Vulkan.RenderingResources.size(); ++i ) { + if( Vulkan.RenderingResources[i].Framebuffer != VK_NULL_HANDLE ) { + vkDestroyFramebuffer( GetDevice(), Vulkan.RenderingResources[i].Framebuffer, nullptr ); + } + if( Vulkan.RenderingResources[i].CommandBuffer != VK_NULL_HANDLE ) { + vkFreeCommandBuffers( GetDevice(), Vulkan.CommandPool, 1, &Vulkan.RenderingResources[i].CommandBuffer ); + } + if( Vulkan.RenderingResources[i].ImageAvailableSemaphore != VK_NULL_HANDLE ) { + vkDestroySemaphore( GetDevice(), Vulkan.RenderingResources[i].ImageAvailableSemaphore, nullptr ); + } + if( Vulkan.RenderingResources[i].FinishedRenderingSemaphore != VK_NULL_HANDLE ) { + vkDestroySemaphore( GetDevice(), Vulkan.RenderingResources[i].FinishedRenderingSemaphore, nullptr ); + } + if( Vulkan.RenderingResources[i].Fence != VK_NULL_HANDLE ) { + vkDestroyFence( GetDevice(), Vulkan.RenderingResources[i].Fence, nullptr ); + } + } + + if( Vulkan.CommandPool != VK_NULL_HANDLE ) { + vkDestroyCommandPool( GetDevice(), Vulkan.CommandPool, nullptr ); + Vulkan.CommandPool = VK_NULL_HANDLE; + } + + DestroyBuffer( Vulkan.VertexBuffer ); + + DestroyBuffer( Vulkan.StagingBuffer ); + + if( Vulkan.GraphicsPipeline != VK_NULL_HANDLE ) { + vkDestroyPipeline( GetDevice(), Vulkan.GraphicsPipeline, nullptr ); + Vulkan.GraphicsPipeline = VK_NULL_HANDLE; + } + + if( Vulkan.RenderPass != VK_NULL_HANDLE ) { + vkDestroyRenderPass( GetDevice(), Vulkan.RenderPass, nullptr ); + Vulkan.RenderPass = VK_NULL_HANDLE; + } + } + } + + void Tutorial05::DestroyBuffer( BufferParameters& buffer ) { + if( buffer.Handle != VK_NULL_HANDLE ) { + vkDestroyBuffer( GetDevice(), buffer.Handle, nullptr ); + buffer.Handle = VK_NULL_HANDLE; + } + + if( buffer.Memory != VK_NULL_HANDLE ) { + vkFreeMemory( GetDevice(), buffer.Memory, nullptr ); + buffer.Memory = VK_NULL_HANDLE; + } + } + +} // namespace ApiWithoutSecrets \ No newline at end of file diff --git a/Project/Tutorial05/Tutorial05.h b/Project/Tutorial05/Tutorial05.h new file mode 100644 index 0000000..67cb8e7 --- /dev/null +++ b/Project/Tutorial05/Tutorial05.h @@ -0,0 +1,133 @@ +// Copyright 2016 Intel Corporation All Rights Reserved +// +// Intel makes no representations about the suitability of this software for any purpose. +// THIS SOFTWARE IS PROVIDED ""AS IS."" INTEL SPECIFICALLY DISCLAIMS ALL WARRANTIES, +// EXPRESS OR IMPLIED, AND ALL LIABILITY, INCLUDING CONSEQUENTIAL AND OTHER INDIRECT DAMAGES, +// FOR THE USE OF THIS SOFTWARE, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PROPRIETARY +// RIGHTS, AND INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +// Intel does not assume any responsibility for any errors which may appear in this software +// nor any responsibility to update it. + +#if !defined(TUTORIAL_05_HEADER) +#define TUTORIAL_05_HEADER + +#include "VulkanCommon.h" +#include "Tools.h" + +namespace ApiWithoutSecrets { + + // ************************************************************ // + // BufferParameters // + // // + // Vulkan Buffer's parameters container class // + // ************************************************************ // + struct BufferParameters { + VkBuffer Handle; + VkDeviceMemory Memory; + uint32_t Size; + + BufferParameters() : + Handle( VK_NULL_HANDLE ), + Memory( VK_NULL_HANDLE ), + Size( 0 ) { + } + }; + + // ************************************************************ // + // VertexData // + // // + // Struct describing data type and format of vertex attributes // + // ************************************************************ // + struct VertexData { + float x, y, z, w; + float r, g, b, a; + }; + + // ************************************************************ // + // RenderingResourcesData // + // // + // Struct containing data used during rendering process // + // ************************************************************ // + struct RenderingResourcesData { + VkFramebuffer Framebuffer; + VkCommandBuffer CommandBuffer; + VkSemaphore ImageAvailableSemaphore; + VkSemaphore FinishedRenderingSemaphore; + VkFence Fence; + + RenderingResourcesData() : + Framebuffer( VK_NULL_HANDLE ), + CommandBuffer( VK_NULL_HANDLE ), + ImageAvailableSemaphore( VK_NULL_HANDLE ), + FinishedRenderingSemaphore( VK_NULL_HANDLE ), + Fence( VK_NULL_HANDLE ) { + } + }; + + // ************************************************************ // + // VulkanTutorial04Parameters // + // // + // Vulkan specific parameters // + // ************************************************************ // + struct VulkanTutorial05Parameters { + VkRenderPass RenderPass; + VkPipeline GraphicsPipeline; + BufferParameters VertexBuffer; + BufferParameters StagingBuffer; + VkCommandPool CommandPool; + std::vector RenderingResources; + + static const size_t ResourcesCount = 3; + + VulkanTutorial05Parameters() : + RenderPass( VK_NULL_HANDLE ), + GraphicsPipeline( VK_NULL_HANDLE ), + VertexBuffer(), + CommandPool( VK_NULL_HANDLE ), + RenderingResources( ResourcesCount ) { + } + }; + + // ************************************************************ // + // Tutorial04 // + // // + // Class for presenting Vulkan usage topics // + // ************************************************************ // + class Tutorial05 : public VulkanCommon { + public: + Tutorial05(); + ~Tutorial05(); + + bool CreateRenderPass(); + bool CreatePipeline(); + bool CreateRenderingResources(); + bool CreateVertexBuffer(); + bool CreateStagingBuffer(); + bool CopyVertexData(); + + bool Draw() override; + + private: + VulkanTutorial05Parameters Vulkan; + + Tools::AutoDeleter CreateShaderModule( const char* filename ); + Tools::AutoDeleter CreatePipelineLayout(); + bool CreateCommandPool( uint32_t queue_family_index, VkCommandPool *pool ); + bool AllocateCommandBuffers( VkCommandPool pool, uint32_t count, VkCommandBuffer *command_buffers ); + bool CreateCommandBuffers(); + bool CreateSemaphores(); + bool CreateFences(); + bool CreateBuffer( VkBufferUsageFlags usage, VkMemoryPropertyFlagBits memoryProperty, BufferParameters &buffer ); + bool AllocateBufferMemory( VkBuffer buffer, VkMemoryPropertyFlagBits property, VkDeviceMemory *memory ); + const std::vector& GetVertexData() const; + bool PrepareFrame( VkCommandBuffer command_buffer, const ImageParameters &image_parameters, VkFramebuffer &framebuffer ); + bool CreateFramebuffer( VkFramebuffer &framebuffer, VkImageView image_view ); + void DestroyBuffer( BufferParameters& buffer ); + + void ChildClear() override; + bool ChildOnWindowSizeChanged() override; + }; + +} // namespace ApiWithoutSecrets + +#endif // TUTORIAL_03_HEADER \ No newline at end of file diff --git a/Project/Tutorial05/main.cpp b/Project/Tutorial05/main.cpp new file mode 100644 index 0000000..bb6294e --- /dev/null +++ b/Project/Tutorial05/main.cpp @@ -0,0 +1,53 @@ +// Copyright 2016 Intel Corporation All Rights Reserved +// +// Intel makes no representations about the suitability of this software for any purpose. +// THIS SOFTWARE IS PROVIDED ""AS IS."" INTEL SPECIFICALLY DISCLAIMS ALL WARRANTIES, +// EXPRESS OR IMPLIED, AND ALL LIABILITY, INCLUDING CONSEQUENTIAL AND OTHER INDIRECT DAMAGES, +// FOR THE USE OF THIS SOFTWARE, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PROPRIETARY +// RIGHTS, AND INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +// Intel does not assume any responsibility for any errors which may appear in this software +// nor any responsibility to update it. + +#include "Tutorial05.h" + +int main( int argc, char **argv ) { + ApiWithoutSecrets::OS::Window window; + ApiWithoutSecrets::Tutorial05 tutorial05; + + // Window creation + if( !window.Create( "05 - Staging Resources" ) ) { + return -1; + } + + // Vulkan preparations and initialization + if( !tutorial05.PrepareVulkan( window.GetParameters() ) ) { + return -1; + } + + // Tutorial 04 + if( !tutorial05.CreateRenderPass() ) { + return -1; + } + if( !tutorial05.CreatePipeline() ) { + return -1; + } + if( !tutorial05.CreateRenderingResources() ) { + return -1; + } + if( !tutorial05.CreateVertexBuffer() ) { + return -1; + } + if( !tutorial05.CreateStagingBuffer() ) { + return -1; + } + if( !tutorial05.CopyVertexData() ) { + return -1; + } + + // Rendering loop + if( !window.RenderingLoop( tutorial05 ) ) { + return -1; + } + + return 0; +} diff --git a/README.md b/README.md index acf4d8c..549ae89 100644 --- a/README.md +++ b/README.md @@ -49,3 +49,12 @@ Here I present render pass, framebuffer and pipeline objects which are necessary #### Buffers, images and fences This tutorial shows how to set up vertex attributes and bind buffer with vertex data. Here we also create images, memory objects and fences. + +


+ +### [05 - Staging Resources](./Project/Tutorial05/) + + +#### Copying data between buffers + +In this example staging resources are presented. They are used as an intermediate resources for copying data between CPU and GPU. This way, resources involved in rendering can be bound only to a device local (very fast) memory. \ No newline at end of file