svga: restrict use of rawbuf for constant buffer access to GL43 device

Restrict use of rawbuf for constant buffer access to GL43 capable
device only.

Fixes glretrace regressions running with SW Renderer.

Reviewed-by: Martin Krastev <krastevm@vmware.com>
Reviewed-by: Zack Rusin <zackr@vmware.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25381>
This commit is contained in:
Charmaine Lee
2022-09-08 15:08:59 -07:00
committed by Marge Bot
parent b46526b7a4
commit d6b9a0a997

View File

@@ -209,19 +209,21 @@ svga_buffer_create_host_surface(struct svga_screen *ss,
*/
sbuf->key.coherent = ss->sws->have_coherent;
/* Set the persistent bit so if the buffer is to be bound
* as constant buffer, we'll access it as raw buffer
* instead of copying the content back and forth between the
* mapped buffer surface and the constant buffer surface.
*/
sbuf->key.persistent = 1;
if (ss->sws->have_gl43) {
/* Set the persistent bit so if the buffer is to be bound
* as constant buffer, we'll access it as raw buffer
* instead of copying the content back and forth between the
* mapped buffer surface and the constant buffer surface.
*/
sbuf->key.persistent = 1;
/* Set the raw views bind flag only if the mapped buffer surface
* is not already bound as constant buffer since constant buffer
* surface cannot have other bind flags.
*/
if ((bind_flags & PIPE_BIND_CONSTANT_BUFFER) == 0) {
sbuf->key.flags |= SVGA3D_SURFACE_BIND_RAW_VIEWS;
/* Set the raw views bind flag only if the mapped buffer surface
* is not already bound as constant buffer since constant buffer
* surface cannot have other bind flags.
*/
if ((bind_flags & PIPE_BIND_CONSTANT_BUFFER) == 0) {
sbuf->key.flags |= SVGA3D_SURFACE_BIND_RAW_VIEWS;
}
}
}