{"id":2258,"date":"2022-06-19T14:48:45","date_gmt":"2022-06-19T19:48:45","guid":{"rendered":"https:\/\/www.ishygddt.xyz\/~blog\/?p=2258"},"modified":"2023-01-30T19:12:42","modified_gmt":"2023-01-31T01:12:42","slug":"proton-use-wined3d-explained","status":"publish","type":"post","link":"http:\/\/www.ishygddt.xyz\/~blog\/2022\/06\/proton-use-wined3d-explained","title":{"rendered":"[DRAFT] \"PROTON_USE_WINED3D\" explained"},"content":{"rendered":"<p>You might have seen many people online talking about how entering the following infamous Steam launch option boosted their game's framerate:<\/p>\n<pre><code class=\"\" data-line=\"\">PROTON_USE_WINED3D=1\u00a0 %command%<\/code><\/pre>\n<p>I'll answer the following questions<\/p>\n<ul>\n<li>What does this environment variable do?<\/li>\n<li>Do I need to apply it to my system?<\/li>\n<li>Why is it needed at all?<\/li>\n<\/ul>\n<h2>What does <code class=\"language-shell\" data-line=\"\">PROTON_USE_WINED3D=1<\/code> do?<\/h2>\n<p>It signals to <a href=\"https:\/\/github.com\/ValveSoftware\/Proton\">Proton<\/a> to use <a href=\"https:\/\/source.winehq.org\/git\/wine.git\/tree\/wine-7.11:\/dlls\/wined3d\">Wine's Direct3D driver<\/a> instead of its own.<\/p>\n<p>(If you're not currently trying to use Proton, you can stop reading right here. The rest of the article assumes you're trying to use Proton, and want to know with certainty whether, and under what circumstances, you must set this option.)<\/p>\n<h2>Do I need <code class=\"language-shell\" data-line=\"\">PROTON_USE_WINED3D=1<\/code>?<\/h2>\n<p>You need to set it if <em>and only if<\/em> your graphics drivers don't support the <a href=\"https:\/\/www.vulkan.org\/\">Vulkan API<\/a> on your graphics card.<\/p>\n<p>Rationale: Proton's Direct3D driver (purportedly) contains various enhancements that someone with a new graphics card might appreciate. But it <em>requires<\/em> Vulkan to use the GPU <em>at all<\/em>, whereas Wine's Direct3D is\u00a0<em>capable<\/em> of tapping into other acceleration APIs. If you try to use the Proton Direct3D driver (which is the default) and don't have Vulkan, <strong>it will fall back to CPU rendering<\/strong>, which will probably run at an unusably low framerate.<\/p>\n<p>Specifics: you need to set <code class=\"language-shell\" data-line=\"\">PROTON_USE_WINED3D=1<\/code> if your GPU is <strong>as old as or older than<\/strong> the following:<\/p>\n<ul>\n<li>AMD (\u2264TeraScale 3)\n<ul>\n<li>Radeon HD 6000-series<\/li>\n<li>Radeon HD 7670<\/li>\n<li>Radeon HD 8490<\/li>\n<li>Radeon Rx 235X<\/li>\n<li>[TODO: laptop]<\/li>\n<li>[TODO: APUs]<\/li>\n<\/ul>\n<\/li>\n<li>NVIDIA (\u2264Fermi)\n<ul>\n<li>GeForce GT 625<\/li>\n<li>[TODO: laptop]<\/li>\n<\/ul>\n<\/li>\n<li>Intel (\u2264Broadwell)\n<ul>\n<li>HD Graphics 5500<\/li>\n<li>HD Graphics for 5th Generation Intel Processors<\/li>\n<li>Iris Pro Graphics 6200<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>You do <em>not<\/em> (except as caveatted) need to configure <code class=\"language-shell\" data-line=\"\">PROTON_USE_WINED3D<\/code> if your GPU is <strong>as new as or newer than<\/strong> the following:<\/p>\n<ul>\n<li>AMD (\u2265GCN 1), released December 2013\n<ul>\n<li>Radeon HD 7730 \"Cape Verde LE\"<\/li>\n<li>Radeon HD 8570 \"Oland\"<\/li>\n<li>Radeon Rx 240 \"Oland\"<\/li>\n<li>Radeon Rx 300-series<\/li>\n<li>See footnote\u2665 for caveat<\/li>\n<li>[TODO: laptop]<\/li>\n<li>[TODO: APUs]<\/li>\n<\/ul>\n<\/li>\n<li>NVIDIA (\u2265Kepler), released September 2012\n<ul>\n<li>GeForce GT 630<\/li>\n<li>See footnote\u2666 for exceptions<\/li>\n<li>See footnote\u2660 for caveat<\/li>\n<li>[TODO: laptop]<\/li>\n<\/ul>\n<\/li>\n<li>Intel (\u2265Skylake), released August 2015\n<ul>\n<li>HD Graphics 510<\/li>\n<li>HD Graphics for 6th Generation Intel Processors<\/li>\n<li>Iris Pro Graphics 580<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\u2665 Older versions of Mesa don't support Vulkan on GCN 1 cards (released between January 2012 and June 2016).<\/p>\n<p>If you think your card might be GCN 1, check it against this table:<\/p>\n<ul>\n<li>Radeon HD 7000-series:\n<ul>\n<li>Models 7730\u20137990 (inclusive) are GCN 1.<\/li>\n<li>Exception: 7790 is GCN 2.<\/li>\n<\/ul>\n<\/li>\n<li>Radeon HD 8000-series:\n<ul>\n<li>Models 8570\u20138990 (inclusive) are GCN 1.<\/li>\n<li>Exception: 8770 is GCN 2.<\/li>\n<\/ul>\n<\/li>\n<li>Radeon Rx 200-series:\n<ul>\n<li>Models 240\u2013280 (inclusive; including X variants) are GCN 1.<\/li>\n<li>Exception: 260 (and X variant) is GCN 2.<\/li>\n<\/ul>\n<\/li>\n<li>Radeon Rx 300-series:\n<ul>\n<li>Models 330\u2013370 (inclusive; including X variants) are GCN 1.<\/li>\n<li>Exception: 360 is GCN 2.<\/li>\n<\/ul>\n<\/li>\n<li>Radeon RX 400-series:\n<ul>\n<li>Models 430\u2013450 (inclusive) are GCN 1.<\/li>\n<\/ul>\n<\/li>\n<li>Radeon RX 500-series:\n<ul>\n<li>Model 520 is GCN 1.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>If your GPU is older (\u2264TeraScale 3) or newer (\u2265GCN 2), your Mesa version does not matter, so ignore the rest of this footnote.<\/p>\n<p>If your GPU is GCN 1, you should check your Mesa version.<\/p>\n<p>To check your Mesa version, paste this command into the Terminal and press Enter:<\/p>\n<pre><code class=\"language-shell\" data-line=\"\">glxinfo | grep -E &#039;Mesa [v0-9][^ ]*&#039;<\/code><\/pre>\n<p>If you have <strong>Mesa version 20.0 or newer<\/strong>, it doesn't matter whether you have a GCN 1 card, so ignore the rest of this footnote.<\/p>\n<p>If you have a GCN 1 GPU <em>and<\/em> an older version of Mesa, then I would recommend updating to any Mesa version \u226520.0.<\/p>\n<p>An easy way to update Mesa on Ubuntu is to add <a title=\"ppa:oibaf\/graphics-drivers\" href=\"https:\/\/launchpad.net\/~oibaf\/+archive\/ubuntu\/graphics-drivers\">this repository<\/a> to your system and then run a system update and reboot; this worked for me on Ubuntu 20.04.3 LTS as of the time of writing this post (mid June 2022). The PPA has been running for <a title=\"Phoronix: \u201cOibaf (PPA) Keeps Making Ubuntu GPU Driver Upgrades Easy\u201d\" href=\"https:\/\/www.phoronix.com\/scan.php?page=article&amp;item=ubuntu_1310_oibaf\">nearly 10 years now<\/a>, so it's somewhat vetted.<\/p>\n<p>If you have a GCN 1 GPU <em>and<\/em> an older version of mesa <em>and<\/em> do not want to update Mesa, then you must set <code class=\"language-shell\" data-line=\"\">PROTON_USE_WINED3D=1<\/code> to play Proton games with good performance.<\/p>\n<p>\u2660 Until either <a href=\"https:\/\/www.phoronix.com\/scan.php?page=news_item&amp;px=Red-Hat-NVK-NVIDIA-Vulkan\">Red Hat<\/a> or <a href=\"https:\/\/developer.nvidia.com\/blog\/nvidia-releases-open-source-gpu-kernel-modules\/\">NVIDIA<\/a> gets Vulkan-supporting open-source drivers usable, you <em>must<\/em> use NVIDIA's closed-source driver to access Vulkan on an NVIDIA GPU.<\/p>\n<p>\u2666 Exceptions: GeForce GT 630 Rev. 1, GeForce GT 630 GDDR5, GeForce GT 640 OEM, GeForce GT 645 OEM; all of these cards do not support Vulkan and so will require you to set <code class=\"language-shell\" data-line=\"\">PROTON_USE_WINED3D=1<\/code>.<\/p>\n<h2>Why do I need to set <code class=\"language-shell\" data-line=\"\">PROTON_USE_WINED3D=1<\/code>?<\/h2>\n<p><em>Why<\/em> do you, a gamer, need to set environment variables manually to fix a <em>solved problem<\/em>? <em>Why<\/em> does Proton fall back to CPU rendering with no error message? <em>Why<\/em> did you, a human, have to cross-reference your GPU model against the above tables written and maintained by me, a human, when your <strong>computer itself<\/strong> could have easily just autodetected Vulkan support and selected the best available driver?<\/p>\n<p>This was <a href=\"https:\/\/github.com\/ValveSoftware\/Proton\/pull\/1749#issuecomment-489606572\">a decision<\/a> by the Proton developers. They did it to <em>emphasize<\/em> to users that they do not \"support\" Wine's Direct3D renderer. Remember that\u00a0<strong>Valve is not a charity<\/strong>; they forked Wine to create a <em>promotional add-on<\/em> to sell more Steam games. If you get rid of your old PC, you're more likely to buy a Steam Deck or a high-end gaming rig, and thereby become eligible to buy even more games from them. (Frankly, instead of being annoyed at a lack of\u00a0<em>automatic<\/em> wined3d fallback, one should probably be <em>grateful<\/em> that we're even allowed to configure it manually!)<\/p>\n<hr \/>\n<p>GIANT hat-tip to the editors of the following Wikipedia pages, which were powerhouses that I could not have written this summary without access to:<\/p>\n<ul>\n<li><a href=\"https:\/\/en.wikipedia.org\/wiki\/Graphics_Core_Next\">Graphics Core Next<\/a><\/li>\n<li><a href=\"https:\/\/en.wikipedia.org\/wiki\/Fermi_(microarchitecture)\">Fermi (microarchitecture)<\/a><\/li>\n<li><a href=\"https:\/\/en.wikipedia.org\/w\/index.php?title=Vulkan&amp;diff=853248549&amp;oldid=prev\">Vulkan@853248549<\/a><\/li>\n<li><a href=\"https:\/\/en.wikipedia.org\/wiki\/Radeon_HD_7000_series\">Radeon HD 7000 Series<\/a><\/li>\n<li><a href=\"https:\/\/en.wikipedia.org\/wiki\/Radeon_HD_8000_series\">Radeon HD 8000 Series<\/a><\/li>\n<li><a href=\"https:\/\/en.wikipedia.org\/wiki\/Radeon_Rx_200_series\">Radeon Rx 200 Series<\/a><\/li>\n<li><a href=\"https:\/\/en.wikipedia.org\/wiki\/Radeon_Rx_300_series\">Radeon Rx 300 Series<\/a><\/li>\n<li><a href=\"https:\/\/en.wikipedia.org\/wiki\/Radeon_RX_400_series\">Radeon RX 400 Series<\/a><\/li>\n<li><a href=\"https:\/\/en.wikipedia.org\/wiki\/GeForce_500_series\">GeForce 500 Series<\/a><\/li>\n<li><a href=\"https:\/\/en.wikipedia.org\/wiki\/GeForce_600_series\">GeForce 600 Series<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Explaining why the Steam launch option \u201c<code class=\"\" data-line=\"\">PROTON_USE_WINED3D=1\u00a0 %command%<\/code>\u201d sometimes fixes things, and whether YOU are cargo-culting or genuinely need it<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,97,101],"tags":[],"class_list":["post-2258","post","type-post","status-publish","format-standard","hentry","category-drafts","category-original-content","category-writeups"],"_links":{"self":[{"href":"http:\/\/www.ishygddt.xyz\/~blog\/wp-json\/wp\/v2\/posts\/2258","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.ishygddt.xyz\/~blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.ishygddt.xyz\/~blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.ishygddt.xyz\/~blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/www.ishygddt.xyz\/~blog\/wp-json\/wp\/v2\/comments?post=2258"}],"version-history":[{"count":39,"href":"http:\/\/www.ishygddt.xyz\/~blog\/wp-json\/wp\/v2\/posts\/2258\/revisions"}],"predecessor-version":[{"id":2477,"href":"http:\/\/www.ishygddt.xyz\/~blog\/wp-json\/wp\/v2\/posts\/2258\/revisions\/2477"}],"wp:attachment":[{"href":"http:\/\/www.ishygddt.xyz\/~blog\/wp-json\/wp\/v2\/media?parent=2258"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.ishygddt.xyz\/~blog\/wp-json\/wp\/v2\/categories?post=2258"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.ishygddt.xyz\/~blog\/wp-json\/wp\/v2\/tags?post=2258"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}