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

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

Страницы: 1785 786 787 788 789 790 Следующая »
#11820
22:26, 12 янв 2026

}:+()___ [Smile]
> как оно по скорости по сравнению с предварительной заливкой в DEVICE_LOCAL буфер?
По идее ресурсы доступные для CPU работают Медленее на GPU. Причём аналогично для Direct3D12(D3D12_HEAP_TYPE_DEFAULT) и Metal(MTLStorageModePrivate).

#11821
22:54, 12 янв 2026

как оно по скорости по сравнению с предварительной заливкой в DEVICE_LOCAL буфер?

Медленней заметно (прям десятки fps)

#11822
0:03, 13 янв 2026

Имеется в виду разница в скорости у "рисования из host-буффера" и "заливки в device-буффер + рисования из него".
Т. е. имеет смысл организовывать заливку самому или проще рисовать сразу из host-буффера?
Буфер динамический и обновляется каждый кадр. Статику понятно, что заливать надо.

#11823
6:25, 13 янв 2026

}:+()___ [Smile]
>
> Буфер динамический и обновляется каждый кадр.
В таком случае динамический может быть быстрей, но попробуй сделать два Ring Buffer'а. Заливаешь в host копируешь в device local. А буфер динамический большой? Persistent mapping пробовал вместо копирования?

#11824
14:45, 13 янв 2026

Andrey
> В таком случае динамический может быть быстрей, но попробуй сделать два Ring Buffer'а.
У меня сейчас два host-буффера, в которые я поочередно заливаю и рисую. Проблема в том, что у меня нет железа без DEVICE_LOCAL + HOST_VISIBLE памяти, так что мои тесты нерепрезентативные.

> А буфер динамический большой?
Пока маленький, но вопрос на перспективу: стоит городить специальную инфраструктуру для стриминга или можно просто рисовать из host-буффера не заморачиваясь.

> Persistent mapping пробовал вместо копирования?
Ну так в сабже это техника по умолчанию.

#11825
17:16, 13 янв 2026

}:+()___ [Smile]
> стоит городить специальную инфраструктуру для стриминга или можно просто рисовать из host-буффера не заморачиваясь.
а что стримить? собираешься? геометрию при движении камеры? подгрузка уровней? если такие задачи то стоит городить. Такое все равно рисовать нужно быстро из GPU Visible Only.

#11826
9:13, 20 янв 2026

/A\
Я думал что ролинг контекст это про зависимость пайплайнов и мягкую перезагрузку

#11827
5:23, 24 янв 2026

Тем временем в Vulkan продолжают заимствовать идеи из Direct3D 12 😂.

#11828
(Правка: 12:30) 11:40, 24 янв 2026

Вот тут интересно пишут.
https://vk.com/wall-178581777_12499?ysclid=mks1vr669m4556002

Ну а вообще вулкан вышел в 2016 году и до сих пор всё никак не допилят его за 8 лет.
Варзецы пилят наверное :)

#11829
15:29, 24 янв 2026

Vulkan уже 10 лет, а с начала разработки дизайна прошло уже лет 12. Некоторые решения которые в него изначально закладывались уже выглядят устаревшими. Возможно пришло время для Vulkan 2.0.

#11830
10:02, 25 янв 2026

prowkan
> Тем временем в Vulkan продолжают заимствовать идеи из Direct3D 12 😂
Это понятно, не надр было биндинги числые вершинных аттрибутрв итресурсов делать с убогим метюртворожденным GLSL, не нужно было VkFrameBuffer(и не надо гнать что мобилки тут , вообще не причем)вводить, ну и куча legacy расширения для совместимости с убогой Галей. А это же ресурсы и время комитета. Вообще плохо что в спецификации учавствовали старики от Гали. Отсюда куча переделок, сраных расширений которые потом deprecated.

#11831
0:28, 26 янв 2026

https://www.sebastianaaltonen.com/blog/no-graphics-api
No Graphics API by Sebastian Aaltonen

Лонгрид на тему разбора архитектурных косяков Вулкана.
Чел предлагает новое апи, насколько можно простое.
Его основные тезисы (насколько я их понял):
- абстракции и сущности прошлых API соотносятся с аппаратурой GPU
- железо GPU сильно прогрессировало в сторону универсализации, и многие абстракции стали ненужными
- всё для чего нету специальной поддержки в GPU, должно быть представлено как массив байт. Работа идёт с указателями на такие массивы. Нету особых причин почему так не можно/не нужно
- то для чего есть специализированные блоки (например индексы вершин) должно быть максимально упрощено
- общая идея - минимализм
- для нового API должны быть прослойки трансляции из Vulkan/DX12
- понадобится поддержка вендоров

#11832
11:20, 29 янв 2026

Очередной опрос https://www.surveymonkey.com/r/LRFD7V6

#11833
19:21, 17 фев 2026

Установил новый СДК и опять слои мне ненавязчиво намекают, что я опять все не так сделал:

validation layer: vkQueueSubmit(): pSubmits[0].pSignalSemaphores[0] (VkSemaphore 0x8fa00000008fa) is being signaled by VkQueue 0x1c886916290, but it may still be in use by VkSwapchainKHR 0x9c600000009c6.
Most recently acquired image indices: 0, 0, 0, 0, 0, [1], 0, 2.
(Brackets mark the last use of VkSemaphore 0x8fa00000008fa in a presentation operation.)
Swapchain image 1 was presented but was not re-acquired, so VkSemaphore 0x8fa00000008fa may still be in use and cannot be safely reused with image index 2.
Vulkan insight: See https://docs.vulkan.org/guide/latest/swapchain_semaphore_reuse.html for details on swapchain semaphore reuse. Examples of possible approaches:
   a) Use a separate semaphore per swapchain image. Index these semaphores using the index of the acquired image.
   b) Consider the VK_KHR_swapchain_maintenance1 extension. It allows using a VkFence with the presentation operation.
The Vulkan spec states: Each binary semaphore element of the pSignalSemaphores member of any element of pSubmits must be unsignaled when the semaphore signal operation it defines is executed on the device (https://docs.vulkan.org/spec/latest/chapters/cmdbuffers.html#VUID-vkQueueSubmit-pSignalSemaphores-00067)

Помогите плз пофиксить по-быстрому кто шарит как бог в Вулкане, а то сам я дня три искать буду, я уже забыл как я все там делал, года три прошло:

  

  vkWaitForFences(logicalDevice, 1, &inFlightFences[currentFrame], VK_TRUE, UINT64_MAX);


  uint32_t imageIndex;
  VkResult result = vkAcquireNextImageKHR(logicalDevice, swapChain, UINT64_MAX, imageAvailableSemaphores[currentFrame], VK_NULL_HANDLE, &imageIndex);

  if (result == VK_ERROR_OUT_OF_DATE_KHR) {
    recreateSwapChain();
    return;
  }
  else if (result != VK_SUCCESS && result != VK_SUBOPTIMAL_KHR) {
    throw std::runtime_error("failed to acquire swap chain image!");
  }


  // Здесь рисуем

  
  if (imagesInFlight[currentFrame] != VK_NULL_HANDLE) {
    vkWaitForFences(logicalDevice, 1, &imagesInFlight[currentFrame], VK_TRUE, UINT64_MAX);
  }
  imagesInFlight[currentFrame] = inFlightFences[currentFrame];

  VkSubmitInfo submitInfo{};
  submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;

  VkSemaphore waitSemaphores[] = { imageAvailableSemaphores[currentFrame] };
  VkPipelineStageFlags waitStages[] = { VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT };
  submitInfo.waitSemaphoreCount = 1;
  submitInfo.pWaitSemaphores = waitSemaphores;
  submitInfo.pWaitDstStageMask = waitStages;
  submitInfo.commandBufferCount = 1;
  submitInfo.pCommandBuffers = &commandBuffers[currentFrame];

  VkSemaphore signalSemaphores[] = { renderFinishedSemaphores[currentFrame] };
  submitInfo.signalSemaphoreCount = 1;
  submitInfo.pSignalSemaphores = signalSemaphores;

  vkResetFences(logicalDevice, 1, &inFlightFences[currentFrame]);

  VK_CHECK_RESULT(vkQueueSubmit(graphicsQueue, 1, &submitInfo, inFlightFences[currentFrame]));

  VkPresentInfoKHR presentInfo{};
  presentInfo.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR;

  presentInfo.waitSemaphoreCount = 1;
  presentInfo.pWaitSemaphores = signalSemaphores;

  VkSwapchainKHR swapChains[] = { swapChain };
  presentInfo.swapchainCount = 1;
  presentInfo.pSwapchains = swapChains;
  presentInfo.pImageIndices = &imageIndex;

  result = vkQueuePresentKHR(presentQueue, &presentInfo);

  if (result == VK_ERROR_OUT_OF_DATE_KHR || result == VK_SUBOPTIMAL_KHR || framebufferResized) {
    framebufferResized = false;
    recreateSwapChain();
  }
  else if (result != VK_SUCCESS) {
    throw std::runtime_error("failed to present swap chain image!");
  }

  currentFrame = (currentFrame + 1) % MAX_FRAMES_IN_FLIGHT;
#11834
19:38, 17 фев 2026

MikeNew
Переходи на directx 12 :)

Страницы: 1785 786 787 788 789 790 Следующая »
ПрограммированиеФорумГрафика