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

Vulkan custom allocator

Страницы: 1 2 Следующая »
#0
11:26, 10 ноя. 2018

В спеках пишут, что нельзя 2 раза делать vkMapMemory на один VkDeviceMemory, вопрос: а как тогда делать аллокатор? Я пробовал читать исходники с GPUopen, но нихрена не понял, а статей по этому поводу очень мало.


#1
(Правка: 11:35) 11:34, 10 ноя. 2018

Немного уточнения, nvidia говорит, что надо на стороне приложения брать сразу целый гиг(допустим), потом его раздавать ресурсам, в тех статьях, что я читал, пишут, что надо для этого свой RefCounter делать, вроде логично, но если я буду лочить целый гигабайт памяти даже с флагом host cached, это не будет ппц как медленно? Или тут размер вообще не влияет?

#2
11:37, 10 ноя. 2018

Хотя есть мысль лочить один раз, потом только vkInvalidateMappedMemoryRanges, но я нигде не видел такого упоминания, хз, будет ли это вообще работать.

#3
11:56, 10 ноя. 2018

Ты каждый кадр собрался гонять 1 Гб по шине?
Обычно создаешь staging buffer и через него копируешь данные в гпу память.
Мапить можно 1 раз.

#4
11:58, 10 ноя. 2018

Я собирался мапить, когда просыпается поток стриминга. Т.е. можно забить и делать через vkInvalidateMappedMemoryRanges?

#5
12:01, 10 ноя. 2018

Кстати, у меня на GeForce есть отдельная очередь чисто для трансфера, а как с этим на AMD?

#6
13:02, 10 ноя. 2018

Dimich
> а как с этим на AMD?
http://www.vulkan.gpuinfo.org/
судя по этим данным у АМД можно даже делать презент из трансфер очереди, но стоит ли заморачиваться?

> Т.е. можно забить и делать через vkInvalidateMappedMemoryRanges?
Ты уверен, что правильно разобрался как работает vkInvalidateMappedMemoryRanges ?
На всех гпу что я видел есть coherent host visible memory для которой не нужно ничего вызывать - все изменения сразу видны, ну разве что после барьера/ивента/фенса.

#7
13:12, 10 ноя. 2018

/A\
> все изменения сразу видны, ну разве что после барьера/ивента/фенса.
Во, ну т.е. надо же как-то контролировать, что данные попали в vram, а как?

#8
13:15, 10 ноя. 2018

Я пробовал читать vkspec, но блин, кто придумал 1800 страниц пихать в один html? У меня всё тупить начинает, когда пытаюсь его открыть.

#9
13:16, 10 ноя. 2018

Dimich
> У меня всё тупить начинает, когда пытаюсь его открыть.
https://renderdoc.org/vkspec_chunked/index.html

#10
13:18, 10 ноя. 2018

О, прикольно, спасибо.

#11
13:18, 10 ноя. 2018

Dimich
> Во, ну т.е. надо же как-то контролировать, что данные попали в vram, а как?
Если по простому, то: также как ты переиспользуешь команд буферы переиспользуй и память, подождал фенс - записал в память, отправил команды, ждешь другой фенс пока гпу читает память.

#12
13:21, 10 ноя. 2018

Фенс на vkCmdCopyBuffer?

#13
13:28, 10 ноя. 2018

Как все плохо то)

VkFence  fences[2];
VkCommandBuffer  commands[2];
VkBuffer  stagingBuffers[2];
VkBuffer  gpuBuffers[2];
void*  mappedMemory[2];

for (int frameId = 0;; frameId = (frameId + 1) & 1)
{
  vkWaitForFences( dev, 1, &fences[frameId], ~0ull );

  // write data to staging buffer
  memcpy( mappedMemory[frameId], ... );

  vkBeginCommandBuffer( commands[frameId], ... );

  vkCmdCopyBuffer( commands[frameId], stagingBuffers[frameId], gpuBuffers[frameId], ... );

  vkEndCommandBuffer( commands[frameId] );

  vkQueueSubmit( ..., fences[frameId] );
}

#14
13:38, 10 ноя. 2018

Не, ну я примерно так и думал)

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