воскресенье, 17 апреля 2016 г.

Delphi и Vulkan, первое знакомство.

Не так давно мне в этом блоге напомнили о существовании давно забытой мной GLScene.
Как оказалось - все еще есть энтузиасты, пытающиеся вдохнуть жизнь в этот продукт, даже портировать ее на Vulkan. Могу только пожелать успеха ребятам в этом нелегком деле, надеюсь у них получится то, что не удалось когда-то нашей команде :)

Но история о другом, портирование GLScene на Vulkan началось с портирования заголовочных файлов, а это уже достаточно чтоб попробовать там что-то сделать, да и приятно было вернуться на Делфи, после нескольких лет разработки на С++. Вообщем вот что из этого получилось...

среда, 23 марта 2016 г.

Vulkan API, Framebuffers

Ну и предлагаю вам почитать превод последней части главы "Render Pass" спецификации, в которой рассказывается об еще одном фундаментальном понятии Вулкана - Framebuffers, они же буферы кадра или фреймбуферы. 

понедельник, 21 марта 2016 г.

Vulkan API, Render Pass

Render Pass

Вот я и добрался до следующего болшого куска спецификации, так же имеющего важное значение для понимания фундаментальных основ Вулкана, к Render Pass и Subpass. В предыдущей статье я уже затрагивал тему Render Pass, теперь пришло время изучить спецификацию.

четверг, 17 марта 2016 г.

Vulkan, еще раз о синхронизации...

Наконец-то я закончил перевод этого здоровенного и не менее важного куска спецификации. О том, что я думаю об авторе этого раздела спецификации я уже писал много, потому я просто счастлив что это осталось позади (хотя кто знает что еще меня ждет впереди))


Написано там было очень много, о параметрах, и случаях использования, о вариантах, о тонкостях и прочем, но это тот случай, когда за деревьями леса не видно, потому я и решил собрать воедино всю эту информацию в одной короткой статье, так сказать для закрепления материала.

Vulkan API. Memory Barriers and Implicit Ordering Guarantees.

Вот я и добрался до последней главы раздела "Synchronization and Cache Control", перевод этого раздела оказался достаточно "стремным", как вообщем-то и текст оригинала. После этой статьи я приведу еще одну итоговую, где постараюсь в сжатом виде пересказать содержание последних серий, ну а пока - Memory Barriers и Implicit Ordering Guarantees.

понедельник, 14 марта 2016 г.

Vulkan API, Barriers, Execution And Memory Dependencies.

Перевод этой части спецификации очень затянулся. Причин здесь несколько, во-первых - большой объем информации, во-вторых - высокая сложность материала (много терминов, много новых понятий и концепций, отсутствующих в других API и прочее), ну и ко-всему - неудачный порядок изложения материала, что приемлемо для спецификации, но неудобно для систематизированного изучения. Так же у меня есть претензии к автору этой главы, так как написано все очень коряво и без понимания сути материала очень сложно передать мысль “своими словами”, а перевод оказывается набором слов.

Потому, чтоб упростить понимание этой главы, я немного изменил порядок следования глав и разбавил их фрагментами статей от AMD (можно ж ведь и сложные вещи простым языком описать, снимаю перед этими ребятами шляпу).

Ну и прежде чем приступить к переводу следующего куска спецификации я решил забежать немного вперед и дать определение некоторым из используемых в этой главе спецификации терминов.

суббота, 12 марта 2016 г.

Vulkan Renderpasses

Переводя следующую главу спецификации я столкнулся с несколькими проблемами.

По всей видимости, начиная с главы "6.4 Execution And Memory Dependencies", у спецификации поменялся автор - два слова связать не может, постоянно пережовывает одно и тоже, сплош и рядом тафтология, предложения закручивает так, что и 100-грамм не помогает, вообщем текст ужасный, местами я при перечитывании переведенного просто удалял целые абзацы, заменяя их одной фразой.

Но это пол-беды, не знаю кто виноват, этот же автор или еще кто, но в этой главе явно нарушен порядок изложения материала (да, я понимаю что это спецификация, но все же), вначале разжовываются сценарии, а только через пару глав рассказывается что же такое эти dependency, renderpass, subpass, pipeline stages и многое другое. В результате теряется суть написанного и весь перевод главы становится абсолютно бессмысленным.

Можно было бы оставить "как есть", и в конце приписать что-то типа "не виноватая-я, оно так и было" и предложить вернуться к этой главе спустя сотню страничек спеки, но я все же постараюсь сделать это повествование логичным, хоть и придется отойти от порядка изложения определенного в спецификации, в том числе и используя "сторонние" материалы.

Стоило мне принять это решение как тут же попалась статья от AMD по этим самым renderpass-ам, с которых и начнется повествование.

воскресенье, 6 марта 2016 г.

Vulkan API, Synchronization primitives, Events.

Продолжение перевода 6 главы - Synchronization and Cache Control, в этот раз рассмотрим третий тип синхронизации - события(Events).
Предыдущие части можно посмотреть здесь:

Vulkan API, Synchronization primitives, Semaphores

Vulkan API, Synchronization primitives, Semaphores

В предыдущей части мы начали разбирать примитивы синхронизации Вулкана и рассмотрели Fence-оъект, сигнализирующий о завершении выполнения буфера команд в очереди. В этой части мы познакомимся со сторым типом примитивов синхронизации - Semaphores.

Vulkan API, Synchronization primitives, Fences.

Одним из ключевых изменений, произошедших в Вулкане, стало ручное управление потоками команд, что с одной стороны - позволило существенно снизить нагрузку на CPU, с другой - требует понимания принципов многопоточного программирования. Важнейшим инструментов многопоточного програмирования являются примитивы синхронизации. Вулкан предоставляет 4 типа таких примитивов, в этой части мы рассмотрим первый из них - Fences.

пятница, 4 марта 2016 г.

Vulkan API, Command Buffers

Признаться, начинал я переводить эту главу нехотя, во-првых - она очень большая :)
Во-вторых - на этом месте все туториалы делают большой прыжок и минуя эту главу начинают создавать поверхность рендеринга, фреймбуфер и прочее. Был и у меня такой соблазн, темболе что предыдущие главы были достаточно простыми. Однако я себя пересилил и думал правильно сделал. Тут как никогда подходит выражение - "чем дальше в лес тем больше дров", количество понятий, новых терминов, нюансов использования и связей с другими объектами здесь просто зашкаливает. Боюсь к этой статье придется возвращаться еще не раз, так как на этом этапе нужно начинать планировать всю архитектуру вашего приложения, причем в таких деталях, что аж мурашки по коже :) Без этого ваше приложение будет работать, но эффективность его будет на уровне вызовов glBegin/glEnd на фоне дисплейных списков. Вообщем скоро вы сами все поймете :)

среда, 2 марта 2016 г.

Vulkan API, Queues.

Queues. Queue Family Properties

Перевод этой части спецификации несколько затянулся, связано это с тем, что объем кода для примера стал слишком большим и появилось желание это все обернуть в соответствующие классы. На сколько удачным оказалось это решение покажет время, но объем кода примеров уже снизился существенно. 
Ну что ж, приступим...

воскресенье, 28 февраля 2016 г.

Vulkan API. Devices

Продолжаем знакомство с Вулканом, в предыдущих статьях мы рассмотрели такие сущности как инстанс, физическое устройство и семейство очередей, научились их пречислять и получать их свойства. Однако в Вулкане вся работа ведется не с физическими сущностями а с логическими, предоставляющими интерфейс к данным типам физических объектов. В этой статье мы разберем один из них - логическое устройство (Device).

суббота, 27 февраля 2016 г.

Vulkan API, Physical Device Queue Family

Продолжаем разбирать спецификацию, в прошлый раз мы разобрались как получить списк доступных физических устройств и их свойств. Каждое физическое устройство может иметь одно или несколько семейств очередей, в этой статье мы научимся получать список таких семейств и определять их свойства.

четверг, 25 февраля 2016 г.

Vulkan API, Physical Devices

Physical Devices


После того как Вулкан был проинициализирован, мы можем начать работу с основными основными объектами API - устройствами (devices) и очередями (queues). В этой статье представлена информация о физических устрйоствах и приведен небольшой пример инициализации Вулкана и перечисления некотрых свойств инстанса и устройства.

среда, 24 февраля 2016 г.

Vulkan API, Initialization

Продолжаю переводить спецификацию, перевод предыдущего раздела можно посмотреть здесь: http://vbomesh.blogspot.com/2016/02/vulkan-api-fundamentals.html
В этот раз перевод коснется раздела Инициализации Вулкана.

Vulkan API, Fundamentals

16 февраля произошло значимое событие, наконец-то была релизнута спецификация графического API Vulkan и были выпущены первые драйвера.
Более подробную информацию об этом можно найти на сайте Хроноса:
https://www.khronos.org/vulkan/
Там собраны ссылки на основные ресурсы по Вулкану - драйвера, доки, демки.

О самом Вулкане можно спорить очень долго, но я этим заниматься не буду. Вулкан предоставляет разработчику очень высокий уровень контроля что позволяет просто делать сложные вещи, при этом простые вещи требуют намного больших усилий. Хорошо это или плохо - время покажет, но однозначно он найдет свою нишу.

В связи с этим я решил попытаться разобраться с этим API, начав не с критики демок, а с фундаментальных понятий нового API, хорошо описанных в спецификации Вулкана:
https://www.khronos.org/registry/vulkan/specs/1.0/pdf/vkspec.pdf

Для себя я набросал черновик перевода одноименной главы спецификации, перевод некоторых участков, без знания контекста, пока затруднен, но возможно это окажется кому-то полезным. Любые комментарии и исправления категорически приветствуются.

И так, начнем, Vulkan, Fundamentals...