mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-23 06:10:23 +01:00
svga: Temporarily create a sw vertex buf when failed to create a hw buf.
Many apps don't check the return of map buffer so it is better not to fail.
This commit is contained in:
parent
21480fb9e4
commit
6390dbb373
1 changed files with 20 additions and 7 deletions
|
|
@ -410,18 +410,31 @@ svga_buffer_map_range( struct pipe_screen *screen,
|
|||
struct svga_buffer *sbuf = svga_buffer( buf );
|
||||
void *map;
|
||||
|
||||
if(sbuf->swbuf) {
|
||||
if (!sbuf->swbuf && !sbuf->hw.buf) {
|
||||
if (svga_buffer_create_hw_storage(ss, sbuf) != PIPE_OK) {
|
||||
/*
|
||||
* We can't create a hardware buffer big enough, so create a malloc
|
||||
* buffer instead.
|
||||
*/
|
||||
|
||||
debug_printf("%s: failed to allocate %u KB of DMA, splitting DMA transfers\n",
|
||||
__FUNCTION__,
|
||||
(sbuf->base.size + 1023)/1024);
|
||||
|
||||
sbuf->swbuf = align_malloc(sbuf->base.size, sbuf->base.alignment);
|
||||
}
|
||||
}
|
||||
|
||||
if (sbuf->swbuf) {
|
||||
/* User/malloc buffer */
|
||||
map = sbuf->swbuf;
|
||||
}
|
||||
else {
|
||||
if(!sbuf->hw.buf) {
|
||||
if(svga_buffer_create_hw_storage(ss, sbuf) != PIPE_OK)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
else if (sbuf->hw.buf) {
|
||||
map = sws->buffer_map(sws, sbuf->hw.buf, usage);
|
||||
}
|
||||
else {
|
||||
map = NULL;
|
||||
}
|
||||
|
||||
if(map) {
|
||||
pipe_mutex_lock(ss->swc_mutex);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue