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

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

Страницы: 1551 552 553 554561 Следующая »
#8265
19:00, 3 мар. 2021

MAMOHT-92
> а как можно обращаться к ресурсу, кторого нет?
А кто сказал, что к ним надо обращаться?
У меня дескриптор сет для текстур сцены на много-много дескрипторов, из которых используется только парочка, потому что я загрузил корнел бокс. Зачем мне создавать бесполезный dummy и заполнять им весь десриптор сет? Выглядит как не zero cost abstraction.


#8266
23:44, 4 мар. 2021

Есть AMD Vega 6 на Ryzen 3 PRO 4350G и AMD RX 560

На Windows 10 если монитор подключить к DysplayPort в материнке(к встроенной Vega 6)
Vulkan выдает только 1 vkPhysicalDevice AMD Radeon (TM), Хотя Direct3D12 выдает два GPU.

Переключаю Монитор на AMD RX 560 получаю два GPU. Снова виноват убогий легаси ГЛ судя по посту Suslik'а ?

Linux Manjaro

AMD RX 560 вылетает с AMDVLK

Vulkan driver info: Conformance Version: 1.2.0.2 ID: VK_DRIVER_ID_AMD_OPEN_SOURCE Name: AMD open-source driver Info:

но работает с Mesa:

9460:Wed Feb 10 14:59:01 2021 Vulkan driver info: Conformance Version: 1.2.3.0 ID: VK_DRIVER_ID_MESA_RADV Name: radv Info: Mesa 20.3.4 (ACO)

Подробно вылет не дебажил, возможно заведу баг.

#8267
8:16, 5 мар. 2021

Andrey
> убогий

не надоело?
#8268
(Правка: 13:00) 12:45, 7 мар. 2021

Опять вопрос с синхронизацией.
Есть тупейшая ситуация: рисую чего-то в изображение, потом делаю blitImage из него в другое изображение и там что-то считаю. Так вот, как правильно указать, что надо сделать зависимость между рисованием в изображение и blit операцией? У функции pipelineBarrier два параметра, не понятно толком за что отвечающих, и  есть ещё vk::ImageMemoryBarrier у которого dst_transfer_mask и src_transfer_mask, которые не понятно во что выставлять.

#8269
12:49, 7 мар. 2021

Panzerschrek[CN]
> У функции pipelineBarrier два параметра, непонятно тольком за что отвечающих

там всё понятно - смотри какие конкретные у тебя стейджи

> не понятно
> непонятно

понятно, только как делать exit(-1) ?
#8270
(Правка: 13:01) 12:57, 7 мар. 2021

innuendo
> там всё понятно - смотри какие конкретные у тебя стейджи
Ничего не понятно. Спецификация Vulkan - талмуд, который ты не осилишь за разумное время.
Vulkan - очередная инкарнация убогого API. Вместо явного задания графа зависимостей или автоматического поиска зависимостей по записям/чтениям, там влепили ручную расстановку барьеров с неясными параметрами.

#8271
13:07, 7 мар. 2021

Panzerschrek[CN]
> Ничего не понятно.
https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/… eBarrier.html
дальше
https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/… FlagBits.html

#8272
13:16, 7 мар. 2021

Panzerschrek[CN]
> Спецификация Vulkan - талмуд, который ты не осилишь за разумное время.

тебе шо в итоге нужно ? кубик нарисовать или compute shaders?

#8273
(Правка: 13:59) 13:53, 7 мар. 2021

innuendo
Самозабанься, клоун.

Делаю наиболее тупой барьер - чтобы все записи завершились до любых чтений.

command_buffer.pipelineBarrier(
  vk::PipelineStageFlagBits::eTopOfPipe,
  vk::PipelineStageFlagBits::eBottomOfPipe,
  vk::DependencyFlagBits(),
  { {vk::AccessFlagBits::eMemoryWrite, vk::AccessFlagBits::eMemoryRead} },
  {},
  {});
Результат - хрен вам. Наблюдаются эффекты рассинхронизации.

#8274
(Правка: 15:53) 14:05, 7 мар. 2021

Panzerschrek[CN]
> хрен вам
https://gpuopen.com/learn/vulkan-barriers-explained/

> ommand_buffer.pipelineBarrier(
> vk::PipelineStageFlagBits::eTopOfPipe,
> vk::PipelineStageFlagBits::eBottomOfPipe

не знаю в каком порядке у тебя там в коде обёртке - но должно быть bottom->top для самого жёсткого случая

#8275
16:49, 7 мар. 2021

innuendo
> должно быть bottom->top для самого жёсткого случая
Даже так не работает, артефакты рассинхронизации остаются. Даже если понатыкать вызовов после каждой операции.
Я же говорю, убогое API.

#8276
(Правка: 19:59) 18:48, 7 мар. 2021

Panzerschrek[CN]
А что ты image layout не переводил что ли, или у тебя GENERAL? И да ты перепутал src stage и dst stage, как сказал innuendo

#8277
19:59, 7 мар. 2021

IBets
> А что ты image layout не переводил что ли?
Он переводится по окончании render pass.

> ты перепутал src stage и dst stage
Что так, что эдак - результат одинаковый. Отрисовка идёт с не полностью готовым изображением.

#8278
(Правка: 20:06) 20:06, 7 мар. 2021

Сейчас Инуендо должен предложит взять OpenGL.
И не мучатся.

#8279
(Правка: 20:20) 20:10, 7 мар. 2021

Panzerschrek[CN]
> Вместо явного задания графа зависимостей или автоматического поиска
> зависимостей по записям/чтениям, там влепили ручную расстановку барьеров с
> неясными параметрами.
зачем тебе вулкан-то в таком случае? бери любую реализацию фреймграфа (на dx12 или на vulkan) и пользуйся. вообще рендерить хоть что-то на вулкане, не имея рендерграфа (своего или готового) — это мазохизм.

Panzerschrek[CN]
> Ничего не понятно. Спецификация Vulkan - талмуд, который ты не осилишь за
> разумное время.
> Vulkan - очередная инкарнация убогого API. Вместо явного задания графа
> зависимостей или автоматического поиска зависимостей по записям/чтениям, там
> влепили ручную расстановку барьеров с неясными параметрами.
если ты натыкал как попало барьеров, не понимая, что они делают, то вероятность того, что они будут работать правильно, стремится к нулю. причём слева. например, если у тебя изображение модифицируется на compute queue, а используется на rendering queue, то, ясное дело, нужно барьером передавать владение, иначе ничего работать не будет. основная ошибка (я считаю) — это думать о memory barriers как об execution barriers, которые что-то там ещё с памятью делают. на самом деле если ты просто поставишь задержку между двумя командами, где одна пишет память, а другая читает, то нет никакой гарантии, что вторая команда увидит изменения первой, какую бы ты долгую задрежку ни поставил между ними, хоть час. потому что если ты просто ставишь execution barrier, ты не говоришь, какую память нужно загружать в какие кеши и когда её выгружать, поэтому она может не выгрузиться вообще никогда. гораздо плодотворнее думать о барьрах как о метках, когда данные из локального кеша памяти можно выгружать и когда их загружать обратно. причём с точки зрения API, у каждой стадии пайплайна(stage) и у каждого способа использования памяти(mask) кеш свой. на практике, конечно, они будут часто одним и тем же, либо вообще кеша может не быть, но тебя это вообще волновать не должно, просто указываешь их всегда, будто они все существуют раздельно.

Panzerschrek[CN]
> command_buffer.pipelineBarrier(
> vk::PipelineStageFlagBits::eTopOfPipe,
> vk::PipelineStageFlagBits::eBottomOfPipe,
> vk::DependencyFlagBits(),
> { {vk::AccessFlagBits::eMemoryWrite, vk::AccessFlagBits::eMemoryRead} },
> {},
> {});
это не барьер, это чёрт знает что. нормально объясняется, например, тут https://themaister.net/blog/2019/08/14/yet-another-blog-explainin… chronization/

Страницы: 1551 552 553 554561 Следующая »
ПрограммированиеФорумГрафика