GPU memory allocation limit on Directx9/Windows 8

Started by
7 comments, last by Brzegu 9 years ago
I have simple DirectX 9.0c desktop application which load 10 huge textures (8192x8192 and 16384x16384).
I run in on ASUS GTX TITAN 12 GB.
On Windows 7 it runs ok and correctly allocates 7GB, but the same application on Windows 8.1 stops allocation texture memory at about 4GB.
1. Do you have any idea what could be a reason of this limit?
2. Are there any differences regarding to GPU memory allocation between Windows 7 and Windows 8?
Thanks for any tips,
Brzegu
Advertisement
I dont know about Win7/8 differences, but... Is it a 64bit app?

Sounds like internally, The D3D layer is using a 32bit address space to manage GPU memory.

Keep in mind that D3D9 is a legacy technology, which was created way before 64bit address space was common. You'll probably have much more stable results with D3D11 sad.png
Both windows x64?

Edit: I'm too slow :(

Yes. It is 64bit app.

Any other reason why texture allocation fails even on GPU is still available memory?

Yes. It is 64bit app.

Any other reason why texture allocation fails even on GPU is still available memory?

Because it's run out of address space ?

Because it's ram is fragmented and cannot allocate continious block of say 256MB ?

If you can, try to switch to DX11, if you cant (to much effort in rewriting things) try to create D3D9Ex device (you will still need some changes, but not as drastic as while switching from 9 to 11).

Try to use nvidia tools (nsight, perfhud, nvapi) to see what's going on on driver land (I dont know if any of those tools still can be used with d3d9, if not, try older versions of them, but I'm affraid that they are tied to driver versions)

Thanks MxADD for tips. I'll try this with D3D9Ex device.

The strange in this issue is that on Windows 7 it works ok. But on Win 8, when I allocate texture by D3DXCreateTextureFromFileExW() , I get D3DERR_OUTOFVIDEOMEMORY about 4G.

I have a dumb question. You are running these two operating systems on the same machine right? Is it possible that one OS is running the GPU you intend, while the other is using the built in GPU that comes with the motherboard?

Hi cephalo,

Thanks for tip. But I'm sure both are using Titan. I see it on my diagnosing tools.

Update: On Win 8 I can allocate only about 4BG for textures but for vertex buffers I can allocate about 8GB.
Is that possible that driver have internal limits for data types (textures, buffers, etc)?

This topic is closed to new replies.

Advertisement