VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU это девайс в облаке типа Google Stadia.
Вот ещё: https://docs.nvidia.com/grid/13.0/grid-vgpu-user-guide/index.html
В спеках GLSL написано
The function subgroupQuadBroadcast() returns the <value> from the invocation within the quad whose <gl_SubgroupInvocationID> % 4 is equal to <id>
https://github.com/KhronosGroup/GLSL/blob/master/extensions/khr/G… _subgroup.txt
Но если вывести gl_SubgroupInvocationID в фрагментном шейдере на NV, то получится 2 столбца:
0 16 | | 15 31
Получается что %4 не работает. Можно вывести свою формулу получения QuadID, но я не нашел правил как должны быть распределены индексы сабгруппы.
Хочу через subgroupQuadBroadcast получить соседние значения, а через QuadID определить направление.
То есть для QuadID=0 будет +1 к QuadID=1, а для QuadID=1 это будет -1.
upd: все норм, оказывается фильтрация все размыла
Заметил, что на Radeon'ах типы памяти с одинаковыми флагами повторяются по два раза:
Кто-нибудь знает, зачем так? Чем они отличаются? Один тип для буферов, другой для текстур?
Кто-нибудь интегрировал себе FSR2? Если да, то какие впечатления?
Уже fsr 3.0
ronniko
> Уже fsr 3.0
Нету на гитхабе - значит не существует. =)
MikeNew
> Кто-нибудь интегрировал себе FSR2?
Вам удалось собрать backend под Vulkan? У меня ошибки при компиляции проекта ffx_shader_permutations_vk
prowkan
> Вам удалось собрать backend под Vulkan? У меня ошибки при компиляции проекта
> ffx_shader_permutations_vk
Пока еще не пытался, сам хотел узнать как оно.
Но планирую.
Хронос написали пост про копирование имеджей на хосте: https://www.khronos.org/blog/copying-images-on-the-host-in-vulkan… id=afeaac8f10
HolyDel
От этого расширения мало толку, всё равно чтение текстур упирается в диск.
Решил воспользоваться шедулером от рейтреса и сделал такую цепочку вызовов.
Но на 3й рекурсии payload зануляется.
raygen -> callable -> callable, callable | | callable callable // - тут payload == 0 callable callable //
Размер стэка выставляю сам, потому что по-дефолту 2*callable, а у меня они идут глубже, может это баг в драйвере, потому что никто так не делает?
upd: оказывается забыл поставить dynamic state с stack size, а слои валидации ничего не сказали.
Столкнулся с ошибкой слоёв валидации когда пытаюсь рисовать в рендер таргет и потом использовать его как текстуру.
uint32_t bufferIndex = swapchain->acquireNextImage(presentFinished, nullptr); waitFences[bufferIndex]->wait( ); waitFences[bufferIndex]->reset( ); { graphicsQueue->submit( rtCmdBuffer, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, presentFinished, // Wait for swapchain rtSemaphore, // Signal when render-to-texture finished nullptr); graphicsQueue->submit( commandBuffers[bufferIndex], VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, rtSemaphore, // Wait for render-to-texture renderFinished, // Signal when command buffer execution finished waitFences[bufferIndex]); //graphicsQueue->waitIdle(); } graphicsQueue->present( swapchain, bufferIndex, renderFinished);
Здесь сказано
pSignalSemaphores is a pointer to an array of VkSemaphore handles which will be signaled when the command buffers for this batch have completed execution.
pWaitSemaphores is a pointer to an array of VkSemaphore handles upon which to wait before the command buffers for this batch begin execution.
Я так и делаю, у меня есть rtSemaphore который должен задавать синхронизацию между двумя командными буферами. Т. е. следующий комманд буфер будет ждать пока первый не просигналит что завершил операции. Но это не работает, я получаю ошибку
vkQueueSubmit(): pSubmits[0].pCommandBuffers[0] VkCommandBuffer 0x18aa59576b0[] is already in use and is not marked for simultaneous use.
когда начинается второй кадр.
Если добавить вызов vkQueueWaitIdle() в конце то валидация перестаёт ругаться, но я не понимаю почему я должен ждать очередь если фенс уже ожидает. Проблема возникает именно с промежуточным команд буфером rtCmdBuffer, если в кадре используется только один - то ошибки нет.
v1c
Это не ошибка в слоях валидации. Зачем ты сделал массив из vkFence и vkCommandBuffer?
Если хотел Buffers on the Flight, то все командные буферы и семафоры должны быть так же массивами.
У тебя как раз командный буфер rtCmdBuffer который в 0 кадре пишется на стороне CPU,
в кадре 1 так же пишется на стороне CPU и потенциально читается на GPU при исполнении команд с кадра 0,
все из-за того что у тебя не ожидается предыдущий кадр, так как массив из vkFence
IBets
> Зачем ты сделал массив из vkFence и vkCommandBuffer?
vkCmdBeginRenderPass на front и back buffers.
v1c
> vkCmdBeginRenderPass на front и back buffers.
Это то понятно. Имелось ввиду почему ртшный коммандбаффер и ртшные примитивы синхронизации в одном экземпляре, а не массивом?