mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-04 20:38:06 +02:00
svga: round UBO constant buffer size up/down to multiple of 16 bytes
The svga3d device requires constant buffers to be a multiple of 16 bytes in size. OpenGL UBOs may not fit that restriction. As a work-around, round the size up if possible, else round down. Note that this patch only effects UBO constant buffers (index 1 or higher), not the 0th/default constant buffer. Fixes the game Grim Fandango Remastered. VMware bug 1510130. Reviewed-by: Charmaine Lee <charmainel@vmware.com> Reviewed-by: José Fonseca <jfonseca@vmware.com>
This commit is contained in:
parent
4ea5ed9f51
commit
2bad030ac9
1 changed files with 18 additions and 0 deletions
|
|
@ -704,6 +704,24 @@ emit_consts_vgpu10(struct svga_context *svga, unsigned shader)
|
|||
assert(size == 0);
|
||||
}
|
||||
|
||||
if (size % 16 != 0) {
|
||||
/* GL's buffer range sizes can be any number of bytes but the
|
||||
* SVGA3D device requires a multiple of 16 bytes.
|
||||
*/
|
||||
const unsigned total_size = buffer->b.b.width0;
|
||||
|
||||
if (offset + align(size, 16) <= total_size) {
|
||||
/* round up size to multiple of 16 */
|
||||
size = align(size, 16);
|
||||
}
|
||||
else {
|
||||
/* round down to mulitple of 16 (this may cause rendering problems
|
||||
* but should avoid a device error).
|
||||
*/
|
||||
size &= ~16;
|
||||
}
|
||||
}
|
||||
|
||||
assert(size % 16 == 0);
|
||||
ret = SVGA3D_vgpu10_SetSingleConstantBuffer(svga->swc,
|
||||
index,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue