Как поставить ссылку на группу вк: Как добавить ссылку в группу Вконтакте

Содержание

Как вставить ссылку на группу ВК и проверить всех участников, у кого найдет инстаграмы?

Наш Сервис поиска целевой аудитории ВКонтакте предоставит вашему вниманию парсеры (специальные инструменты), с помощью которых вы будете находить аккаунты участников групп ВКонтакте в сети Instagram.

Пройдите по ссылке ниже, чтобы начать парсить инстаграмы участников групп ВКонтакте.
Загрузите ссылки на группы ВК, поставьте отметку о том, что нужно парсить именно участников групп ВКонтакте, а не пользователей из вашего списка.
Отметив формат выдачи результата, запускайте парсер в работу.

В итоговом отчете будут инстаграмы всех участников указанных групп ВКонтакте.
Однако, лишь в том случае, когда эти пользователи ВКонтакте указали эти данные в своих данных ВК.


Запустить скрипт для решения вопроса

Полезный небольшой видеоурок по этой теме

О сервисе поиска аудитории ВКонтакте

vk. barkov.net — это универсальный набор инструментов, который собирает самые разнообразные данные из ВКонтакте в удобном виде.

Каждый инструмент (скрипт) решает свою задачу:

Например, есть скрипт для получения списка всех подписчиков группы.
А вот тут лежит скрипт для сбора списка всех людей, поставивших лайк или сделавших репост к конкретному посту на стене или к любым постам на стене.
Ещё есть скрипт для получения списка аккаунтов в других соцсетях подписчиков группы ВКонтакте.

И таких скриптов уже более 200. Все они перечислены в меню слева. И мы регулярно добавляем новые скрипты по запросам пользователей.


Запустить скрипт для решения вопроса

Полезные ответы на вопросы по этому же функционалу для сбора данных из ВКонтакте

Как собрать базу инстаграмов пользователей из контакта?

Парсинг инстаграмов, чем и как собрать?

Нужны отфильтрованные логины, а не айди в Instagram

Собирать инстаграм аккаунты со стен ВКонтакте

Как вынимать инстаграм-аккаунты из групп ВКонтакте?

Собрать ссылки на пользователей ВКонтакте, у которых указан инстаграм аккаунт на странице

Парсинг инстаграмов из профилей ВКонтакте

Как по аккаунтам пользователей ВК узнать кто из них сидит в инсте?

Собрать инсту людей из пабликов ВК

Найти возможность работы ВКонтакте с другими соц сетями

Как собрать Instagram-аккаунты тех сообществ ВКонтакте, у которых в названии есть “кафе” или “ресторан”?

Спарсить инстаграмм аккаунты

Как спарсить подписчиков конкурентов, их username Инстаграм?

Как собрать инстаграмы пользователей ВКонтакте?

Бесплатный парсер для соц сетей

Как собрать инстаграмы подписчиков пользователя ВКонтакте?

Собрать инстаграм логины участников групп ВКонтакте

Как собрать ВКонтатке список ID в инстаграм?

Найти инстаграм из ВК

Сбор инстаграмов из информации групп ВКонтакте

Как сделать ссылку на группу в фейсбук упоминание ссылкой

Образцовый метод получения упоминания в социальных сетях, осуществляется при помощи специального символа «@». При помощи этого привычного нам на слуху значка собаки «@» можно классифицировать сообщество в социальной сети.

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

Это материал с методологией и полным описанием, зависимых настроек страницы, при которых могут возникать трудности. Если вы хотите простой и быстрый пример, упоминания страницы фейсбук в публикации — воспользуйтесь иллюстрированным примером ниже.

Содержание

Добавить ссылку на группу в фейсбук (упоминание) для публикации внутри facebook

Упоминание на страницу facebook или группу в публикуемом контент, а также комментарии. Добавляется при помощи символа буквы «a» в незамкнутом круге «@».

  • В тексте публикации добавить символ @ после чего начните вводить название сообщества (группы или страницы).
  • По мере ввода текста начнёт появляться список сообществ. Выберете нужную группу или страницу, создав упоминание на неё.

Трудности, с которыми можно столкнуться при добавлении упоминания ссылки на сообщество в фейсбук. Рассмотрим на живом примере, как образуется ссылка такого типа, как упоминание на группу в facebook:

Настройки страницы

В некоторых случаях возможности создать упоминание, может не быть — это зависит от настроек страницы. Если добавлены ограничения в настройках.

Если это ваше сообщество вы можете проверить настройки самостоятельно. Для этого вам нужно:

Перейти в «Настройки» страницыОбщиеДругие люди отмечают эту Страницу.

  • Разрешить людям и другим Страницам отмечать Страницу «InformGram. ru»
  • Разрешить отмечать мою Страницу в историях в Instagram, опубликованных на Facebook
    Когда другие пользователи будут отмечать ваш аккаунт в истории Instagram и делиться ею на Facebook, в истории на Facebook будет содержаться ссылка на вашу Страницу. Эта функция доступна для Страниц, которые связаны с бизнес-профилем или аккаунтом автора в Instagram.

Эти настройки вы можете отметив чекбокс — включить либо отключить. После чего сохранить настройки для страницы.

Почему это очень важно! Например, вы ищите, как сделать ссылку на фейсбук группу или страницу. И у вас никак не получается — сделать! В случае если это не ваша, страница и у неё стоят настройки ограничивающие, запрещающие оставлять упоминания! Естественно, что, сколько бы вы ни пытались, это сделать. У вас ничего не выйдет!

Как сделать ссылку на группу в фейсбук

Создаём публикацию в фейсбук.
  • Прописываем нужный текст и выбираем место, куда вы хотите добавить упоминание — будущая ссылка на старицу фейсбук.
  • Переключаемся на английский язык и вводим знакомый нам специальный символ в виде малой буквы «a» в не замкнутом круге, привычную нам по названию @ собаку.
  • После @ начинаем вводить название страницы. В нашем случае, это фейсбук страница «InformGram.ru». После ввода названия страницы со специальным символом @ в начале, вы увидите выпадающий список групп и страниц. Названия других страниц, могут совпадать с вашим, поэтому вводите название точно!

Полный пример текста, которого мы используем;

Какой то текст ... @informgram.ru 

«Текст публикации, упоминание или ссылку на группу можно добавить в любом месте поста!»

Упоминание в facebook

Результат после добавления упоминания на страницу фейсбук, будет выглядеть как ссылка (с голубым фоном упоминания). Вы можете продолжить запись, после того как сделали в тексте публикации ссылку на страницу (упоминание).

Не стоит путать это не ссылка на сайт! Это название нашей страницы в фейсбуке. Если мы писали, просто Url сайта это была ссылка на сайт, но когда вы добавляете вначале спец. символ @ — это уже упоминание, ссылка на страницу.

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

Название группы в фейсбук и будет упоминанием — ссылкой на страницу либо группу

Для примера, вот в этом же посте сделаем ещё одно упоминание. Для упоминания, которое в дальнейшем станет ссылкой, будем использовать символ @ и название страницы на русском языке.

Это упоминание будет вида: @Красивые. Как, вы могли заметить русские названия сообществ, также могут преобразовываться в ссылкиупоминания групп, страниц в фейсбуке.

Упоминание ссылкой в фейсбуке

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

Когда вы создаёте упоминание, не стоит забывать, что сообщество, получит уведомление, об этом. Если вы делаете, упоминания в виде ссылки, в комментариях записей facebook. Такие комментарии, могут появляться даже в ленте (Хроники) пользователя.

vk-api-for-groups — Анализ работоспособности пакетов Python

Всего загрузок за неделю (8)

Популярность по версии

Звезды GitHub
0

Вилки
1

Авторы
1


Популярность прямого использования


Пакет PyPI vk-api-for-groups получает в общей сложности 8 загрузок в неделю. Таким образом, мы забили Уровень популярности vk-api-for-groups будет ограничен.

На основе статистики проекта из репозитория GitHub для Пакет PyPI vk-api-for-groups, мы обнаружили, что он снялся? раз.

Показанные числа загрузок являются средними еженедельными загрузками с последние 6 недель.

0.0.1 (Последняя)

Угроза безопасности и лицензии для последней версии

Дата выпуска
15 июня 2021 г.

Прямые уязвимости
  • C
  • H
  • M
  • L
Indirect Vulnerabilities
  • C
  • H
  • M
  • L
Лицензия риск
  • H
  • M
  • L

ВСЕГО ВВЕЛИ производственных зависимостей прямых и косвенных пакеты.


Лицензия
Массачусетский технологический институт


Политика безопасности
Нет

Мы нашли для вас способ внести свой вклад в проект! Выглядит как В vk-api-for-groups отсутствует политика безопасности.


Ты можешь подключите репозиторий вашего проекта к Snyk чтобы быть в курсе предупреждений системы безопасности и получать автоматические исправления Запросы.

Защитите свой проект от уязвимостей с помощью Snyk

Частота коммитов

Нет недавних коммитов

Открытые проблемы
0

Открытый PR
1

Последняя версия
2 года назад

Последняя фиксация
2 года назад


Дальнейший анализ состояния обслуживания vk-api-for-groups на основе частота выпуска версий PyPI, активность репозитория, и другие точки данных определили, что его обслуживание Неактивный.

Важным сигналом обслуживания проекта, который следует учитывать для vk-api-for-groups, является это не видел никаких новых версий, выпущенных для PyPI в за последние 12 месяцев 90 116 и может считаться прекращенным проектом или проектом, который получает мало внимания со стороны его сопровождающих.

За последний месяц мы не обнаружили никаких запросов на вытягивание или изменений в статус issue был обнаружен для репозитория GitHub.

Совместимость версий Python
>=3,8


Возраст
2 года

Последняя версия
2 года назад

Зависимости
Н/Д

Версии
1

Обслуживающий персонал
1

Колеса
Нет

Блог Khronos — The Khronos Group Inc

Введение

Khronos представила новое расширение под названием VK_EXT_graphics_pipeline_library, которое позволяет компилировать шейдеры намного раньше, чем при полном создании объекта состояния конвейера (PSO). Используя это расширение, я смог избежать многих причин зависаний кадров из-за позднего создания PSO во время отрисовки в средстве визуализации Source 2 Vulkan. Спецификация расширения была выпущена сегодня, и вскоре последует поддержка SDK, вы можете отслеживать статус выпуска на https://github.com/KhronosGroup/Vulkan-Docs/issues/1808.

Движок Source 2 довольно сильно разработан на основе модели Direct3D11, в которой шейдеры создаются независимо, а объекты состояния предоставляются во время отрисовки. Таким образом, существует значительное количество информации, которую наш движок не знает в то время, когда шейдеры предоставляются нашей абстракции рендеринга: спаривание шейдеров на разных этапах, форматы вершин, форматы кадрового буфера, состояние глубины/стенсила, информация об области просмотра, состояние MSAA. , и ряд других. Это означает, что мы откладываем создание PSO до времени отрисовки, что может привести к задержкам, особенно при холодном кеше конвейера.

Прежде чем подробно рассказать о том, как мы интегрировали VK_EXT_graphics_pipeline_library в наш движок, я хочу сделать пару предостережений по поводу этого расширения. Прежде всего следует сказать, что есть очень веская причина, по которой Vulkan был разработан таким образом, чтобы работа по компиляции шейдеров происходила во время создания PSO с полным просмотром всего требуемого состояния. В то время как драйверы Direct3D11 создают иллюзию полной компиляции только с байтовым кодом шейдера, правда в том, что внутри драйверов происходят огромные героические усилия, чтобы сделать это так. Драйверы часто выполняют фоновую компиляцию в нескольких потоках, и на самом деле Direct3D11 не может гарантировать, что компиляция шейдера не произойдет во время отрисовки. Однако на практике поставщики графических процессоров исключительно хорошо справились с этой героической задачей, и типичный пользовательский опыт с драйвером Direct3D11 приводит к значительно меньшим задержкам, чем наш модуль рендеринга Vulkan без полностью предварительно прогретых конвейерных кешей. Тем не менее, приложения Vulkan, которые могут заранее знать все состояния шейдеров и конвейеров, гарантированно избегают задержек, поскольку работа по компиляции шейдеров будет полностью выполняться во время создания PSO. В то время как с Direct3D11 такой гарантии нет.

Второе предостережение заключается в том, что если вы разрабатываете новый движок для Vulkan, вам действительно следует подумать, является ли хорошей идеей иметь большое количество перестановок шейдеров. Некоторые игры, такие как DOOM 2016/DOOM Eternal, сохранили очень небольшое количество PSO. Подробное описание этого пространства проектирования выходит за рамки этого поста в блоге, но я настоятельно рекомендую прочитать эту серию блогов из двух частей, в которой объясняется, почему многие движки имеют большое количество перестановок шейдеров (что является одной из основных причин многих задержек при компиляции во время отрисовки). ): Проблема перестановки шейдеров: как мы к этому пришли?

После всего сказанного Khronos слышал от многих разработчиков (включая нас), что в некоторых сценариях просто невозможно заранее знать все состояние PSO. Частично это привело к созданию нескольких новых расширений (ядро в Vulkan 1.3), которые позволяют сделать гораздо больше динамических состояний PSO. VK_EXT_graphics_pipeline_library делает еще один шаг вперед, позволяя полностью свести шейдеры к машинным инструкциям задолго до начала отрисовки. Благодаря этому расширению движки в стиле Direct3D11, такие как наш, могут обеспечить сравнимые (или даже лучшие!) возможности с компиляцией шейдеров по сравнению с Direct3D11. В следующих разделах я представлю обзор VK_EXT_graphics_pipeline_library и подробно опишу процесс интеграции расширения в движок Source 2.

Обзор библиотеки графических конвейеров

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

  • Vertex Input Interface
  • Шейдеры перед растеризацией
  • Фрагментный шейдер
  • Интерфейс вывода фрагментов

Интерфейс ввода вершин содержит информацию, которая обычно предоставляется объекту состояния полного конвейера с помощью VkPipelineVertexInputStateCreateInfo и VkPipelineInputAssemblyStateCreateInfo. Для нашего движка эта информация неизвестна до момента отрисовки, поэтому конвейер для этого этапа по-прежнему хэшируется и создается во время отрисовки. Однако этот этап не имеет шейдерного кода и поэтому драйвер может его быстро создать, да и этих объектов тоже довольно мало.

Шейдеры перед растеризацией содержат этапы вершинного, мозаичного и геометрического шейдера вместе с состоянием, связанным с VkPipelineViewportStateCreateInfo, VkPipelineRasterizationStateCreateInfo, VkPipelineTessellationStateCreateInfo и VkRenderPass (или динамической отрисовкой). Это может звучать как больше информации, чем ваш движок мог бы знать во время создания шейдера, это определенно было для нас. Однако ключевой момент заключается в том, что при объединении конвейерных библиотек с расширениями динамического состояния единственной информацией, которая действительно необходима для создания шейдера до растеризации, является код SPIR-V и схема конвейера. Это обсуждается более подробно ниже.

Этап фрагментного шейдера содержит фрагментный шейдер вместе с состоянием в VkPipelineDepthStencilStateCreateInfo и VkRenderPass (или динамическом рендеринге — хотя в этом случае требуется только viewMask). Как и на этапе предварительной растеризации, в сочетании с динамическим рендерингом вы можете создать конвейер фрагментного шейдера, используя только SPIR-V и макет конвейера. Это позволяет драйверу выполнять тяжелую работу по снижению аппаратных инструкций для предварительной растеризации и фрагментных шейдеров с очень небольшим количеством информации.

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

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

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

Ранняя компиляция шейдеров с конвейерными библиотеками

В нашем движке шейдеры предоставляются нашему уровню абстракции рендеринга во время загрузки наших материалов (что происходит во время запуска или экранов загрузки). В Direct3D11 это напрямую приводит к вызову методов IDirect3D11Device::Create*Shader. В Vulkan, до VK_EXT_graphics_pipeline_library, единственное, что мы могли сделать в то время, это vkCreateShaderModule. Это передает SPIR-V драйверу, но на самом деле не запускает какую-либо значительную компиляцию шейдера, поскольку драйвер Vulkan должен сделать это во время создания PSO, когда известны все этапы шейдера, макеты наборов дескрипторов и требуемое состояние.

Таким образом, наш модуль визуализации Vulkan хранит хэш состояния и создаст полный конвейер во время отрисовки, когда все это состояние будет окончательно известно. С помощью VK_EXT_graphics_pipeline_library мы теперь можем компилировать шейдеры одновременно с Direct3D11. В следующих разделах я опишу изменения, которые были необходимы, чтобы сделать это возможным.

Динамическое состояние

Хотя использование VK_EXT_graphics_pipeline_library не требует, чтобы приложения использовали динамическое состояние, на практике для нашего движка они неразрывно связаны друг с другом. Без использования динамического состояния мы не смогли бы создавать конвейерные библиотеки для этапов предварительной растеризации и фрагментного шейдера во время загрузки материала. Сразу отмечу, что мы создаем пайплайны предрастеризации только для вершинных шейдеров и не заморачиваемся с шейдерами тесселяции и геометрии. У нас не так много случаев, когда мы используем геометрические шейдеры и шейдеры тесселяции, поэтому для целей остальной части этой статьи этап предварительной растеризации для нас относится только к вершинным шейдерам.

Если конвейер использует шейдеры тесселяции или геометрии, мы возвращаемся к полному созданию PSO.

Конкретные расширения динамического состояния, которые нам нужны в нашем движке, чтобы иметь возможность использовать VK_EXT_graphics_pipeline_library, следующие:

  • VK_EXT_extended_dynamic_state
  • ВК_EXT_extended_dynamic_state2
  • ВК_ХР_динамический_рендеринг

К счастью, все эти три расширения являются частью Vulkan 1.3, поэтому можно ожидать, что они будут поддерживаться везде, где поддерживается VK_EXT_graphics_pipeline_library.

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

Динамическое состояние этапа перед растеризацией

Состояние Динамическое состояние
VkPipelineViewportStateCreateInfo VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT
VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT
VkPipelineRasterizationStateCreateInfo VK_DYNAMIC_STATE_DEPTH_BIAS
VK_DYNAMIC_STATE_CULL_MODE_EXT
VK_DYNAMIC_STATE_FRONT_FACE_EXT
Вкрендерпасс Динамический (VK_NULL_HANDLE) с VK_KHR_dynamic_rendering

Как и в случае с вершинным шейдером, для фрагментного шейдера существует множество состояний, о которых мы не знаем во время загрузки SPIR-V. В частности, мы не знаем состояния глубины/трафарета и рендерпасса, поэтому делаем их динамическими, как описано в следующей таблице.

Динамическое состояние этапа фрагмента

Состояние Динамическое состояние
VkPipelineDepthStencilStateCreateInfo VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK
VK_DYNAMIC_STATE_STENCIL_WRITE_MASK
VK_DYNAMIC_STATE_STENCIL_REFERENCE
VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE_EXT
VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE_EXT
VK_DYNAMIC_STATE_DEPTH_COMPARE_OP_EXT
VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT
VK_DYNAMIC_STATE_STENCIL_OP_EXT
VK_DYNAMIC_STATE_DEPTH_BOUNDS
VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT
VkRenderPass Динамический (VK_NULL_HANDLE) с VK_KHR_dynamic_rendering

Макеты конвейеров

С динамическими состояниями, использованными в предыдущем разделе, единственная дополнительная информация, которая нам нужна для создания библиотек конвейеров вершинных/фрагментных шейдеров, — это макет конвейера. На первый взгляд может показаться, что это довольно простая информация для сбора. Из отражения шейдера мы знаем, какие дескрипторы используются в шейдере, поэтому мы должны знать макеты наборов дескрипторов для каждого этапа. Это было бы очень просто, если бы вершинный и фрагментный шейдеры создавались вместе в паре, но это работает иначе (и я не представляю, сколько движков на базе Direct3D11 работает). Хотя оба наших шейдера содержатся в одном и том же файле, до момента отрисовки не известно, какая пара вершинных/фрагментных шейдеров будет использоваться вместе. Например, в проходе только по глубине вершинный шейдер A связан с фрагментным шейдером A (т. е. который извлекает текстуру для выполнения альфа-теста). В прямом проходе вершинный шейдер A будет соединен с фрагментным шейдером B, который выполняет полное прямое освещение. И на самом деле есть много других сценариев, где точная комбинация не известна до момента розыгрыша.

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

Один из простых способов справиться с этим — использовать разные наборы дескрипторов для каждого этапа шейдера. Вы просто предоставляете схему конвейера, содержащую наборы дескрипторов для каждого этапа, для каждой библиотеки. Наше ядро, однако, этого не делает. Причина, по которой мы этого не делаем, частично связана с производительностью (чтобы мы могли выделить/обновить/связать один набор дескрипторов для динамических ресурсов в VS/FS вместо двух) и частично из-за того, что некоторые реализации Vulkan все еще имеют очень маленькую общее количество поддерживаемых наборов дескрипторов (в частности, некоторые мобильные графические процессоры имеют ограничение в 4).

Наборы дескрипторов разделов нашего движка примерно следующие:

  • Набор дескрипторов 0 — динамические ресурсы не привязаны до времени отрисовки для всех этапов
  • Набор дескрипторов 1 — статические дескрипторы вершинного шейдера
  • Набор дескрипторов 2 — статические дескрипторы фрагментного шейдера
  • Набор дескрипторов 3 — дескрипторы без привязки (общие для всех этапов)

Таким образом, для библиотек графических конвейеров мы создаем макеты конвейеров следующим образом:

  • Набор дескрипторов 0 — «убер-набор», который содержит все возможные потребляемые динамически связанные ресурсы, которые могут совместно использоваться в VS/FS
  • Набор дескрипторов 1 — предоставляется только библиотеке предварительной растеризации (вершинному шейдеру), если она используется
  • Набор дескрипторов 2 — предоставляется только для библиотеки фрагментных шейдеров, если она используется
  • Набор дескрипторов 3 — предоставляется для обеих ступеней, если используется

Другими словами, библиотека вершинных шейдеров создается с конвейерной компоновкой, содержащей наборы дескрипторов 0, 1 и 3. Библиотека фрагментных шейдеров создается с конвейерной компоновкой, содержащей наборы дескрипторов 0, 2 и 3. Мы знаем, что наборы 1, 2 и 3 будут иметь идентичные макеты на всех используемых этапах, и мы также гарантировали это для набора дескрипторов 0, сделав его «убер-набором», содержащим все возможные потребляемые ресурсы.

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

Интерфейс ввода вершин и интерфейс вывода фрагментов

Используя то, что я описал до сих пор, мы теперь можем сразу скомпилировать наши вершинные и фрагментные шейдеры, используя только SPIR-V и компоновку конвейера. Нам нужно построить еще два этапа: входной интерфейс вершины и выходной интерфейс фрагмента. Эти биты информации все еще неизвестны до момента отрисовки, поэтому мы хешируем подмножество информации, необходимой для интерфейса ввода вершины и интерфейса вывода фрагмента. Эти этапы должны быть небольшими по количеству (я измерил менее сорока в рабочей нагрузке нашего движка), а также быстро создаваться. В отличие от других этапов, для компиляции драйвера не требуется кода шейдера.

Окончательный связанный конвейер

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

Наша цель — добиться отсутствия задержек во время отрисовки, поэтому мы изначально создаем наши связанные библиотеки без набора VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT. Ожидается, что без установки этого бита создание связанной конвейерной библиотеки в драйвере будет происходить очень быстро. Это будет особенно быстро в реализациях, которые устанавливают VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT.graphicsPipelineLibraryFastLinking (что верно, по крайней мере, для всех поставщиков настольных компьютеров — NVIDIA, AMD и Intel). Ожидается, что даже в тех реализациях, которые не задают GraphicsPipelineLibraryFastLinking, связывание библиотеки конвейера будет значительно быстрее, чем полное соединение PSO.

После создания конвейерной библиотеки с быстрым связыванием без оптимизации мы запускаем компиляцию конвейерной библиотеки с VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT в фоновом потоке и подкачиваем ее, когда она будет готова. Таким образом, мы избегаем заминок при первом создании конвейерной библиотеки, но можем восстановить полную производительность графического процессора, как только у нас будет время выполнить кросс-стадийную оптимизацию в фоновом режиме. Этот выбор полностью зависит от приложения: некоторые приложения, менее чувствительные к заиканиям, могут всегда создавать конвейерную библиотеку, связанную с несколькими этапами. Они по-прежнему должны ожидать значительного улучшения ЦП по сравнению с созданием полного PSO, поскольку большая часть компиляции будет перемещена раньше.

Заключение

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

Оставить комментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *