|
From: Zou, N. <nan...@in...> - 2012-07-24 07:44:32
|
We have check the sematic of GL_DYANMIC_DRAW,
seems that it the Skia usage of GZL_DYNAMIC_DRAW is wrong.
Thanks
Zou Nanhai
From: Zou, Nanhai [mailto:nan...@in...]
Sent: Tuesday, July 24, 2012 11:25 AM
To: mesa3d-dev (Mes...@li...)
Cc: Versace, Chad; Ian Romanick (id...@fr...)
Subject: [Mesa3d-dev] Correct behavior of GL_DYNAMIC_DRAW in glBufferData?
Hi,
I have notice that in current driver implementation.
When GL_DYNAMIC_DRAW flag is set in glBufferData, driver will not upload data to
Graphics memory.
Instead it will upload the _entire_ vertex/index buffer when glDrawElements/glDrawArray was called.
This sometimes brings a huge bottleneck ,
e.g. in Skia.
Skia allocate a 256k vertexdata buffer and a 64k indexdata buffer as pools, and use glBufferData to upload the pools.
Most of the Skia draw operations will only use a few vertexes in the pool, but driver will upload the _entire_
buffer each operation.
This becomes No 1 bottleneck for Skia bench with GPU.
I have tested if reduce the pool size to 1k, many tests in Skia bench get 3x to >10x performance improvement...
Per my understanding. Even GL_DYNAMIC_DRAW is set in glBufferData, driver should not copy the entire buffer
When glDrawElements/glDrawArray is called, it should copy only used vertex/index.
Otherwise this is too heavy in Skia like usage scenario.
Thanks
Zou Nanhai
|