Changeset 2f4ff8c in opengl-game for sdl-game.cpp


Ignore:
Timestamp:
Jun 20, 2021, 7:05:14 PM (3 years ago)
Author:
Dmitry Portnoy <dportnoy@…>
Branches:
feature/imgui-sdl
Children:
b01b50c
Parents:
90880fb
git-author:
Dmitry Portnoy <dportnoy@…> (06/18/21 16:39:49)
git-committer:
Dmitry Portnoy <dportnoy@…> (06/20/21 19:05:14)
Message:

Change the uniform buffers to always be mapped instead of mapping them every time data needs to be copied

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sdl-game.cpp

    r90880fb r2f4ff8c  
    7070                     , gui(nullptr)
    7171                     , window(nullptr)
    72                      , vp_mats_modelPipeline()
     72                     , uniforms_modelPipeline()
    7373                     , objects_modelPipeline()
    7474                     , score(0)
     
    9393   vkGetPhysicalDeviceProperties(physicalDevice, &deviceProperties);
    9494
    95    vp_mats_modelPipeline = VulkanBuffer<UBO_VP_mats>(1, deviceProperties.limits.maxUniformBufferRange,
    96                                                      deviceProperties.limits.minUniformBufferOffsetAlignment);
     95   uniforms_modelPipeline = VulkanBuffer<UBO_VP_mats>(1, deviceProperties.limits.maxUniformBufferRange,
     96                                                      deviceProperties.limits.minUniformBufferOffsetAlignment);
    9797
    9898   objects_modelPipeline = VulkanBuffer<SSBO_ModelObject>(10, deviceProperties.limits.maxStorageBufferRange,
     
    114114   modelPipeline.addAttribute(VK_FORMAT_R32_UINT, offset_of(&ModelVertex::objIndex));
    115115
    116    createBufferSet(vp_mats_modelPipeline.memorySize(),
     116   createBufferSet(uniforms_modelPipeline.memorySize(),
    117117                   VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,
    118                    VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
     118                   VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,
    119119                   uniformBuffers_modelPipeline);
     120
     121   uniforms_modelPipeline.map(uniformBuffers_modelPipeline.memory, device);
    120122
    121123   createBufferSet(objects_modelPipeline.memorySize(),
    122124                   VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT
    123125                   | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
    124                    VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
     126                   VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,
    125127                   storageBuffers_modelPipeline);
     128
     129   objects_modelPipeline.map(storageBuffers_modelPipeline.memory, device);
    126130
    127131   modelPipeline.addDescriptorInfo(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
     
    445449
    446450void VulkanGame::updateScene() {
    447    vp_mats_modelPipeline.data()->view = viewMat;
    448    vp_mats_modelPipeline.data()->proj = projMat;
     451   uniforms_modelPipeline.data()->view = viewMat;
     452   uniforms_modelPipeline.data()->proj = projMat;
    449453
    450454   // TODO: Probably move the resizing to the VulkanBuffer class's add() method
     
    453457
    454458   if (objects_modelPipeline.resized) {
     459      objects_modelPipeline.unmap(storageBuffers_modelPipeline.memory, device);
     460
    455461      resizeBufferSet(storageBuffers_modelPipeline, objects_modelPipeline.memorySize(), resourceCommandPool,
    456462                      graphicsQueue, true);
     463
     464      objects_modelPipeline.map(storageBuffers_modelPipeline.memory, device);
    457465
    458466      objects_modelPipeline.resize();
     
    474482   }
    475483
    476    VulkanUtils::copyDataToMemory(device, vp_mats_modelPipeline.data(), uniformBuffers_modelPipeline.memory[imageIndex],
    477                                  0, vp_mats_modelPipeline.memorySize(), false);
    478 
    479    VulkanUtils::copyDataToMemory(device, objects_modelPipeline.data(), storageBuffers_modelPipeline.memory[imageIndex],
    480                                  0, objects_modelPipeline.memorySize(), false);
     484   VulkanUtils::copyDataToMappedMemory(device, uniforms_modelPipeline.data(), uniforms_modelPipeline.mapped(imageIndex),
     485                                       uniformBuffers_modelPipeline.memory[imageIndex],
     486                                       uniforms_modelPipeline.memorySize(), true);
     487
     488   VulkanUtils::copyDataToMappedMemory(device, objects_modelPipeline.data(), objects_modelPipeline.mapped(imageIndex),
     489                                       storageBuffers_modelPipeline.memory[imageIndex],
     490                                       objects_modelPipeline.memorySize(), true);
    481491}
    482492
     
    12821292   createSyncObjects();
    12831293
    1284    createBufferSet(vp_mats_modelPipeline.memorySize(),
     1294   createBufferSet(uniforms_modelPipeline.memorySize(),
    12851295                   VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,
    1286                    VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
     1296                   VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,
    12871297                   uniformBuffers_modelPipeline);
     1298
     1299   uniforms_modelPipeline.map(uniformBuffers_modelPipeline.memory, device);
    12881300
    12891301   createBufferSet(objects_modelPipeline.memorySize(),
    12901302                   VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT
    12911303                   | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
    1292                    VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
     1304                   VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,
    12931305                   storageBuffers_modelPipeline);
     1306
     1307   objects_modelPipeline.map(storageBuffers_modelPipeline.memory, device);
    12941308
    12951309   modelPipeline.updateRenderPass(renderPass);
     
    13151329   modelPipeline.cleanup();
    13161330
     1331   uniforms_modelPipeline.unmap(uniformBuffers_modelPipeline.memory, device);
     1332
    13171333   for (size_t i = 0; i < uniformBuffers_modelPipeline.buffers.size(); i++) {
    13181334      vkDestroyBuffer(device, uniformBuffers_modelPipeline.buffers[i], nullptr);
    13191335      vkFreeMemory(device, uniformBuffers_modelPipeline.memory[i], nullptr);
    13201336   }
     1337
     1338   objects_modelPipeline.unmap(storageBuffers_modelPipeline.memory, device);
    13211339
    13221340   for (size_t i = 0; i < storageBuffers_modelPipeline.buffers.size(); i++) {
Note: See TracChangeset for help on using the changeset viewer.