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

Vulkan custom allocator

Страницы: 1 2 Следующая »
#0

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

10 ноя. 2018


#1

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

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

#2

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

10 ноя. 2018

#3

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

10 ноя. 2018

#4

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

10 ноя. 2018

#5

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

10 ноя. 2018

#6

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

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

10 ноя. 2018

#7

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

10 ноя. 2018

#8

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

10 ноя. 2018

#9

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

10 ноя. 2018

#10

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

10 ноя. 2018

#11

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

10 ноя. 2018

#12

Фенс на vkCmdCopyBuffer?

10 ноя. 2018

#13

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

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] );
}

10 ноя. 2018

#14

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

10 ноя. 2018

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