Changeset b794178 in opengl-game for vulkan-ref.cpp


Ignore:
Timestamp:
Oct 17, 2019, 9:30:18 PM (5 years ago)
Author:
Dmitry Portnoy <dmitry.portnoy@…>
Branches:
feature/imgui-sdl, master, points-test
Children:
e83b155
Parents:
771b33a
Message:

In vulkangame, add the ability to create vulkan resoirces and descriptor sets for shader uniforms (images and ubos)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • vulkan-ref.cpp

    r771b33a rb794178  
    8080};
    8181
     82/*** START OF REFACTORED CODE ***/
    8283struct DescriptorInfo {
    8384   VkDescriptorType type;
     
    8788   VkDescriptorImageInfo* imageData;
    8889};
     90/*** END OF REFACTORED CODE ***/
    8991
    9092struct GraphicsPipelineInfo {
     93/*** START OF REFACTORED CODE ***/
    9194   VkPipelineLayout pipelineLayout;
    9295   VkPipeline pipeline;
     
    100103   VkDescriptorSetLayout descriptorSetLayout;
    101104   vector<VkDescriptorSet> descriptorSets;
     105/*** END OF REFACTORED CODE ***/
    102106
    103107   size_t numVertices; // Currently unused
     
    153157      SDL_Window* window = nullptr;
    154158      SDL_Renderer* gRenderer = nullptr;
    155 /*** END OF REFACTORED CODE ***/
    156159      SDL_Texture* uiOverlay = nullptr;
     160/*** END OF REFACTORED CODE ***/
    157161
    158162      TTF_Font* gFont = nullptr;
     
    176180/*** END OF REFACTORED CODE ***/
    177181      // (This was taken out of vulkan-game for now and replaced with Viewport)
    178       // It will definitely be needed when creating render passes and I could use it in a few other places
     182      // It will definitely be needed when creating command buffers and I could use it in a few other places
     183      // TODO: Check above ^
    179184      VkExtent2D swapChainExtent;
    180185/*** START OF REFACTORED CODE ***/
     
    190195      vector<VkCommandBuffer> commandBuffers;
    191196
     197/*** START OF REFACTORED CODE ***/
    192198      // The images and the sampler are used to store data for specific attributes. I probably
    193199      // want to keep them separate from the GraphicsPipelineInfo objects and start passing
     
    197203      VkDeviceMemory depthImageMemory;
    198204      VkImageView depthImageView;
     205/*** END OF REFACTORED CODE ***/
    199206
    200207      VkImage textureImage;
     
    202209      VkImageView textureImageView;
    203210
    204       VkImage overlayImage;
    205       VkDeviceMemory overlayImageMemory;
    206       VkImageView overlayImageView;
    207 
    208211      VkImage sdlOverlayImage;
    209212      VkDeviceMemory sdlOverlayImageMemory;
    210213      VkImageView sdlOverlayImageView;
    211214
     215/*** START OF REFACTORED CODE ***/
    212216      VkSampler textureSampler;
    213217
    214218      // These are currently to store the MVP matrix
    215219      // I should figure out if it makes sense to use them for other uniforms in the future
    216       // If not, I should rename them to better indicate their puprose.
     220      // If not, I should rename them to better indicate their purpose.
    217221      // I should also decide if I can use these for all shaders, or if I need a separapte set of buffers for each one
    218222      vector<VkBuffer> uniformBuffers;
    219223      vector<VkDeviceMemory> uniformBuffersMemory;
     224/*** END OF REFACTORED CODE ***/
    220225
    221226      VkDescriptorImageInfo sceneImageInfo;
    222227      VkDescriptorImageInfo overlayImageInfo;
    223228
     229/*** START OF REFACTORED CODE ***/
    224230      vector<VkDescriptorBufferInfo> uniformBufferInfoList;
     231/*** END OF REFACTORED CODE ***/
    225232
    226233      GraphicsPipelineInfo scenePipeline;
     
    257264            return RTWO_ERROR;
    258265         }
    259 /*** END OF REFACTORED CODE ***/
    260266
    261267         SDL_VERSION(&sdlVersion);
     
    277283            cout << "Unable to set texture blend mode! SDL Error: " << SDL_GetError() << endl;
    278284         }
     285/*** END OF REFACTORED CODE ***/
    279286
    280287         gFont = TTF_OpenFont("fonts/lazy.ttf", 28);
     
    334341/*** END OF REFACTORED CODE ***/
    335342
    336          // THIS SECTION IS WHERE TEXTURES ARE CREATED, MAYBE SPLIT IT OFF INTO A SEPARATE FUNCTION
    337          // MAY WANT TO CREATE A STRUCT TO HOLD SIMILAR VARIABLES< LIKE THOSE FOR A TEXTURE
    338 
    339343         createImageResources("textures/texture.jpg", textureImage, textureImageMemory, textureImageView);
     344/*** START OF REFACTORED CODE ***/
    340345         createImageResourcesFromSDLTexture(uiOverlay, sdlOverlayImage, sdlOverlayImageMemory, sdlOverlayImageView);
    341346         createTextureSampler();
     
    350355         overlayImageInfo.imageView = sdlOverlayImageView;
    351356         overlayImageInfo.sampler = textureSampler;
     357/*** END OF REFACTORED CODE ***/
    352358
    353359         // SHADER-SPECIFIC STUFF STARTS HERE
     
    377383         addAttributeDescription(scenePipeline, VK_FORMAT_R32G32B32_SFLOAT, offset_of(&Vertex::color));
    378384         addAttributeDescription(scenePipeline, VK_FORMAT_R32G32_SFLOAT, offset_of(&Vertex::texCoord));
    379 /*** END OF REFACTORED CODE ***/
    380385
    381386         addDescriptorInfo(scenePipeline, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_VERTEX_BIT, &uniformBufferInfoList, nullptr);
     
    383388
    384389         createDescriptorSetLayout(scenePipeline);
     390/*** END OF REFACTORED CODE ***/
    385391
    386392         numPlanes = 2;
     
    403409         addAttributeDescription(overlayPipeline, VK_FORMAT_R32G32B32_SFLOAT, offset_of(&OverlayVertex::pos));
    404410         addAttributeDescription(overlayPipeline, VK_FORMAT_R32G32_SFLOAT, offset_of(&OverlayVertex::texCoord));
    405 /*** END OF REFACTORED CODE ***/
    406411
    407412         addDescriptorInfo(overlayPipeline, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_SHADER_STAGE_FRAGMENT_BIT, nullptr, &overlayImageInfo);
    408413
    409414         createDescriptorSetLayout(overlayPipeline);
     415/*** END OF REFACTORED CODE ***/
    410416
    411417         createBufferResources();
     
    847853      }
    848854
     855/*** START OF REFACTORED CODE ***/
    849856      void addDescriptorInfo(GraphicsPipelineInfo& info, VkDescriptorType type, VkShaderStageFlags stageFlags, vector<VkDescriptorBufferInfo>* bufferData, VkDescriptorImageInfo* imageData) {
    850857         info.descriptorInfoList.push_back({ type, stageFlags, bufferData, imageData });
     
    873880
    874881      void createGraphicsPipeline(string vertShaderFile, string fragShaderFile, GraphicsPipelineInfo& info) {
    875 /*** START OF REFACTORED CODE ***/
    876882         vector<char> vertShaderCode = readFile(vertShaderFile);
    877883         vector<char> fragShaderCode = readFile(fragShaderFile);
     
    977983         pipelineLayoutInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO;
    978984         pipelineLayoutInfo.setLayoutCount = 1;
    979 /*** END OF REFACTORED CODE ***/
    980985         pipelineLayoutInfo.pSetLayouts = &info.descriptorSetLayout;
    981986         pipelineLayoutInfo.pushConstantRangeCount = 0;
     
    10071012         }
    10081013
    1009 /*** START OF REFACTORED CODE ***/
    10101014         vkDestroyShaderModule(device, vertShaderModule, nullptr);
    10111015         vkDestroyShaderModule(device, fragShaderModule, nullptr);
    1012 /*** END OF REFACTORED CODE ***/
    1013       }
     1016      }
     1017/*** END OF REFACTORED CODE ***/
    10141018
    10151019      VkShaderModule createShaderModule(const vector<char>& code) {
     
    11341138         throw runtime_error("failed to find supported format!");
    11351139      }
    1136 /*** END OF REFACTORED CODE ***/
    11371140
    11381141      bool hasStencilComponent(VkFormat format) {
     
    11911194         view = createImageView(image, VK_FORMAT_R8G8B8A8_UNORM, VK_IMAGE_ASPECT_COLOR_BIT);
    11921195      }
     1196/*** END OF REFACTORED CODE ***/
    11931197
    11941198      void populateImageFromSDLTexture(SDL_Texture* texture, VkImage& image) {
     
    13861390         return imageView;
    13871391      }
    1388 /*** END OF REFACTORED CODE ***/
    13891392
    13901393      void createTextureSampler() {
     
    14131416         }
    14141417      }
     1418/*** END OF REFACTORED CODE ***/
    14151419
    14161420      void createVertexBuffer(GraphicsPipelineInfo& info, const void* vertexData, int vertexSize) {
     
    14621466      }
    14631467
     1468/*** START OF REFACTORED CODE ***/
    14641469      void createUniformBuffers() {
    14651470         VkDeviceSize bufferSize = sizeof(UniformBufferObject);
     
    15051510         vkBindBufferMemory(device, buffer, bufferMemory, 0);
    15061511      }
     1512/*** END OF REFACTORED CODE ***/
    15071513
    15081514      void copyDataToBuffer(const void* srcData, VkBuffer dst, VkDeviceSize dstOffset, VkDeviceSize dataSize) {
     
    15671573      }
    15681574
     1575/*** START OF REFACTORED CODE ***/
    15691576      uint32_t findMemoryType(uint32_t typeFilter, VkMemoryPropertyFlags properties) {
    15701577         VkPhysicalDeviceMemoryProperties memProperties;
     
    16421649         }
    16431650      }
     1651/*** END OF REFACTORED CODE ***/
    16441652
    16451653      void createCommandBuffers() {
     
    19481956
    19491957      void createBufferResources() {
     1958         // TODO: The three functions below will be called in vulkan-game following the
     1959         // pipeline creation (createDescriptorSets()), and before createCommandBuffers()
    19501960         createDepthResources();
    19511961         createFramebuffers();
    19521962         createUniformBuffers();
    19531963
     1964/*** START OF REFACTORED CODE ***/
    19541965         createGraphicsPipeline("shaders/scene-vert.spv", "shaders/scene-frag.spv", scenePipeline);
    19551966         createDescriptorPool(scenePipeline);
     1967/*** END OF REFACTORED CODE ***/
    19561968         createDescriptorSets(scenePipeline);
    19571969
     1970/*** START OF REFACTORED CODE ***/
    19581971         createGraphicsPipeline("shaders/overlay-vert.spv", "shaders/overlay-frag.spv", overlayPipeline);
    19591972         createDescriptorPool(overlayPipeline);
     1973/*** END OF REFACTORED CODE ***/
    19601974         createDescriptorSets(overlayPipeline);
    19611975
     
    19631977      }
    19641978
    1965 /*** START OF REFACTORED CODE ***/
    19661979      void cleanup() {
     1980/*** START OF REFACTORED CODE ***/
    19671981         cleanupSwapChain();
    19681982/*** END OF REFACTORED CODE ***/
     
    19741988         vkFreeMemory(device, textureImageMemory, nullptr);
    19751989
    1976          vkDestroyImageView(device, overlayImageView, nullptr);
    1977          vkDestroyImage(device, overlayImage, nullptr);
    1978          vkFreeMemory(device, overlayImageMemory, nullptr);
    1979 
    19801990         vkDestroyImageView(device, sdlOverlayImageView, nullptr);
    19811991         vkDestroyImage(device, sdlOverlayImage, nullptr);
    19821992         vkFreeMemory(device, sdlOverlayImageMemory, nullptr);
    19831993
     1994/*** START OF REFACTORED CODE ***/
    19841995         cleanupPipelineBuffers(scenePipeline);
    19851996         cleanupPipelineBuffers(overlayPipeline);
     1997 /*** END OF REFACTORED CODE ***/
    19861998
    19871999         for (size_t i = 0; i < MAX_FRAMES_IN_FLIGHT; i++) {
     
    20012013
    20022014         vkDestroyInstance(instance, nullptr);
    2003 /*** END OF REFACTORED CODE ***/
    20042015
    20052016         // TODO: Check if any of these functions accept null parameters
     
    20102021            uiOverlay = nullptr;
    20112022         }
     2023/*** END OF REFACTORED CODE ***/
    20122024
    20132025         TTF_CloseFont(gFont);
     
    20452057         vkFreeCommandBuffers(device, commandPool, static_cast<uint32_t>(commandBuffers.size()), commandBuffers.data());
    20462058
     2059/*** START OF REFACTORED CODE ***/
    20472060         cleanupPipeline(scenePipeline);
    20482061         cleanupPipeline(overlayPipeline);
    20492062
    2050 /*** START OF REFACTORED CODE ***/
    20512063         vkDestroyRenderPass(device, renderPass, nullptr);
    20522064
     
    20622074            vkFreeMemory(device, uniformBuffersMemory[i], nullptr);
    20632075         }
    2064 /*** START OF REFACTORED CODE ***/
    2065       }
    2066 /*** END OF REFACTORED CODE ***/
    2067 
     2076      }
     2077
     2078/*** START OF REFACTORED CODE ***/
    20682079      void cleanupPipeline(GraphicsPipelineInfo& pipeline) {
    20692080         vkDestroyPipeline(device, pipeline.pipeline, nullptr);
     
    20712082         vkDestroyPipelineLayout(device, pipeline.pipelineLayout, nullptr);
    20722083      }
     2084/*** END OF REFACTORED CODE ***/
    20732085
    20742086      void cleanupPipelineBuffers(GraphicsPipelineInfo& pipeline) {
     2087/*** START OF REFACTORED CODE ***/
    20752088         vkDestroyDescriptorSetLayout(device, pipeline.descriptorSetLayout, nullptr);
     2089/*** END OF REFACTORED CODE ***/
    20762090
    20772091         vkDestroyBuffer(device, pipeline.vertexBuffer, nullptr);
Note: See TracChangeset for help on using the changeset viewer.