What exactly is VRAM used for?

My laptop has a nice GPU with dedicated video RAM. But I've noticed while playing Minecraft that the computer doesn't seem to be using it for anything. Only about 100 MB get used at all according to the Windows Task Manager, while it eats up about half my regular RAM.

I had thought that VRAM would be used for storing models and textures and stuff, which would reduce the demand on regular RAM; if that's true, the textures and models must be far smaller than I'd thought. (note that this is a heavily modded install, with much more complex models and textures than your standard Minecraft.)

If it's not true, what is VRAM used for? Is there any way I can get my computer to make better use of it?

13

4 Answers

Video RAM is specifically designed to store anything that is necessary to render a frame of video. When gaming, this includes textures, models, and other graphics-specific data like shader information and lighting maps. Generally, none of this data is stored in main system RAM as you alluded to, although VRAM is not specifically designed to reduce demand on regular RAM.

Minecraft is a bit of a different beast than most games. I'd assume you're playing the Java version for PC. Java is a (relatively) high-level programming language compared to others such as C or C++ which other games will commonly be written in. Because of this, Java is inherently at a disadvantage when it comes to memory usage requirements. This is why your main system memory takes such a huge hit when running Minecraft, a very resource-intensive program written in Java.

I'm not surprised that your video RAM usage is low, though - and truthfully neither should you. As it is only meant to store textures and models, and Minecraft is, well, a game based on cubes and 16x16 textures, I think you can realize why your VRAM usage is so low.

7

Java Minecraft is CPU heavy, but the GPU really has very little to do, graphics-wise it is very simple and graphics resources are very small in comparison to say… Call of Duty. When I say small, I mean very small, 100MB sounds about right.

Because of the “block” design of the game, you can fill the screen with relatively little resources needed. Its like using “Duplo Lego” instead of “Lego Technics.”

Java is an “interpreted” language, meaning it is not compiled down to native instructions. So when it is run, it needs a virtual machine to get the instructions (or bytecode) into something the processor will understand. Your CPU is doing more work than the GPU.

5

The Java VM, like that used in Minecraft will appear to be using a lot of RAM because of the way it will reserve large chunks of system RAM before it uses it. This appears to the OS as the application actually using that much RAM. Java uses its own memory Heap which works somewhat independently from the operating system on which it is running. (it will still use calls for growing the Heap)

The texture loading in minecraft is fairly low. What also might be happening is the way your OpenGL driver is allocating textures. For example, in OpenGL 3.3, GPU buffers can be mapped to memory such that a write and subsequent flush to that memory section causes it to appear inside the GPU's VRAM automagically. The tricky part of this is whether this buffer is truly only on the GPU side, or if it is actually on both the CPU and GPU side and the driver is simply copying it from one buffer to another. The OpenGL spec says the driver can do either at its discretion. The result is that the CPU/Java side allocates lots of address space for the buffer and we may have two copies of the buffer: One on the CPU side and one on the GPU side.

It's also possible that the java program is still storing the images in RAM in its own cache, then loading/unloading it to/from the GPU as it is needed. This would require RAM usage to always be at least the same if not greater than VRAM usage.

More recent video drivers and iterations of OpenGL support HSA Architecture, which enables the VRAM to act like a cache - the program doesn't even "upload" a texture to the GPU - it simply passes a memory address to an already loaded texture, or even references the texture from a file which as been allocated into virtual memory. This makes evaluating resource usage more difficult because now instead of simply using RAM or VRAM, we may be using only memory address ranges in some cases, and some of those ranges could be assigned to RAM and some to disk, and the VRAM could appear limitless or zero-used since, as a cache it is only storing recently-used pages which could change arbitrarily!

2

It's not about poor coding.

I would like to point something out. Modern graphics cards could process a large part of Minecraft in the card itself. Systems like PhysX attempt to do just that—CUDA, OpenCL etc. Consequently, this would increase VRAM usage.

Here's some things that could easily (relatively speaking) be offloaded to the graphics driver:

  • Tick updates of blocks (think leaf blocks dying, lighting updates, etc.)
  • Procedural generation
  • Fluid updates
  • Redstone
  • Physics

However, GPU processing in a shader language (GLSL, HLSL, SPIR-V) is much more difficult and bug prone than a high level language like Java. Thus, all of these things are performed on the CPU.

Although several games have implemented some of that in GPUs before, Minecraft didn't have the large, skilled resource pool that triple-A titles have.


The Math

Suppose Minecraft uses a 32-bit color scheme.

32 bits per color
4 colors per pixel (red, green, blue, alpha)
8 bits per byte
(32 bits * 4 colors per pixel) / 8 bits per byte = 128 / 8 = 16 bytes per pixel.
100MB / 16 bytes per pixel = 6,250,000 pixels
sqrt(6250000) = 2500x2500 image resource in GPU (uncompressed)
2500 pixels wide|tall / 16 pixels wide|tall = 156.25 tiles wide|tall (assuming 16x16 tile size)
156.25 tiles wide * 156.25 tiles tall = ~24,414 16x16 tiles.

In summary, you can store ~24,414, 16x16 tiles in an uncompressed, 32-bit, image resource in VRAM.

This exercise really helped me wrap my head around why Factorio had issues with it's sprite-sheets

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like