MikeNew
> Что такое fsq? Гугл не знает
full screen quad - забей на вулкан пока не будешь знать техники
MikeNew
> VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL
я же в самом начале говорил, что лейаут должен быть depth_read_only, тогда можно делать и тест глубины и читать из шейдера
/A\
> я же в самом начале говорил, что лейаут должен быть depth_read_only, тогда
> можно делать и тест глубины и читать из шейдера
Ах ты ж блин...
Моя невнимательность определенно когда-нибудь убьет меня.
Огромное тебе спасибо, теперь все работает.
И лишний проход не понадобился, прекрасно же! Таким решением я удовлетворен целиком и полностью.
innuendo
> full screen quad - забей на вулкан пока не будешь знать техники
Ты предлагаешь учится на устаревшем апи. Не лучше ли одновременно учить теорию и работать с новым? Потом переучиваться не придется.
С вулканом у меня же движется, хоть и со скрипом.
MikeNew
> Ты предлагаешь учится на устаревшем апи. Не лучше ли одновременно учить теорию
> и работать с новым? Потом переучиваться не придется.
> С вулканом у меня же движется, хоть и со скрипом.
мне кажется, учиться с конца вулкану (взять "работающий" пример с шедоумеппингом и допиливать его) — это очень плохая затея. примеры показывают, как пользоваться API и ни один из них не показывает, как вокруг него строить рендер. так можно поступать со всякими ущербными старыми легаси GAPI, которыми вообще при желании можно было без фреймворка пользоваться и просто лепить рендер сразу вокруг них. vulkan'ом без фреймворка пользоваться вообще нельзя. после того, как создан контекст вулкана и первый треугольник, надо не за более навороченный пример браться, а посмотреть на него и понять, почему этот подход не масштабируется. дальше нужно читать, что уже придумали люди в этом направлении, хотя бы http://themaister.net/blog/2017/08/15/render-graphs-and-vulkan-a-deep-dive/ или от фростбайта пейперы, долго читать http://themaister.net/blog/2019/08/14/yet-another-blog-explaining… chronization/ до тех пор, пока не сложится план, как написать код, который позволит полностью избежать подобных ошибок в будущем. это не ты должен копаться, что там подключено и какой там барьер поставлен, а автоматизированная система, которую ты написал ранее специально, чтобы таких ошибок не могло возникнуть. ты сейчас пытаешься ковшом от экскаватора вручную себе яму для компоста выкопать.
Suslik
> мне кажется, учиться с конца вулкану (взять "работающий" пример с
> шедоумеппингом и допиливать его)
Ну я так не извращался, я сначала долго вникал в Vulkan Tutorial.
Другое дело что там только самые основы.
Suslik
> так можно поступать со всякими ущербными старыми легаси GAPI, которыми вообще
> при желании можно было без фреймворка пользоваться и просто лепить рендер сразу
> вокруг них. vulkan'ом без фреймворка пользоваться вообще нельзя
о как, возьму на заметку
Suslik
Рендер граф нужен если хочешь не напрягаясь использовать вулкан, но его писать долго.
Расставлять барьеры вручную не так уж плохо, но мне вот быстро надоело об этом задумываться)
А твой рендер граф умеет переводить лейаут в depth_read_only если нет теста глубины? Я такой случай начал поддерживать только когда запустил трейс дума и он упал из-за неправильного лейаута))
/A\
> Расставлять барьеры вручную не так уж плохо, но мне вот быстро надоело об этом
> задумываться)
ну можно ставить top->bottom барьеры :)
а твой сцене граф сам подбирает стейджи да ?
innuendo
> а твой сцене граф сам подбирает стейджи да ?
конечно
/A\
> А твой рендер граф умеет переводить лейаут в depth_read_only если нет теста
> глубины? Я такой случай начал поддерживать только когда запустил трейс дума и
> он упал из-за неправильного лейаута))
core->GetRenderGraph()->AddPass( legit::RenderGraph::RenderPassDesc( ) .SetDepthAttachment( viewportResources->shadowMap.imageViewProxy->Id( ), vk::AttachmentLoadOp::eClear) //вот тут при желании можно указать readonly, но я не заморачивался .SetRenderAreaExtent( shadowMapExtent) .SetProfilerInfo( legit::Colors::amethyst, "ShadowPass") .SetRecordFunc( [this, passData]( legit::RenderGraph::RenderPassContext passContext) { });
вообще в основе моего фреймграфа для расстановки барьеров изображений лежит такая структура, которую легко расширять для любого нового юзкейса:
enum struct QueueFamilyTypes { Graphics, Transfer, Compute, Present, Undefined }; struct ImageAccessPattern { vk::PipelineStageFlags stage; vk::AccessFlags accessMask; vk::ImageLayout layout; QueueFamilyTypes queueFamilyType; }; struct ImageSubresourceBarrier { ImageAccessPattern accessPattern; ImageAccessPattern dstAccessPattern; }; enum struct ImageUsageTypes { GraphicsShaderRead, GraphicsShaderReadWrite, ComputeShaderRead, ComputeShaderReadWrite, TransferDst, TransferSrc, ColorAttachment, DepthAttachment, Present, None, Unknown //means it can be anything }; ImageAccessPattern GetSrcImageAccessPattern(ImageUsageTypes usageType) { ImageAccessPattern accessPattern; switch ( usageType) { case ImageUsageTypes::GraphicsShaderRead: { accessPattern.stage = vk::PipelineStageFlagBits::eVertexShader; accessPattern.accessMask = vk::AccessFlags( ); accessPattern.layout = vk::ImageLayout::eShaderReadOnlyOptimal; accessPattern.queueFamilyType = QueueFamilyTypes::Graphics; }break; ... } return accessPattern; } ImageAccessPattern GetDstImageAccessPattern( ImageUsageTypes usageType) { ImageAccessPattern accessPattern; switch ( usageType) { case ImageUsageTypes::GraphicsShaderRead: { accessPattern.stage = vk::PipelineStageFlagBits::eVertexShader; accessPattern.accessMask = vk::AccessFlagBits::eShaderRead; accessPattern.layout = vk::ImageLayout::eShaderReadOnlyOptimal; accessPattern.queueFamilyType = QueueFamilyTypes::Graphics; }break; ... } return accessPattern; }
Suslik
> вот тут при желании можно указать readonly, но я не заморачивался
А я еще больше заморочился и если у всех дроуколов пасса нет записи в глубину, то ставится ридонли
/A\
> А я еще больше заморочился и если у всех дроуколов пасса нет записи в глубину,
> то ставится ридонли
у меня рендерграф вообще ничего о дроколлах не знает. для него информация о том, что делают дроколлы, является входным параметром. у нас в poe, например, для каждого пасса фиксировано, используется в нём буфер глубины или нет, пишется в него или нет, дроколлы не имеют право это сами менять.
Suslik
> у нас в poe,
так вы уже сделали порт под новые апи ?
innuendo
на exilecon можно было поиграть в демку mobile версии, которая через moltenvk работала на новом ойфоне.