dionb wrote:The only relevant thing for video memory vs system memory is that both need to be mapped into the CPU's address space. Any i386 CPU can address 4GB, and I am not aware of any PCI cards coming close to that. With 4GB of RAM and a 32b CPU and/or OS you noticed this, with the video memory being subtracted from system RAM. On an So7 system you can't even come close to that amount of RAM, so non-issue.
Not true! this hasn't been the case since the 286 days... before virtual memory came into play basically. Whats the point of having dedicated VRAM if you have to have everything in RAM? Also you never work with raw addresses of the VRAM, you have to request VRAM from the driver, which handles management for you. Even with asynchronous API's like vulkan, although you have more control (responsibility) for managing this yourself, you are restricted by the size of buffers that the API supports (and traditionally pow2 buffer sizes), so there is no chance of requesting a memory block that would get anywhere near the 32-bit addressable limit.
bakemono wrote:I've heard that PCI (and presumably PCIe and AGP) cards map their memory into a 256MB window on 32-bit systems, even if the card has more than 256MB on it. So even if you're bumping into the limit of the 4GB address space, having a video card with 1-2GB or more would not be an issue. Can anyone confirm?
There is no 'standard'. The memory consumption in RAM is completely dictated by the driver, which can choose to map anything it likes, but is unlikely to map everything. In fact I would go so far to say that it doesn't map much due to limiting bandwidth between VRAM and RAM (even with AGP 😵). The consumption in host RAM will depend on the what is requested by the application, and how the driver manages the buffers for the context. Bad drivers may do a lot of swapping even when not explicitly requested, good drivers don't.
All texture/data needs to be uploaded to VRAM, and once uploaded can be freed (and should be) from RAM by the application since there is little to no point to keep it in the hosts memory (so VRAM is not, by default, mapped). This is, and has been standard practice by pixel pushing code monkeys since the dawn of abstracted API's. The exception is when an application explicitly requests mapped memory via something like a PBO (Pixel buffer objects), or more recently in DX12/vulkan, 'mapped' as opposed to 'host' or 'device' buffers. In these cases, this is mapped to CPU land and would show in the usage as being owned by the application (since it's protected, and the application has access to it).