Войти
ПрограммированиеФорумГрафика

Vulkan API (вышел!) (724 стр)

Страницы: 1723 724 725 726732 Следующая »
#10845
14:52, 15 ноя 2023

Я делал так:
Назначал каждому пассу его dependecy level по "версиям" ресурса
В пределах одного dependency level все пассы можно выполнить параллельно.
Дальше простая логика, при переходе к рендеру следующего dependency level сортируем пассы так, что количество трансферов минимально по сумме всех трансферов всех зависимостей уровня (тут n^2 задача коммивояджера по closest neighbour). Наверное это субооптимально но для простых случаев нормально работает

#10846
16:57, 15 ноя 2023

CatsCanFly
Ну так то да. У меня уже сделаны dependency level (как в посте я описал: 1, 2, 3). Как раз остановился на мысли перебором находить. Хотел узнать спросил, как крутые дядьки делают. Оказалось, отцы делают VK_SHARING_MODE_CONCURRENT :)

#10847
17:37, 15 ноя 2023

Imaginary unit
> VK_SHARING_MODE_CONCURRENT
Только так ты можешь читать из 2х очередей 1 ресурс.

#10848
18:19, 15 ноя 2023

Тут скорее большая проблема как в принципе рендерграфу самостоятельно определять что исполнить в графической а что в компьют очереди. Кидать все компьют пассы в компьют очередь очевидно плохая идея. Только ручное помечание работает, но идет в разрез с самой идеей рендерграфов

#10849
14:55, 24 ноя 2023

Кто-нибудь пробовал VK_KHR_pipeline_executable_properties ?
Почему-то для рейтрейс пайплайна не выдает статистику, а для всех остальных даже размер стэка пишет, хотя он нужен только для трассировки.

#10850
12:36, 26 ноя 2023

/A\
Пробовал, но без лучей.Посмотрел что работает, выдаёт инфу, отключил в конфиге, оставив проанализировать подробнее на попозже

#10851
9:40, 27 ноя 2023

Обновил драйвера на NV и появился интересный баг - 214Мб общей памяти занято уже при старте, расширение memory_budget как раз выдает 0 на доступную память. После перезагрузки ПК память снова доступна.

Драйвера отсюда https://developer.nvidia.com/vulkan-driver это типа бета с новыми расширениями. Попробую нормальные поставить.

#10852
11:40, 30 ноя 2023

А можно ли в VkShaderCreateInfoEXT в поле pCode пихать один и тот же spirv для разных shader stage?

Допустим, что я слинковал spirv c помощью glslang:

glslang::TShader vertShader{};
glslang::TShader fragShader{};
// тут компилируем шейдеры...
glslang::TProgram program;
program.addShader(vertShader);
program.addShader(fragShader);
program.link();
auto spirv = GlslangToSpv(program);

А потом делаем типа:

std::vector<VkShaderCreateInfoEXT> cis;
for (auto stage : [VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_FRAGMENT_BIT])
{
    VkShaderCreateInfoEXT ci
    {
        .stage = stage,
        .pCode = spirv,
        .pName = ???, // какой entry point указывать
        ...
    };
    cis.push_back(ci);
}
vkCreateShadersEXT(device, 2, cis.data());
#10853
11:44, 30 ноя 2023

Imaginary unit
> .pName = ???, // какой entry point указывать
можно FSmain, VSmain да и вообще любые, только не знаю поддерживает ли glslang множество entry point.

#10854
12:04, 30 ноя 2023

/A\
Ок.
Зайду с другой стороны :)
Всё это выросло из моего нежелания компилить шейдеры по отдельности, а потом мержить "руками" их дескриптор сеты. Вот и подумалось, что проще переложить это на program.link(), а потом уже дергать оттуда reflection.

#10855
12:32, 30 ноя 2023

Это поддерживает spirv но не поддерживает glsl насколько помню. Вот с hlsl можно такие многостадийные шейдеры компилить.
Вообще можно мержить результаты рефлекшена, это не так сложно.
Да и вообще это кажется больше для редактора какого то разве что удобно, в рантайме удоюно иметь "стандартные" pipeline layout даже если там есть то что не используется конкретным шейдером

#10856
12:50, 30 ноя 2023

Imaginary unit
> Хотел узнать спросил, как крутые дядьки делают. Оказалось, отцы делают
> VK_SHARING_MODE_CONCURRENT :)
Вот уж не знал что я отец. Я же просто взял код с vulkantutorials. :))

#10857
13:01, 30 ноя 2023

Imaginary unit
Можно отдельно слинковать и достать рефлекшн. Больше всего времени тратится на оптимизацию spirv, а тут до нее не дойдет.

#10858
13:16, 30 ноя 2023

А если использовать VK_SHADER_STAGE_ALL для VkDescriptorSetLayoutBinding::stageFlags будет ухудшение производительности, если на самом деле дескриптор используется не на всех stage?

#10859
13:17, 30 ноя 2023

CatsCanFly
> Вообще можно мержить результаты рефлекшена, это не так сложно.
Ну там надо проверять совместимость одного и того же биндинга на разных стэйджах...

Страницы: 1723 724 725 726732 Следующая »
ПрограммированиеФорумГрафика