/A\, откатить драйвера?
Microsoft dxr ускорение трассировкой пути.
https://3dnews.ru/1120117/microsoft-predstavila-directx-raytracin… idd0635135349
Microsoft оптимизировала производительность за счёт двух нововведений: микрокарт прозрачности (Opacity Micromaps, OMM) и оптимизации порядка исполнения шейдеров (Shader Execution Reordering, SER) — последнее решение Nvidia развернула для Portal RTX и Cyberpunk 2077 около двух лет назад. Эти решения предлагают существенный прирост производительности, особенно в играх с полной трассировкой лучей — трассировкой пути.
Микрокарты прозрачности дают значительную оптимизацию альфа-проверяемой геометрии, то есть метода отрисовки, при котором для определения видимости каждого пикселя используется альфа-канал текстуры. В играх с трассировкой пути этот метод обеспечивает 2,3-кратный рост производительности: эффективно управляя данными о прозрачности, OMM сокращают вызовы шейдеров, повышая тем самым эффективность отрисовки без ущерба для качества изображения.
Оптимизация порядка исполнения шейдеров в некоторых сценариях обеспечивает 2-кратный рост производительности рендеринга. Этот метод предполагает интеллектуальную группировку выполнения шейдеров, способствуя росту эффективности графического процессора за счёт уменьшения дивергенции, а также повышению частоты кадров.
Официальная предварительная версия DXR 1.2, как ожидается, выйдет в апреле.
Mirrel
> откатить драйвера?
Как вариант, я себе забэкапил их, поставлю как понадобятся. Есть еще шанс, что вернут поддержку, может багу правят.
ronniko
На Turing микромапы и упорядочивание не поддерживается, не факт что на дх будет.
Кто-нибудь пробовал VK_SAMPLER_REDUCTION_MODE_MAX ?
Почему-то для x=0 или y=0 не включается фильтрация, из-за этого до размера 1х1 доходит тот-же пиксель что и в (0,0)
upd: Оказалось запускал в 2х разрешении, поэтому неправильные смещения. В компьют шейдере это не так просто проверить.
Заметил что обновили vkguide
В разделе Extra и GPU Driven Rendering есть много полезного для настоящего движка.
Не то что старые примитивные примеры которые все копипастили.
Теперь точно есть баг в VK_SAMPLER_REDUCTION_MODE_MAX.
Можно подобрать координаты, когда учитывается только 1-3 текселя вместо 4. Проявляется на всех форматах.
Нужно точно попасть в центр текселя, похоже на какую-то оптимизацию в драйвере. Линейная фильтрация в таком случае выдаст именно этот тексель и соседние не нужны, поэтому можно их отбросить, а вот в min/max режиме данные теряются.
Обнаружил так - хотел вывести область из которой читаются тексели, чтоб было наглядно. Для этого сделал сравнение depth с min_depth, а оно все никак не совпадает, даже для 3х3 области.
Нужно точно попасть в центр текселя
Ты 3д стрелялку делаешь ? :)
Вот так выглядит бага
"Бага" проявилась и на Mali и на Intel, так что видимо это фича.
However, if the reduction mode is VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX,
the process operates on the above set of multiple texels, together with their weights, computing a
component-wise minimum or maximum, respectively, of the components of the set of texels with
non-zero weights.
Я так понял если вес текселя 0, то его не надо учитывать. Возможно это даже лучше для некоторых сценариев.
Если использовать VK_SAMPLER_REDUCTION_MODE_MIN на текстуре не степени 2, то на координате 0.5 получается чтение 1 текселя вместо 4 и реальный минимум теряется. Так что использовать такой сэмплер нужно очень осторожно.
https://registry.khronos.org/vulkan/specs/latest/man/html/VK_QCOM… _shading.html
Vulkan догоняет Metal API.
Andrey
> Vulkan догоняет Metal API.
Так у Хуавей такое же расширение давно есть.
Я еще хотел попробовать MSAA 4x4 и более использовать как память тайла, для сабпасса можно выбрать конкретный сэмпл.
Наткнулся на такую странность - в статьях о bindless используют VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT, хотя в доках сказано, что это только для статичной индексации:
Descriptor sets containing undefined descriptors can still be bound and used, subject to the following conditions:
• For descriptor set bindings created with the VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT bit set,
all descriptors in that binding that are dynamically used must have been populated before the
descriptor set is consumed.
descriptorBindingPartiallyBound indicates whether the implementation supports statically
using a descriptor set binding in which some descriptors are not valid. If this feature is not
enabled, VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT must not be used.
VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT specifies that descriptors in this binding that are not
dynamically used need not contain valid descriptors at the time the descriptors are consumed. A
descriptor is dynamically used if any shader invocation executes an instruction that performs
any memory access using the descriptor. If a descriptor is not dynamically used, any resource
referenced by the descriptor is not considered to be referenced during command execution.
Хотя в 2х случаях из 3х можно прочитать как "all descriptors that are dynamically used", но видимо правильнее читать как "binding that are dynamically used".
Я так понимаю если заранее известно какие дескрипторы используются в шейдере, то только они и будут читаться, но если используется динамическая индексация, то драйверу нужны все дескрипторы.
Раньше я тоже выделял большой массив и частично его заполнял, слои валидации молчали, но может пару лет назад это стали проверять.
Еще цитаты из VK_EXT_descriptor_buffer, который содержит тот же функционал, что дескриптор сеты, только с понятными синхронизациями.
Implementations must not access resources referenced by these descriptors unless they are dynamically accessed by shaders.
Descriptors bound with this call can be undefined if they are not dynamically accessed by shaders.
Видимо "access resources" как раз вызовет падение на невалидном дескрипторе.
Implementations may read descriptor data for any statically accessed descriptor if the binding in
layout is not declared with the VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT flag. If the
binding in layout is declared with VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT,
implementations must not read descriptor data that is not dynamically accessed.
Тут только про "descriptor data", чтобы не было доступа за пределы дескриптор буфера.