Ответы:
Как человек с несколькими годами разработки драйверов, я рассматриваю это как две отдельные проблемы.
Графический драйвер - очень сложный зверь. Реализовать все оптимальным образом было бы просто невозможной задачей; это достаточно большое препятствие, чтобы сделать драйвер, который действительно следует спецификациям - и спецификации становятся все более и более сложными. Итак, вы разрабатываете свой драйвер на основе спецификации и нескольких тестовых приложений (поскольку во многих случаях еще нет реального программного обеспечения).
Приближается настоящая игра (или тест, или какой-то другой пример использования драйвера, например, декодирование видео), который обнаруживает узкое место в драйвере. Начнем с того, что нужно выяснить, как сгладить ситуацию и ускорить использование этого варианта. Вы можете легко сообщить, что игра XYZ работает на 27,3% быстрее, но на самом деле каждое приложение, в котором есть вариант использования (например, динамическое обновление текстур), работает быстрее.
Есть и уродливая сторона, реальная оптимизация для каждого приложения, в которой драйвер определяет, какое приложение выполняется (или какой шейдер компилируется), и делает что-то не общее. Было много публичных случаев, когда, например, переименование исполняемого файла 3dmark внезапно меняет результаты.
Я чувствую, что такого рода оптимизации являются пустой тратой времени каждого: вы лжете своим клиентам в случае эталонных тестов и можете изменить поведение шейдера по сравнению с тем, что на самом деле хочет разработчик. Я вспоминаю случай, когда шейдер был изменен с поиска текстуры на вычисление в шейдере (которое работало только для аппаратного обеспечения указанного производителя), который был близким, но не совсем таким же результатом, и разработчик возразил, что это не является законным оптимизация.
В идеальном мире они не будут.
Однако это не идеальный мир, поэтому улучшения производительности в зависимости от игры могут быть связаны с одним или несколькими из следующих факторов (не для того, чтобы быть исчерпывающим):
Игра выполняет комбинацию операций A, B и C с установленными состояниями X, Y и Z. Драйвер может делать предположения на основе этого и подталкивать вещи к более оптимальному пути кода.
Игра никогда не выполняет операции I, J или K. Опять же, водитель может выбрать более оптимальный путь кода, основываясь на предположении, что эти операции никогда не выполняются.
Игра делает некоторые вещи немного (или не очень) неоптимальным образом. Драйвер знает это, перехватывает вызовы и преобразует их в нечто (надеюсь!) Эквивалентное, которое будет работать с ним лучше.
Можно найти компромисс по конкретной игре; например, это нормально, если эта комбинация состояний рендеринга идет медленно, потому что более важно, что эта комбинация идет быстрее, поэтому давайте оптимизировать соответственно.
Здесь важно отметить, что ничего из этого не должно быть «обязательным». До тех пор, пока использование драйвера и игрового API согласовано, все должно работать. Но иногда компромиссы в особом случае, чтобы иметь возможность извлечь максимальную производительность, могут рассматриваться как соответствующие. Я воздержусь от комментариев о том, хорошо это или нет.
Разработчики игр расширяют границы графических процессоров. Мы можем провести аналогию с игрой и игровым движком. Чем более продвинуты требования к игре, тем более продвинутым должен быть игровой движок для ее поддержки. Это то же самое с видеокартами.
Компьютерные игры и производители графических процессоров - хорошие товарищи. В их интересах работать вместе над улучшением графического процессора, тем самым улучшая игру. Это классические программные парни, работающие с аппаратными парнями. Обе стороны могут что-то добавить, когда речь заходит о разработке интерфейса между программным и аппаратным обеспечением. Этот интерфейс является драйвером.
Эти обновления могут включать в себя исправления ошибок, обнаруженные разработчиками программного обеспечения, или улучшения, внесенные разработчиками аппаратного обеспечения для поддержки требований разработчиков ПО. Вы найдете эти отношения во всем.
Вероятно, причина включения конкретных игр в примечания к выпуску обновления драйверов - это PR. Это не только показывает, что производитель карт X будет очень хорошо работать с игрой Y, но и показывает, что игра Y будет еще лучше, чем была раньше.
Вполне вероятно, что команда разработчиков игры столкнулась с ошибкой драйвера графического процессора, из-за которой игра не работала правильно, если ошибка драйвера не была исправлена.
Это также иногда маркетинговый трюк . Например, ATI / AMD недавно поставили копию Dirt 3 со своими новыми графическими процессорами и выдвинули идею играть с Eyefinity с 3 мониторами в этой игре.
Так что это немного симбиоз.
Поставщик графического процессора: Эй! Эта новая функция! Никто не использует это!
Разработчик игры: мы могли бы использовать это! Поставить нашу игру на свой графический процессор, который использует эту функцию?
Производитель GPU: Черт возьми!
Правда в том, что графические процессоры не требуют специфичных для игры драйверов.
Драйверы для конкретных игр являются частью маркетинговых усилий производителей графических процессоров, направленных на то, чтобы попытаться превзойти других производителей графических процессоров. Если они могут показать лучшую производительность в популярных играх, настроив свои драйверы для этих конкретных игр, то (согласно теории) они привлекут больше игроков из этих игр.
Это почти все, что нужно сделать.