Итак народ, мне стало интересно потестить насколько OpenGL медленнее DirectX 11.
Я уже не однократно замечал, что OGL работает всегда чуть медленнее DX, даже когда ботлнек на стороне GPU. Это странно.
Так вот, я подготовил семпл, который может на лету переключаться с DX11 на OGL и обратно. Интересно увидеть цифры на разных видеокартах.
Собственно семпл вот: JF
В архиве картинка и 2 экзешника.
Экзешник JFDistanceField_manualGLSL.exe содержит GLSL шейдера, вручную переписанные мной с HLSL.
Экзешник JFDistanceField_HLSLCC.exe содержит GLSL шейдера, сконвертированные из скомпилированного HLSL с помощью https://github.com/MrShoor/HLSLCrossCompiler
На моей Win10 под GF 980 оно выдает:
manualGLSL:
DirectX11 = ~500 FPS
OpenGL = ~445 FPS
HLSLCC:
OpenGL = ~455 FPS
То есть DX процентов на 10 быстрее чем OGL.
upd. Результаты, выложенные народом тут:
Считались по этой формуле: (OGL-DX)/DX*100%
Проценты в скобочках - на шейдерах, переписанных мной вручную (JFDistanceField_manualGLSL.exe). Перед скобочками - на шейдерах, сконвертированных бездушной машиной (JFDistanceField_HLSLCC.exe). Одно число по середине - неизвестно какая версия измерялась.
GF980 Win10 : -11% (-9%) GF970 Win7 : -10.5% (-9.8%) hd 5770 : -3.2% (-3.2%) hd 5650 Win7 : -3.8% (-3.8%) hd 4000 : -34.6% (-23%) gtx980M : -6.8% R7 265 : -5% GF260 Win10 : +5% (+15.2%) R9 280 Win10 : 0% GF960 : -4.1% GF210 : сильно скачет GF540M : -44.4% (-5.7%) GF690 Win10 : +2% GF660 : +1% (+4.2%) GF760 Win7 : -40.9% (-8.9%) GF970 Win10 : -7.4% (-8.7%) GF840M Win8.1 : crash (-1.8%) R7 240 Win7 : -1.4% (0%) GF960 Win10 : -3.9% (-5%) GF540M Win10 : -47% (???) GF1080 Win10 : -5.3% (-5.3%) GF720 Win8.1_x86 : +4.3% (---) R HD 7950 Win7 : -3.4% (-3.4%) GF640M Win8.1 : +2% (+2%) hd 4000 : crash (-7.4%) GF650 : -4.8% (-3.8) HD5450 Win7 : 0% (0%)
JFDistanceField_HLSLCC:
DX: 410
GL: 370
JFDistanceField_manualGLSL:
DX: 410
GL: 367
Win7 x64, GTX 970, i5-6600.
static_cast
> Хотя... 10%? Подозрительно. Как то слишком круто для забытого, никому ненужного GAPI [OpenGL].
Ну это на NVidia карточке. Мне кажется на других картах разница будет больше. Собственно для этого тему и создал.
А-А-ХА-ХА-ХА! Я ТАК И ЗНАЛ !!! 92 (DX) против 89 (OGL) фпс (hd 5770) !!! 92 > 89! Что же мы имеем? OpenGL унижен, ещё раз!
Автор сделал большую ошибку! Скоро все окажутся от OGL, зная, насколько он медленный !!!
static_cast
Чет как-то мало, 3% разница.
Нее, это не катит.
Чтобы померить скорость апи, надо сабмитить много батчей с разной степенью забатченности. При этом, нужно менять всякие интересные стейты типа альфаблендинга, или, там, формат вершин, и умиляться, как драйвер перекомпилирует шейдеры прям во время дро колла. Тестировать на обоих вендорах.
Если же у тебя в демке всего несколько фуллскрин пассов, то ты не "скорость апи" измеряешь, а скорость шейдерных юнитов на твоей видюхе. Ну и в некотором смысле, эффективность оптимизаций шейдерного кода компилятором.
Wraith
> Нее, это не катит.
всё катит
Wraith
> Чтобы померить скорость апи, надо сабмитить много батчей с разной степенью
> забатченности.
Это зависит от того, что я хочу измерять.
Wraith
> Ну и в некотором смысле, эффективность оптимизаций шейдерного кода
> компилятором.
Фактически я это и измеряю. Семпл как раз собран таким образом, чтобы именно GPU был завален работой. А чтобы хоть как-то помочь OpenGL - в семпле JFDistanceField_HLSLCC.exe GLSL шейдера транслирванные из скомпилированного и оптимизированного HLSL кода. Но что-то оно ему не очень помогает.
В обоих экзешниках DX: 26 fps, OGL: 25 fps. то есть DX быстрее на 4%
win7, amd mobility hd 5650
MrShoor
JFDistanceField_manualGLSL.exe
DX11 26
OGL 20
JFDistanceField_HLSLCC.exe:
Intel HD 4000
Автор MSAA 4х или 8х было в тестах включено ?
Что то подсказывает что просадка будет еще на OpenGL при включенном MSAA.
GL 340
DX11 365
gtx980M
Это к тому, что микрософты в своей винде так специально сделали или к тому, что опенгл реально медленнее?
Хороший вопрос !
Ну теоритически Микрософт разработал свою Шинду, потому знает лучшие варианты как делать быстрые дрова и общаться с железом.
И Микрософт не гласно, толкает в перед только DX. OpenGL Микрософт не любит.
Тема в архиве.