Well I only have the memory trace, and it's very well behaved. There is close to no buffer trashing, and a very small amount of buffers created in total. So clearly they cared about memory performance.
Announcement
Collapse
No announcement yet.
Radeon VRAM Optimizations Coming, But Help Is Needed
Collapse
X
-
The worst offenders were some of the commercial games. Sorted top-10:
Code:minecraft1.bin 233112 buffers tf2_1.bin 163790 buffers etqw1.bin 163691 buffers minecraft2.bin 121314 buffers left4dead2_2.bin 107979 buffers css1.bin 101289 buffers assassin2_1.bin 96464 buffers blackplague1.bin 90760 buffers dungeondefenders1.bin 89381 buffers tf2_2.bin 83916 buffers
Comment
-
Originally posted by curaga View PostThe worst offenders were some of the commercial games. Sorted top-10:
Code:minecraft1.bin 233112 buffers tf2_1.bin 163790 buffers etqw1.bin 163691 buffers minecraft2.bin 121314 buffers left4dead2_2.bin 107979 buffers css1.bin 101289 buffers assassin2_1.bin 96464 buffers blackplague1.bin 90760 buffers dungeondefenders1.bin 89381 buffers tf2_2.bin 83916 buffers
Comment
-
Originally posted by Nille View PostThere are other Numbers available like how many reports you got etc..?
@log0
I bet Minecraft is just plain badly written. The Source games use a DX-GL wrapper which likely causes some of that.
Just a guess, but they might batch geometry (per frame) allocating new buffers while discarding old ones (not reusing them). I've seen code that does this to reduce the number of draw calls. This could result in a few dozen buffer allocations per frame.
Comment
-
Originally posted by curaga View PostThe worst offenders were some of the commercial games. Sorted top-10:
Code:minecraft1.bin 233112 buffers tf2_1.bin 163790 buffers etqw1.bin 163691 buffers minecraft2.bin 121314 buffers left4dead2_2.bin 107979 buffers css1.bin 101289 buffers assassin2_1.bin 96464 buffers blackplague1.bin 90760 buffers dungeondefenders1.bin 89381 buffers tf2_2.bin 83916 buffers
That's not all. The flag PIPE_TRANSFER_DISCARD_WHOLE_RESOURCE (= GL_MAP_INVALIDATE_BUFFER_BIT) usually reallocates the buffer being mapped. The flag PIPE_TRANSFER_DISCARD_RANGE (= GL_MAP_INVALIDATE_RANGE_BIT) usually allocates a temporary buffer for it assist with the transfer. Texture transfers do the same even without the flag.
Finally, it's quite common for games to load objects which are getting close to the player and unload objects which are getting further away from the player. This may result in a lot of buffer allocations and deallocations during game play.
Comment
Comment