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

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

Страницы: 1338 339 340 341375 Следующая »
#5070
13:40, 25 фев. 2019

innuendo
> ты поработай на реальном проекте - ещё не такое увидишь :)
вулкан мало где есть, а так я уже насмотрелся...


#5071
(Правка: 14:51) 14:51, 25 фев. 2019

/A\

а так я уже насмотрелся...

ты про свой Vulkan генератор кода ? :)
#5072
15:18, 25 фев. 2019

Ziltop
> ты про свой Vulkan генератор кода ? :)
Я про то, что везде преобладает кривой код и медленные алгоритмы. Оптимизация это дорого и требует больших знаний.

#5073
8:24, 26 фев. 2019

/A\
> И реализация рендера оставляет желать лучшего

предлагаю посмотреть UE4 с рендером сабжа, особенно с async compute

#5074
12:31, 26 фев. 2019

innuendo
> предлагаю посмотреть UE4 с рендером сабжа
В коде не так просто найти проблемы, надо смотреть как он работает.
Что конкретно тебе там не нравится?

#5075
12:40, 26 фев. 2019

/A\
> В коде не так просто найти проблемы, надо смотреть как он работает.

ну так сделай как ты делал с X4

#5076
13:00, 26 фев. 2019

innuendo
Где мне взять игру на UE4 с вулкан рендером?

#5077
13:03, 26 фев. 2019

/A\
> Где мне взять игру на UE4 с вулкан рендером?

просто скачай UE4 с гита - на простой сцене запуск из VS

#5078
18:29, 26 фев. 2019

innuendo

// VulkanRenderTargets.cpp, line 1470
FinalLayout = (Surface.UEFlags & TexCreate_RenderTargetable) ? VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL : VK_IMAGE_LAYOUT_GENERAL;
Они считают что раз создавли без флага рендер таргета, то можно использовать general layout для рендера в текстуру? В доках это не разрешается.
// VulkanRenderTargets.cpp, line 1559
        VkPipelineStageFlags SourceStage = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, DestStage = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT;
        switch (PendingTransition.TransitionPipeline)
        {
        case EResourceTransitionPipeline::EGfxToCompute:
          SourceStage = VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT;
          DestStage = VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT;
          break;
        case EResourceTransitionPipeline::EComputeToGfx:
          SourceStage = VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT;
          DestStage = VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT;
          break;
        case EResourceTransitionPipeline::EComputeToCompute:
          SourceStage = VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT;
          DestStage = VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT | VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT;
          break;
        default:
          ensure(0);
          break;
        }
Зачем-то для EComputeToCompute добавили флаг all_graphics, но везде забыли про draw_indirect, а этот флаг нужен для команд vkCmdDispatchIndirect.

Но вообще я запустил трейс дума, где все барьеры содержат все этапы пайплайна (all_commands), как в Х4 сделано, и разница в производительности не заметна. Так что вулкан или нет правильно написаный алгоритм важнее.

#5079
2:21, 27 фев. 2019

/A\
> Но вообще я запустил трейс дума, где все барьеры содержат все этапы пайплайна
> (all_commands), как в Х4 сделано, и разница в производительности не заметна
мне вот очень интересно, какие механизмы в вулкане нужны, чтобы в демках ими щеголять, а от каких можно реальный профит получить. потому что на реализацию некоторых (те же барьеры с максимально точными параметрами, например), уйдёт гораздо больше времени, чем получишь от них профита. а от некоторых(вроде байндинга дескриптор сетов вместо установки юниформов) можно получить неиллюзорный профит right off the bat.

#5080
7:58, 27 фев. 2019

/A\
> vkCmdDispatchIndirect.

у них есть реализация в апишках, но самого вызова RHIDispatchIndirectComputeShader нету в платформонезависимом коде

#5081
9:19, 27 фев. 2019

Вас не затруднит подсказать нубу где я мог стенсил тест в конвейре недонастроить, что такая вот фигня с прозрачностью вылазит.
Это если сначала рисуем землю, а потом деревья:

Изображение

А это если сначала деревья, а потом землю:

Изображение

В обоих конвейерах:

  VkPipelineDepthStencilStateCreateInfo depthStencil = {};
  depthStencil.sType = VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO;
  depthStencil.depthTestEnable = VK_TRUE;
  depthStencil.depthWriteEnable = VK_TRUE;
  depthStencil.depthCompareOp = VK_COMPARE_OP_LESS;
  depthStencil.depthBoundsTestEnable = VK_FALSE;
  depthStencil.stencilTestEnable = VK_FALSE;

Что я забыл?

#5082
9:21, 27 фев. 2019

MikeNew
> depthStencil.depthWriteEnable = VK_TRUE;

?

#5083
(Правка: 9:42) 9:39, 27 фев. 2019

Я не знаю хорошо ли такой стиль. Но меня он пугает.

typedef enum VkPipelineCacheHeaderVersion {
    VK_PIPELINE_CACHE_HEADER_VERSION_ONE = 1,
    VK_PIPELINE_CACHE_HEADER_VERSION_BEGIN_RANGE = VK_PIPELINE_CACHE_HEADER_VERSION_ONE,
    VK_PIPELINE_CACHE_HEADER_VERSION_END_RANGE = VK_PIPELINE_CACHE_HEADER_VERSION_ONE,
    VK_PIPELINE_CACHE_HEADER_VERSION_RANGE_SIZE = (VK_PIPELINE_CACHE_HEADER_VERSION_ONE - VK_PIPELINE_CACHE_HEADER_VERSION_ONE + 1),
    VK_PIPELINE_CACHE_HEADER_VERSION_MAX_ENUM = 0x7FFFFFFF
} VkPipelineCacheHeaderVersion;

Это типа как в игре загадай число а я угадаю ?! :)
VK_PIPELINE_CACHE_HEADER_VERSION_RANGE_SIZE = (VK_PIPELINE_CACHE_HEADER_VERSION_ONE - VK_PIPELINE_CACHE_HEADER_VERSION_ONE + 1)

Почему нельзя было написать VK_PIPELINE_CACHE_HEADER_VERSION_RANGE_SIZE =  1 ?!
Это немного напрягает и наталкивает на мысль что вот таких подобных костылей в Вулкане может быть много.
Что огорчает. И ты понимаешь что колхоз-стаил есть и в Вулкане.

#5084
9:45, 27 фев. 2019

innuendo
> MikeNew
> > depthStencil.depthWriteEnable = VK_TRUE;
>
> ?
Тогда сортировка не работает, дальнее дерево заслонят ближнее.

Изображение
Страницы: 1338 339 340 341375 Следующая »
ПрограммированиеФорумГрафика