Changes in vulkan-game.cpp [d22ae72:58b95b3] in opengl-game


Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • vulkan-game.cpp

    rd22ae72 r58b95b3  
    112112
    113113struct GraphicsPipelineInfo {
    114    VkPipelineLayout pipelineLayout;
    115114   VkPipeline pipeline;
    116 
    117    VkDescriptorPool descriptorPool;
    118    VkDescriptorSetLayout descriptorSetLayout;
    119    vector<VkDescriptorSet> descriptorSets;
    120115
    121116   VkBuffer vertexBuffer;
     
    192187
    193188      VkRenderPass renderPass;
     189      VkDescriptorSetLayout descriptorSetLayout;
     190      VkPipelineLayout pipelineLayout;
     191      VkDescriptorPool descriptorPool;
     192      vector<VkDescriptorSet> descriptorSets;
     193
    194194      VkCommandPool commandPool;
    195195
     
    313313         createImageViews();
    314314         createRenderPass();
    315 
    316          createDescriptorSetLayout(scenePipeline);
    317          createGraphicsPipeline("shaders/vert.spv", "shaders/frag.spv", scenePipeline);
    318 
    319          createDescriptorSetLayout(overlayPipeline);
    320          createGraphicsPipeline("shaders/vert.spv", "shaders/frag.spv", overlayPipeline);
    321 
     315         createDescriptorSetLayout();
     316         createGraphicsPipeline("shaders/vert.spv", "shaders/frag.spv", &scenePipeline.pipeline);
     317         createGraphicsPipeline("shaders/vert.spv", "shaders/frag.spv", &overlayPipeline.pipeline);
    322318         createCommandPool();
    323319         createDepthResources();
     
    362358
    363359         createUniformBuffers();
    364 
    365          createDescriptorPool(scenePipeline);
    366          createDescriptorSets(scenePipeline);
    367 
    368          createDescriptorPool(overlayPipeline);
    369          createDescriptorSets(overlayPipeline);
    370 
     360         createDescriptorPool();
     361         createDescriptorSets();
    371362         createCommandBuffers();
    372363         createSyncObjects();
     
    775766      }
    776767
    777       void createDescriptorSetLayout(GraphicsPipelineInfo& info) {
     768      void createDescriptorSetLayout() {
    778769         VkDescriptorSetLayoutBinding uboLayoutBinding = {};
    779770         uboLayoutBinding.binding = 0;
     
    803794         layoutInfo.pBindings = bindings.data();
    804795
    805          if (vkCreateDescriptorSetLayout(device, &layoutInfo, nullptr, &info.descriptorSetLayout) != VK_SUCCESS) {
     796         if (vkCreateDescriptorSetLayout(device, &layoutInfo, nullptr, &descriptorSetLayout) != VK_SUCCESS) {
    806797            throw runtime_error("failed to create descriptor set layout!");
    807798         }
    808799      }
    809800
    810       void createGraphicsPipeline(string vertShaderFile, string fragShaderFile, GraphicsPipelineInfo& info) {
     801      void createGraphicsPipeline(string vertShaderFile, string fragShaderFile, VkPipeline* pipeline) {
    811802         auto vertShaderCode = readFile(vertShaderFile);
    812803         auto fragShaderCode = readFile(fragShaderFile);
     
    915906         pipelineLayoutInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO;
    916907         pipelineLayoutInfo.setLayoutCount = 1;
    917          pipelineLayoutInfo.pSetLayouts = &info.descriptorSetLayout;
     908         pipelineLayoutInfo.pSetLayouts = &descriptorSetLayout;
    918909         pipelineLayoutInfo.pushConstantRangeCount = 0;
    919910
    920          if (vkCreatePipelineLayout(device, &pipelineLayoutInfo, nullptr, &info.pipelineLayout) != VK_SUCCESS) {
     911         if (vkCreatePipelineLayout(device, &pipelineLayoutInfo, nullptr, &pipelineLayout) != VK_SUCCESS) {
    921912            throw runtime_error("failed to create pipeline layout!");
    922913         }
     
    934925         pipelineInfo.pColorBlendState = &colorBlending;
    935926         pipelineInfo.pDynamicState = nullptr;
    936          pipelineInfo.layout = info.pipelineLayout;
     927         pipelineInfo.layout = pipelineLayout;
    937928         pipelineInfo.renderPass = renderPass;
    938929         pipelineInfo.subpass = 0;
     
    940931         pipelineInfo.basePipelineIndex = -1;
    941932
    942          if (vkCreateGraphicsPipelines(device, VK_NULL_HANDLE, 1, &pipelineInfo, nullptr, &info.pipeline) != VK_SUCCESS) {
     933         if (vkCreateGraphicsPipelines(device, VK_NULL_HANDLE, 1, &pipelineInfo, nullptr, pipeline) != VK_SUCCESS) {
    943934            throw runtime_error("failed to create graphics pipeline!");
    944935         }
     
    14961487      }
    14971488
    1498       void createDescriptorPool(GraphicsPipelineInfo& info) {
     1489      void createDescriptorPool() {
    14991490         array<VkDescriptorPoolSize, 3> poolSizes = {};
    15001491         poolSizes[0].type = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
     
    15111502         poolInfo.maxSets = static_cast<uint32_t>(swapChainImages.size());
    15121503
    1513          if (vkCreateDescriptorPool(device, &poolInfo, nullptr, &info.descriptorPool) != VK_SUCCESS) {
     1504         if (vkCreateDescriptorPool(device, &poolInfo, nullptr, &descriptorPool) != VK_SUCCESS) {
    15141505            throw runtime_error("failed to create descriptor pool!");
    15151506         }
    15161507      }
    15171508
    1518       void createDescriptorSets(GraphicsPipelineInfo& info) {
    1519          vector<VkDescriptorSetLayout> layouts(swapChainImages.size(), info.descriptorSetLayout);
     1509      void createDescriptorSets() {
     1510         vector<VkDescriptorSetLayout> layouts(swapChainImages.size(), descriptorSetLayout);
    15201511
    15211512         VkDescriptorSetAllocateInfo allocInfo = {};
    15221513         allocInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO;
    1523          allocInfo.descriptorPool = info.descriptorPool;
     1514         allocInfo.descriptorPool = descriptorPool;
    15241515         allocInfo.descriptorSetCount = static_cast<uint32_t>(swapChainImages.size());
    15251516         allocInfo.pSetLayouts = layouts.data();
    15261517
    1527          info.descriptorSets.resize(swapChainImages.size());
    1528          if (vkAllocateDescriptorSets(device, &allocInfo, info.descriptorSets.data()) != VK_SUCCESS) {
     1518         descriptorSets.resize(swapChainImages.size());
     1519         if (vkAllocateDescriptorSets(device, &allocInfo, descriptorSets.data()) != VK_SUCCESS) {
    15291520            throw runtime_error("failed to allocate descriptor sets!");
    15301521         }
     
    15491540
    15501541            descriptorWrites[0].sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
    1551             descriptorWrites[0].dstSet = info.descriptorSets[i];
     1542            descriptorWrites[0].dstSet = descriptorSets[i];
    15521543            descriptorWrites[0].dstBinding = 0;
    15531544            descriptorWrites[0].dstArrayElement = 0;
     
    15591550
    15601551            descriptorWrites[1].sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
    1561             descriptorWrites[1].dstSet = info.descriptorSets[i];
     1552            descriptorWrites[1].dstSet = descriptorSets[i];
    15621553            descriptorWrites[1].dstBinding = 1;
    15631554            descriptorWrites[1].dstArrayElement = 0;
     
    15691560
    15701561            descriptorWrites[2].sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
    1571             descriptorWrites[2].dstSet = info.descriptorSets[i];
     1562            descriptorWrites[2].dstSet = descriptorSets[i];
    15721563            descriptorWrites[2].dstBinding = 2;
    15731564            descriptorWrites[2].dstArrayElement = 0;
     
    16211612            vkCmdBeginRenderPass(commandBuffers[i], &renderPassInfo, VK_SUBPASS_CONTENTS_INLINE);
    16221613
    1623             createGraphicsPipelineCommands(scenePipeline, i);
    1624             createGraphicsPipelineCommands(overlayPipeline, i);
     1614            vkCmdBindPipeline(commandBuffers[i], VK_PIPELINE_BIND_POINT_GRAPHICS, scenePipeline.pipeline);
     1615
     1616            vkCmdBindDescriptorSets(commandBuffers[i], VK_PIPELINE_BIND_POINT_GRAPHICS, pipelineLayout, 0, 1, &descriptorSets[i], 0, nullptr);
     1617
     1618            VkDeviceSize offsets[] = { 0 };
     1619
     1620            VkBuffer vertexBuffers[] = { scenePipeline.vertexBuffer };
     1621            vkCmdBindVertexBuffers(commandBuffers[i], 0, 1, vertexBuffers, offsets);
     1622
     1623            vkCmdBindIndexBuffer(commandBuffers[i], scenePipeline.indexBuffer, 0, VK_INDEX_TYPE_UINT16);
     1624
     1625            vkCmdDrawIndexed(commandBuffers[i], static_cast<uint32_t>(scenePipeline.numIndices), 1, 0, 0, 0);
     1626
     1627            vkCmdBindPipeline(commandBuffers[i], VK_PIPELINE_BIND_POINT_GRAPHICS, overlayPipeline.pipeline);
     1628
     1629            VkBuffer vertexBuffersOverlay[] = { overlayPipeline.vertexBuffer };
     1630            vkCmdBindVertexBuffers(commandBuffers[i], 0, 1, vertexBuffersOverlay, offsets);
     1631
     1632            vkCmdBindIndexBuffer(commandBuffers[i], overlayPipeline.indexBuffer, 0, VK_INDEX_TYPE_UINT16);
     1633
     1634            vkCmdDrawIndexed(commandBuffers[i], static_cast<uint32_t>(overlayPipeline.numIndices), 1, 0, 0, 0);
    16251635
    16261636            vkCmdEndRenderPass(commandBuffers[i]);
     
    16301640            }
    16311641         }
    1632       }
    1633 
    1634       void createGraphicsPipelineCommands(GraphicsPipelineInfo& info, size_t imageIdx) {
    1635          vkCmdBindPipeline(commandBuffers[imageIdx], VK_PIPELINE_BIND_POINT_GRAPHICS, info.pipeline);
    1636          vkCmdBindDescriptorSets(commandBuffers[imageIdx], VK_PIPELINE_BIND_POINT_GRAPHICS, info.pipelineLayout, 0, 1,
    1637             &info.descriptorSets[imageIdx], 0, nullptr);
    1638 
    1639          VkBuffer vertexBuffers[] = { info.vertexBuffer };
    1640          VkDeviceSize offsets[] = { 0 };
    1641          vkCmdBindVertexBuffers(commandBuffers[imageIdx], 0, 1, vertexBuffers, offsets);
    1642 
    1643          vkCmdBindIndexBuffer(commandBuffers[imageIdx], info.indexBuffer, 0, VK_INDEX_TYPE_UINT16);
    1644 
    1645          vkCmdDrawIndexed(commandBuffers[imageIdx], static_cast<uint32_t>(info.numIndices), 1, 0, 0, 0);
    16461642      }
    16471643
     
    18291825         createImageViews();
    18301826         createRenderPass();
    1831 
    1832          createGraphicsPipeline("shaders/vert.spv", "shaders/frag.spv", scenePipeline);
    1833          createGraphicsPipeline("shaders/vert.spv", "shaders/frag.spv", overlayPipeline);
    1834 
     1827         createGraphicsPipeline("shaders/vert.spv", "shaders/frag.spv", &scenePipeline.pipeline);
     1828         createGraphicsPipeline("shaders/vert.spv", "shaders/frag.spv", &overlayPipeline.pipeline);
    18351829         createDepthResources();
    18361830         createFramebuffers();
    18371831         createUniformBuffers();
    1838 
    1839          createDescriptorPool(scenePipeline);
    1840          createDescriptorSets(scenePipeline);
    1841 
    1842          createDescriptorPool(overlayPipeline);
    1843          createDescriptorSets(overlayPipeline);
    1844 
     1832         createDescriptorPool();
     1833         createDescriptorSets();
    18451834         createCommandBuffers();
    18461835      }
     
    18631852         vkFreeMemory(device, sdlOverlayImageMemory, nullptr);
    18641853
    1865          cleanupPipelineBuffers(scenePipeline);
    1866          cleanupPipelineBuffers(overlayPipeline);
     1854         vkDestroyDescriptorSetLayout(device, descriptorSetLayout, nullptr);
     1855
     1856         vkDestroyBuffer(device, scenePipeline.vertexBuffer, nullptr);
     1857         vkFreeMemory(device, scenePipeline.vertexBufferMemory, nullptr);
     1858         vkDestroyBuffer(device, scenePipeline.indexBuffer, nullptr);
     1859         vkFreeMemory(device, scenePipeline.indexBufferMemory, nullptr);
     1860
     1861         vkDestroyBuffer(device, overlayPipeline.vertexBuffer, nullptr);
     1862         vkFreeMemory(device, overlayPipeline.vertexBufferMemory, nullptr);
     1863         vkDestroyBuffer(device, overlayPipeline.indexBuffer, nullptr);
     1864         vkFreeMemory(device, overlayPipeline.indexBufferMemory, nullptr);
    18671865
    18681866         for (size_t i = 0; i < MAX_FRAMES_IN_FLIGHT; i++) {
     
    19231921         vkFreeCommandBuffers(device, commandPool, static_cast<uint32_t>(commandBuffers.size()), commandBuffers.data());
    19241922
    1925          cleanupPipeline(scenePipeline);
    1926          cleanupPipeline(overlayPipeline);
    1927 
     1923         vkDestroyPipeline(device, scenePipeline.pipeline, nullptr);
     1924         vkDestroyPipeline(device, overlayPipeline.pipeline, nullptr);
     1925
     1926         vkDestroyPipelineLayout(device, pipelineLayout, nullptr);
    19281927         vkDestroyRenderPass(device, renderPass, nullptr);
    19291928
     
    19381937            vkFreeMemory(device, uniformBuffersMemory[i], nullptr);
    19391938         }
    1940       }
    1941 
    1942       void cleanupPipeline(GraphicsPipelineInfo& pipeline) {
    1943          vkDestroyPipeline(device, pipeline.pipeline, nullptr);
    1944          vkDestroyDescriptorPool(device, pipeline.descriptorPool, nullptr);
    1945          vkDestroyPipelineLayout(device, pipeline.pipelineLayout, nullptr);
    1946       }
    1947 
    1948       void cleanupPipelineBuffers(GraphicsPipelineInfo& pipeline) {
    1949          vkDestroyDescriptorSetLayout(device, pipeline.descriptorSetLayout, nullptr);
    1950 
    1951          vkDestroyBuffer(device, pipeline.vertexBuffer, nullptr);
    1952          vkFreeMemory(device, pipeline.vertexBufferMemory, nullptr);
    1953          vkDestroyBuffer(device, pipeline.indexBuffer, nullptr);
    1954          vkFreeMemory(device, pipeline.indexBufferMemory, nullptr);
     1939
     1940         vkDestroyDescriptorPool(device, descriptorPool, nullptr);
    19551941      }
    19561942
Note: See TracChangeset for help on using the changeset viewer.