Commit 9d525102 authored by 24.128.162.11's avatar 24.128.162.11
Browse files

No commit message

No commit message
parent 05ce0596
= Nvidia Optimus =
Optimus means having an Nvidia GPU and another (always Intel?) GPU in a laptop. It may require that the Nvidia GPU has the PCOPY engine, but other than that, it is pretty much just a marketing term for a dual-GPU laptop.
'Optimus technology' is a software [and possibly hardware] solution to automatically switching between an integrated graphics chip or IGP (such as on onboard intel chip) and a more powerful [nvidia] graphics chip for laptops specifically. The precursor to this technology was 'switchable graphics,' in which the user could manually switch between the graphics card. It may require that the Nvidia GPU has the PCOPY engine.
== Why is Optimus a huge problem? ==
There is currently no kernel-land support for optimus.
In short, it is a mess.
A graphics card has a GPU, some memory which may be dedicated (VRAM) or just a piece of system memory (like in many IGPs), and outputs (connectors) where you plug in a monitor. Also the laptop internal display panel is a monitor in this sense.
== Why is Optimus not currently supported under Linux? ==
What makes Optimus a mess is, that you do not know what outputs are connected to which GPU, or if there is a hardware switch (a mux) in between. The mux would be controlled in software.
First lets review:
The mux, if it exists, can be used to select which GPU drives the internal panel. Or, which GPU drives the external monitor. Or, both.
Also, it is possible, that a GPU is hardwired to the internal panel, so the other GPU cannot drive the internal panel. The same with the external monitor output, it may be hardwired to one of the GPUs, or there might be a mux. A bad case scenario is, that the Intel GPU is hardwired to the internal panel and the Nvidia GPU hardwired to the external output, and no way to change that. The best case scenario is a mux, which can select which GPU drivers all the outputs.
The graphics system in a laptop has a gpu with some memory, in the case of an IGP, this memory may be a piece of system memory, but otherwise it is usually dedicated memory living on the GPU. This GPU connects to a laptop display, or output port.
Basically, you can have ''any'' combination of these possibilities. There is no standard how to wire things. There should be ways to detect the wirings and whether there is a mux and where, but the documentation is not available to the developers.
The first problem is that we do not currently have a way to a priori know what outputs (displays) are connected to what GPU's.
Secondly the optimus software might perform the task of switching between the which of the two graphics processors drive your display by directly flipping a hardware switch, called a mux ([[http://en.wikipedia.org/wiki/Multiplexer|multiplexer]].
Detecting the wiring is only difficult. The hard part comes, when you do rendering on a GPU, that cannot drive the output you want. Or the GPU may not be able to drive ''any'' of the outputs. To get the rendered result onto a display, you need to copy it somewhere, where the other GPU, that does drive the output, can access it.
If it does not exist, then there is no mux and thus no physical way to perform this switching. Thus Optimus is used to effectively "implement" a software mux, that is ensure that relevant data is processed on the right GPU and copied to the device that displays the image.
So, we are just missing a simple framebuffer copy, right? Well, we are also missing the whole infrastructure in the kernel DRM drivers, X drivers and the X server itself to support Optimus. Not even the proprietary drivers support it on Linux, save a few exceptions.
Basically, you can have ''any'' combination of possibilities. There is no standard on how to wire things. There should be ways to detect the wirings and whether there is a mux and where, but the documentation is not available to the developers (maybe you can help us figure out how to do this, have any ideas?)
Detecting the wiring is not the only hard part. Currently we are missing the entire infrastructure for doing the image copying between graphics cards as described earlier. Everything from the kernel DRM drivers, X drivers and the X server itself need to be modified to support Optimus. Not even the proprietary drivers support it on Linux, save a few exceptions.
On the other hand, power saving is a key point of Optimus. Switching off a GPU is relatively easy. Everything else is hard.
On the other hand, power saving is a key point of Optimus, and switching off a GPU is relatively easy. If a mux exists and the hardware manufacturer was sane, you might already be able to choose which GPU you use exclusively in your current session. Or you might be able to power off the unused GPU. Everything else is hard.
== What works right now ==
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment