Changeset 67527a5 in opengl-game for vulkan-game.cpp


Ignore:
Timestamp:
Jun 21, 2021, 4:12:08 PM (3 years ago)
Author:
Dmitry Portnoy <dportnoy@…>
Branches:
feature/imgui-sdl
Children:
27e580e
Parents:
b01b50c
git-author:
Dmitry Portnoy <dportnoy@…> (06/21/21 15:13:03)
git-committer:
Dmitry Portnoy <dportnoy@…> (06/21/21 16:12:08)
Message:

Switch all per-object buffers to be dynamic uniform buffers instead of shader storage buffers

File:
1 edited

Legend:

Unmodified
Added
Removed
  • vulkan-game.cpp

    rb01b50c r67527a5  
    113113                                                      deviceProperties.limits.minUniformBufferOffsetAlignment);
    114114
    115    objects_modelPipeline = VulkanBuffer<SSBO_ModelObject>(10, deviceProperties.limits.maxStorageBufferRange,
    116                                                           deviceProperties.limits.minStorageBufferOffsetAlignment);
     115   objects_modelPipeline = VulkanBuffer<SSBO_ModelObject>(10, deviceProperties.limits.maxUniformBufferRange,
     116                                                          deviceProperties.limits.minUniformBufferOffsetAlignment);
    117117
    118118   uniforms_shipPipeline = VulkanBuffer<UBO_VP_mats>(1, deviceProperties.limits.maxUniformBufferRange,
    119119                                                     deviceProperties.limits.minUniformBufferOffsetAlignment);
    120120
    121    objects_shipPipeline = VulkanBuffer<SSBO_ModelObject>(10, deviceProperties.limits.maxStorageBufferRange,
    122                                                          deviceProperties.limits.minStorageBufferOffsetAlignment);
     121   objects_shipPipeline = VulkanBuffer<SSBO_ModelObject>(10, deviceProperties.limits.maxUniformBufferRange,
     122                                                         deviceProperties.limits.minUniformBufferOffsetAlignment);
    123123
    124124   uniforms_asteroidPipeline = VulkanBuffer<UBO_VP_mats>(1, deviceProperties.limits.maxUniformBufferRange,
    125125                                                         deviceProperties.limits.minUniformBufferOffsetAlignment);
    126126
    127    objects_asteroidPipeline = VulkanBuffer<SSBO_Asteroid>(10, deviceProperties.limits.maxStorageBufferRange,
    128                                                           deviceProperties.limits.minStorageBufferOffsetAlignment);
     127   objects_asteroidPipeline = VulkanBuffer<SSBO_Asteroid>(10, deviceProperties.limits.maxUniformBufferRange,
     128                                                          deviceProperties.limits.minUniformBufferOffsetAlignment);
    129129
    130130   uniforms_laserPipeline = VulkanBuffer<UBO_VP_mats>(1, deviceProperties.limits.maxUniformBufferRange,
    131131                                                      deviceProperties.limits.minUniformBufferOffsetAlignment);
    132132
    133    objects_laserPipeline = VulkanBuffer<SSBO_Laser>(2, deviceProperties.limits.maxStorageBufferRange,
    134                                                     deviceProperties.limits.minStorageBufferOffsetAlignment);
     133   objects_laserPipeline = VulkanBuffer<SSBO_Laser>(2, deviceProperties.limits.maxUniformBufferRange,
     134                                                    deviceProperties.limits.minUniformBufferOffsetAlignment);
    135135
    136136   uniforms_explosionPipeline = VulkanBuffer<UBO_Explosion>(1, deviceProperties.limits.maxUniformBufferRange,
    137137                                                            deviceProperties.limits.minUniformBufferOffsetAlignment);
    138138
    139    objects_explosionPipeline = VulkanBuffer<SSBO_Explosion>(2, deviceProperties.limits.maxStorageBufferRange,
    140                                                             deviceProperties.limits.minStorageBufferOffsetAlignment);
     139   objects_explosionPipeline = VulkanBuffer<SSBO_Explosion>(2, deviceProperties.limits.maxUniformBufferRange,
     140                                                            deviceProperties.limits.minUniformBufferOffsetAlignment);
    141141
    142142   initImGuiOverlay();
     
    166166   createBufferSet(objects_modelPipeline.memorySize(),
    167167                   VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT
    168                    | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
     168                   | VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,
    169169                   VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,
    170170                   objectBuffers_modelPipeline);
     
    174174   modelPipeline.addDescriptorInfo(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
    175175      VK_SHADER_STAGE_VERTEX_BIT, &uniformBuffers_modelPipeline.infoSet);
    176    modelPipeline.addDescriptorInfo(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
     176   modelPipeline.addDescriptorInfo(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC,
    177177      VK_SHADER_STAGE_VERTEX_BIT, &objectBuffers_modelPipeline.infoSet);
    178178   modelPipeline.addDescriptorInfo(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
     
    240240   createBufferSet(objects_shipPipeline.memorySize(),
    241241                   VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT
    242                    | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
     242                   | VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,
    243243                   VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,
    244244                   objectBuffers_shipPipeline);
     
    248248   shipPipeline.addDescriptorInfo(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
    249249      VK_SHADER_STAGE_VERTEX_BIT, &uniformBuffers_shipPipeline.infoSet);
    250    shipPipeline.addDescriptorInfo(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
     250   shipPipeline.addDescriptorInfo(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC,
    251251      VK_SHADER_STAGE_VERTEX_BIT, &objectBuffers_shipPipeline.infoSet);
    252252
     
    511511   createBufferSet(objects_asteroidPipeline.memorySize(),
    512512                   VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT
    513                    | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
     513                   | VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,
    514514                   VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,
    515515                   objectBuffers_asteroidPipeline);
     
    519519   asteroidPipeline.addDescriptorInfo(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
    520520      VK_SHADER_STAGE_VERTEX_BIT, &uniformBuffers_asteroidPipeline.infoSet);
    521    asteroidPipeline.addDescriptorInfo(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
     521   asteroidPipeline.addDescriptorInfo(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC,
    522522      VK_SHADER_STAGE_VERTEX_BIT, &objectBuffers_asteroidPipeline.infoSet);
    523523
     
    540540   createBufferSet(objects_laserPipeline.memorySize(),
    541541                   VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT
    542                    | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
     542                   | VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,
    543543                   VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,
    544544                   objectBuffers_laserPipeline);
     
    548548   laserPipeline.addDescriptorInfo(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
    549549      VK_SHADER_STAGE_VERTEX_BIT, &uniformBuffers_laserPipeline.infoSet);
    550    laserPipeline.addDescriptorInfo(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
     550   laserPipeline.addDescriptorInfo(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC,
    551551      VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT, &objectBuffers_laserPipeline.infoSet);
    552552   laserPipeline.addDescriptorInfo(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
     
    571571   createBufferSet(objects_explosionPipeline.memorySize(),
    572572                   VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT
    573                    | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
     573                   | VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,
    574574                   VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,
    575575                   objectBuffers_explosionPipeline);
     
    579579   explosionPipeline.addDescriptorInfo(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
    580580      VK_SHADER_STAGE_VERTEX_BIT, &uniformBuffers_explosionPipeline.infoSet);
    581    explosionPipeline.addDescriptorInfo(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
     581   explosionPipeline.addDescriptorInfo(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC,
    582582      VK_SHADER_STAGE_VERTEX_BIT, &objectBuffers_explosionPipeline.infoSet);
    583583
     
    11071107   }
    11081108
    1109    VulkanUtils::copyDataToMappedMemory(device, uniforms_modelPipeline.data(), uniforms_modelPipeline.mapped(imageIndex),
     1109   VulkanUtils::copyDataToMappedMemory(device, uniforms_modelPipeline.data(),
     1110                                       uniforms_modelPipeline.mapped(imageIndex),
    11101111                                       uniformBuffers_modelPipeline.memory[imageIndex],
    11111112                                       uniforms_modelPipeline.memorySize(), true);
    11121113
    1113    VulkanUtils::copyDataToMappedMemory(device, objects_modelPipeline.data(), objects_modelPipeline.mapped(imageIndex),
     1114   VulkanUtils::copyDataToMappedMemory(device, objects_modelPipeline.data(),
     1115                                       objects_modelPipeline.mapped(imageIndex),
    11141116                                       objectBuffers_modelPipeline.memory[imageIndex],
    11151117                                       objects_modelPipeline.memorySize(), true);
     
    11371139   }
    11381140
    1139    VulkanUtils::copyDataToMappedMemory(device, uniforms_shipPipeline.data(), uniforms_shipPipeline.mapped(imageIndex),
     1141   VulkanUtils::copyDataToMappedMemory(device, uniforms_shipPipeline.data(),
     1142                                       uniforms_shipPipeline.mapped(imageIndex),
    11401143                                       uniformBuffers_shipPipeline.memory[imageIndex],
    11411144                                       uniforms_shipPipeline.memorySize(), true);
    11421145
    1143    VulkanUtils::copyDataToMappedMemory(device, objects_shipPipeline.data(), objects_shipPipeline.mapped(imageIndex),
     1146   VulkanUtils::copyDataToMappedMemory(device, objects_shipPipeline.data(),
     1147                                       objects_shipPipeline.mapped(imageIndex),
    11441148                                       objectBuffers_shipPipeline.memory[imageIndex],
    11451149                                       objects_shipPipeline.memorySize(), true);
     
    11901194   }
    11911195
    1192    VulkanUtils::copyDataToMappedMemory(device, uniforms_asteroidPipeline.data(), uniforms_asteroidPipeline.mapped(imageIndex),
     1196   VulkanUtils::copyDataToMappedMemory(device, uniforms_asteroidPipeline.data(),
     1197                                       uniforms_asteroidPipeline.mapped(imageIndex),
    11931198                                       uniformBuffers_asteroidPipeline.memory[imageIndex],
    11941199                                       uniforms_asteroidPipeline.memorySize(), true);
    11951200
    1196    VulkanUtils::copyDataToMappedMemory(device, objects_asteroidPipeline.data(), objects_asteroidPipeline.mapped(imageIndex),
     1201   VulkanUtils::copyDataToMappedMemory(device, objects_asteroidPipeline.data(),
     1202                                       objects_asteroidPipeline.mapped(imageIndex),
    11971203                                       objectBuffers_asteroidPipeline.memory[imageIndex],
    11981204                                       objects_asteroidPipeline.memorySize(), true);
     
    12261232   }
    12271233
    1228    VulkanUtils::copyDataToMappedMemory(device, uniforms_laserPipeline.data(), uniforms_laserPipeline.mapped(imageIndex),
     1234   VulkanUtils::copyDataToMappedMemory(device, uniforms_laserPipeline.data(),
     1235                                       uniforms_laserPipeline.mapped(imageIndex),
    12291236                                       uniformBuffers_laserPipeline.memory[imageIndex],
    12301237                                       uniforms_laserPipeline.memorySize(), true);
    12311238
    1232    VulkanUtils::copyDataToMappedMemory(device, objects_laserPipeline.data(), objects_laserPipeline.mapped(imageIndex),
     1239   VulkanUtils::copyDataToMappedMemory(device, objects_laserPipeline.data(),
     1240                                       objects_laserPipeline.mapped(imageIndex),
    12331241                                       objectBuffers_laserPipeline.memory[imageIndex],
    12341242                                       objects_laserPipeline.memorySize(), true);
     
    12611269   }
    12621270
    1263    VulkanUtils::copyDataToMappedMemory(device, uniforms_explosionPipeline.data(), uniforms_explosionPipeline.mapped(imageIndex),
     1271   VulkanUtils::copyDataToMappedMemory(device, uniforms_explosionPipeline.data(),
     1272                                       uniforms_explosionPipeline.mapped(imageIndex),
    12641273                                       uniformBuffers_explosionPipeline.memory[imageIndex],
    12651274                                       uniforms_explosionPipeline.memorySize(), true);
    12661275
    1267    VulkanUtils::copyDataToMappedMemory(device, objects_explosionPipeline.data(), objects_explosionPipeline.mapped(imageIndex),
     1276   VulkanUtils::copyDataToMappedMemory(device, objects_explosionPipeline.data(),
     1277                                       objects_explosionPipeline.mapped(imageIndex),
    12681278                                       objectBuffers_explosionPipeline.memory[imageIndex],
    12691279                                       objects_explosionPipeline.memorySize(), true);
     
    18631873   // TODO: Find a more elegant, per-screen solution for this
    18641874   if (currentRenderScreenFn == &VulkanGame::renderGameScreen) {
    1865       modelPipeline.createRenderCommands(commandBuffers[imageIndex], imageIndex, {});
    1866       shipPipeline.createRenderCommands(commandBuffers[imageIndex], imageIndex, {});
    1867       asteroidPipeline.createRenderCommands(commandBuffers[imageIndex], imageIndex, {});
    1868       laserPipeline.createRenderCommands(commandBuffers[imageIndex], imageIndex, {});
    1869       explosionPipeline.createRenderCommands(commandBuffers[imageIndex], imageIndex, {});
     1875      modelPipeline.createRenderCommands(commandBuffers[imageIndex], imageIndex, { 0 });
     1876      shipPipeline.createRenderCommands(commandBuffers[imageIndex], imageIndex, { 0 });
     1877      asteroidPipeline.createRenderCommands(commandBuffers[imageIndex], imageIndex, { 0 });
     1878      laserPipeline.createRenderCommands(commandBuffers[imageIndex], imageIndex, { 0 });
     1879      explosionPipeline.createRenderCommands(commandBuffers[imageIndex], imageIndex, { 0 });
    18701880   }
    18711881
     
    23152325   createBufferSet(objects_modelPipeline.memorySize(),
    23162326                   VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT
    2317                    | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
     2327                   | VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,
    23182328                   VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,
    23192329                   objectBuffers_modelPipeline);
     
    23352345   createBufferSet(objects_shipPipeline.memorySize(),
    23362346                   VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT
    2337                    | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
     2347                   | VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,
    23382348                   VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,
    23392349                   objectBuffers_shipPipeline);
     
    23552365   createBufferSet(objects_asteroidPipeline.memorySize(),
    23562366                   VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT
    2357                    | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
     2367                   | VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,
    23582368                   VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,
    23592369                   objectBuffers_asteroidPipeline);
     
    23752385   createBufferSet(objects_laserPipeline.memorySize(),
    23762386                   VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT
    2377                    | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
     2387                   | VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,
    23782388                   VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,
    23792389                   objectBuffers_laserPipeline);
     
    23952405   createBufferSet(objects_explosionPipeline.memorySize(),
    23962406                   VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT
    2397                    | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
     2407                   | VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,
    23982408                   VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,
    23992409                   objectBuffers_explosionPipeline);
Note: See TracChangeset for help on using the changeset viewer.