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

Можно ли в OpenGL 4.5 сделать SSBO-s массивы ?

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

К сожалению на AMD Radeon HD 7950 размер SSBO буфера может быть не больше 16 метров(что создает проблемы) !
Зато cb buffer(констант буфер) размер хоть до 500 метров !

Я не знаю кто покусал АМД, но вот такая шиза.
На NVIDIA cb buffer 64 kb и SSBO можно хоть 600 метров.

С обычным SSBO все ясно.
И что бы переключать нужный SSBO надо сделать:
glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 2,SSBO1) или glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 2,SSBO2)

struct FragmentData 
{
        vec3 position;
        vec4  color;
};

layout(std140, binding=2) buffer Fragments 
{
        FragmentData fragments[];
};

in vec4 color;

void main()
{
       
          vec3 pos = fragments [fragmentNumber].position;
          vec4 col = fragments [fragmentNumber].color ;
 
}
#1
5:36, 17 июля 2018

А вот что хочу я.
У меня в SSBO хранятся анимации для костей.
И так как есть 10 разных персонажей то и есть 10 SSBO

И вот как в шейдере сделать так что бы нужный SSBO включать по индексу а не делать каждый раз при отрисовке Bind SSBO к вершинному шейдеру.


То есть типа такого :
vec3 pos = fragments[IndxNumSSBO] [fragmentNumber].position;

#2
7:31, 17 июля 2018

Вполне можно... std140 лучше заменить на std430
Только не надейся сделать [][], придется делать так: [][какое-то-константное-число]

#3
8:42, 17 июля 2018

У ронники как обычно, какие-то эксклюзивные проблемы. Казалось бы, 16 мегабайт на матрицы, но нет, там проблемы. Походу выдуманные проблемы.
16 мегабайт - это 250К матриц.  Стоимость обновления такого количества матриц просто безумная, и практически не совместима с реалтаймом.
Но вместо того, чтобы уменьшать количество матриц он занимается оптимизацией переключения SSBO. Facepalm короче.

#4
9:40, 17 июля 2018

Facepalm короче.

Это Слава !
И Слава не заставил себя долго ждать :)

#5
12:56, 22 июля 2018

Купи АМД и говори им, что делать. Не вижу проблемы.

#6
21:59, 22 июля 2018

ronniko
> вот что хочу я.
> У меня в SSBO хранятся анимации для костей.
> И так как есть 10 разных персонажей то и есть 10 SSBO
> И вот как в шейдере сделать так что бы нужный SSBO включать по индексу а не
> делать каждый раз при отрисовке Bind SSBO к вершинному шейдеру.

glMultiDrawIndirect и в шейдере у тебя glDrawid модели, не?

#7
4:19, 23 июля 2018

А для чего вообще нужен SSBO? Объясните дураку :)

#8
11:06, 23 июля 2018

https://www.khronos.org/opengl/wiki/Shader_Storage_Buffer_Object

#9
11:23, 23 июля 2018

innuendo
Видел я эту буржуйскую брехню, но на ихнем суть как-то уловить не могу :) слишком мутная вещь это SSBO )))

#10
13:16, 23 июля 2018

Daniil Petrov
> слишком мутная вещь это SSBO
Ну и воспринимай тогда SSBO как большой, тормознутый UBO переменного размера и с замутами по чтению/записи.

#11
13:51, 23 июля 2018

PA3UJIb
А UBO = это чё ))) в двух словах :)

#12
16:18, 23 июля 2018

Daniil Petrov
> А UBO = это чё ))) в двух словах :)
Это константы за один вызов.

UBO - он как VBO, только в нём хранятся не атрибуты - параметры вершин, а юниформы - единые параметры для всего glDrawArrays.
Вместо того, чтобы звать по glUniform на каждую матрицу, можно программно упаковать их в одну структурку и затем отправлять всю структуру за один вызов. Иногда получается быстрее.

=A=L=X=
> SSBO добавляет возможность записи в буфер, откуда появляются необходимости
> более мощных и медленных синхронизаций. Классически шейдеры сбрасывали
> "посчитанную информацию" в рендер-текстуру, что тоже позволяло выходить на
> пиковые производительности в связи с чётким алгоритмом заполнения и
> невзаимодействия между соседними пикселями SSBO же позволяет создавать
> глобальные счётчики например.
Короче - игрушка для ко ко ко рейтрейсеров. :V

#13
16:24, 23 июля 2018

Daniil Petrov
> А UBO = это чё ))) в двух словах :)

В UBO сохраняются изменяемые из программы общие параметры для шейдеров. Классические вещи - матрицы вида всякие или параметры тумана к примеру. UBO для шейдеров read-only, что позволяет им работать максимально быстро на чтение из параллельных потоков шейдеров.
SSBO добавляет возможность записи в буфер, откуда появляются необходимости более мощных и медленных синхронизаций. Классически шейдеры сбрасывали "посчитанную информацию" в рендер-текстуру, что тоже позволяло выходить на пиковые производительности в связи с чётким алгоритмом заполнения и невзаимодействия между соседними пикселями SSBO же позволяет создавать глобальные счётчики например.

#14
16:38, 23 июля 2018

Delfigamer
> Это константы за один вызов.

даааааааааааааааааааааа

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

Тема в архиве.