Changeset c163d81 in opengl-game for vulkan-game.cpp


Ignore:
Timestamp:
May 19, 2021, 7:16:37 PM (3 years ago)
Author:
Dmitry Portnoy <dportnoy@…>
Branches:
feature/imgui-sdl
Children:
58453c3
Parents:
1abebc1
git-author:
Dmitry Portnoy <dportnoy@…> (05/19/21 19:16:33)
git-committer:
Dmitry Portnoy <dportnoy@…> (05/19/21 19:16:37)
Message:

Use BufferSet objects to store data related to uniform and storage
buffers, and change createBufferSet() to take a BufferSet objects
instead of lists of buffers, memory, and descriptor info.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • vulkan-game.cpp

    r1abebc1 rc163d81  
    135135   createBufferSet(sizeof(UBO_VP_mats),
    136136      VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
    137       uniformBuffers_modelPipeline, uniformBuffersMemory_modelPipeline, uniformBufferInfoList_modelPipeline);
     137      uniformBuffers_modelPipeline);
    138138
    139139   modelPipeline.addDescriptorInfo(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
    140       VK_SHADER_STAGE_VERTEX_BIT, &uniformBufferInfoList_modelPipeline);
     140      VK_SHADER_STAGE_VERTEX_BIT, &uniformBuffers_modelPipeline.infoSet);
    141141   modelPipeline.addDescriptorInfo(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
    142142      VK_SHADER_STAGE_VERTEX_BIT, &storageBuffers_modelPipeline.infoSet);
     
    206206   createBufferSet(sizeof(UBO_VP_mats),
    207207      VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
    208       uniformBuffers_shipPipeline, uniformBuffersMemory_shipPipeline, uniformBufferInfoList_shipPipeline);
     208      uniformBuffers_shipPipeline);
    209209
    210210   shipPipeline.addDescriptorInfo(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
    211       VK_SHADER_STAGE_VERTEX_BIT, &uniformBufferInfoList_shipPipeline);
     211      VK_SHADER_STAGE_VERTEX_BIT, &uniformBuffers_shipPipeline.infoSet);
    212212   shipPipeline.addDescriptorInfo(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
    213213      VK_SHADER_STAGE_VERTEX_BIT, &storageBuffers_shipPipeline.infoSet);
     
    469469   createBufferSet(sizeof(UBO_VP_mats),
    470470      VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
    471       uniformBuffers_asteroidPipeline, uniformBuffersMemory_asteroidPipeline, uniformBufferInfoList_asteroidPipeline);
     471      uniformBuffers_asteroidPipeline);
    472472
    473473   asteroidPipeline.addDescriptorInfo(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
    474       VK_SHADER_STAGE_VERTEX_BIT, &uniformBufferInfoList_asteroidPipeline);
     474      VK_SHADER_STAGE_VERTEX_BIT, &uniformBuffers_asteroidPipeline.infoSet);
    475475   asteroidPipeline.addDescriptorInfo(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
    476476      VK_SHADER_STAGE_VERTEX_BIT, &storageBuffers_asteroidPipeline.infoSet);
     
    487487   createBufferSet(sizeof(UBO_VP_mats),
    488488      VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
    489       uniformBuffers_laserPipeline, uniformBuffersMemory_laserPipeline, uniformBufferInfoList_laserPipeline);
     489      uniformBuffers_laserPipeline);
    490490
    491491   laserPipeline.addDescriptorInfo(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
    492       VK_SHADER_STAGE_VERTEX_BIT, &uniformBufferInfoList_laserPipeline);
     492      VK_SHADER_STAGE_VERTEX_BIT, &uniformBuffers_laserPipeline.infoSet);
    493493   laserPipeline.addDescriptorInfo(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
    494494      VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT, &storageBuffers_laserPipeline.infoSet);
     
    507507   createBufferSet(sizeof(UBO_Explosion),
    508508      VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
    509       uniformBuffers_explosionPipeline, uniformBuffersMemory_explosionPipeline, uniformBufferInfoList_explosionPipeline);
     509      uniformBuffers_explosionPipeline);
    510510
    511511   explosionPipeline.addDescriptorInfo(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
    512       VK_SHADER_STAGE_VERTEX_BIT, &uniformBufferInfoList_explosionPipeline);
     512      VK_SHADER_STAGE_VERTEX_BIT, &uniformBuffers_explosionPipeline.infoSet);
    513513   explosionPipeline.addDescriptorInfo(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
    514514      VK_SHADER_STAGE_VERTEX_BIT, &storageBuffers_explosionPipeline.infoSet);
     
    624624      VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
    625625      VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
    626       storageBuffers_modelPipeline.buffers, storageBuffers_modelPipeline.memory,
    627       storageBuffers_modelPipeline.infoSet);
     626      storageBuffers_modelPipeline);
    628627
    629628   shipPipeline = GraphicsPipeline_Vulkan<ModelVertex>(
     
    634633      VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
    635634      VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
    636       storageBuffers_shipPipeline.buffers, storageBuffers_shipPipeline.memory,
    637       storageBuffers_shipPipeline.infoSet);
     635      storageBuffers_shipPipeline);
    638636
    639637   asteroidPipeline = GraphicsPipeline_Vulkan<ModelVertex>(
     
    644642      VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
    645643      VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
    646       storageBuffers_asteroidPipeline.buffers, storageBuffers_asteroidPipeline.memory,
    647       storageBuffers_asteroidPipeline.infoSet);
     644      storageBuffers_asteroidPipeline);
    648645
    649646   laserPipeline = GraphicsPipeline_Vulkan<LaserVertex>(
     
    654651      VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
    655652      VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
    656       storageBuffers_laserPipeline.buffers, storageBuffers_laserPipeline.memory,
    657       storageBuffers_laserPipeline.infoSet);
     653      storageBuffers_laserPipeline);
    658654
    659655   explosionPipeline = GraphicsPipeline_Vulkan<ExplosionVertex>(
     
    665661      VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
    666662      VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
    667       storageBuffers_explosionPipeline.buffers, storageBuffers_explosionPipeline.memory,
    668       storageBuffers_explosionPipeline.infoSet);
     663      storageBuffers_explosionPipeline);
    669664}
    670665
     
    11661161   explosion_UBO.cur_time = curTime;
    11671162
    1168    VulkanUtils::copyDataToMemory(device, object_VP_mats, uniformBuffersMemory_modelPipeline[imageIndex], 0);
    1169 
    1170    VulkanUtils::copyDataToMemory(device, ship_VP_mats, uniformBuffersMemory_shipPipeline[imageIndex], 0);
    1171 
    1172    VulkanUtils::copyDataToMemory(device, asteroid_VP_mats, uniformBuffersMemory_asteroidPipeline[imageIndex], 0);
    1173 
    1174    VulkanUtils::copyDataToMemory(device, laser_VP_mats, uniformBuffersMemory_laserPipeline[imageIndex], 0);
    1175 
    1176    VulkanUtils::copyDataToMemory(device, explosion_UBO, uniformBuffersMemory_explosionPipeline[imageIndex], 0);
     1163   VulkanUtils::copyDataToMemory(device, object_VP_mats, uniformBuffers_modelPipeline.memory[imageIndex], 0);
     1164
     1165   VulkanUtils::copyDataToMemory(device, ship_VP_mats, uniformBuffers_shipPipeline.memory[imageIndex], 0);
     1166
     1167   VulkanUtils::copyDataToMemory(device, asteroid_VP_mats, uniformBuffers_asteroidPipeline.memory[imageIndex], 0);
     1168
     1169   VulkanUtils::copyDataToMemory(device, laser_VP_mats, uniformBuffers_laserPipeline.memory[imageIndex], 0);
     1170
     1171   VulkanUtils::copyDataToMemory(device, explosion_UBO, uniformBuffers_explosionPipeline.memory[imageIndex], 0);
    11771172}
    11781173
     
    19431938
    19441939void VulkanGame::createBufferSet(VkDeviceSize bufferSize, VkBufferUsageFlags flags, VkMemoryPropertyFlags properties,
    1945                                  vector<VkBuffer>& buffers, vector<VkDeviceMemory>& buffersMemory,
    1946                                  vector<VkDescriptorBufferInfo>& bufferInfoList) {
    1947    buffers.resize(swapChainImageCount);
    1948    buffersMemory.resize(swapChainImageCount);
    1949    bufferInfoList.resize(swapChainImageCount);
     1940                                 BufferSet& set) {
     1941   set.buffers.resize(swapChainImageCount);
     1942   set.memory.resize(swapChainImageCount);
     1943   set.infoSet.resize(swapChainImageCount);
    19501944
    19511945   for (size_t i = 0; i < swapChainImageCount; i++) {
    1952       VulkanUtils::createBuffer(device, physicalDevice, bufferSize, flags, properties, buffers[i], buffersMemory[i]);
    1953 
    1954       bufferInfoList[i].buffer = buffers[i];
    1955       bufferInfoList[i].offset = 0; // This is the offset from the start of the buffer, so always 0 for now
    1956       bufferInfoList[i].range = bufferSize; // Size of the update starting from offset, or VK_WHOLE_SIZE
     1946      VulkanUtils::createBuffer(device, physicalDevice, bufferSize, flags, properties, set.buffers[i], set.memory[i]);
     1947
     1948      set.infoSet[i].buffer = set.buffers[i];
     1949      set.infoSet[i].offset = 0; // This is the offset from the start of the buffer, so always 0 for now
     1950      set.infoSet[i].range = bufferSize; // Size of the update starting from offset, or VK_WHOLE_SIZE
    19571951   }
    19581952}
     
    22282222   createBufferSet(sizeof(UBO_VP_mats),
    22292223      VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
    2230       uniformBuffers_modelPipeline, uniformBuffersMemory_modelPipeline, uniformBufferInfoList_modelPipeline);
     2224      uniformBuffers_modelPipeline);
    22312225
    22322226   modelPipeline.updateRenderPass(renderPass);
     
    22372231   createBufferSet(sizeof(UBO_VP_mats),
    22382232      VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
    2239       uniformBuffers_shipPipeline, uniformBuffersMemory_shipPipeline, uniformBufferInfoList_shipPipeline);
     2233      uniformBuffers_shipPipeline);
    22402234
    22412235   shipPipeline.updateRenderPass(renderPass);
     
    22462240   createBufferSet(sizeof(UBO_VP_mats),
    22472241      VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
    2248       uniformBuffers_asteroidPipeline, uniformBuffersMemory_asteroidPipeline, uniformBufferInfoList_asteroidPipeline);
     2242      uniformBuffers_asteroidPipeline);
    22492243
    22502244   asteroidPipeline.updateRenderPass(renderPass);
     
    22552249   createBufferSet(sizeof(UBO_VP_mats),
    22562250      VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
    2257       uniformBuffers_laserPipeline, uniformBuffersMemory_laserPipeline, uniformBufferInfoList_laserPipeline);
     2251      uniformBuffers_laserPipeline);
    22582252
    22592253   laserPipeline.updateRenderPass(renderPass);
     
    22642258   createBufferSet(sizeof(UBO_Explosion),
    22652259      VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
    2266       uniformBuffers_explosionPipeline, uniformBuffersMemory_explosionPipeline, uniformBufferInfoList_explosionPipeline);
     2260      uniformBuffers_explosionPipeline);
    22672261
    22682262   explosionPipeline.updateRenderPass(renderPass);
     
    22922286   explosionPipeline.cleanup();
    22932287
    2294    for (size_t i = 0; i < uniformBuffers_modelPipeline.size(); i++) {
    2295       vkDestroyBuffer(device, uniformBuffers_modelPipeline[i], nullptr);
    2296       vkFreeMemory(device, uniformBuffersMemory_modelPipeline[i], nullptr);
    2297    }
    2298 
    2299    for (size_t i = 0; i < uniformBuffers_shipPipeline.size(); i++) {
    2300       vkDestroyBuffer(device, uniformBuffers_shipPipeline[i], nullptr);
    2301       vkFreeMemory(device, uniformBuffersMemory_shipPipeline[i], nullptr);
    2302    }
    2303 
    2304    for (size_t i = 0; i < uniformBuffers_asteroidPipeline.size(); i++) {
    2305       vkDestroyBuffer(device, uniformBuffers_asteroidPipeline[i], nullptr);
    2306       vkFreeMemory(device, uniformBuffersMemory_asteroidPipeline[i], nullptr);
    2307    }
    2308 
    2309    for (size_t i = 0; i < uniformBuffers_laserPipeline.size(); i++) {
    2310       vkDestroyBuffer(device, uniformBuffers_laserPipeline[i], nullptr);
    2311       vkFreeMemory(device, uniformBuffersMemory_laserPipeline[i], nullptr);
    2312    }
    2313 
    2314    for (size_t i = 0; i < uniformBuffers_explosionPipeline.size(); i++) {
    2315       vkDestroyBuffer(device, uniformBuffers_explosionPipeline[i], nullptr);
    2316       vkFreeMemory(device, uniformBuffersMemory_explosionPipeline[i], nullptr);
     2288   for (size_t i = 0; i < uniformBuffers_modelPipeline.buffers.size(); i++) {
     2289      vkDestroyBuffer(device, uniformBuffers_modelPipeline.buffers[i], nullptr);
     2290      vkFreeMemory(device, uniformBuffers_modelPipeline.memory[i], nullptr);
     2291   }
     2292
     2293   for (size_t i = 0; i < uniformBuffers_shipPipeline.buffers.size(); i++) {
     2294      vkDestroyBuffer(device, uniformBuffers_shipPipeline.buffers[i], nullptr);
     2295      vkFreeMemory(device, uniformBuffers_shipPipeline.memory[i], nullptr);
     2296   }
     2297
     2298   for (size_t i = 0; i < uniformBuffers_asteroidPipeline.buffers.size(); i++) {
     2299      vkDestroyBuffer(device, uniformBuffers_asteroidPipeline.buffers[i], nullptr);
     2300      vkFreeMemory(device, uniformBuffers_asteroidPipeline.memory[i], nullptr);
     2301   }
     2302
     2303   for (size_t i = 0; i < uniformBuffers_laserPipeline.buffers.size(); i++) {
     2304      vkDestroyBuffer(device, uniformBuffers_laserPipeline.buffers[i], nullptr);
     2305      vkFreeMemory(device, uniformBuffers_laserPipeline.memory[i], nullptr);
     2306   }
     2307
     2308   for (size_t i = 0; i < uniformBuffers_explosionPipeline.buffers.size(); i++) {
     2309      vkDestroyBuffer(device, uniformBuffers_explosionPipeline.buffers[i], nullptr);
     2310      vkFreeMemory(device, uniformBuffers_explosionPipeline.memory[i], nullptr);
    23172311   }
    23182312
Note: See TracChangeset for help on using the changeset viewer.