Chillzy

Command Buffers

Jan 7th, 2025
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.14 KB | Source Code | 0 0
  1. void vk_cmd_buffers_compute_record(VkPipeline compute, VkPipelineLayout compute_layout, VkCommandBuffer compute_cmds, VkDescriptorSet *sets)
  2. {
  3.     VkCommandBufferBeginInfo compute_cmds_begin_info = vk_cmd_buffers_begin_info_init(0);
  4.  
  5.     if (vkBeginCommandBuffer(compute_cmds, &compute_cmds_begin_info)!= VK_SUCCESS)
  6.     {
  7.         printf("Failed to begin recording compute command buffer\n");
  8.     }
  9.  
  10.     vkCmdBindPipeline(compute_cmds, VK_PIPELINE_BIND_POINT_COMPUTE, compute);
  11.  
  12.     galaxy_params g =
  13.     {
  14.         .star_count = STAR_COUNT,
  15.         .max_rad = 3500.0,
  16.         .bulge_rad = 1250.0,
  17.         .angle = 6.28,
  18.         .eccentricity = 0.85,
  19.         .base_height = 300.0,
  20.         .height = 250.0,
  21.         .dust_temp = 4000.0,
  22.         .min_temp = 1900.0,
  23.         .max_temp = 50000.0,
  24.         .min_star_opacity = 0.1,
  25.         .max_star_opacity = 0.5,
  26.         .min_dust_opacity = 0.01,
  27.         .max_dust_opacity = 0.05,
  28.         .speed = 10.0
  29.     };
  30.  
  31.     /*
  32.     VkMemoryBarrier memory =
  33.     {
  34.         .sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER,
  35.         .pNext = NULL,
  36.         .srcAccessMask = VK_ACCESS_HOST_WRITE_BIT,
  37.         .dstAccessMask = VK_ACCESS_SHADER_READ_BIT
  38.     };
  39.  
  40.     vkCmdPipelineBarrier(compute_cmds, VK_PIPELINE_STAGE_HOST_BIT, VK_PIPELINE_STAGE_VERTEX_SHADER_BIT, 0, 1, &memory, 0, NULL, 0, NULL);*/
  41.  
  42.     uint32_t offsets[3] = {0, 0, 0};
  43.     vkCmdBindDescriptorSets(compute_cmds, VK_PIPELINE_BIND_POINT_COMPUTE, compute_layout, 0, 1, sets, 3, offsets);
  44.     vkCmdPushConstants(compute_cmds, compute_layout, VK_SHADER_STAGE_COMPUTE_BIT, 0, sizeof(g), &g);
  45.  
  46.     vkCmdDispatch(compute_cmds, PARTICLE_COUNT / PARTICLE_DISPATCH_SIZE, 1, 1);
  47. /*
  48.     VkMemoryBarrier barrier =
  49.     {
  50.         .sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER,
  51.         .pNext = NULL,
  52.         .srcAccessMask = VK_ACCESS_SHADER_WRITE_BIT,
  53.         .dstAccessMask = VK_ACCESS_SHADER_READ_BIT
  54.     };
  55.  
  56.     vkCmdPipelineBarrier(compute_cmds, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, 0, 1, &barrier, 0, NULL, 0, NULL);*/
  57.  
  58.     if (vkEndCommandBuffer(compute_cmds) != VK_SUCCESS)
  59.     {
  60.         printf("Failed to record compute command buffer\n");
  61.     }
  62. }
  63.  
  64. static void vk_cmd_buffers_galaxy_record(VkPipeline galaxy, VkPipelineLayout galaxy_layout, VkCommandBuffer cmd_buffers, VkBuffer indirect_cmds, VkBuffer compute_count, VkDescriptorSet *sets)
  65. {
  66.     uint32_t offset = 0;
  67.     vkCmdBindPipeline(cmd_buffers, VK_PIPELINE_BIND_POINT_GRAPHICS, galaxy);
  68.     vkCmdBindDescriptorSets(cmd_buffers, VK_PIPELINE_BIND_POINT_GRAPHICS, galaxy_layout, 0, 1, sets, 1, &offset);
  69.  
  70.     galaxy_info info =
  71.     {
  72.         .star_count = STAR_COUNT,
  73.         .time = glfwGetTime(),
  74.         .min_temp = 1900.0,
  75.         .max_temp = 50000.0,
  76.         .star_size = 10.0,
  77.         .dust_size = 500.0,
  78.         .h2size = 150.0,
  79.         .h2dist = 300.0
  80.     };
  81.  
  82.     vkCmdPushConstants(cmd_buffers, galaxy_layout, VK_SHADER_STAGE_VERTEX_BIT, 0, sizeof(info), &info);
  83.     //vkCmdDraw(cmd_buffers, 6 * PARTICLE_COUNT, 1, 0, 0);
  84.     vkCmdDrawIndirectCount(cmd_buffers, indirect_cmds, 0, compute_count, 0, 6 * PARTICLE_COUNT, sizeof(VkDrawIndirectCommand));
  85. }
Advertisement
Add Comment
Please, Sign In to add comment