NeroReflex

Untitled

Nov 14th, 2019
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.32 KB | None | 0 0
  1. VkDescriptorSetLayoutBinding* coreDescriptorSetLayoutBinding = new VkDescriptorSetLayoutBinding[4];
  2.     coreDescriptorSetLayoutBinding[0].binding = 0;
  3.     coreDescriptorSetLayoutBinding[0].descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE;
  4.     coreDescriptorSetLayoutBinding[0].descriptorCount = 1;
  5.     coreDescriptorSetLayoutBinding[0].stageFlags = VK_SHADER_STAGE_COMPUTE_BIT;
  6.     coreDescriptorSetLayoutBinding[1].binding = 1;
  7.     coreDescriptorSetLayoutBinding[1].descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE;
  8.     coreDescriptorSetLayoutBinding[1].descriptorCount = 1;
  9.     coreDescriptorSetLayoutBinding[1].stageFlags = VK_SHADER_STAGE_COMPUTE_BIT;
  10.     coreDescriptorSetLayoutBinding[2].binding = 2;
  11.     coreDescriptorSetLayoutBinding[2].descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE;
  12.     coreDescriptorSetLayoutBinding[2].descriptorCount = 1;
  13.     coreDescriptorSetLayoutBinding[2].stageFlags = VK_SHADER_STAGE_COMPUTE_BIT;
  14.     coreDescriptorSetLayoutBinding[3].binding = 3;
  15.     coreDescriptorSetLayoutBinding[3].descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE;
  16.     coreDescriptorSetLayoutBinding[3].descriptorCount = 1;
  17.     coreDescriptorSetLayoutBinding[3].stageFlags = VK_SHADER_STAGE_COMPUTE_BIT;
  18.  
  19. // Create the insert pipeline
  20.     VkShaderModuleCreateInfo *insertModuleCreation = new VkShaderModuleCreateInfo();
  21.     insertModuleCreation->sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
  22.     insertModuleCreation->pNext = NULL;
  23.     insertModuleCreation->codeSize = raytrace_insert_compVK_size;
  24.     insertModuleCreation->pCode = reinterpret_cast<const uint32_t*>(raytrace_insert_compVK);
  25.     VK_CHECK_RESULT(vkCreateShaderModule(mDevice, insertModuleCreation, NULL, &mRaytracerInsertModule));
  26.     VkPipelineShaderStageCreateInfo* shaderStageCreateInfo = new VkPipelineShaderStageCreateInfo();
  27.     shaderStageCreateInfo->sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
  28.     shaderStageCreateInfo->stage = VK_SHADER_STAGE_COMPUTE_BIT;
  29.     shaderStageCreateInfo->module = mRaytracerInsertModule;
  30.     shaderStageCreateInfo->pName = "main";
  31.     VkDescriptorSetLayoutBinding* insertDescriptorSetLayoutBinding = new VkDescriptorSetLayoutBinding[5];
  32.     insertDescriptorSetLayoutBinding[0] = coreDescriptorSetLayoutBinding[0];
  33.     insertDescriptorSetLayoutBinding[1] = coreDescriptorSetLayoutBinding[1];
  34.     insertDescriptorSetLayoutBinding[2] = coreDescriptorSetLayoutBinding[2];
  35.     insertDescriptorSetLayoutBinding[3] = coreDescriptorSetLayoutBinding[3];
  36.     insertDescriptorSetLayoutBinding[4].binding = 4; // layout(std430, binding = 4) buffer insertionGeometry
  37.     insertDescriptorSetLayoutBinding[4].descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
  38.     insertDescriptorSetLayoutBinding[4].descriptorCount = 1;
  39.     insertDescriptorSetLayoutBinding[4].stageFlags = VK_SHADER_STAGE_COMPUTE_BIT;
  40.     insertDescriptorSetLayoutBinding[4].pImmutableSamplers = NULL;
  41.     VkComputePipelineCreateInfo* insertPipelineCreateInfo = new VkComputePipelineCreateInfo();
  42.     insertPipelineCreateInfo->sType = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO;
  43.     VkDescriptorSetLayoutCreateInfo* insertDescriptorSetLayoutCreateInfo = new VkDescriptorSetLayoutCreateInfo;
  44.     insertDescriptorSetLayoutCreateInfo->sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
  45.     insertDescriptorSetLayoutCreateInfo->pNext = NULL;
  46.     insertDescriptorSetLayoutCreateInfo->flags = 0;
  47.     insertDescriptorSetLayoutCreateInfo->bindingCount = 5; // only a single binding in this descriptor set layout.
  48.     insertDescriptorSetLayoutCreateInfo->pBindings = insertDescriptorSetLayoutBinding;
  49.     VkDescriptorSetLayout* insertDescriptorSetLayout = new VkDescriptorSetLayout();
  50.     VK_CHECK_RESULT(vkCreateDescriptorSetLayout(mDevice, insertDescriptorSetLayoutCreateInfo, NULL, insertDescriptorSetLayout));
  51.     VkPipelineLayoutCreateInfo* insertPipelineLayoutCreateInfo = new VkPipelineLayoutCreateInfo();
  52.     insertPipelineLayoutCreateInfo->sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO;
  53.     insertPipelineLayoutCreateInfo->setLayoutCount = 1;
  54.     insertPipelineCreateInfo->stage = *shaderStageCreateInfo;
  55.     insertPipelineLayoutCreateInfo->pSetLayouts = insertDescriptorSetLayout;
  56.     VK_CHECK_RESULT(vkCreatePipelineLayout(mDevice, insertPipelineLayoutCreateInfo, NULL, &mRaytracerInsertPipelineLayout));
  57.     insertPipelineCreateInfo->layout = mRaytracerInsertPipelineLayout;
  58.     VK_CHECK_RESULT(vkCreateComputePipelines(mDevice, VK_NULL_HANDLE, 1, insertPipelineCreateInfo, NULL, &mRaytracerInsertPipeline));
Advertisement
Add Comment
Please, Sign In to add comment