Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- VkDescriptorSetLayoutBinding* coreDescriptorSetLayoutBinding = new VkDescriptorSetLayoutBinding[4];
- coreDescriptorSetLayoutBinding[0].binding = 0;
- coreDescriptorSetLayoutBinding[0].descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE;
- coreDescriptorSetLayoutBinding[0].descriptorCount = 1;
- coreDescriptorSetLayoutBinding[0].stageFlags = VK_SHADER_STAGE_COMPUTE_BIT;
- coreDescriptorSetLayoutBinding[1].binding = 1;
- coreDescriptorSetLayoutBinding[1].descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE;
- coreDescriptorSetLayoutBinding[1].descriptorCount = 1;
- coreDescriptorSetLayoutBinding[1].stageFlags = VK_SHADER_STAGE_COMPUTE_BIT;
- coreDescriptorSetLayoutBinding[2].binding = 2;
- coreDescriptorSetLayoutBinding[2].descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE;
- coreDescriptorSetLayoutBinding[2].descriptorCount = 1;
- coreDescriptorSetLayoutBinding[2].stageFlags = VK_SHADER_STAGE_COMPUTE_BIT;
- coreDescriptorSetLayoutBinding[3].binding = 3;
- coreDescriptorSetLayoutBinding[3].descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE;
- coreDescriptorSetLayoutBinding[3].descriptorCount = 1;
- coreDescriptorSetLayoutBinding[3].stageFlags = VK_SHADER_STAGE_COMPUTE_BIT;
- // Create the insert pipeline
- VkShaderModuleCreateInfo *insertModuleCreation = new VkShaderModuleCreateInfo();
- insertModuleCreation->sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
- insertModuleCreation->pNext = NULL;
- insertModuleCreation->codeSize = raytrace_insert_compVK_size;
- insertModuleCreation->pCode = reinterpret_cast<const uint32_t*>(raytrace_insert_compVK);
- VK_CHECK_RESULT(vkCreateShaderModule(mDevice, insertModuleCreation, NULL, &mRaytracerInsertModule));
- VkPipelineShaderStageCreateInfo* shaderStageCreateInfo = new VkPipelineShaderStageCreateInfo();
- shaderStageCreateInfo->sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
- shaderStageCreateInfo->stage = VK_SHADER_STAGE_COMPUTE_BIT;
- shaderStageCreateInfo->module = mRaytracerInsertModule;
- shaderStageCreateInfo->pName = "main";
- VkDescriptorSetLayoutBinding* insertDescriptorSetLayoutBinding = new VkDescriptorSetLayoutBinding[5];
- insertDescriptorSetLayoutBinding[0] = coreDescriptorSetLayoutBinding[0];
- insertDescriptorSetLayoutBinding[1] = coreDescriptorSetLayoutBinding[1];
- insertDescriptorSetLayoutBinding[2] = coreDescriptorSetLayoutBinding[2];
- insertDescriptorSetLayoutBinding[3] = coreDescriptorSetLayoutBinding[3];
- insertDescriptorSetLayoutBinding[4].binding = 4; // layout(std430, binding = 4) buffer insertionGeometry
- insertDescriptorSetLayoutBinding[4].descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
- insertDescriptorSetLayoutBinding[4].descriptorCount = 1;
- insertDescriptorSetLayoutBinding[4].stageFlags = VK_SHADER_STAGE_COMPUTE_BIT;
- insertDescriptorSetLayoutBinding[4].pImmutableSamplers = NULL;
- VkComputePipelineCreateInfo* insertPipelineCreateInfo = new VkComputePipelineCreateInfo();
- insertPipelineCreateInfo->sType = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO;
- VkDescriptorSetLayoutCreateInfo* insertDescriptorSetLayoutCreateInfo = new VkDescriptorSetLayoutCreateInfo;
- insertDescriptorSetLayoutCreateInfo->sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
- insertDescriptorSetLayoutCreateInfo->pNext = NULL;
- insertDescriptorSetLayoutCreateInfo->flags = 0;
- insertDescriptorSetLayoutCreateInfo->bindingCount = 5; // only a single binding in this descriptor set layout.
- insertDescriptorSetLayoutCreateInfo->pBindings = insertDescriptorSetLayoutBinding;
- VkDescriptorSetLayout* insertDescriptorSetLayout = new VkDescriptorSetLayout();
- VK_CHECK_RESULT(vkCreateDescriptorSetLayout(mDevice, insertDescriptorSetLayoutCreateInfo, NULL, insertDescriptorSetLayout));
- VkPipelineLayoutCreateInfo* insertPipelineLayoutCreateInfo = new VkPipelineLayoutCreateInfo();
- insertPipelineLayoutCreateInfo->sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO;
- insertPipelineLayoutCreateInfo->setLayoutCount = 1;
- insertPipelineCreateInfo->stage = *shaderStageCreateInfo;
- insertPipelineLayoutCreateInfo->pSetLayouts = insertDescriptorSetLayout;
- VK_CHECK_RESULT(vkCreatePipelineLayout(mDevice, insertPipelineLayoutCreateInfo, NULL, &mRaytracerInsertPipelineLayout));
- insertPipelineCreateInfo->layout = mRaytracerInsertPipelineLayout;
- VK_CHECK_RESULT(vkCreateComputePipelines(mDevice, VK_NULL_HANDLE, 1, insertPipelineCreateInfo, NULL, &mRaytracerInsertPipeline));
Advertisement
Add Comment
Please, Sign In to add comment