<blockquote>
<p>Any hardware in the graphics card is fixed.</p>
</blockquote>
<p>No, the <em>storage</em> of a graphics card is fixed. How that storage gets used, particularly on any semi-modern graphics card, is flexible.</p>
<p>Essentially, what a graphics display device has is a mechanism for being told, &quot;the bytes of video memory starting at address X is in format Y and size Z; send it at the next vblank period to display device W&quot;. Really old graphics cards had specific memory structures for holding framebuffers, which imposed strict limits on how things could work. But that hasn't been the case on PCs for a good decade at least.</p>
<p>There may be limitations on how many display devices a particular piece of hardware could hypothetically output to, or the sizes and formats which the hardware can use. Some hardware devices may only be able to use non-virtualized GPU addresses (which I'd guess is why NVIDIA has special memory types for allocating render targets) or somesuch, but even that is a matter of the user interface, not what the internal hardware is doing. As far as the display device's output is concerned, it could use more or less any GPU memory address.</p>
<p>So, what happens when you plug in a new display device? The OS allocates a framebuffer's (or two) worth of video memory for that display device's video output. If you change the resolution of a display device, the OS allocates a differently-sized slice of memory and frees the prior framebuffer allocation. And so forth.</p>

CC BY-SA 4.0
2021-03-05T01:40:02.880Z
2021-03-05T01:40:02.880Z
Nicol Bolas
<p>Modern operating systems support a wide range of resolutions. Mine ranges from 800x600 to 1920x1080. They also support multi-displays. I've never tried it but I have seen other users with 2 or 3 monitors.</p>
<p>I'd like to know some details about how this is all supported. The trivial way is to size the graphics card buffer for the largest possible display, and then crop off any unused parts before sending it out the video port. But a little math, so 1920x1080, 24 bit color, is about 6.2 MB, which is not that big at all for a piece of VRAM. However, then we get to multi-display. What is a reasonable max number for displays? 4? 8? And then don't forget you want to support high frame rates of at least 60 fps, maybe 120 or even 240. Then remember you should support double- or even triple-buffering.</p>
<p>Not to mention, I have seen bigger rez monitors online that advertise themselves as compatible with Windows 7 and 10. So it seems to me that just providing the max possible buffer size is not feasible. The &quot;max&quot; changes too rapidly these days.</p>
<p><strong>TLDR:</strong> I can understand if every monitor and GPU comes with its own driver. What I'm trying to understand is how <strong>one set of hardware</strong> can support a very wide range of screen resolutions <strong>without being trivially wasteful</strong>. Is there some clever way of doing this?</p>
<p>Disclaimer: I'm a CS guy and don't keep up with modern hardware. I used to read a little about various hardware back in late 90s / early 00s, but never worked on it career-wise or hobby-wise. I can build my own comp and understand basic specs of most parts, but the graphics capabilities are the biggest mystery and &quot;dark arts&quot; to me (other than RAM timings).</p>

CC BY-SA 4.0
2021-03-04T22:38:46.887Z
I don't understand the question. Why is the obvious solution (ie: using a memory sized for the current resolution/number of screens) not simply the way it gets handled?
Nicol Bolas
CC BY-SA 4.0
2021-03-05T00:45:38.837Z
@NicolBolas Any hardware in the graphics card is fixed. How big do you think the frame buffer should be? Enough for 4K on 4 monitors? Yet the vast majority of ppl use less than 4K rez on less monitors than that. But a single set of hardware can, ostensibly, support such huge things. That's what i mean by "trivially wasteful" and figured there was a better way.
DrZ214
CC BY-SA 4.0
2021-03-05T00:46:30.177Z
I found a supporting statement on a related question here: ( https://computergraphics.stackexchange.com/questions/7952/why-isnt-multi-gpu-handled-by-the-driver ), where the answer says `Once the slave is done, it sends its render to the master to combine into one image before sending it to the monitor.` So that suggests there are ways of using smaller VRAM or framebuffer to combine into bigger image, but i'm hoping for more details than just the abstract concept.
DrZ214
CC BY-SA 4.0
2021-03-05T00:50:18.267Z
"*Any hardware in the graphics card is fixed.*" There are only X bytes of RAM, but what you *use it for* is not necessarily fixed. Why do you think that a GPU would be restricted to having fixed, hardware-bound images for render targets or display targets? That is, why do you think the hardware would say that physical GPU address range X to Y is framebuffer memory and only that can be output to a display device?
Nicol Bolas
CC BY-SA 4.0
2021-03-05T03:04:53.790Z
@NicolBolas I guess i'm just not imagining a flexible RAM (on graphics card) because I'm used to the idea that RAM is slow. I figured there was something much more dedicated to **only** the final display picture (or any surface / rendertarget), for the sake of hardware acceleration. I guess i was wrong. Your answer makes a lot of sense.
DrZ214
CC BY-SA 4.0
2021-03-05T03:29:33.267Z
"*RAM is slow*" Even if that's true, it doesn't need to be especially fast.Once you have image data stored into it, you have somewhere between 16 and 8ms to transmit it to the display device. Plenty of time even by CPU RAM standards.
Nicol Bolas
<gpu><hardware>
How does the OS + hardware support multiple screen resolutions and multi-display?
DrZ214
# How does the OS + hardware support multiple screen resolutions and multi-display?

(Asked by: username_0 on 2021-03-04)

Modern operating systems support a wide range of resolutions. Mine ranges from 800x600 to 1920x1080. They also support multi-displays. I've never tried it but I have seen other users with 2 or 3 monitors.

I'd like to know some details about how this is all supported. The trivial way is to size the graphics card buffer for the largest possible display, and then crop off any unused parts before sending it out the video port. But a little math, so 1920x1080, 24 bit color, is about 6.2 MB, which is not that big at all for a piece of VRAM. However, then we get to multi-display. What is a reasonable max number for displays? 4? 8? And then don't forget you want to support high frame rates of at least 60 fps, maybe 120 or even 240. Then remember you should support double- or even triple-buffering.

Not to mention, I have seen bigger rez monitors online that advertise themselves as compatible with Windows 7 and 10. So it seems to me that just providing the max possible buffer size is not feasible. The "max" changes too rapidly these days.

**TLDR:** I can understand if every monitor and GPU comes with its own driver. What I'm trying to understand is how **one set of hardware** can support a very wide range of screen resolutions **without being trivially wasteful**. Is there some clever way of doing this?

Disclaimer: I'm a CS guy and don't keep up with modern hardware. I used to read a little about various hardware back in late 90s / early 00s, but never worked on it career-wise or hobby-wise. I can build my own comp and understand basic specs of most parts, but the graphics capabilities are the biggest mystery and "dark arts" to me (other than RAM timings).

**Tags:** gpu, hardware

> **Comments:**
> **username_1**: I don't understand the question. Why is the obvious solution (ie: using a memory sized for the current resolution/number of screens) not simply the way it gets handled?  
> **username_0**: @username_1 Any hardware in the graphics card is fixed. How big do you think the frame buffer should be? Enough for 4K on 4 monitors? Yet the vast majority of ppl use less than 4K rez on less monitors than that. But a single set of hardware can, ostensibly, support such huge things. That's what i mean by "trivially wasteful" and figured there was a better way.  
> **username_0**: I found a supporting statement on a related question here: ( https://computergraphics.stackexchange.com/questions/7952/why-isnt-multi-gpu-handled-by-the-driver ), where the answer says `Once the slave is done, it sends its render to the master to combine into one image before sending it to the monitor.` So that suggests there are ways of using smaller VRAM or framebuffer to combine into bigger image, but i'm hoping for more details than just the abstract concept.  
> **username_1**: "*Any hardware in the graphics card is fixed.*" There are only X bytes of RAM, but what you *use it for* is not necessarily fixed. Why do you think that a GPU would be restricted to having fixed, hardware-bound images for render targets or display targets? That is, why do you think the hardware would say that physical GPU address range X to Y is framebuffer memory and only that can be output to a display device?  
> **username_0**: @username_1 I guess i'm just not imagining a flexible RAM (on graphics card) because I'm used to the idea that RAM is slow. I figured there was something much more dedicated to **only** the final display picture (or any surface / rendertarget), for the sake of hardware acceleration. I guess i was wrong. Your answer makes a lot of sense.  
> **username_1**: "*RAM is slow*" Even if that's true, it doesn't need to be especially fast.Once you have image data stored into it, you have somewhere between 16 and 8ms to transmit it to the display device. Plenty of time even by CPU RAM standards.  

---

## 1 answers

### Answer by username_1 on 2021-03-05. Score: 1 | Accepted answer

> Any hardware in the graphics card is fixed.

No, the *storage* of a graphics card is fixed. How that storage gets used, particularly on any semi-modern graphics card, is flexible.

Essentially, what a graphics display device has is a mechanism for being told, "the bytes of video memory starting at address X is in format Y and size Z; send it at the next vblank period to display device W". Really old graphics cards had specific memory structures for holding framebuffers, which imposed strict limits on how things could work. But that hasn't been the case on PCs for a good decade at least.

There may be limitations on how many display devices a particular piece of hardware could hypothetically output to, or the sizes and formats which the hardware can use. Some hardware devices may only be able to use non-virtualized GPU addresses (which I'd guess is why NVIDIA has special memory types for allocating render targets) or somesuch, but even that is a matter of the user interface, not what the internal hardware is doing. As far as the display device's output is concerned, it could use more or less any GPU memory address.

So, what happens when you plug in a new display device? The OS allocates a framebuffer's (or two) worth of video memory for that display device's video output. If you change the resolution of a display device, the OS allocates a differently-sized slice of memory and frees the prior framebuffer allocation. And so forth.


---

