Привет я пробую к бледному NFS2012 playonLinxu., я - geeting ошибка
winediag:dxgi_check_d3d10_support Direct3D 10 is not supported on this GPU with the current shader backend
И журнал отладки
err:winediag:init_driver_info Invalid GPU override 8086:0a16 specified, ignoring.
fixme:dxgi:dxgi_output_GetDisplayModeList iface 0x13e6a0, format DXGI_FORMAT_R8G8B8A8_UNORM, flags 0, mode_count 0x32f3a4, desc (nil) partial stub!
fixme:dxgi:dxgi_output_GetDisplayModeList iface 0x13e6a0, format DXGI_FORMAT_R8G8B8A8_UNORM, flags 0, mode_count 0x32f3a4, desc 0x13e1978 partial stub!
fixme:d3d11:D3D11CoreCreateDevice Ignoring feature levels.
fixme:dxgi:dxgi_check_d3d10_support Ignoring adapter type.
fixme:winediag:dxgi_check_d3d10_support Direct3D 10 is not supported on this GPU with the current shader backend.
fixme:system:SystemParametersInfoW Unimplemented action: 59 (SPI_SETSTICKYKEYS)
fixme:system:SystemParametersInfoW Unimplemented action: 53 (SPI_SETTOGGLEKEYS)
fixme:system:SystemParametersInfoW Unimplemented action: 51 (SPI_SETFILTERKEYS)
fixme:thread:SetThreadIdealProcessor (0x70): stub
fixme:thread:SetThreadIdealProcessor (0x8c): stub
fixme:thread:SetThreadIdealProcessor (0x94): stub
fixme:thread:SetThreadIdealProcessor (0x98): stub
TL; Выполнение DR
glxinfo | grep GLSL
— наименьшее количество версии, которую Вы хотите видеть, 3.30 . Иначе Ваш драйвер просто не поддерживает версию GLSL, которую вино использует для реализации DX10.
я также получал ту же ошибку, таким образом, я решил исследовать ее. Сначала мы должны узнать код. Grepping по Винному источнику показывает, что ошибка находится в dlls/dxgi/utils.c:448
. Вот соответствующая часть:
hr = wined3d_get_device_caps(factory->wined3d, adapter->ordinal, WINED3D_DEVICE_TYPE_HAL, &caps);
if (FAILED(hr) || caps.VertexShaderVersion < 4 || caps.PixelShaderVersion < 4)
{
FIXME_(winediag)("Direct3D 10 is not supported on this GPU with the current shader backend.\n");
Так, ошибка вызывается или wined3d_get_device_caps
сбой, или слишком низкими версиями программы построения теней. Смотрение при реализации в dlls/wined3d/directx.c:4884
по возможной причине сбоя показывает, что эти wined3d_get_device_caps
довольно большая функция в‰ строк за 700€, и это имеет только два возврат с в ее теле — сбой, каждый - в‰ строки за 12€ ниже запуска и успешное в конце. Код сбоя похож
if (adapter_idx >= wined3d->adapter_count)
return WINED3DERR_INVALIDCALL;
Рассмотрение названия возвращаемого значения WINED3DERR_INVALIDCALL
, я предположил бы, что строка здесь для случая ошибки — или в Вине или в приложении. У меня есть чувство, что это маловероятно наш случай, поэтому давайте предположим, что функция успешно выполняется, возвратитесь к эти utils.c
и смотрите на другие случаи сбоя, т.е. caps.VertexShaderVersion < 4 || caps.PixelShaderVersion < 4
.
у меня нет работы с графикой, не знал то, что является Версиями Вершины/Пиксельного шейдера. Поиск об этом дает ответ, это это также отнесено как В «программа построения теней modelВ» . Не надежный источник btw, но статья Wikipedia не упоминала управление версиями вообще, настолько лучше чем ничего.
Затем, поиск о модели программы построения теней дает нам статья HLSL, которые, к счастью, имеют таблицы и для версий Пиксельного и для Вершинного шейдера; обе таблицы имеют 4.0
версия, которую ищет вино. Одна последняя вещь: как мы могли найти, поддерживает ли наш драйвер GPU 4,0 версии, если это скорее реализует OpenGL?
ну, это складывается существует статья об обнаружении модели программы построения теней для OpenGL, and†¦ существует сравнение версий для OpenGL и Direct3D! Заключение в кавычки: Direct3D Shader Model 4.0 is equivalent to GLSL version 3.30
.
Позволяют нам узнать, получили ли мы ту версию:
$ glxinfo | grep GLSL
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.00
ну, как Вы видите, оказывается, что драйвер не поддерживал необходимую версию 3.30 в №, я желаю, чтобы Вы были удачливы, тем не менее, если Вы читаете, что, угадайте, что Вы не.
Если Ваши драйверы GPU не поддерживают контексты совместимости, Вы могли бы попытаться добавить ключ реестра, чтобы сказать Вину создавать базовый контекст.
[HKEY_CURRENT_USER\Software\Wine\Direct3D]
"MaxVersionGL"=dword:00030002
Согласно документация :
| +->MaxVersionGL | | [DWORD Value (REG_DWORD): Choose the maximum GL version to request. Currently defaults to version 1.0. | | Set it to 30002 (hexadecimal) or greater to request a core profile context.]
При выполнении $ glxinfo | grep GLSL
только отчеты OpenGL ES, заштриховывающий строку языковой версии, Вы, возможно, были введены в заблуждение. Попробуйте $ glxinfo | grep -e "shading language"
, который сообщает о следующем для меня:
OpenGL core profile shading language version string: 4.20
OpenGL shading language version string: 1.30
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.00