Почему мой VkPipeline возвращает значение null, даже если все остальные значения хорошие?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему мой VkPipeline возвращает значение null, даже если все остальные значения хорошие?

Сообщение Anonymous »

Код:

Код: Выделить всё

VkPipelineLayoutCreateInfo pipelineLayoutCreateInfo{ VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO };
pipelineLayoutCreateInfo.pushConstantRangeCount = 1;
pipelineLayoutCreateInfo.pPushConstantRanges = &pushConstant;

// Descriptor sets: one specific to ray tracing, and one shared with the rasterization pipeline
std::vector rtDescSetLayouts = { descriptorSetLayout, descriptorSetLayout };
pipelineLayoutCreateInfo.setLayoutCount = static_cast(rtDescSetLayouts.size());
pipelineLayoutCreateInfo.pSetLayouts = rtDescSetLayouts.data();

vkCreatePipelineLayout(device, &pipelineLayoutCreateInfo, nullptr, &pipelineLayout);

// Create Vulkan ray tracing pipeline create info structure
VkRayTracingPipelineCreateInfoKHR rayTracingPipelineCreateInfo = {};
rayTracingPipelineCreateInfo.sType = VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR;
rayTracingPipelineCreateInfo.stageCount = static_cast(shaderStages.size()); // Assuming you have shader stages
rayTracingPipelineCreateInfo.pStages = shaderStages.data(); // Shader stages information
rayTracingPipelineCreateInfo.groupCount = static_cast(shaderGroups.size()); // Number of ray tracing shader groups
rayTracingPipelineCreateInfo.pGroups = shaderGroups.data(); // Pointer to ray tracing shader groups
rayTracingPipelineCreateInfo.maxPipelineRayRecursionDepth = 1;
rayTracingPipelineCreateInfo.layout = pipelineLayout;

// Create Vulkan ray tracing pipeline
vkCreateRayTracingPipelinesKHR(device, nullptr, nullptr, 1, & rayTracingPipelineCreateInfo, nullptr, & pipeline);
Ошибка:
Я получаю сообщение об ошибке. Все остальные значения, кроме конвейера, являются хорошими значениями.
Я не знаю, почему конвейер всегда возвращает значение null.
Я пробовал переместить туда, где конвейер был создан.
И я добавил расширения, которые, как мне кажется, мне нужны:

Код: Выделить всё

const char* deviceExtension[] =
{
//Raytracing Extensions
VK_KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME,
VK_KHR_SWAPCHAIN_EXTENSION_NAME,
VK_KHR_MAINTENANCE3_EXTENSION_NAME,
VK_KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME,
VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME,
VK_KHR_DEFERRED_HOST_OPERATIONS_EXTENSION_NAME,
VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME,
VK_KHR_SPIRV_1_4_EXTENSION_NAME,
VK_KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME
};
Надеюсь, кто-нибудь сможет помочь.
Возвращаемое значение:
Возвращаемое значение.
Ошибки VUID:
VUID-VkRayTracingPipelineCreateInfoKHR-layout-07990(ERROR/SPEC): msgNum: 1919170136 — Ошибка проверки: [VUID-VkRayTracingPipelineCreateInfoKHR-layout-07990] Объект 0: handle = 0x535b6600000 00043, тип = VK_OBJECT_TYPE_SHADER_MODULE ; Объект 1: дескриптор = 0x612f93000000004e, тип = VK_OBJECT_TYPE_PIPELINE_LAYOUT; | Идентификатор сообщения = 0x72643658 | vkCreateRayTracingPipelinesKHR(): pCreateInfos[0].pStages[0] SPIR-V (VK_SHADER_STAGE_RAYGEN_BIT_KHR) использует слот дескриптора [Set 1 Binding 0] типа VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, но ожидается VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER или V K_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC или VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK. В спецификации Vulkan указано: если переменные ресурса объявлены в шейдере, а тип дескриптора не VK_DESCRIPTOR_TYPE_MUTABLE_EXT, слот дескриптора в макете должен соответствовать типу дескриптора (https://vulkan.lunarg.com/doc/view/1.3. 275.0/windows/1.3-extensions/vkspec.html#VUID-VkRayTracingPipelineCreateInfoKHR-layout-07990)
Объекты: 2
[0] 0x535b660000000043, тип: 15, имя: NULL
1 0x612f9300000000 4е, тип: 17, имя: NULL

Подробнее здесь: https://stackoverflow.com/questions/783 ... being-good
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»